/*! For license information please see main.0bc8172f.js.LICENSE.txt */
!function(){var e={4211:function(e,t,a){"use strict";a.d(t,{b:function(){return f},t:function(){return p}});var n=a(363),o=a(5867),i=a(6184);class r extends o.p{constructor(e){super(e),this.Description=void 0,this.Description=(0,i.vD)(e.description,this)}destructor(){let e=0;for(e=0;e<this.Description.length;e++)delete this.Description[e]}}class s{static CreateTableItem(e){return new r(e)}static CreateTableItems(e){const t=[];let a=0;for(a=0;a<e.length;a++)t.push(s.CreateTableItem(e[a]));return t}}class l extends o.p{constructor(e){super(e),this.Description=void 0,this.ColNames=void 0,this.Items=void 0,this.Description=(0,i.vD)(e.description,this),this.ColNames=e.colnames,this.Items=s.CreateTableItems(e.items)}destructor(){let e=0;for(e=0;e<this.Description.length;e++)delete this.Description[e]}}var c=a(4852);class d{static CreateTable(e){const t=c.t.getInstance();if(0==t.CheckID("table",e.id))return t.GlossaryCache[e.id];const a=new l(e);return t.AddToCache("table",a),a}static CreateNewTable(e){const t=c.t.getInstance();if(0==t.CheckID("table",e))return t.GlossaryCache[e];const a=n.D.MakeRequest({searchtype:"id",searchparam:{type:"table",id:e}});return d.CreateTable(a)}}var u=a(5949);class h{constructor(e){this.Content=void 0,this.Tags=void 0,e?(this.Tags=e.tags,this.Content=e.content||""):(this.Tags={},this.Content="")}SubConstructor(e){const t=[];if(e){let a=0;for(a=0;a<e.length;a++){const n=new h(e[a]);t.push(n)}return t}return t}}var m=a(6264);function p(e){let t="";for(const a of e)t+=a.Content+"\n",void 0!=a.SubContent&&(t+=p(a.SubContent));return t}class f extends h{constructor(e,t){super(e),this.Glossary=void 0,this.SubData=void 0,this.SubContent=[],this.DisplayData=null,this.Parent=void 0,this.SubData=e.subcontent,this.Glossary=e.glossary,this.Parent=t}LoadData(){if(this.Tags.desc_type){if("table"==this.Tags.desc_type){const e=this.Tags.id_val;if(null!=e&&void 0!=e&&"string"===typeof e){const t=d.CreateNewTable(e);this.DisplayData=t}}if("question"==this.Tags.desc_type){const e=this.Tags.default;null!=e&&void 0!=e&&(this.DisplayData=e)}}this.SubContent=this.AdvancedSubConstructor(this.SubData)}AdvancedSubConstructor(e){const t=[];if(e){let a=0;for(a=0;a<e.length;a++){const n=u._.CreateAdvancedDescriptionItem(e[a],this.Parent);t.push(n)}return t}return t}async AnswerQuestions(e){if(this.Tags.desc_type&&"question"==this.Tags.desc_type){const t=this.Tags.default,a=this.Tags.question,n=this.Tags.bonus_args?this.Tags.bonus_args:[],o=this.Tags.parent_level,i=this.Tags.track_val?this.Tags.track_val:null;if(null==t||void 0==t||null==a||void 0==a||"string"!=typeof a||null==n||void 0==n||null==o||void 0==o||void 0==i)this.DisplayData=t;else{const o=new m.J;this.DisplayData=await o.runEvent(a,e,n,t,i)}}for(let t=0;t<this.SubContent.length;t++)await this.SubContent[t].AnswerQuestions(e)}}},5867:function(e,t,a){"use strict";a.d(t,{p:function(){return n}});class n{constructor(e){this.Source=void 0,this.ID=void 0,this.Tags=void 0,this.Name=void 0,e?(this.ID=e.id,this.Source=e.source,this.Name=e.name,this.Tags=e.tags):(this.Tags={},this.ID="")}GetName(){return this.Name}GetID(){return this.ID}MatchURL(e){return this.Tags.url_custom?this.Tags.url_custom==e:this.GetID()==e}GetURL(){return this.Tags.url_custom?this.Tags.url_custom.toString():this.GetID()}}},4852:function(e,t,a){"use strict";a.d(t,{t:function(){return n}});class n{constructor(){this.GlossaryCache={},this.TableCache={},this.KeywordCache={},this.ModelCollectionCache={},this.ModelCache={},this.AbilityCache={},this.UpgradeCache={},this.ModelUpgradeCache={},this.EquipmentCache={},this.ModelEquipmentCache={},this.FactionEquipmentCache={},this.FactionCollectionCache={},this.FactionCache={},this.RuleCache={},this.FactionModelCache={},this.ScenarioCache={},this.GloriousDeedCache={},this.GameRulesCache={},this.ExplorationTableCache={},this.ExplorationLocationCache={},this.SkillCache={},this.InjuryCache={},this.SkillGroupCache={},this.PatronCache={}}CheckID(e,t){switch(e){case"glossary":return null==this.GlossaryCache[t];case"table":return null==this.TableCache[t];case"keyword":return null==this.KeywordCache[t];case"gamerule":return null==this.GameRulesCache[t];case"modelcollection":return null==this.ModelCollectionCache[t];case"model":return null==this.ModelCache[t];case"ability":return null==this.AbilityCache[t];case"upgrade":return null==this.UpgradeCache[t];case"modelupgrade":return null==this.ModelUpgradeCache[t];case"equipment":return null==this.EquipmentCache[t];case"modelequipment":return null==this.ModelEquipmentCache[t];case"factionequipment":return null==this.FactionEquipmentCache[t];case"factioncollection":return null==this.FactionCollectionCache[t];case"faction":return null==this.FactionCache[t];case"rule":return null==this.RuleCache[t];case"factionmodel":return null==this.FactionModelCache[t];case"scenario":return null==this.ScenarioCache[t];case"gloriousdeed":return null==this.GloriousDeedCache[t];case"explorationtable":return null==this.ExplorationTableCache[t];case"skill":return null==this.SkillCache[t];case"explorationlocation":return null==this.ExplorationLocationCache[t];case"injury":return null==this.InjuryCache[t];case"skillgroup":return null==this.SkillGroupCache[t];case"patron":return null==this.PatronCache[t];default:return!1}}AddToCache(e,t){switch(e){case"glossary":return void(null==this.GlossaryCache[t.ID]&&(this.GlossaryCache[t.ID]=t));case"table":return void(null==this.TableCache[t.ID]&&(this.TableCache[t.ID]=t));case"keyword":return void(null==this.KeywordCache[t.ID]&&(this.KeywordCache[t.ID]=t));case"gamerule":return void(null==this.GameRulesCache[t.ID]&&(this.GameRulesCache[t.ID]=t));case"modelcollection":return void(null==this.ModelCollectionCache[t.ID]&&(this.ModelCollectionCache[t.ID]=t));case"model":return void(null==this.ModelCache[t.ID]&&(this.ModelCache[t.ID]=t));case"ability":return void(null==this.AbilityCache[t.ID]&&(this.AbilityCache[t.ID]=t));case"upgrade":return void(null==this.UpgradeCache[t.ID]&&(this.UpgradeCache[t.ID]=t));case"modelupgrade":return void(null==this.ModelUpgradeCache[t.ID]&&(this.ModelUpgradeCache[t.ID]=t));case"equipment":return void(null==this.EquipmentCache[t.ID]&&(this.EquipmentCache[t.ID]=t));case"modelequipment":return void(null==this.ModelEquipmentCache[t.ID]&&(this.ModelEquipmentCache[t.ID]=t));case"factionequipment":return void(null==this.FactionEquipmentCache[t.ID]&&(this.FactionEquipmentCache[t.ID]=t));case"factioncollection":return void(null==this.FactionCollectionCache[t.ID]&&(this.FactionCollectionCache[t.ID]=t));case"faction":return void(null==this.FactionCache[t.ID]&&(this.FactionCache[t.ID]=t));case"rule":return void(null==this.RuleCache[t.ID]&&(this.RuleCache[t.ID]=t));case"factionmodel":return void(null==this.FactionModelCache[t.ID]&&(this.FactionModelCache[t.ID]=t));case"scenario":return void(null==this.ScenarioCache[t.ID]&&(this.ScenarioCache[t.ID]=t));case"gloriousdeed":return void(null==this.GloriousDeedCache[t.ID]&&(this.GloriousDeedCache[t.ID]=t));case"explorationtable":return void(null==this.ExplorationTableCache[t.ID]&&(this.ExplorationTableCache[t.ID]=t));case"skill":return void(null==this.SkillCache[t.ID]&&(this.SkillCache[t.ID]=t));case"explorationlocation":return void(null==this.ExplorationLocationCache[t.ID]&&(this.ExplorationLocationCache[t.ID]=t));case"injury":return void(null==this.InjuryCache[t.ID]&&(this.InjuryCache[t.ID]=t));case"skillgroup":return void(null==this.SkillGroupCache[t.ID]&&(this.SkillGroupCache[t.ID]=t));case"patron":return void(null==this.PatronCache[t.ID]&&(this.PatronCache[t.ID]=t));default:return}}static getInstance(){return n.instance||(n.instance=new n),n.instance}}n.instance=void 0,n.instance_163=void 0},4475:function(e,t,a){"use strict";a.d(t,{y:function(){return n}});class n{constructor(){this.userDataCache={},this.userObjectCache={},this.callUserDataCache={},this.publicDataCache={},this.publicObjectCache={},this.callPublicDataCache={},this.achievmentDataCache={},this.callAchievmentCache={},this.warbandDataCache={},this.callWarbandCache={},this.campaignDataCache={},this.campaignHydratedObjectCache={},this.campaignObjectCache={},this.callCampaignCache={},this.campaignUserCache={},this.campaignAnnouncementCache={},this.campaignWarbandCache={},this.gamereportcache={},this.gamereportobjectcache={},this.callGameReportCache={}}static getInstance(){return n.instance||(n.instance=new n),n.instance}CheckCache(e){return this.userDataCache[e]}CheckCallCache(e){return this.callUserDataCache[e]}AddCache(e,t){this.userDataCache[e]=t}AddCallCache(e){this.callUserDataCache[e]=!0}CheckPublicCache(e){return this.publicDataCache[e]}CheckPublicCallCache(e){return this.callPublicDataCache[e]}AddPublicCache(e,t){this.publicDataCache[e]=t}AddPublicCallCache(e){this.callPublicDataCache[e]=!0}CheckAchievementCache(e){return this.achievmentDataCache[e]}CheckAchievementCallCache(e){return this.callAchievmentCache[e]}AddAchievementCache(e,t){this.achievmentDataCache[e]=t}AddAchievementCallCache(e){this.callAchievmentCache[e]=!0}CheckWarbandCache(e){return this.warbandDataCache[e]}CheckWarbandCallCache(e){return this.callWarbandCache[e]}AddWarbandCache(e,t){this.warbandDataCache[e]=t}AddWarbandCallCache(e){this.callWarbandCache[e]=!0}CheckCampaignCache(e){return!!this.campaignDataCache[e]}CheckCampaignObjectCache(e){return!!this.campaignObjectCache[e]}CheckCampaignHydratedObjectCache(e){return!!this.campaignHydratedObjectCache[e]}CheckCampaignCallCache(e){return!!this.callCampaignCache[e]}AddCampaignCache(e,t){this.campaignDataCache[e]=t}AddCampaignObjectCache(e,t){this.campaignObjectCache[e]=t}AddCampaignHydratedObjectCache(e,t){this.campaignHydratedObjectCache[e]=t}AddCampaignCallCache(e){this.callCampaignCache[e]=!0}clearCampaignCache(e){delete this.campaignDataCache[e],delete this.campaignHydratedObjectCache[e],delete this.callCampaignCache[e],delete this.campaignObjectCache[e]}CheckCampaignUserCache(e){return!!this.campaignUserCache[e]}AddCampaignUserCache(e,t){this.campaignUserCache[e]=t}CheckCampaignAnnouncementCache(e){return!!this.campaignAnnouncementCache[e]}AddCampaignAnnouncementCache(e,t){this.campaignAnnouncementCache[e]=t}CheckCampaignWarbandCache(e){return!!this.campaignWarbandCache[e]}AddCampaignWarbandCache(e,t){this.campaignWarbandCache[e]=t}CheckGameReportCache(e){return!!this.gamereportcache[e]}CheckGameReportObjectCache(e){return!!this.gamereportobjectcache[e]}CheckGameReportCallCache(e){return!!this.callGameReportCache[e]}AddGameReportCache(e,t){this.gamereportcache[e]=t}AddGameReportObjectCache(e,t){this.gamereportobjectcache[e]=t}AddGameReportCallCache(e){this.callGameReportCache[e]=!0}}n.instance=void 0},4436:function(e,t,a){"use strict";a.d(t,{T:function(){return n}});class n{constructor(){this.imageDataCache={},this.callCache={},this.imageModelCache={},this.callModelCache={},this.imageFactionCache={},this.callFactionCache={},this.imageProfileCache={},this.callProfileCache={}}static getInstance(){return n.instance||(n.instance=new n),n.instance}CheckCache(e){return this.imageDataCache[e]}CheckCallCache(e){return this.callCache[e]}AddCache(e,t){this.imageDataCache[e]=t}AddCallCache(e){this.callCache[e]=!0}CheckModelCache(e){return this.imageModelCache[e]}CheckModelCallCache(e){return this.callModelCache[e]}AddModelCache(e,t){this.imageModelCache[e]=t}AddModelCallCache(e){this.callModelCache[e]=!0}CheckFactionCache(e){return this.imageFactionCache[e]}CheckFactionCallCache(e){return this.callFactionCache[e]}AddFactionCache(e,t){this.imageFactionCache[e]=t}AddFactionCallCache(e){this.callFactionCache[e]=!0}CheckProfileCache(e){return this.imageProfileCache[e]}CheckProfileCallCache(e){return this.callProfileCache[e]}AddProfileCache(e,t){this.imageProfileCache[e]=t}AddProfileCallCache(e){this.callProfileCache[e]=!0}}n.instance=void 0},2433:function(e,t,a){"use strict";a.d(t,{o:function(){return h}});var n=a(108);async function o(e,t){return await fetch(`${n.a.URL}/wp-json/synod/v1/campaigns/invite-player/cancel`,{method:"POST",headers:{Authorization:`Bearer ${t.token}`,"Content-Type":"application/json"},body:JSON.stringify(e)})}var i=a(9914),r=a(1832),s=a(3834),l=a(4475);class c{constructor(){this.UserProfile=null,this.Complete=!1,this.ListOfCampaigns=[],this.ListOfWarbandCampaigns=[],this.ListOfAdminCampaigns=[],this.ListOfAnnouncements=[],this.ListOfInvites=[],this.ListOfWarbandInvites=[]}async SetLoggedUser(e){const t=await i.e.CreatePrivateUserByID(e);this.UserProfile=t}RemoveLoggedUser(){this.UserProfile=null}async RunInit(){this.IsComplete()||await this.BuildAll()}IsComplete(){return this.Complete}async BuildAll(){this.Complete=!1,this.ListOfCampaigns=[],this.ListOfInvites=[],null==this.UserProfile&&await this.GrabUser();const e=this.GetUserSubmitBasics(!0);if(null!=e){const t=await async function(e){return void 0==e.id?null:await fetch(`${n.a.URL}/wp-json/synod/v1/user/campaigns/`+e.id,{method:"GET",headers:{Authorization:`Bearer ${e.token}`,"Content-Type":"application/json"}})}(e);if(null!=t){const e=await t.json();for(let t=0;t<e.length;t++){const a=await s.x.GetCampaignPublicByID(e[t],void 0,!1);null!=a&&this.ListOfCampaigns.push(a)}}const a=await async function(e){return void 0==e.id?null:await fetch(`${n.a.URL}/wp-json/synod/v1/user/campaign-invites/`+e.id,{method:"GET",headers:{Authorization:`Bearer ${e.token}`,"Content-Type":"application/json"}})}(e);if(null!=a){const e=await a.json();for(let t=0;t<e.length;t++){const a=await s.x.GetCampaignPublicByID(e[t],void 0,!1);null!=a&&this.ListOfInvites.push(a)}}}this.SortMyCampaigns(),this.Complete=!0}async GrabUser(){const e=localStorage.getItem("jwtToken"),t=localStorage.getItem("synodUserId");e&&t&&null==this.UserProfile&&await this.SetLoggedUser(parseInt(t,10))}GetUserSubmitBasics(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];const t=localStorage.getItem("jwtToken");return null==t||void 0==t||1==e&&null==this.UserProfile?null:1==e?{token:t,id:null===(a=this.UserProfile)||void 0===a?void 0:a.GetUserId()}:{token:t};var a}OwnsCampaign(e){for(let t=0;t<this.ListOfAdminCampaigns.length;t++)if(this.ListOfAdminCampaigns[t].GetId()==e)return!0;return!1}InCampaign(e){for(let t=0;t<this.ListOfCampaigns.length;t++)if(this.ListOfCampaigns[t].GetId()==e)return!0;for(let t=0;t<this.ListOfAdminCampaigns.length;t++)if(this.ListOfAdminCampaigns[t].GetId()==e)return!0;for(let t=0;t<this.ListOfWarbandCampaigns.length;t++)if(this.ListOfWarbandCampaigns[t].GetId()==e)return!0;return!1}IsInvited(e){if(null==this.UserProfile)return!1;for(let t=0;t<this.ListOfInvites.length;t++)if(this.ListOfInvites[t].GetId()==e&&this.ListOfInvites[t].IsInvited(this.UserProfile.GetUserId()))return!0;return!1}IsInvitedWarband(e,t){if(null==this.UserProfile)return!1;for(let a=0;a<this.ListOfWarbandInvites.length;a++)if(this.ListOfWarbandInvites[a].GetId()==e&&this.ListOfWarbandInvites[a].IsInvitedWarband(t))return!0;return!1}async ResetCampaignByID(e){this.Complete=!1;let t=null,a=null;for(let n=0;n<this.ListOfCampaigns.length;n++)if(this.ListOfCampaigns[n].GetId()==e){t=await s.x.ResetCampaign(this.ListOfCampaigns[n]),a=n;break}null!=t&&null!=a&&(this.ListOfCampaigns[a]=t,this.SortMyCampaigns()),this.Complete=!0}SortMyCampaigns(){if(this.ListOfAdminCampaigns=[],this.ListOfWarbandCampaigns=[],null==this.UserProfile)return;const e=this.UserProfile.GetWarbandIDList();for(let t=0;t<this.ListOfCampaigns.length;t++)this.ListOfCampaigns[t].IsAdmin(this.UserProfile.GetUserId())&&this.ListOfAdminCampaigns.push(this.ListOfCampaigns[t]),this.ListOfCampaigns[t].GetWarbandIDList().some((t=>e.includes(t)))&&this.ListOfWarbandCampaigns.push(this.ListOfCampaigns[t])}async MoveInviteCampiagn(e,t){let a=null;for(let n=0;n<this.ListOfInvites.length;n++)if(this.ListOfInvites[n].GetId()==e){a=this.ListOfInvites[n],this.ListOfInvites.splice(n,1);break}if(t&&null!=a){const e=await s.x.ResetCampaign(a);null!=e&&(this.ListOfCampaigns.push(e),this.SortMyCampaigns())}}async ChangeCampaignAdmin(e,t){if(this.OwnsCampaign(e)){const a=this.GetUserSubmitBasics(!1);if(null!=a){const o=await async function(e,t){return await fetch(`${n.a.URL}/wp-json/synod/v1/campaigns/change-admin`,{method:"POST",headers:{Authorization:`Bearer ${t.token}`,"Content-Type":"application/json"},body:JSON.stringify(e)})}({campaign_id:e,player_id:t},a);return 200==o.status&&await this.ResetCampaignByID(e),o}}}async CampaignInviteCancel(e,t){const a=this.GetUserSubmitBasics(!1);if(null==a||null==this.UserProfile)return new Response(null,{status:401});const n=await o({campaign_id:e,player_id:t},a);return 200==n.status&&await this.MoveInviteCampiagn(e,!1),n}async CampaignInviteReject(e){const t=this.GetUserSubmitBasics(!1);if(null==t||null==this.UserProfile)return new Response(null,{status:401});if(this.IsInvited(e)){const a=await o({campaign_id:e,player_id:this.UserProfile.GetUserId()},t);return 200==a.status&&await this.MoveInviteCampiagn(e,!1),a}}async CampaignInviteAccept(e){const t=this.GetUserSubmitBasics(!1);if(null==t||null==this.UserProfile)return new Response(null,{status:401});if(this.IsInvited(e)){const a=await async function(e,t){return await fetch(`${n.a.URL}/wp-json/synod/v1/campaigns/invite-player/accept`,{method:"POST",headers:{Authorization:`Bearer ${t.token}`,"Content-Type":"application/json"},body:JSON.stringify(e)})}({campaign_id:e,player_id:this.UserProfile.GetUserId()},t);return 200==a.status&&await this.MoveInviteCampiagn(e,!0),a}}async CampaignInviteCreate(e,t){if(this.OwnsCampaign(e)){const a=this.GetUserSubmitBasics(!1);if(null==a)throw new Error("User not authenticated.");const o=await async function(e,t){return await fetch(`${n.a.URL}/wp-json/synod/v1/campaigns/invite-player`,{method:"POST",headers:{Authorization:`Bearer ${t.token}`,"Content-Type":"application/json"},body:JSON.stringify(e)})}({campaign_id:e,player_id:t},a);if(200===o.status)return await this.ResetCampaignByID(e),o;{const e=await o.json();throw new Error(e.message||"Player invite error")}}throw new Error("You do not have permission to invite players to this campaign.")}async CampaignWarbandAccept(e,t){const a=this.GetUserSubmitBasics(!1);if(null==a||null==this.UserProfile)return new Response(null,{status:401});if(this.IsInvitedWarband(e,t)||t){const o=await async function(e,t){return await fetch(`${n.a.URL}/wp-json/synod/v1/campaigns/invite-warband/accept`,{method:"POST",headers:{Authorization:`Bearer ${t.token}`,"Content-Type":"application/json"},body:JSON.stringify(e)})}({campaign_id:e,warband_id:t},a);return 200==o.status&&await this.MoveInviteCampiagn(e,!0),o}}async CampaignWarbandReject(e,t){const a=this.GetUserSubmitBasics(!1);if(null==a||null==this.UserProfile)return new Response(null,{status:401});if(this.IsInvitedWarband(e,t)||t){const o=await async function(e,t){return await fetch(`${n.a.URL}/wp-json/synod/v1/campaigns/invite-warband/cancel`,{method:"POST",headers:{Authorization:`Bearer ${t.token}`,"Content-Type":"application/json"},body:JSON.stringify(e)})}({campaign_id:e,warband_id:t},a);return 200==o.status&&await this.MoveInviteCampiagn(e,!1),o}}async CampaignWarbandCreate(e,t){if(this.OwnsCampaign(e)){const a=this.GetUserSubmitBasics(!1);if(null==a)return new Response(null,{status:401});const o=await async function(e,t){return await fetch(`${n.a.URL}/wp-json/synod/v1/campaigns/invite-warband`,{method:"POST",headers:{Authorization:`Bearer ${t.token}`,"Content-Type":"application/json"},body:JSON.stringify(e)})}({campaign_id:e,warband_id:t},a);return 200==o.status&&await this.ResetCampaignByID(e),o}}async ForceRemovePlayer(e,t){var a;if(this.OwnsCampaign(e)||(null===(a=this.UserProfile)||void 0===a?void 0:a.GetUserId())==t){const a=this.GetUserSubmitBasics(!1);if(null==a)return new Response(null,{status:401});const o=await async function(e,t){return await fetch(`${n.a.URL}/wp-json/synod/v1/campaigns/remove-player`,{method:"POST",headers:{Authorization:`Bearer ${t.token}`,"Content-Type":"application/json"},body:JSON.stringify(e)})}({campaign_id:e,player_id:t},a);return 200==o.status&&await this.ResetCampaignByID(e),o}}async ForceRemoveWarband(e,t){var a,o;const i=null===(a=this.UserProfile)||void 0===a||null===(o=a.GetWarbandIDList())||void 0===o?void 0:o.includes(t);if(this.OwnsCampaign(e)||i){const a=this.GetUserSubmitBasics(!1);if(null==a)return new Response(null,{status:401});const o=await async function(e,t){return await fetch(`${n.a.URL}/wp-json/synod/v1/campaigns/remove-warband`,{method:"POST",headers:{Authorization:`Bearer ${t.token}`,"Content-Type":"application/json"},body:JSON.stringify(e)})}({campaign_id:e,warband_id:t},a);return 200==o.status&&await this.ResetCampaignByID(e),o}}async AddAnnouncement(e,t,a){if(this.InCampaign(e)){const o=this.GetUserSubmitBasics(!1);if(null==o)return new Response(null,{status:401});const i=await async function(e,t){return void 0==e.campaign_id?null:await fetch(`${n.a.URL}/wp-json/synod/v1/campaigns/announcement-create`,{method:"POST",headers:{Authorization:`Bearer ${t.token}`,"Content-Type":"application/json"},body:JSON.stringify(e)})}({campaign_id:e,description:a,title:t},o);return null!=i&&200==i.status&&await this.ResetCampaignByID(e),i}}async EditAnnouncement(e,t,a,o){if(this.InCampaign(e)){const i=this.GetUserSubmitBasics(!1);if(null==i)return new Response(null,{status:401});const r=await async function(e,t){return void 0==e.announcement_id?null:await fetch(`${n.a.URL}/wp-json/synod/v1/campaigns/announcement-edit`,{method:"POST",headers:{Authorization:`Bearer ${t.token}`,"Content-Type":"application/json"},body:JSON.stringify(e)})}({announcement_id:t.Id,description:o,title:a},i);return null!=r&&200==r.status&&await this.ResetCampaignByID(e),r}}async DeleteAnnouncement(e,t){if(this.InCampaign(e)){const a=this.GetUserSubmitBasics(!1);if(null==a)return new Response(null,{status:401});const o=await async function(e,t){return void 0==e.announcement_id?null:await fetch(`${n.a.URL}/wp-json/synod/v1/campaigns/announcement-delete`,{method:"POST",headers:{Authorization:`Bearer ${t.token}`,"Content-Type":"application/json"},body:JSON.stringify(e)})}({announcement_id:t.Id},a);return null!=o&&200==o.status&&await this.ResetCampaignByID(e),o}}async UpdateCampaign(e,t,a){if(this.InCampaign(e)){const o=this.GetUserSubmitBasics(!1);if(null==o)return new Response(null,{status:401});const i=await async function(e,t){return void 0==e.id?{status:400}:await fetch(`${n.a.URL}/wp-json/synod/v1/campaigns/update`,{method:"POST",headers:{Authorization:`Bearer ${t.token}`,"Content-Type":"application/json"},body:JSON.stringify(e)})}({id:e,title:t,description:a},o);return null!=i&&200==i.status&&await this.ResetCampaignByID(e),i}}async UpdateCampaignSettings(e,t){const a=this.GetUserSubmitBasics(!1);if(null==a)return new Response(null,{status:401});const o=r.H.ToCompactSettings(t),i=await async function(e,t,a){return void 0==e?{status:400}:await fetch(`${n.a.URL}/wp-json/synod/v1/campaigns/settings/update/${e}`,{method:"POST",headers:{Authorization:`Bearer ${a.token}`,"Content-Type":"application/json"},body:JSON.stringify(t)})}(e,o,a);return null!=i&&200===i.status&&await this.ResetCampaignByID(e),i}async DeleteCampaign(e){if(this.InCampaign(e)){const t=this.GetUserSubmitBasics(!1);if(null==t)return new Response(null,{status:401});const a=await async function(e,t){return await fetch(`${n.a.URL}/wp-json/synod/v1/campaigns/delete`,{method:"POST",headers:{Authorization:`Bearer ${t.token}`,"Content-Type":"application/json"},body:JSON.stringify(e)})}({campaign_id:e},t);return null!=a&&200==a.status&&(this.ListOfCampaigns=this.ListOfCampaigns.filter((t=>t.GetId()!==e)),this.SortMyCampaigns()),a}}async CreateCampaign(e,t){var a,o;const i=this.GetUserSubmitBasics(!1);if(!i)throw new Error("User not authenticated.");const r=await async function(e,t){return await fetch(`${n.a.URL}/wp-json/synod/v1/campaigns/create`,{method:"POST",headers:{Authorization:`Bearer ${t.token}`,"Content-Type":"application/json"},body:JSON.stringify(e)})}({title:e,description:t},i),s=await r.json().catch((()=>null));if(!r.ok){const e=(null===s||void 0===s?void 0:s.message)||`HTTP ${r.status} ${r.statusText}`;throw new Error(e)}const l=null!==(a=null!==(o=null===s||void 0===s?void 0:s.campaign_id)&&void 0!==o?o:null===s||void 0===s?void 0:s.id)&&void 0!==a?a:null===s||void 0===s?void 0:s.post_id;return l?(await this.BuildAll(),l):null}ClearCacheOnLoginOut(e){if(void 0==e||null==e)return;const t=l.y.getInstance();Object.keys(t.campaignDataCache).forEach((a=>{const n=t.campaignDataCache[a];(n.campaign_admin_id.toString()==e.toString()||n.campaign_players.map((e=>e.user_id)).includes(e))&&this.ResetCampaignByID(n.campaign_id)}))}}var d=a(6892),u=a(3135);class h{constructor(){this.RandomScenarioManager=void 0,this.UserWarbandManager=void 0,this.UserCampaignManager=void 0,this.UserWarbandManager=new u.h,this.UserCampaignManager=new c,this.RandomScenarioManager=new d.o,this.UserWarbandManager.GetItemsAll()}static getInstance(){return h.instance||(h.instance=new h),h.instance}}h.instance=void 0},6264:function(e,t,a){"use strict";a.d(t,{J:function(){return n}});class n{async runEvent(e,t,a,n,o){const i=await t.GrabContextPackages(e,t,a);i.sort(((e,t)=>e.priority<t.priority?-1:e.priority>t.priority?1:0));let r,s=n;""==e&&(console.log("DEBUG OUTPUT: "+e),console.log(t),console.log(i));for(const l of i){const e=[];let n=0;void 0!==t&&null!==t&&(e[n]=t,n+=1),void 0!==s&&null!==s&&(e[n]=s,n+=1),void 0!==o&&null!==o&&(e[n]=o,n+=1),void 0!==l.callbackdict&&null!==l.callbackdict&&(e[n]=l.callbackdict,n+=1),void 0!==l.self&&null!==l.self&&(e[n]=l.self,n+=1),void 0!==l.dyncontext&&(e[n]=l.dyncontext,n+=1);const i=e.concat(a);r=await l.callback.apply(this,i),s=r}return s}}},1235:function(e,t,a){"use strict";a.d(t,{Z:function(){return b}});var n=a(6264),o=a(6184),i=a(9353),r=a(3600),s=a(363),l=a(3632),c=(a(2565),a(5043)),d=a(8314),u=a(7289),h=a(579);var m=e=>{const t=e.data,[a,o]=(0,c.useState)([]),[i,r]=(0,c.useState)(0);return(0,c.useEffect)((()=>{!async function(){const e=new n.J;if(null!=t.RestrictedSelection){const a=await e.runEvent("getLocationRestrictionsPresentable",t,[],[],t.RestrictedSelection);o(a),r((e=>e+1))}else{const a=await e.runEvent("getLocationRestrictions",t,[],[],null);t.RestrictedSelection=a;const n=await e.runEvent("getLocationRestrictionsPresentable",t,[],[],t.RestrictedSelection);o(n),r((e=>e+1))}}()}),[]),(0,h.jsx)(l.tH,{fallback:(0,h.jsx)("div",{children:"Something went wrong with ExplorationLocationDisplay.tsx"}),children:(0,h.jsxs)("div",{className:"ExplorationLocationDisplay",children:[(0,d.fE)(t,t.Description),(0,h.jsx)(u.A,{data:t.MyOptions}),(0,h.jsx)("div",{className:" bodytext complextext",children:a.join(", ")})]})})},p=a(5501),f=a(4286),g=a(1979);const y={option_search_viable:{event_priotity:0,async optionSearchEvent(e,t,a,n,i,r){let s=!1;if(a.classes.includes(i.constructor.name))for(let l=0;l<a.questions.length;l++){let e=!0;const t=a.questions[l];if(t.tagq){const a=Object.keys(t.tagq);for(let n=0;n<a.length;n++){const r=t.tagq[a[n]];(0,o.Kg)(i.Tags,a[n])&&(0,o.Gb)(i.Tags,a[n])==r||(e=!1)}}if(t.baseq){const a=Object.keys(t.baseq);for(let o=0;o<a.length;o++){const i=t.baseq[a[o]];n[a[o]]&&n[a[o]]==i||(e=!1)}}if(t.propertyq){const a=Object.keys(t.propertyq);for(let n=0;n<a.length;n++){const o=t.propertyq[a[n]];a[n]in i&&i[a[n]]==o||(e=!1)}}if(t.antipropertyq){const a=Object.keys(t.antipropertyq);for(let n=0;n<a.length;n++){const o=t.antipropertyq[a[n]];a[n]in i?i[a[n]]!=o||(e=!1):e=!0}}1==e&&(s=!0)}return s&&t.push(i),t}},test_run:{event_priotity:1,genericReturnEvent(e,t,a,n,o,i){return n.value?t*n.value:t}},set_arms:{event_priotity:0,async getModelHandsAvailable(e,t,a,n,o,i){return void 0!=n.ranged&&(t.ranged=n.ranged),void 0!=n.melee&&(t.melee=n.melee),n.special&&(t.special=n.special),t}},add_arms:{event_priotity:0,async getModelHandsAvailable(e,t,a,n,o,i){return n.ranged&&(t.ranged+=n.ranged),n.melee&&(t.melee+=n.melee),n.special&&(t.melee+=n.special),t}},find_hands:{event_priotity:0,getPresentationHandeddness(e,t,a,n,o,i){const r=a[0];let s="";r>0&&(s+=r.toString());const l=a[1];let c="";return l>0&&(c+=l.toString()),{melee:s,range:c}}},add_armoury_item:{event_priotity:0,async onWarbandBuild(e,t,n,o,i){const r=await Promise.resolve().then(a.bind(a,7880));if(n.free_purchases)for(let a=0;a<n.free_purchases.length;a++){const e=await r.EquipmentFactory.CreateNewFactionEquipment(n.free_purchases[a],null,!1);null!=e&&await t.AddStash(e,!0)}}},validate_final_unit:{event_priotity:0,async validateModelForWarband(e,t,a,n,o,i,r){if(n.exception)for(let s=0;s<n.exception.length;s++){const e=n.exception[s];if("id"==e.type&&a.HeldObject.CurModel.ID==e.value)return t}if(n.requirements)for(let s=0;s<n.requirements.length;s++){const e=n.requirements[s];if("ducats"==e.type){const n=a.GetTotalDucats(!0),o=e.value;"minimum"==e.subvalue&&o>n&&t.push("The model "+a.HeldObject.GetTrueName()+" must be worth at least "+o+" ducats.")}}return t}},validate_final_unit_equipment:{event_priotity:0,async validateModelForWarband(e,t,n,i,r,s,l){const c=await Promise.resolve().then(a.bind(a,7880));if(i.requirements)for(let a=0;a<i.requirements.length;a++){const e=i.requirements[a],r=await n.HeldObject.GetAllEquipForShow(),s=await n.HeldObject.GetModelHands();let l=!1;if(e.tag)for(let t=0;t<r.length;t++)if(r[t].equipment.IsTagPresent(e.tag)){l=!0;break}if(e.category)for(let t=0;t<r.length;t++)if(r[t].equipment.GetEquipmentItem().Category==e.category){l=!0;break}if(e.hands_melee&&s.melee==e.hands_melee){l=!0;break}if(e.exception)for(let t=0;t<e.exception.length;t++){const a=e.exception[t];if(a.id)for(let t=0;t<r.length;t++)if(r[t].equipment.GetEquipmentItem().GetID()==a.id==a.value){l=e.value;break}}e.value==!l&&(e.tag&&t.push("The model "+n.HeldObject.GetTrueName()+" must "+(1==e.value?"be":"not be")+" equipped with "+(0,o.h8)(e.tag)),e.category&&t.push("The model "+n.HeldObject.GetTrueName()+" must "+(1==e.value?"be":"not be")+" equipped with "+(0,o.h8)(e.category)+" equipment"))}if(i.requirements_single){let e=!1;for(let t=0;t<i.requirements_single.length;t++){const a=i.requirements_single[t];if(a.id){const t=await n.HeldObject.GetAllEquipForShow();for(let n=0;n<t.length;n++)if(t[n].equipment.GetEquipmentItem().GetID()==a.id==a.value){e=!0;break}}}if(!e){let e="The model "+n.HeldObject.GetTrueName()+" must either: ";for(let t=0;t<i.requirements_single.length;t++){const a=i.requirements_single[t];if(a.id){const t=await c.EquipmentFactory.CreateNewEquipment(a.id,null);e+=" "+(1==a.value?"Be":"Not be")+" equipped with "+t.GetTrueName()+"."}}t.push(e)}}return t}},upgrade_budget_max:{event_priotity:0,async withinUpgradeBudget(e,t,a,n,o,i,r,s){const l=await a.model.GetUpgradeCosts(0,!0,!1),c=await a.model.GetUpgradeCosts(1,!0,!1);return n.ducats&&0==s?l+r<=n.ducats:n.glory&&1==s?c+r<=n.glory:t}},upgrade_budget_free:{event_priotity:0,async getUpgradeBudget(e,t,a,n,o,i,r){return 0==r&&n.ducats?t+n.ducats:1==r&&n.glory?t+n.glory:t}},validate_final_unit_upgrades:{event_priotity:0,async validateModelForWarband(e,t,a,n,o,i,r){if(n.requirements)for(let s=0;s<n.requirements.length;s++){const e=n.requirements[s];if("ducats"==e.type){const n=a.HeldObject.GetUpgradeCosts(0,!0),o=e.value;"maximum"==e.subvalue&&o<n&&t.push("The model "+a.HeldObject.GetTrueName()+" must have upgrades worth no more than "+o+" ducats.")}}return t}},override_equipment_limit:{event_priotity:0,async getEquipmentLimitRaw(e,t,a,n,o){return a.count}},no_shield_combo:{event_priotity:0,async countShieldCombo(e,t,a,n,o,i){return!1}},model_equipment_restriction:{event_priotity:0,async getEquipmentRestrictionPresentable(e,t,n,r,s,l){await Promise.resolve().then(a.bind(a,7479));const c=await Promise.resolve().then(a.bind(a,7880)),d=[],u=[],h=[];for(let a=0;a<n.length;a++){const e=n[a];if(e.required)for(let t=0;t<e.required.length;t++){const a=e.required[t],n=[];if(n.push("RESTRICTION: Items"),a.category&&n.push("in category "+(0,o.h8)(a.category)),a.tag&&n.push("with tag "+(0,o.h8)(a.tag)),"keyword"==a.res_type){const e=i.KeywordFactory.CreateNewKeyword(a.value.toString(),null);n.push("must be "+(0,o.h8)(e.Name?e.Name:""))}if("tag"==a.res_type&&n.push("must have tag "+(0,o.h8)(a.value.toString())),"id"==a.res_type){const e=await c.EquipmentFactory.CreateNewEquipment(a.value.toString(),null);n.push("must be "+e.Name)}h.push(n.join(" "))}if(e.removed)for(let t=0;t<e.removed.length;t++){const a=e.removed[t],n=[];if(n.push("REMOVED: Items"),a.category&&n.push("in category "+(0,o.h8)(a.category)),a.tag&&n.push("with tag "+(0,o.h8)(a.tag)),"keyword"==a.res_type){const e=i.KeywordFactory.CreateNewKeyword(a.value.toString(),null);n.push("with keyword "+(0,o.h8)(e.Name?e.Name:""))}if("ducat"==a.res_type){let e="";e="maximum"==a.param?"above":"below",n.push("with Ducat cost "+e+" "+a.value)}if("all"==a.res_type&&n.push("cannot be equipped"),"id"==a.res_type){const e=await c.EquipmentFactory.CreateNewEquipment(a.value.toString(),null);n.push("cannot be "+e.Name)}d.push(n.join(" "))}if(e.added)for(let t=0;t<e.added.length;t++){const a=e.added[t],n=[];if(n.push("ADDED: Items"),a.category&&n.push("in category "+(0,o.h8)(a.category)),a.tag&&n.push("with tag "+(0,o.h8)(a.tag)),"keyword"==a.res_type){const e=i.KeywordFactory.CreateNewKeyword(a.value.toString(),null);n.push("must be "+(0,o.h8)(e.Name?e.Name:""))}if("all"==a.res_type&&n.push("can be equipped"),"id"==a.res_type){const e=await c.EquipmentFactory.CreateNewEquipment(a.value.toString(),null);n.push("can be "+e.Name)}u.push(n.join(" "))}}const m=d.concat(u).concat(h);return t.concat(m)},async getEquipmentRestriction(e,t,n,o,i){const r=await Promise.resolve().then(a.bind(a,7891));if(n.model_spec){if(e instanceof r.WarbandMember){const a=e,o=n.model_spec;let i=!1;o.id&&o.id.includes(a.CurModel.ID)&&(i=!0),i&&t.push(n)}}else t.push(n);return t},async canModelAddItem(e,t,a,n,r,s,l){let c=t;if(c.length<=0)for(let d=0;d<l.length;d++){const e=l[d];if(e.removed)for(let t=0;t<e.removed.length;t++){const n=e.removed[t];if((!n.category||a.item.EquipmentItem.Category==n.category)&&(!n.tag||(0,o.Kg)(a.item.EquipmentItem.Tags,n.tag)||(0,o.Kg)(a.item.Tags,n.tag))){if("ducat"==n.res_type&&0==a.item.CostType&&("maximum"==n.param?a.item.Cost>Number(n.value)&&(c="This battlekit is above the Ducat limit"):a.item.Cost<Number(n.value)&&(c="This battlekit is below the Ducat minimum")),"keyword"==n.res_type){let e=!1;for(let t=0;t<a.item.EquipmentItem.GetKeyWords().length;t++)a.item.EquipmentItem.GetKeyWords()[t].ID==n.value&&(e=!0);if(1==e){c="This battlekit has the "+i.KeywordFactory.CreateNewKeyword(n.value.toString(),null).GetTrueName()+" keyword"}}"all"==n.res_type&&(c="This battlekit is invalid"),"id"==n.res_type&&a.item.EquipmentItem.ID==n.value&&(c="The battlekit is restricted on this model"),"restricted"==n.res_type&&a.item.RestrictedEquipment&&a.item.RestrictedEquipment.length>0&&(c="This battlekit has restrictions in place")}}if(e.required){let t=!1,n=!1;for(let i=0;i<e.required.length;i++){const r=e.required[i];if((!r.category||a.item.EquipmentItem.Category==r.category)&&(!r.tag||(0,o.Kg)(a.item.EquipmentItem.Tags,r.tag)||(0,o.Kg)(a.item.Tags,r.tag))){if(t=!0,"keyword"==r.res_type){let e=!1;for(let t=0;t<a.item.EquipmentItem.GetKeyWords().length;t++)a.item.EquipmentItem.GetKeyWords()[t].ID==r.value&&(e=!0);1==e&&(n=!0)}if("equipment_keyword"==r.res_type){let e=!1;const t=await a.model.GetAllEquipForShow();for(let a=0;a<t.length;a++){(await t[a].equipment.GetKeywords()).map((e=>e.ID)).includes(r.value.toString())&&(e=!0,a=t.length)}1==e&&(n=!0)}"tag"==r.res_type&&((0,o.Kg)(a.item.EquipmentItem.Tags,r.value.toString())||(0,o.Kg)(a.item.Tags,r.value.toString()))&&(n=!0),"id"==r.res_type&&a.item.EquipmentItem.ID==r.value&&(n=!0)}}0==n&&1==t&&(c="Not all requirements for battlekit on this model are met")}}if(c.length>0)for(let i=0;i<l.length;i++){const e=l[i];if(e.added)for(let t=0;t<e.added.length;t++){const n=e.added[t];if((!n.category||a.item.EquipmentItem.Category==n.category)&&(!n.tag||(0,o.Kg)(a.item.EquipmentItem.Tags,n.tag)||(0,o.Kg)(a.item.Tags,n.tag))){if("keyword"==n.res_type){let e=!1;for(let t=0;t<a.item.EquipmentItem.GetKeyWords().length;t++)a.item.EquipmentItem.GetKeyWords()[t].ID==n.value&&(e=!0);1==e&&(c="")}"all"==n.res_type&&(c=""),"id"==n.res_type&&a.item.EquipmentItem.ID==n.value&&(c="")}}}if(c.length<=0)for(let o=0;o<l.length;o++){const e=l[o];if(e.banned)for(let t=0;t<e.banned.length;t++){const n=e.banned[t];await a.model.HasEquipmentFollowingRestriction(n)&&(c="Another piece of battlekit prevents equipping this battlekit"),"id"==n.res_type&&a.item.EquipmentItem.ID==n.value&&(c="The model is forbidden from equipping this battlekit")}}return c}},override_flat:{event_priotity:2,async canModelAddItem(e,t,a,n,o,i,r){let s=!1;if(t.length<=0)return t;if(n.id)for(let c=0;c<n.id.length;c++)a.model.CurModel.GetID()==n.id[c]&&(s=!0);if(0==s)return t;if(s=!1,n.selections){const e=i;for(let t=0;t<e.Selections.length;t++){var l;if(null!=e.Selections[t].SelectedChoice)(null===(l=e.Selections[t].SelectedChoice)||void 0===l?void 0:l.value.EquipmentItem.ID)==a.item.EquipmentItem.ID&&(s=!0)}}return 1==s?"":t}},restriction_override:{event_priotity:1,modEquipmentRestriction(e,t,a,n,o,i,r){const s=t;if(n.exception)for(let l=0;l<n.exception.length;l++){const e=n.exception[l];if(e.equipment&&r.EquipmentItem.ID==e.equipment)return s}if(n.overrides)for(let l=0;l<s.length;l++){const e=s[l];if(e.removed)for(let t=0;t<e.removed.length;t++){const o=e.removed[t];for(let e=0;e<n.overrides.length;e++)o.res_type==n.overrides[e].type&&o.value==n.overrides[e].model&&(o.value=a.CurModel.ID),o.res_type==n.overrides[e].type&&o.value==n.overrides[e].value&&(o.value=r.EquipmentItem.ID)}if(e.required)for(let t=0;t<e.required.length;t++){const o=e.required[t];for(let e=0;e<n.overrides.length;e++)o.res_type==n.overrides[e].type&&o.value==n.overrides[e].model&&(o.value=a.CurModel.ID),o.res_type==n.overrides[e].type&&o.value==n.overrides[e].value&&(o.value=r.EquipmentItem.ID)}if(e.added)for(let t=0;t<e.added.length;t++){const o=e.added[t];for(let e=0;e<n.overrides.length;e++)o.res_type==n.overrides[e].type&&o.value==n.overrides[e].model&&(o.value=a.CurModel.ID),o.res_type==n.overrides[e].type&&o.value==n.overrides[e].value&&(o.value=r.EquipmentItem.ID)}if(e.permitted)for(let t=0;t<e.permitted.length;t++){const o=e.permitted[t];for(let e=0;e<n.overrides.length;e++)o.res_type==n.overrides[e].type&&o.value==n.overrides[e].model&&(o.value=a.CurModel.ID),o.res_type==n.overrides[e].type&&o.value==n.overrides[e].value&&(o.value=n.overrides[e].replace)}if(e.banned)for(let t=0;t<e.banned.length;t++){const o=e.banned[t];for(let e=0;e<n.overrides.length;e++)o.res_type==n.overrides[e].type&&o.value==n.overrides[e].model&&(o.value=a.CurModel.ID),o.res_type==n.overrides[e].type&&o.value==n.overrides[e].value&&(o.value=n.overrides[e].replace)}}return s}},eq_limit:{event_priotity:1,async canModelAddItem(e,t,a,n,o,i,r){let s=t;if(a.item!=n.id)return s;if(s.length<=0){let e=0;for(let t=0;t<a.model.GetEquipment().length;t++){a.model.GetEquipment()[t].equipment.MyEquipment.SelfDynamicProperty.OptionChoice.ID==n.id&&(e+=1)}e>=n.count&&(s="There is a limit of "+n.count.toString()+" on this battlekit")}return s}},model_equipment_limit:{event_priotity:2,async getEquipmentLimitPresentable(e,t,n,r,s,l){const{EquipmentFactory:c}=await Promise.resolve().then(a.bind(a,7880)),d=[],u=[];for(let a=0;a<n.length;a++){const e=n[a];if(e.maximum)for(let t=0;t<e.maximum.length;t++){const a=e.maximum[t],n=[];if(n.push("MAXIMUM: Items"),a.category&&n.push("in category "+(0,o.h8)(a.category)),a.tag&&n.push("with tag "+(0,o.h8)(a.tag)),"tag"==a.res_type&&n.push("that have tag "+(0,o.h8)(a.value.toString())),"keyword"==a.res_type){const e=i.KeywordFactory.CreateNewKeyword(a.value,null);n.push("with the keyword "+(0,o.h8)(e.Name?e.Name:""))}if("all"==a.res_type&&n.push(""),"id"==a.res_type){const e=await c.CreateNewEquipment(a.value,null);n.push("with the name "+e.Name)}n.push("have a limit of "+(0,o.h8)(a.limit.toString())),d.push(n.join(" "))}if(e.minimum)for(let t=0;t<e.minimum.length;t++){const a=e.minimum[t],n=[];if(n.push("MINIMUM: Items"),a.category&&n.push("in category "+(0,o.h8)(a.category)),a.tag&&n.push("with tag "+(0,o.h8)(a.tag)),"tag"==a.res_type&&n.push("that have tag "+(0,o.h8)(a.value.toString())),"keyword"==a.res_type){const e=i.KeywordFactory.CreateNewKeyword(a.value,null);n.push("with the keyword "+(0,o.h8)(e.Name?e.Name:""))}if("all"==a.res_type&&n.push(""),"id"==a.res_type){const e=await c.CreateNewEquipment(a.value,null);n.push("with the name "+e.Name)}n.push("must have at least "+(0,o.h8)(a.limit.toString())),u.push(n.join(" "))}}const h=d.concat(u);return t.concat(h)},getEquipmentLimit(e,t,a,n,o){return t.push(a),t},async canModelAddItem(e,t,a,n,r,s,l){let c=t;if(c.length<=0){const e=n;if(e.maximum)for(let t=0;t<e.maximum.length;t++){const n=e.maximum[t];if(n.category&&a.item.EquipmentItem.Category!=n.category)continue;if(n.id&&a.item.EquipmentItem.ID!=n.id)continue;if(n.tag&&!(0,o.Kg)(a.item.EquipmentItem.Tags,n.tag)&&!(0,o.Kg)(a.item.Tags,n.tag))continue;if("stat"==n.res_type&&"hands_melee"==n.value&&a.item.EquipmentItem.Stats[n.value]!=n.subvalue)continue;if("keyword"==n.res_type){let e=!1;for(let t=0;t<a.item.EquipmentItem.KeyWord.length;t++)a.item.EquipmentItem.KeyWord[t].ID==n.value&&(e=!0);if(0==e)continue}if("id"==n.res_type&&a.item.EquipmentItem.ID!=n.value)continue;let r=0;for(let e=0;e<a.model.GetEquipment().length;e++){const t=a.model.GetEquipment()[e].equipment,i=a.model.GetEquipment()[e].purchase.CustomInterface;let s=null;void 0!=i&&(s=i.tags);const l=t.MyEquipment.SelfDynamicProperty.OptionChoice;if((!n.tag||null!=s&&(0,o.Kg)(s,n.tag)||(0,o.Kg)(l.Tags,n.tag)||(0,o.Kg)(t.Tags,n.tag))&&(!n.category||n.category==l.Category)){if("keyword"==n.res_type){let e=!1;for(let t=0;t<l.KeyWord.length;t++)l.KeyWord[t].ID==n.value&&(e=!0);1==e&&(r+=1)}"tag"==n.res_type&&(null!=s&&(0,o.Kg)(s,n.value.toString())||(0,o.Kg)(l.Tags,n.value.toString())||(0,o.Kg)(t.Tags,n.value.toString()))&&(r+=1),"id"==n.res_type&&l.ID==n.value&&(r+=1),"self"==n.res_type&&l.ID==a.item.EquipmentItem.ID&&(r+=1),"category"==n.res_type&&l.Category==n.category&&(r+=1),"stat"==n.res_type&&"hands_melee"==n.value&&l.Stats[n.value]==n.subvalue&&(r+=1)}}if(r>=n.limit){if(c="You have reached the limit of ","keyword"==n.res_type){c+="keyword "+i.KeywordFactory.CreateNewKeyword(n.value.toString(),null).GetTrueName()+" "}"tag"==n.res_type&&(c+="battlekit with the "+n.value+"tag "),"id"==n.res_type&&(c+="this item "),n.tag&&(c+="with tag "+(0,o.h8)(n.tag)),n.category&&(c+="in category "+(0,o.h8)(n.category))}}if(e.minimum)for(let t=0;t<e.minimum.length;t++){const n=e.minimum[t];if(n.category&&a.item.EquipmentItem.Category!=n.category)continue;if(n.id&&a.item.EquipmentItem.ID!=n.id)continue;if(n.tag&&!(0,o.Kg)(a.item.EquipmentItem.Tags,n.tag)&&!(0,o.Kg)(a.item.Tags,n.tag))continue;if("id"==n.res_type&&a.item.EquipmentItem.ID!=n.value)continue;let r=0;for(let e=0;e<a.model.GetEquipment().length;e++){const t=a.model.GetEquipment()[e].equipment,i=t.MyEquipment.SelfDynamicProperty.OptionChoice;if("keyword"==n.res_type){let e=!1;for(let t=0;t<i.KeyWord.length;t++)i.KeyWord[t].ID==n.value&&(e=!0);1==e&&(r+=1)}"tag"==n.res_type&&((0,o.Kg)(i.Tags,n.value.toString())||(0,o.Kg)(t.Tags,n.value.toString()))&&(r+=1),"id"==n.res_type&&i.ID!=n.value&&(r+=1),"category"==n.res_type&&i.Category==n.category&&(r+=1),"stat"==n.res_type&&"hands_melee"==n.value&&i.Stats[n.value]==n.subvalue&&(r+=1)}if(r<=n.limit){if(c="You have not met the minimum of ","keyword"==n.res_type){c+="keyword "+i.KeywordFactory.CreateNewKeyword(n.value.toString(),null).GetTrueName()+" "}"tag"==n.res_type&&(c+="battlekit with the "+n.value+"tag "),"id"==n.res_type&&(c+="this item "),n.tag&&(c+="with tag "+(0,o.h8)(n.tag)),n.category&&(c+="in category "+(0,o.h8)(n.category))}}}return c}},equipment_self_limit:{event_priotity:2,getEquipmentLimit(e,t,a,n,o){return t.push(a),t},async canModelAddItem(e,t,a,n,r,s,l){let c=t;if(c.length<=0){const e=n;if(e.maximum)for(let t=0;t<e.maximum.length;t++){const n=e.maximum[t];if(n.category&&a.item.EquipmentItem.Category!=n.category)continue;if(n.id&&a.item.EquipmentItem.ID!=n.id)continue;if(n.tag&&!(0,o.Kg)(a.item.EquipmentItem.Tags,n.tag)&&!(0,o.Kg)(a.item.Tags,n.tag))continue;if("stat"==n.res_type&&"hands_melee"==n.value&&a.item.EquipmentItem.Stats[n.value]!=n.subvalue)continue;if("keyword"==n.res_type){let e=!1;for(let t=0;t<a.item.EquipmentItem.KeyWord.length;t++)a.item.EquipmentItem.KeyWord[t].ID==n.value&&(e=!0);if(0==e)continue}if("id"==n.res_type&&a.item.EquipmentItem.ID!=n.value)continue;let r=0;for(let e=0;e<a.model.GetEquipment().length;e++){const t=a.model.GetEquipment()[e].equipment,i=a.model.GetEquipment()[e].purchase.CustomInterface;let s=null;void 0!=i&&(s=i.tags);const l=t.MyEquipment.SelfDynamicProperty.OptionChoice;if((!n.tag||null!=s&&(0,o.Kg)(s,n.tag)||(0,o.Kg)(l.Tags,n.tag)||(0,o.Kg)(t.Tags,n.tag))&&(!n.category||n.category==l.Category)){if("keyword"==n.res_type){let e=!1;for(let t=0;t<l.KeyWord.length;t++)l.KeyWord[t].ID==n.value&&(e=!0);1==e&&(r+=1)}"tag"==n.res_type&&(null!=s&&(0,o.Kg)(s,n.value.toString())||(0,o.Kg)(l.Tags,n.value.toString())||(0,o.Kg)(t.Tags,n.value.toString()))&&(r+=1),"id"==n.res_type&&l.ID==n.value&&(r+=1),"self"==n.res_type&&l.ID==a.item.EquipmentItem.ID&&(r+=1),"self_rel"==n.res_type&&void 0!=i&&i.id==a.item.ID&&(r+=1),"category"==n.res_type&&l.Category==n.category&&(r+=1),"stat"==n.res_type&&"hands_melee"==n.value&&l.Stats[n.value]==n.subvalue&&(r+=1)}}if(r>=n.limit){if(c="You have reached the limit of ","keyword"==n.res_type){c+="keyword "+i.KeywordFactory.CreateNewKeyword(n.value.toString(),null).GetTrueName()+" "}"tag"==n.res_type&&(c+="battlekit with the "+n.value+"tag "),"id"==n.res_type&&(c+="this item "),n.tag&&(c+="with tag "+(0,o.h8)(n.tag)),n.category&&(c+="in category "+(0,o.h8)(n.category))}}if(e.minimum)for(let t=0;t<e.minimum.length;t++){const n=e.minimum[t];if(n.category&&a.item.EquipmentItem.Category!=n.category)continue;if(n.id&&a.item.EquipmentItem.ID!=n.id)continue;if(n.tag&&!(0,o.Kg)(a.item.EquipmentItem.Tags,n.tag)&&!(0,o.Kg)(a.item.Tags,n.tag))continue;if("id"==n.res_type&&a.item.EquipmentItem.ID!=n.value)continue;let r=0;for(let e=0;e<a.model.GetEquipment().length;e++){const t=a.model.GetEquipment()[e].equipment,i=t.MyEquipment.SelfDynamicProperty.OptionChoice;if("keyword"==n.res_type){let e=!1;for(let t=0;t<i.KeyWord.length;t++)i.KeyWord[t].ID==n.value&&(e=!0);1==e&&(r+=1)}"tag"==n.res_type&&((0,o.Kg)(i.Tags,n.value.toString())||(0,o.Kg)(t.Tags,n.value.toString()))&&(r+=1),"id"==n.res_type&&i.ID!=n.value&&(r+=1),"category"==n.res_type&&i.Category==n.category&&(r+=1),"stat"==n.res_type&&"hands_melee"==n.value&&i.Stats[n.value]==n.subvalue&&(r+=1)}if(r<=n.limit){if(c="You have not met the minimum of ","keyword"==n.res_type){c+="keyword "+i.KeywordFactory.CreateNewKeyword(n.value.toString(),null).GetTrueName()+" "}"tag"==n.res_type&&(c+="battlekit with the "+n.value+"tag "),"id"==n.res_type&&(c+="this item "),n.tag&&(c+="with tag "+(0,o.h8)(n.tag)),n.category&&(c+="in category "+(0,o.h8)(n.category))}}}return c}},equipment_add_keyword:{event_priotity:0,async findFinalKeywordsForFactionEquipment(e,t,n,r,s,l){const c=await Promise.resolve().then(a.bind(a,9353)),d=[],u=[];for(let a=0;a<t.length;a++)d.push(t[a].GetTrueName());if(n.equip_check){let e=!1;for(let t=0;t<n.equip_check.length;t++)"id"==n.equip_check[t].check_type&&l.ID==n.equip_check[t].value&&(e=!0),"tag"==n.equip_check[t].check_type&&(0,o.Kg)(l.Tags,n.equip_check[t].value)&&(e=!0),"category"==n.equip_check[t].check_type&&l.Category==n.equip_check[t].value&&(e=!0);if(e){if(n.removals){const e=t.filter((e=>!n.removals.includes(e.GetID())));t=e}if(n.additions)for(let e=0;e<n.additions.length;e++)if(0==t.filter((t=>n.additions[e]==t.GetID())).length){const t=await c.KeywordFactory.CreateNewKeyword(n.additions[e],null);null!=t&&(d.includes(t.GetTrueName())||(d.push(t.GetTrueName()),u.push(t)))}if(n.special_additions)for(let e=0;e<n.special_additions.length;e++)if(0==t.filter((t=>n.special_additions[e]==t.GetID())).length){const t=await c.KeywordFactory.CreateNewKeyword(n.special_additions[e].base,null),a=n.special_additions[e].value,o=t.SelfData;o.id=t.GetID()+"_"+a,o.name=t.GetTrueName().replaceAll("(X)","").replaceAll("(x)","").replaceAll("(KEYWORD)","")+" "+a;const r=i.KeywordFactory.CreateKeyword(o,null);null!=r&&(d.includes(r.GetTrueName())||(d.push(r.GetTrueName()),u.push(r)))}}}for(let a=0;a<u.length;a++)t.push(u[a]);return t},async findFinalKeywordsForEquipment(e,t,n,r,s,l){const c=await Promise.resolve().then(a.bind(a,9353)),d=[],u=[];if(void 0==l.GetEquipmentItem)return t;if(n.equip_check){let e=!1;for(let t=0;t<n.equip_check.length;t++){if("id"==n.equip_check[t].check_type&&l.GetEquipmentItem().ID==n.equip_check[t].value&&(e=!0),"tag"==n.equip_check[t].check_type&&(0,o.Kg)(l.GetEquipmentItem().Tags,n.equip_check[t].value)&&(e=!0),"antikeyword"==n.equip_check[t].check_type){e=!0;const a=(await l.GetKeywords()).map((e=>e.ID));for(let o=0;o<n.equip_check[t].value.length;o++)a.includes(n.equip_check[t].value[o])&&(e=!1)}"category"==n.equip_check[t].check_type&&l.GetEquipmentItem().Category==n.equip_check[t].value&&(e=!0)}if(e){if(n.removals){const e=t.filter((e=>!n.removals.includes(e.GetID())));t=e}if(n.additions)for(let e=0;e<n.additions.length;e++)if(0==t.filter((t=>n.additions[e]==t.GetID())).length){const t=await c.KeywordFactory.CreateNewKeyword(n.additions[e],null);null!=t&&(d.includes(t.ID)||(d.push(t.ID),u.push(t)))}if(n.special_additions)for(let e=0;e<n.special_additions.length;e++)if(0==t.filter((t=>n.special_additions[e]==t.GetID())).length){const t=await c.KeywordFactory.CreateNewKeyword(n.special_additions[e].base,null),a=n.special_additions[e].value,o=t.SelfData;o.id=t.GetID()+"_"+a,o.name=t.GetTrueName().replaceAll("(X)","").replaceAll("(x)","").replaceAll("(KEYWORD)","")+" "+a;const r=i.KeywordFactory.CreateKeyword(o,null);null!=r&&(d.includes(r.GetTrueName())||(d.push(r.GetTrueName()),u.push(r)))}}}for(let a=0;a<u.length;a++)t.push(u[a]);return t}},warband_equipment_limit:{event_priotity:1,getEquipmentLimit(e,t,a,n,o){return t.push(a),t},async canWarbandAddItem(e,t,a,n,r,s,l,c){let d=t;if(d.length<=0){if(n.ignore)for(let e=0;e<n.ignore.length;e++)if("id"==n.ignore[e].type&&c.EquipmentItem.ID==n.ignore[e].value)return"";const t=n;if(t.maximum)for(let a=0;a<t.maximum.length;a++){const r=t.maximum[a];if(n.ignore)for(let e=0;e<n.ignore.length;e++)if("id"==n.ignore[e].type&&c.EquipmentItem.ID==n.ignore[e].value)return"";if(r.category&&c.EquipmentItem.Category!=r.category)continue;if(r.tag&&!(0,o.Kg)(c.EquipmentItem.Tags,r.tag)&&!(0,o.Kg)(c.Tags,r.tag))continue;if("keyword"==r.res_type&&0==c.EquipmentItem.GetKeyWords().filter((e=>e.ID==r.value)).length)continue;let s=0;const l=e.GetAllEquipment(!0);for(let e=0;e<l.length;e++){const t=l[e].equipment,a=t.MyEquipment.SelfDynamicProperty.OptionChoice;if(!r.category||a.Category==r.category){if(n.ignore){let e=!1;for(let t=0;t<n.ignore.length;t++)if("id"==n.ignore[t].type&&a.ID==n.ignore[t].value){e=!0;break}if(e)continue}if("keyword"==r.res_type){let e=!1;for(let t=0;t<a.KeyWord.length;t++)a.KeyWord[t].ID==r.value&&(e=!0);1==e&&(s+=1)}"tag"==r.res_type&&((0,o.Kg)(a.Tags,r.value.toString())||(0,o.Kg)(t.Tags,r.value.toString()))&&(s+=1),"id"==r.res_type&&a.ID!=r.value&&(s+=1)}}if(s>=r.limit){if(d="You have reached the limit of ","keyword"==r.res_type){d+="keyword "+i.KeywordFactory.CreateNewKeyword(r.value.toString(),null).GetTrueName()+" "}"tag"==r.res_type&&(d+="battlekit with the "+r.value+"tag "),"id"==r.res_type&&(d+="this item "),r.tag&&(d+="with tag "+(0,o.h8)(r.tag)),r.category&&(d+="in category "+(0,o.h8)(r.category))}}if(t.minimum)for(let a=0;a<t.minimum.length;a++){const r=t.minimum[a];if(r.category&&c.EquipmentItem.Category!=r.category)continue;if(r.tag&&!(0,o.Kg)(c.EquipmentItem.Tags,r.tag)&&!(0,o.Kg)(c.Tags,r.tag))continue;let s=0;const l=e.GetAllEquipment(!0);for(let e=0;e<l.length;e++){const t=l[e].equipment,a=t.MyEquipment.SelfDynamicProperty.OptionChoice;if(n.ignore){let e=!1;for(let t=0;t<n.ignore.length;t++)if("id"==n.ignore[t].type&&a.ID==n.ignore[t].value){e=!0;break}if(e)continue}if("keyword"==r.res_type){let e=!1;for(let t=0;t<a.KeyWord.length;t++)a.KeyWord[t].ID==r.value&&(e=!0);1==e&&(s+=1)}"tag"==r.res_type&&((0,o.Kg)(a.Tags,r.value.toString())||(0,o.Kg)(t.Tags,r.value.toString()))&&(s+=1),"id"==r.res_type&&a.ID!=r.value&&(s+=1)}if(s<=r.limit){if(d="You have not met the required amount of ","keyword"==r.res_type){d+="keyword "+i.KeywordFactory.CreateNewKeyword(r.value.toString(),null).GetTrueName()+" "}"tag"==r.res_type&&(d+="battlekit with the "+r.value+"tag "),"id"==r.res_type&&(d+="this item "),r.tag&&(d+="with tag "+(0,o.h8)(r.tag)),r.category&&(d+="in category "+(0,o.h8)(r.category))}}}return d}},stat_options:{event_priotity:1,getModelStatOptions(e,t,a,n,o){const i=[];if(a.options)for(let r=0;r<a.options.length;r++)i.push(a.options[r]);return t.concat(i)},async getMemberModelStatOptions(e,t,a,n,o,i){const r=[];if(n.options)for(let s=0;s<n.options.length;s++)r.push(n.options[s]);return t.concat(r)}},add_stat_option:{event_priotity:1,async getMemberModelStatOptions(e,t,a,n,o,i){const r=[],s=await a.CurModel.Stats;if(n.options)for(let u=0;u<n.options.length;u++){const e=n.options[u],t=[];if(n.direction){for(let a=0;a<e.length;a++)if("base"==n.type){var l;const o=null!==(l=e[a].base)&&void 0!==l?l:[999],i=Math.max(...o);if("increase"==n.direction){var c;(null!==(c=s.base)&&void 0!==c?c:[0]).some((e=>e>i))||t.push(e[a])}if("decrease"==n.direction){var d;(null!==(d=s.base)&&void 0!==d?d:[0]).some((e=>e>i))&&t.push(e[a])}}}else for(let a=0;a<e.length;a++)t.push(e[a]);"base"==n.type&&t.length>0&&t.push({base:s.base}),t.length>0&&r.push(t)}return t.concat(r)}},remove_stat_option:{event_priotity:2,async getMemberModelStatOptions(e,t,a,n,o,i){const s=[],l=await a.CurModel.Stats;if(n.options)for(let r=0;r<n.options.length;r++){const e=n.options[r];"base"==n.type&&e.push({base:l.base}),s.push(e)}return t.filter((e=>!s.some((t=>e.length===t.length&&e.every(((e,a)=>(0,r.RZ)(e,t[a])))))))}},special_category_upgrades:{event_priotity:0,async getUpgradeCategoryLimit(e,t,a,n,o,i){if(n.upgrades)for(let r=0;r<n.upgrades.length;r++)n.upgrades[r].category==a&&(t+=n.upgrades[r].count);return t}},faction_model_count_group:{event_priotity:0,async getGroupLimitTrue(e,t,a,n,o,i){if(n.number)return n.number;if(n.match)for(let r=0;r<n.match.length;r++)if("model"==n.match[r].type){return a.GetCountOfModel(n.match[r].value)}if(n.exceed)for(let r=0;r<n.exceed.length;r++){if("keyword"==n.exceed[r].type){return await a.GetCountOfKeyword(n.exceed[r].value,[])}if("tag"==n.exceed[r].type){return await a.GetCountOfTag(n.exceed[r].value,n.exceed[r].subvalue)}}if(n.warband_limit){const e=await a.GetCampaignTresholdValue();let o=t;for(let t=0;t<n.warband_limit.length;t++)n.warband_limit[t].size<=e&&(o=n.warband_limit[t].value);return o}return t},async getCountOfGroup(e,t,a,n,o,i){if(n.filter)for(let r=0;r<n.filter.length;r++){const e=n.filter[r];if(e.tag){return await a.GetCountOfTag(e.tag,!0)}if(e.id){let t=0;for(let n=0;n<e.id.length;n++){t+=await a.GetCountOfModel(e.id[n])}return t}}return t}},faction_equipment_count_group:{event_priotity:0,async getEquipmentGroupLimitTrue(e,t,a,n,o,i){if(n.number)return n.number;if(n.match)for(let r=0;r<n.match.length;r++)if("model"==n.match[r].type){return a.GetCountOfEquipmentRel(n.match[r].value)}if(n.exceed)for(let r=0;r<n.exceed.length;r++){if("keyword"==n.exceed[r].type){return await a.GetCountOfKeyword(n.exceed[r].value,[])}if("tag"==n.exceed[r].type){return await a.GetCountOfTag(n.exceed[r].value,n.exceed[r].subvalue)}}if(n.warband_limit){const e=await a.GetCampaignTresholdValue();let o=t;for(let t=0;t<n.warband_limit.length;t++)n.warband_limit[t].size<=e&&(o=n.warband_limit[t].value);return o}return t},async getCountOfEquipmentGroup(e,t,a,n,o,i){if(n.filter)for(let r=0;r<n.filter.length;r++){const e=n.filter[r];if(e.tag){return await a.GetCountOfTag(e.tag,!0)}if(e.id){let t=0;for(let n=0;n<e.id.length;n++){t+=await a.GetCountOfEquipmentRel(e.id[n])}return t}}return t}},model_limit_increase:{event_priotity:1,async getModelLimitTrue(e,t,n,o,i,r,s){if(r instanceof(await Promise.resolve().then(a.bind(a,8204))).DynamicOptionContextObject)for(let a=0;a<r.Selections.length;a++){const e=r.Selections[a];if(null!=e.SelectedChoice&&e.SelectedChoice.value.ID==s.ID)return t+o.count}return t}},faction_model_count_special:{event_priotity:0,async getModelLimitTrue(e,t,a,n,o,i){if(n.match&&"model"==n.match[0].type){return a.GetCountOfModel(n.match[0].value)}if(n.exceed&&"keyword"==n.exceed[0].type){return await a.GetCountOfKeyword(n.exceed[0].value,n.exceed[0].ignore_id?n.exceed[0].ignore_id:[])}if(n.warband_limit){const e=await a.GetCampaignTresholdValue();let o=t;for(let t=0;t<n.warband_limit.length;t++)if(n.warband_limit[t].size&&n.warband_limit[t].size<=e&&(o=n.warband_limit[t].value),n.warband_limit[t].worth){const e=a.GetUsableFighters();let i=0;for(let a=0;a<e.length;a++)n.warband_limit[t].exclude&&n.warband_limit[t].exclude.includes(e[a].model.CurModel.GetID())||(i+=e[a].purchase.GetTotalDucats());n.warband_limit[t].worth<=i&&(o=n.warband_limit[t].value)}return o}return t},async getModelLimitPresentation(e,t,n,o,i,r){const{ModelFactory:s}=await Promise.resolve().then(a.bind(a,7479)),{KeywordFactory:l}=await Promise.resolve().then(a.bind(a,9353));if(1==n){if(o.match&&"model"==o.match[0].type){return["Number of "+(await s.CreateNewModel(o.match[0].value,null)).Name]}if(o.exceed&&"keyword"==o.exceed[0].type){return["Must be outnumbered by models with the keyword "+(await l.CreateNewKeyword(o.exceed[0].value,null)).Name]}if(o.warband_limit)for(let e=0;e<o.warband_limit.length;e++)t.push("( "+o.warband_limit[e].value+" in a warband worth over "+o.warband_limit[e].size+" ducats)")}return t}},unarmed_penalty_remove:{event_priotity:0,async getUnarmedItemObj(e,t,a,n,o){return"eq_unarmed_nopenalty"},async getUnarmedItemRel(e,t,a,n,o){return"rel_unarmed_nopenalty"}},faction_upgrade_count_special:{event_priotity:0,async getUpgradeLimitPresentation(e,t,n,o,i,r){const{ModelFactory:s}=await Promise.resolve().then(a.bind(a,7479));if(1==n){if(o.match)for(let e=0;e<o.match.length;e++)if("model"==o.match[e].type){const t=await s.CreateNewModel(o.match[e].value,null);let a="";return o.match[e].modifier?"half"==o.match[e].modifier&&(a="Half your "):a="Number of ",[a+t.Name]}if(o.warband_limit)for(let e=0;e<o.warband_limit.length;e++)t.push("( "+o.warband_limit[e].value+" in a warband worth over "+o.warband_limit[e].size+" ducats)")}return t},async getUpgradeLimitTrue(e,t,a,n,o,i){if(n.match)for(let r=0;r<n.match.length;r++)if("model"==n.match[r].type){const e=await a.warband.GetCountOfModel(n.match[0].value);if("half"==n.match[r].modifier)return Math.floor(.5*e)}if(n.warband_limit)for(let r=0;r<n.warband_limit.length;r++){const e=await a.warband.GetCampaignTresholdValue();let o=t;for(let t=0;t<n.warband_limit.length;t++)n.warband_limit[t].size<=e&&(o=n.warband_limit[t].value);return o}return t}},add_patron:{event_priotity:0,async addExtraPatronOptions(e,t,n,o,i){const{SkillFactory:r}=await Promise.resolve().then(a.bind(a,6498));if(void 0!=n.list)for(let a=0;a<n.list.length;a++){const e=n.list[a],o=await r.CreateNewPatron(e,null);t.push(o)}return t}},unique:{event_priotity:0,async cantSwapItemFromModel(e,t,a,n,o,i){return!0}},unremovable:{event_priotity:0,async canRemoveItemFromModel(e,t,a,n,o,i){return!1}},add_scars:{event_priotity:0,async getMaximumScars(e,t,a,n,o,i){return n.value&&(t+=n.value),t}},get_exploration_skills:{event_priotity:0,async getLocationMessage(e,t,n,o,i){const r=n.add_skill,s=await Promise.resolve().then(a.bind(a,6498));let l="";for(let a=0;a<r.length;a++){const e=await s.SkillFactory.CreateNewSkill(r[a],null);a>0&&(l+=", ",a==r.length-1&&(l+="and ")),l+=e.GetTrueName()}return t.push("Your warband will gain the "+l+" skill"+(r.length>1?"s":"")+"."),t},async getLocationSavedMessage(e,t,n,o,i){const r=n.add_skill,s=await Promise.resolve().then(a.bind(a,6498));let l="";for(let a=0;a<r.length;a++){const e=await s.SkillFactory.CreateNewSkill(r[a],null);a>0&&(l+=", ",a==r.length-1&&(l+="and ")),l+=e.GetTrueName()}return t.push("Your warband gained the "+l+" skill"+(r.length>1?"s":"")+"."),t},async getExplorationSkills(e,t,n,o,i){const{SkillFactory:r}=await Promise.resolve().then(a.bind(a,6498)),s=await Promise.resolve().then(a.bind(a,2919));if(n.add_skill)for(let a=0;a<n.add_skill.length;a++){const i=await r.CreateNewSkill(n.add_skill[a],e),l=new s.WarbandProperty(i,e,null,null);await l.HandleDynamicProps(i,e,null,null),await l.BuildConsumables([]),l.Tags.SkillOrigin=o.GetTrueName(),t.push(l)}return t}},override_required_upgrade:{event_priotity:1,async getUpgradeRestrictionsPresentation(e,t,n,o,i){const{ModelFactory:r}=await Promise.resolve().then(a.bind(a,7479));if(n.filters)for(let a=0;a<n.filters.length;a++){const e=n.filters[a];if("id"==e.type){const a=await r.CreateNewModel(e.value,null);t.push("Unless the model is a "+a.Name)}}return t},async getRequiredUpgradesBool(e,t,a,n,o,i){if(n.filters)for(let r=0;r<n.filters.length;r++){const e=n.filters[r].type,o=n.filters[r].value;"id"==e&&(t=!(a.model.CurModel.GetID()==o))}return t}},faction_add_upgrades:{event_priotity:0,async getFactionRuleUpgrades(e,t,n,o,i){const{UpgradeFactory:r}=await Promise.resolve().then(a.bind(a,7401));for(let a=0;a<n.list.length;a++){const e=n.list[a],o=s.D.MakeRequest({searchtype:"complex",searchparam:{type:"modelupgraderelationship",request:{operator:"and",terms:[{item:"model_id_set",value:e.model_key,equals:!0,strict:!0}],subparams:[]}}});for(let a=0;a<o.length;a++)o[a].model_id_set=e.models_id,t.push(await r.CreateModelUpgrade(o[a],null))}return t},async getContextuallyAddedUpgrades(e,t,n,o,i,r){const{UpgradeFactory:l}=await Promise.resolve().then(a.bind(a,7401));for(let a=0;a<o.list.length;a++){const e=o.list[a];let i=!1;if(e.filters)for(let t=0;t<e.filters.length;t++){const a=e.filters[t];if("keyword"==a.type)if(1==a.truth){if(!n.getKeywordIDs().includes(a.value)){i=!1;break}i=!0}else{if(n.getKeywordIDs().includes(a.value)){i=!1;break}i=!0}}if(e.models_id)for(let t=0;t<e.models_id.length;t++)if(n.ID==e.models_id[t]){i=!0;break}if(i){const a=s.D.MakeRequest({searchtype:"complex",searchparam:{type:"modelupgraderelationship",request:{operator:"and",terms:[{item:"model_id_set",value:e.model_key.toString(),equals:!0,strict:!0}],subparams:[]}}});for(let n=0;n<a.length;n++)a[n].model_id_set=e.models_id,t.push(await l.CreateModelUpgrade(a[n],null))}}return t},async getWarbandMemberUpgrades(e,t,n,o,i,r){const{UpgradeFactory:l}=await Promise.resolve().then(a.bind(a,7401));for(let a=0;a<o.list.length;a++){const e=[],i=o.list[a];let r=!1;if(i.filters)for(let t=0;t<i.filters.length;t++){const e=i.filters[t];if("keyword"==e.type)if(1==e.truth){if(!(await n.GetKeywordID()).includes(e.value)){r=!1;break}r=!0}else{if((await n.GetKeywordID()).includes(e.value)){r=!1;break}r=!0}}if(i.models_id)for(let t=0;t<i.models_id.length;t++)if(n.CurModel.ID==i.models_id[t]){r=!0;break}for(let a=0;a<t.length;a++)e.push(t[a].GetID());if(r){const a=s.D.MakeRequest({searchtype:"complex",searchparam:{type:"modelupgraderelationship",request:{operator:"and",terms:[{item:"model_id_set",value:i.model_key.toString(),equals:!0,strict:!0}],subparams:[]}}});for(let n=0;n<a.length;n++)e.includes(a[n].upgrade_id)||(a[n].model_id_set=i.models_id,t.push(await l.CreateModelUpgrade(a[n],null)))}}return t}},faction_remove_upgrades:{event_priotity:1,async getContextuallyAddedUpgrades(e,t,a,n,o,i){return t.filter((e=>!n.upgrades.includes(e.ID)))},async getWarbandMemberUpgrades(e,t,a,n,o,i){return t.filter((e=>!n.upgrades.includes(e.ID)))}},gain_ducats_consumable:{event_priotity:0,async getConsumableSelectType(e,t,a,n,o,i){return 5},async getConsumableOptionsList(e,t,a,n,o,i,r,s){if(r){const e=void 0!=n.dice?n.dice:void 0!=n.dice3?n.dice3:0,a=void 0!=n.dice?6*n.dice:void 0!=n.dice3?3*n.dice3:0;for(let n=e;n<=a;n++)t.push({display_str:n+" Ducats",id:"ducat_val_"+n,value:n})}return t},async onGainLocation(e,t,a,n,o,i){if(a.dice){let e=0;e+=n.SelectData,a.mod&&(e*=a.mod),await i.AwaitedAddStashValue(e,0)}if(a.dice3){let e=0;e+=n.SelectData,a.mod&&(e*=a.mod),await i.AwaitedAddStashValue(e,0)}}},glory_victory_exchange_consumable:{event_priotity:0,async getConsumableSelectType(e,t,a,n,o,i){return 5},async getConsumableOptionsList(e,t,a,n,o,i,r,s){if(r){const e=0,a=Math.min(r.GetStashedGlory(),n.max?n.max:0);for(let n=e;n<=a;n++)t.push({display_str:n+" Ducats",id:"ducat_val_"+n,value:n})}return t},async onGainLocation(e,t,a,n,o,i){let r=0;r+=n.SelectData,await i.AwaitedAddStashValue(-1*r,1),i.Context.VictoryPoints+=r}},gain_ducats:{event_priotity:0,async onPickLocation(e,t,n,o,i,r){const{WarbandConsumable:s}=await Promise.resolve().then(a.bind(a,5561));let l=!1;if(t.SelfDynamicProperty.OptionChoice.ID==o.GetID()&&(l=!0),!l)for(let a=0;a<t.SelfDynamicProperty.Selections.length;a++){const e=t.SelfDynamicProperty.Selections[a];null!=e.SelectedChoice&&e.SelectedChoice.value.ID==o.GetID()&&(l=!0)}if(l&&(n.dice||n.dice3)){const e=o.Tags;e.consumable_die_result=!0,n.post_save&&(e.post_save=!0),e.item_name="Dice Ducats Result";const a=new s({id:o.GetID()+Date.now().toString(),name:o.GetTrueName(),source:o.Source?o.Source:"",tags:e,contextdata:{gain_ducats_consumable:n},associate_id:o.GetID(),object_id:null,object_data:null,object_type:"number"},r,t);await a.GrabOptions(),t.Consumables.push(a)}},async getLocationMessage(e,t,a,n,o){return a.count&&t.push("The warband gains "+a.count+" ducats."),a.dice&&t.push("The warband gains "+a.dice+"D6"+(a.mod?"X"+a.mod:"")+" ducats."),a.dice3&&t.push("The warband gains "+a.dice3+"D3"+(a.mod?"X"+a.mod:"")+" ducats."),t},async getLocationSavedMessage(e,t,a,n,o){return a.count&&t.push("The warband gained "+a.count+" ducats."),a.dice&&t.push("The warband gained "+a.dice+"D6"+(a.mod?"X"+a.mod:"")+" ducats."),a.dice3&&t.push("The warband gained "+a.dice3+"D3"+(a.mod?"X"+a.mod:"")+" ducats."),t},async onGainSkill(e,t,a,n,o,i){a.value&&(i.Ducats+=a.value)},async onGainLocation(e,t,a,n,o,i){let r=!1;if(t.SelfDynamicProperty.OptionChoice.ID==n.GetID()&&(r=!0),!r)for(let s=0;s<t.SelfDynamicProperty.Selections.length;s++){const e=t.SelfDynamicProperty.Selections[s];null!=e.SelectedChoice&&e.SelectedChoice.value.ID==n.GetID()&&(r=!0)}r&&a.count&&await i.AwaitedAddStashValue(a.count,0)}},glory_victory_exchange:{event_priotity:0,async onPickLocation(e,t,n,o,i,r){const{WarbandConsumable:s}=await Promise.resolve().then(a.bind(a,5561));let l=!1;if(t.SelfDynamicProperty.OptionChoice.ID==o.GetID()&&(l=!0),!l)for(let a=0;a<t.SelfDynamicProperty.Selections.length;a++){const e=t.SelfDynamicProperty.Selections[a];null!=e.SelectedChoice&&e.SelectedChoice.value.ID==o.GetID()&&(l=!0)}if(l){const e=o.Tags;e.consumable_die_result=!0,n.post_save&&(e.post_save=!0),e.item_name="Traded Glory Result";const a=new s({id:o.GetID()+Date.now().toString(),name:o.GetTrueName(),source:o.Source?o.Source:"",tags:e,contextdata:{glory_victory_exchange_consumable:n},associate_id:o.GetID(),object_id:null,object_data:null,object_type:"number"},r,t);await a.GrabOptions(),t.Consumables.push(a)}},async getLocationMessage(e,t,a,n,o){return t.push("The warband will remove up to "+a.count+" \u263c and gain an equal number of Victory Points."),t},async getLocationSavedMessage(e,t,a,n,o){return t.push("The warband traded up to "+a.count+" \u263c for Victory Points."),t}},add_to_model:{event_priotity:0,async getContextuallyAddedAbilities(e,t,n,o,i,r){const{AbilityFactory:l}=await Promise.resolve().then(a.bind(a,5035));let c=!0;if(o.removed)for(let a=0;a<o.removed.length;a++){const e=o.removed[a];"id"==e.category&&e.value.includes(n.ID)&&(c=!1)}if(o.required)for(let a=0;a<o.required.length;a++){const e=o.required[a];"id"==e.category&&(c=!!e.value.includes(n.ID))}if(c){const e=s.D.MakeRequest({searchtype:"id",searchparam:{type:"factionrule",id:o.id}});t.push(await l.CreateAbility(e,null))}return t},async getWarbandMemberAbilities(e,t,n,o,i,r){const{AbilityFactory:l}=await Promise.resolve().then(a.bind(a,5035));let c=!0;if(o.removed)for(let a=0;a<o.removed.length;a++){const e=o.removed[a];"id"==e.category&&e.value.includes(n.CurModel.ID)&&(c=!1)}if(o.required)for(let a=0;a<o.required.length;a++){const e=o.required[a];"id"==e.category&&(c=!!e.value.includes(n.CurModel.ID))}if(c){const e=s.D.MakeRequest({searchtype:"id",searchparam:{type:"factionrule",id:o.id}});t.push(await l.CreateAbility(e,null))}return t}},stash_equipment:{event_priotity:0,async onGainUpgrade(e,t,a,n,o,i){const r=t.GetEquipment();for(let s=0;s<r.length;s++){const e=r[s];await t.DeleteStash(e),await i.DirectAddStash(e)}}},replace_model:{event_priotity:0,async onGainUpgrade(e,t,n,o,i,r,s){const{ModelFactory:l}=await Promise.resolve().then(a.bind(a,7479));if(n.new_id){const e=await l.CreateNewModel(n.new_id,null);t.Tags.original_model_id=t.CurModel.GetID();const a=t.GetMyPurchase();if(n.new_price&&null!=a){const e=a.ItemCost;t.Tags.old_price=e,a.ItemCost=n.new_price,a.Discount=n.new_price-e}if(n.self_discount&&null!=s){const e=s.ItemCost;s.ItemCost=0,s.Discount=-e}t.CurModel=e}},async onRemoveUpgrade(e,t,n,o,i,r,s){const{ModelFactory:l}=await Promise.resolve().then(a.bind(a,7479)),c=t.Tags.original_model_id,d=t.GetMyPurchase();if(t.Tags.old_price&&null!=d&&(d.ItemCost=t.Tags.old_price,d.Discount=0),null!=c){const e=await l.CreateNewModel(c,null);t.CurModel=e}}},reset_scar:{event_priotity:0,async onGainUpgrade(e,t,a,n,o,i){const r=t.GetInjuriesList();for(let s=0;s<r.length;s++)await t.DeleteInjury(r[s]);t.ScarReserve=0}},reset_skill:{event_priotity:0,async onGainUpgrade(e,t,a,n,o,i){const r=t.GetSkillsList();for(let s=0;s<r.length;s++)await t.DeleteSkill(r[s]);t.Experience=0}},equipment_remove_ability:{event_priotity:1,async getWarbandMemberAbilities(e,t,a,n,o,i){let r=[];return n.action_id&&(r=t.filter((e=>0==n.action_id.includes(e.ID)))),r}},override_upgrade_restriction:{event_priotity:0,async getRestrictedUpgradesBool(e,t,a,n,o,i,r){for(let s=0;s<n.id.length;s++)if(r.ID==n.id[s])return!1;return t}},true_add_to_model:{event_priotity:0,async getContextuallyAddedAbilities(e,t,n,o,i,r){const{AbilityFactory:l}=await Promise.resolve().then(a.bind(a,5035));for(let a=0;a<o.list.length;a++){const e=o.list[a];let i=!0;if(e.removed)for(let t=0;t<e.removed.length;t++){const a=e.removed[t];"id"==a.category&&a.value.includes(n.ID)&&(i=!1)}if(e.required)for(let t=0;t<e.required.length;t++){const a=e.required[t];"id"==a.category&&(i=!!a.value.includes(n.ID))}if(i){const a=s.D.MakeRequest({searchtype:"id",searchparam:{type:"ability",id:e.id}});t.push(await l.CreateAbility(a,null))}}return t},async getWarbandMemberAbilities(e,t,n,o,i,r){const{AbilityFactory:l}=await Promise.resolve().then(a.bind(a,5035));for(let a=0;a<o.list.length;a++){const e=o.list[a];let i=!0;if(e.removed)for(let t=0;t<e.removed.length;t++){const a=e.removed[t];"id"==a.category&&a.value.includes(n.CurModel.ID)&&(i=!1)}if(e.required)for(let t=0;t<e.required.length;t++){const a=e.required[t];"id"==a.category&&(i=!!a.value.includes(n.CurModel.ID))}if(i){const a=s.D.MakeRequest({searchtype:"id",searchparam:{type:"ability",id:e.id}});t.push(await l.CreateAbility(a,n,!0))}}return t}},selection_add_to_model:{event_priotity:0},remove_from_model:{event_priotity:0,async getContextuallyAddedAbilities(e,t,a,n,o,i){return n.id.includes(a.ID)?t.filter((e=>!n.abilities.includes(e.ID))):t},async getWarbandMemberAbilities(e,t,a,n,o,i){return n.id.includes(a.CurModel.ID)?t.filter((e=>!n.abilities.includes(e.ID))):t}},faction_extra_eq_restriction:{event_priotity:1,async canWarbandAddItem(e,t,a,n,r,s,l,c){const d=t;if(d.length<=0)for(let u=0;u<l.length;u++){const e=l[u];if(e.removed)for(let t=0;t<e.removed.length;t++){const a=e.removed[t];if((!a.category||c.EquipmentItem.Category==a.category)&&((!a.tag||(0,o.Kg)(c.EquipmentItem.Tags,a.tag)||(0,o.Kg)(c.Tags,a.tag))&&"keyword"==a.res_type&&0!=c.EquipmentItem.GetKeyWords().filter((e=>e.ID==a.value)).length)){return"This battlekit has the "+i.KeywordFactory.CreateNewKeyword(a.value.toString(),null).GetTrueName()+" keyword"}}}return d}},faction_eq_restriction:{event_priotity:0,async getEquipmentRestrictionPresentable(e,t,n,r,s,l){const c=await Promise.resolve().then(a.bind(a,7479)),d=await Promise.resolve().then(a.bind(a,7880)),u=await Promise.resolve().then(a.bind(a,7401)),h=[];for(let a=0;a<n.length;a++){const e=n[a];if(e.permitted)for(let t=0;t<e.permitted.length;t++){const a=e.permitted[t],n=[];if(n.push(""),"keyword"==a.res_type){const e=i.KeywordFactory.CreateNewKeyword(a.value.toString(),null);n.push((0,o.h8)(e.Name?e.Name:""))}if("id"==a.res_type){const e=await c.ModelFactory.CreateNewModel(a.value.toString(),null);n.push(""+e.Name)}if("equipment"==a.res_type){const e=await d.EquipmentFactory.CreateNewEquipment(a.value.toString(),null);n.push(""+e.Name)}if("equipment_keyword"==a.res_type){const e=i.KeywordFactory.CreateNewKeyword(a.value.toString(),null);n.push(""+e.Name)}if("equipment_tag"==a.res_type&&n.push(""+(0,o.h8)(a.value.toString())),"upgrade"==a.res_type){const e=await u.UpgradeFactory.CreateNewUpgrade(a.value.toString(),null);n.push(""+e.Name)}h.push(n.join(" "))}if(e.banned)for(let t=0;t<e.banned.length;t++){const a=e.banned[t],n=[];if(n.push(""),"keyword"==a.res_type){const e=i.KeywordFactory.CreateNewKeyword(a.value.toString(),null);n.push("Not "+(0,o.h8)(e.Name?e.Name:""))}if("id"==a.res_type){const e=await c.ModelFactory.CreateNewModel(a.value.toString(),null);n.push("Not "+e.Name)}h.push(n.join(" "))}}const m=h.concat([]);return t.concat(m)},getEquipmentRestriction(e,t,a,n,o){return t.push(a),t},async canModelAddItem(e,t,a,n,r,s,l){let c=t;if(c.length<=0)for(let d=0;d<l.length;d++){const t=l[d];if(t.permitted){let n=!1;for(let i=0;i<t.permitted.length;i++){const r=t.permitted[i];if((!r.category||e.EquipmentItem.Category==r.category)&&(!r.tag||(0,o.Kg)(e.EquipmentItem.Tags,r.tag)||(0,o.Kg)(e.Tags,r.tag))){if("keyword"==r.res_type){let e=!1;const t=await a.model.GetKeywordsFull();for(let a=0;a<t.length;a++)t[a].ID==r.value&&(e=!0);1==e&&(n=!0)}if("id"==r.res_type&&a.model.CurModel.ID==r.value&&(n=!0),"equipment"==r.res_type){let e=!1;for(let t=0;t<a.model.GetEquipment().length;t++)a.model.GetEquipment()[t].equipment.MyEquipment.SelfDynamicProperty.OptionChoice.ID==r.value&&(e=!0);1==e&&(n=!0)}if("equipment_keyword"==r.res_type){let e=!1;const t=await a.model.GetAllEquipForShow();for(let a=0;a<t.length;a++){(await t[a].equipment.GetKeywords()).map((e=>e.ID)).includes(r.value.toString())&&(e=!0,a=t.length)}1==e&&(n=!0)}if("equipment_tag"==r.res_type){let e=!1;const t=await a.model.GetAllEquipForShow();for(let a=0;a<t.length;a++){(await t[a].equipment.GetKeywords()).map((e=>e.ID));const n=t[a].purchase.CustomInterface;((0,o.Kg)(n?n.tags:{},r.value.toString())||(0,o.Kg)(t[a].equipment.GetEquipmentItem().Tags,r.value.toString()))&&(e=!0,a=t.length)}1==e&&(n=!0)}if("upgrade"==r.res_type){let e=!1;for(let t=0;t<a.model.Upgrades.length;t++)a.model.Upgrades[t].HeldObject.SelfDynamicProperty.OptionChoice.ID==r.value&&(e=!0);1==e&&(n=!0)}}}""==c&&(c=n?"":"Restricted: The battlekit restrictions are not met.")}if(t.banned)for(let n=0;n<t.banned.length;n++){const r=t.banned[n];if((!r.category||e.EquipmentItem.Category==r.category)&&(!r.tag||(0,o.Kg)(e.EquipmentItem.Tags,r.tag)||(0,o.Kg)(e.Tags,r.tag))){if("keyword"==r.res_type){let e=!1;const t=await a.model.GetKeywordsFull();for(let a=0;a<t.length;a++)t[a].ID==r.value&&(e=!0);if(1==e){c="This model has the "+i.KeywordFactory.CreateNewKeyword(r.value.toString(),null).GetTrueName()+" keyword"}}"id"==r.res_type&&a.model.CurModel.ID==r.value&&(c="This model cannot equip this battlekit")}}}return c}},faction_choose_equipment:{event_priotity:0,async getAllFactionEquipmentRelationships(e,t,n,o,i){const r=await Promise.resolve().then(a.bind(a,7873)),s=await Promise.resolve().then(a.bind(a,7880)),l=await Promise.resolve().then(a.bind(a,8204));try{if(null!=i&&i instanceof l.DynamicOptionContextObject){const e=i;for(let a=0;a<e.Selections.length;a++){const o=e.Selections[a];if(null!=o.SelectedChoice&&o.SelectedChoice.value instanceof r.FactionEquipmentRelationship){let e=!1;for(let a=0;a<t.length;a++)t[a].ID==o.SelectedChoice.value.ID&&(e=!0);if(0==e){const e=await s.EquipmentFactory.CreateNewFactionEquipment(o.SelectedChoice.value.GetID(),null,!0);null!=e&&(n.limit_override&&(e.Limit=n.limit_override),t.push(e))}}}}}catch(c){console.log(c)}if(n.ids)for(let a=0;a<n.ids.length;a++){const e=await s.EquipmentFactory.CreateNewFactionEquipment(n.ids[a],null,!0);e&&t.push(e)}return t},async parseOptionsIntoRelevantType(e,t,n,o,i,r){const{EquipmentFactory:s}=await Promise.resolve().then(a.bind(a,7880)),{FactionEquipmentRelationship:l}=await Promise.resolve().then(a.bind(a,7873));for(let a=0;a<t.length;a++){const e=t[a].value instanceof l?t[a].value:await s.CreateFactionEquipment(t[a].value,null);t[a].value=e}return t},async parseOptionFilterDown(e,t,i,r,s,l){const c=await Promise.resolve().then(a.bind(a,7880)),d=await Promise.resolve().then(a.bind(a,7873)),u=new n.J,h=[],m=r.additions[i],p=[];if(l&&1==m.strict_id){const e=l.EquipmentItems;for(let t=0;t<e.length;t++)p.push(e[t].EquipmentItem.GetID())}for(let a=0;a<t.length;a++){const e=t[a].value instanceof d.FactionEquipmentRelationship?t[a].value:await c.EquipmentFactory.CreateFactionEquipment(t[a].value,null);if(void 0==e.EquipmentItem)continue;let n=!1;const i=await u.runEvent("getEquipmentRestriction",e,[],[],null);for(let t=0;t<m.restriction.length;t++){if(m.restriction[t].category&&e.EquipmentItem.Category==m.restriction[t].category&&(n=!0),void 0!=m.restriction[t].antitag&&null!=m.restriction[t].antitag&&(0,o.Kg)(e.EquipmentItem.Tags,m.restriction[t].antitag)){n=!1;break}if(void 0!=m.restriction[t].res_type&&null!=m.restriction[t].res_type&&(0,o.AG)(i,m.restriction[t].res_type)){n=!1;break}m.restriction[t].tag&&(0,o.Kg)(e.EquipmentItem.Tags,m.restriction[t].tag)&&(n=!0),m.restriction[t].all&&(n=!0)}if(1==n&&1==m.strict_id&&p.includes(e.EquipmentItem.ID)&&(n=!1),1==n){h.push(t[a]);const n=await u.runEvent("getEquipmentRestriction",e,[],[],null);e.RestrictedEquipment=n;const i=await u.runEvent("getEquipmentRestrictionPresentable",e,[],[],e.RestrictedEquipment);t[a].display_str=e.Name+" ("+e.Cost.toString()+" "+(0,o.Ie)(e.CostType)+") "+(0!=e.Limit?" (Limit "+e.Limit+")":"")+(i.length>0?" ("+i.join(", ")+" only)":"")}}return h.sort((function(e,t){return e.display_str.localeCompare(t.display_str)})),h},async getLocationMessage(e,t,n,o,i){const r=await Promise.resolve().then(a.bind(a,7880));if(n.ids){const e=[];for(let t=0;t<n.ids.length;t++){const t=await r.EquipmentFactory.CreateNewFactionEquipment(n.ids,null);null!=t&&e.push(t.EquipmentItem.GetTrueName())}t.push("Your warband will be able to purchase "+e.join(", ")+" .")}return t},async getLocationSavedMessage(e,t,n,o,i){const r=await Promise.resolve().then(a.bind(a,7880));if(n.ids){const e=[];for(let t=0;t<n.ids.length;t++){const t=await r.EquipmentFactory.CreateNewFactionEquipment(n.ids,null);null!=t&&e.push(t.EquipmentItem.GetTrueName())}t.push("Your warband can purchase "+e.join(", ")+" .")}return t}},new_upgrade:{event_priotity:0,async parseOptionFilterDown(e,t,n,o,i,r){const s=await Promise.resolve().then(a.bind(a,7401)),l=await Promise.resolve().then(a.bind(a,9909)),c=[];for(let a=0;a<t.length;a++){const e=t[a].value instanceof l.Upgrade?t[a].value:await s.UpgradeFactory.CreateUpgrade(t[a].value,null);t[a].value=e,t[a].display_str=e.GetTrueName(),c.push(t[a])}return c.sort((function(e,t){return e.display_str.localeCompare(t.display_str)})),c}},model_add_equipment:{event_priotity:0,async parseOptionsIntoRelevantType(e,t,n,o,i,r){const{EquipmentFactory:s}=await Promise.resolve().then(a.bind(a,7880)),{FactionEquipmentRelationship:l}=await Promise.resolve().then(a.bind(a,7873));for(let a=0;a<t.length;a++){const e=t[a].value instanceof l?t[a].value:await s.CreateFactionEquipment(t[a].value,null);t[a].value=e}return t},async parseOptionFilterDown(e,t,i,r,s,l){const{EquipmentFactory:c}=await Promise.resolve().then(a.bind(a,7880)),{FactionEquipmentRelationship:d}=await Promise.resolve().then(a.bind(a,7873)),u=[],h=r.additions[i];for(let a=0;a<t.length;a++){const e=t[a].value instanceof d?t[a].value:await c.CreateFactionEquipment(t[a].value,null);if(void 0!=e.EquipmentItem)for(let i=0;i<h.restriction.length;i++){let r=!1;if(h.restriction[i].category&&(e.Tags.exploration_only||e.EquipmentItem.Category!=h.restriction[i].category||(r=!0)),h.restriction[i].all&&(r=!0),r){u.push(t[a]);const i=new n.J,r=await i.runEvent("getEquipmentRestriction",e,[],[],null);e.RestrictedEquipment=r;const s=await i.runEvent("getEquipmentRestrictionPresentable",e,[],[],e.RestrictedEquipment);t[a].display_str=e.Name+" "+e.Cost.toString()+" "+(0,o.Ie)(e.CostType)+" "+(0!=e.Limit?" (Limit "+e.Limit+")":"")+(s.length>0?" ("+s.join(", ")+" only)":"");break}}}return u.sort((function(e,t){return e.display_str.localeCompare(t.display_str)})),u},async getAddedModelEquipmentOptions(e,t,a,n,o){const i=o;for(let s=0;s<i.Selections.length;s++){var r;if(null!=i.Selections[s].SelectedChoice)t.push(null===(r=i.Selections[s].SelectedChoice)||void 0===r?void 0:r.value)}return t}},faction_rule_option:{event_priotity:0,async parseOptionsIntoRelevantType(e,t,n,o,i,r){const{RuleFactory:s}=await Promise.resolve().then(a.bind(a,6647)),{Rule:l}=await Promise.resolve().then(a.bind(a,2833));for(let a=0;a<t.length;a++){const e=t[a].value instanceof l?t[a].value:await s.CreateRule(t[a].value,null);t[a].value=e,t[a].display_str=e.Name?e.Name:""}return t},returnOptionDisplay(e,t,a,n,o){return(0,h.jsx)(l.tH,{fallback:(0,h.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"}),children:null!=t&&void 0!=t&&(0,h.jsx)(g.A,{data:t.value})})}},location_rule_option:{event_priotity:0,async parseOptionsIntoRelevantType(e,t,n,o,i,r){const{ExplorationFactory:s}=await Promise.resolve().then(a.bind(a,6298)),{ExplorationLocation:l}=await Promise.resolve().then(a.bind(a,3588)),{FactionFactory:c}=await Promise.resolve().then(a.bind(a,1444));for(let a=0;a<t.length;a++){const e=t[a].value instanceof l?t[a].value:await s.CreateExplorationLocation(t[a].value,null);t[a].value=e,t[a].display_str=e.Name?e.Name:"";const n=[];if(void 0!=e.RestrictedSelection&&null!=e.RestrictedSelection)for(let t=0;t<e.RestrictedSelection.length;t++){const a=e.RestrictedSelection[t];if(a.allowed)for(let e=0;e<a.allowed.length;e++){const t=a.allowed[e],o=[];if("faction"==t.type)for(let e=0;e<t.value.length;e++){const a=await c.CreateNewFaction(t.value[e],null);o.push(a.GetTrueName())}n.push(o.join(", "))}}n.join("").length>0&&(t[a].value.Tags.validation_rules=" ("+n.join(", ")+") ")}return t},returnOptionDisplay(e,t,a,n,o){return(0,h.jsx)(l.tH,{fallback:(0,h.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"}),children:(0,h.jsx)(m,{data:t.value})})},async showWbbOptionOptions(e,t,a,n,o,i){return!0},async returnWbbOptionDisplay(e,t,a,n,o){return(0,h.jsx)(l.tH,{fallback:(0,h.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"}),children:void 0!=t.value&&(0,h.jsx)("p",{className:"",children:(0,d.fE)(t.value,t.value.Description)})})}},validate_location:{event_priotity:0,getLocationRestrictions(e,t,a,n,o){return t.push(a),t},async getLocationRestrictionsPresentable(e,t,n,i,r,s){const{FactionFactory:l}=await Promise.resolve().then(a.bind(a,1444)),c=[];for(let a=0;a<n.length;a++){const e=n[a];if(e.allowed)for(let t=0;t<e.allowed.length;t++){const a=e.allowed[t],n=[];if(n.push("Faction: "),"faction"==a.type)for(let e=0;e<a.value.length;e++){const t=await l.CreateNewFaction(a.value[e],null);n.push((0,o.h8)(t.Name?t.Name:""))}c.push(n.join(" "))}}const d=c;return t.concat(d)},async canChooseOptionLocation(e,t,a,n,o,i){const r=n;if(r.allowed)for(let c=0;c<r.allowed.length;c++){const e=r.allowed[c];if("faction"==e.type){let t=!1,n=null;n=1==e.base_only?await a.GetFaction():await a.GetFactionBase();for(let o=0;o<e.value.length;o++){var s;n&&n.ID==e.value[o]&&(t=!0),(null===(s=a.GetFaction())||void 0===s?void 0:s.ID)==e.value[o]&&(t=!0)}if(0==t)return!1}}if(r.removed)for(let c=0;c<r.removed.length;c++){const e=r.removed[c];if("faction"==e.type){let t=!1,n=null;n=1==e.base_only?await a.GetFaction():await a.GetFactionBase();for(let o=0;o<e.value.length;o++){var l;n&&n.ID==e.value[o]&&(t=!0),(null===(l=a.GetFaction())||void 0===l?void 0:l.ID)==e.value[o]&&(t=!0)}if(1==t)return!1}}return t}},give_skill:{event_priotity:0,async onSelectPropertyValue(e,t,n,o,i,r,s){const l=await Promise.resolve().then(a.bind(a,7891));for(let a=0;a<r.Selections.length;a++){const e=r.Selections[a];if(e==t&&null!=e.SelectedChoice&&e.SelectedChoice.value instanceof l.WarbandMember&&n.id)for(let t=0;t<n.id.length;t++)await e.SelectedChoice.value.AddSkillByID(n.id[t])}}},skill_option:{event_priotity:0,async parseOptionsIntoRelevantType(e,t,n,o,i,r){if(o.id&&i.GetID()!=o.id)return t;const{SkillFactory:s}=await Promise.resolve().then(a.bind(a,6498)),{Skill:l}=await Promise.resolve().then(a.bind(a,7308));for(let a=0;a<t.length;a++){const e=t[a].value instanceof l?t[a].value:await s.CreateSkill(t[a].value,null,!0);t[a].value=e,t[a].display_str=e.Name?e.Name:""}return t},returnOptionDisplay(e,t,a,n,o){return a.id&&n.GetID()!=a.id?(0,h.jsx)("div",{}):(0,h.jsx)(l.tH,{fallback:(0,h.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"}),children:(0,h.jsxs)("div",{className:"BaseContextTable-skill",children:[(0,h.jsx)("div",{className:"BaseContextTable-skill-head",children:t.value.GetTrueName()}),(0,h.jsx)("div",{className:"BaseContextTable-skill-body",children:(0,h.jsx)(p.A,{data:t.value})})]})})}},modify_equipment_block:{event_priotity:0,async overrideMercenarySkip(e,t,a,n,o){return!0}},mercenary_add_equipment:{event_priotity:0,async overrideMercenarySkip(e,t,a,n,o){return!1}},override_stats:{event_priotity:1,async modifyEquipmentStats(e,t,a,n,o){return a.stats&&(void 0!=a.stats.hands_melee&&(t.hands_melee=a.stats.hands_melee),void 0!=a.stats.hands_ranged&&(t.hands_ranged=a.stats.hands_ranged),void 0!=a.stats.melee&&(t.melee=a.stats.melee),void 0!=a.stats.ranged&&(t.ranged=a.stats.ranged)),t}},get_warband_ducats:{event_priotity:0,async getStartingDucats(e,t,a,n,o){return a.mod?t+a.mod:t}},is_fireteam:{event_priotity:0,async getFireteamOptionsFromWarband(e,t,a,n,o,i,r){const s=i.GetFireteamFighters();for(let l=0;l<s.length;l++){let e=!0;if(!s[l].model.IsMercenary()){if(n.ContextKeys.added_context){const t=n.ContextKeys.added_context;if(t.exclusive&&1==t.exclusive){await i.IsModelInOtherFireteam(s[l].model)&&(e=!1)}}if(r.MyStaticObject){if(i.IsModelInThisFireteam(r.MyStaticObject,s[l].model))e=!1;else{await i.IsModelInExclusiveFireteam(s[l].model)&&(e=!1)}}e&&t.push(s[l].model)}}return t}},is_model_fireteam:{event_priotity:0,async getFireteamOptionsFromWarbandModel(e,t,a,n,o,i,r){const s=i.MyContext;if(null==s)return t;const l=s.GetFireteamFighters();for(let c=0;c<l.length;c++){let e=!0;if(!l[c].model.IsMercenary()){if(l[c].model==i&&(e=!1),n.ContextKeys.added_context){const t=n.ContextKeys.added_context;if(t.exclusive&&1==t.exclusive){await s.IsModelInOtherFireteam(l[c].model)&&(e=!1)}if(t.restriction)for(let a=0;a<t.restriction.length;a++)"elite"==t.restriction[a].rest_type&&t.restriction[a].value!=l[c].model.IsElite()&&(e=!1)}if(e&&r.MyStaticObject){if(s.IsModelInThisFireteam(r.MyStaticObject,l[c].model))e=!1;else{await s.IsModelInExclusiveFireteam(l[c].model)&&(e=!1)}}e&&t.push(l[c].model)}}return t},async getSingleFireteamMember(e,t,a,n,o,i,r){return[i]}},change_model_equipment:{event_priotity:0,async onGainUpgrade(e,t,a,n,o,i){await t.BuildModelEquipProperties(),await t.BuildModelEquipment(!0)},async onRemoveUpgrade(e,t,a,n,o,i){await t.BuildModelEquipProperties(),await t.BuildModelEquipment(!0)},async getModelEquipmentInfo(e,t,n,o,i,r){if(!n.UpgradeAsIDs().includes(i.ID))return t;const s=await Promise.resolve().then(a.bind(a,7880)),l=[];if(o.removed)for(let a=0;a<t.length;a++)o.removed.includes(t[a].ID)||l.push(t[a]);if(o.added)for(let a=0;a<o.added.length;a++)if(!t.includes(o.added[a])){const e=await s.EquipmentFactory.CreateNewModelEquipment(o.added[a],n,!0);l.push(e)}return l}},model_attatch:{event_priotity:0,async getMemberOptionsFromWarband(e,t,a,n,o,i,r){if(null==i)return t;const s=i.GetFighters();for(let l=0;l<s.length;l++){let e=!0;if(a){const t=a;if(t.restriction)for(let a=0;a<t.restriction.length;a++)if("elite"==t.restriction[a].rest_type&&t.restriction[a].value!=s[l].model.IsElite()&&(e=!1),"id"==t.restriction[a].rest_type&&t.restriction[a].value!=(s[l].model.CurModel.ID==t.restriction[a].subvalue)&&(e=!1),"stat"==t.restriction[a].rest_type){const n=await s[l].model.GetStats();"base"==t.restriction[a].value&&n.base&&t.restriction[a].direction!=Math.max(...t.restriction[a].subvalue)<Math.max(...n.base)&&(e=!1)}}e&&t.push(s[l].model)}return t},async getMemberOptionsFromWarbandModel(e,t,a,n,o,i,r){const s=i.MyContext;if(null==s)return t;const l=s.GetFighters();for(let c=0;c<l.length;c++){let e=!0;if(l[c].model==i&&(e=!1),a){const t=a;if(t.restriction)for(let a=0;a<t.restriction.length;a++)if("elite"==t.restriction[a].rest_type&&t.restriction[a].value!=l[c].model.IsElite()&&(e=!1),"id"==t.restriction[a].rest_type&&t.restriction[a].value!=(l[c].model.CurModel.ID==t.restriction[a].subvalue)&&(e=!1),"stat"==t.restriction[a].rest_type){const n=await l[c].model.GetStats();"base"==t.restriction[a].value&&n.base&&t.restriction[a].direction!=Math.max(...t.restriction[a].subvalue)<Math.max(...n.base)&&(e=!1)}}e&&t.push(l[c].model)}return t},async getSingleFireteamMember(e,t,a,n,o,i,r){return[i]}},gain_experience:{event_priotity:0,async getLocationMessage(e,t,a,n,o){const i=null!=n?n.MyOptions.length:0;return t.push(i+" ELITE model"+(i>1?"s":"")+" gain "+a.gains+" experience."),t},async getLocationSavedMessage(e,t,a,n,o){const i=null!=n?n.MyOptions.length:0;return t.push("The selected model"+(i>1?"s":"")+" each gained "+a.gains+"XP."),t},async onSelectPropertyValue(e,t,n,o,i,r,s){const l=await Promise.resolve().then(a.bind(a,7891));for(let a=0;a<r.Selections.length;a++){const e=r.Selections[a];e==t&&null!=e.SelectedChoice&&e.SelectedChoice.value instanceof l.WarbandMember&&n.gains&&(e.SelectedChoice.value.Experience+=n.gains)}}},scar_heal_selected:{event_priotity:0,async onSelectPropertyValue(e,t,n,o,i,r,s){const l=await Promise.resolve().then(a.bind(a,7891)),c=await Promise.resolve().then(a.bind(a,2919));for(let a=0;a<r.Selections.length;a++){const e=r.Selections[a];e==t&&null!=e.SelectedChoice&&e.SelectedChoice.value instanceof c.WarbandProperty&&null!=e.SelectedChoice.value.MyContext&&e.SelectedChoice.value.MyContext instanceof l.WarbandMember&&(await e.SelectedChoice.value.MyContext.DeleteInjury(e.SelectedChoice.value),e.SelectedChoice.value.MyContext.Tags.healed_injuries?e.SelectedChoice.value.MyContext.Tags.healed_injuries.push(e.SelectedChoice.value.GetOwnID()):e.SelectedChoice.value.MyContext.Tags.healed_injuries=[e.SelectedChoice.value.GetOwnID()])}}},scar_heal:{event_priotity:0,async onSelectPropertyValue(e,t,n,o,i,r,s){const l=await Promise.resolve().then(a.bind(a,7891));for(let a=0;a<r.Selections.length;a++){const e=r.Selections[a];e==t&&null!=e.SelectedChoice&&e.SelectedChoice.value instanceof l.WarbandMember&&(n.count&&(e.SelectedChoice.value.GetBattleScars()>n.count&&(e.SelectedChoice.value.ScarReserve-=n.count),e.SelectedChoice.value.GetBattleScars()<0&&(e.SelectedChoice.value.ScarReserve=-1*e.SelectedChoice.value.GetInjuriesList().length)),n.all&&(e.SelectedChoice.value.ScarReserve=-1*e.SelectedChoice.value.GetInjuriesList().length))}}},warband_attatch:{event_priotity:0,async getEquipmentOptionsFromWarband(e,t,a,n,o,i,r){if(null==i)return t;const s=i.GetAllEquipment();for(let l=0;l<s.length;l++){let e=!0;if(a){const t=a;if(t.restriction_eq)for(let a=0;a<t.restriction_eq.length;a++)"category"==t.restriction_eq[a].rest_type&&t.restriction_eq[a].value!=s[l].equipment.MyEquipment.SelfDynamicProperty.OptionChoice.Category&&(e=!1)}e&&t.push(s[l].equipment)}return t},async getInjuryOptionsFromWarband(e,t,n,o,i,r,s){const l=await Promise.resolve().then(a.bind(a,7120)),c=await Promise.resolve().then(a.bind(a,2919));if(null==r)return t;const d=r.GetFighters();for(let a=0;a<d.length;a++){for(let e=0;e<d[a].model.Injuries.length;e++)t.push(d[a].model.Injuries[e]);if(null!=d[a].model.Tags.healed_injuries){const e=d[a].model.Tags.healed_injuries;for(let n=0;n<e.length;n++){const o=await l.InjuryFactory.CreateNewInjury(e[n],d[a].model,!0);o.Name+=" (Healed)";const i=new c.WarbandProperty(o,d[a].model,null,null);await i.HandleDynamicProps(o,d[a].model,null,null),await i.BuildConsumables([]),t.push(i)}}}return t},async getMemberOptionsFromWarband(e,t,a,n,o,i,r){if(null==i)return t;const s=i.GetFighters();for(let l=0;l<s.length;l++){let e=!0;if(a){const t=a;if(t.restriction)for(let a=0;a<t.restriction.length;a++)if("elite"==t.restriction[a].rest_type&&t.restriction[a].value!=s[l].model.IsElite()&&(e=!1),"id"==t.restriction[a].rest_type&&t.restriction[a].value!=(s[l].model.ID==t.restriction[a].subvalue)&&(e=!1),"stat"==t.restriction[a].rest_type){const n=await s[l].model.GetStats();"base"==t.restriction[a].value&&n.base&&t.restriction[a].direction!=Math.max(...t.restriction[a].subvalue)<Math.max(...n.base)&&(e=!1)}}e&&t.push(s[l].model)}return t}},location_ban_selected:{event_priotity:0,async parseOptionFilterDown(e,t,n,o,i,r){if(r instanceof(await Promise.resolve().then(a.bind(a,1412))).UserWarband){let e=null;if(null==r.Exploration)return t;const a=[];for(let t=0;t<r.Exploration.LocationMods.length;t++)r.Exploration.LocationMods[t].SelfDynamicProperty.OptionChoice==i&&(e=r.Exploration.LocationMods[t]);if(null==e)for(let t=0;t<r.Exploration.Locations.length;t++)r.Exploration.Locations[t].SelfDynamicProperty.OptionChoice==i&&(e=r.Exploration.Locations[t]);if(null!=e)for(let t=0;t<e.SelfDynamicProperty.Selections.length;t++)t!=n&&a.push(e.SelfDynamicProperty.Selections[t]);const o=[];for(let n=0;n<t.length;n++){let e=!0;for(let o=0;o<a.length;o++)a[o].SelectedID==t[n].id&&(e=!1);e&&o.push(t[n])}return o}return t}},add_fireteam_warband:{event_priotity:0,async getAllFireteamOptions(e,t,n,o,i,r){const s=await a.e(696).then(a.bind(a,5696));if(o.type&&o.count)for(let a=0;a<o.count;a++){const n=await s.FireteamFactory.CreateNewFireteam(o.type,e,o.type+"_"+i.GetID()+"_"+a,{added_context:o});t.push(n)}return t}},add_fireteam_model:{event_priotity:0,async getAllFireteamOptions(e,t,n,o,i,r){const s=await a.e(696).then(a.bind(a,5696));if(o.type&&o.count)for(let a=0;a<o.count;a++){const n=await s.FireteamFactory.CreateNewFireteam(o.type,e,o.type+"_"+i.GetID()+"_"+e.GetID()+"_"+a,{added_context:o});t.push(n)}return t}},get_warband_glory:{event_priotity:0,async getStartingGlory(e,t,a,n,o){return a.mod?t+a.mod:t}},single_exploration_glory_item:{event_priotity:0,async getConsumableSelectType(e,t,a,n,o,i){return 4},async getLocationMessage(e,t,a,n,o){return t.push("You will purchase the selected item for the indicated cost and add it to your stash."),t},async getLocationSavedMessage(e,t,a,n,o){if(1==n.Tags.failed_purchase)t.push("No item was purchased, as the warband lacked funds.");else{if(null==n.SelectItem||void 0==n.SelectItem)return t;t.push(n.SelectItem.GetTrueName()+" has been purchased and added to your Arsenal.")}return t},async runConsumableSelect(e,t,a,n,i,r,s){const l=await(0,o.Wu)(r);if(null!=l)for(let o=0;o<l.Exploration.Locations.length;o++)for(let t=0;t<l.Exploration.Locations[o].Consumables.length;t++)if(l.Exploration.Locations[o].Consumables[t].GetID()==e.GetID()){(void 0!=a.free&&a.free||1==l.HasEnoughDucats(n.SelectItem.Cost,n.SelectItem.CostType))&&await l.AddStash(n.SelectItem,void 0!=a.free&&a.free);break}},async onGainLocation(e,t,a,n,o,i){null!=n.SelectItem&&void 0!=n.SelectItem&&(1==i.HasEnoughDucats(n.SelectItem.Cost,n.SelectItem.CostType)?await i.AddStash(n.SelectItem,void 0!=a.free&&a.free):n.Tags.failed_purchase=!0)},async getConsumableOptionsList(e,t,a,n,o,i,r,s){if(r){const e=await r.GetFactionEquipmentOptions(!0,void 0!=n.free&&!n.free,!1,!1);for(let a=0;a<e.length;a++)1==e[a].CostType&&e[a].Cost<=n.cost&&t.push({display_str:e[a].EquipmentItem.GetTrueName()+" "+e[a].Cost+" Glory",id:e[a].ID,value:e[a]})}return t},async getConsumableFullOptionsList(e,t,a,n,o,i,r,s){if(r){const e=await r.GetFactionEquipmentOptions(!0,!1,!0,!1);for(let a=0;a<e.length;a++)1==e[a].CostType&&e[a].Cost<=n.cost&&t.push({display_str:e[a].EquipmentItem.GetTrueName()+" "+e[a].Cost+" Glory",id:e[a].ID,value:e[a]})}return t}},single_exploration_glory_item_free:{event_priotity:0,async getConsumableSelectType(e,t,a,n,o,i){return 4},async getLocationMessage(e,t,a,n,o){return t.push("You will add the selected item to your stash."),t},async getLocationSavedMessage(e,t,a,n,o){if(1==n.Tags.failed_purchase)t.push("No item was added.");else{if(null==n.SelectItem||void 0==n.SelectItem)return t;t.push(n.SelectItem.GetTrueName()+" has been added to your Arsenal.")}return t},async runConsumableSelect(e,t,a,n,i,r,s){const l=await(0,o.Wu)(r);if(null!=l)for(let o=0;o<l.Exploration.Locations.length;o++)for(let t=0;t<l.Exploration.Locations[o].Consumables.length;t++)if(l.Exploration.Locations[o].Consumables[t].GetID()==e.GetID()){await l.AddStash(n.SelectItem,!0);break}},async onGainLocation(e,t,a,n,o,i){null!=n.SelectItem&&void 0!=n.SelectItem&&await i.AddStash(n.SelectItem,!0)},async getConsumableOptionsList(e,t,a,n,o,i,r,s){if(r){const e=await r.GetFactionEquipmentOptions(!0,!1,!1,!1);for(let a=0;a<e.length;a++)1==e[a].CostType&&e[a].Cost<=n.cost&&t.push({display_str:e[a].EquipmentItem.GetTrueName()+" "+e[a].Cost+" Glory",id:e[a].ID,value:e[a]})}return t},async getConsumableFullOptionsList(e,t,a,n,o,i,r,s){if(r){const e=await r.GetFactionEquipmentOptions(!0,!1,!0,!1);for(let a=0;a<e.length;a++)1==e[a].CostType&&e[a].Cost<=n.cost&&t.push({display_str:e[a].EquipmentItem.GetTrueName()+" "+e[a].Cost+" Glory",id:e[a].ID,value:e[a]})}return t}},gain_replaced_item:{event_priotity:0,async getLocationMessage(e,t,n,o,i){const r=await Promise.resolve().then(a.bind(a,7880));let s="";const l=await r.EquipmentFactory.CreateNewEquipment(n.id,null);if(n.treat_as){s=(await r.EquipmentFactory.CreateNewEquipment(n.treat_as,null)).GetTrueName()}return t.push(l.GetTrueName()+" will be added to your Arsenal"+(s.length>0?", replacing "+s+" if needed":"")+"."),t},async getLocationSavedMessage(e,t,n,o,i,r){const s=await Promise.resolve().then(a.bind(a,7880)),l=await s.EquipmentFactory.CreateNewEquipment(n.id,null);let c=!1;var d;(i&&i.MyContext&&i.MyContext.Tags.replaced_item&&(c=!0),1==c)?t.push(l.GetTrueName()+" was added to your Arsenal, replacing "+(null===i||void 0===i||null===(d=i.MyContext)||void 0===d?void 0:d.Tags.replaced_item)+"."):t.push(l.GetTrueName()+" was added to your Arsenal.");return t},async onGainLocation(e,t,n,o,i,r){let l=!1;if(t.SelfDynamicProperty.OptionChoice.ID==o.GetID()&&(l=!0),!l)for(let a=0;a<t.SelfDynamicProperty.Selections.length;a++){const e=t.SelfDynamicProperty.Selections[a];null!=e.SelectedChoice&&e.SelectedChoice.value.ID==o.GetID()&&(l=!0)}if(l){const{EquipmentFactory:e}=await Promise.resolve().then(a.bind(a,7880)),o=await r.GetFactionEquipmentOptions(!0,!1,!0,!1),i=(await r.GetFactionEquipmentOptions(!0,!1)).map((e=>e.ID)),l=n.treat_as;for(let a=0;a<o.length;a++)if(o[a].EquipmentItem.GetID()==l){const l=s.D.MakeRequest({searchtype:"id",searchparam:{type:"factionequipmentrelationship",id:o[a].GetID()}});l.equipment_id=n.id,l.id="rel_special_context_"+n.id;const c=await e.CreateFactionEquipment(l,r,!0);if(c.SelfData=o[a].SelfData,n.auto_replace&&1==n.auto_replace&&r.GetCountOfEquipmentRel(o[a].GetID())>0&&!i.includes(o[a].GetID())){const e=r.GetAllEquipment();for(let n=0;n<e.length;n++)if(e[n].purchase.PurchaseInterface==o[a].GetID()&&null!=e[n].equipment.MyContext){t.Tags.replaced_item=e[n].equipment.GetTrueName(),t.SelfData.tags.replaced_item=e[n].equipment.GetTrueName(),await e[n].equipment.MyContext.DeleteStash(e[n]);break}}await r.AddStash(c,!0,o[a]);break}}}},gain_new_item:{event_priotity:0,async getConsumableSelectType(e,t,a,n,o,i){return 2},async getLocationMessage(e,t,a,n,o){const i=a.count;return t.includes("The selected item will be added to your Arsenal.")||t.includes("The selected items will be added to your Arsenal.")||t.push("The selected item"+(i>0?"s":"")+" will be added to your Arsenal."),t},async getLocationSavedMessage(e,t,a,n,o){const i=a.count;return t.includes("The selected item were added to your Arsenal.")||t.includes("The selected items were added to your Arsenal.")||t.push("The selected item"+(i>0?"s":"")+" were added to your Arsenal."),t},async onGainLocation(e,t,a,n,o,i){await i.AddStash(n.SelectItem,!0)},async getConsumableOptionsList(e,t,a,n,i,r,s,l){if(s){const e=await s.GetFactionEquipmentOptions(!0,!1,!1,!1);for(let a=0;a<e.length;a++){let i=!0;if(n.limitations.category&&(n.limitations.category.includes(e[a].EquipmentItem.Category)||(i=!1)),n.limitations.keyword){let t=!1;const o=e[a].EquipmentItem.GetKeyWordIDs();for(let e=0;e<n.limitations.keyword.length;e++)o.includes(n.limitations.keyword[e])&&(t=!0);t||(i=!1)}if(n.limitations.cost){let t=!1;for(let o=0;o<n.limitations.cost.length;o++){const i=n.limitations.cost[o];i.type==e[a].CostType&&("max"==i.subval?i.value>=e[a].Cost&&(t=!0):i.value<=e[a].Cost&&(t=!0))}t||(i=!1)}1==i&&t.push({display_str:e[a].EquipmentItem.GetTrueName()+" "+e[a].Cost+" "+(0,o.Ie)(e[a].CostType),id:e[a].ID,value:e[a]})}}return t},async getConsumableFullOptionsList(e,t,a,n,i,r,s,l){if(s){const e=await s.GetFactionEquipmentOptions(!0,!1,!1,!1);for(let a=0;a<e.length;a++){let i=!0;if(n.limitations.category&&(n.limitations.category.includes(e[a].EquipmentItem.Category)||(i=!1)),n.limitations.keyword){let t=!1;const o=e[a].EquipmentItem.GetKeyWordIDs();for(let e=0;e<n.limitations.keyword.length;e++)o.includes(n.limitations.keyword[e])&&(t=!0);t||(i=!1)}1==i&&t.push({display_str:e[a].EquipmentItem.GetTrueName()+" "+e[a].Cost+" "+(0,o.Ie)(e[a].CostType),id:e[a].ID,value:e[a]})}}return t}},gain_new_item_from_list:{event_priotity:0,async getConsumableSelectType(e,t,a,n,o,i){return 1},async getLocationMessage(e,t,a,n,o){const i=a.count;return t.includes("The selected item will be added to your Arsenal.")||t.includes("The selected items will be added to your Arsenal.")||t.push("The selected item"+(i>0?"s":"")+" from the list will be added to your Arsenal."),t},async getLocationSavedMessage(e,t,a,n,o){const i=a.count;return t.includes("The selected item were added to your Arsenal.")||t.includes("The selected items were added to your Arsenal.")||t.push("The selected item"+(i>0?"s":"")+" from the list were added to your Arsenal."),t},async onGainLocation(e,t,n,o,i,r){const{EquipmentFactory:s}=await Promise.resolve().then(a.bind(a,7880)),l=(await r.GetFactionEquipmentOptions(!0,!1,!0)).map((e=>e.ID)),c=(await r.GetFactionEquipmentOptions(!0,!1,!1)).map((e=>e.ID)),d=o.SelectItem;if(d){let e=!0;n.obey_faction&&(l.includes(d.ID)||(e=!1)),n.obey_restriction&&(c.includes(d.ID)||(e=!1)),1==e?await r.AddStash(o.SelectItem,!0):1==n.alternate_value&&await r.AwaitedAddStashValue(d.Cost,d.CostType)}},async getConsumableOptionsList(e,t,n,i,r,s,l,c){if(l){const{EquipmentFactory:e}=await Promise.resolve().then(a.bind(a,7880)),n=(await l.GetFactionEquipmentOptions(!0,!1,!0)).map((e=>e.ID)),r=(await l.GetFactionEquipmentOptions(!0,!1,!1)).map((e=>e.ID)),s=await l.GetFactionEquipmentOptions(!0,!1,!0,!1);for(let a=0;a<i.id.length;a++){const e=i.id[a];for(let a=0;a<s.length;a++)if(e==s[a].EquipmentItem.ID){const e=s[a];if(e){let l=!0;i.obey_faction&&(n.includes(e.ID)||(l=!1)),i.obey_restriction&&(r.includes(e.ID)||(l=!1)),1==l?t.push({display_str:s[a].EquipmentItem.GetTrueName(),id:s[a].ID,value:s[a]}):1==i.alternate_value&&t.push({display_str:s[a].Cost+" "+(0,o.Ie)(s[a].CostType)+" (At Limit Of Item)",id:s[a].ID,value:s[a]})}}}void 0!=i.required&&0==i.required&&t.push({display_str:"None",id:"op_none",value:new b({contextdata:{},id:"op_none",name:"None",source:"core",tags:{}},null)})}return t}},spend_money:{event_priotity:0,async getConsumableSelectType(e,t,a,n,o,i){return 3},async getLocationMessage(e,t,a,n,o){return t.includes("The selected items will be added to your Arsenal.")||t.push("The selected items will be added to your Arsenal."),t},async getLocationSavedMessage(e,t,a,n,o){return null==n.SelectItem||void 0==n.SelectItem||t.push(n.SelectItem.GetTrueName()+" has been added to your Arsenal."),t},async runConsumableEmpty(e,t,n,i,r,s,l){const{WarbandConsumable:c}=await Promise.resolve().then(a.bind(a,5561)),d=await(0,o.Wu)(s);if(null==d)return;if(null==l)return;let u=999999999;const h=t.SelectItem;let m=h.Cost,p=!0;if(n.discount_limit){p=!1;for(let e=0;e<n.discount_limit.length;e++){const t=n.discount_limit[e];"category"==t.res_type&&t.value.includes(h.EquipmentItem.Category)&&(p=!0)}}p&&(m-=n.discount?n.discount:0,m<1&&(m=1));const f=m,g=n;let y=!0;n.limit&&(g.limit-=1,y=g.limit>0);for(let a=0;a<l.Consumables.length;a++)l.Consumables[a].Name==t.GetTrueName()&&l.Consumables[a].ContextKeys.spend_money&&void 0!=l.Consumables[a].ContextKeys.spend_money.count&&u>l.Consumables[a].ContextKeys.spend_money.count&&(u=l.Consumables[a].ContextKeys.spend_money.count);u+=f,g.count=u;let _=!1;for(;!_;){_=!0;for(let e=0;e<l.Consumables.length;e++)if(null==l.Consumables[e].SelectItem&&l.Consumables[e].ContextKeys.spend_money&&l.Consumables[e].ContextKeys.spend_money.count){_=!1,l.Consumables.splice(e,1);break}}if(u>0&&y&&null!=l&&void 0!=l){const e=i.Tags;e.consumable_type_equipment=!0,n.post_save&&(e.post_save=!0),e.relaxed_requirement=!0;const a=new c({id:t.GetID()+Date.now().toString(),name:t.GetTrueName(),source:t.Source?t.Source:"",tags:e,contextdata:{spend_money:g},associate_id:t.AssociateID,object_id:null,object_data:null,object_type:"faction_equipment"},d,l);await a.GrabOptions(),l.Consumables.push(a)}for(let a=0;a<l.Consumables.length;a++)if(t==l.Consumables[a]){l.Consumables.splice(a,1);break}},async runConsumableSelect(e,t,n,i,r,s,l){const{WarbandConsumable:c}=await Promise.resolve().then(a.bind(a,5561)),d=await(0,o.Wu)(s);if(null!=d&&n.count){let e=n.count;const a=t.SelectItem;let o=a.Cost,r=!0;if(n.discount_limit){r=!1;for(let e=0;e<n.discount_limit.length;e++){const t=n.discount_limit[e];"category"==t.res_type&&t.value.includes(a.EquipmentItem.Category)&&(r=!0)}}r&&(o-=n.discount?n.discount:0,o<1&&(o=1)),e-=o;const s=n;let u=!0;if(n.limit&&(s.limit-=1,u=s.limit>0),s.count=e,!u)return;if(e>0&&u&&null!=l&&void 0!=l){const e=i.Tags;e.consumable_type_equipment=!0,n.post_save&&(e.post_save=!0),e.relaxed_requirement=!0;const a=new c({id:t.GetID()+Date.now().toString(),name:t.GetTrueName(),source:t.Source?t.Source:"",tags:e,contextdata:{spend_money:s},associate_id:t.AssociateID,object_id:null,object_data:null,object_type:"faction_equipment"},d,l);await a.GrabOptions(),l.Consumables.push(a)}}},async onGainLocation(e,t,a,n,o,i){null!=n.SelectItem&&void 0!=n.SelectItem&&await i.AddStash(n.SelectItem,!0)},async getConsumableOptionsList(e,t,n,i,r,s,l,c){const d=await Promise.resolve().then(a.bind(a,7880));if(l){let e=[];if(void 0!=i.obey_faction)if(0==i.obey_faction){let t=[];const a=[];if(i.include_faction&&(t=i.include_faction),i.include_self&&0==i.include_self){const e=l.Faction.GetFaction();a.push(e?e.GetID():"")}e=await d.EquipmentFactory.GetAllFactionEquipment(!0,a,t)}else e=await l.GetFactionEquipmentOptions(!0,void 0==i.count_cost||i.count_cost,!1,!1);else e=await l.GetFactionEquipmentOptions(!0,void 0==i.count_cost||i.count_cost,!1,!1);for(let a=0;a<e.length;a++){let n=!0;const r=e[a];let s=e[a].Cost,c=!0;if(i.discount_limit){c=!1;for(let e=0;e<i.discount_limit.length;e++){const t=i.discount_limit[e];"category"==t.res_type&&t.value.includes(r.EquipmentItem.Category)&&(c=!0)}}if(c&&(s-=i.discount?i.discount:0,s<1&&(s=1)),void 0!=i.type&&parseInt(i.type)!=parseInt(e[a].CostType)==1&&(n=!1),void 0!=i.count&&i.count<s&&(n=!1),1==n){const n=await d.EquipmentFactory.CreateFactionEquipment(e[a].SelfData,l,!0);n.Cost=s,t.push({display_str:n.EquipmentItem.GetTrueName()+" "+s+" "+(0,o.Ie)(n.CostType),id:n.ID,value:n})}}}return t},async getConsumableFullOptionsList(e,t,n,i,r,s,l,c){const d=await Promise.resolve().then(a.bind(a,7880));if(l){let e=[];if(void 0!=i.obey_faction)if(0==i.obey_faction){let t=[];const a=[];if(i.include_faction&&(t=i.include_faction),i.include_self&&0==i.include_self){const e=l.Faction.GetFaction();a.push(e?e.GetID():"")}e=await d.EquipmentFactory.GetAllFactionEquipment(!0,a,t)}else e=await l.GetFactionEquipmentOptions(!0,!1,!1,!1);else e=await l.GetFactionEquipmentOptions(!0,!1,!1,!1);for(let a=0;a<e.length;a++){let n=!0;if(void 0!=i.type&&parseInt(i.type)!=parseInt(e[a].CostType)==1&&(n=!1),1==n){const n=e[a];let r=e[a].Cost,s=!0;if(i.discount_limit){s=!1;for(let e=0;e<i.discount_limit.length;e++){const t=i.discount_limit[e];"category"==t.res_type&&t.value.includes(n.EquipmentItem.Category)&&(s=!0)}}s&&(r-=i.discount?i.discount:0,r<1&&(r=1));const c=await d.EquipmentFactory.CreateFactionEquipment(e[a].SelfData,l,!0);c.Cost=r,t.push({display_str:c.EquipmentItem.GetTrueName()+" "+r+" "+(0,o.Ie)(c.CostType),id:c.ID,value:c})}}}return t}},consumable:{event_priotity:0,async onPickLocation(e,t,n,o,i,r){const{WarbandConsumable:s}=await Promise.resolve().then(a.bind(a,5561));let l=!1;if(t.SelfDynamicProperty.OptionChoice.ID==o.GetID()&&(l=!0),!l)for(let a=0;a<t.SelfDynamicProperty.Selections.length;a++){const e=t.SelfDynamicProperty.Selections[a];null!=e.SelectedChoice&&e.SelectedChoice.value.ID==o.GetID()&&(l=!0)}if(l){let e=1;n.count&&(e=n.count);for(let a=0;a<e;a++){if(n.gain_new_item){const e=o.Tags;e.consumable_type_equipment=!0,n.post_save&&(e.post_save=!0),n.relaxed_requirement&&(e.relaxed_requirement=!0);const a=new s({id:o.GetID()+Date.now().toString(),name:o.GetTrueName(),source:o.Source?o.Source:"",tags:e,contextdata:{gain_new_item:n.gain_new_item},associate_id:o.GetID(),object_id:null,object_data:null,object_type:"faction_equipment"},r,t);await a.GrabOptions(),t.Consumables.push(a)}if(n.single_exploration_glory_item){const e=o.Tags;e.consumable_type_equipment=!0,n.post_save&&(e.post_save=!0),n.relaxed_requirement&&(e.relaxed_requirement=!0);const a=new s({id:o.GetID()+Date.now().toString(),name:o.GetTrueName(),source:o.Source?o.Source:"",tags:e,contextdata:{single_exploration_glory_item:n.single_exploration_glory_item},associate_id:o.GetID(),object_id:null,object_data:null,object_type:"faction_equipment"},r,t);await a.GrabOptions(),t.Consumables.push(a)}if(n.single_exploration_glory_item_free){const e=o.Tags;e.consumable_type_equipment=!0,n.post_save&&(e.post_save=!0),n.relaxed_requirement&&(e.relaxed_requirement=!0);const a=new s({id:o.GetID()+Date.now().toString(),name:o.GetTrueName(),source:o.Source?o.Source:"",tags:e,contextdata:{single_exploration_glory_item_free:n.single_exploration_glory_item_free},associate_id:o.GetID(),object_id:null,object_data:null,object_type:"faction_equipment"},r,t);await a.GrabOptions(),t.Consumables.push(a)}if(n.gain_new_item_from_list){const e=o.Tags;e.consumable_type_equipment=!0,n.post_save&&(e.post_save=!0);const a=new s({id:o.GetID()+Date.now().toString(),name:o.GetTrueName(),source:o.Source?o.Source:"",tags:e,contextdata:{gain_new_item_from_list:n.gain_new_item_from_list},associate_id:o.GetID(),object_id:null,object_data:null,object_type:"faction_equipment"},r,t);await a.GrabOptions(),t.Consumables.push(a)}if(n.spend_money){const e=o.Tags;e.consumable_type_equipment=!0,n.post_save&&(e.post_save=!0),e.relaxed_requirement=!0;const a=new s({id:o.GetID()+Date.now().toString(),name:o.GetTrueName(),source:o.Source?o.Source:"",tags:e,contextdata:{spend_money:n.spend_money},associate_id:o.GetID(),object_id:null,object_data:null,object_type:"faction_equipment"},r,t);await a.GrabOptions(),t.Consumables.push(a)}}}}},gain_glory_consumable:{event_priotity:0,async getConsumableSelectType(e,t,a,n,o,i){return 5},async getConsumableOptionsList(e,t,a,n,o,i,r,s){if(r){const e=void 0!=n.dice?n.dice:void 0!=n.dice3?n.dice3:0,a=void 0!=n.dice?6*n.dice:void 0!=n.dice3?3*n.dice3:0;for(let n=e;n<=a;n++)t.push({display_str:n+" Glory",id:"ducat_val_"+n,value:n})}return t},async onGainLocation(e,t,a,n,o,i){if(a.dice){let e=0;e+=n.SelectData,void 0!=a.mod&&(e*=a.mod),await i.AwaitedAddStashValue(e,1)}if(a.dice3){let e=0;e+=n.SelectData,void 0!=a.mod&&(e*=a.mod),await i.AwaitedAddStashValue(e,1)}}},gain_victory_consumable:{event_priotity:0,async getConsumableSelectType(e,t,a,n,o,i){return 5},async getConsumableOptionsList(e,t,a,n,o,i,r,s){if(r){const e=void 0!=n.dice?n.dice:void 0!=n.dice3?n.dice3:0,a=void 0!=n.dice?6*n.dice:void 0!=n.dice3?3*n.dice3:0;for(let n=e;n<=a;n++)t.push({display_str:n+" Victory",id:"ducat_val_"+n,value:n})}return t},async onGainLocation(e,t,a,n,o,i){if(a.dice){let e=0;e+=n.SelectData,void 0!=a.mod&&(e*=a.mod),i.Context.VictoryPoints+=e}if(a.dice3){let e=0;e+=n.SelectData,void 0!=a.mod&&(e*=a.mod),i.Context.VictoryPoints+=e}}},gain_glory:{event_priotity:0,async getLocationMessage(e,t,a,n,o){return a.count&&t.push("The warband gains "+a.count+" glory."),a.dice&&t.push("The warband gains "+a.dice+"D6"+(a.mod?"X"+a.mod:"")+" glory."),a.dice3&&t.push("The warband gains "+a.dice3+"D3"+(a.mod?"X"+a.mod:"")+" glory."),t},async getLocationSavedMessage(e,t,a,n,o){return a.count&&t.push("The warband gained "+a.count+" glory."),a.dice&&t.push("The warband gained "+a.dice+"D6"+(a.mod?"X"+a.mod:"")+" glory."),a.dice3&&t.push("The warband gained "+a.dice3+"D3"+(a.mod?"X"+a.mod:"")+" glory."),t},async onPickLocation(e,t,n,o,i,r){const{WarbandConsumable:s}=await Promise.resolve().then(a.bind(a,5561));let l=!1;if(t.SelfDynamicProperty.OptionChoice.ID==o.GetID()&&(l=!0),!l)for(let a=0;a<t.SelfDynamicProperty.Selections.length;a++){const e=t.SelfDynamicProperty.Selections[a];null!=e.SelectedChoice&&e.SelectedChoice.value.ID==o.GetID()&&(l=!0)}if(l&&(n.dice||n.mod)){const e=o.Tags;e.consumable_die_result=!0,n.post_save&&(e.post_save=!0),e.item_name="Dice Glory Point Result";const a=new s({id:o.GetID()+Date.now().toString(),name:o.GetTrueName(),source:o.Source?o.Source:"",tags:e,contextdata:{gain_glory_consumable:n},associate_id:o.GetID(),object_id:null,object_data:null,object_type:"number"},r,t);await a.GrabOptions(),t.Consumables.push(a)}},async onGainLocation(e,t,a,n,o,i){let r=!1;if(t.SelfDynamicProperty.OptionChoice.ID==n.GetID()&&(r=!0),!r)for(let s=0;s<t.SelfDynamicProperty.Selections.length;s++){const e=t.SelfDynamicProperty.Selections[s];null!=e.SelectedChoice&&e.SelectedChoice.value.ID==n.GetID()&&(r=!0)}r&&a.count&&await i.AwaitedAddStashValue(a.count,1)}},gain_victory:{event_priotity:0,async getLocationMessage(e,t,a,n,o){return a.count&&t.push("The warband gains "+a.count+" victory points."),a.dice&&t.push("The warband gains "+a.dice+"D6"+(a.mod?"X"+a.mod:"")+" victory points."),a.dice3&&t.push("The warband gains "+a.dice3+"D3"+(a.mod?"X"+a.mod:"")+" victory points."),t},async getLocationSavedMessage(e,t,a,n,o){return a.count&&t.push("The warband gained "+a.count+" victory points."),a.dice&&t.push("The warband gained "+a.dice+"D6"+(a.mod?"X"+a.mod:"")+" victory points."),a.dice3&&t.push("The warband gained "+a.dice3+"D3"+(a.mod?"X"+a.mod:"")+" victory points."),t},async onPickLocation(e,t,n,o,i,r){const{WarbandConsumable:s}=await Promise.resolve().then(a.bind(a,5561));let l=!1;if(t.SelfDynamicProperty.OptionChoice.ID==o.GetID()&&(l=!0),!l)for(let a=0;a<t.SelfDynamicProperty.Selections.length;a++){const e=t.SelfDynamicProperty.Selections[a];null!=e.SelectedChoice&&e.SelectedChoice.value.ID==o.GetID()&&(l=!0)}if(l&&(n.dice||n.mod||n.dice3)){const e=o.Tags;e.consumable_die_result=!0,n.post_save&&(e.post_save=!0),e.item_name="Victory Points Result";const a=new s({id:o.GetID()+Date.now().toString(),name:o.GetTrueName(),source:o.Source?o.Source:"",tags:e,contextdata:{gain_victory_consumable:n},associate_id:o.GetID(),object_id:null,object_data:null,object_type:"number"},r,t);await a.GrabOptions(),t.Consumables.push(a)}},async onGainLocation(e,t,a,n,o,i){let r=!1;if(t.SelfDynamicProperty.OptionChoice.ID==n.GetID()&&(r=!0),!r)for(let s=0;s<t.SelfDynamicProperty.Selections.length;s++){const e=t.SelfDynamicProperty.Selections[s];null!=e.SelectedChoice&&e.SelectedChoice.value.ID==n.GetID()&&(r=!0)}r&&a.count&&(i.Context.VictoryPoints+=a.count)}},activated:{event_priotity:0,async getLocationSavedMessage(e,t,a,n,o){return t.push("This modifier is supposed to be deleted after use."),t}},add_as_modifier:{event_priotity:0,async getLocationMessage(e,t,a,n,o){return t.push("Your warband will gain the new modifier "+n.GetTrueName()+"."),t},async getLocationSavedMessage(e,t,a,n,o){return t.push("Your warband gained the modifier "+n.GetTrueName()+"."),t},async onGainLocation(e,t,n,i,r,s){const{ExplorationLocation:l}=await Promise.resolve().then(a.bind(a,3588)),c=i;let d=!1;if(t.SelfDynamicProperty.OptionChoice.ID==i.GetID()&&(d=!0),!d)for(let a=0;a<t.SelfDynamicProperty.Selections.length;a++){const e=t.SelfDynamicProperty.Selections[a];null!=e.SelectedChoice&&e.SelectedChoice.value.ID==i.GetID()&&(d=!0)}d&&(null==c||(0,o.Kg)(c.Tags,"secondarylevel")||(c.Tags.secondarylevel=!0,await s.AddExplorationMod(c,[])))}},add_location_modifier:{event_priotity:0,async getLocationMessage(e,t,n,o,i){const r=n.id,s=await Promise.resolve().then(a.bind(a,6298));let l="";for(let a=0;a<r.length;a++){const e=await s.ExplorationFactory.CreateNewExplorationLocation(r[a],null);a>0&&(l+=", ",a==r.length-1&&(l+="and ")),l+=e.GetTrueName()}return t.push("Your warband will gain the new modifier"+(r.length>1?"s":"")+" "+l+"."),t},async getLocationSavedMessage(e,t,n,o,i){const r=n.id,s=await Promise.resolve().then(a.bind(a,6298));let l="";for(let a=0;a<r.length;a++){const e=await s.ExplorationFactory.CreateNewExplorationLocation(r[a],null);a>0&&(l+=", ",a==r.length-1&&(l+="and ")),l+=e.GetTrueName()}return t.push("Your warband gained the modifier"+(r.length>1?"s":"")+" "+l+"."),t},async onGainLocation(e,t,n,o,i,r){const s=await Promise.resolve().then(a.bind(a,6298));let l=!1;if(t.SelfDynamicProperty.OptionChoice.ID==o.GetID()&&(l=!0),!l)for(let a=0;a<t.SelfDynamicProperty.Selections.length;a++){const e=t.SelfDynamicProperty.Selections[a];null!=e.SelectedChoice&&e.SelectedChoice.value.ID==o.GetID()&&(l=!0)}if(l&&n.id)for(let a=0;a<n.id.length;a++){const e=await s.ExplorationFactory.CreateNewExplorationLocation(n.id[a],r,!0);await r.AddExplorationMod(e,[])}}},gain_all_from_list:{event_priotity:0,async getLocationMessage(e,t,n,o,i){const r=n.id,s=await Promise.resolve().then(a.bind(a,7880));let l="";for(let a=0;a<r.length;a++){const e=await s.EquipmentFactory.CreateNewFactionEquipment(r[a],null);a>0&&(l+=", ",a==r.length-1&&(l+="and ")),l+=null===e||void 0===e?void 0:e.EquipmentItem.GetTrueName()}return t.push(l+" will be added to your Arsenal."),t},async getLocationSavedMessage(e,t,n,o,i){const r=n.id,s=await Promise.resolve().then(a.bind(a,7880));let l="";for(let a=0;a<r.length;a++){const e=await s.EquipmentFactory.CreateNewFactionEquipment(r[a],null);a>0&&(l+=", ",a==r.length-1&&(l+="and ")),l+=null===e||void 0===e?void 0:e.EquipmentItem.GetTrueName()}return t.push(l+" has been added to your Arsenal."),t},async onGainLocation(e,t,n,o,i,r){let s=!1;if(t.SelfDynamicProperty.OptionChoice.ID==o.GetID()&&(s=!0),!s)for(let a=0;a<t.SelfDynamicProperty.Selections.length;a++){const e=t.SelfDynamicProperty.Selections[a];null!=e.SelectedChoice&&e.SelectedChoice.value.ID==o.GetID()&&(s=!0)}if(s){const{EquipmentFactory:e}=await Promise.resolve().then(a.bind(a,7880)),t=(await r.GetFactionEquipmentOptions(!0,!1,!0)).map((e=>e.ID)),o=(await r.GetFactionEquipmentOptions(!0,!1,!1)).map((e=>e.ID));if(n.id)for(let a=0;a<n.id.length;a++){const i=await e.CreateNewFactionEquipment(n.id[a],null,!0);if(i){let e=!0;n.obey_faction&&(t.includes(n.id[a])||(e=!1)),n.obey_restriction&&(o.includes(n.id[a])||(e=!1)),1==e?await r.AddStash(i,!0):1==n.alternate_value&&await r.AwaitedAddStashValue(i.Cost,i.CostType)}}}}},gain_all_from_list_find:{event_priotity:0,async canChooseOptionLocation(e,t,n,o,i,r){const s=o.id,l=await Promise.resolve().then(a.bind(a,7880)),c=[];for(let a=0;a<s.length;a++){const e=await l.EquipmentFactory.CreateNewEquipment(s[a],null);e&&c.push(e)}const d=await n.GetFactionEquipmentOptions(!0,!1,!0),u=d.map((e=>e.ID)),h=d.map((e=>e.EquipmentItem.ID)),m=await n.GetFactionEquipmentOptions(!0,!1,!1),p=m.map((e=>e.ID)),f=m.map((e=>e.EquipmentItem.ID));let g=!0;for(let a=0;a<c.length;a++){let e=!0,t=null;for(let n=0;n<d.length;n++)d[n].EquipmentItem.ID==c[a].GetID()&&(t=d[n]);t&&(o.obey_faction&&(u.includes(o.id[a])||h.includes(o.id[a])||(e=!1)),o.obey_restriction&&(p.includes(o.id[a])||f.includes(o.id[a])||(e=!1)),(e||1==o.alternate_value)&&(g=!1))}return t&&!g},async getLocationMessage(e,t,n,o,i){const r=n.id,s=await Promise.resolve().then(a.bind(a,7880));let l="";for(let a=0;a<r.length;a++){const e=await s.EquipmentFactory.CreateNewEquipment(r[a],null);a>0&&(l+=", ",a==r.length-1&&(l+="and ")),l+=e.GetTrueName()}return t.push(l+" will be added to your Arsenal."),t},async getLocationSavedMessage(e,t,n,o,i){const r=n.id,s=await Promise.resolve().then(a.bind(a,7880));let l="";for(let a=0;a<r.length;a++){const e=await s.EquipmentFactory.CreateNewEquipment(r[a],null);a>0&&(l+=", ",a==r.length-1&&(l+="and ")),l+=e.GetTrueName()}return t.push(l+" has been added to your Arsenal."),t},async onGainLocation(e,t,a,n,o,i){let r=!1;if(t.SelfDynamicProperty.OptionChoice.ID==n.GetID()&&(r=!0),!r)for(let s=0;s<t.SelfDynamicProperty.Selections.length;s++){const e=t.SelfDynamicProperty.Selections[s];null!=e.SelectedChoice&&e.SelectedChoice.value.ID==n.GetID()&&(r=!0)}if(r){const e=await i.GetFactionEquipmentOptions(!0,!1,!0),t=e.map((e=>e.ID)),n=e.map((e=>e.EquipmentItem.ID)),o=await i.GetFactionEquipmentOptions(!0,!1,!1),r=o.map((e=>e.ID)),s=o.map((e=>e.EquipmentItem.ID));if(a.id)for(let l=0;l<a.id.length;l++){let o=!0,c=null;for(let t=0;t<e.length;t++)e[t].EquipmentItem.ID==a.id[l]&&(c=e[t]);c&&(a.obey_faction&&(t.includes(a.id[l])||n.includes(a.id[l])||(o=!1)),a.obey_restriction&&(r.includes(a.id[l])||s.includes(a.id[l])||(o=!1)),o?await i.AddStash(c,!0):1==a.alternate_value&&await i.AwaitedAddStashValue(c.Cost,c.CostType))}}}},set_exploration_purchase_cap:{event_priotity:0,async getLocationMessage(e,t,a,n,o){return a.cost<99?t.push("Your warband will be able to purchase exploration only glory items that cost "+a.cost+" Glory or less"):t.push("Your warband will be able to purchase exploration only glory items at any cost."),t},async getLocationSavedMessage(e,t,a,n,o){return a.cost<99?t.push("Your warband is now able to purchase exploration only glory items that cost "+a.cost+" Glory or less"):t.push("Your warband is now able to purchase exploration only glory items at any cost."),t},async getExplorationLimit(e,t,a,n,o,i){return t<n.cost?n.cost:t}},exempt_limit:{event_priotity:0,async onAddFighter(e,t,a,n,o,i){i.Tags.exempt_fielded=!0}},auto_upgrade:{event_priotity:0,async onAddFighter(e,t,n,o,i,r){const s=await Promise.resolve().then(a.bind(a,7401));for(let a=0;a<n.items.length;a++){const e={upgrade:await s.UpgradeFactory.CreateNewModelUpgrade(n.items[a],r),purchase:null,allowed:!0,cur_count:0,max_count:0,discount:0,cost:0};await r.AddUpgrade(e,!1)}}},gain_new_model_from_list:{event_priotity:0,async getLocationMessage(e,t,n,o,i){const r=n.id,s=await Promise.resolve().then(a.bind(a,7479));let l="";for(let a=0;a<r.length;a++){const e=await s.ModelFactory.CreateNewFactionModel(r[a],null);a>0&&(l+=", ",a==r.length-1&&(l+="and ")),l+=null===e||void 0===e?void 0:e.Model.GetTrueName()}return t.push(l+" will be added to your warband for free."),t},async getLocationSavedMessage(e,t,n,o,i){const r=n.id,s=await Promise.resolve().then(a.bind(a,7479));let l="";for(let a=0;a<r.length;a++){const e=await s.ModelFactory.CreateNewFactionModel(r[a],null);a>0&&(l+=", ",a==r.length-1&&(l+="and ")),l+=null===e||void 0===e?void 0:e.Model.GetTrueName()}return t.push(l+" was added to your warband for free."),t},async onGainLocation(e,t,n,o,i,r){let s=!1;if(t.SelfDynamicProperty.OptionChoice.ID==o.GetID()&&(s=!0),!s)for(let a=0;a<t.SelfDynamicProperty.Selections.length;a++){const e=t.SelfDynamicProperty.Selections[a];null!=e.SelectedChoice&&e.SelectedChoice.value.ID==o.GetID()&&(s=!0)}if(s){const{ModelFactory:e}=await Promise.resolve().then(a.bind(a,7479));if(n.count&&n.id)for(let t=0;t<n.count;t++)for(let a=0;a<n.id.length;a++){const t=await e.CreateNewFactionModel(n.id[a],null);await r.AddFighter([t],!0)}}}},exploration_option:{event_priotity:0,async returnWbbOptionDisplay(e,t,a,n,o){return(0,h.jsx)(l.tH,{fallback:(0,h.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"}),children:void 0!=t.value&&(0,h.jsx)("p",{className:"",children:(0,d.fE)(t.value,t.value.Description)})})}},ability_option:{event_priotity:0,async parseOptionsIntoRelevantType(e,t,n,o,i,r){const{AbilityFactory:s}=await Promise.resolve().then(a.bind(a,5035)),{Ability:l}=await Promise.resolve().then(a.bind(a,247));for(let a=0;a<t.length;a++){const e=t[a].value instanceof l?t[a].value:await s.CreateAbility(t[a].value,null);t[a].value=e,t[a].display_str=e.Name?e.Name:""}return t},returnOptionDisplay(e,t,a,n,o){return(0,h.jsx)(l.tH,{fallback:(0,h.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"}),children:(0,h.jsx)("div",{className:"ability-selected-option",children:(0,h.jsx)("div",{className:"",children:(0,h.jsx)(f.A,{data:t.value,ID:t.id})})})})},async returnWbbOptionDisplay(e,t,n,o,i){const r=await Promise.resolve().then(a.bind(a,247));return t.value instanceof r.Ability?(0,h.jsx)(l.tH,{fallback:(0,h.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"}),children:(0,h.jsx)("p",{className:"",children:(0,d.fE)(t.value,t.value.Description)})}):(0,h.jsx)(h.Fragment,{})},async getWarbandMemberAbilities(e,t,n,o,i,r){const s=await Promise.resolve().then(a.bind(a,247)),l=await Promise.resolve().then(a.bind(a,8204));try{if(null!=r&&r instanceof l.DynamicOptionContextObject){const e=r;for(let a=0;a<e.Selections.length;a++){const n=e.Selections[a];if(null!=n.SelectedChoice&&n.SelectedChoice.value instanceof s.Ability){let e=!1;for(let a=0;a<t.length;a++)t[a].ID==n.SelectedChoice.value.ID&&(e=!0);0==e&&t.push(n.SelectedChoice.value)}}}}catch(c){console.log(c)}return t}},unique_skill:{event_priotity:0,async allowSkillGain(e,t,a,n,o,i,r){return o.GetID()!=a.GetID()&&t}},VariantFactionBase:{event_priotity:0,async countAsFactionForPatrons(e,t,a,n,o){return a.faction_base_id?a.faction_base_id:t}},add_to_warband:{event_priotity:0,async getWarbandLevelFactionRules(e,t,n,o,i){const{WarbandProperty:r}=await Promise.resolve().then(a.bind(a,2919));return i instanceof r&&t.push(i),t}},purchase_modifier_equipment:{event_priotity:0,async onRemoveSkill(e,t,a,n,o,i,r){const s=i.GetEntireWarbandEquipment(),l=new Map;for(let c=0;c<s.length;c++){const e=s[c].purchase,t=e.HeldObject;if(0!=e.Sellable&&a.mod)for(let n=0;n<a.mod.length;n++){let o=!1,i=!0;if(a.mod[n].requirements)for(let r=0;r<a.mod[n].requirements.length;r++){const o=a.mod[n].requirements[r];o.category&&o.category!=t.GetEquipmentItem().Category&&(i=!1),o.cost&&">="==o.req_mod&&(Number(e.ItemCost-a.mod[n].cost)<Number(o.cost)||Number(o.costtype)!=Number(e.CostType))&&(i=!1)}if(i&&(o=!0),o){l.has(t)||l.set(t,new Set);const o=l.get(t);o.has(n)||(e.ItemCost-=a.mod[n].cost,o.add(n))}}}},async onGainSkill(e,t,a,n,o,i){const r=i.GetEntireWarbandEquipment(),s=new Map;for(let l=0;l<r.length;l++){const e=r[l].purchase,t=e.HeldObject;if(0!=e.Sellable&&a.mod)for(let n=0;n<a.mod.length;n++){let o=!1,i=!0;if(a.mod[n].requirements)for(let r=0;r<a.mod[n].requirements.length;r++){const o=a.mod[n].requirements[r];o.category&&o.category!=t.GetEquipmentItem().Category&&(i=!1),o.cost&&">="==o.req_mod&&(Number(e.ItemCost-a.mod[n].cost)<Number(o.cost)||Number(o.costtype)!=Number(e.CostType))&&(i=!1)}if(i&&(o=!0),o){s.has(t)||s.set(t,new Set);const o=s.get(t);o.has(n)||(e.ItemCost+=a.mod[n].cost,o.add(n))}}}},async getCostOfEquipment(e,t,a,n,o,i,r){let s=t;if(n.mod)for(let l=0;l<n.mod.length;l++){let e=!1,t=!0;if(n.mod[l].requirements)for(let o=0;o<n.mod[l].requirements.length;o++){const e=n.mod[l].requirements[o];if(e.category&&e.category!=r.EquipmentItem.Category&&(t=!1),e.cost&&">="==e.req_mod&&(Number(s)<Number(e.cost)||Number(e.costtype)!=Number(r.CostType))&&(t=!1),e.limit){const n=await a.GetCountOfEquipmentRel(r.GetID());">"==e.req_mod&&n>=e.limit&&(t=!1)}}t&&(e=!0),e&&(n.mod[l].cost&&(s+=n.mod[l].cost),n.mod[l].discount&&(s*=n.mod[l].discount,s=Math.ceil(s)))}return s}},purchase_modifier_upgrade:{event_priotity:0,async getLocationMessage(e,t,n,i,r){await Promise.resolve().then(a.bind(a,7880));if(n.mod)for(let a=0;a<n.mod.length;a++){const e=[];for(let t=0;t<n.mod[a].requirements.length;t++){const i=n.mod[a].requirements[t];i.tag&&e.push("with the tag "+(0,o.h8)(i.tag))}t.push("Upgrades "+e.join(" and ")+" will have their cost changed by "+n.mod[a].cost+".")}return t},async getLocationSavedMessage(e,t,n,i,r){await Promise.resolve().then(a.bind(a,7880));if(n.mod)for(let a=0;a<n.mod.length;a++){const e=[];for(let t=0;t<n.mod[a].requirements.length;t++){const i=n.mod[a].requirements[t];i.tag&&e.push("with the tag "+(0,o.h8)(i.tag))}t.push("Upgrades "+e.join(" and ")+" had their cost changed by "+n.mod[a].cost+".")}return t},async getCostOfUpgrade(e,t,a,n,i,r,s){let l=t;if(n.mod)for(let c=0;c<n.mod.length;c++){let e=!1,t=!0;if(n.mod[c].requirements)for(let a=0;a<n.mod[c].requirements.length;a++){const e=n.mod[c].requirements[a];e.tag&&((0,o.Kg)(s.Tags,e.tag)||(0,o.Kg)(s.UpgradeObject.Tags,e.tag)||(t=!1)),e.cost&&">="==e.req_mod&&(Number(s.Cost)<Number(e.cost)||Number(e.costtype)!=Number(s.CostType))&&(t=!1)}t&&(e=!0),e&&(l+=n.mod[c].cost,n.mod[c].min&&(l=Math.max(n.mod[c].min,l)))}return l}},ranged_strong:{event_priotity:0,async isRangedStrong(e,t,a,n,o,i){return!0}},strong_count:{event_priotity:0,async getCountofStrong(e,t,a,n,o,i){return n.value?n.value:t}},mod_self_cost:{event_priotity:0,async getDiscountOfUpgrade(e,t,a,n,o,i,r){return o==r&&n.mod?t+n.mod:t}},add_extra_equipment:{event_priotity:0,async getEquipmentLimitTrue(e,t,a,n,o,i,r){const s=i;for(let c=0;c<s.Selections.length;c++){var l;if(null!=s.Selections[c].SelectedChoice)(null===(l=s.Selections[c].SelectedChoice)||void 0===l?void 0:l.id)==r.ID&&(t+=n.count)}return t}},add_extra_model:{event_priotity:0,async onGainEquipment(e,t,n,o,i,r,s){const l=await Promise.resolve().then(a.bind(a,7479));if(n.model_purchases){t.Discount=t.ItemCost,t.CountCap=!1;for(let e=0;e<n.model_purchases.length;e++){const t=n.model_purchases[e],a=await l.ModelFactory.CreateNewFactionModel(t,null),o=await r.AddFighter([a]);if(n.state)for(let e=0;e<o.length;e++)o[e].GetOwnItem().State=n.state}}}},add_extra_model_item:{event_priotity:0,async onModelDead(e,t,a,n,o,i){},async onGainEquipmentFighter(e,t,n,o,i,r,s,l){const c=await Promise.resolve().then(a.bind(a,7479));if(n.model_purchases&&1!=l.Tags.is_spent){l.Tags.is_spent=!0;for(let e=0;e<n.model_purchases.length;e++){const t=n.model_purchases[e],a=await c.ModelFactory.CreateNewFactionModel(t,null),o=await r.AddFighter([a],!0),i=[];for(let e=0;e<o.length;e++){var d;0==a.CostType?o[e].GetOwnItem().Tags.cost_discount_ducats=-a.Cost:o[e].GetOwnItem().Tags.cost_discount_glory=-a.Cost;const t=null===(d=o[e].GetOwnItem())||void 0===d?void 0:d.ID;void 0!==t&&null!==t&&i.push(t)}if(l.Tags.remove_when_killed=i,n.state)for(let e=0;e<o.length;e++)o[e].GetOwnItem().State=n.state,"dog"==n.state&&(o[e].GetOwnItem().Tags.is_dog=!0);if(n.exempt)for(let e=0;e<o.length;e++)o[e].GetOwnItem().Tags.exempt_fielded=!0}}}},add_upgrade:{event_priotity:0,async getWarbandMemberUpgrades(e,t,n,o,i,r){const l=await Promise.resolve().then(a.bind(a,7401)),c=r;for(let a=0;a<c.Selections.length;a++){const e=c.Selections[a].SelectedChoice;if(null!=e){const a=s.D.MakeRequest({searchtype:"complex",searchparam:{type:"modelupgraderelationship",request:{operator:"and",terms:[{item:"upgrade_id",value:e.id,equals:!0,strict:!0}],subparams:[]}}});if(a.length>0){const e=await l.UpgradeFactory.CreateModelUpgrade(a[0],null);t.push(e)}else{const a={id:"rel_md_up"+e.id+"_contextualadd_"+Date.now().toString(),source:"core",tags:{},name:"",contextdata:{},options:[],model_id_set:[],upgrade_id:e.id,cost:15,cost_type:0,restricted_upgrades:[],warband_limit:0,required_upgrades:[]},n=await l.UpgradeFactory.CreateModelUpgrade(a,null);t.push(n)}}}return t}},warband_general_hook:{event_priotity:0,async getEquipmentRelationshipsForWarband(e,t,a,i,r,s,l){const c=s.Faction.MyFaction;let d=[];void 0!=c&&(d=c.SelfDynamicProperty.OptionChoice.EquipmentItems);const u=new n.J;return d=await u.runEvent("getAllFactionEquipmentRelationships",s,[],d,null),a.getEquipmentRelationshipsForWarband&&void 0!=a.getEquipmentRelationshipsForWarband.exploration&&0==a.getEquipmentRelationshipsForWarband.exploration?d.filter((e=>0!=e.Limit&&!(0,o.Kg)(e.Tags,"exploration_only"))):d.filter((e=>0!=e.Limit))},async getAllUpgradesOfType(e,t,n,o,i,r,l){const c=await Promise.resolve().then(a.bind(a,7401));for(let a=0;a<l.OptionContext.requirements.length;a++){const e=s.D.MakeRequest({searchtype:"complex",searchparam:{type:"upgrade",request:{operator:"and",terms:[{item:"tags",value:l.OptionContext.requirements[a].value,equals:!0,strict:!0,istag:!0,tagvalue:l.OptionContext.requirements[a].subvalue}],subparams:[]}}});for(let a=0;a<e.length;a++){const n=await c.UpgradeFactory.CreateUpgrade(e[a],null);t.push(n)}}return t},async getModelRelationshipsForWarband(e,t,a,o,i,r,s){const l=r.Faction.MyFaction;let c=[];const d=[];void 0!=l&&(c=l.SelfDynamicProperty.OptionChoice.Models);const u=new n.J;c=await u.runEvent("getAllFactionModelRelationships",r,[],c,null),c=c.filter((e=>0==e.Mercenary&&0!=e.Maximum));const h=s.OptionContext.filter;for(let n=0;n<c.length;n++){let e=!0;for(let t=0;t<h.restriction.length;t++){const a=h.restriction[t];if("keyword"==a.res_type&&(e=e&&a.subvalue==c[n].Model.getKeywordIDs().includes(a.val)),"stat"==a.res_type&&"base"==a.val){const t=c[n].Model.Stats.base;if(void 0==t){e=!1;continue}const o=t.length?Math.max(...t):-1/0;e="increase"==a.direction?e&&o<a.subvalue:e&&o>=a.subvalue}}e&&d.push(c[n])}return d}},upgrade_stat:{event_priotity:1,async updateModelStats(e,t,a,n,o){for(let i=0;i<a.upgrades.length;i++){const e=a.upgrades[i];"armour"==e.stat&&(t.armour?t.armour+=e.value:t.armour=e.value),"movement"==e.stat&&(t.movement?t.movement+=e.value:t.movement=e.value),"melee"==e.stat&&(t.melee?t.melee+=e.value:t.melee=e.value),"ranged"==e.stat&&(t.ranged?t.ranged+=e.value:t.ranged=e.value)}return t}},keyword_modify_keywords:{event_priotity:0,async getKeywordAdditions(e,t,a,n,o){const r=i.KeywordFactory.CreateNewKeyword("kw_negate",null);i.KeywordFactory.CreateNewKeyword("kw_blessed",null);if(a.negate)for(let s=0;s<a.negate.length;s++){const e=r.SelfData,n=i.KeywordFactory.CreateNewKeyword(a.negate[s],null);e.id="kw_negate_"+a.negate[s],e.name="NEGATE "+n.GetTrueName(),e.description.length>1&&(e.description[1]={tags:{desc_type:"paragraph"},content:"A model with NEGATE "+n.GetTrueName()+" ignores the Effect of the "+n.GetTrueName()+" Keyword.",glossary:[{val:n.GetTrueName(),id:n.GetID()}]});const o=i.KeywordFactory.CreateKeyword(e,null);t.push(o)}if(a.blessed)for(let s=0;s<a.blessed.length;s++){const e=r.SelfData;e.id="kw_blessed_"+a.blessed[s],e.name="BLESSED "+a.blessed,e.description.length>0&&(e.description[0]={tags:{desc_type:"default"},content:"When you deploy a model with this Keyword for the first time in a game, place a number of BLESSING MARKERS beside the model equal to "+a.blessed+".",glossary:[{val:"BLESSING MARKERS",id:"kw_blessingmarker"}]});const n=i.KeywordFactory.CreateKeyword(e,null);t.push(n)}return t},async getKeywordRemovals(e,t,a,n,o){if(a.banned)for(let i=0;i<a.banned.length;i++)t.push(a.banned[i]);return t}},ammunition_keyword_add:{event_priotity:0,async findFinalKeywordsForEquipment(e,t,a,n,o,r){const s=i.KeywordFactory.CreateNewKeyword("kw_ammunition",null);if(a.value)for(let l=0;l<a.value.length;l++){const e=s.SelfData,n=i.KeywordFactory.CreateNewKeyword(a.value[l],null);e.id="kw_ammunition_"+a.value[l],e.name="AMMUNITION "+n.GetTrueName(),e.description.length>0&&(e.description[0]={tags:{desc_type:"paragraph"},content:"If a model has a piece of Battlekit with this Keyword, it will use it in the next game that it takes part in. When the model is deployed, say which Ranged Weapon the Battlekit will be used for. It gains the "+n.GetTrueName()+" keyword until the end of the game. The Ranged Weapon you choose cannot already have the BLAST, FIRE, GAS, or SHRAPNEL Keywords, and cannot have more than one type of AMMUNITION.",glossary:[{val:n.GetTrueName(),id:n.GetID()},{val:"BLAST",id:"kw_blast"},{val:"FIRE",id:"kw_fire"},{val:"GAS",id:"kw_gas"},{val:"SHRAPNEL",id:"kw_shrapnel"}]});const o=i.KeywordFactory.CreateKeyword(e,null);t.push(o)}return t}},keyword_ignore:{event_priotity:0,async getContextuallyRelevantKeywordsByObject(e,t,a,n,o,r){const s=i.KeywordFactory.CreateNewKeyword("kw_negate",null);for(let l=0;l<n.value.length;l++){const e=s.SelfData,a=i.KeywordFactory.CreateNewKeyword(n.value[l],null);e.id="kw_negate_"+n.value[l],e.name="NEGATE "+a.GetTrueName(),e.description.length>1&&(e.description[1]={tags:{desc_type:"paragraph"},content:"A model with NEGATE "+a.GetTrueName()+" ignores the Effect of the "+a.GetTrueName()+" Keyword.",glossary:[{val:a.GetTrueName(),id:a.GetID()}]});const o=i.KeywordFactory.CreateKeyword(e,null);t.push(o)}return t},async findFinalKeywordsForEquipment(e,t,n,o,r,s){if(!(o instanceof(await Promise.resolve().then(a.bind(a,7551))).Equipment))return t;const l=i.KeywordFactory.CreateNewKeyword("kw_negate",null);for(let a=0;a<n.value.length;a++){const e=l.SelfData,o=i.KeywordFactory.CreateNewKeyword(n.value[a],null);e.id="kw_negate_"+n.value[a],e.name="NEGATE "+o.GetTrueName(),e.description.length>1&&(e.description[1]={tags:{desc_type:"paragraph"},content:"A model with NEGATE "+o.GetTrueName()+" ignores the Effect of the "+o.GetTrueName()+" Keyword.",glossary:[{val:o.GetTrueName(),id:o.GetID()}]});const r=i.KeywordFactory.CreateKeyword(e,null);t.push(r)}return t}},regenerate_mod:{event_priotity:0,async getContextuallyRelevantKeywordsByObject(e,t,a,n,o,r){const s=i.KeywordFactory.CreateNewKeyword("kw_regenerate",null),l=s.SelfData;l.id=s.GetID()+"_"+n.value,l.name="REGENERATE "+n.value,l.description.length>0&&(l.description[0]={tags:{desc_type:"paragraph"},content:"When you Activate a model with this Keyword, before carrying out any ACTIONS, you can remove up to "+n.value+" BLOOD MARKERS from the model.",glossary:[{val:"ACTIONS",id:"kw_action"},{val:"BLOOD MARKERS",id:"kw_bloodmarker"}]});const c=i.KeywordFactory.CreateKeyword(l,null);return t.push(c),t}},ignore_element:{event_priotity:0,async getContextuallyRelevantKeywordsByObject(e,t,a,n,o,r){const s=i.KeywordFactory.CreateNewKeyword("kw_negate",null);for(let l=0;l<n.element.length;l++){const e=s.SelfData,a=i.KeywordFactory.CreateNewKeyword(n.element[l],null);e.id="kw_negate_"+n.element[l],e.name="NEGATE "+a.GetTrueName(),e.description.length>1&&(e.description[1]={tags:{desc_type:"paragraph"},content:"A model with NEGATE "+a.GetTrueName()+" ignores the Effect of the "+a.GetTrueName()+" Keyword.",glossary:[{val:a.GetTrueName(),id:a.GetID()}]});const o=i.KeywordFactory.CreateKeyword(e,null);t.push(o)}return t},async findFinalKeywordsForEquipment(e,t,n,o,r,s){if(!(o instanceof(await Promise.resolve().then(a.bind(a,7551))).Equipment))return t;const l=i.KeywordFactory.CreateNewKeyword("kw_negate",null);for(let a=0;a<n.element.length;a++){const e=l.SelfData,o=i.KeywordFactory.CreateNewKeyword(n.element[a],null);e.id="kw_negate_"+n.element[a],e.name="NEGATE "+o.GetTrueName(),e.description.length>1&&(e.description[1]={tags:{desc_type:"paragraph"},content:"A model with NEGATE "+o.GetTrueName()+" ignores the Effect of the "+o.GetTrueName()+" Keyword.",glossary:[{val:o.GetTrueName(),id:o.GetID()}]});const r=i.KeywordFactory.CreateKeyword(e,null);t.push(r)}return t}},add_ignore_mods:{event_priotity:0,async getContextuallyRelevantKeywordsByObject(e,t,a,n,r,s){const l=i.KeywordFactory.CreateNewKeyword("kw_ignoremodifier",null);for(let c=0;c<n.modifiers.length;c++){const e=l.SelfData;e.id="kw_ignoremodifier"+n.modifiers[c],e.name="IGNORE "+(0,o.h8)(n.modifiers[c]).toUpperCase();const a=i.KeywordFactory.CreateKeyword(e,null);t.push(a)}return t}},ignore_mod:{event_priotity:0,async findFinalKeywordsForEquipment(e,t,a,n,r,s){const l=i.KeywordFactory.CreateNewKeyword("kw_ignoremodifier",null);for(let c=0;c<a.modifiers.length;c++){const e=l.SelfData;e.id="kw_ignoremodifier"+a.modifiers[c],e.name="IGNORE "+(0,o.h8)(a.modifiers[c]).toUpperCase();const n=i.KeywordFactory.CreateKeyword(e,null);t.push(n)}return t}},injury_dice_mod:{event_priotity:0,async findFinalKeywordsForEquipment(e,t,a,n,r,s){const l=i.KeywordFactory.CreateNewKeyword("kw_injurydice",null);for(let c=0;c<a.modifiers.length;c++){const e=l.SelfData;e.id="kw_injurydice"+a.modifiers[c].toString(),e.name=(a.modifiers[c]>0?"+":"")+(0,o.h8)(a.modifiers[c].toString()).toUpperCase()+" INJURY DICE";const n=i.KeywordFactory.CreateKeyword(e,null);t.push(n)}return t}},blessed_add_keyword:{event_priotity:0,async getContextuallyRelevantKeywordsByObject(e,t,a,n,o,r){const s=i.KeywordFactory.CreateNewKeyword("kw_blessed",null);if(n.blessed)for(let l=0;l<n.blessed.length;l++){const e=s.SelfData;e.id="kw_blessed_"+n.blessed[l],e.name="BLESSED "+n.blessed,e.description.length>0&&(e.description[0]={tags:{desc_type:"default"},content:"When you deploy a model with this Keyword for the first time in a game, place a number of BLESSING MARKERS beside the model equal to "+n.blessed+".",glossary:[{val:"BLESSING MARKERS",id:"kw_blessingmarker"}]});const a=i.KeywordFactory.CreateKeyword(e,null);t.push(a)}return t}},injury_flat_mod:{event_priotity:0,async findFinalKeywordsForEquipment(e,t,a,n,r,s){const l=i.KeywordFactory.CreateNewKeyword("kw_injurymodifier",null);for(let c=0;c<a.modifiers.length;c++){const e=l.SelfData;e.id="kw_injurymodifier"+a.modifiers[c].toString(),e.name=(a.modifiers[c]>0?"+":"")+(0,o.h8)(a.modifiers[c].toString()).toUpperCase()+" INJURY MODIFIER";const n=i.KeywordFactory.CreateKeyword(e,null);t.push(n)}return t}},blast_mod:{event_priotity:0,async findFinalKeywordsForEquipment(e,t,a,n,r,s){const l=i.KeywordFactory.CreateNewKeyword("kw_blast",null);for(let c=0;c<a.modifiers.length;c++){const e=l.SelfData;e.id="kw_blast"+a.modifiers[c].toString(),e.name="BLAST "+(0,o.h8)(a.modifiers[c].toString()).toUpperCase()+'"';const n=i.KeywordFactory.CreateKeyword(e,null);t.push(n)}return t}},cleave_mod:{event_priotity:0,async findFinalKeywordsForEquipment(e,t,a,n,r,s){const l=i.KeywordFactory.CreateNewKeyword("kw_cleave",null);for(let c=0;c<a.modifiers.length;c++){const e=l.SelfData;e.id="kw_cleave"+a.modifiers[c].toString(),e.name="CLEAVE "+(0,o.h8)(a.modifiers[c].toString()).toUpperCase();const n=i.KeywordFactory.CreateKeyword(e,null);t.push(n)}return t}},plus_dice:{event_priotity:0,async findFinalKeywordsForEquipment(e,t,a,n,r,s){const l=i.KeywordFactory.CreateNewKeyword("kw_plusdice",null);for(let c=0;c<a.val.length;c++){const e=l.SelfData;e.id="kw_plusdice"+a.val[c].toString(),e.name="+"+(0,o.h8)(a.val[c]).toUpperCase()+" DICE";const n=i.KeywordFactory.CreateKeyword(e,null);t.push(n)}return t}},minus_dice:{event_priotity:0,async findFinalKeywordsForEquipment(e,t,a,n,r,s){const l=i.KeywordFactory.CreateNewKeyword("kw_minusdice",null);for(let c=0;c<a.val.length;c++){const e=l.SelfData;e.id="kw_minusdice"+a.val[c].toString(),e.name="-"+(0,o.h8)(a.val[c]).toUpperCase()+" DICE";const n=i.KeywordFactory.CreateKeyword(e,null);t.push(n)}return t}},automatic_mod:{event_priotity:0,async findFinalKeywordsForEquipment(e,t,a,n,r,s){const l=i.KeywordFactory.CreateNewKeyword("kw_automatic",null);for(let c=0;c<a.val.length;c++){const e=l.SelfData;e.id="kw_automatic"+a.val[c].toString(),e.name="AUTOMATIC "+(0,o.h8)(a.val[c].toString()).toUpperCase();const n=i.KeywordFactory.CreateKeyword(e,null);t.push(n)}return t}},keyword_add:{event_priotity:0,async getContextuallyRelevantKeywordsByID(e,t,a,n,o,i){if(n.value)for(let r=0;r<n.value.length;r++)t.includes(n.value[r])||t.push(n.value[r]);return t}},keyword_mod:{event_priotity:1,async getContextuallyRelevantKeywordsByID(e,t,a,n,o,i){if(n.mods)for(let r=0;r<n.mods.length;r++){const e=n.mods[r];"add"==e.type&&(t.includes(e.value)||t.push(e.value)),"remove"==e.type&&(t=t.filter((t=>t!=e.value)))}return t}},equipment_modifier:{event_priotity:0,async getnewrange(e,t,a,n,i,r){let s=!1;if(a.equipment_type)for(let l=0;l<a.equipment_type.length;l++){const e=a.equipment_type[l];"tag"==e.res_type&&(0,o.Kg)(r.MyEquipment.SelfDynamicProperty.OptionChoice.Tags,e.value)&&(s=!0)}if(s&&a.modifier_type)for(let o=0;o<a.modifier_type.length;o++){const e=a.modifier_type[o];"range"==e.type&&(t+=e.value)}return t}},get_elite_count_cap:{event_priotity:0,async getNumberOfElite(e,t,a,n,o,i){return n.modify_value?t+n.modify_value:t}},add_onto_warband:{event_priotity:0,async showSkillOnWarband(e,t,a,n,o,i,r){return!0},async showEquipmentOnWarband(e,t,a,n,o,i,r){return!0}},keyword_mod_remove:{event_priotity:2,async getContextuallyRelevantKeywordsByID(e,t,a,n,o,i){if(n.mods)for(let r=0;r<n.mods.length;r++){const e=n.mods[r];"remove"==e.type&&(t=t.filter((t=>t!=e.value)))}return t}},set_stat:{event_priotity:1,async updateModelStats(e,t,a,n,o){for(let i=0;i<a.upgrades.length;i++){const e=a.upgrades[i];"armour"==e.stat&&(t.armour=e.value),"movement"==e.stat&&(t.movement=e.value),"melee"==e.stat&&(t.melee=e.value),"ranged"==e.stat&&(t.ranged=e.value),"base"==e.stat&&(t.base?Math.max(...t.base)<Math.max(e.value)&&(t.base=e.value):t.base=e.value),"movetype"==e.stat&&(t.movetype=e.value),"potential"==e.stat&&(t.potential=e.value),"mercenary"==e.stat&&(t.mercenary=e.value)}return t}},demote:{event_priotity:0,async onGainInjury(e,t,a,n,o,i){i.Elite=!1}},kill_character:{event_priotity:0,async onGainInjury(e,t,a,n,o,i){const r=await i.GetMaxScars();i.SetScars(r)}},capture_character:{event_priotity:0,async onGainInjury(e,t,a,n,o,i){i.State="lost"}},strip_equipment:{event_priotity:0,async onGainInjury(e,t,a,n,o,i){await i.EmptyStash()}},remove_on_equip:{event_priotity:0,async onGainEquipment(e,t,n,i,r,s,l){if(l instanceof(await Promise.resolve().then(a.bind(a,7891))).WarbandMember){const e=[];for(let t=0;t<l.GetEquipment().length;t++){const a=l.GetEquipment()[t];if(n.removed)for(let t=0;t<n.removed.length;t++){const i=n.removed[t];if((!i.category||a.equipment.GetEquipmentItem().Category==i.category)&&(!i.tag||(0,o.Kg)(a.equipment.GetEquipmentItem().Tags,i.tag)||(0,o.Kg)(a.equipment.Tags,i.tag))){if("ducat"==i.res_type&&0==a.purchase.CostType)if("maximum"==i.param){if(a.purchase.ItemCost>Number(i.value)){e.push(a);continue}}else if(a.purchase.ItemCost<Number(i.value)){e.push(a);continue}if("keyword"==i.res_type){let t=!1;for(let e=0;e<a.equipment.GetEquipmentItem().GetKeyWords().length;e++)a.equipment.GetEquipmentItem().GetKeyWords()[e].ID==i.value&&(t=!0);if(1==t){e.push(a);continue}}"all"!=i.res_type&&("id"!=i.res_type||a.equipment.GetEquipmentItem().ID!=i.value)||e.push(a)}}}for(let t=0;t<e.length;t++)await l.DeleteStash(e[t]),await l.MyContext.DirectAddStash(e[t])}}},ignore_scar:{event_priotity:0,async careAboutInjury(e,t,a,n,o,i,r){if(n.requirements)for(let s=0;s<n.requirements.length;s++){const e=n.requirements[s];if("id"==e.type&&r.CurModel.ID==e.value)return!1}return t},async onGainInjury(e,t,a,n,o,i){if(a.requirements){let e=!1;for(let t=0;t<a.requirements.length;t++){const n=a.requirements[t];"id"==n.type&&i.CurModel.ID==n.value&&(e=!0)}e&&(i.ScarReserve-=1)}else i.ScarReserve-=1}},auto_retire:{event_priotity:1,async onGainInjury(e,t,a,o,i,r){if(r.GetInjuriesList().filter((e=>e.ID==a.id)).length>=a.count){const a=new n.J;await a.runEvent("careAboutInjury",e,[r],!0,t)&&(r.State="lost")}}}};var _=a(5867);class b extends _.p{constructor(e,t){super(e),this.SelfData=void 0,this.ContextKeys={},this.ContextData=y,this.MyContext=null,this.SelfData=e,this.MyContext=t,e.contextdata&&(this.ContextKeys=e.contextdata)}GetTrueName(){return void 0!=this.Name?this.Name:"name_unidentified"}GetPresentationName(){return void 0!=this.Name?this.Name:"name_unidentified"}async GrabContextPackages(e,t,a){return[]}}},9100:function(e,t,a){"use strict";a.d(t,{A:function(){return o}});var n=a(1235);class o extends n.Z{constructor(){super(...arguments),this.EventCache={}}async GrabContextPackages(e,t,a){if(null!=this.EventCache[e])return this.EventCache[e];{const n=await this.GrabSubPackages(e,t,a);for(let e=0;e<n.length;e++)n[e].callpath.push("DynamicContextObject"),null==n[e].dyncontext&&(n[e].dyncontext=this);return this.EventCache[e]=n,n}}async GrabSubPackages(e,t,a){return[]}}},5961:function(e,t,a){"use strict";a.d(t,{x:function(){return o}});var n=a(1235);class o extends n.Z{async GrabContextPackages(e,t,a){const n=[];if(this.ContextData)for(const i of Object.keys(this.ContextKeys)){const a=this.ContextData[i];if(void 0==a)continue;const o=a[e];if(void 0!==o){const e={priority:a.event_priotity,source:t,self:this,callback:o,callbackdict:this.ContextKeys[i],dyncontext:this.MyContext,callpath:["StaticContextObject"]};n.push(e)}}const o=await this.GrabSpecialPackages(e,t,a);for(let i=0;i<o.length;i++)o[i].callpath.push("StaticContextObject"),n.push(o[i]);return n}async GrabSpecialPackages(e,t,a){return[]}}},247:function(e,t,a){"use strict";a.r(t),a.d(t,{Ability:function(){return o}});var n=a(8364);class o extends n.e{constructor(e,t){super(e,t)}}},8364:function(e,t,a){"use strict";a.d(t,{e:function(){return i}});var n=a(2573),o=a(6184);class i extends n.u{constructor(e,t){super(e,t),this.Description=void 0,this.Description=(0,o.vD)(e.description,this)}}},6422:function(e,t,a){"use strict";a.d(t,{C:function(){return o}});var n=a(8364);class o extends n.e{constructor(e,t){super(e,t),this.TableVal=void 0,this.TableVal=e.table_val.join("-")}}},7308:function(e,t,a){"use strict";a.d(t,{Skill:function(){return o}});var n=a(8364);class o extends n.e{constructor(e,t){super(e,t),this.TableVal=void 0,this.SkillGroups=void 0,this.SkillGroups=e.skill_group,e.table_val?this.TableVal=e.table_val:this.TableVal=-1}}},9909:function(e,t,a){"use strict";a.r(t),a.d(t,{Upgrade:function(){return o}});var n=a(8364);class o extends n.e{constructor(e,t){super(e,t)}GetSpecialCategory(){return this.Tags.special_category?this.Tags.special_category.toString():"upgrades"}}},7520:function(e,t,a){"use strict";a.d(t,{g:function(){return i}});var n=a(6184),o=a(5961);class i extends o.x{constructor(e,t){super(e,t),this.Description=void 0,this.ItemIndex=void 0,this.Sections=void 0,this.Description=(0,n.vD)(e.description,this),this.ItemIndex=e.item_index,this.Sections=this.BuildSections(e.sections)}BuildSections(e){const t=[];for(let a=0;a<e.length;a++){const o=e[a];let i=[];void 0!=o.content&&(i=o.content);const r={title:e[a].title,description:(0,n.vD)(e[a].description,this),content:this.BuildSections(i)};t.push(r)}return t}destructor(){let e=0;for(e=0;e<this.Description.length;e++)delete this.Description[e]}GetDescription(){return this.Description.length>0?this.Description[0].Content:""}}},7551:function(e,t,a){"use strict";a.r(t),a.d(t,{Equipment:function(){return u},deepCopyEquipmentRestriction:function(){return d}});var n=a(2573),o=a(6184),i=a(9353),r=a(7880),s=a(363),l=a(8314),c=a(5035);function d(e){var t,a,n,o,i;return{required:null===(t=e.required)||void 0===t?void 0:t.map((e=>({...e}))),removed:null===(a=e.removed)||void 0===a?void 0:a.map((e=>({...e}))),added:null===(n=e.added)||void 0===n?void 0:n.map((e=>({...e}))),permitted:null===(o=e.permitted)||void 0===o?void 0:o.map((e=>({...e}))),banned:null===(i=e.banned)||void 0===i?void 0:i.map((e=>({...e})))}}class u extends n.u{constructor(e,t){super(e,t),this.Description=void 0,this.Lore=void 0,this.KeyWord=[],this.Category=void 0,this.Stats=void 0,this.Distance=void 0,this.Abilities=[],this.Modifiers=[],this.EquipmentItems=[],this.Description=(0,o.vD)(e.description,this),this.Lore=(0,o.vD)(e.lore,this),this.Category=e.category,this.Stats=e.stats,this.Distance=e.distance,e.modifiers&&(this.Modifiers=e.modifiers),this.BuildKeywords(e.keywords)}async GrabSpecialPackages(e,t,a){const n=[];for(let o=0;o<this.Abilities.length;o++){const i=await this.Abilities[o].GrabContextPackages(e,t,a);for(let e=0;e<i.length;e++)i[e].callpath.push("EquipmentAbility"),n.push(i[e])}return n}GetModifiers(){return this.Modifiers.join(", ")}BuildKeywords(e){for(let t=0;t<e.length;t++){const a=i.KeywordFactory.CreateNewKeyword(e[t],this);this.KeyWord.push(a)}}async BuildAbilities(e){for(let t=0;t<e.length;t++){const a=await c.AbilityFactory.CreateNewAbility(e[t],this);this.Abilities.push(a)}}async BuildFactionEquipment(e){const t=s.D.MakeRequest({searchtype:"complex",searchparam:{type:"factionequipmentrelationship",request:{operator:"and",terms:[{item:"equipment_id",value:e,equals:!0,strict:!0}],subparams:[]}}});t.sort((0,o.Ah)(["name","id"]));for(let a=0;a<t.length;a++)this.EquipmentItems.push(await r.EquipmentFactory.CreateFactionEquipment(t[a],this))}GetCategory(){return this.Category}IsCatOrTagged(e){return this.Category==e||(0,o.Kg)(this.Tags,e)}GetRange(){let e="";return this.Distance&&(e+=this.Distance+'"'),this.Distance&&this.Stats.melee&&(e+=" / "),this.Stats.melee&&(e+="Melee"),e}GetHandsMelee(){return this.Stats.hands_melee?this.Stats.hands_melee.toString()+" Hands":""}GetHandsRanged(){return this.Stats.hands_ranged?this.Stats.hands_ranged.toString()+" Hands":""}GetKeyWords(){return this.KeyWord}GetKeyWordIDs(){const e=[];for(let t=0;t<this.KeyWord.length;t++)e.push(this.KeyWord[t].GetID());return e}GetDescription(){return this.Description&&0!==this.Description.length?(0,l.fE)(this,this.Description):null}GetLore(){return this.Lore&&0!==this.Lore.length?(0,l.fE)(this,this.Lore):null}}},3588:function(e,t,a){"use strict";a.d(t,{ExplorationLocation:function(){return r}});var n=a(2573),o=a(6184),i=a(6264);class r extends n.u{constructor(e,t){super(e,t),this.Description=void 0,this.TableValue=void 0,this.RestrictedSelection=null,this.Description=(0,o.vD)(e.description,this),this.TableValue=e.location_value}async RunRestrictions(){const e=new i.J;this.RestrictedSelection=await e.runEvent("getLocationRestrictions",this,[],[],null)}async RunOptionsParse(){const e=new i.J;for(let t=0;t<this.MyOptions.length;t++){const a=await e.runEvent("parseOptionFilterDown",this,[],this.MyOptions[t].Selections,t);this.MyOptions[t].Selections=a;const n=await e.runEvent("parseOptionsIntoRelevantType",this,[],this.MyOptions[t].Selections,t);this.MyOptions[t].Selections=n}}}},595:function(e,t,a){"use strict";a.d(t,{C:function(){return s}});var n=a(6184),o=a(5961),i=a(363),r=a(6298);class s extends o.x{constructor(e,t){super(e,t),this.ExplorationLocations=[],this.Rarity=void 0,this.Rarity=e.rarity}async BuildTableLocations(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const a=i.D.MakeRequest({searchtype:"complex",searchparam:{type:"explorationlocation",request:{operator:"and",terms:[{item:"tags",value:"exploration_table",equals:!0,strict:!0,istag:!0,tagvalue:e}],subparams:[]}}});a.sort((0,n.Ah)(["location_value"]));for(let n=0;n<a.length;n++)try{const e=await r.ExplorationFactory.CreateExplorationLocation(a[n],this,t);this.ExplorationLocations.push(e)}catch(o){console.log(o)}}}},5187:function(e,t,a){"use strict";a.d(t,{X:function(){return s}});var n=a(363),o=a(6184),i=a(5961),r=a(1444);class s extends i.x{constructor(e,t){super(e,t),this.FactionDataList=[],this.SubModelsList=[],this.Team=void 0,this.Team=e.team,this.GatherLists(e)}GatherLists(e){this.FactionDataList.push(e);const t=n.D.MakeRequest({searchtype:"complex",searchparam:{type:"factionvariant",request:{operator:"and",terms:[{item:"base_id",value:e.id,equals:!0,strict:!0}],subparams:[]}}});for(let a=0;a<t.length;a++){const n=s.MergeFactions(e,t[a]);this.FactionDataList.push(n)}}static MergeFactions(e,t){const a=(0,o.oD)([e.rules,t.rules],[t.cut_rules]),n={id:t.id,name:t.name,source:t.source,tags:{...e.tags,...t.tags},contextdata:{...e.contextdata,...t.contextdata},description:t.description?t.description:e.description,team:t.team,rules:a,variant_name:t.name,options:t.options};return t.tags.url_custom?n.tags.url_custom=t.tags.url_custom:n.tags.url_custom=null,n}async ConstructFactions(){for(let e=0;e<this.FactionDataList.length;e++){const t=await r.FactionFactory.CreateFaction(this.FactionDataList[e],this.MyContext);this.SubModelsList.push({var_name:t.Variant,faction:t})}}GetBaseFac(){for(let e=0;e<this.SubModelsList.length;e++)if("base"==this.SubModelsList[e].var_name)return this.SubModelsList[e].faction;return this.SubModelsList[0].faction}GetBaseName(){for(let e=0;e<this.SubModelsList.length;e++)if("base"==this.SubModelsList[e].var_name)return this.SubModelsList[e].faction.Name;return""}GetDisplayName(){const e=this.GetBaseFac();return void 0!=e?e.Name?e.Name:"":this.Name?this.Name:""}GetDescription(){const e=this.GetBaseFac();return void 0!=e&&e.Description.length>0?e.Description[0].Content:""}}},2833:function(e,t,a){"use strict";a.d(t,{Rule:function(){return r}});var n=a(6184),o=a(6264),i=a(2573);class r extends i.u{constructor(e,t){super(e,t),this.Description=void 0,this.BonusUpgrades=void 0,this.Description=(0,n.vD)(e.description,this)}async RunOptionsParse(){const e=new o.J;for(let t=0;t<this.MyOptions.length;t++){const a=await e.runEvent("parseOptionFilterDown",this,[],this.MyOptions[t].Selections,t);this.MyOptions[t].Selections=a,this.MyOptions[t].Selections=await e.runEvent("parseOptionsIntoRelevantType",this,[],this.MyOptions[t].Selections,t)}}async RunUpgradeOptions(){const e=new o.J;this.BonusUpgrades=await e.runEvent("getFactionRuleUpgrades",this,[],[],null)}}},2995:function(e,t,a){"use strict";a.d(t,{u:function(){return l}});var n=a(363),o=a(7479),i=a(6184),r=a(5961),s=a(3600);class l extends r.x{constructor(e,t){super(e,t),this.ModelDataList=[],this.SubModelsList=[],this.Team=void 0,this.Team=e.team,this.GatherLists(e)}GatherLists(e){this.ModelDataList.push(e);const t=n.D.MakeRequest({searchtype:"complex",searchparam:{type:"modelvariant",request:{operator:"and",terms:[{item:"base_id",value:e.id,equals:!0,strict:!0}],subparams:[]}}});for(let a=0;a<t.length;a++){const n=l.MergeModels(e,t[a]);this.ModelDataList.push(n)}}static MergeModels(e,t){const a=(0,i.oD)([e.keywords,t.keywords],[t.cut_keywords]),n=(0,i.oD)([e.abilities,t.new_abilities],[t.cut_abilities]);return{id:t.id,name:t.name,source:t.source,tags:{...e.tags,...t.tags},contextdata:{...e.contextdata,...t.contextdata},description:t.description?t.description:e.description,lore:t.lore?t.lore:e.lore,team:t.team,stats:(0,s.A6)(e.stats,t.stats),keywords:a,abilities:n,variant_name:t.variant_name}}async ConstructModels(){for(let e=0;e<this.ModelDataList.length;e++){const t=await o.ModelFactory.CreateModel(this.ModelDataList[e],this.MyContext);this.SubModelsList.push({var_name:t.Variant,model:t})}}}},3600:function(e,t,a){"use strict";a.d(t,{A:function(){return u},A6:function(){return i},DF:function(){return m},Lp:function(){return d},NJ:function(){return c},RZ:function(){return o},aR:function(){return h},n8:function(){return r}});var n=a(6184);function o(e,t){var a,n;return e.melee===t.melee&&e.ranged===t.ranged&&(null===(a=e.base)||void 0===a?void 0:a.toString())===(null===(n=t.base)||void 0===n?void 0:n.toString())&&e.armour===t.armour&&e.movetype===t.movetype&&e.potential===t.potential&&e.mercenary===t.mercenary}function i(e,t){const a={};return void 0!=e.movement&&(a.movement=e.movement),void 0!=e.melee&&(a.melee=e.melee),void 0!=e.ranged&&(a.ranged=e.ranged),void 0!=e.base&&(a.base=e.base),void 0!=e.armour&&(a.armour=e.armour),void 0!=e.movetype&&(a.movetype=e.movetype),void 0!=e.potential&&(a.potential=e.potential),void 0!=e.mercenary&&(a.mercenary=e.mercenary),void 0!=t.movement&&(a.movement=t.movement),void 0!=t.melee&&(a.melee=t.melee),void 0!=t.ranged&&(a.ranged=t.ranged),void 0!=t.base&&(a.base=t.base),void 0!=t.armour&&(a.armour=t.armour),void 0!=t.movetype&&(a.movetype=t.movetype),void 0!=t.potential&&(a.potential=t.potential),void 0!=t.mercenary&&(a.mercenary=t.mercenary),a}function r(e,t){const a={},n=[],o=[],i=[],r=[],l=[],c=[],d=[],u=[];void 0!=e.movement&&n.push(e.movement),void 0!=e.melee&&o.push(e.melee),void 0!=e.ranged&&i.push(e.ranged),void 0!=e.base&&r.push(e.base),void 0!=e.armour&&l.push(e.armour),void 0!=e.movetype&&c.push(e.movetype),void 0!=e.potential&&d.push(e.potential),void 0!=e.mercenary&&u.push(e.mercenary);try{for(let e=0;e<t.length;e++){const a=t[e];let h=!0;for(let e=0;e<a.length;e++)if(0==s(a[e])){h=!1;break}if(h)for(let e=0;a.length;e++){const t=a[e];void 0!=t.armour&&l.push(t.armour),void 0!=t.base&&r.push(t.base),void 0!=t.melee&&o.push(t.melee),void 0!=t.mercenary&&u.push(t.mercenary),void 0!=t.movement&&n.push(t.movement),void 0!=t.movetype&&c.push(t.movetype),void 0!=t.potential&&d.push(t.potential),void 0!=t.ranged&&i.push(t.ranged)}}}catch(h){console.log(h)}if(n.length>0){const e=[];for(let t=0;t<n.length;t++)e.push(n[t]);a.movement=e}if(c.length>0){const e=[];for(let t=0;t<c.length;t++)e.push(c[t]);a.movetype=e}if(l.length>0){const e=[];for(let t=0;t<l.length;t++)e.push(l[t]);a.armour=e}if(u.length>0){const e=[];for(let t=0;t<u.length;t++)e.push(u[t]);a.mercenary=e}if(d.length>0){const e=[];for(let t=0;t<d.length;t++)e.push(d[t]);a.potential=e}if(r.length>0){const e=[];for(let t=0;t<r.length;t++)e.push(r[t]);a.base=e}if(i.length>0){const e=[];for(let t=0;t<i.length;t++)e.push(i[t]);a.ranged=e}if(o.length>0){const e=[];for(let t=0;t<o.length;t++)e.push(o[t]);a.melee=e}return a}function s(e){return 1===Object.values(e).filter((e=>void 0!==e)).length}function l(e){return void 0===e?[]:Array.isArray(e)?e:[e]}function c(e){const t=l(e.movement),a=l(e.movetype);if(0===t.length||0===a.length)return"";return`${t.map((e=>e.toString())).join("/")}"/${a.map(n.Us).join("/")}`}function d(e){const t=l(e.ranged);return 0===t.length?"0":t.map((e=>(e>0?"+":e<0?"-":"")+Math.abs(e))).join("/")}function u(e){const t=l(e.melee);return 0===t.length?"0":t.map((e=>(e>0?"+":e<0?"-":"")+Math.abs(e))).join("/")}function h(e){const t=l(e.armour);return 0===t.length?"0":t.map((e=>e.toString())).join("/")}function m(e){const t=[];return void 0!=e.movement&&t.push("Movement: "+e.movement+'"'),void 0!=e.movetype&&t.push("Move Type: "+e.movetype),void 0!=e.melee&&t.push("Melee: "+e.melee),void 0!=e.ranged&&t.push("Ranged: "+e.ranged),void 0!=e.armour&&t.push("Armour: "+e.armour),void 0!=e.base&&t.push("Base: "+e.base.join("x")+"mm"),t.join(", ")}},9001:function(e,t,a){"use strict";a.d(t,{N:function(){return s}});var n=a(207),o=a(6647),i=a(6184),r=a(5961);class s extends r.x{constructor(e,t){super(e,t),this.Description=void 0,this.ImgLink=void 0,this.EvenMatch=void 0,this.ForcesDesc=void 0,this.BattlefieldSize=void 0,this.BattlefieldExtra=void 0,this.BattlefieldTerrainStandard=[],this.InfiltratorType=void 0,this.InfiltratorDesc=void 0,this.DeploymentDesc=void 0,this.StaggeredDeployment=void 0,this.VictoryDesc=void 0,this.BattleMin=void 0,this.BattleMax=void 0,this.BattlelengthDesc=void 0,this.Deeds=[],this.OptionalDeeds=[],this.DeedsDesc=void 0,this.SpecialRules=[],this.StandardTerrainData=[{tags:{desc_type:"default"},content:"The player with the lower number of models in their force can place one of the following terrain pieces on the table:"},{tags:{desc_type:"list"},content:"",subcontent:[{tags:{desc_type:"default"},content:"One Building (a tower, house etc.)"},{tags:{desc_type:"default"},content:"One Piece of Dangerous Terrain (swamp, barbed wire etc.)"},{tags:{desc_type:"default"},content:"One Piece of Difficult Terrain (forest, rocky ground)"},{tags:{desc_type:"default"},content:"One Piece of Impassable terrain (12\u201d river with a bridge or ford, sheer cliffs etc.) Maximum two pieces per battle"},{tags:{desc_type:"default"},content:"One Hill"},{tags:{desc_type:"default"},content:"One Fence/wall/other defendable terrain piece (max one per player)"},{tags:{desc_type:"default"},content:"6\u201d Section of a Trench"}]},{tags:{desc_type:"default"},content:"Each building must be placed at least 8\u201d away from any table edge and at least 6\u201d away from the nearest building terrain piece."},{tags:{desc_type:"default"},content:"In addition, both players should add six smaller terrain pieces like boxes, sandbags, bomb craters, wells, fountains etc. anywhere on the table to create cover."}],this.Description=(0,i.vD)(e.description,this),this.ImgLink=e.img_link,this.EvenMatch=!e.forces||(!e.forces.even_match||e.forces.even_match),this.ForcesDesc=(0,i.vD)(e.forces?e.forces.description:[],this),this.BattlefieldSize=(0,i.vD)(e.battlefield.field_size,this),this.BattlefieldExtra=(0,i.vD)(e.battlefield.extra_features,this),this.BattlefieldTerrainStandard=(0,i.vD)(this.StandardTerrainData,this),this.InfiltratorType=e.infiltrators.allowed,this.InfiltratorDesc=(0,i.vD)(e.infiltrators.description,this),this.StaggeredDeployment=e.deployment.staggered,this.DeploymentDesc=(0,i.vD)(e.deployment.description,this),this.VictoryDesc=(0,i.vD)(e.victory_conditions.description,this),this.BattleMin=e.battle_length.min,this.BattleMax=e.battle_length.max,this.BattlelengthDesc=(0,i.vD)(e.battle_length.description,this),this.DeedsDesc=(0,i.vD)(e.glorious_deeds.description,this),this.BuildDeeds(e.glorious_deeds.deeds),this.BuildOptionalDeeds(e.glorious_deeds.optional_deeds)}async BuildRules(e){for(let t=0;t<e.length;t++){const a=await o.RuleFactory.CreateNewScenarioRule(e[t],this);this.SpecialRules.push(a)}}BuildDeeds(e){for(let t=0;t<e.length;t++){const a=n.GloriousDeedFactory.CreateNewGloriousDeed(e[t],this);this.Deeds.push(a)}}BuildOptionalDeeds(e){for(let t=0;t<e.length;t++){const a=n.GloriousDeedFactory.CreateNewGloriousDeed(e[t],this);this.OptionalDeeds.push(a)}}GetDescription(){return this.Description.length>0?this.Description[0].Content:"This is a Scenario"}GetImageUrl(){return this.ImgLink}}},6892:function(e,t,a){"use strict";a.d(t,{o:function(){return r}});var n=a(6435),o=a(363),i=a(207);class r{constructor(){this.ListOfObjectives=[],this.ListOfDeployments=[],this.ListOfVictories=[],this.ListOfDeedsGroupA=[],this.ListOfDeedsGroupB=[],this.ListOfDeedsGroupC=[],this.CurrentScenario=void 0,this.DeploymentDataDesc=[],this.ScenarioDataDesc=[],this.DeedDataDesc=[],this.RulesDataDesc=[],this.LockDeployment=!1,this.LockObjectives=!1,this.LockVictories=!1,this.LockDeeds=!1,this.CurrentScenario=null,this.GatherObjectives(),this.GatherDeployments(),this.GatherVictories(),this.BuildDeeds(3,this.ListOfDeedsGroupA),this.BuildDeeds(1,this.ListOfDeedsGroupB),this.BuildDeeds(2,this.ListOfDeedsGroupC)}async ResetScenario(){this.CurrentScenario=await this.ConstructNewScenario()}async SetCodeScenario(e){const t=this.GenerateScenarioCode(e);this.CurrentScenario=null!=t?await this.ConstructNewScenario(t):await this.ConstructNewScenario()}GenerateScenarioCode(e){const t=e.split("-");if(2!=t.length)return null;if(3!=t[0].length||4!=t[1].length)return null;return{obj:Number(t[0][0]),dep:Number(t[0][1]),vic:Number(t[0][2]),gl_a_1:Number(t[1][0]),gl_a_2:Number(t[1][1]),gl_b_1:Number(t[1][2]),gl_b_2:Number(t[1][3])}}GenerateCodeFromScenario(e){return e.obj.toString()+e.dep.toString()+e.vic.toString()+"-"+e.gl_a_1.toString()+e.gl_a_2.toString()+e.gl_b_1.toString()+e.gl_b_2.toString()}GatherObjectives(){const e=o.D.MakeRequest({searchtype:"file",searchparam:{type:"scenarioobjective"}});this.ListOfObjectives=e}GatherDeployments(){const e=o.D.MakeRequest({searchtype:"file",searchparam:{type:"scenariodeployment"}});this.ListOfDeployments=e}GatherVictories(){const e=o.D.MakeRequest({searchtype:"file",searchparam:{type:"scenariovictories"}});this.ListOfVictories=e}BuildDeeds(e,t){const a=o.D.MakeRequest({searchtype:"complex",searchparam:{type:"gloriousdeed",request:{operator:"and",terms:[{item:"tags",value:"random_gen_group",equals:!0,strict:!0,istag:!0,tagvalue:e}],subparams:[]}}});for(let n=0;n<a.length;n++){const e=i.GloriousDeedFactory.CreateGloriousDeed(a[n],null);t.push(e)}}SelectObjective(e,t){if(e.obj)return e.obj;if(null!=t){const e=this.ListOfObjectives.filter((e=>e.id_num_code==t.obj));if(e.length>=1)return e[0]}let a=0;for(let i=0;i<this.ListOfObjectives.length;i++){const e=this.ListOfObjectives[i];e.tags.weight?a+=parseInt(e.tags.weight.toString()):a+=10}const n=Math.floor(Math.random()*a);let o=0;for(let i=0;i<this.ListOfObjectives.length;i++){const e=this.ListOfObjectives[i];if(o+=e.tags.weight?parseInt(e.tags.weight.toString()):10,n<o)return e}return this.ListOfObjectives[0]}SelectDeployment(e,t,a){if(t.dep)return t.dep;if(null!=a){const e=this.ListOfDeployments.filter((e=>e.id_num_code==a.dep));if(e.length>=1)return e[0]}let n=0;const o=this.ListOfDeployments.filter((t=>!e.banned_deployments.includes(t.id)));for(let s=0;s<o.length;s++){const e=o[s];e.tags.weight?n+=parseInt(e.tags.weight.toString()):n+=10}const i=Math.floor(Math.random()*n);let r=0;for(let s=0;s<o.length;s++){const e=o[s];if(r+=e.tags.weight?parseInt(e.tags.weight.toString()):10,i<r)return e}return o[0]}SelectVictories(e,t){if(e.vic)return e.vic;if(null!=t){const e=this.ListOfVictories.filter((e=>e.id_num_code==t.vic));if(e.length>=1)return e[0]}let a=0;for(let i=0;i<this.ListOfVictories.length;i++){const e=this.ListOfVictories[i];e.tags.weight?a+=parseInt(e.tags.weight.toString()):a+=10}const n=Math.floor(Math.random()*a);let o=0;for(let i=0;i<this.ListOfVictories.length;i++){const e=this.ListOfVictories[i];if(o+=e.tags.weight?parseInt(e.tags.weight.toString()):10,n<o)return e}return this.ListOfVictories[0]}ReturnLockedEntries(){if(null==this.CurrentScenario)return{ddsA:null,ddsB:null,dep:null,obj:null,vic:null};{const e=this.GenerateScenarioCode(this.CurrentScenario.id);if(null==e)return{ddsA:null,ddsB:null,dep:null,obj:null,vic:null};const t=this.ListOfDeedsGroupA.filter((t=>t.GeneratedCode==e.gl_a_1)),a=this.ListOfDeedsGroupA.filter((t=>t.GeneratedCode==e.gl_a_2)),n=this.ListOfDeedsGroupB.filter((t=>t.GeneratedCode==e.gl_b_1)),o=this.ListOfDeedsGroupB.filter((t=>t.GeneratedCode==e.gl_b_2)),i=this.ListOfDeployments.filter((t=>t.id_num_code==e.dep)),r=this.ListOfObjectives.filter((t=>t.id_num_code==e.obj)),s=this.ListOfVictories.filter((t=>t.id_num_code==e.vic));return{ddsA:this.LockDeeds?[t[0],a[0]]:null,ddsB:this.LockDeeds?[n[0],o[0]]:null,dep:this.LockDeployment?i[0]:null,obj:this.LockObjectives?r[0]:null,vic:this.LockVictories?s[0]:null}}}GetSetOfDeedsA(e,t){if(e.ddsA)return{elements:[e.ddsA[0],e.ddsA[1]],modifiedId:[e.ddsA[0].GeneratedCode,e.ddsA[1].GeneratedCode]};if(null!=t){const e=this.ListOfDeedsGroupA.filter((e=>e.GeneratedCode==t.gl_a_1)),a=this.ListOfDeedsGroupA.filter((e=>e.GeneratedCode==t.gl_a_2));if(e.length>=1&&a.length>=1)return{elements:[e[0],a[0]],modifiedId:[e[0].GeneratedCode,a[0].GeneratedCode]}}return this.getTwoRandomElements(this.ListOfDeedsGroupA)}GetSetOfDeedsB(e,t){if(e.ddsB)return{elements:[e.ddsB[0],e.ddsB[1]],modifiedId:[e.ddsB[0].GeneratedCode,e.ddsB[1].GeneratedCode]};if(null!=t){const e=this.ListOfDeedsGroupB.filter((e=>e.GeneratedCode==t.gl_b_1)),a=this.ListOfDeedsGroupB.filter((e=>e.GeneratedCode==t.gl_b_2));if(e.length>=1&&a.length>=1)return{elements:[e[0],a[0]],modifiedId:[e[0].GeneratedCode,a[0].GeneratedCode]}}return this.getTwoRandomElements(this.ListOfDeedsGroupB)}async ConstructNewScenario(e){const t=void 0==e?null:e,a=this.ReturnLockedEntries(),o=this.SelectObjective(a,t),i=this.SelectVictories(a,t),r=this.SelectDeployment(i,a,t),s=this.GetSetOfDeedsA(a,t),l=s.elements,c=this.GetSetOfDeedsB(a,t),d=c.elements,u=[];for(let n=0;n<l.length;n++)u.push(l[n].ID);for(let n=0;n<d.length;n++)u.push(d[n].ID);const h={id:o.id+"_"+r.id+"_"+i.id,name:o.name+" | "+r.name+" | "+i.name,source:"core",tags:{},contextdata:{},description:o.description,img_link:r.img_link,forces:i.forces,battlefield:o.battlefield,infiltrators:{allowed:r.infiltrators?r.infiltrators.allowed:1,description:r.infiltrators?r.infiltrators.description:[]},deployment:r.deployment,battle_length:r.battle_length?r.battle_length:{min:5,max:6,description:[{tags:{desc_type:"default"},content:"At the end of the fifth turn of the game, one of the players rolls a D6. If the result is 4 or more, the game ends. If the game continues, the game ends at the end of the sixth turn."}]},victory_conditions:i.victory_conditions,glorious_deeds:{deeds:u,optional_deeds:[],description:[]},special_rules:(o.special_rules||[]).concat(r.special_rules||[])},m={obj:o.name,dep:r.name,vic:i.name,gl_a_1:l[0].GetTrueName(),gl_a_2:l[1].GetTrueName(),gl_b_1:d[0].GetTrueName(),gl_b_2:d[1].GetTrueName()},p={obj:o.id_num_code,dep:r.id_num_code,vic:i.id_num_code,gl_a_1:s.modifiedId[0],gl_a_2:s.modifiedId[1],gl_b_1:c.modifiedId[0],gl_b_2:c.modifiedId[1]},f=await n.ScenarioFactory.CreateScenario(h,null);return this.CurrentScenario={genscen:f,id:this.GenerateCodeFromScenario(p),infobox:m},{genscen:f,id:this.GenerateCodeFromScenario(p),infobox:m}}getTwoRandomElements(e){const t=Math.floor(Math.random()*e.length);let a=t;for(;a===t;)a=Math.floor(Math.random()*e.length);const n=[t,a].sort(((e,t)=>e-t));return{elements:[e[n[0]],e[n[1]]],modifiedId:[e[n[0]].GeneratedCode,e[n[1]].GeneratedCode]}}GetName(){return this.CurrentScenario?this.CurrentScenario.genscen.GetTrueName():"NULL"}GetDeployment(){return this.CurrentScenario?this.CurrentScenario.infobox.dep:"NULL"}GetArchetype(){return this.CurrentScenario?this.CurrentScenario.infobox.obj:"NULL"}GetVictory(){return this.CurrentScenario?this.CurrentScenario.infobox.vic:"NULL"}GetDeeds(){return this.CurrentScenario?[this.CurrentScenario.infobox.gl_a_1,this.CurrentScenario.infobox.gl_a_2,this.CurrentScenario.infobox.gl_b_1,this.CurrentScenario.infobox.gl_b_2]:[]}GetImageID(){return this.CurrentScenario?Number.parseInt(this.CurrentScenario.genscen.ImgLink):131154}GetScenario(){return this.CurrentScenario?this.CurrentScenario.genscen:null}}},709:function(e,t,a){"use strict";a.d(t,{V:function(){return l}});var n=a(6184),o=a(5961),i=a(363),r=a(6498),s=a(1444);class l extends o.x{constructor(e,t){super(e,t),this.Skills=[],this.Factions=[],this.Description=void 0,this.Description=(0,n.vD)(e.description,this)}async GrabSpecialPackages(e,t,a){return[]}async BuildPatronSkills(e){const t=i.D.MakeRequest({searchtype:"complex",searchparam:{type:"skill",request:{operator:"and",terms:[{item:"skill_group",value:e,equals:!0,strict:!0}],subparams:[]}}});for(let a=0;a<t.length;a++)this.Skills.push(await r.SkillFactory.CreateSkill(t[a],this));this.Skills.sort((0,n.Ah)(["Name"]))}async BuildFactionList(e){const t=i.D.MakeRequest({searchtype:"complex",searchparam:{type:"patronrelationship",request:{operator:"and",terms:[{item:"id",value:e,equals:!0,strict:!0}],subparams:[]}}});for(let a=0;a<t.length;a++)for(let e=0;e<t[a].faction_id.length;e++)this.Factions.push(await s.FactionFactory.CreateNewFaction(t[a].faction_id[e],this));this.Factions.sort((0,n.Ah)(["Name"]))}GetName(){return this.Name}GetDescription(){return this.Description}GetMetaDescription(){return this.Description.length>0?this.Description[0].Content:""}}},5593:function(e,t,a){"use strict";a.d(t,{Z:function(){return s}});var n=a(6184),o=a(5961),i=a(363),r=a(6498);class s extends o.x{constructor(e,t){super(e,t),this.Skills=[]}async BuildGroupSkills(e){const t=i.D.MakeRequest({searchtype:"complex",searchparam:{type:"skill",request:{operator:"and",terms:[{item:"skill_group",value:e,equals:!0,strict:!0}],subparams:[]}}});for(let a=0;a<t.length;a++)this.Skills.push(await r.SkillFactory.CreateSkill(t[a],this));this.Skills.sort((0,n.Ah)(["TableVal"]))}}},8204:function(e,t,a){"use strict";a.r(t),a.d(t,{DynamicOptionContextObject:function(){return c}});var n=a(1235),o=a(9100),i=a(6264),r=a(2573),s=a(6184);class l{constructor(e,t){this.Option=void 0,this.SelectionSet=[],this.SelectedChoice=null,this.MyParent=void 0,this.NestedOption=null,this.SelectedID=null,this.Option=e,this.MyParent=t}async GetSelectionChoices(){this.SelectionSet=this.Option.Selections}GetSelectedTitle(){return null!=this.SelectedChoice?this.SelectedChoice.display_str:""}GetSelected(){return this.SelectedChoice}CanChange(){return 0==this.Option.Single||null==this.SelectedChoice}async UserUpdateSelection(e){this.SelectOption(e);const t=await(0,s.Wu)(this.MyParent),a=new i.J;await a.runEvent("onSelectPropertyValue",this.MyParent,[this.MyParent,t],null,this)}SelectOption(e){if(this.SelectedID=e,null==e)this.SelectedChoice=null,this.NestedOption=null;else for(let t=0;t<this.SelectionSet.length;t++)if(this.SelectionSet[t].id==e){this.SelectedChoice=this.SelectionSet[t];const e=this.SelectedChoice.value;e instanceof r.u?(e.MyContext=this.MyParent,this.HandleObjectDynamics(this.SelectedChoice)):this.NestedOption=null;break}}async HandleObjectDynamics(e){this.NestedOption=new c(e.value.SelfData,e.value,this.MyParent),await this.NestedOption.BuildSelections()}}class c extends o.A{constructor(e,t,a){super(e,a),this.OptionChoice=void 0,this.Selections=[],this.OptionChoice=t}async BuildSelections(){await this.ReloadOption();for(let e=0;e<this.OptionChoice.MyOptions.length;e++){const t=new l(this.OptionChoice.MyOptions[e],this);await t.GetSelectionChoices(),this.Selections.push(t)}}async ReloadOption(){await this.OptionChoice.ReloadOptions()}async GrabSubPackages(e,t,a){const o=[],i=await this.OptionChoice.GrabContextPackages(e,t,a);for(let n=0;n<i.length;n++)i[n].dyncontext=this,i[n].callpath.push("DynamicOptionContextObject"),i[n].callpath.push("Option Choice"),o.push(i[n]);for(let l=0;l<this.Selections.length;l++)if(null!=this.Selections[l].SelectedChoice){var r;const i=this.Selections[l].NestedOption;if(null!=i){const n=await i.GrabContextPackages(e,t,a);for(let e=0;e<n.length;e++)n[e].callpath.push("DynamicOptionContextObject"),n[e].callpath.push("SelectedChoiceOption"),o.push(n[e])}else if((null===(r=this.Selections[l].SelectedChoice)||void 0===r?void 0:r.value)instanceof n.Z&&0==this.Selections[l].Option.HideSearch){var s;const n=await(null===(s=this.Selections[l].SelectedChoice)||void 0===s?void 0:s.value.GrabContextPackages(e,t,a));for(let e=0;e<n.length;e++)n[e].callpath.push("DynamicOptionContextObject"),n[e].callpath.push("SelectedChoiceOption"),o.push(n[e])}}return o}ReturnNestedOptions(){const e=[];for(let t=0;t<this.Selections.length;t++){const a=this.Selections[t].NestedOption;null!=a&&e.push(a)}return e}}},2573:function(e,t,a){"use strict";a.d(t,{u:function(){return h}});var n=a(6184),o=a(363);const i={basic_option_default:{genericReturn(e,t,a){return a},genericResultReturn(e,t,a){return a.name?a.name:a.id?a.id:""}}};var r=a(6264);class s{constructor(e,t){this.RefID=void 0,this.Name=void 0,this.HideSearch=void 0,this.Category=void 0,this.ContextVars=void 0,this.DynaForce=void 0,this.AutoSelect=void 0,this.Single=void 0,this.Tags=void 0,this.Description=void 0,this.Selections=[],this.MyStaticObject=void 0,this.OptionContext=void 0,this.ContextVars=e.contextvars,this.RefID=e.ref_id,this.Name=e.name,this.Category=e.category,this.MyStaticObject=t,this.Description=(0,n.vD)(e.description,this),this.HideSearch=void 0!=e.hide&&e.hide,this.Single=void 0!=e.single&&e.single,this.DynaForce=void 0!=e.dyna_only&&e.dyna_only,this.AutoSelect=void 0!=e.autoselect&&e.autoselect,this.Tags=void 0!=e.tags?e.tags:{},this.OptionContext=e.option_context}async FindChoices(){return[]}ReturnChoices(){return this.Selections}GetSingleChoice(e){return this.Selections[e]}GetChoiceIDs(){const e=[];for(let t=0;t<this.Selections.length;t++)e.push(this.Selections[t].id);return e}}class l extends s{constructor(e,t){super(e,t),this.EntryType=void 0,this.Strictness=void 0,this.PresetOptions=void 0,this.DataSearch=null,this.EntryType=e.type,this.Strictness=e.strictness,this.PresetOptions=e.predefined_options,e.data_search&&(this.DataSearch=e.data_search)}async FindChoices(){const e=[];let t=0;for(let a=0;a<this.PresetOptions.length;a++){const n=Object.keys(this.OptionContext)[0],o=i[n].genericReturn(this,this.OptionContext[n],this.PresetOptions[a]);e.push({id:"preset_option"+t.toString(),value:this.PresetOptions[a],display_str:o}),t+=1}if(null!=this.DataSearch){const a=o.D.MakeRequest(this.DataSearch);for(let n=0;n<a.length;n++){const o=Object.keys(this.OptionContext)[0],r=i[o].genericResultReturn(this,this.OptionContext[o],a[n]);let s="";s=a[n].id?a[n].id:"found_option"+t.toString(),e.push({id:s,value:a[n],display_str:r}),t+=1}}return e}}class c extends s{constructor(e,t){super(e,t),this.ParentRefLevel=void 0,this.Question=void 0,this.QuestionName=void 0,this.SelfAsk=void 0,this.QuestionName=e.question_name,this.ParentRefLevel=e.parent_level,e.self_ask?this.SelfAsk=e.self_ask:this.SelfAsk=!1,e.question?this.Question=e.question:this.Question=null}async FindChoices(){const e=[];let t=[];const a=this.FindContextObject();if((1==this.DynaForce&&null!=a||0==this.DynaForce)&&null!=a){const o=new r.J;try{t=this.SelfAsk&&this.MyStaticObject?await o.runEvent(this.QuestionName,this.MyStaticObject,[a,this],[],this.Question):await o.runEvent(this.QuestionName,a,[a,this],[],this.Question)}catch(n){}for(let a=0;a<t.length;a++)t[a]!=this.MyStaticObject&&e.push({id:t[a].ID,value:t[a],display_str:t[a].GetPresentationName()})}return e}FindContextObject(){let e=this.MyStaticObject;if(null==e)return null;for(let t=0;t<this.ParentRefLevel;t++){const t=e.MyContext;null!=t&&(e=t)}return e}}class d{static CreateStaticOption(e,t){if("type"==e.category){return new l(e,t)}if("contextobject"==e.category){return new c(e,t)}return new s(e,t)}}var u=a(5961);class h extends u.x{constructor(e,t){super(e,t),this.MyOptions=void 0,this.MyOptions=this.BuildOptions(e.options)}async RunOptionsParse(){const e=new r.J;for(let t=0;t<this.MyOptions.length;t++){const a=await e.runEvent("parseOptionFilterDown",this,[],this.MyOptions[t].Selections,t);this.MyOptions[t].Selections=a;const n=await e.runEvent("parseOptionsIntoRelevantType",this,[],this.MyOptions[t].Selections,t);this.MyOptions[t].Selections=n}}BuildOptions(e){const t=[];if(void 0!=e)for(let a=0;a<e.length;a++){const n=d.CreateStaticOption(e[a],this);t.push(n)}return t}async ReloadOptions(){for(let e=0;e<this.MyOptions.length;e++)this.MyOptions[e].Selections=await this.MyOptions[e].FindChoices();await this.RunOptionsParse()}}},7873:function(e,t,a){"use strict";a.r(t),a.d(t,{FactionEquipmentRelationship:function(){return l}});var n=a(7880),o=a(5961),i=a(6264),r=a(1444),s=a(6184);class l extends o.x{constructor(e,t){super(e,t),this.Factions=[],this.EquipmentItem=void 0,this.Cost=void 0,this.CostType=void 0,this.Limit=void 0,this.RestrictedEquipment=null,this.Cost=e.cost,this.CostType=e.costtype,this.Limit=e.limit}async MakeItem(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.EquipmentItem=await n.EquipmentFactory.CreateNewEquipment(e,null,t)}async GetFactions(e){e.sort();for(let t=0;t<e.length;t++)this.Factions.push(await r.FactionFactory.CreateNewFaction(e[t],null))}async getFactionEquipmentStats(){const e={};void 0!=this.EquipmentItem.Stats.hands_melee&&(e.hands_melee=this.EquipmentItem.Stats.hands_melee),void 0!=this.EquipmentItem.Stats.hands_ranged&&(e.hands_ranged=this.EquipmentItem.Stats.hands_ranged),void 0!=this.EquipmentItem.Stats.melee&&(e.melee=this.EquipmentItem.Stats.melee),void 0!=this.EquipmentItem.Stats.ranged&&(e.ranged=this.EquipmentItem.Stats.ranged);const t=new i.J;return await t.runEvent("modifyEquipmentStats",this,[],e,null)}async RunEquipmentRestriction(){const e=new i.J;this.RestrictedEquipment=await e.runEvent("getEquipmentRestriction",this,[],[],null)}GetLimit(){return this.Limit}GetCostString(){return this.Cost+" "+(0,s.Ie)(this.CostType)}}},1832:function(e,t,a){"use strict";a.d(t,{H:function(){return i}});var n=a(3834),o=a(8933);class i{constructor(e){var t,a,n,o;this._id=void 0,this._adminId=null,this._name="",this._description="",this._rawdata=void 0,this._warbands=[],this._warbandsInvited=[],this._players=[],this._playersInvited=[],this._playersInvitable=[],this._announcements=[],this._latestAnnouncement=null,this._games=[],this.SelfData=void 0,this._settings=null,this.isHydrated=!1,this.SelfData=e,this._rawdata=e,this._id=null!==(t=e.campaign_id)&&void 0!==t?t:null,this._adminId=null!==(a=e.campaign_admin_id)&&void 0!==a?a:null,this._name=null!==(n=e.campaign_name)&&void 0!==n?n:"",this._description=null!==(o=e.campaign_description)&&void 0!==o?o:"",this._warbandsInvited=Array.isArray(e.campaign_warbands_invited)?[...e.campaign_warbands_invited]:[],this._settings=i.normalizeSettings(e.campaign_settings)}ResetBasics(e){var t,a,n,o;this.SelfData=e,this._rawdata=e,this._id=null!==(t=e.campaign_id)&&void 0!==t?t:null,this._adminId=null!==(a=e.campaign_admin_id)&&void 0!==a?a:null,this._name=null!==(n=e.campaign_name)&&void 0!==n?n:"",this._description=null!==(o=e.campaign_description)&&void 0!==o?o:"",this._warbandsInvited=Array.isArray(e.campaign_warbands_invited)?[...e.campaign_warbands_invited]:[],this._settings=i.normalizeSettings(e.campaign_settings)}async BuildWarbands(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this._warbands=[];for(let a=0;a<e.campaign_warbands.length;a++){const o=await n.x.CreateCampaignWarband(e.campaign_warbands[a],this,t);this._warbands.push(o)}}async BuildPlayers(e){var t,a,o;let i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const[r,s]=await Promise.all([Promise.all((null!==(t=e.campaign_players)&&void 0!==t?t:[]).map((e=>n.x.CreateCampaignUser(e,i)))),Promise.all((null!==(a=e.campaign_players_invited)&&void 0!==a?a:[]).map((e=>n.x.CreateCampaignUser(e,i))))]);this._players=r,this._playersInvited=s,this._playersInvitable=null!==(o=e.campaign_players_invitable)&&void 0!==o?o:[]}async BuildAnnouncements(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this._announcements=[];for(let r=0;r<e.campaign_announcements.length;r++){const a=await n.x.CreateCampaignAnnouncement(e.campaign_announcements[r],t);null!=a&&this._announcements.push(a)}const a=e.campaign_latest_announcement;let o=null;var i;Array.isArray(a)?o=null!==(i=a[0])&&void 0!==i?i:null:a&&"object"===typeof a?o=a:null!=a&&console.warn("campaign_latest_announcement malformed:",a);if(o){const e=await n.x.CreateCampaignAnnouncement(o,t);this._latestAnnouncement=null!==e&&void 0!==e?e:null}else this._latestAnnouncement=null}BuildGames(e){this._games=[];const t=Array.isArray(e.campaign_games)?e.campaign_games:[],a=e=>Array.isArray(e)?e.map((e=>Number(e))).filter((e=>Number.isFinite(e))):[];this._games=t.map((e=>{var t;return{...e,player_ids:a(e.player_ids),warband_ids:a(e.warband_ids),data:null!==(t=e.data)&&void 0!==t?t:null}}))}GetId(){return this._id}GetRawData(){return this._rawdata}GetAdminId(){return this._adminId}GetName(){return this._name}GetDescription(){return this._description}GetSelfData(){return this.SelfData}GetWarbands(){return this._warbands}GetWarbandIDList(){return this._warbands.map((e=>e.WarbandID))}GetPlayers(){return this._players}GetAnnouncements(){return this._announcements}GetGames(){return this._games}GetLatestAnnouncement(){return this._latestAnnouncement}GetInvitedPlayers(){return this._playersInvited}GetInvitablePlayers(){return this._playersInvitable}GetHistory(){var e,t;const a=[],n=null!==(e=null===(t=this._rawdata)||void 0===t?void 0:t.campaign_announcements)&&void 0!==e?e:[];return this._announcements.forEach(((e,t)=>{const o=n[t],i="number"===typeof(null===o||void 0===o?void 0:o.announcement_date)?o.announcement_date:0;a.push({type:"announcement",date:i,announcement:e})})),this._games.forEach((e=>{var t;const n="number"===typeof e.date?e.date:"number"===typeof(null===(t=e.data)||void 0===t?void 0:t.date)?e.data.date:0;a.push({type:"game",date:n,game:e})})),a.sort(((e,t)=>t.date-e.date)),a}GetWarbandGames(e){const t=Number(e);if(!Number.isFinite(t))return[];const a=this._games.filter((e=>{var a;if(Array.isArray(e.warband_ids)){if(e.warband_ids.some((e=>Number(e)===t)))return!0}if(e.data&&Array.isArray(null===(a=e.data)||void 0===a?void 0:a.warbands)){if(e.data.warbands.some((e=>{var a;const n=null!==(a=e.warbandId)&&void 0!==a?a:e.id;return Number(n)===t})))return!0}return!1}));a.sort(((e,t)=>{var a,n;const o="number"===typeof e.date?e.date:"number"===typeof(null===(a=e.data)||void 0===a?void 0:a.date)?e.data.date:0;return("number"===typeof t.date?t.date:"number"===typeof(null===(n=t.data)||void 0===n?void 0:n.date)?t.data.date:0)-o}));const n=[];for(let i=0;i<a.length;i++){const e=o.T.CreateGameReportBy(a[i],!1);n.push(e)}return n}GetRealPlayers(){const e=new Map,t=t=>{for(const a of t){const t=Number(a.Id);e.has(t)||e.set(t,a)}};return t(this._players),t(this._playersInvited),Array.from(e.values()).sort(((e,t)=>{var a,n;const o=(null!==(a=e.Nickname)&&void 0!==a?a:"").trim(),i=(null!==(n=t.Nickname)&&void 0!==n?n:"").trim(),r=o.localeCompare(i,void 0,{sensitivity:"base",numeric:!0});return 0!==r?r:Number(e.Id)-Number(t.Id)}))}GetInvitablePlayers_full(){const e=new Map,t=t=>{for(const a of t){const t=Number(a.id);e.has(t)||e.set(t,a)}};return t(this._players.map((e=>e.SelfData))),t(this._playersInvited.map((e=>e.SelfData))),t(this._playersInvitable),Array.from(e.values()).sort(((e,t)=>{var a,n;const o=(null!==(a=e.nickname)&&void 0!==a?a:"").trim(),i=(null!==(n=t.nickname)&&void 0!==n?n:"").trim(),r=o.localeCompare(i,void 0,{sensitivity:"base",numeric:!0});return 0!==r?r:Number(e.id)-Number(t.id)}))}GetWarbandById(e){return this._warbands.find((t=>t.Id===e))}GetPlayerById(e){return this._players.find((t=>t.Id===e))}IsLoaded(){return null!==this._id&&this._name.length>0}IsAdmin(e){const t=this.GetAdminId();if(null==t)return!1;const a=parseInt(t,10);return!Number.isNaN(a)&&a===e}IsInvited(e){return this._playersInvited.some((t=>t.Id===e))}IsJoined(e){return this._players.some((t=>t.Id===e))}IsInvitedWarband(e){for(let t=0;t<this._warbandsInvited.length;t++){const a=parseInt(this._warbandsInvited[t]);if(a==e&&!Number.isNaN(a))return!0}return!1}IsJoinedWarband(e){for(let t=0;t<this.GetWarbandIDList().length;t++){const a=this.GetWarbandIDList()[t];if(a==e&&!Number.isNaN(a))return!0}return!1}static normalizeSettings(e){var t,a,n,o,i,r,s,l,c,d;if(!e)return null;let u=e;if("string"===typeof e)try{u=JSON.parse(e)}catch(_){return console.warn("Campaign: failed to parse campaign_settings JSON:",e,_),null}const h=Number(null!==(t=null!==(a=null!==(n=u.current_round)&&void 0!==n?n:u.cur_r)&&void 0!==a?a:u.currentRound)&&void 0!==t?t:1),m=Number(null!==(o=null!==(i=null!==(r=null!==(s=u.max_round)&&void 0!==s?s:u.max_r)&&void 0!==r?r:u.maxRound)&&void 0!==i?i:h)&&void 0!==o?o:1),p=Number.isFinite(m)&&m>0?m:1,f=Number.isFinite(h)&&h>0?h:1,g=Math.min(f,p),y=null!==(l=null!==(c=null!==(d=u.next_round_start)&&void 0!==d?d:u.n_r_start)&&void 0!==c?c:u.nextRoundStart)&&void 0!==l?l:null;return{current_round:g,max_round:p,next_round_start:null!=y&&Number.isFinite(Number(y))?Number(y):null,rounds:(Array.isArray(u.rounds)?u.rounds:Array.isArray(u.thresholds)?u.thresholds:[]).map((e=>{var t,a,n,o,i,r,s,l;const c=Number(null!==(t=null!==(a=null!==(n=e.r)&&void 0!==n?n:e.round)&&void 0!==a?a:e.campaign_round)&&void 0!==t?t:0),d=null!==(o=null!==(i=null!==(r=e.tval)&&void 0!==r?r:e.threshold_value)&&void 0!==i?i:e.value)&&void 0!==o?o:0,u=Number(d),h=null!==(s=null!==(l=e.mf)&&void 0!==l?l:e.max_fielded)&&void 0!==s?s:null;return{round:c,threshold_value:u,max_fielded:null!=h&&Number.isFinite(Number(h))?Number(h):null}})).filter((e=>Number.isFinite(e.round)&&e.round>0&&Number.isFinite(e.threshold_value))).sort(((e,t)=>e.round-t.round))}}static ToCompactSettings(e){var t,a;const n=(null!==(t=e.rounds)&&void 0!==t?t:[]).map((e=>({r:e.round,tval:e.threshold_value,mf:"number"===typeof e.max_fielded&&Number.isFinite(e.max_fielded)?e.max_fielded:0})));return{cur_r:e.current_round,max_r:e.max_round,n_r_start:null!==(a=e.next_round_start)&&void 0!==a?a:null,rounds:n}}GetSettings(){return this._settings}GetCurrentRound(){var e,t;return null!==(e=null===(t=this._settings)||void 0===t?void 0:t.current_round)&&void 0!==e?e:null}GetNextRound(){var e;return null!==(e=this._settings)&&void 0!==e&&e.current_round?this._settings.current_round+1:2}GetMaxRound(){var e,t;return null!==(e=null===(t=this._settings)||void 0===t?void 0:t.max_round)&&void 0!==e?e:null}GetRoundsSettings(){var e,t;return null!==(e=null===(t=this._settings)||void 0===t?void 0:t.rounds)&&void 0!==e?e:[]}GetRoundSettings(e){var t,a,n;const o=Number(e);if(!Number.isFinite(o)||o<=0)return null;return null!==(n=(null!==(t=null===(a=this._settings)||void 0===a?void 0:a.rounds)&&void 0!==t?t:[]).find((e=>e.round===o)))&&void 0!==n?n:null}GetThresholdValueForRound(e){const t=this.GetRoundSettings(e);return t?t.threshold_value:null}GetThresholdValueCurrent(){const e=this.GetCurrentRound();let t;return t=e?this.GetThresholdValueForRound(e):this.GetThresholdValueForRound(1),t&&t>0?t:700}GetThresholdValueNext(){const e=this.GetCurrentRound();let t;return t=e?this.GetThresholdValueForRound(e+1):this.GetThresholdValueForRound(2),t&&t>0?t:800}GetNextRoundStart(){var e,t;return null!==(e=null===(t=this._settings)||void 0===t?void 0:t.next_round_start)&&void 0!==e?e:null}GetNextRoundStartDate(){var e;const t=this.GetNextRoundStart();if(null==t||!Number.isFinite(t))return null;const a=new Date(1e3*t);if(Number.isNaN(a.getTime()))return null;const n=String(a.getUTCDate()).padStart(2,"0"),o=a.getUTCMonth(),i=a.getUTCFullYear(),r=null!==(e=["January","February","March","April","May","June","July","August","September","October","November","December"][o])&&void 0!==e?e:"";return r?`${n}. ${r} ${i}`:null}GetMaxFieldedForRound(e){const t=this.GetRoundSettings(e);return t&&null!=t.max_fielded?t.max_fielded:null}GetMaxFieldedCurrent(){const e=this.GetCurrentRound();return e?this.GetMaxFieldedForRound(e):null}}},520:function(e,t,a){"use strict";a.d(t,{G:function(){return r}});var n=a(722),o=a(3834),i=a(1235);class r extends i.Z{constructor(e,t){var a,n,o,i,r,s,l;super({contextdata:{},id:e.warband_id.toString(),name:e.warband_name,source:"",tags:{}},null),this._id=0,this._name="",this._factionSlug="",this._factionName="",this._owner=void 0,this._warband=null,this._warbandBasic=null,this._imageId=0,this._imageUrls=void 0,this._imageSourceTitle=void 0,this._imageSourceUrl=void 0,this._ratingDucats=0,this._ratingGlory=0,this._victoryPoints=0,this._round=1,this._parent=void 0,this._id=e.warband_id,this._name=e.warband_name,this._factionSlug=e.faction_slug,this._factionName=e.faction_name,this._imageId=e.warband_image.image_id,this._imageUrls=null===(a=e.warband_image)||void 0===a?void 0:a.urls,this._imageSourceTitle=null===(n=e.warband_image)||void 0===n?void 0:n.source_title,this._imageSourceUrl=null===(o=e.warband_image)||void 0===o?void 0:o.source_url,this._ratingDucats=null!==(i=e.warband_rating_ducats_current)&&void 0!==i?i:0,this._ratingGlory=null!==(r=e.warband_rating_glory_current)&&void 0!==r?r:0,this._victoryPoints=null!==(s=e.warband_vp_current)&&void 0!==s?s:0,this._round=null!==(l=e.warband_round_current)&&void 0!==l?l:0,this._parent=t}async BuildUser(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];const a=await o.x.CreateCampaignUser(e.warband_user,t);this._owner=a}async BuildWarband(e){if(!(arguments.length>1&&void 0!==arguments[1])||arguments[1]){const t=await n.Y.GetWarbandPublicByID(e.warband_id);null!=t&&(this._warband=t),null!=this._warband&&(this._warband.warband_data.MyContext=this)}else{const t=await n.Y.GetWarbandBasicPublicByID(e.warband_id);null!=t&&(this._warbandBasic=t)}}async RehydrateWarbands(){if(null==this._warband&&null!=this._warbandBasic){const e=this._warbandBasic.warband_data,t=await n.Y.CreateUserWarband(e,this._warbandBasic.id);null!=t&&(this._warband={id:this._warbandBasic.id,warband_data:t}),null!=this._warband&&(this._warband.warband_data.MyContext=this)}}async RehydrateUser(){await this._owner.RehydrateUser()}get Id(){return this._id}get WarbandName(){return this._name}get FactionSlug(){return this._factionSlug}get FactionName(){return this._factionName}get Owner(){return this._owner}get ImageId(){return this._imageId}get WarbandID(){return this._warband?this._warband.id:-1}get WarbandBasic(){return this._warbandBasic}get ImageUrls(){return this._imageUrls}get RatingDucats(){return this._ratingDucats}get RatingGlory(){return this._ratingGlory}get VictoryPoints(){return this._victoryPoints}get PlayerId(){return this._owner.Id}get PlayerName(){return this._owner.Nickname}get PlayerImageId(){return this._owner.AvatarId}get WarbandUrl(){return window.location.origin+"/warband/detail/"+this.Id}get WarbandRound(){return this._round}get IsPlayerPremium(){return this._owner.IsPremium}}},9652:function(e,t,a){"use strict";a.d(t,{O:function(){return g},W:function(){return i}});var n=a(3600),o=a(4211);async function i(e){const t=e.warband_data,a=e.id,n=[],o=t.GetUsableFighters();for(let i=0;i<o.length;i++){const e=await r(o[i]);n.push(e)}return{"warband-id":a,"warband-url":"https://trench-companion.com/warband/detail/"+a.toString(),"warband-name":t.GetTrueName(),"ducat-bank":t.Context.Ratings.spare_ducat,"glory-bank":t.Context.Ratings.spare_glory,"ducat-rating":t.Context.Ratings.rating_ducat,"glory-rating":t.Context.Ratings.rating_glory,models:n}}async function r(e){const t=e.purchase,a=e.model,o=await a.GetStats(),i=await a.GetAllEquipForShow(),r=[];for(let n=0;n<i.length;n++){let e="equipment";"melee"==i[n].equipment.GetEquipmentItem().Category&&(e="melee weapon"),"ranged"==i[n].equipment.GetEquipmentItem().Category&&(e="ranged weapon"),"grenade"==i[n].equipment.GetEquipmentItem().Category&&(e="grenade"),"shield"==i[n].equipment.GetEquipmentItem().Category&&(e="shield"),"armour"==i[n].equipment.GetEquipmentItem().Category&&(e="armour"),"special"==i[n].equipment.GetEquipmentItem().Category&&(e="special"),r.push({"equipment-name":i[n].equipment.GetEquipmentItem().GetTrueName(),"equipment-id":i[n].equipment.GetEquipmentItem().ID,"equipment-type":e})}const s=a.SubProperties,l=[];for(let n=0;n<s.length;n++)l.push({"ability-name":s[n].SelfDynamicProperty.OptionChoice.GetTrueName(),"ability-id":s[n].SelfDynamicProperty.OptionChoice.ID});const c=a.Upgrades,d=[];for(let n=0;n<c.length;n++)d.push({"upgrade-name":c[n].HeldObject.SelfDynamicProperty.OptionChoice.GetTrueName(),"upgrade-id":c[n].HeldObject.SelfDynamicProperty.OptionChoice.ID});const u=a.Skills,h=[];for(let n=0;n<u.length;n++)h.push({"advancement-name":u[n].SelfDynamicProperty.OptionChoice.GetTrueName(),"advancement-id":u[n].SelfDynamicProperty.OptionChoice.ID});const m=a.Injuries,p=[];for(let n=0;n<m.length;n++)p.push({"injury-name":m[n].SelfDynamicProperty.OptionChoice.GetTrueName(),"injury-id":m[n].SelfDynamicProperty.OptionChoice.ID});const f=await a.GetKeywordsFull(),g=[];for(let n=0;n<f.length;n++)g.push({"keyword-name":f[n].GetTrueName(),"keyword-id":f[n].ID});return{"model-name":a.CurModel.GetTrueName(),"model-id":a.CurModel.ID,name:a.GetTrueName(),"stat-move":(0,n.NJ)(o),"stat-melee":(0,n.A)(o),"stat-ranged":(0,n.Lp)(o),"stat-armour":(0,n.aR)(o),cost:{ducats:t.GetTotalDucats(),glory:t.GetTotalGlory()},equipment:r,abilities:l,upgrades:d,advancements:h,injuries:p,keywords:g}}function s(e){return"[b]"+e+"[/b]"}function l(e){return"[C966E5]"+e+"[-]"}function c(e){return"[fa8231]"+e+"[-]"}function d(e){return"[b2b7be]"+e+"[-]"}function u(e){return"[618DF4]"+e+"[-]"}function h(e){return"[0fb9b1]"+e+"[-]"}function m(e){return"[f7b731]"+e+"[-]"}function p(e){return"[20bf6b]"+e+"[-]"}function f(e){return"[eb3b5a]"+e+"[-]"}async function g(e,t){const a=[],i="\u2629",r=e.purchase,g=e.model;if(!g||!r)return"Data not loaded yet";const y=await g.GetStats(),_=[s((b=(0,n.NJ)(y),"[89E1E3]"+b+"[-]")),s(c("Mel. "+(0,n.A)(y)+"D")),s(l("Ran. "+(0,n.Lp)(y)+"D")),s(d("Arm. "+(0,n.aR)(y)))];var b;a.push(s("\u2629\u2629 "+g.GetFighterName()+" "+i+i)),a.push(void 0!=g.GetModelName()?"("+g.GetModelName()+")":"Unknown"),a.push(_.join(" | "));const v=(await g.GetKeywordsFull()).map((e=>{var t;return null!==(t=e.Name)&&void 0!==t?t:""}));a.push(v.join(", ")),a.push("");const w=await g.GetAllEquipForShow(),x={melee:1,ranged:2,armour:3,equipment:4};w.sort(((e,t)=>{var a,n;const o=e.equipment.GetEquipmentItem().Category,i=t.equipment.GetEquipmentItem().Category;return(null!==(a=x[o])&&void 0!==a?a:99)-(null!==(n=x[i])&&void 0!==n?n:99)}));for(const n of w){var k;const e=null===(k=n.equipment.MyEquipment.SelfDynamicProperty)||void 0===k?void 0:k.OptionChoice;let i="";"ranged"==n.equipment.GetEquipmentItem().Category&&(i+=l("\u2295 "+n.equipment.GetEquipmentItem().GetTrueName())),"melee"==n.equipment.GetEquipmentItem().Category&&(i+=c("\u271e "+n.equipment.GetEquipmentItem().GetTrueName())),"grenade"==n.equipment.GetEquipmentItem().Category&&(i+=c("\u2722 "+n.equipment.GetEquipmentItem().GetTrueName())),"shield"==n.equipment.GetEquipmentItem().Category&&(i+=c("\u2629 "+n.equipment.GetEquipmentItem().GetTrueName())),"armour"==n.equipment.GetEquipmentItem().Category&&(i+=d("\u2756 "+n.equipment.GetEquipmentItem().GetTrueName())),"equipment"==n.equipment.GetEquipmentItem().Category&&(i+=m("\u271c "+n.equipment.GetEquipmentItem().GetTrueName())),"special"==n.equipment.GetEquipmentItem().Category&&(i+=c("\u271c "+n.equipment.GetEquipmentItem().GetTrueName())),i=s(i),a.push(i);let r="";"medium"!==t&&"full"!==t||"ranged"!=n.equipment.GetEquipmentItem().Category&&"melee"!=n.equipment.GetEquipmentItem().Category||(r+=n.equipment.GetEquipmentItem().GetRange());let u="";if("medium"===t||"full"===t){const e=await n.equipment.GetKeywords();e.length>0&&(u+=e.map((e=>e.Name)).join(", "))}let h="";"medium"===t&&e&&e.Modifiers.length>0&&(h+=e.Modifiers.join(", "));let p="";if("full"===t&&(e&&e.Modifiers.length>0&&(h+=e.Modifiers.join(", ")),e&&e.Description.length>0&&(p+=(0,o.t)(e.Description))),"medium"===t){const e=[r,u,h].filter((e=>e&&e.trim().length>0));e.length>0&&a.push(e.join(" | "))}if("full"===t){const e=[r,u].filter((e=>e&&e.trim().length>0));e.length>0&&a.push(e.join(" | ")),""!=p&&a.push(p)}"full"===t&&a.push("")}a.push("");for(const n of g.SubProperties){let e="\u2727 "+n.SelfDynamicProperty.OptionChoice.GetTrueName();const i=n.SelfDynamicProperty.Selections;for(let t=0;t<i.length;t++){var C;if(null!=i[t].SelectedChoice)e+=" ("+(null===(C=i[t].SelectedChoice)||void 0===C?void 0:C.display_str)+")"}if(a.push(s(h(e))),"full"==t){let e="";n.SelfDynamicProperty.OptionChoice.Description.length>0&&(e+=(0,o.t)(n.SelfDynamicProperty.OptionChoice.Description)),""!=e&&a.push(e)}}for(const n of g.Upgrades){let e="\u2739 ";e+=n.HeldObject.SelfDynamicProperty.OptionChoice.GetTrueName();const i=n.HeldObject.SelfDynamicProperty.Selections;for(let t=0;t<i.length;t++){var j;if(null!=i[t].SelectedChoice)e+=" ("+(null===(j=i[t].SelectedChoice)||void 0===j?void 0:j.display_str)+")"}if(a.push(s(u(e))),"full"==t){let e="";n.HeldObject.SelfDynamicProperty.OptionChoice.Description.length>0&&(e+=(0,o.t)(n.HeldObject.SelfDynamicProperty.OptionChoice.Description)),""!=e&&a.push(e)}}a.push("");for(const n of g.Skills){const e="\u25b3 "+n.SelfDynamicProperty.OptionChoice.GetTrueName();if(a.push(s(p(e))),"full"==t){let e="";n.SelfDynamicProperty.OptionChoice.Description.length>0&&(e+=(0,o.t)(n.SelfDynamicProperty.OptionChoice.Description)),""!=e&&a.push(e)}}for(const n of g.Injuries){const e="\u25bd "+n.SelfDynamicProperty.OptionChoice.GetTrueName();if(a.push(s(f(e))),"full"==t){let e="";n.SelfDynamicProperty.OptionChoice.Description.length>0&&(e+=(0,o.t)(n.SelfDynamicProperty.OptionChoice.Description)),""!=e&&a.push(e)}}return a.join("\n")}},8252:function(e,t,a){"use strict";a.d(t,{jQ:function(){return i},rH:function(){return o},x9:function(){return r}});var n=a(2433);const o=5,i="UPDATE_VERSION_REFERENCE";class r{constructor(){this.UserWarbandManager=void 0;const e=n.o.getInstance();this.UserWarbandManager=e.UserWarbandManager}static getInstance(){return r.instance||(r.instance=new r),r.instance}CheckUpdate(e){if(!e.tags||"object"!==typeof e.tags)return e.tags={},!1;const t=e.tags[i];if(void 0===t||null===t)return!1;if("number"===typeof t)return t===o;if("string"===typeof t){return parseInt(t,10)===o}return!1}async RunUpdate(e){e.tags&&"object"===typeof e.tags||(e.tags={});const t=e.tags[i];let a=0;if("number"===typeof t)a=t;else if("string"===typeof t){const e=parseInt(t,10);a=Number.isFinite(e)?e:0}let n=e;return a<1&&(n=await this.Update_Version1(n)),a<2&&(n=await this.Update_Version2(n)),a<3&&(n=await this.Update_Version3(n)),a<4&&(n=await this.Update_Version4(n)),a<5&&(n=await this.Update_Version5(n)),n}async Update_Version5(e){return e.tags[i]=5,e.tags.tc_version&&(e.tags.tc_version="ver_default"),e}async Update_Version4(e){if(e.tags[i]=4,!Array.isArray(e.models))return e;if("ver_pre_163"!=e.tags.tc_version)for(let t=0;t<e.models.length;t++)"md_heretictrooper_mine"==e.models[t].model.model&&(e.models[t].model.model="md_heretictrooper",e.models[t].model.list_modelequipment=[],e.models[t].model.list_upgrades=[],e.models[t].model.equipment.push({purchase:{cost_value:30,cost_type:0,count_limit:!0,count_cap:!0,sell_item:!0,sell_full:!1,purchaseid:"eq_sarcophagusmine",discount:0,faction_rel_id:"rel_fc_eq_sarcophagusmine",custom_rel:{id:"rel_fc_eq_sarcophagusmine",source:"core",tags:{},name:"Sarcophagus Mine",contextdata:{},faction_id:["fc_hereticlegion_fv_trenchghosts"],equipment_id:"eq_sarcophagusmine",cost:30,costtype:0,limit:2},modelpurch:!1},equipment:{contextdata:{},id:"eq_sarcophagusmine",name:"Sarcophagus Mine",source:"core",tags:{trait:!0,armour:!0},equipment_id:{object_id:"eq_sarcophagusmine",selections:[],consumables:[],tags:{trait:!0,armour:!0}},subproperties:[]}}));return e}async Update_Version3(e){return e.tags[i]=3,void 0==e.tags.tc_version&&(e.tags.tc_version="ver_pre_163"),e}async Update_Version2(e){e.tags[i]=2;const t=[];for(let a=0;a<e.modifiers.length;a++){let n=!0;"sk_badcompany"==e.modifiers[a].object_id&&(n=!1),n&&t.push(e.modifiers[a])}return e.modifiers=t,e}async Update_Version1(e){if(e.tags&&"object"===typeof e.tags&&!Array.isArray(e.tags)||(e.tags={}),e.tags[i]=1,!e.exploration||"object"!==typeof e.exploration)return e.exploration={locations:[],location_mods:[],templocations:[]},e;if(!Array.isArray(e.exploration.locations))return e.exploration.locations=[],e;Array.isArray(e.exploration.location_mods)||(e.exploration.location_mods=[]);const t=e.exploration.locations,a=[];for(let n=0;n<t.length;n++){let o=!0;if("el_blacknetworkcontact"==t[n].object_id&&(e.exploration.location_mods?e.exploration.location_mods.push({object_id:"el_blacknetworkcontact_mod",selections:[],consumables:[]}):e.exploration.location_mods=[{object_id:"el_blacknetworkcontact_mod",selections:[],consumables:[]}]),"el_trenchmerchant_trade"==t[n].object_id&&(e.exploration.location_mods?e.exploration.location_mods.push({object_id:"el_trenchmerchant_trade_mod",selections:[],consumables:[]}):e.exploration.location_mods=[{object_id:"el_trenchmerchant_trade_mod",selections:[],consumables:[]}]),"el_blackmarket"==t[n].object_id&&(e.exploration.location_mods?e.exploration.location_mods.push({object_id:"el_blackmarket_mod",selections:[],consumables:[]}):e.exploration.location_mods=[{object_id:"el_blackmarket_mod",selections:[],consumables:[]}]),"el_golgothatektites_apply"==t[n].object_id&&(e.exploration.location_mods?e.exploration.location_mods.push({object_id:"el_golgothatektites_apply",selections:t[n].selections,consumables:[]}):e.exploration.location_mods=[{object_id:"el_golgothatektites_apply",selections:t[n].selections,consumables:[]}],t[n].selections=[],o=!1),"el_ransackedalchemistworkshop"==t[n].object_id&&(e.exploration.location_mods?e.exploration.location_mods.push({object_id:"el_ransackedalchemistworkshop_mod",selections:t[n].selections,consumables:[]}):e.exploration.location_mods=[{object_id:"el_ransackedalchemistworkshop_mod",selections:t[n].selections,consumables:[]}],t[n].selections=[]),"el_abandonedressurectionmachine"==t[n].object_id&&(e.exploration.location_mods?e.exploration.location_mods.push({object_id:"el_abandonedressurectionmachine_mod",selections:t[n].selections,consumables:[]}):e.exploration.location_mods=[{object_id:"el_abandonedressurectionmachine_mod",selections:t[n].selections,consumables:[]}],t[n].selections=[]),"el_sampleofholydna"==t[n].object_id&&(e.exploration.location_mods?e.exploration.location_mods.push({object_id:"el_sampleofholydna_mod",selections:t[n].selections,consumables:[]}):e.exploration.location_mods=[{object_id:"el_sampleofholydna_mod",selections:t[n].selections,consumables:[]}],t[n].selections=[]),"el_fruitfromthetreeofgoodandevilknowledge"==t[n].object_id&&(e.exploration.location_mods?e.exploration.location_mods.push({object_id:"el_fruitfromthetreeofgoodandevilknowledge_mod",selections:t[n].selections,consumables:[]}):e.exploration.location_mods=[{object_id:"el_fruitfromthetreeofgoodandevilknowledge_mod",selections:t[n].selections,consumables:[]}],t[n].selections=[]),"el_potofmanna"==t[n].object_id&&(e.exploration.location_mods?e.exploration.location_mods.push({object_id:"el_potofmanna_mod",selections:[],consumables:[]}):e.exploration.location_mods=[{object_id:"el_potofmanna_mod",selections:[],consumables:[]}]),"el_moonshinestash"==t[n].object_id)for(let a=0;a<t[n].selections.length;a++)"el_moonshinestash_distribute"==t[n].selections[a].selection_ID&&(e.exploration.location_mods?e.exploration.location_mods.push({object_id:"el_moonshinestash_distribute",selections:[],consumables:[]}):e.exploration.location_mods=[{object_id:"el_moonshinestash_distribute",selections:[],consumables:[]}]);if("el_stashofdrugsanderotica"==t[n].object_id)for(let a=0;a<t[n].selections.length;a++)"el_stashofdrugsanderotica_indulge"==t[n].selections[a].selection_ID&&(e.exploration.location_mods?e.exploration.location_mods.push({object_id:"el_stashofdrugsanderotica_indulge",selections:[],consumables:[]}):e.exploration.location_mods=[{object_id:"el_stashofdrugsanderotica_indulge",selections:[],consumables:[]}]);if("el_esotericlibrary"==t[n].object_id)for(let a=0;a<t[n].selections.length;a++)"el_esotericlibrary_plague"==t[n].selections[a].selection_ID&&(e.exploration.location_mods?e.exploration.location_mods.push({object_id:"el_esotericlibrary_plague",selections:[],consumables:[]}):e.exploration.location_mods=[{object_id:"el_esotericlibrary_plague",selections:[],consumables:[]}]),"el_esotericlibrary_study"==t[n].selections[a].selection_ID&&(e.exploration.location_mods?e.exploration.location_mods.push({object_id:"el_esotericlibrary_study",selections:[],consumables:[]}):e.exploration.location_mods=[{object_id:"el_esotericlibrary_study",selections:[],consumables:[]}]);if("el_jabireanalchemicalbooks"==t[n].object_id)for(let a=0;a<t[n].selections.length;a++)"el_jabireanalchemicalbooks_study"==t[n].selections[a].selection_ID&&(e.exploration.location_mods?e.exploration.location_mods.push({object_id:"el_jabireanalchemicalbooks_study_mod",selections:[],consumables:[]}):e.exploration.location_mods=[{object_id:"el_jabireanalchemicalbooks_study_mod",selections:[],consumables:[]}]),"el_jabireanalchemicalbooks_keep"==t[n].selections[a].selection_ID&&(e.exploration.location_mods?e.exploration.location_mods.push({object_id:"el_jabireanalchemicalbooks_keep",selections:[],consumables:[]}):e.exploration.location_mods=[{object_id:"el_jabireanalchemicalbooks_keep",selections:[],consumables:[]}]);o&&a.push(t[n])}return e.exploration.locations=a,e}}r.instance=void 0},1072:function(e,t,a){"use strict";a.d(t,{LW:function(){return u},N4:function(){return h},pV:function(){return d}});var n=a(1235),o=a(2919),i=a(9100),r=a(6498),s=a(6298),l=a(6264),c=a(6184);function d(e){const t=[];for(let a=0;a<e.location.MyOptions.length;a++)(0,c.Kg)(e.location.MyOptions[a].Tags,"unrequired_selection")||t.push(e.location.MyOptions[a]);return t}function u(e){const t=[];for(let a=0;a<e.options.length;a++)(0,c.Kg)(e.options[a].baseopt.Tags,"unrequired_selection")||t.push(e.options[a]);return t}class h extends i.A{constructor(e,t){super(e,t),this.Skills=[],this.Locations=[],this.LocationMods=[],this.GeneralCache={},this.CurLocation=[]}async ReloadTempOptions(){for(let e=0;e<this.CurLocation.length;e++){const t=this.CurLocation[e];if(void 0!=t.true_obj){await t.true_obj.RegenerateOptions();for(let e=0;e<t.true_obj.Consumables.length;e++)await t.true_obj.Consumables[e].GrabOptions()}}}DumpCache(){this.EventCache={},this.GeneralCache={};for(let e=0;e<this.Skills.length;e++){this.Skills[e].EventCache={};for(let t=0;t<this.Skills[e].SubProperties.length;t++)this.Skills[e].SubProperties[t].EventCache={}}for(let e=0;e<this.Locations.length;e++){this.Locations[e].EventCache={};for(let t=0;t<this.Locations[e].SubProperties.length;t++)this.Locations[e].SubProperties[t].EventCache={}}for(let e=0;e<this.LocationMods.length;e++){this.LocationMods[e].EventCache={};for(let t=0;t<this.LocationMods[e].SubProperties.length;t++)this.LocationMods[e].SubProperties[t].EventCache={}}}async BuildSkills(e){for(let t=0;t<e.length;t++){const a=e[t],n=await r.SkillFactory.CreateNewSkill(a.object_id,this.MyContext?this.MyContext:null),i=new o.WarbandProperty(n,this.MyContext?this.MyContext:null,null,a);await i.HandleDynamicProps(n,this.MyContext?this.MyContext:null,null,a),await i.BuildConsumables(a.consumables),this.Skills.push(i)}}async BuildLocations(e){for(let t=0;t<e.length;t++){const a=e[t],n=await s.ExplorationFactory.CreateNewExplorationLocation(a.object_id,this.MyContext?this.MyContext:null,!0),i=new o.WarbandProperty(n,this.MyContext?this.MyContext:null,null,a);await i.HandleDynamicProps(n,this.MyContext?this.MyContext:null,null,a),await i.BuildConsumables(a.consumables),a.tags&&(i.Tags=a.tags),this.Locations.push(i)}}async BuildLocationMods(e){for(let t=0;t<e.length;t++){const a=e[t],n=await s.ExplorationFactory.CreateNewExplorationLocation(a.object_id,this.MyContext?this.MyContext:null,!0),i=new o.WarbandProperty(n,this.MyContext?this.MyContext:null,null,a);await i.HandleDynamicProps(n,this.MyContext?this.MyContext:null,null,a),await i.BuildConsumables(a.consumables),this.LocationMods.push(i)}}async BuildTempLocations(e){const t=await this.GetValidNewLocations();for(let a=0;a<e.length;a++){const n=e[a];let o=null;for(let e=0;e<t.length;e++)for(let a=0;a<t[e].valid_locs.length;a++){const i=t[e].valid_locs[a];if(i.location.GetID()==n){o=i;break}}if(null!=o){const e={base_item:o,selected_options:[]};this.CurLocation.push(e)}}}async RebuildProperties(){for(let e=0;e<this.Locations.length;e++){const t=this.Locations[e];await t.RegenerateOptions()}for(let e=0;e<this.LocationMods.length;e++){const t=this.LocationMods[e];await t.RegenerateOptions()}for(let e=0;e<this.Skills.length;e++){const t=this.Skills[e];await t.RegenerateOptions()}for(let e=0;e<this.CurLocation.length;e++){const t=this.CurLocation[e];void 0!=t.true_obj&&await t.true_obj.RegenerateOptions()}}ConvertToInterface(){const e=[];for(let i=0;i<this.Skills.length;i++)e.push(this.Skills[i].ConvertToInterface());const t=[];for(let i=0;i<this.Locations.length;i++)t.push(this.Locations[i].ConvertToInterface());const a=[];for(let i=0;i<this.LocationMods.length;i++)a.push(this.LocationMods[i].ConvertToInterface());const n=[];for(let i=0;i<this.CurLocation.length;i++)n.push(this.CurLocation[i].base_item.location.GetID());const o={explorationskills:e,locations:t,location_mods:a,contextdata:this.ContextKeys,id:this.ID,name:void 0!=this.Name?this.Name:"",source:void 0!=this.Source?this.Source:"",tags:this.Tags,templocations:n};return this.SelfData=o,o}async GrabSubPackages(e,t,a){const n=[];for(let o=0;o<this.Skills.length;o++){const i=await this.Skills[o].GrabContextPackages(e,t,a);for(let e=0;e<i.length;e++)i[e].callpath.push("WarbandExplorationSet"),n.push(i[e])}for(let o=0;o<this.Locations.length;o++){const i=await this.Locations[o].GrabContextPackages(e,t,a);for(let e=0;e<i.length;e++)i[e].callpath.push("WarbandExplorationSet"),n.push(i[e])}for(let o=0;o<this.LocationMods.length;o++){const i=await this.LocationMods[o].GrabContextPackages(e,t,a);for(let e=0;e<i.length;e++)i[e].callpath.push("WarbandExplorationSet"),n.push(i[e])}return n}async GetSkills(){const e=[];for(let t=0;t<this.Skills.length;t++)e.push(this.Skills[t]);for(let t=0;t<this.MyContext.Models.length;t++){const a=this.MyContext.Models[t].HeldObject,n=await a.GetExplorationSkills();for(let t=0;t<n.length;t++)e.push(n[t])}return e}async GetSkillsInFormat(){const e=[];for(let n=0;n<this.Skills.length;n++)this.TryAddToSkillsFormat(e,this.Skills[n],"Warband Skills");for(let n=0;n<this.MyContext.Models.length;n++){const t=this.MyContext.Models[n].HeldObject;if("dead"==t.State||"lost"==t.State)continue;const a=await t.GetExplorationSkills();for(let n=0;n<a.length;n++)this.TryAddToSkillsFormat(e,a[n],"Model: "+t.GetTrueName())}const t=await this.MyContext.GetSelfExplorationSkills();for(let n=0;n<t.length;n++){var a;this.TryAddToSkillsFormat(e,t[n],t[n].Tags.SkillOrigin?null===(a=t[n].Tags.SkillOrigin)||void 0===a?void 0:a.toString():"Location")}return e}async GetWarbandModifiers(){if(null!=this.GeneralCache.exploration_skills)return this.GeneralCache.exploration_skills;const e=[],t=new l.J;for(let a=0;a<this.Locations.length;a++){await t.runEvent("showSkillOnWarband",this.Locations[a],[],!1,this)&&e.push(this.Locations[a])}for(let a=0;a<this.LocationMods.length;a++)e.push(this.LocationMods[a]);return this.GeneralCache.exploration_skills=e,e}TryAddToSkillsFormat(e,t){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"Warband";const n=e.find((e=>e.skill.SelfDynamicProperty.OptionChoice.GetID()===t.SelfDynamicProperty.OptionChoice.GetID()));n?(n.count+=1,n.sources.push(a)):e.push({skill:t,count:1,sources:[a]})}GetObjectsWithAttatch(){const e=[];for(let t=0;t<this.Locations.length;t++){this.Locations[t].SelfDynamicProperty.OptionChoice.ContextKeys.warband_attatch&&e.push(this.Locations[t])}for(let t=0;t<this.LocationMods.length;t++){this.LocationMods[t].SelfDynamicProperty.OptionChoice.ContextKeys.warband_attatch&&e.push(this.LocationMods[t])}return e}async GetValidNewLocations(){const e=[],t=await s.ExplorationFactory.GetAllTables(this,!0);for(let a=0;a<t.length;a++){const n=[];for(let e=0;e<t[a].ExplorationLocations.length;e++){if(!this.Locations.find((n=>n.SelfDynamicProperty.OptionChoice.GetID()===t[a].ExplorationLocations[e].GetID()))||this.MyContext.IsUnRestricted){const o=await this.GetValidOptionsForLocation(t[a].ExplorationLocations[e]);n.push(o)}}e.push({table:t[a],valid_locs:n})}return e}async GetValidOptionsForLocation(e){const t=new l.J,a=[];for(let o=0;o<e.MyOptions.length;o++){const i=[];for(let a=0;a<e.MyOptions[o].Selections.length;a++)if(e.MyOptions[o].Selections[a].value instanceof n.Z){await t.runEvent("canChooseOptionLocation",e.MyOptions[o].Selections[a].value,[],!0,this.MyContext)&&i.push(e.MyOptions[o].Selections[a])}else i.push(e.MyOptions[o].Selections[a]);i.length>0&&a.push({baseopt:e.MyOptions[o],selection_valid:i})}return{location:e,options:a}}async DeleteLocation(e){for(let a=0;a<this.Locations.length;a++)if(e==this.Locations[a]){e.SendConsumablesUp(),this.Locations.splice(a,1);break}const t=new l.J;await t.runEvent("onRemoveLocation",e,[this.MyContext],null,this)}async AddExplorationLocation(e,t){const a={object_id:e.GetID(),selections:t,consumables:[]},n=new o.WarbandProperty(e,this.MyContext?this.MyContext:null,null,a);await n.HandleDynamicProps(e,this.MyContext?this.MyContext:null,null,a),this.Locations.push(n);const i=new l.J;await i.runEvent("onGainLocation",this,[this.MyContext],null,n)}async AddExplorationMod(e,t){const a={object_id:e.GetID(),selections:t,consumables:[]},n=new o.WarbandProperty(e,this.MyContext?this.MyContext:null,null,a);await n.HandleDynamicProps(e,this.MyContext?this.MyContext:null,null,a),this.LocationMods.push(n);const i=new l.J;await i.runEvent("onGainLocation",this,[this.MyContext],null,n)}async AssignTempLocation(e){if(null==e)return;if(void 0==e.true_obj)return;const t=e.true_obj;this.Locations.push(t);const a=new l.J;await a.runEvent("onGainLocation",t,[this.MyContext],null,t),this.GeneralCache.exploration_skills=void 0,await this.DeleteTempLocation(e);const n=[];for(let o=0;o<t.Consumables.length;o++)(null!=t.Consumables[o].SelectItem||t.Consumables[o].Tags.post_save)&&n.push(t.Consumables[o]);t.Consumables=n}async DeleteTempLocation(e){for(let t=0;t<this.CurLocation.length;t++)if(e==this.CurLocation[t]){this.CurLocation.splice(t,1);break}}async AddTempExplorationLocation(e,t,a){if(null==this.CurLocation)return;const n={object_id:t.GetID(),selections:a,consumables:[]},i=new o.WarbandProperty(t,this.MyContext?this.MyContext:null,null,n);await i.HandleDynamicProps(t,this.MyContext?this.MyContext:null,null,n),e.true_obj=i;const r=new l.J;await r.runEvent("onPickLocation",i,[this.MyContext],null,i)}}},7969:function(e,t,a){"use strict";a.d(t,{o:function(){return c}});var n=a(2919),o=a(9100),i=a(7880),r=a(6264),s=a(7891),l=a(6184);class c extends o.A{constructor(e,t){super(e,t),this.MyEquipment=void 0,this.SubProperties=[],this.EquipmentCache=null}async BuildEquipment(e){const t=await i.EquipmentFactory.CreateNewEquipment(e.object_id,this,!0);this.MyEquipment=new n.WarbandProperty(t,this,null,e),await this.MyEquipment.HandleDynamicProps(t,this,null,e),await this.MyEquipment.BuildConsumables(e.consumables)}IsTagPresent(e){const t=this.Tags,a=this.GetEquipmentItem().Tags;return(0,l.Kg)(t,e)||(0,l.Kg)(a,e)}GetPresentationName(){return void 0!=this.Name?null!=this.MyContext&&this.MyContext instanceof s.WarbandMember?this.Name+" ("+this.MyContext.GetTrueName()+")":this.Name:"name_unidentified"}async GrabWarbandubPackages(e,t,a){const n=[],o=new r.J;if(1==await o.runEvent("showEquipmentOnWarband",this,[],!1,this)){const o=await this.GrabContextPackages(e,t,a);for(let e=0;e<o.length;e++)o[e].callpath.push("WarbandEquipment"),n.push(o[e])}return n}async BuildNewProperties(e,t){const a=new r.J,n=await a.runEvent("canRemoveItemFromModel",this,[],t.Sellable,e),o=await a.runEvent("cantSwapItemFromModel",this,[],!1,e),i=[],s=this.GetEquipmentItem().GetKeyWords();for(let r=0;r<s.length;r++)i.push(s[r]);const l=await e.RunEventWithoutOtherEquipment(i,"findFinalKeywordsForEquipment",[this],null,[this.ID]),c=await a.runEvent("getnewrange",e,[this],this.GetEquipmentItem().Distance,null),d=Array.from(new Map(l.map((e=>[e.ID,e]))).values());this.EquipmentCache={CanRemove:n,CanSwap:o,KeywordsCache:d,range:c}}ConvertToInterface(){const e=[];for(let n=0;n<this.SubProperties.length;n++)e.push(this.SubProperties[n].ConvertToInterface());let t=null;t=this.MyEquipment?this.MyEquipment.ConvertToInterface():{object_id:"",selections:[],consumables:[]};const a={contextdata:{},id:this.ID,name:void 0!=this.Name?this.Name:"",source:void 0!=this.Source?this.Source:"",tags:this.Tags,equipment_id:t,subproperties:e};return this.SelfData=a,a}async GetKeywords(){const e=[],t=this.GetEquipmentItem().GetKeyWords();for(let a=0;a<t.length;a++)e.push(t[a]);if(this.MyContext instanceof s.WarbandMember){return await this.MyContext.RunEventWithoutOtherEquipment(e,"findFinalKeywordsForEquipment",[this],null,[this.ID])}{const t=new r.J;return await t.runEvent("findFinalKeywordsForEquipment",this,[this],e,null)}}GetRange(){if(this.EquipmentCache){let n="";if("object"!==typeof this.EquipmentCache.range&&!Array.isArray(this.EquipmentCache.range)){var e,t,a;if(null!==(e=this.EquipmentCache)&&void 0!==e&&e.range)n+=(null===(a=this.EquipmentCache)||void 0===a?void 0:a.range)+'"';null!==(t=this.EquipmentCache)&&void 0!==t&&t.range&&this.GetEquipmentItem().Stats.melee&&(n+=" / ")}return this.GetEquipmentItem().Stats.melee&&(n+="Melee"),n}return this.GetEquipmentItem().GetRange()}async GrabSubPackages(e,t,a){const n=[];if(this.MyEquipment){const o=await this.MyEquipment.GrabContextPackages(e,t,a);for(let e=0;e<o.length;e++)o[e].callpath.push("WarbandEquipment"),n.push(o[e])}for(let o=0;o<this.SubProperties.length;o++){const i=await this.SubProperties[o].GrabContextPackages(e,t,a);for(let e=0;e<i.length;e++)i[e].callpath.push("WarbandEquipment"),n.push(i[e])}return n}GetSubCosts(e){return 0}GetTotalDiscounts(e){return 0}GetEquipmentItem(){return this.MyEquipment.SelfDynamicProperty.OptionChoice}}},7891:function(e,t,a){"use strict";a.r(t),a.d(t,{WarbandMember:function(){return _}});var n=a(2919),o=a(9100),i=a(6498),r=a(8394),s=a(7479),l=a(7401),c=a(7120),d=a(7551),u=a(6264),h=a(1412),m=a(722),p=a(7880),f=a(6184),g=a(3600),y=a(9353);class _ extends o.A{DumpCache(){this.GeneralCache={},this.EventCache={};for(let e=0;e<this.Equipment.length;e++)this.Equipment[e].HeldObject.EquipmentCache=null;for(let e=0;e<this.Upgrades.length;e++){const t=this.Upgrades[e].GetOwnItem();t&&t.DumpCache()}for(let e=0;e<this.SubProperties.length;e++)this.SubProperties[e].DumpCache();for(let e=0;e<this.Skills.length;e++)this.Skills[e].DumpCache();for(let e=0;e<this.Injuries.length;e++)this.Injuries[e].DumpCache();for(let e=0;e<this.ModelEquipments.length;e++)this.ModelEquipments[e].DumpCache()}GetWarbandNotes(){for(let e=0;e<this.Notes.length;e++)if("notes"==this.Notes[e].title)return this.Notes[e].text;return""}async RunEventWithoutOtherEquipment(e,t,a,n,o){const i=new u.J;this.CurModel&&(e=await i.runEvent(t,this.CurModel,a,e,n));for(let c=0;c<this.Skills.length;c++)e=await i.runEvent(t,this.Skills[c],a,e,n);for(let c=0;c<this.Upgrades.length;c++)e=await i.runEvent(t,this.Upgrades[c].HeldObject,a,e,n);for(let c=0;c<this.Injuries.length;c++)e=await i.runEvent(t,this.Injuries[c],a,e,n);for(let c=0;c<this.Equipment.length;c++){const r=this.Equipment[c].HeldObject;o.includes(r.GetID())&&(e=await i.runEvent(t,r,a,e,n))}const r=await this.GetOptionalEquipment();for(let c=0;c<r.length;c++){const s=r[c].purchase.HeldObject;o.includes(s.GetID())&&(e=await i.runEvent(t,s,a,e,n))}for(let c=0;c<this.SubProperties.length;c++)e=await i.runEvent(t,this.SubProperties[c],a,e,n);const s=await this.GetOwnAttatchements(),l=["model_attatch","warband_attatch"];for(let c=0;c<s.length;c++){const o=s[c].SelfDynamicProperty.OptionChoice.ContextKeys;for(let r=0;r<l.length;r++)void 0!=o[l[r]]&&(e=await i.runEvent(t,s[c],a,e,n))}return e}GetLore(){for(let e=0;e<this.Notes.length;e++)if("lore"==this.Notes[e].title)return this.Notes[e].text;return""}SetLore(e){this.SaveNote(e,"lore")}SetNotes(e){this.SaveNote(e,"notes")}SaveNote(e,t){let a=null;for(let n=0;n<this.Notes.length;n++)this.Notes[n].title==t&&this.Notes.splice(n,1);a={text:e,title:t},this.Notes.push(a)}constructor(e,t,a){if(super(e,t),this.boldXpIndices=[2,4,7,10,14,18],this.Notes=void 0,this.State=void 0,this.CurModel=void 0,this.SubProperties=[],this.Equipment=[],this.Upgrades=[],this.Skills=[],this.Injuries=[],this.Experience=void 0,this.Elite=void 0,this.Recruited=void 0,this.ModelEquipments=[],this.ScarReserve=void 0,this.Stat_Selections=[],this.IsUnRestricted=void 0,this.GeneralCache={},this.Notes=e.notes,e.active?this.State=e.active:this.State="active",e.scar_reserves?this.ScarReserve=e.scar_reserves:this.ScarReserve=0,e.stat_selections)for(let n=0;n<e.stat_selections.length;n++)this.Stat_Selections.push(e.stat_selections[n]);this.Experience=e.experience,this.Elite=e.elite,this.Recruited=e.recruited,this.IsUnRestricted=a}GetMyPurchase(){if(this.MyContext instanceof h.UserWarband){const e=this.MyContext.GetFighters();for(let t=0;t<e.length;t++)if(e[t].model.ID==this.ID)return e[t].purchase}return null}async RebuildProperties(){this.GeneralCache={},this.ConvertToInterface(),await this.BuildEquipment(this.SelfData.equipment),await this.BuildSkills(this.SelfData.list_skills),await this.BuildInjuries(this.SelfData.list_injury),await this.BuildNewProperties(this.SelfData),await this.BuildUpgrades(this.SelfData),await this.BuildModelEquipProperties(this.SelfData),await this.BuildModelEquipment(!1)}async BuildModelEquipProperties(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.SelfData;const t=new u.J,a=await t.runEvent("getModelEquipmentInfo",this,[],this.CurModel.EquipmentList,this);this.ModelEquipments=[];for(let o=0;o<a.length;o++){let t=!1;for(let i=0;i<e.list_modelequipment.length;i++)if(e.list_modelequipment[i].object_id==a[o].ID){const a=await p.EquipmentFactory.CreateNewModelEquipment(e.list_modelequipment[i].object_id,this),o=new n.WarbandProperty(a,this,null,e.list_modelequipment[i]);await o.HandleDynamicProps(a,this,null,e.list_modelequipment[i]),await o.BuildConsumables(e.list_modelequipment[i].consumables),this.ModelEquipments.push(o),t=!0;break}if(0==t){const e=new n.WarbandProperty(a[o],this,null,null);await e.HandleDynamicProps(a[o],this,null,null),await e.BuildConsumables([]),this.ModelEquipments.push(e)}}return this.ModelEquipments}async GetFireteams(e){const t=new u.J;return e=null!=this.GeneralCache.fireteam_list?[...e,...this.GeneralCache.fireteam_list]:await t.runEvent("getAllFireteamOptions",this,[],e,this.MyContext)}async BuildNewProperties(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.SelfData;const t=await this.getContextuallyAvailableAbilities();this.SubProperties=[];for(let a=0;a<t.length;a++){let o=!1;for(let i=0;i<e.subproperties.length;i++)if(e.subproperties[i].object_id==t[a].ID){const r=new n.WarbandProperty(t[a],this,null,e.subproperties[i]);await r.HandleDynamicProps(t[a],this,null,e.subproperties[i]),await r.BuildConsumables(e.subproperties[i].consumables),this.SubProperties.push(r),o=!0;break}if(0==o){const e=new n.WarbandProperty(t[a],this,null,null);await e.HandleDynamicProps(t[a],this,null,null),await e.BuildConsumables([]),this.SubProperties.push(e)}}return this.SubProperties}async BuildUpgrades(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.SelfData;this.Upgrades=[];for(let t=0;t<e.list_upgrades.length;t++){const a=e.list_upgrades[t],o=await l.UpgradeFactory.CreateNewUpgrade(a.upgrade.object_id,this,!0),i=new n.WarbandProperty(o,this,null,a.upgrade);await i.HandleDynamicProps(o,this,null,a.upgrade),await i.BuildConsumables(a.upgrade.consumables);const s=new r.h(a.purchase,this,i);this.Upgrades.push(s)}return this.Upgrades}async getContextuallyAvailableAbilities(){if(null!=this.GeneralCache.abilities_list)return this.GeneralCache.abilities_list;const e=[],t=[],a=[];for(let n=0;n<this.CurModel.Abilities.length;n++)t.push(this.CurModel.Abilities[n]);if(1!=this.IsMercenary()&&null!=this.MyContext){const n=new u.J,o=await n.runEvent("getWarbandMemberAbilities",this.MyContext,[],t,this),i=await n.runEvent("getWarbandMemberAbilities",this,[],o,this);for(let t=0;t<i.length;t++)a.includes(i[t].ID)||(a.push(i[t].ID),e.push(i[t]))}else for(let n=0;n<t.length;n++)a.includes(t[n].ID)||(a.push(t[n].ID),e.push(t[n]));return this.GeneralCache.abilities_list=e,e}async BuildEquipment(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.SelfData.equipment;this.Equipment=[];for(let t=0;t<e.length;t++){const a=await m.Y.CreateWarbandEquipment(e[t].equipment,this),n=new r.h(e[t].purchase,this,a);this.Equipment.push(n)}}async BuildModelEquipment(e){for(let t=0;t<this.ModelEquipments.length;t++)if(1==e||0==this.ModelEquipments[t].SelfDynamicProperty.OptionChoice.Removable){const e=this.ModelEquipments[t].SelfDynamicProperty.OptionChoice,a=[];for(let t=0;t<this.Equipment.length;t++)a.push(this.Equipment[t].HeldObject.ID);for(let t=0;t<e.EquipmentItems.length;t++){let n=!1;for(let o=0;o<a.length;o++)if(a[o]==e.ID+"_"+e.EquipmentItems[t].ID+"_"+t){n=!0;break}if(0==n){const a=await m.Y.BuildModelEquipmentFromPurchase(e,e.EquipmentItems[t],t,this),n=new r.h({cost_value:e.SaleValue,cost_type:e.SaleType,count_limit:!1,count_cap:0!=e.SaleValue,sell_item:e.Removable,sell_full:!0,purchaseid:e.ID,faction_rel_id:e.ID,custom_rel:e.SelfData,discount:0,modelpurch:!0},this,a);this.Equipment.push(n)}}}for(let t=0;t<this.Equipment.length;t++){if(0==this.Equipment[t].ModelPurchase)continue;const e=this.Equipment[t].HeldObject;let a=!1;for(let t=0;t<this.ModelEquipments.length;t++){const n=this.ModelEquipments[t].SelfDynamicProperty.OptionChoice;for(let t=0;t<n.EquipmentItems.length;t++)if(n.EquipmentItems[t].ID==e.MyEquipment.SelfDynamicProperty.OptionChoice.GetID()){a=!0;break}if(1==a)break}0==a&&await this.DeleteStash({purchase:this.Equipment[t],equipment:this.Equipment[t].HeldObject},!0)}return this.Equipment}async BuildSkills(e){this.Skills=[];for(let t=0;t<e.length;t++){const a=e[t],o=await i.SkillFactory.CreateNewSkill(a.object_id,this,!0),r=new n.WarbandProperty(o,this,null,a);await r.HandleDynamicProps(o,this,null,a),await r.BuildConsumables(a.consumables),this.Skills.push(r)}}async BuildInjuries(e){this.Injuries=[];for(let t=0;t<e.length;t++){const a=e[t],o=await c.InjuryFactory.CreateNewInjury(a.object_id,this,!0),i=new n.WarbandProperty(o,this,null,a);await i.HandleDynamicProps(o,this,null,a),await i.BuildConsumables(a.consumables),this.Injuries.push(i)}}async BuildModel(e){const t=await s.ModelFactory.CreateNewModel(e,this);this.CurModel=t}ConvertToInterface(){const e=[];for(let l=0;l<this.Injuries.length;l++)e.push(this.Injuries[l].ConvertToInterface());const t=[];for(let l=0;l<this.Skills.length;l++)t.push(this.Skills[l].ConvertToInterface());const a=[];for(let l=0;l<this.SubProperties.length;l++)a.push(this.SubProperties[l].ConvertToInterface());const n=[];for(let l=0;l<this.ModelEquipments.length;l++)n.push(this.ModelEquipments[l].ConvertToInterface());const o=[];for(let l=0;l<this.Equipment.length;l++)o.push(this.Equipment[l].ConvertToInterfaceEquipment());const i=[];for(let l=0;l<this.Upgrades.length;l++)i.push(this.Upgrades[l].ConvertToInterfaceUpgrade());let r="";null!=this.CurModel&&(r=this.CurModel.ID);const s={contextdata:{},id:this.ID,name:void 0!=this.Name?this.Name:"",source:void 0!=this.Source?this.Source:"",tags:this.Tags,model:r,subproperties:a,notes:this.Notes,active:this.State,equipment:o,list_upgrades:i,list_injury:e,list_skills:t,experience:this.Experience,list_modelequipment:n,elite:this.Elite,recruited:this.Recruited,scar_reserves:this.ScarReserve,stat_selections:this.Stat_Selections};return this.SelfData=s,s}GetObjectsWithAttatch(){const e=[];for(let t=0;t<this.Upgrades.length;t++){this.Upgrades[t].HeldObject.SelfDynamicProperty.OptionChoice.ContextKeys.model_attatch&&e.push(this.Upgrades[t].HeldObject)}for(let t=0;t<this.SubProperties.length;t++){this.SubProperties[t].SelfDynamicProperty.OptionChoice.ContextKeys.model_attatch&&e.push(this.SubProperties[t])}return e}GetOwnAttatchements(){return this.MyContext.GetAttatchementsForModel(this)}async CanCopySelf(){if(null!=this.GeneralCache.can_copy_self)return this.GeneralCache.can_copy_self;let e="";for(let a=0;a<this.Equipment.length;a++){if(await this.MyContext.AtMaxOfItem(this.Equipment[a].PurchaseInterface)&&(e="Warband At Limit For "+this.Equipment[a].HeldObject.MyEquipment.GetTrueName()),e.length>0)return this.GeneralCache.can_copy_self=e,e}const t=new u.J;for(let a=0;a<this.Upgrades.length;a++){const n=await l.UpgradeFactory.CreateModelUpgrade(this.Upgrades[a].CustomInterface,null);let o=n.WarbandLimit;if(o=await t.runEvent("getUpgradeLimitTrue",n,[],o,{warband:this.MyContext,model:this}),0!=o&&o<=this.MyContext.GetCountOfUpgradeRel(n.ID)&&(e="Warband At Limit For "+n.UpgradeObject.GetTrueName()),e.length>0)return this.GeneralCache.can_copy_self=e,e}return this.GeneralCache.can_copy_self=e,e}async HasEquipmentFollowingRestriction(e){for(let t=0;t<this.Equipment.length;t++){const a=this.Equipment[t].HeldObject,n=a.GetEquipmentItem();if((!e.category||n.Category==e.category)&&(!e.tag||(0,f.Kg)(n.Tags,e.tag)||(0,f.Kg)(a.Tags,e.tag))){if("keyword"==e.res_type){let t=!1;const n=await a.GetKeywords();for(let a=0;a<n.length;a++)n[a].ID==e.value&&(t=!0);if(1==t)return!0}if("ducat"==e.res_type&&0==this.Equipment[t].CostType)if("maximum"==e.param){if(this.Equipment[t].ItemCost>Number(e.value))return!0}else if(this.Equipment[t].ItemCost<Number(e.value))return!0;if("all"==e.res_type)return!0;if("id"==e.res_type&&n.ID==e.value)return!0}}return!1}async GrabSubPackages(e,t,a){const n=[];if(this.CurModel){const o=await this.CurModel.GrabContextPackages(e,t,a);for(let e=0;e<o.length;e++)o[e].callpath.push("WarbandMember"),n.push(o[e])}for(let s=0;s<this.Skills.length;s++){const o=await this.Skills[s].GrabContextPackages(e,t,a);for(let e=0;e<o.length;e++)o[e].callpath.push("WarbandMember"),n.push(o[e])}for(let s=0;s<this.Upgrades.length;s++){const o=await this.Upgrades[s].HeldObject.GrabContextPackages(e,t,a);for(let e=0;e<o.length;e++)o[e].callpath.push("WarbandMember"),n.push(o[e])}for(let s=0;s<this.Injuries.length;s++){const o=await this.Injuries[s].GrabContextPackages(e,t,a);for(let e=0;e<o.length;e++)o[e].callpath.push("WarbandMember"),n.push(o[e])}for(let s=0;s<this.Equipment.length;s++){const o=await this.Equipment[s].HeldObject.GrabContextPackages(e,t,a);for(let e=0;e<o.length;e++)o[e].callpath.push("WarbandMember"),n.push(o[e])}const o=await this.GetOptionalEquipment();for(let s=0;s<o.length;s++){const i=await o[s].purchase.HeldObject.GrabContextPackages(e,t,a);for(let e=0;e<i.length;e++)i[e].callpath.push("WarbandMember"),n.push(i[e])}for(let s=0;s<this.SubProperties.length;s++){const o=await this.SubProperties[s].GrabContextPackages(e,t,a);for(let e=0;e<o.length;e++)o[e].callpath.push("WarbandMember"),n.push(o[e])}const i=await this.GetOwnAttatchements(),r=["model_attatch","warband_attatch"];for(let s=0;s<i.length;s++){const a=i[s].SelfDynamicProperty.OptionChoice.ContextKeys;for(let o=0;o<r.length;o++){if(void 0==a[r[o]])continue;const l=a[r[o]].apply_to_attatch;if(void 0!=l)for(const a of Object.keys(l)){const o=this.ContextData[a];if(void 0==o)continue;const r=o[e];if(void 0!==r){const e={priority:o.event_priotity,source:t,self:i[s],callback:r,callbackdict:l[a],dyncontext:i[s].MyContext,callpath:["StaticContextObject","Attachment"]};n.push(e)}}}}return n}async GrabWarbandubPackages(e,t,a){const n=[],o=await this.GetWarbandSkills();for(let r=0;r<o.length;r++){const i=await o[r].GrabContextPackages(e,t,a);for(let e=0;e<i.length;e++)i[e].callpath.push("WarbandMember"),n.push(i[e])}const i=await this.GetWarbandEquipment();for(let r=0;r<i.length;r++){const o=await i[r].HeldObject.GrabContextPackages(e,t,a);for(let e=0;e<o.length;e++)o[e].callpath.push("WarbandMember"),n.push(o[e])}return n}IsTroop(){return!this.IsElite()&&!this.IsMercenary()}IsMercenary(){return this.CurModel.Stats.mercenary?this.CurModel.Stats.mercenary:!!(0,f.Kg)(this.Tags,"mercenary")}IsDog(){return"dog"==this.State||1==this.Tags.is_dog}IsElite(){return this.Elite}GetMemberType(){return this.IsElite()?"Elite":this.IsTroop()?"Troop":this.IsMercenary()?"Mercenary":"Troop"}GetEquipment(){const e=[];for(let t=0;t<this.Equipment.length;t++)e.push({purchase:this.Equipment[t],equipment:this.Equipment[t].HeldObject});return e}GetUpgrades(){const e=[];for(let t=0;t<this.Upgrades.length;t++)e.push({purchase:this.Upgrades[t],upgrade:this.Upgrades[t].HeldObject});return e}GetEquipmentAsString(){const e=this.GetEquipment(),t=[],a={ranged:0,melee:1,equipment:2},n=e=>{var t,a,n,o,i;return i=null===e||void 0===e||null===(t=e.equipment)||void 0===t||null===(a=t.MyEquipment)||void 0===a||null===(n=a.SelfDynamicProperty)||void 0===n||null===(o=n.SelfData)||void 0===o?void 0:o.category,String(null!==i&&void 0!==i?i:"").trim().toLowerCase()},o=e.map(((e,t)=>{var o,i,r,s,l,c;return{it:e,idx:t,rank:null!==(o=a[n(e)])&&void 0!==o?o:99,name:null!==(i=null===e||void 0===e||null===(r=e.equipment)||void 0===r||null===(s=r.MyEquipment)||void 0===s||null===(l=s.SelfDynamicProperty)||void 0===l||null===(c=l.GetTrueName)||void 0===c?void 0:c.call(l))&&void 0!==i?i:""}})).sort(((e,t)=>e.rank-t.rank||e.name.localeCompare(t.name)||e.idx-t.idx)).map((e=>e.it));for(let h=0;h<o.length;h++){var i,r,s,l,c,d;const e=null===(i=o[h])||void 0===i||null===(r=i.equipment)||void 0===r||null===(s=r.MyEquipment)||void 0===s||null===(l=s.SelfDynamicProperty)||void 0===l||null===(c=(d=l).GetTrueName)||void 0===c?void 0:c.call(d);e&&t.push(e)}for(let h=0;h<this.ModelEquipments.length;h++)for(let e=0;e<this.ModelEquipments[h].SelfDynamicProperty.Selections.length;e++){const a=this.ModelEquipments[h].SelfDynamicProperty.Selections[e].SelectedChoice;try{if(a){const e=a.value;for(let a=0;a<e.EquipmentItems.length;a++)t.push(e.EquipmentItems[a].GetTrueName())}}catch(u){console.log(u)}}return t.join(", ")}async GetKeywordsFull(){return await this.getContextuallyAvailableKeywords()}async IsKeywordPresent(e){const t=await this.GetKeywordsFull();for(let a=0;a<t.length;a++)if(t[a].ID==e)return!0;return!1}async IsTagPresent(e){const t=this.Tags,a=this.CurModel.Tags;return(0,f.Kg)(t,e)||(0,f.Kg)(a,e)}GetTotalDiscounts(e){let t=0;0==e&&this.Tags.cost_discount_ducats&&(t+=this.Tags.cost_discount_ducats),1==e&&this.Tags.cost_discount_glory&&(t+=this.Tags.cost_discount_glory);for(let a=0;a<this.Equipment.length;a++)this.Equipment[a].CostType==e&&(t+=this.Equipment[a].GetTotalDiscount(e));for(let a=0;a<this.Upgrades.length;a++)this.Upgrades[a].CostType==e&&(t+=this.Upgrades[a].GetTotalDiscount(e));return t}GetSubCosts(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=this.GetUpgradeCosts(e,t,a);0==e&&this.Tags.cost_mod_ducats&&(n+=this.Tags.cost_mod_ducats),1==e&&this.Tags.cost_mod_glory&&(n+=this.Tags.cost_mod_glory);for(let o=0;o<this.Equipment.length;o++)(0!=this.Equipment[o].CountCap||t)&&this.Equipment[o].CostType==e&&(0==e&&(n+=this.Equipment[o].GetTotalDucats(t,a)),1==e&&(n+=this.Equipment[o].GetTotalGlory(t,a)));return n}GetUpgradeCosts(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=0;for(let o=0;o<this.Upgrades.length;o++)0==this.Upgrades[o].CountCap&&0==t||this.Upgrades[o].CostType==e&&(0==e&&(n+=this.Upgrades[o].GetTotalDucats(t,a)),1==e&&(n+=this.Upgrades[o].GetTotalGlory(t,a)));return n}GetEquipmentCount(e){let t=0;for(let a=0;a<this.Equipment.length;a++){const n=this.Equipment[a].CustomInterface;n&&n.id==e&&t++}return t}GetUpgradeCount(e){let t=0;for(let a=0;a<this.Upgrades.length;a++){const n=this.Upgrades[a].CustomInterface;n&&n.id==e&&t++}return t}async GetWarbandSkills(){const e=[],t=new u.J;if(null!=this.GeneralCache.warband_skills)return this.GeneralCache.warband_skills;for(let a=0;a<this.Skills.length;a++){await t.runEvent("showSkillOnWarband",this.Skills[a],[],!1,this)&&e.push(this.Skills[a])}return this.GeneralCache.warband_skills=e,e}async GetWarbandEquipment(){if(null!=this.GeneralCache.show_equipment)return this.GeneralCache.show_equipment;const e=[],t=new u.J;for(let a=0;a<this.Equipment.length;a++){await t.runEvent("showEquipmentOnWarband",this.Equipment[a].HeldObject,[],!1,this)&&e.push(this.Equipment[a])}return this.GeneralCache.show_equipment=e,e}GetFighterName(){return this.Name}GetModelName(){return this.CurModel.Name}GetModelSlug(){return null!=this.CurModel?this.CurModel.ID:""}GetExperiencePoints(){return this.Experience}GetInjuriesList(){return this.Injuries}GetSkillsList(){return this.Skills}GetBattleScars(){return this.Injuries.length+this.ScarReserve}async SetScars(e){const t=this.Injuries.length;this.ScarReserve=e-t,await this.CheckIfDead()}RenameSelf(e){this.ApproveNewName(e)&&(this.Name=e)}ApproveNewName(e){return!0}SplitUpgrades(e){const t={};for(let a=0;a<e.length;a++){const n=e[a].GetSpecialCategory();t[n]?t[n].push(e[a]):t[n]=[e[a]]}return t}async getContextuallyAvailableUpgrades(){if(null!=this.GeneralCache.available_upgrades)return this.GeneralCache.available_upgrades;const e=[];let t=[];const a=[];for(let o=0;o<this.CurModel.UpgradeList.length;o++)t.push(this.CurModel.UpgradeList[o]);const n=new u.J;1!=this.IsMercenary()&&null!=this.MyContext&&(t=await n.runEvent("getWarbandMemberUpgrades",this.MyContext,[],t,this),t=await n.runEvent("getWarbandMemberUpgrades",this,[],t,this));for(let o=0;o<t.length;o++)a.includes(t[o].GetID())||(a.push(t[o].GetID()),e.push(t[o]));return this.GeneralCache.available_upgrades=this.SplitUpgrades(e),this.GeneralCache.available_upgrades}async GetWarbandUpgradeCollections(){if(null!=this.GeneralCache.upgrade_collections)return this.GeneralCache.upgrade_collections;const e=await this.getContextuallyAvailableUpgrades(),t={},a=[],n=new u.J;for(let o=0;o<Object.keys(e).length;o++){const i=Object.keys(e)[o];let r=0;this.MyContext&&(r=await n.runEvent("getUpgradeCategoryLimit",this.MyContext,[],r,i)),r=await n.runEvent("getUpgradeCategoryLimit",this,[],r,i);for(let n=0;n<e[i].length;n++){const o=await this.CalcGivenPurchase(e[i][n],i,r);a.push(e[i][n].ID),t[i]?t[i].upgrades.push(o):t[i]={limit:r,upgrades:[o]}}}for(let o=0;o<this.Upgrades.length;o++)if(void 0!=this.Upgrades[o].CustomInterface){const e=await l.UpgradeFactory.CreateModelUpgrade(this.Upgrades[o].CustomInterface,this);if(!a.includes(e.ID)){const i=e.GetSpecialCategory();let r=0;this.MyContext&&(r=await n.runEvent("getUpgradeCategoryLimit",this.MyContext,[],r,i)),r=await n.runEvent("getUpgradeCategoryLimit",this,[],r,i);const s=await this.CaclExistingPurchase(this.Upgrades[o],e,i,r);a.push(e.ID),t[i]?t[i].upgrades.push(s):t[i]={limit:r,upgrades:[s]}}}return this.GeneralCache.upgrade_collections=t,t}async CaclExistingPurchase(e,t,a,n){const o=new u.J;let i=0;null==n?(this.MyContext&&(i=await o.runEvent("getUpgradeCategoryLimit",this.MyContext,[],i,a)),i=await o.runEvent("getUpgradeCategoryLimit",this,[],i,a)):i=n;let r=null;for(let d=0;d<this.Upgrades.length;d++)this.Upgrades[d].HeldObject.ID==t.UpgradeObject.ID&&(r=this.Upgrades[d]);let s=t.WarbandLimit;s=await o.runEvent("getUpgradeLimitTrue",t,[],s,{warband:this.MyContext,model:this});let l=t.Cost;l=await o.runEvent("getCostOfUpgrade",t,[e],l,{warband:this.MyContext,model:this}),l=await o.runEvent("getCostOfUpgrade",this,[e],l,{warband:this.MyContext,model:this}),l=await o.runEvent("getCostOfUpgrade",this.MyContext,[e],l,{warband:this.MyContext,model:this});let c=await o.runEvent("getDiscountOfUpgrade",t,[t],0,{warband:this.MyContext,model:this});if(0==e.CostType){const e=await this.GetUpgradeBudgetDucats();c+=e>l?l:e}if(1==e.CostType){const e=await this.GetUpgradeBudgetGlory();c+=e>l?l:e}return{upgrade:t,purchase:e,allowed:!1,cur_count:this.MyContext.GetCountOfUpgradeRel(t.ID),max_count:s,discount:c,cost:l}}async GetExplorationSkills(){if(null!=this.GeneralCache.exploration_skills)return this.GeneralCache.exploration_skills;const e=new u.J,t=await e.runEvent("getExplorationSkills",this,[],[],null);for(let a=0;a<this.Skills.length;a++)this.Skills[a].SelfDynamicProperty.OptionChoice.SkillGroups.includes("sg_exploration")&&t.push(this.Skills[a]);return this.GeneralCache.exploration_skills=t,t}async GetUpgradeBudgetDucats(){if(null!=this.GeneralCache.upgrade_budget_ducats)return this.GeneralCache.upgrade_budget_ducats;const e=new u.J;let t=await e.runEvent("getUpgradeBudget",this.MyContext,[0],0,this);t=await e.runEvent("getUpgradeBudget",this,[0],t,this);let a=0;for(let n=0;n<this.Upgrades.length;n++)a+=this.Upgrades[n].GetTotalDiscount(0);return t-=a,this.GeneralCache.upgrade_budget_ducats=t,t}async GetUpgradeBudgetGlory(){if(null!=this.GeneralCache.upgrade_budget_glory)return this.GeneralCache.upgrade_budget_glory;const e=new u.J;let t=await e.runEvent("getUpgradeBudget",this.MyContext,[1],0,this);t=await e.runEvent("getUpgradeBudget",this,[1],t,this);let a=0;for(let n=0;n<this.Upgrades.length;n++)a+=this.Upgrades[n].GetTotalDiscount(1);return t-=a,this.GeneralCache.upgrade_budget_glory=t,t}async CalcGivenPurchase(e,t){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;const n=new u.J;let o=0;null==a?(this.MyContext&&(o=await n.runEvent("getUpgradeCategoryLimit",this.MyContext,[],o,t)),o=await n.runEvent("getUpgradeCategoryLimit",this,[],o,t)):o=a;let i=null;for(let d=0;d<this.Upgrades.length;d++)this.Upgrades[d].HeldObject.ID==e.UpgradeObject.ID&&(i=this.Upgrades[d]);let r=e.WarbandLimit;r=await n.runEvent("getUpgradeLimitTrue",e,[],r,{warband:this.MyContext,model:this});let s=e.Cost;s=await n.runEvent("getCostOfUpgrade",e,[e],s,{warband:this.MyContext,model:this}),s=await n.runEvent("getCostOfUpgrade",this,[e],s,{warband:this.MyContext,model:this}),s=await n.runEvent("getCostOfUpgrade",this.MyContext,[e],s,{warband:this.MyContext,model:this});let l=await this.GetCountOfUpgradeCategory(t)<o||"upgrades"==t,c=await n.runEvent("getDiscountOfUpgrade",e,[e],0,{warband:this.MyContext,model:this});if(0==e.CostType){const e=await this.GetUpgradeBudgetDucats();c+=e>s?s:e,l=l&&this.MyContext.GetStashedDucats()>=s-c}if(1==e.CostType){const e=await this.GetUpgradeBudgetGlory();c+=e>s?s:e,l=l&&this.MyContext.GetStashedGlory()>=s-c}if(1==this.IsUnRestricted)return{upgrade:e,purchase:i,allowed:!0,cur_count:this.MyContext.GetCountOfUpgradeRel(e.ID),max_count:r,discount:c,cost:s};if(l){if(await n.runEvent("getRequiredUpgradesBool",e,[],!0,{warband:this.MyContext,model:this}))for(let t=0;t<e.RequiredUpgrades.length;t++)0==this.HasUpgrade(e.RequiredUpgrades[t])&&(l=!1)}if(l){if(await n.runEvent("getRestrictedUpgradesBool",this,[e],!0,{warband:this.MyContext,model:this}))for(let t=0;t<e.Retrictions.length;t++)1==this.HasUpgrade(e.Retrictions[t])&&(l=!1)}return l&&(l=l&&(this.MyContext.GetCountOfUpgradeRel(e.ID)<r||0==e.WarbandLimit)),l&&(l=await n.runEvent("canModelGetUpgrade",e,[],l,{warband:this.MyContext,model:this})),l&&(l=await n.runEvent("withinUpgradeBudget",this,[s,e.CostType],l,{warband:this.MyContext,model:this})),{upgrade:e,purchase:i,allowed:l,cur_count:this.MyContext.GetCountOfUpgradeRel(e.ID),max_count:r,discount:c,cost:s}}async GetCountOfUpgradeCategory(e){let t=0;for(let a=0;a<this.Upgrades.length;a++){const n=this.Upgrades[a].HeldObject;if(void 0!=n){n.SelfDynamicProperty.OptionChoice.GetSpecialCategory()==e&&(t+=1)}}return t}HasUpgrade(e){for(let a=0;a<this.Upgrades.length;a++){var t;if((null===(t=this.Upgrades[a].CustomInterface)||void 0===t?void 0:t.id)==e)return!0;const n=this.Upgrades[a].HeldObject;if(void 0!=n){if(n.SelfDynamicProperty.OptionChoice.GetID()==e)return!0}}return!1}async getContextuallyAvailableKeywords(){if(null!=this.GeneralCache.keyword_list)return this.GeneralCache.keyword_list;const e=[],t=[],a=[],n=[];for(let s=0;s<this.CurModel.KeyWord.length;s++)("kw_elite"!=this.CurModel.KeyWord[s].ID||this.IsElite())&&a.push(this.CurModel.KeyWord[s].ID);const o=new u.J;if(null!=this.MyContext){const i=await o.runEvent("getContextuallyRelevantKeywordsByID",this.MyContext,[],a,this),r=await o.runEvent("getContextuallyRelevantKeywordsByID",this,[],i,this);!r.includes("kw_elite")&&this.IsElite()&&r.push("kw_elite");for(let e=0;e<r.length;e++){const a=await y.KeywordFactory.CreateNewKeyword(r[e],null);t.push(a)}const s=await o.runEvent("getContextuallyRelevantKeywordsByObject",this.MyContext,[],[],this),l=await o.runEvent("getContextuallyRelevantKeywordsByObject",this,[],s,this);for(let t=0;t<l.length;t++)n.includes(l[t].GetTrueName())||(e.push(l[t]),n.push(l[t].GetTrueName()))}const i=[];for(let s=0;s<t.length;s++){const e=await o.runEvent("getKeywordAdditions",t[s],[],[],null);for(let t=0;t<e.length;t++)i.push(e[t])}for(let s=0;s<i.length;s++)t.push(i[s]);const r=[];for(let s=0;s<t.length;s++){const e=await o.runEvent("getKeywordRemovals",t[s],[],[],null);for(let t=0;t<e.length;t++)r.push(e[t])}for(let s=0;s<t.length;s++)n.includes(t[s].GetTrueName())||r.includes(t[s].GetID())||(e.push(t[s]),n.push(t[s].GetTrueName()));return this.GeneralCache.keyword_list=e,e}async GetKeywordID(){const e=await this.getContextuallyAvailableKeywords(),t=[];for(let a=0;a<e.length;a++)t.push(e[a].GetID());return t}async AddUpgrade(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];const a=e.cost,o=e.upgrade,i=await l.UpgradeFactory.CreateUpgrade(o.UpgradeObject.SelfData,this,!0),s=new n.WarbandProperty(i,this,null,null);await s.HandleDynamicProps(i,this,null,null),await s.BuildConsumables([]);const c=new r.h({cost_value:a,cost_type:o.CostType,count_limit:!0,count_cap:!0,sell_item:t,sell_full:t,purchaseid:i.ID,faction_rel_id:o.ID,discount:e.discount,custom_rel:o.SelfData,modelpurch:!0},this,s);this.Upgrades.push(c);const d=new u.J;return await d.runEvent("onGainUpgrade",s,[this.MyContext,c],null,this),c}UpgradeAsIDs(){const e=[];for(let t=0;t<this.Upgrades.length;t++)e.push(this.Upgrades[t].HeldObject.GetOwnID());return e}async DeleteUpgrade(e){for(let a=0;a<this.Upgrades.length;a++)if(e==this.Upgrades[a]){this.Upgrades.splice(a,1);break}const t=new u.J;await t.runEvent("onRemoveUpgrade",e.HeldObject,[this.MyContext],null,this)}async GetModelInjuryOptions(){if(null!=this.GeneralCache.injury_options)return this.GeneralCache.injury_options;const e=await c.InjuryFactory.GetAllInjury(),t=[],a=new u.J;for(let n=0;n<e.length;n++){await a.runEvent("allowInjuryGain",this,[this],!0,e[n])&&t.push(e[n])}return this.GeneralCache.injury_options=t,t}async GetModelSkillOptions(){if(null!=this.GeneralCache.skills_available)return this.GeneralCache.skills_available;const e=[],t=await i.SkillFactory.GetBaseSkills(),a=this.MyContext.Faction.GetPatronSkills(),n=new u.J;if(null!=a){const t=[];for(let e=0;e<a.Skills.length;e++)if(1==this.IsUnRestricted)t.push(a.Skills[e]);else if(0==this.Skills.filter((t=>t.SelfDynamicProperty.OptionChoice.ID==a.Skills[e].ID)).length){let o=await n.runEvent("allowSkillGain",this,[this],!0,a.Skills[e]);o=await this.MyContext.RunEventThroughAllMembers(o,"allowSkillGain",[this],a.Skills[e]),o&&t.push(a.Skills[e])}e.push({skillgroup:a,list:t})}for(let o=0;o<t.length;o++){const a=t[o],i=[];for(let e=0;e<a.Skills.length;e++)if(0==this.Skills.filter((t=>t.SelfDynamicProperty.OptionChoice.ID==a.Skills[e].ID)).length){let t=await n.runEvent("allowSkillGain",this,[this],!0,a.Skills[e]);t=await this.MyContext.RunEventThroughAllMembers(t,"allowSkillGain",[this],a.Skills[e]),t&&i.push(a.Skills[e])}e.push({skillgroup:a,list:i})}return this.GeneralCache.skills_available=e,e}async AddInjury(e){const t=await c.InjuryFactory.CreateInjury(e.SelfData,this,!0),a=new n.WarbandProperty(t,this,null,null);await a.HandleDynamicProps(t,this,null,null),await a.BuildConsumables([]),this.Injuries.push(a);const o=new u.J;await o.runEvent("onGainInjury",a,[this],null,t),await this.BuildInjuries(this.ConvertToInterface().list_injury),await this.CheckIfDead()}async CheckIfDead(){const e=await this.GetMaxScars();this.GetBattleScars()>=e?(this.State="dead",await this.Kill()):"dead"==this.State&&(this.State="reserved")}async Kill(){null!=this.MyContext&&this.MyContext instanceof h.UserWarband&&await this.MyContext.WhenModelDead(this)}IsActive(){return"active"==this.State}IsDead(){return"dead"==this.State}IsReserve(){return"reserved"==this.State}IsLost(){return"lost"==this.State}IsIncludedAsAlive(){return this.IsActive()||this.IsReserve()||this.IsDog()}GetMemberState(){return this.IsDead()?"Dead":this.IsReserve()?"Reserve":this.IsLost()?"Lost":"Active"}async GetMaxScars(){if(null!=this.GeneralCache.max_scars)return this.GeneralCache.max_scars;const e=new u.J,t=await e.runEvent("getMaximumScars",this,[],3,this);return this.GeneralCache.max_scars=t,t}async AddSkill(e){const t=new n.WarbandProperty(e,this,null,null);await t.HandleDynamicProps(e,this,null,null),await t.BuildConsumables([]),this.Skills.push(t);const a=new u.J;await a.runEvent("onGainSkill",e,[this.MyContext],null,t),await this.BuildSkills(this.ConvertToInterface().list_skills)}async AddSkillByID(e){const t=await i.SkillFactory.CreateNewSkill(e,this,!0),a=new n.WarbandProperty(t,this,null,null);await a.HandleDynamicProps(t,this,null,null),await a.BuildConsumables([]),this.Skills.push(a);const o=new u.J;await o.runEvent("onGainSkill",t,[this.MyContext],null,a),await this.BuildSkills(this.ConvertToInterface().list_skills)}UpdateStatOption(e,t){if(null==t)this.Stat_Selections.push(e);else for(let a=0;a<this.Stat_Selections.length;a++)if((0,g.DF)(this.Stat_Selections[a])==(0,g.DF)(t))return this.Stat_Selections.splice(a,1),void this.Stat_Selections.push(e)}async GetStatOptions(){if(null!=this.GeneralCache.stat_options)return this.GeneralCache.stat_options;const e=new Set,t=new u.J,a=await t.runEvent("getMemberModelStatOptions",this,[],[],this),n=[];for(let u=0;u<a.length;u++){const t=[],h=new Set;for(const e of a[u]){var o,i,r,s,l,c,d;const a=JSON.stringify({movement:null!==(o=e.movement)&&void 0!==o?o:null,melee:null!==(i=e.melee)&&void 0!==i?i:null,ranged:null!==(r=e.ranged)&&void 0!==r?r:null,base:e.base?[...e.base].sort(((e,t)=>e-t)):void 0,armour:null!==(s=e.armour)&&void 0!==s?s:null,movetype:null!==(l=e.movetype)&&void 0!==l?l:null,potential:null!==(c=e.potential)&&void 0!==c?c:null,mercenary:null!==(d=e.mercenary)&&void 0!==d?d:null});h.has(a)||(h.add(a),t.push(e))}const m=Array.from(h).join(",,,,,,,,,,");e.has(m)||(e.add(m),n.push(t))}return this.GeneralCache.stat_options=n,n}async CanChangeRank(){let e=!0;if(this.Elite||(e=await this.MyContext.CanAddMoreElite()),e){const e=await this.GetStats();return void 0==e.potential||2!=e.potential}return!1}ChangeRank(){this.Elite=!this.Elite}async ValidateStatSelection(){const e=await this.GetStatOptions(),t=[];for(let a=0;a<this.Stat_Selections.length;a++){let n=!1;for(let t=0;t<e.length;t++){e[t].map((e=>(0,g.DF)(e))).includes((0,g.DF)(this.Stat_Selections[a]))&&(n=!0)}n&&t.push(this.Stat_Selections[a])}this.Stat_Selections=t}async GetStats(){if(null!=this.GeneralCache.final_stats)return this.GeneralCache.final_stats;await this.ValidateStatSelection();const e=this.CurModel.Stats;let t={};void 0!=e.armour&&(t.armour=e.armour),void 0!=e.melee&&(t.melee=e.melee),void 0!=e.ranged&&(t.ranged=e.ranged),void 0!=e.base&&(t.base=e.base),void 0!=e.mercenary&&(t.mercenary=e.mercenary),void 0!=e.movement&&(t.movement=e.movement),void 0!=e.movetype&&(t.movetype=e.movetype),void 0!=e.potential&&(t.potential=e.potential);for(let o=0;o<this.Stat_Selections.length;o++)t=(0,g.A6)(t,this.Stat_Selections[o]);const a=new u.J;t=await a.runEvent("updateModelStats",this,[],t,null);const n=await this.getContextuallyAvailableKeywords();for(let o=0;o<n.length;o++)t=await a.runEvent("updateModelStats",n[o],[],t,null);return t.armour&&t.armour<-3&&(t.armour=-3),this.GeneralCache.final_stats=t,t}async SetExperience(e){this.Experience=e}async GetXPLimit(){const e=await this.GetStats();if(e.potential){if(0==e.potential)return 18;if(1==e.potential)return 7;if(2==e.potential)return 0}return 18}async GetSpecialCache(){if(null!=this.GeneralCache.special_cache)return this.GeneralCache.special_cache;const e={},t=new u.J,a=await t.runEvent("getAddedModelEquipmentOptions",this,[],[],null);for(let n=0;n<a.length;n++){const o=this.GetEquipmentCount(a[n].ID);let i=1,r=a[n].Cost,s=!0,l="";const c=[],d=await t.runEvent("getEquipmentRestriction",a[n],[],[],null),u=await t.runEvent("getEquipmentRestriction",a[n].EquipmentItem,[],[],null);for(let e=0;e<d.length;e++)c.push(d[e]);for(let e=0;e<u.length;e++)c.push(u[e]);const h=await t.runEvent("getEquipmentRestrictionPresentable",a[n],[],[],c);i=await t.runEvent("getEquipmentLimitTrue",a[n],[a[n]],i,this.MyContext),i=await t.runEvent("getEquipmentLimitTrue",this.MyContext,[a[n]],i,this.MyContext),r=await t.runEvent("getCostOfEquipment",a[n],[],r,this.MyContext),l=await t.runEvent("canWarbandAddItem",this.MyContext,[c,a[n]],"",this.MyContext),s=l.length<=0,o<i||0==i&&0==a[n].Limit?(0==a[n].CostType&&(s=this.MyContext.GetStashedDucats()>=r,0==s&&(l="This costs more ducats than you have available.")),1==a[n].CostType&&(s=this.MyContext.GetStashedGlory()>=r,0==s&&(l="This costs more glory than you have available."))):(s=!1,l="The limit of this battlekit is "+i),e[a[n].ID]={canadd:s,cost:r,count_cur:o,limit:i,facrel:a[n],restrictions:h,failure:l}}return this.GeneralCache.special_cache=e,e}GetFailureOfItem(e){if(this.GeneralCache.invalid_equipment_options&&this.GeneralCache.invalid_equipment_options[e])return this.GeneralCache.invalid_equipment_options[e].length>0?this.GeneralCache.invalid_equipment_options[e]:void 0}AddItemFailure(e,t){this.GeneralCache.invalid_equipment_options||(this.GeneralCache.invalid_equipment_options={}),this.GeneralCache.invalid_equipment_options[e]=t}async GetModelEquipmentOptions(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(null!=this.GeneralCache.equipment_options)return this.GeneralCache.equipment_options;const t=[],a=new u.J,n=await a.runEvent("overrideMercenarySkip",this,[],this.IsMercenary(),null),o=await this.MyContext.GetFactionEquipmentOptions(!0,!0,e),i=[],r=await this.GetSpecialCache(),s=Object.keys(r);for(let d=0;d<s.length;d++)r[s[d]].canadd?i.push(r[s[d]].facrel):this.AddItemFailure(r[s[d]].facrel.GetID(),r[s[d]].failure);for(let d=0;d<o.length;d++)i.push(o[d]);const l=await this.GetModelHands(),c=await a.runEvent("getEquipmentRestriction",this,[],[],null);for(let d=0;d<i.length;d++){let o=!0;if(!n)if(1!=this.IsUnRestricted&&1!=e){if(o&&(o="equipment"!=i[d].EquipmentItem.Category&&"special"!=i[d].EquipmentItem.Category),!o){const e=await a.runEvent("getEquipmentLimitRaw",i[d].EquipmentItem,[],1,null),t=await this.HasSpecificEquipment(i[d].EquipmentItem.GetID());o=!(await t>=e),o||this.AddItemFailure(i[d].GetID(),"You cannot have more than "+e+" of this battlekit.")}o&&(o=await this.EquipItemAvailableSpace(i[d].EquipmentItem,l,i[d].GetID())),o&&(o=await this.EquipItemCanAdd(i[d],c,i[d].GetID())),o&&(this.GeneralCache.invalid_equipment_options&&this.GeneralCache.invalid_equipment_options[i[d].GetID()]&&delete this.GeneralCache.invalid_equipment_options[i[d].GetID()],t.push(i[d]))}else t.push(i[d])}return this.GeneralCache.equipment_options=t,t}async HasSpecificEquipment(e){const t=await this.GetAllEquipForShow();let a=0;for(let n=0;n<t.length;n++){t[n].equipment.MyEquipment.SelfDynamicProperty.OptionChoice.GetID()==e&&a++}return a}async EquipItemCanAdd(e,t,a){const n=new u.J,o=[],i=await n.runEvent("getEquipmentRestriction",e,[],[],null),r=await n.runEvent("getEquipmentRestriction",e.EquipmentItem,[],[],null);for(let u=0;u<t.length;u++)o.push((0,d.deepCopyEquipmentRestriction)(t[u]));for(let u=0;u<i.length;u++)o.push((0,d.deepCopyEquipmentRestriction)(i[u]));for(let u=0;u<r.length;u++)o.push((0,d.deepCopyEquipmentRestriction)(r[u]));const s=await n.runEvent("modEquipmentRestriction",this,[e],o,this),l=[];let c="";c=await n.runEvent("canModelAddItem",this,[s,l],c,{model:this,item:e}),c=await n.runEvent("canModelAddItem",e,[s,l],c,{model:this,item:e}),c=await n.runEvent("canModelAddItem",e.EquipmentItem,[s,l],c,{model:this,item:e});const h=c.length<=0;return 0==h&&c.length>0&&this.AddItemFailure(a,c),h}async EquipItemAvailableSpace(e,t,a){const n=await this.GetAllEquipForShow(),o=await this.GetKeywordsFull(),i=[],r=e.GetKeyWords();for(let u=0;u<r.length;u++)i.push(r[u]);const s=new u.J,l=(await s.runEvent("findFinalKeywordsForFactionEquipment",this,[e],i,null)).map((e=>e.ID));for(let u=0;u<n.length;u++){const t=n[u];if((0,f.Kg)(t.equipment.MyEquipment.SelfDynamicProperty.OptionChoice.Tags,"headgear")&&(0,f.Kg)(e.Tags,"headgear")||t.equipment.MyEquipment.SelfDynamicProperty.OptionChoice.IsCatOrTagged("grenade")&&e.IsCatOrTagged("grenade")||t.equipment.MyEquipment.SelfDynamicProperty.OptionChoice.IsCatOrTagged("shield")&&e.IsCatOrTagged("shield")||(0,f.Kg)(t.equipment.MyEquipment.SelfDynamicProperty.OptionChoice.Tags,"armour")&&(0,f.Kg)(e.Tags,"armour")||(0,f.Kg)(t.equipment.MyEquipment.SelfDynamicProperty.OptionChoice.Tags,"flag")&&(0,f.Kg)(e.Tags,"flag")||(0,f.Kg)(t.equipment.MyEquipment.SelfDynamicProperty.OptionChoice.Tags,"instrument")&&(0,f.Kg)(e.Tags,"instrument"))return this.AddItemFailure(a,"Cannot have more than one of this battlekit type"),!1;if((await t.equipment.GetKeywords()).filter((e=>"kw_heavy"==e.ID)).length>0&&l.includes("kw_heavy")&&0==o.filter((e=>"kw_strong"==e.GetID())).length)return this.AddItemFailure(a,"Cannot have more than one HEAVY battlekit."),!1}const c=await s.runEvent("equipmentHandsCost",this,[],{melee:e.Stats.hands_melee?e.Stats.hands_melee:0,ranged:e.Stats.hands_ranged?e.Stats.hands_ranged:0,special:0},{item:e,model:this});let d=!1,h=!1;await s.runEvent("countShieldCombo",this,[],!0,{model:this,warband:this.MyContext})&&(d=await this.IncludesShieldComboMelee(),h=await this.IncludesShieldComboRanged());const m=await this.HasShield(),p=await this.HasTwoHandedMeleeWeapon()||e.GetKeyWordIDs().includes("kw_cumbersome"),g=await this.IsKeywordPresent("kw_strong");!p&&g&&2==c.melee&&(c.melee=1),d&&e.IsCatOrTagged("shield")&&c.melee>0&&(c.melee-=1),h&&e.IsCatOrTagged("shield")&&c.ranged>0&&(c.ranged-=1),m&&e.GetKeyWordIDs().includes("kw_shieldcombo")&&(c.melee>0&&(c.melee-=1),c.ranged>0&&(c.ranged-=1)),t.melee<=0&&t.ranged<=0&&c.melee>0&&c.ranged>0&&(c.special-=Math.max(c.melee,c.ranged));const y=this.CompareHands(c,t);return 0==y&&this.AddItemFailure(a,"This model's hands are full."),y}CompareHands(e,t){return!(e.melee>t.melee||e.ranged>t.ranged||e.special>t.special)||e.melee+e.ranged+e.special<=t.special}async IncludesShieldComboRanged(){const e=await this.GetAllEquipForShow();for(let t=0;t<e.length;t++){const a=await e[t].equipment.GetKeywords(),n=e[t].equipment.MyEquipment.SelfDynamicProperty.OptionChoice;if(a.filter((e=>"kw_shieldcombo"==e.ID)).length>0&&"ranged"==n.Category)return!0}return!1}async IncludesShieldComboMelee(){const e=await this.GetAllEquipForShow();for(let t=0;t<e.length;t++){const a=await e[t].equipment.GetKeywords(),n=e[t].equipment.MyEquipment.SelfDynamicProperty.OptionChoice;if(a.filter((e=>"kw_shieldcombo"==e.ID)).length>0&&"melee"==n.Category)return!0}return!1}async GetModelHands(){const e=new u.J,t=await e.runEvent("getModelHandsAvailable",this,[],{melee:2,ranged:2,special:0},{model:this,warband:this.MyContext}),a=await this.IsKeywordPresent("kw_strong");let n=await e.runEvent("getCountofStrong",this,[],1==a?1:0,{model:this,warband:this.MyContext});const o=await e.runEvent("isRangedStrong",this,[],!1,{model:this,warband:this.MyContext});let i=!1,r=!1;await e.runEvent("countShieldCombo",this,[],!0,{model:this,warband:this.MyContext})&&(i=await this.IncludesShieldComboMelee(),r=await this.IncludesShieldComboRanged());const s=await this.GetAllEquipForShow();for(let l=0;l<s.length;l++){const e=s[l].equipment.MyEquipment.SelfDynamicProperty.OptionChoice;let a=void 0!=e.Stats.hands_melee?e.Stats.hands_melee:0,c=void 0!=e.Stats.hands_ranged?e.Stats.hands_ranged:0;e.Stats.hands_melee&&(n>0&&2==a&&!e.GetKeyWordIDs().includes("kw_cumbersome")&&(a=1,n-=1),e.IsCatOrTagged("shield")&&i&&(a=0)),e.Stats.hands_ranged&&(n>0&&2==c&&o&&!e.GetKeyWordIDs().includes("kw_cumbersome")&&(c=1,n-=1),e.IsCatOrTagged("shield")&&r&&(c=0));let d=!1;0!=t.melee?t.melee-=a:a>0&&(d=!0),0!=t.ranged?t.ranged-=c:c>0&&(d=!0),d&&(t.special-=Math.max(c,a))}return t}async HasTwoHandedMeleeWeapon(){const e=new u.J,t=await this.GetAllEquipForShow(),a=await this.IsKeywordPresent("kw_strong");let n=await e.runEvent("getCountofStrong",this,[],1==a?1:0,{model:this,warband:this.MyContext});for(let o=0;o<t.length;o++){const e=t[o].equipment.MyEquipment.SelfDynamicProperty.OptionChoice;if(e.Stats.hands_melee){2!=e.Stats.hands_melee||e.GetKeyWordIDs().includes("kw_cumbersome")||(n-=1)}}return n<=0}async HasShield(){const e=await this.GetAllEquipForShow();for(let t=0;t<e.length;t++){if(e[t].equipment.MyEquipment.SelfDynamicProperty.OptionChoice.IsCatOrTagged("shield"))return!0}return!1}async AddEquipment(e){let t=e.Cost;null!=this.MyContext.EquipmentRelCache[e.ID]&&(t=this.MyContext.EquipmentRelCache[e.ID].cost);const a=await m.Y.BuildWarbandEquipmentFromPurchase(e,this),n=new r.h({cost_value:t,cost_type:e.CostType,count_limit:!0,discount:0,count_cap:!0,sell_item:!0,sell_full:!1,purchaseid:e.EquipmentItem.ID,faction_rel_id:e.ID,custom_rel:e.SelfData,modelpurch:!1},this,a);await a.BuildNewProperties(this,n),this.Equipment.push(n);const o=new u.J;await o.runEvent("onGainEquipment",a,[this.MyContext,this],null,n),await o.runEvent("onGainEquipmentFighter",a,[this.MyContext,this,a],null,n)}async GetOptionalEquipment(){const e=[];for(let a=0;a<this.ModelEquipments.length;a++)for(let n=0;n<this.ModelEquipments[a].SelfDynamicProperty.Selections.length;n++){const o=this.ModelEquipments[a].SelfDynamicProperty.Selections[n].SelectedChoice;try{if(o){const t=o.value;for(let a=0;a<t.EquipmentItems.length;a++){const n=await m.Y.BuildModelEquipmentFromPurchase(t,t.EquipmentItems[a],a,this),o=new r.h({cost_value:t.SaleValue,cost_type:t.SaleType,count_limit:!1,count_cap:!1,sell_item:t.Removable,sell_full:!0,purchaseid:t.ID,discount:0,faction_rel_id:t.ID,custom_rel:t.SelfData,modelpurch:!0},this,n);e.push({purchase:o,equipment:n})}}}catch(t){console.log(t)}}return e}async GetAllEquipForShow(){const e=[];let t=!0;for(let n=0;n<this.Equipment.length;n++)"melee"==this.Equipment[n].HeldObject.GetEquipmentItem().Category&&(t=!1),e.push({purchase:this.Equipment[n],equipment:this.Equipment[n].HeldObject});const a=await this.GetOptionalEquipment();for(let n=0;n<a.length;n++)e.push(a[n]),"melee"==a[n].equipment.GetEquipmentItem().Category&&(t=!1);if(t){const t=new u.J,a=await t.runEvent("getUnarmedItemRel",this,[],"rel_unarmed",null),n=await t.runEvent("getUnarmedItemObj",this,[],"eq_unarmed",null);if("eq_unarmed"!=n){const t=await p.EquipmentFactory.CreateNewModelEquipment(a,null),o=await p.EquipmentFactory.CreateNewEquipment(n,null),i=await m.Y.BuildModelEquipmentFromPurchase(t,o,0,this),s=new r.h({cost_value:0,cost_type:0,count_limit:!1,count_cap:!1,sell_item:!1,sell_full:!0,discount:0,purchaseid:t.ID,faction_rel_id:t.ID,custom_rel:t.SelfData,modelpurch:!0},this,i);e.push({purchase:s,equipment:i})}}return e}async DirectAddStash(e){if(0==e.purchase.Sellable)return;this.Equipment.push(e.purchase);const t=new u.J;await t.runEvent("onGainEquipmentFighter",e.equipment,[this.MyContext,this,e.equipment],null,e.purchase)}async CanAddNewItem(e){if(0==e.purchase.Sellable)return"Cannot sell this item";if(await this.MyContext.AtMaxOfItem(e.purchase.PurchaseInterface))return"Warband At Limit For "+e.equipment.MyEquipment.GetTrueName();let t=!0;return e.purchase.CustomInterface.tags.is_custom&&(t=await this.CanAddItem(e.purchase.PurchaseInterface)),t?"":"This model cannot have another "+e.equipment.MyEquipment.GetTrueName()}async CopyStash(e){const t=await this.CanAddNewItem(e);if(t.length>0)return t;const a=await p.EquipmentFactory.CreateFactionEquipment(e.purchase.CustomInterface,this,!0),n=await m.Y.BuildWarbandEquipmentFromPurchase(a,this),o=new r.h({cost_value:a.Cost,cost_type:a.CostType,count_limit:!0,discount:0,count_cap:!0,sell_item:!0,sell_full:!0,purchaseid:a.EquipmentItem.ID,faction_rel_id:a.ID,custom_rel:a.SelfData,modelpurch:e.purchase.ModelPurchase},this,n);this.Equipment.push(o);const i=new u.J;return await i.runEvent("onGainEquipmentFighter",n,[this.MyContext,this,n],null,o),n.MyEquipment.Name+" Sucessfully Duplicated"}async CanAddItem(e){if(this.IsUnRestricted)return!0;const t=await p.EquipmentFactory.CreateNewFactionEquipment(e,null);if(null==t)return!1;const a=new u.J;if(this.IsMercenary()){if(await a.runEvent("overrideMercenarySkip",this,[],this.IsMercenary(),null))return!1}const n=await this.GetModelHands(),o=await a.runEvent("getEquipmentRestriction",this,[],[],null);let i="equipment"!=t.EquipmentItem.Category;if(!i){const e=await a.runEvent("getEquipmentLimitRaw",t.EquipmentItem,[],1,null);i=!(await this.HasSpecificEquipment(t.EquipmentItem.GetID())>=e)}if(i&&(i=await this.EquipItemAvailableSpace(t.EquipmentItem,n,t.GetID())),i&&(i=await this.EquipItemCanAdd(t,o,t.GetID())),i){let e="";e=await a.runEvent("canModelAddItem",t,[[]],e,{model:this,item:t}),i=e.length<=0,e.length>0&&this.AddItemFailure(t.GetID(),e)}return i}async EmptyStash(){const e=[];for(let t=0;t<this.Equipment.length;t++)e.push(this.Equipment[t]);for(let t=0;t<e.length;t++)this.DeleteStashWithDebt({purchase:e[t],equipment:e[t].HeldObject},1)}async DeleteStashWithDebt(e,t){const a=e.purchase.GetTotalDucats(),n=e.purchase.GetTotalGlory();if(0==e.purchase.Sellable)return;const o=0==e.purchase.FullSell?t:0;try{await this.DeleteStash(e),1==e.purchase.CountCap&&(this.MyContext.Debts.ducats+=Math.floor(a*o),this.MyContext.Debts.glory+=Math.floor(n*o))}catch(i){console.log(i)}}async DeleteStash(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(0!=e.purchase.Sellable||t)for(let a=0;a<this.Equipment.length;a++)if(e.equipment==this.Equipment[a].HeldObject){this.Equipment.splice(a,1);break}}async DeleteInjury(e){for(let t=0;t<this.Injuries.length;t++)if(e==this.Injuries[t]){this.Injuries.splice(t,1);break}await this.CheckIfDead()}async DeleteSkill(e){for(let a=0;a<this.Skills.length;a++)if(e==this.Skills[a]){this.Skills.splice(a,1);break}const t=new u.J;await t.runEvent("onRemoveSkill",e,[this.MyContext],null,this)}async BuildCampaignExportData(e){const t=await this.GetAllEquipForShow(),a=[],n=[],o=[],i=[];for(let r=0;r<t.length;r++)i.push({n:String(t[r].equipment.GetName()),i:t[r].equipment.MyEquipment.GetID()});for(let r=0;r<this.Upgrades.length;r++){const e=this.Upgrades[r].GetOwnItem();a.push({n:this.Upgrades[r].GetItemName(),i:e?e.GetID():""})}for(let r=0;r<this.Injuries.length;r++)o.push({n:this.Injuries[r].GetTrueName(),i:this.Injuries[r].GetID()});for(let r=0;r<this.Skills.length;r++)n.push({n:this.Skills[r].GetTrueName(),i:this.Skills[r].GetID()});return{mdn:this.CurModel.Name?this.CurModel.Name:"Unknown",mdi:this.CurModel.ID?this.CurModel.ID:this.ID,c:{d:e.GetTotalDucats(!1,!0),g:e.GetTotalGlory(!1,!0)},eq:i,up:a,adv:n,inj:o}}}},8394:function(e,t,a){"use strict";a.d(t,{h:function(){return r}});var n=a(7891),o=a(7969),i=a(2919);class r{constructor(e,t,a){this.SelfParent=void 0,this.HeldObject=void 0,this.PurchaseInterface=void 0,this.CustomInterface=void 0,this.ItemCost=void 0,this.CostType=void 0,this.CountLimit=void 0,this.CountCap=void 0,this.Discount=void 0,this.Sellable=void 0,this.FullSell=void 0,this.ModelPurchase=void 0,this.SelfParent=t,this.HeldObject=a,this.ItemCost=e.cost_value,this.CostType=e.cost_type,this.CountLimit=e.count_limit,this.CountCap=e.count_cap,this.Discount=e.discount,this.Sellable=e.sell_item,this.FullSell=e.sell_full,this.PurchaseInterface=e.faction_rel_id,e.custom_rel&&(this.CustomInterface=e.custom_rel),e.discount?this.Discount=e.discount:this.Discount=0,e.modelpurch?this.ModelPurchase=e.modelpurch:this.ModelPurchase=!1}ConvertToInterface(){return{cost_value:this.ItemCost,cost_type:this.CostType,count_limit:this.CountLimit,count_cap:this.CountCap,sell_item:this.Sellable,sell_full:this.FullSell,purchaseid:this.HeldObject.ID,discount:this.Discount,faction_rel_id:this.PurchaseInterface,custom_rel:this.CustomInterface,modelpurch:this.ModelPurchase}}ConvertToInterfaceModel(){return{purchase:this.ConvertToInterface(),model:this.HeldObject.ConvertToInterface()}}ConvertToInterfaceEquipment(){return{purchase:this.ConvertToInterface(),equipment:this.HeldObject.ConvertToInterface()}}ConvertToInterfaceUpgrade(){return{purchase:this.ConvertToInterface(),upgrade:this.HeldObject.ConvertToInterface()}}GetTotalDiscount(e){let t=0;return this.CostType==e&&(t+=this.Discount),(this.HeldObject instanceof n.WarbandMember||this.HeldObject instanceof o.o)&&(t+=this.HeldObject.GetTotalDiscounts(e)),t}GetTotalDucats(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a=0;return 0==this.CostType&&(a+=this.ItemCost,t&&(a-=this.Discount)),(this.HeldObject instanceof n.WarbandMember||this.HeldObject instanceof o.o)&&(a+=this.HeldObject.GetSubCosts(0,e,t)),a}GetTotalGlory(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a=0;return 1==this.CostType&&(a+=this.ItemCost,t&&(a-=this.Discount)),(this.HeldObject instanceof n.WarbandMember||this.HeldObject instanceof o.o)&&(a+=this.HeldObject.GetSubCosts(1,e,t)),a}GetOwnItem(){return this.HeldObject instanceof n.WarbandMember||this.HeldObject instanceof o.o||this.HeldObject instanceof i.WarbandProperty?this.HeldObject:void 0}GetItemName(){const e=this.GetOwnItem();return e instanceof n.WarbandMember?e.GetTrueName():this.HeldObject instanceof o.o?e.MyEquipment.GetTrueName():this.HeldObject instanceof i.WarbandProperty?e.SelfDynamicProperty.OptionChoice.GetTrueName():e?e.GetTrueName():""}GetCategory(){const e=this.GetOwnItem();if(e instanceof o.o){return e.MyEquipment.SelfDynamicProperty.OptionChoice.Category}}}},1412:function(e,t,a){"use strict";a.r(t),a.d(t,{UserWarband:function(){return v}});var n=a(6184);class o{constructor(e){this.VictoryPoints=void 0,this.CampaignRound=void 0,this.ID=void 0,this.FailedPromotions=void 0,this.Ratings=void 0,this.ID=e.id,this.VictoryPoints=e.victory_points,this.CampaignRound=e.campaign_round,this.FailedPromotions=e.failed_promotions,e.stored_ratings?this.Ratings=e.stored_ratings:this.Ratings={rating_ducat:0,rating_glory:0,stash_rating_ducat:0,stash_rating_glory:0,spare_ducat:0,spare_glory:0}}ConvertToInterface(){return{id:this.ID,victory_points:this.VictoryPoints,campaign_round:this.CampaignRound,failed_promotions:this.FailedPromotions,stored_ratings:this.Ratings}}}var i=a(9100),r=a(8394),s=a(7969),l=a(722),c=a(6264),d=a(2919),u=a(2433),h=a(7479),m=a(7880),p=a(6498),f=a(5561),g=a(6298),y=a(9652),_=a(520),b=a(3834);class v extends i.A{DumpCache(){this.EquipmentRelCache={},this.ModelRelCache={},this.GeneralCache={},this.Exploration.DumpCache(),this.Faction.DumpCache();for(let e=0;e<this.Models.length;e++){this.Models[e].HeldObject.DumpCache()}for(let e=0;e<this.Equipment.length;e++){const t=this.Equipment[e].HeldObject;t.EventCache={},t.EquipmentCache=null}this.EventCache={}}constructor(e,t){super(e,null),this.ID=void 0,this.Context=void 0,this.Exploration=void 0,this.Faction=void 0,this.Ducats=void 0,this.Glory=void 0,this.Notes=void 0,this.Models=[],this.Equipment=[],this.Debts=void 0,this.Modifiers=[],this.ModifiersLoc=[],this.Fireteams=[],this.Consumables=[],this.Restrictions=[],this.IsUnRestricted=void 0,this.EquipmentRelCache={},this.ModelRelCache={},this.GeneralCache={},this.PostID=void 0,this.WarbandInvites=[],this.WarbandCampaigns=[],this.UserID=void 0,this.DucatLimit=[700,800,900,1e3,1100,1200,1300,1400,1500,1600,1700,1800],this.ModelLimit=[10,11,12,13,14,15,16,17,18,19,20,22],this.ID=e.id,this.PostID=t,this.Context=new o(e.context),this.Ducats=e.ducat_bank,this.Glory=e.glory_bank,this.Notes=e.notes,void 0!=e.debts?this.Debts=e.debts:this.Debts={ducats:0,glory:0},void 0!=e.restrictions_list?this.Restrictions=e.restrictions_list:this.Restrictions=[],void 0!=e.warband_invites?this.WarbandInvites=e.warband_invites:this.WarbandInvites=[],void 0!=e.warband_campaigns?this.WarbandCampaigns=e.warband_campaigns:this.WarbandCampaigns=[],void 0!=e.warband_user?this.UserID=e.warband_user:this.UserID=-1,this.IsUnRestricted=this.Restrictions.includes("unrestricted")}async NewWarbandItems(e){void 0!=e&&(this.Faction=await l.Y.CreateWarbandFaction(e.faction,this),this.Exploration=await l.Y.CreateWarbandExplorationSet(e.exploration,this))}async BuildModels(e){if(void 0!=e)for(let t=0;t<e.length;t++){const a=await l.Y.CreateWarbandMember(e[t].model,this,this.IsUnRestricted),n=new r.h(e[t].purchase,this,a);this.Models.push(n)}}async BuildEquipment(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.SelfData.equipitem;if(void 0!=e){this.Equipment=[];for(let t=0;t<e.length;t++){const a=await l.Y.CreateWarbandEquipment(e[t].equipment,this),n=new r.h(e[t].purchase,this,a);this.Equipment.push(n)}}}async BuildTempLocations(e){await this.Exploration.BuildTempLocations(e)}async BuildModifiersSkills(e){if(void 0==e)return;const t=this.Modifiers.map((e=>JSON.stringify(e.ConvertToInterface())));for(let a=0;a<e.length;a++){const n=e[a];if(t.includes(JSON.stringify(e[a])))continue;const o=await p.SkillFactory.CreateNewSkill(n.object_id,this,!0),i=new d.WarbandProperty(o,this,null,n);await i.HandleDynamicProps(o,this,null,n),await i.BuildConsumables(n.consumables),this.Modifiers.push(i)}}async BuildModifiersLoc(e){if(void 0!=e)for(let a=0;a<e.length;a++)try{const t=e[a],n=await g.ExplorationFactory.CreateNewExplorationLocation(t.object_id,this,!0),o=new d.WarbandProperty(n,this,null,t);await o.HandleDynamicProps(n,this,null,t),await o.BuildConsumables(t.consumables),this.Modifiers.push(o)}catch(t){console.log(t)}}async BuildConsumables(e){if(void 0!=e)for(let t=0;t<e.length;t++){const a=e[t],n=new f.WarbandConsumable(a,this,null);await n.GrabItem(a),await n.GrabOptions(),this.Consumables.push(n)}}IsModelInThisFireteam(e,t){for(let n=0;n<this.Fireteams.length;n++)if(this.Fireteams[n].ID==e.ID)for(let e=0;e<this.Fireteams[n].SelfDynamicProperty.Selections.length;e++){var a;if(this.Fireteams[n].SelfDynamicProperty.Selections[e].SelectedChoice)if((null===(a=this.Fireteams[n].SelfDynamicProperty.Selections[e].SelectedChoice)||void 0===a?void 0:a.value)==t)return!0}return!1}GetObjectsWithAttatch(){const e=[],t=this.Exploration.GetObjectsWithAttatch();for(let a=0;a<t.length;a++)e.push(t[a]);return e}GetAttatchementsForModel(e){const t=this.GetUsableFighters(),a=[],n=this.GetObjectsWithAttatch();for(let o=0;o<n.length;o++){let t=!1;for(let a=0;a<n[o].SelfDynamicProperty.Selections.length;a++){const i=n[o].SelfDynamicProperty.Selections[a];if(null!=i.SelectedChoice){if(i.SelectedChoice.value==e){t=!0;break}if(i.SelectedChoice.value instanceof s.o&&null!=i.SelectedChoice.value.MyContext&&i.SelectedChoice.value.MyContext==e){t=!0;break}}}t&&a.push(n[o])}for(let o=0;o<t.length;o++){const n=t[o].model.GetObjectsWithAttatch();for(let t=0;t<n.length;t++){let o=!1;for(let a=0;a<n[t].SelfDynamicProperty.Selections.length;a++){const i=n[t].SelfDynamicProperty.Selections[a];if(null!=i.SelectedChoice&&i.SelectedChoice.value==e){o=!0;break}}o&&a.push(n[t])}}return a}async IsModelInOtherFireteam(e){for(let t=0;t<this.Fireteams.length;t++)if(this.IsModelInThisFireteam(this.Fireteams[t].SelfDynamicProperty.OptionChoice,e))return!0;return!1}async IsModelInExclusiveFireteam(e){for(let t=0;t<this.Fireteams.length;t++)if(this.Fireteams[t].SelfDynamicProperty.OptionChoice.ContextKeys.added_context){const a=this.Fireteams[t].SelfDynamicProperty.OptionChoice.ContextKeys.added_context;if(a.exclusive&&1==a.exclusive&&this.IsModelInThisFireteam(this.Fireteams[t].SelfDynamicProperty.OptionChoice,e))return!0}return!1}async BuildModifiersFireteam(e){const t=new c.J;let a=[];a=null!=this.GeneralCache.fireteam_list?this.GeneralCache.fireteam_list:await t.runEvent("getAllFireteamOptions",this,[],[],this);for(let n=0;n<this.Models.length;n++)a=await this.Models[n].HeldObject.GetFireteams(a);this.Fireteams=[];for(let n=0;n<a.length;n++){let t=!1;for(let o=0;o<e.length;o++)if(e[o].object_id==a[n].ID){const i=new d.WarbandProperty(a[n],this,null,e[o]);await i.HandleDynamicProps(a[n],this,null,e[o]),await i.BuildConsumables(e[o].consumables),await i.RegenerateOptions(),this.Fireteams.push(i),t=!0;break}if(0==t){const e=new d.WarbandProperty(a[n],this,null,null);await e.HandleDynamicProps(a[n],this,null,null),await e.BuildConsumables([]),this.Fireteams.push(e)}}for(let n=0;n<this.Fireteams.length;n++)await this.Fireteams[n].RegenerateOptions();return this.Fireteams}ConvertToInterface(){const e=[];for(let s=0;s<this.Models.length;s++)e.push(this.Models[s].ConvertToInterfaceModel());const t=[];for(let s=0;s<this.Equipment.length;s++)t.push(this.Equipment[s].ConvertToInterfaceEquipment());const a=[];for(let s=0;s<this.Modifiers.length;s++){void 0!=this.Modifiers[s].ConvertToInterface()&&a.push(this.Modifiers[s].ConvertToInterface())}const n=[];for(let s=0;s<this.ModifiersLoc.length;s++){void 0!=this.ModifiersLoc[s].ConvertToInterface()&&n.push(this.ModifiersLoc[s].ConvertToInterface())}const o=[];for(let s=0;s<this.Fireteams.length;s++)o.push(this.Fireteams[s].ConvertToInterface());const i=[];for(let s=0;s<this.Consumables.length;s++)i.push(this.Consumables[s].ConvertToInterface());this.Context.Ratings.rating_ducat=this.GetRatingDucats(),this.Context.Ratings.rating_glory=this.GetRatingGlory(),this.Context.Ratings.spare_ducat=this.GetStashedDucats(),this.Context.Ratings.spare_glory=this.GetStashedGlory(),this.Context.Ratings.stash_rating_ducat=this.GetStashedItemsValueDucats(),this.Context.Ratings.stash_rating_glory=this.GetStashedItemsValueGlory();const r={id:this.ID,context:this.Context.ConvertToInterface(),exploration:this.Exploration.ConvertToInterface(),faction:this.Faction.ConvertToInterface(),contextdata:this.ContextKeys,name:void 0!=this.Name?this.Name:"",source:void 0!=this.Source?this.Source:"",tags:this.Tags,ducat_bank:this.Ducats,glory_bank:this.Glory,models:e,equipment:t,notes:this.Notes,debts:this.Debts,modifiers:a,modifiersloc:n,fireteams:o,consumables:i,restrictions_list:this.Restrictions};return this.SelfData=r,r}async GrabSubPackages(e,t,a){const n=[];if(this.ContextData)for(const o of Object.keys(this.ContextKeys)){const a=this.ContextData[o];if(void 0==a)continue;const i=a[e];if(void 0!==i){const e={priority:a.event_priotity,source:t,self:this,callback:i,callbackdict:this.ContextKeys[o],dyncontext:this.MyContext,callpath:["UserWarband","WarbandSource"]};n.push(e)}}if(this.Faction){const o=await this.Faction.GrabContextPackages(e,t,a);for(let e=0;e<o.length;e++)o[e].callpath.push("UserWarband"),n.push(o[e])}if(this.Exploration){const o=await this.Exploration.GrabContextPackages(e,t,a);for(let e=0;e<o.length;e++)o[e].callpath.push("UserWarband"),n.push(o[e])}for(let o=0;o<this.Models.length;o++){const i=await this.Models[o].HeldObject.GrabWarbandubPackages(e,t,a);for(let e=0;e<i.length;e++)i[e].callpath.push("UserWarband"),n.push(i[e])}for(let o=0;o<this.Equipment.length;o++){const i=await this.Equipment[o].HeldObject.GrabWarbandubPackages(e,t,a);for(let e=0;e<i.length;e++)i[e].callpath.push("UserWarband"),n.push(i[e])}return n}async GetPatronList(){return await this.Faction.FindAllPatronOptions()}async UpdateSelfPatron(e){await this.Faction.UpdatePatron(e)}async GetExplorationSkillsInContext(){return await this.Exploration.GetSkillsInFormat()}async GetSelfExplorationSkills(){if(null!=this.GeneralCache.exploration_skills)return this.GeneralCache.exploration_skills;const e=new c.J,t=await e.runEvent("getExplorationSkills",this,[],[],null);return this.GeneralCache.exploration_skills=t,t}GetLocations(){return this.Exploration.Locations}async GetAvailableLocations(){return await this.Exploration.GetValidNewLocations()}async GetWarbandAlerts(){const e=[];return e.push({title:"Test Alert",content:"This alert is just a test, don't worry!"}),e}GetId(){return this.ID}GetPostId(){return this.PostID}GetPatron(){return this.Faction.MyPatron}GetPatronName(){var e;return(null===(e=this.GetPatron())||void 0===e?void 0:e.Name)||"None"}GetWarbandName(){return void 0==this.Name?"":this.Name}SetWarbandName(e){void 0!=e&&(this.Name=e)}GetFactionName(){return this.Faction.GetSelfName()}GetFactionSlug(){var e;return null===(e=this.Faction.MyFaction)||void 0===e?void 0:e.ID}async GetFactionBase(){return await this.Faction.GetFactionBase()}GetFaction(){return this.Faction.GetFaction()}computeCurrency(){var e,t;const a=Number(this.Ducats||0),n=Number(this.Glory||0),o=Number((null===(e=this.Debts)||void 0===e?void 0:e.ducats)||0),i=Number((null===(t=this.Debts)||void 0===t?void 0:t.glory)||0);let r=0,s=0,l=0,c=0,d=0,u=0,h=0,m=0,p=0,f=0,g=0,y=0,_=0,b=0;for(let S=0;S<this.Models.length;S++){if("active"==this.Models[S].HeldObject.State||"dog"==this.Models[S].HeldObject.State){if(0==this.Models[S].CountCap)continue;r+=this.Models[S].GetTotalDucats(!1,!0),s+=this.Models[S].GetTotalGlory(!1,!0),l+=this.Models[S].GetTotalDiscount(0),c+=this.Models[S].GetTotalDiscount(1)}"reserved"==this.Models[S].HeldObject.State&&(d+=this.Models[S].GetTotalDucats(!1,!0),u+=this.Models[S].GetTotalGlory(!1,!0),h+=this.Models[S].GetTotalDiscount(0),m+=this.Models[S].GetTotalDiscount(1)),"dead"!=this.Models[S].HeldObject.State&&"lost"!=this.Models[S].HeldObject.State||(p+=this.Models[S].GetTotalDucats(!1,!0),f+=this.Models[S].GetTotalGlory(!1,!0))}for(let S=0;S<this.Equipment.length;S++)0!=this.Equipment[S].CountCap&&(void 0!=this.Equipment[S].HeldObject.Tags.deployed_equipment?(r+=this.Equipment[S].GetTotalDucats(!1,!0),s+=this.Equipment[S].GetTotalGlory(!1,!0),l+=this.Equipment[S].GetTotalDiscount(0),c+=this.Equipment[S].GetTotalDiscount(1)):(g+=this.Equipment[S].GetTotalDucats(!1),y+=this.Equipment[S].GetTotalGlory(!1),_+=this.Equipment[S].GetTotalDiscount(0),b+=this.Equipment[S].GetTotalDiscount(1)));const v=r+l,w=s+c,x=a-(r+d+p+g)+_-o,k=n-(s+u+f+y)+b-i,C=g+x,j=y+k;return{ducats:{bank:a,debts:o,rating:v,total:C+v+(d+h),reserve:d,stashedItems:g,stashed:x,stashValue:C},glory:{bank:n,debts:i,rating:w,total:j+w+(u+m),reserve:u,stashedItems:y,stashed:k,stashValue:j}}}GetRatingDucats(){return this.computeCurrency().ducats.rating}GetRatingGlory(){return this.computeCurrency().glory.rating}GetStashedDucats(){return this.computeCurrency().ducats.stashed}GetStashedGlory(){return this.computeCurrency().glory.stashed}GetStashedItemsValueDucats(){return this.computeCurrency().ducats.stashedItems}GetStashedItemsValueGlory(){return this.computeCurrency().glory.stashedItems}GetStashValueDucats(){return this.computeCurrency().ducats.stashValue}GetStashValueGlory(){return this.computeCurrency().glory.stashValue}GetTotalValueDucats(){return this.computeCurrency().ducats.total}GetTotalValueGlory(){return this.computeCurrency().glory.total}HasTroops(){return this.GetFighters().filter((e=>!e.model.IsElite()&&!e.model.IsMercenary()&&"active"==e.model.State)).length>0}HasElites(){return this.GetFighters().filter((e=>e.model.IsElite()&&"active"==e.model.State)).length>0}HasMercenaries(){return this.GetFighters().filter((e=>e.model.IsMercenary()&&"active"==e.model.State)).length>0}HasDogs(){return this.GetFighters().filter((e=>"dog"==e.model.State)).length>0}HasReserves(){return this.GetFighters().filter((e=>"reserved"==e.model.State)).length>0}HasDead(){return this.GetFighters().filter((e=>"dead"==e.model.State)).length>0}HasGone(){return this.GetFighters().filter((e=>"lost"==e.model.State)).length>0}GetFighters(){const e=[];for(let t=0;t<this.Models.length;t++)e.push({purchase:this.Models[t],model:this.Models[t].HeldObject});return e}GetStash(){const e=[];for(let t=0;t<this.Equipment.length;t++)e.push({purchase:this.Equipment[t],equipment:this.Equipment[t].HeldObject});return e}GetUsableFighters(){const e=[];for(let t=0;t<this.Models.length;t++)"active"!=this.Models[t].HeldObject.State&&"reserved"!=this.Models[t].HeldObject.State||e.push({purchase:this.Models[t],model:this.Models[t].HeldObject});return e}GetFireteamFighters(){const e=[];for(let t=0;t<this.Models.length;t++)"active"!=this.Models[t].HeldObject.State&&"reserved"!=this.Models[t].HeldObject.State&&"dog"!=this.Models[t].HeldObject.State||e.push({purchase:this.Models[t],model:this.Models[t].HeldObject});return e}async AddCustomFighter(e,t,a){this.Restrictions.includes("custom_fighter")||this.Restrictions.push("custom_fighter");const n={id:e.GetID()+"_"+Date.now().toString(),name:e.GetTrueName(),source:"Warband_Custom",tags:{},contextdata:{},options:[],faction_id:[],model_id:e.GetID(),captain:!1,mercenary:!!e.Stats.mercenary&&e.Stats.mercenary,cost:t,cost_type:a,restricted_models:[],warband_minimum:0,warband_maximum:0},o=await h.ModelFactory.CreateFactionModel(n,this);await this.AddFighter([o])}async AddFighter(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const a=[];for(let n=0;n<e.length;n++){const o=await l.Y.BuildWarbandMemberFromPurchase(e[n],this,this.IsUnRestricted);await o.BuildModelEquipment(!0);const i=new r.h({cost_value:e[n].Cost,cost_type:e[n].CostType,count_limit:!0,count_cap:!0,discount:t?e[n].Cost:0,sell_item:!0,sell_full:!0,purchaseid:e[n].Model.ID,faction_rel_id:e[n].ID,custom_rel:e[n].SelfData,modelpurch:!1},this,o);this.Models.push(i),a.push(i);const s=new c.J;await s.runEvent("onAddFighter",o,[o],null,this)}return await this.RebuildProperties(),a}async RebuildProperties(){await this.BuildModifiersSkills(this.SelfData.modifiers),await this.BuildModifiersLoc(this.SelfData.modifiersloc),await this.BuildModifiersFireteam(this.SelfData.fireteams),await this.Exploration.RebuildProperties(),await this.Faction.RebuildProperties();const e=this.GetFighters();for(let t=0;t<e.length;t++)await e[t].model.RebuildProperties()}async DuplicateFighter(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(await this.AtMaxOfModel(e.purchase.PurchaseInterface))return"Warband At Limit For "+e.model.CurModel.GetTrueName();if(1==t){let t=!0;const a=e.purchase.ItemCost;if(0==e.purchase.CostType&&(t=this.GetStashedDucats()>=a),1==e.purchase.CostType&&(t=this.GetStashedGlory()>=a),!t)return"Warband Cannot Afford "+e.model.CurModel.GetTrueName()}if(e.model.IsElite()){if(!await this.CanAddMoreElite())return"Warband cannot have more ELITE models."}const a=await e.model.CanCopySelf();if(a.length>0)return a;const n=Date.now(),o=await l.Y.CreateWarbandMember(e.model.ConvertToInterface(),this,this.IsUnRestricted);o.Name=e.model.Name,o.ID=o.CurModel.ID+"_"+this.Models.length+"_"+n.toString();const i=new r.h(e.purchase.ConvertToInterface(),this,o);return this.Models.push(i),await this.RebuildProperties(),e.model.Name+" Sucessfully Duplicated"}async AtMaxOfModel(e){const t=await h.ModelFactory.CreateNewFactionModel(e,null),a=new c.J;let n=t.Maximum;return null!=this.ModelRelCache[t.ID]?n=this.ModelRelCache[t.ID].limit:(n=await a.runEvent("getModelLimitTrue",t,[t],n,this),n=await a.runEvent("getModelLimitTrue",this,[t],n,this)),!(this.GetCountOfRel(t.ID)<n||0==t.Minimum&&-1==t.Maximum)}async DeleteFighter(e){for(let t=0;t<this.Models.length;t++)if(e.model==this.Models[t].HeldObject){const a=await e.model.GetWarbandSkills();for(let e=0;e<a.length;e++)a[e].MyContext=this,this.Modifiers.push(a[e]);const n=await e.model.GetWarbandEquipment();for(let e=0;e<n.length;e++)n[e].HeldObject.MyContext=this,this.Equipment.push(n[e]);await this.WhenModelDead(e.model),this.Models.splice(t,1);break}await this.RebuildProperties()}HasModifier(e){return this.Modifiers.includes(e)||this.Exploration.LocationMods.includes(e)}async Deletemod(e){for(let t=0;t<this.Modifiers.length;t++)if(e==this.Modifiers[t]){await e.SendConsumablesUp(),this.Modifiers.splice(t,1);break}for(let t=0;t<this.Exploration.LocationMods.length;t++)if(e==this.Exploration.LocationMods[t]){await e.SendConsumablesUp(),this.Exploration.LocationMods.splice(t,1);break}await this.RebuildProperties()}async DeleteLocation(e){await this.Exploration.DeleteLocation(e),await this.RebuildProperties()}GetConsumablesEquipment(){const e=[];for(let t=0;t<this.Consumables.length;t++)(0,n.Kg)(this.Consumables[t].Tags,"consumable_type_equipment")&&e.push(this.Consumables[t]);return e}async DeleteFighterWithDebt(e,t){const a=e.purchase.GetTotalDucats(),n=e.purchase.GetTotalGlory();try{await this.DeleteFighter(e),1==e.purchase.CountCap&&(this.Debts.ducats+=Math.floor(a*t),this.Debts.glory+=Math.floor(n*t))}catch(o){console.log(o)}}async DirectAddStash(e){this.Equipment.push(e.purchase)}DeployItem(e){e.equipment.Tags.deployed_equipment=!0}UnDeployItem(e){delete e.equipment.Tags.deployed_equipment}AddStashValue(e,t){1==t?this.Glory+=e:this.Ducats+=e}async AwaitedAddStashValue(e,t){1==t?this.Glory+=e:this.Ducats+=e,await this.Exploration.ReloadTempOptions()}HasEnoughDucats(e,t){if(1==t){return this.GetStashedGlory()>=e}return this.GetStashedDucats()>=e}async CustomStash(e,t,a){this.Restrictions.includes("custom_equipment")||this.Restrictions.push("custom_equipment");const n={id:e.GetID()+"_"+Date.now().toString(),name:e.GetTrueName(),source:"Warband Custom",tags:{is_custom:!0},contextdata:{},faction_id:[],equipment_id:e.GetID(),cost:t,costtype:a,limit:0},o=await m.EquipmentFactory.CreateFactionEquipment(n,this,!0);await this.AddStash(o)}async AddStash(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(null==e||void 0==e)return;if(null==e.EquipmentItem||void 0==e.EquipmentItem)return;let n=e.Cost;null!=this.EquipmentRelCache[e.ID]&&(n=this.EquipmentRelCache[e.ID].cost);let o=e.ID,i=e.SelfData;null!=a&&(o=a.ID,i=a.SelfData);const s=await l.Y.BuildWarbandEquipmentFromPurchase(e,this),d=new r.h({cost_value:n,cost_type:e.CostType,count_limit:!0,count_cap:!0,sell_item:!0,sell_full:!1,discount:t?n:0,purchaseid:e.EquipmentItem.ID,faction_rel_id:o,custom_rel:i,modelpurch:!1},this,s);this.Equipment.push(d);const u=new c.J;await u.runEvent("onGainEquipment",s,[this,this],null,d)}async DeleteStash(e){for(let t=0;t<this.Equipment.length;t++)if(e.equipment==this.Equipment[t].HeldObject){this.Equipment.splice(t,1);break}await this.RebuildProperties()}async CopyStash(e){if(await this.AtMaxOfItem(e.purchase.PurchaseInterface))return"Warband At Limit For "+e.equipment.MyEquipment.GetTrueName();const t=await m.EquipmentFactory.CreateFactionEquipment(e.purchase.CustomInterface,this,!0),a=await l.Y.BuildWarbandEquipmentFromPurchase(t,this),n=new r.h({cost_value:t.Cost,cost_type:t.CostType,count_limit:!0,count_cap:!0,discount:0,sell_item:!0,sell_full:!0,purchaseid:t.EquipmentItem.ID,faction_rel_id:t.ID,custom_rel:t.SelfData,modelpurch:!1},this,a);return this.Equipment.push(n),await this.RebuildProperties(),a.MyEquipment.Name+" Sucessfully Duplicated"}async AtMaxOfItem(e){const t=await m.EquipmentFactory.CreateNewFactionEquipment(e,null);if(null==t)return!1;const a=new c.J;let o=t.Limit,i=0;if(null!=this.EquipmentRelCache[t.ID]?(o=this.EquipmentRelCache[t.ID].limit,i=this.EquipmentRelCache[t.ID].count_cur):(o=await a.runEvent("getEquipmentLimitTrue",t,[],o,this),i=this.GetCountOfEquipmentRel(t.ID)),i<o||0==o&&0==t.Limit){const e=await this.GetExplorationLimit();if(!(0,n.Kg)(t.Tags,"exploration_only")||this.IsWarbandExplorationOnly()||e>=t.Cost)return!1}return!0}async DeleteStashWithDebt(e,t){const a=e.purchase.GetTotalDucats(),n=e.purchase.GetTotalGlory();try{await this.DeleteStash(e),1==e.purchase.CountCap&&(this.Debts.ducats+=Math.floor(a*t),this.Debts.glory+=Math.floor(n*t))}catch(o){console.log(o)}}async AddExplorationLocation(e,t){await this.Exploration.AddExplorationLocation(e,t)}async AddExplorationMod(e,t){await this.Exploration.AddExplorationMod(e,t)}async GetCampaignName(){if(null!=this.MyContext&&this.MyContext instanceof _.G){return this.MyContext.Owner.Name}if(this.WarbandCampaigns.length>0){const e=await b.x.GetCampaignSummaryPublicByID(this.WarbandCampaigns[0]);if(e)return e.campaign_name}return"No Campaign connected"}GetCampaignInvites(){return this.WarbandInvites}IsOwner(e){return this.UserID==e}GetCampaignId(){if(null!=this.MyContext&&this.MyContext instanceof _.G){return this.MyContext.Owner.Id}return this.WarbandCampaigns.length>0&&this.WarbandCampaigns[0]}GetCampaigns(){return this.WarbandCampaigns}GetVictoryPoints(){return this.Context.VictoryPoints}SetVP(e){this.Context.VictoryPoints=e}GetCampaignCycleView(){return this.Context.CampaignRound?this.Context.CampaignRound:1}SetCurrentCycle(e){this.Context.CampaignRound=e}SetCurrentFailedPromotions(e){this.Context.FailedPromotions=e}GetCampaignCycleMax(){return 12}async GetCampaignTresholdValue(){var e;const t=null!==(e=this.DucatLimit[this.GetCampaignCycleView()-1])&&void 0!==e?e:this.DucatLimit[this.DucatLimit.length-1],a=new c.J;let n=t;return n=null!=this.GeneralCache.base_ducats?this.GeneralCache.base_ducats:await a.runEvent("getStartingDucats",this,[],t,null),void 0!=n?n:t}GetCampaignMaxFieldStrength(){var e;return null!==(e=this.ModelLimit[this.GetCampaignCycleView()-1])&&void 0!==e?e:this.ModelLimit[this.ModelLimit.length-1]}async CanAddMoreElite(){const e=new c.J;let t=6;if(null!=this.GeneralCache.max_elite)t=this.GeneralCache.max_elite;else{t=await e.runEvent("getNumberOfElite",this,[],6,this);const a=this.GetFighters();for(let n=0;n<a.length;n++)"active"!=a[n].model.State&&"reserved"!=a[n].model.State||(t=await e.runEvent("getNumberOfElite",a[n].model,[],t,this))}return this.GetNumElite()<t}GetNumFielded(){return this.GetFighters().filter((e=>"active"==e.model.State&&!(0,n.Kg)(e.model.Tags,"exempt_fielded"))).length}GetNumElite(){return this.GetFighters().filter((e=>e.model.IsElite()&&"active"==e.model.State&&!(0,n.Kg)(e.model.Tags,"exempt_fielded"))).length}GetNumTroop(){return this.GetFighters().filter((e=>e.model.IsTroop()&&"active"==e.model.State&&!(0,n.Kg)(e.model.Tags,"exempt_fielded"))).length}GetNumMercenary(){return this.GetFighters().filter((e=>e.model.IsMercenary()&&"active"==e.model.State&&!(0,n.Kg)(e.model.Tags,"exempt_fielded"))).length}GetNumReserved(){return this.GetFighters().filter((e=>"reserved"==e.model.State&&!(0,n.Kg)(e.model.Tags,"exempt_fielded"))).length}GetNumLost(){return this.GetFighters().filter((e=>"lost"==e.model.State&&!(0,n.Kg)(e.model.Tags,"exempt_fielded"))).length}GetNumDead(){return this.GetFighters().filter((e=>"dead"==e.model.State&&!(0,n.Kg)(e.model.Tags,"exempt_fielded"))).length}async GetValidationErrors(){const e=[],t=new c.J;let a=!1;for(let o=0;o<this.Models.length;o++){if(this.Models[o].HeldObject.IsMercenary())continue;if("dead"==this.Models[o].HeldObject.State||"lost"==this.Models[o].HeldObject.State)continue;let n=[];const i=this.Models[o].HeldObject.GeneralCache.validation_check;if(null!=i)n=i;else{const e=await t.runEvent("validateModelForWarband",this,[this],[],this.Models[o]);n=await t.runEvent("validateModelForWarband",this.Models[o].HeldObject,[this],e,this.Models[o])}for(let t=0;t<n.length;t++)e.push(n[t]);this.Models[o].CustomInterface.captain&&1==this.Models[o].CustomInterface.captain&&(a=!0)}0==a&&e.push("The warband lacks a Leader");const n=await this.GetModelCountErrors();for(let o=0;o<n.length;o++)e.push(n[o]);return e}async GetModelCountErrors(){const e=this.Faction.MyFaction,t=[];let a=[];void 0!=e&&(a=e.SelfDynamicProperty.OptionChoice.Models);const n=new c.J;a=null!=this.GeneralCache.fac_model_rel?this.GeneralCache.fac_model_rel:await n.runEvent("getAllFactionModelRelationships",this,[],a,null);for(let o=0;o<a.length;o++)this.GetCountOfRel(a[o].ID)<a[o].Minimum&&-1!=a[o].Maximum&&t.push("Your warband has too few "+a[o].Model.GetTrueName());return t}IsWarbandCustom(){return 1==this.IsUnRestricted||(1==this.Restrictions.includes("custom_equipment")||1==this.Restrictions.includes("custom_fighter"))}IsWarbandExplorationOnly(){return 1==this.Restrictions.includes("open_exploration")}GetWarbandNotes(){for(let e=0;e<this.Notes.length;e++)if("notes"==this.Notes[e].title)return this.Notes[e].text;return""}GetLore(){for(let e=0;e<this.Notes.length;e++)if("lore"==this.Notes[e].title)return this.Notes[e].text;return""}async SaveNote(e,t){let a=null;for(let n=0;n<this.Notes.length;n++)this.Notes[n].title==t&&this.Notes.splice(n,1);a={text:e,title:t},this.Notes.push(a)}GetCampaignNotes(){for(let e=0;e<this.Notes.length;e++)if("campaign"==this.Notes[e].title)return this.Notes[e].text;return""}async RunEventThroughAllMembers(e,t,a,n){const o=new c.J;for(let i=0;i<this.Models.length;i++){const r=this.Models[i].HeldObject;e=await o.runEvent(t,r,a,e,n)}return e}GetCountOfModel(e){let t=0;for(let a=0;a<this.GetUsableFighters().length;a++)this.GetUsableFighters()[a].model.CurModel.ID==e&&t++;return t}GetCountOfRel(e){let t=0;for(let a=0;a<this.GetUsableFighters().length;a++){if("dead"==this.GetUsableFighters()[a].model.State)continue;const n=this.GetUsableFighters()[a].purchase.CustomInterface;n&&n.id==e&&t++}return t}GetCountOfUpgradeRel(e){let t=0;for(let a=0;a<this.GetUsableFighters().length;a++)t+=this.GetUsableFighters()[a].model.GetUpgradeCount(e);return t}GetCountOfEquipmentRel(e){let t=0;for(let a=0;a<this.Equipment.length;a++){if(0==this.Equipment[a].CountLimit)continue;const n=this.Equipment[a].CustomInterface;n&&n.id==e&&t++}for(let a=0;a<this.GetUsableFighters().length;a++)t+=this.GetUsableFighters()[a].model.GetEquipmentCount(e);return t}async GetCountOfKeyword(e,t){let a=0;for(let n=0;n<this.GetUsableFighters().length;n++){if(t.includes(this.GetUsableFighters()[n].model.CurModel.GetID()))continue;await this.GetUsableFighters()[n].model.IsKeywordPresent(e)&&a++}return a}async GetCountOfTag(e,t){let a=0;for(let n=0;n<this.GetUsableFighters().length;n++){await this.GetUsableFighters()[n].model.IsTagPresent(e)==t&&a++}return a}async GetEliteFighterOptions(){const e=await this.GetFighterOptions();return await this.CanAddMoreElite()?e.filter((e=>e.Model.getKeywordIDs().includes("kw_elite")&&!e.IsMercenary())):[]}async GetMercenaryFighterOptions(){return(await this.GetFighterOptions()).filter((e=>1==e.Mercenary))}async GetTroopFighterOptions(){return(await this.GetFighterOptions()).filter((e=>0==e.Mercenary&&!e.Model.getKeywordIDs().includes("kw_elite")))}async GetFighterOptions(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];const t=this.Faction.MyFaction,a=[];let n=[];void 0!=t&&(n=t.SelfDynamicProperty.OptionChoice.Models);const o=new c.J;n=null!=this.GeneralCache.fac_model_rel?this.GeneralCache.fac_model_rel:await o.runEvent("getAllFactionModelRelationships",this,[],n,null);for(let i=0;i<n.length;i++){const t=await this.IsModelRestricted(n[i]);let r=n[i].Maximum,s=!0,l=n[i].Cost,c=0,d=-1,u=0;this.ModelRelCache[n[i].ID]?(r=this.ModelRelCache[n[i].ID].limit,s=this.ModelRelCache[n[i].ID].canadd,l=this.ModelRelCache[n[i].ID].cost,c=this.ModelRelCache[n[i].ID].count_cur,u=this.ModelRelCache[n[i].ID].group_cur,d=this.ModelRelCache[n[i].ID].group_limit):(r=await o.runEvent("getModelLimitTrue",n[i],[n[i]],r,this),r=await o.runEvent("getModelLimitTrue",this,[n[i]],r,this),d=await o.runEvent("getGroupLimitTrue",n[i],[],d,this),l=await o.runEvent("getCostOfModel",n[i],[],l,this),c=this.GetCountOfRel(n[i].ID),u=await o.runEvent("getCountOfGroup",n[i],[],c,this),c<r||0==n[i].Minimum&&-1==n[i].Maximum||(s=!1),u<d||d<0||(s=!1),1==e&&1==s&&(0==n[i].CostType&&(s=this.GetStashedDucats()>=l),1==n[i].CostType&&(s=this.GetStashedGlory()>=l)),this.ModelRelCache[n[i].ID]={avoid_restriction:t,canadd:s,cost:l,count_cur:c,facrel:n[i],limit:r,group_cur:u,group_limit:d}),t||(this.IsUnRestricted||s)&&a.push(n[i])}return a}async IsModelRestricted(e){const t=new c.J;let a=!1,n=0;if(null!=this.ModelRelCache[e.ID]?(a=this.ModelRelCache[e.ID].avoid_restriction,n=this.ModelRelCache[e.ID].count_cur):a=await t.runEvent("avoidModelRestriction",this,[],!1,e),!a)for(let o=0;o<e.Restricted_Models.length;o++)for(let t=0;t<e.Restricted_Models[o].upgrade_ids.length;t++)if(this.GetCountOfRel(e.Restricted_Models[o].upgrade_ids[t])>e.Restricted_Models[o].max_count)return!0;return!1}GetEntireWarbandEquipment(){let e=[];e=[...e,...this.GetAllEquipment()];for(let t=0;t<this.Models.length;t++){const a=this.Models[t].HeldObject;e=[...e,...a.GetEquipment()]}return e}GetEntireWarbandUpgrade(){let e=[];for(let t=0;t<this.Models.length;t++){const a=this.Models[t].HeldObject;e=[...e,...a.GetUpgrades()]}return e}GetAllEquipment(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const t=[];for(let a=0;a<this.Equipment.length;a++)t.push({purchase:this.Equipment[a],equipment:this.Equipment[a].HeldObject});for(let a=0;a<this.Models.length;a++){if(e&&!this.Models[a].GetOwnItem().IsIncludedAsAlive())continue;const n=this.Models[a].GetOwnItem().GetEquipment();for(let e=0;e<n.length;e++)t.push(n[e])}return t}async GetFactionEquipmentOptions(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],a=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];const i=this.Faction.MyFaction,r=[],s=[];let l=[],d=[];void 0!=i&&(d=i.SelfDynamicProperty.OptionChoice.EquipmentItems);let u=e;0==u&&(u=this.IsWarbandExplorationOnly()),1==o&&(o=!this.IsWarbandExplorationOnly());for(let c=0;c<d.length;c++)(!(0,n.Kg)(d[c].Tags,"exploration_only")||u||this.IsUnRestricted)&&l.push(d[c]);const h=new c.J;l=null!=this.GeneralCache.faction_equip_rel?this.GeneralCache.faction_equip_rel:await h.runEvent("getAllFactionEquipmentRelationships",this,[],l,null);let m=[];m=null!=this.GeneralCache.fac_equip_rest?this.GeneralCache.fac_equip_rest:await h.runEvent("getEquipmentRestriction",this,[],[],null);for(let c=0;c<l.length;c++){const e=[];let i=l[c].Limit,d=-1,p=0,f=l[c].Cost,g=!0,y="";const _=this.GetCountOfEquipmentRel(l[c].ID);if(null==this.EquipmentRelCache[l[c].ID]){const t=await h.runEvent("getEquipmentRestriction",l[c],[],[],null),a=await h.runEvent("getEquipmentRestriction",l[c].EquipmentItem,[],[],null);for(let o=0;o<t.length;o++)e.push(t[o]);for(let o=0;o<a.length;o++)e.push(a[o]);for(let o=0;o<m.length;o++)e.push(m[o]);const n=await h.runEvent("getEquipmentRestrictionPresentable",l[c],[],[],e);i=await h.runEvent("getEquipmentLimitTrue",l[c],[l[c]],i,this),i=await h.runEvent("getEquipmentLimitTrue",this,[l[c]],i,this),d=await h.runEvent("getEquipmentGroupLimitTrue",l[c],[],d,this),p=await h.runEvent("getCountOfEquipmentGroup",l[c],[],_,this),f=await h.runEvent("getCostOfEquipment",l[c],[l[c]],f,this),f=await h.runEvent("getCostOfEquipment",this,[l[c]],f,this),y=await h.runEvent("canWarbandAddItem",this,[e,l[c]],"",this),g=y.length<=0,p<d||d<0||(g=!1,y="This battlekit is part of a group of items with a purchase limit of "+d.toString()),this.EquipmentRelCache[l[c].ID]={limit:i,cost:f,facrel:l[c],restrictions:n,count_cur:_,canadd:g,failure:y}}else i=this.EquipmentRelCache[l[c].ID].limit,f=this.EquipmentRelCache[l[c].ID].cost,g=this.EquipmentRelCache[l[c].ID].canadd;if(1!=a&&1!=this.IsUnRestricted){if(g)if(this.EquipmentRelCache[l[c].ID].count_cur<i||0==i&&0==l[c].Limit){if(!(0,n.Kg)(l[c].Tags,"exploration_only")||u)if(1==t){let e=!0;if(0==l[c].CostType&&(e=this.GetStashedDucats()>=f,0==e&&(this.EquipmentRelCache[l[c].ID].failure="This costs more ducats than you have available.")),1==l[c].CostType&&(e=this.GetStashedGlory()>=f,0==e&&(this.EquipmentRelCache[l[c].ID].failure="This costs more glory than you have available."),(0,n.Kg)(l[c].Tags,"exploration_only")&&o&&1==e)){const t=await this.GetExplorationLimit();e=f<=t,0==e&&(this.EquipmentRelCache[l[c].ID].failure="Exploration Item: you have not unlocked the necessary exploration location to purchase this item. The most glory you can spend on exploration items is "+t+".")}e&&(s.push(l[c].ID),r.push(l[c]))}else s.push(l[c].ID),r.push(l[c])}else this.EquipmentRelCache[l[c].ID].failure="The limit of this battlekit is "+i}else s.push(l[c].ID),r.push(l[c])}return r}async GetExplorationLimit(){if(null!=this.GeneralCache.exploration_limit)return this.GeneralCache.exploration_limit;const e=new c.J,t=await e.runEvent("getExplorationLimit",this,[],0,this);return this.GeneralCache.exploration_limit=t,t}async GetModifiersList(){const e=[];for(let a=0;a<this.Models.length;a++){const t=await this.Models[a].HeldObject.GetWarbandSkills();for(let a=0;a<t.length;a++)e.push(t[a])}const t=await this.Exploration.GetWarbandModifiers();for(let a=0;a<t.length;a++)e.push(t[a]);for(let a=0;a<this.Modifiers.length;a++)e.push(this.Modifiers[a]);return e}async WhenModelDead(e){const t=new c.J;await t.runEvent("onModelDead",this,[this],null,e)}async GetFireteams(){const e=[];null==this.GeneralCache.fireteam_list&&await this.BuildModifiersFireteam(this.ConvertToInterface().fireteams);for(let t=0;t<this.Fireteams.length;t++)e.push(this.Fireteams[t]);return e}GetWarbandFactionModifiersList(){let e=[];return e=[...e,...this.Faction.GetModifierProperties().filter((e=>0==e.SelfDynamicProperty.Selections.length))],e}GetWarbandFactionOptionsModifiersList(){let e=[];return e=[...e,...this.Faction.GetModifierProperties().filter((e=>e.SelfDynamicProperty.Selections.length>0))],e}ReorganiseFighters(e,t){if(!e||!t)return;const a=this.Models.findIndex((t=>t.HeldObject.ID===e.id)),n=this.Models.findIndex((e=>e.HeldObject.ID===t.id));if(-1===a||-1===n||a===n)return;const[o]=this.Models.splice(a,1);this.Models.splice(n,0,o)}BuildExport(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],a=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],i=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],r=!(arguments.length>6&&void 0!==arguments[6])||arguments[6],s=!(arguments.length>7&&void 0!==arguments[7])||arguments[7],l=arguments.length>8&&void 0!==arguments[8]&&arguments[8],c=arguments.length>9&&void 0!==arguments[9]&&arguments[9],d=null;if(null!=this.GeneralCache.exportval&&null!=d&&d==e)return this.GeneralCache.exportval;d=e;const u=[],h=this.GetFighters(),m={elite:[],troops:[],mercenaries:[],reserves:[],lost:[],dead:[]};for(const g of h)"active"===g.model.State?g.model.IsElite()?m.elite.push(g):g.model.IsMercenary()?m.mercenaries.push(g):g.model.IsTroop()&&m.troops.push(g):"reserved"===g.model.State?m.reserves.push(g):"lost"===g.model.State?m.lost.push(g):"dead"===g.model.State&&m.dead.push(g);u.push("## "+this.GetTrueName()+" ##"),u.push(" "),u.push("Faction: "+this.GetFactionName()),u.push("Rating: "+this.GetRatingDucats().toString()+" Ducats | "+this.GetRatingGlory().toString()+" Glory"),u.push("Patron: "+this.GetPatronName());const p=(e,t,d)=>{if(0===t.length)return;l&&n||u.push("");let h="";h+=n?"## "+e+" ##":e,u.push(h);for(const n of t){u.push("");let e="";const t=n.model.GetFighterName(),d=n.model.GetModelName();void 0!=t&&t!=d&&s?(e+=l?"**"+d+"**":d,e+=" - "+t):(e=void 0!=d?""+d:n.model.GetTrueName(),l&&(e="**"+e+"**"));let h="";if(a&&i&&c&&(h+="\u2022 "),i&&c&&(h+="Cost: "),(n.purchase.GetTotalDucats()>0||o)&&(h+=n.purchase.GetTotalDucats().toString(),h+=r?" Ducats":"D"),(n.purchase.GetTotalDucats()>0&&n.purchase.GetTotalGlory()>0||o)&&(h+=" | "),(n.purchase.GetTotalGlory()>0||o)&&(h+=n.purchase.GetTotalGlory().toString(),h+=r?" Glory":"G"),i&&c?(u.push(e),u.push(h)):u.push(e+" - "+h),n.model.Upgrades.length>0){const e=[];for(let a=0;a<n.model.Upgrades.length;a++)e.push(n.model.Upgrades[a].GetItemName());let t="";a&&(t+="\u2022 "),i&&(t+="Upgrades & Choices: "),t+=e.join(", "),u.push(t)}if(n.model.Equipment.length>0){let e="";a&&(e+="\u2022 "),i&&(e+="Battlekit: "),e+=n.model.GetEquipmentAsString(),u.push(e)}if(n.model.Skills.length>0){const e=[];for(let a=0;a<n.model.Skills.length;a++)e.push(n.model.Skills[a].SelfDynamicProperty.OptionChoice.GetTrueName());let t="";a&&(t+="\u2022 "),i&&(t+="Skills: "),t+=e.join(", "),u.push(t)}if(n.model.Injuries.length>0){const e=[];for(let a=0;a<n.model.Injuries.length;a++)e.push(n.model.Injuries[a].SelfDynamicProperty.OptionChoice.GetTrueName());let t="";a&&(t+="\u2022 "),i&&(t+="Injuries: "),t+=e.join(", "),u.push(t)}}};if(p("Elites",m.elite),p("Troops",m.troops),p("Mercenaries",m.mercenaries),e&&(p("Reserves",m.reserves),p("Lost & Captured",m.lost),p("Dead",m.dead)),e&&(l&&n||u.push(""),n?u.push("## Stash ##"):u.push("Stash"),u.push(""),u.push("Stashed Ducats: "+(this.GetStashedDucats()>1e11?"Unlimited":this.GetStashedDucats())),u.push("Unspent Glory: "+(this.GetStashedGlory()>1e11?"Unlimited":this.GetStashedGlory())),this.Equipment.length>0)){u.push("  ");const e=[];for(let t=0;t<this.Equipment.length;t++){const a=this.Equipment[t].HeldObject;e.push(a.GetTrueName())}u.push(e.join(", "))}if(this.Modifiers.length>0){l&&n||u.push(""),n?u.push("## Modifiers ##"):u.push("Modifiers"),u.push("");for(let e=0;e<this.Modifiers.length;e++){u.push(this.Modifiers[e].SelfDynamicProperty.OptionChoice.GetTrueName());for(let t=0;t<this.Modifiers[e].SelfDynamicProperty.Selections.length;t++){const n=this.Modifiers[e].SelfDynamicProperty.Selections[t].SelectedChoice;null!=n&&(a?u.push("\u2022 "+n.display_str):u.push(""+n.display_str))}}}if(this.Fireteams.length>0&&e){l&&n||u.push(""),n?u.push("## Fireteams ##"):u.push("Fireteams"),u.push("");for(let e=0;e<this.Fireteams.length;e++){u.push(this.Fireteams[e].SelfDynamicProperty.OptionChoice.GetTrueName());for(let t=0;t<this.Fireteams[e].SelfDynamicProperty.Selections.length;t++){const n=this.Fireteams[e].SelfDynamicProperty.Selections[t].SelectedChoice;null!=n&&(a?u.push("\u2022 "+n.display_str):u.push("-"+n.display_str))}}}const f=this.GetLocations();if(f.length>0){l&&n||u.push(""),n?u.push("## Locations ##"):u.push("Locations"),u.push("");for(let e=0;e<f.length;e++){u.push(f[e].SelfDynamicProperty.OptionChoice.GetTrueName());for(let t=0;t<f[e].SelfDynamicProperty.Selections.length;t++){const n=f[e].SelfDynamicProperty.Selections[t].SelectedChoice;null!=n&&(a?u.push("\u2022 "+n.display_str):u.push("-"+n.display_str))}}}return t&&Number.isInteger(Number(this.GetPostId()))&&Number(this.GetPostId())>0&&(u.push("  "),u.push("---"),u.push(" "),u.push("View online:"),u.push("https://trench-companion.com/warband/detail/"+this.GetPostId())),this.GeneralCache.exportval=u,u}async BuildExportJSON(){this.ConvertToInterface();const e=u.o.getInstance().UserWarbandManager.GetItemByBaseID(this.ID);if(null==e){const e=await l.Y.GetWarbandPublicByID(this.PostID);if(null==e)return["Something Went Wrong"];const t=await(0,y.W)(e);return[JSON.stringify(t,null,2)]}const t=await(0,y.W)(e);return[JSON.stringify(t,null,2)]}async BuildCampaignExportData(){const e=this.ConvertToInterface(),t=this.GetUsableFighters(),a=[],n=[],o=[];for(let i=0;i<t.length;i++){const e=t[i],r=e.model,s=await r.BuildCampaignExportData(e.purchase);r.IsElite()?a.push(s):r.IsMercenary()?o.push(s):n.push(s)}return{wid:this.PostID,wna:e.name,dr:e.context.stored_ratings.rating_ducat,gr:e.context.stored_ratings.rating_glory,elt:a,mds:n,mrc:o}}async BuildCampaignExportJSON(){const e=this.BuildCampaignExportData();return JSON.stringify(e,null)}getVersionTag(){return this.Tags.tc_version?this.Tags.tc_version:"ver_default"}}},5561:function(e,t,a){"use strict";a.d(t,{WarbandConsumable:function(){return s}});var n=a(6184),o=a(9100),i=a(7880),r=a(6264);class s extends o.A{constructor(e,t,a){super(e,t),this.SelectItem=null,this.SelectData=null,this.AssociateID=void 0,this.SelectType=null,this.Options=[],this.FullOptions=[],this.MyOrigin=null,this.AssociateID=e.associate_id,this.SelectType=e.object_type,this.MyOrigin=a}async OnSelect(e){this.SelectItem=e.value,(0,n.tZ)(e.value)&&(this.SelectData=e.value);const t=new r.J;await t.runEvent("runConsumableSelect",this,[this.MyContext,this.MyOrigin],null,this)}async OnEmpty(){const e=new r.J;await e.runEvent("runConsumableEmpty",this,[this.MyContext,this.MyOrigin],null,this),this.SelectItem=null,this.SelectData=null}async GrabOptions(){const e=new r.J;this.Options=await e.runEvent("getConsumableOptionsList",this,[this.MyContext,this.MyOrigin],[],this),this.FullOptions=await e.runEvent("getConsumableFullOptionsList",this,[this.MyContext,this.MyOrigin],[],this)}async GrabItem(e){return e.object_id&&e.object_type?"faction_equipment"===e.object_type?(this.SelectItem=await i.EquipmentFactory.CreateNewFactionEquipment(e.object_id,null),void(this.SelectType="faction_equipment")):void 0:e.object_data&&e.object_type&&"number"===e.object_type?(this.SelectData=e.object_data,void(this.SelectType="number")):void 0}ConvertToInterface(){const e={id:this.ID,name:this.GetTrueName(),source:this.Source?this.Source:"",tags:this.Tags,contextdata:this.ContextKeys,associate_id:this.AssociateID,object_id:this.SelectItem?this.SelectItem.ID:null,object_type:this.SelectType?this.SelectType:null,object_data:this.SelectData?this.SelectData:null};return this.SelfData=e,e}async GrabSubPackages(e,t,a){const n=[];if(this.ContextData)for(const o of Object.keys(this.ContextKeys)){const a=this.ContextData[o];if(void 0==a)continue;const i=a[e];if(void 0!==i){const e={priority:a.event_priotity,source:t,self:this,callback:i,callbackdict:this.ContextKeys[o],dyncontext:this.MyContext,callpath:["DynamicContextObject"]};n.push(e)}}return n}GetOwnDescription(){return Object.prototype.hasOwnProperty.call(this.SelectItem,"Description")?this.SelectItem.Description:null}GetOwnName(){return null!=this.SelectItem?this.SelectItem.GetTrueName():""}}},3135:function(e,t,a){"use strict";a.d(t,{h:function(){return l}});var n=a(722),o=a(9914),i=a(108),r=a(6264),s=a(8252);class l{constructor(){this.WarbandItemList=[],this.LocalIDCount=void 0,this.UserProfile=null,this.ListOfWarbands=[];const e=localStorage.getItem("localwarbandcount");if(null!=e)try{this.LocalIDCount=Number(e)}catch(t){this.LocalIDCount=-999}else this.LocalIDCount=0,localStorage.setItem("localwarbandcount","-999")}GetIDLocal(){let e=!0;for(;e;){e=!1,void 0==this.LocalIDCount&&(this.LocalIDCount=-999);for(let t=0;t<this.WarbandItemList.length;t++)this.WarbandItemList[t].id==this.LocalIDCount&&(this.LocalIDCount+=1,localStorage.setItem("localwarbandcount",String(this.LocalIDCount)),e=!0)}return this.LocalIDCount}CurWarbands(){return null!=this.UserProfile?this.UserProfile.Warbands:this.WarbandItemList}async SetLoggedUser(e){const t=await o.e.CreatePrivateUserByID(e);this.UserProfile=t}RemoveLoggedUser(){this.UserProfile=null}async GrabUser(){const e=localStorage.getItem("jwtToken"),t=localStorage.getItem("synodUserId");e&&t&&null==this.UserProfile&&await this.SetLoggedUser(parseInt(t,10))}async GetItemsAll(){await this.GrabUser(),this.WarbandItemList=await this.GrabItems()}async GetItemsAllData(){return await this.GrabUser(),await this.GrabItemData()}GetItemByName(e){let t=0;for(t=0;t<this.CurWarbands().length;t++)try{const a=this.CurWarbands()[t].warband_data.Name;if((void 0!=a?a:"").trim()==e)return this.CurWarbands()[t]}catch(a){console.log("Broken Save Item Found")}return null}GetItemByBaseID(e){let t=0;for(t=0;t<this.CurWarbands().length;t++)try{const a=this.CurWarbands()[t].warband_data.ID;if((void 0!=a?a:"").trim()==e)return this.CurWarbands()[t]}catch(a){console.log("Broken Save Item Found")}return null}GetItemByID(e){let t=0;for(t=0;t<this.CurWarbands().length;t++)if(this.CurWarbands()[t].id==Number(e))return this.CurWarbands()[t];return null}static HasLocalWarbands(){const e=localStorage.getItem("userwarbanditem");try{return JSON.parse(e||"").length>0}catch(t){return!1}}async GrabLocalItems(){const e=[],t=localStorage.getItem("userwarbanditem");try{const a=JSON.parse(t||"");for(let t=0;t<a.length;t++)e.push({id:a[t].id,warband_data:await n.Y.CreateUserWarband(a[t].warband_data,a[t].id)});return e}catch(a){}return e}async GrabItems(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(null!=this.UserProfile&&!e)return this.ListOfWarbands=this.UserProfile.Warbands,this.UserProfile.Warbands;const t=[],a=localStorage.getItem("userwarbanditem");try{const e=JSON.parse(a||"");for(let a=0;a<e.length;a++)t.push({id:e[a].id,warband_data:await n.Y.CreateUserWarband(e[a].warband_data,e[a].id)});return this.ListOfWarbands=t,t}catch(o){}return this.ListOfWarbands=t,t}async GrabItemData(){if(null!=this.UserProfile){const e=[];for(let t=0;t<this.UserProfile.Warbands.length;t++)e.push({id:this.UserProfile.Warbands[t].id,warband_data:this.UserProfile.Warbands[t].warband_data.SelfData});return e}const e=localStorage.getItem("userwarbanditem");try{return JSON.parse(e||"")}catch(t){}return[]}SetStorage(){null==this.UserProfile&&this.UpdateLocalStorage()}UpdateLocalStorage(){const e=[];for(let a=0;a<this.CurWarbands().length;a++)try{const t=this.CurWarbands()[a].warband_data.ConvertToInterface();e.push({id:this.CurWarbands()[a].id,warband_data:t})}catch(t){console.warn("Conversion failed for index",a,t)}try{const t=JSON.stringify(e);localStorage.setItem("userwarbanditem",t)}catch(t){console.error("\u274c Failed to stringify warbands:",t)}}async UpdateItemInfo(e){if(null==this.UserProfile)this.SetStorage();else{const t=this.GetItemByID(String(e));null!=t&&this.UpdateWarbandSynod(e,t)}}GetPack(){return this.CurWarbands()}async DeletePack(e){if(null!=this.UserProfile){if(200==await this.DeleteWarbandSynod(e))for(let t=0;t<this.CurWarbands().length;t++)if(e==this.CurWarbands()[t].id){this.CurWarbands().splice(t,1);break}}else for(let t=0;t<this.CurWarbands().length;t++)if(e==this.CurWarbands()[t].id){this.CurWarbands().splice(t,1),this.SetStorage();break}}async NewItem(e,t,a,o,i,l){if(e.trim().length<=0)return null;const c=[];1==i&&c.push("unrestricted");const d={id:this.CalcID(e.trim()),contextdata:{},name:e,source:"user_warband",tags:{tc_version:"ver_default"},ducat_bank:isNaN(a)?123e34:a,glory_bank:isNaN(o)?123e34:o,notes:[],context:{id:this.CalcID(e.trim()+"_context"),victory_points:0,campaign_round:1,failed_promotions:0,stored_ratings:{rating_ducat:0,rating_glory:0,spare_ducat:isNaN(a)?0:a,spare_glory:isNaN(o)?0:o,stash_rating_ducat:0,stash_rating_glory:0}},exploration:{explorationskills:[{consumables:[],object_id:"es_reroll",selections:[]}],locations:[],contextdata:{},id:this.CalcID(e.trim()+"_exploration"),name:e+"_exploration",source:"user_warband",tags:{}},faction:{faction_property:{consumables:[],object_id:t,selections:[]},faction_rules:[],contextdata:null,id:this.CalcID(e.trim()+"_faction"),name:e+"_faction",source:"user_warband",tags:{}},models:[],equipment:[],debts:{ducats:0,glory:0},modifiers:[],modifiersloc:[],fireteams:[],consumables:[],restrictions_list:c};if(d.tags[s.jQ]=s.rH,null!=this.UserProfile){const e=await this.CreateWarbandSynod(d),t=await n.Y.CreateUserWarband(d,e),a=new r.J;await a.runEvent("onWarbandBuild",t,[],null,t);const o={id:Number(e),warband_data:t};return this.CurWarbands().push(o),o}{const e=this.GetIDLocal(),t=await n.Y.CreateUserWarband(d,e),a=new r.J;await a.runEvent("onWarbandBuild",t,[],null,t);const o={id:e,warband_data:t};return this.WarbandItemList.push(o),this.SetStorage(),o}}async CreateWarbandSynod(e){const t=localStorage.getItem("jwtToken"),a=await fetch(`${i.a.URL}/wp-json/synod/v1/warband/create`,{method:"POST",headers:{Authorization:`Bearer ${t}`,"Content-Type":"application/json"},body:JSON.stringify({title:e.name,status:"publish",meta:{warband_data:JSON.stringify(e)}})});return(await a.json()).id}async UpdateWarbandSynod(e,t){const a=localStorage.getItem("jwtToken");await fetch(`${i.a.URL}/wp-json/synod/v1/warband/update/`+String(e),{method:"POST",headers:{Authorization:`Bearer ${a}`,"Content-Type":"application/json"},body:JSON.stringify({title:t.warband_data.Name,meta:{warband_data:JSON.stringify(t.warband_data.ConvertToInterface())}})})}async DeleteWarbandSynod(e){const t=localStorage.getItem("jwtToken"),a=await fetch(`${i.a.URL}/wp-json/synod/v1/warband/`+String(e),{method:"DELETE",headers:{Authorization:`Bearer ${t}`,"Content-Type":"application/json"}});await a.json();return a.status?a.status:0}async DuplicateItem(e){if(null!=this.UserProfile){const t=e.ConvertToInterface();t.name=e.Name+" - Copy",t.id=this.CalcID(t.name);const a=await this.CreateWarbandSynod(t),o=await n.Y.CreateUserWarband(t,a);this.CurWarbands().push({id:Number(a),warband_data:o})}else{const t=this.GetIDLocal(),a=e.ConvertToInterface();a.name=e.Name+" - Copy",a.id=this.CalcID(a.name);const o=await n.Y.CreateUserWarband(a,t);this.CurWarbands().push({id:t,warband_data:o}),this.SetStorage()}}async UploadWarbands(){if(await this.GrabUser(),null!=this.UserProfile){const e=await this.GrabLocalItems();for(let t=0;t<e.length;t++){const a=e[t].warband_data.ConvertToInterface();a.id=this.CalcID(a.name);const o=await this.CreateWarbandSynod(a),i=await n.Y.CreateUserWarband(a,o);this.CurWarbands().push({id:Number(o),warband_data:i})}}const e=JSON.stringify([]);localStorage.setItem("userwarbanditem",e)}CalcID(e){const t=Date.now();return l.sanitizeString(e+t.toString())}static sanitizeString(e){return e.replace(/[^a-zA-Z0-9-_]/g,"")}async UpdateWarbandPatron(e,t){e.warband_data.UpdateSelfPatron(t),this.UpdateItemInfo(e.id)}async UpdateWarbandVersion(e){e.warband_data.Tags.tc_version="ver_default",null==this.UserProfile?this.SetStorage():await this.UpdateWarbandSynod(e.id,e)}async UpdateAllWarbands(){0==this.WarbandItemList.length&&await this.GetItemsAll();for(let e=0;e<this.WarbandItemList.length;e++)await this.UpdateWarbandVersion(this.WarbandItemList[e]);await this.GetItemsAll()}async GetWarbandExportData(e){await this.GetItemsAll();let t=this.GetItemByID(String(e));if(t||(t=await n.Y.GetWarbandPublicByID(e)),!t)throw new Error(`Warband with PostID ${e} not found.`);return await t.warband_data.BuildCampaignExportData()}async GetWarbandExportJSON(e){await this.GetItemsAll();let t=this.GetItemByID(String(e));if(t||(t=await n.Y.GetWarbandPublicByID(e)),!t)throw new Error(`Warband with PostID ${e} not found.`);return await t.warband_data.BuildCampaignExportJSON()}async GetWarbandExport(e){await this.GetItemsAll();let t=this.GetItemByID(String(e));if(t||(t=await n.Y.GetWarbandPublicByID(e)),!t)throw new Error(`Warband mit PostID ${e} wurde nicht gefunden.`);return(await t.warband_data.BuildExport(!1,!1)).join("\n")}}},2919:function(e,t,a){"use strict";a.r(t),a.d(t,{WarbandProperty:function(){return l}});var n=a(6184),o=a(8204),i=a(9100),r=a(5561),s=a(6422);class l extends i.A{DumpCache(){this.EventCache={},this.SelfDynamicProperty.EventCache={};for(let e=0;e<this.SubProperties.length;e++)this.SubProperties[e].DumpCache()}GetPresentationName(){var e;if(this.SelfDynamicProperty.OptionChoice instanceof s.C&&null!=this.SelfDynamicProperty.OptionChoice.MyContext)return"("+(null===(e=this.SelfDynamicProperty.OptionChoice.MyContext)||void 0===e?void 0:e.GetTrueName())+") "+this.GetOwnName();return void 0!=this.Name?this.Name:"name_unidentified"}constructor(e,t,a,n){super(e.SelfData,t),this.SelfDynamicProperty=void 0,this.SubProperties=[],this.Consumables=[],this.StoredSelectionVals=null,this.PropertyTags={},this.ContextKeys={},this.StoredSelectionVals=n,n&&n.tags&&(this.PropertyTags=n.tags)}async SendConsumablesUp(){for(let e=0;e<this.Consumables.length;e++)if(null!=this.Consumables[e].SelectItem){const t=await(0,n.Wu)(this.Consumables[e]);null!=t&&t.Consumables.push(this.Consumables[e])}}HaveEmptyOptions(){for(let e=0;e<this.SelfDynamicProperty.Selections.length;e++)if(null==this.SelfDynamicProperty.Selections[e].SelectedChoice)return!0;return!1}async BuildConsumables(e){if(null!=this.MyContext&&void 0!=e)for(let t=0;t<e.length;t++){const a=e[t],n=new r.WarbandConsumable(a,this.MyContext,this);await n.GrabItem(a),await n.GrabOptions(),this.Consumables.push(n)}}async HandleDynamicProps(e,t,a,n){if(null!==n&&void 0!==n&&n.tags&&(this.Tags=Object.assign({},this.Tags,null===n||void 0===n?void 0:n.tags)),null!=a?this.SelfDynamicProperty=a:(this.SelfDynamicProperty=new o.DynamicOptionContextObject(e.SelfData,e,this),await this.SelfDynamicProperty.BuildSelections()),null!=n)for(let o=0;o<this.SelfDynamicProperty.Selections.length;o++){const e=this.SelfDynamicProperty.Selections[o];await e.GetSelectionChoices();for(let t=0;t<n.selections.length;t++)if(n.selections[t].option_refID==e.Option.RefID){1==e.Option.AutoSelect&&e.SelectionSet.length>0?e.SelectOption(e.SelectionSet[0].id):e.SelectOption(n.selections[t].selection_ID);const a=n.selections[t].suboption;void 0!=a&&await this.GenerateSubProperties(a,e);break}}else for(let o=0;o<this.SelfDynamicProperty.Selections.length;o++){const e=this.SelfDynamicProperty.Selections[o];await e.GetSelectionChoices(),1==e.Option.AutoSelect&&e.SelectionSet.length>0&&e.SelectOption(e.SelectionSet[0].id)}}async GenerateSubProperties(e,t){null!==e&&void 0!==e&&e.tags&&(this.Tags=Object.assign({},this.Tags,null===e||void 0===e?void 0:e.tags));const a=t.NestedOption;if(null!=a){let t=!1;for(let n=0;n<this.SubProperties.length;n++)if(this.SubProperties[n].ID==a.OptionChoice.ID){t=!0;const o=this.SubProperties[n];await o.HandleDynamicProps(a.OptionChoice,this,a,e),await o.BuildConsumables(e.consumables);break}if(0==t){const t=new l(a.OptionChoice,this,a,e);await t.HandleDynamicProps(a.OptionChoice,this,a,e),await t.BuildConsumables(e.consumables),this.SubProperties.push(t)}}}async RegenerateSubProperties(){this.ConvertToInterface();const e=[];for(let t=0;t<this.SelfDynamicProperty.Selections.length;t++){const a=this.SelfDynamicProperty.Selections[t];let n=!1;if(null!=a.NestedOption){for(let t=0;t<this.SubProperties.length;t++)if(this.SubProperties[t].SelfDynamicProperty==a.NestedOption){n=!0,e.push(this.SubProperties[t]);break}if(0==n){const t=[],n=new l(a.NestedOption.OptionChoice,this,a.NestedOption,{object_id:a.Option.RefID,selections:t,consumables:[]});await n.HandleDynamicProps(a.NestedOption.OptionChoice,this,a.NestedOption,{object_id:a.Option.RefID,selections:t,consumables:[]}),e.push(n)}}}this.SubProperties=e}async SelectSelfOption(e,t){void 0!=this.SelfDynamicProperty.Selections[e]&&(this.SelfDynamicProperty.Selections[e].SelectOption(t),await this.RegenerateSubProperties(),await this.RegenerateOptions())}ConvertToInterface(){const e=[];for(let n=0;n<this.SelfDynamicProperty.Selections.length;n++){const t=this.SelfDynamicProperty.Selections[n],a=t.SelectedChoice;let o=null;o=void 0!=a&&null!=a?a.id:t.SelectedID;let i=null;if(null!=t.NestedOption)for(let e=0;e<this.SubProperties.length;e++)if(this.SubProperties[e].SelfDynamicProperty==t.NestedOption){i=this.SubProperties[e].ConvertToInterface();break}null==i?e.push({option_refID:this.SelfDynamicProperty.Selections[n].Option.RefID,selection_ID:o}):e.push({option_refID:this.SelfDynamicProperty.Selections[n].Option.RefID,selection_ID:o,suboption:i})}const t=[];for(let n=0;n<this.Consumables.length;n++)t.push(this.Consumables[n].ConvertToInterface());const a={object_id:this.SelfDynamicProperty.OptionChoice.ID,selections:e,consumables:t,tags:this.Tags};return this.SelfData=a,this.StoredSelectionVals=a,a}async RegenerateOptions(){await this.SelfDynamicProperty.ReloadOption();for(let e=0;e<this.Consumables.length;e++)await this.Consumables[e].GrabOptions();await this.ReSelectPicks()}async ReSelectPicks(){this.ConvertToInterface();const e=this.StoredSelectionVals;if(null!=e)for(let t=0;t<this.SelfDynamicProperty.Selections.length;t++){const a=this.SelfDynamicProperty.Selections[t];await a.GetSelectionChoices();for(let t=0;t<e.selections.length;t++)if(e.selections[t].option_refID==a.Option.RefID){1==a.Option.AutoSelect&&a.SelectionSet.length>0?a.SelectOption(a.SelectionSet[0].id):a.SelectOption(e.selections[t].selection_ID);const n=e.selections[t].suboption;void 0!=n&&await this.GenerateSubProperties(n,a);break}}}async GrabSubPackages(e,t,a){const n=await this.SelfDynamicProperty.GrabContextPackages(e,t,a);for(let o=0;o<n.length;o++)n[o].callpath.push("WarbandProperty");for(let o=0;o<this.Consumables.length;o++){const i=await this.Consumables[o].GrabContextPackages(e,t,a);for(let e=0;e<i.length;e++)i[e].callpath.push("WarbandProperty"),n.push(i[e])}return n}GetOwnDescription(){return Object.prototype.hasOwnProperty.call(this.SelfDynamicProperty.OptionChoice,"Description")?this.SelfDynamicProperty.OptionChoice.Description:null}GetOwnName(){return this.SelfDynamicProperty.OptionChoice.GetTrueName()}GetOwnID(){return this.SelfDynamicProperty.OptionChoice.GetID()}}},3016:function(e,t,a){"use strict";a.d(t,{X:function(){return i}});var n=a(108),o=a(722);class i{constructor(e){var t;this.ID=void 0,this.Nickname=void 0,this.Email=void 0,this.Achievements=[],this.Friends=[],this.Requests=[],this.Warbands=[],this.ProfilePic=void 0,this.Campaigns=[],this.CampaignInvites=[],this.Premium=void 0,this.Settings=void 0,this.SelfData=void 0,this.Ratings=void 0,this.ID=e.id,this.Nickname=e.nickname,this.Email=null!==(t=e.email)&&void 0!==t?t:"",this.ProfilePic=e.profile_picture,this.Friends=e.friends,this.Requests=e.friend_requests,this.Achievements=e.achievements,this.Premium={IsPremium:e.is_premium,PlanId:e.plan_id,SubId:e.sub_id,PremiumUntil:e.premium_until},this.Settings=e.user_setting,this.SelfData=e,this.Campaigns=Array.isArray(e.campaigns)?e.campaigns.map((e=>Number(e))).filter((e=>Number.isFinite(e))):[],this.CampaignInvites=Array.isArray(e.campaign_invites)?e.campaign_invites.map((e=>Number(e))).filter((e=>Number.isFinite(e))):[],this.Ratings=e.ratings}GetAllWarbandInvites(){let e=[];for(let t=0;t<this.Warbands.length;t++)e=e.concat(this.Warbands[t].warband_data.GetCampaignInvites());return e}async GenerateWarbands(e){for(let n=0;n<e.warbands.length;n++){const i=e.warbands[n];if(this.Warbands.some((e=>e.id===i.id)))continue;const r=i.warband_data;try{if(!r||"string"!==typeof r){console.warn("[GenerateWarbands] Skipping warband \u2013 warband_data is not a string",i.id,r);continue}let e;try{e=JSON.parse(r),e.warband_invites=i.warband_campaign_invites,e.warband_campaigns=i.warband_campaigns,e.warband_user=this.GetUserId()}catch(t){console.warn("[GenerateWarbands] Skipping warband \u2013 invalid JSON",i.id,t,r);continue}const a=await o.Y.CreateUserWarband(e,i.id);this.Warbands.push({id:i.id,warband_data:a})}catch(a){console.error("[GenerateWarbands] Failed to build warband",i.id,a,r)}}}GetWarbandIDList(){const e=[];for(let t=0;t<this.Warbands.length;t++)e.push(this.Warbands[t].id);return e}GetCampaignIDList(){return[...this.Campaigns]}GetCampaignInviteIDList(){return[...this.CampaignInvites]}ConvertToInterface(){const e=[];for(let o=0;o<this.Warbands.length;o++)e.push({id:this.Warbands[o].id,warband_data:JSON.stringify(this.Warbands[o].warband_data.ConvertToInterface()),warband_campaign_invites:this.Warbands[o].warband_data.GetCampaignInvites(),warband_campaigns:this.Warbands[o].warband_data.GetCampaigns(),warband_user_id:this.GetUserId()});const t=[...this.Campaigns],a=[...this.CampaignInvites],n={id:this.ID,nickname:this.Nickname,email:this.Email,achievements:this.Achievements,friends:this.Friends,friend_requests:this.Requests,warbands:e,profile_picture:this.ProfilePic,campaigns:t,campaign_invites:a,is_premium:this.Premium.IsPremium,plan_id:this.Premium.PlanId,sub_id:this.Premium.SubId,premium_until:this.Premium.PremiumUntil,user_setting:this.Settings,ratings:this.Ratings};return this.SelfData=n,n}GetNickname(){return this.Nickname}GetEmail(){return this.Email}GetUserId(){return this.ID}GetProfilePictureId(){return this.ProfilePic.id}GetProfilePictureImageId(){return void 0==this.ProfilePic?0:this.ProfilePic.image_id}async getProfilePictureOptions(){const e=localStorage.getItem("jwtToken"),t=await fetch(`${n.a.URL}/wp-json/synod/v1/user-pfp-options/${this.GetUserId()}`,{headers:{Authorization:`Bearer ${e}`}});if(!t.ok)throw new Error("Failed to fetch profile picture options");return await t.json()}async updateProfilePicture(e){const t=localStorage.getItem("jwtToken");if(!t)throw new Error("User is not authenticated");const a=await fetch(`${n.a.URL}/wp-json/wp/v2/users/me`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify({profile_picture_id:e})});if(!a.ok){const e=await a.text();throw new Error(`Failed to update profile picture: ${e}`)}this.ProfilePic.id=e}async IsUserFriend(e){for(let t=0;t<this.Friends.length;t++)if(this.Friends[t].id==e)return!0;return!1}async HasUserFriendRequestReceived(e){if(this.GetUserId()===e)return!1;for(let t=0;t<this.Requests.length;t++)if(this.Requests[t].id==e)return!0;return!1}async acceptFriendRequest(e){const t=localStorage.getItem("jwtToken"),a=await fetch(`${n.a.URL}/wp-json/synod/v1/friends/accept`,{method:"POST",headers:{Authorization:`Bearer ${t}`,"Content-Type":"application/json"},body:JSON.stringify({user_id:e})});if(!a.ok)throw new Error("Failed to accept friend request");return!!(await a.json()).value}async declineFriendRequest(e){const t=localStorage.getItem("jwtToken"),a=await fetch(`${n.a.URL}/wp-json/synod/v1/friends/decline`,{method:"POST",headers:{Authorization:`Bearer ${t}`,"Content-Type":"application/json"},body:JSON.stringify({user_id:e})});if(!a.ok)throw new Error("Failed to decline friend request");return!!(await a.json()).value}async removeFriend(e){const t=localStorage.getItem("jwtToken"),a=await fetch(`${n.a.URL}/wp-json/synod/v1/friends/remove`,{method:"POST",headers:{Authorization:`Bearer ${t}`,"Content-Type":"application/json"},body:JSON.stringify({user_id:e})});if(!a.ok)throw new Error("Failed to remove friend");return!!(await a.json()).value}async GetWarbands(){return this.Warbands}async GetAchievements(){return this.Achievements}GetSubscriptionID(){return this.Premium.SubId}GetPlanID(){return this.Premium.PlanId}IsPremium(){return this.Premium.IsPremium}PremiumUntil(){return this.Premium.PremiumUntil}PremiumUntilFormat(){const e=new Date(1e3*this.PremiumUntil());return`${String(e.getDate()).padStart(2,"0")}.${String(e.getMonth()+1).padStart(2,"0")}.${e.getFullYear()}`}GetUserStatus(){return 1==this.Premium.IsPremium?"\u2764\ufe0f Supporter":"Free Member"}numNotificationsGlobal(){return 0}numNotificationsProfile(){return 0}numNotificationsWarbands(){return 0}IsCreator(){return!1}IsCreatorApplicationPending(){return!this.IsCreator()}GetRating(){return this.Ratings.rating}GetMMR(){return this.Ratings.mmr}}},6178:function(e,t,a){"use strict";a.d(t,{A:function(){return i}});var n=a(108),o=a(722);class i{constructor(e){this.ID=void 0,this.Nickname=void 0,this.Achievements=[],this.Friends=[],this.Requests=[],this.Warbands=[],this.ProfilePic=void 0,this.Campaigns=[],this.BuiltRequests=[],this.Premium=void 0,this.SelfData=void 0,this.Ratings=void 0,this.ID=e.id,this.Nickname=e.nickname,this.ProfilePic=e.profile_picture,this.Friends=e.friends,this.Achievements=e.achievements,this.Premium=e.is_premium,this.SelfData=e,this.Campaigns=Array.isArray(e.campaigns)?e.campaigns.map((e=>Number(e))).filter((e=>Number.isFinite(e))):[],this.Ratings=e.ratings}GetCampaignIDList(){return[...this.Campaigns]}async BuildWarbands(e){for(let a=0;a<e.warbands.length;a++)if(!(this.Warbands.filter((t=>t.id==e.warbands[a].id)).length>0))try{const t=JSON.parse(e.warbands[a].warband_data);t.warband_invites=e.warbands[a].warband_campaign_invites,t.warband_campaigns=e.warbands[a].warband_campaigns,t.warband_user=this.GetUserId();const n=await o.Y.CreateUserWarband(t,e.warbands[a].id);this.Warbands.push({id:e.warbands[a].id,warband_data:n})}catch(t){console.log(t)}}ConvertToInterface(){const e=[];for(let n=0;n<this.Warbands.length;n++)e.push({id:this.Warbands[n].id,warband_data:JSON.stringify(this.Warbands[n].warband_data.ConvertToInterface()),warband_campaign_invites:this.Warbands[n].warband_data.GetCampaignInvites(),warband_campaigns:this.Warbands[n].warband_data.GetCampaigns(),warband_user_id:this.GetUserId()});const t=[...this.Campaigns],a={is_premium:this.Premium,id:this.ID,nickname:this.Nickname,achievements:this.Achievements,friends:this.Friends,warbands:e,profile_picture:this.ProfilePic,campaigns:t,ratings:this.Ratings};return this.SelfData=a,a}GetNickname(){return this.Nickname}GetUserId(){return this.ID}GetProfilePictureId(){return this.ProfilePic.id}GetProfilePictureImageId(){return void 0==this.ProfilePic?0:this.ProfilePic.image_id}async getProfilePictureOptions(){const e=localStorage.getItem("jwtToken"),t=await fetch(`${n.a.URL}/wp-json/synod/v1/user-pfp-options/${this.GetUserId()}`,{headers:{Authorization:`Bearer ${e}`}});if(!t.ok)throw new Error("Failed to fetch profile picture options");return await t.json()}async IsUserFriend(e){for(let t=0;t<this.Friends.length;t++)if(this.Friends[t].id==e)return!0;return!1}async HasUserFriendRequestReceived(e){if(this.GetUserId()==e)return!1;const t=localStorage.getItem("jwtToken"),a=await fetch(`${n.a.URL}/wp-json/synod/v1/friends/request_received/`,{method:"POST",headers:{Authorization:`Bearer ${t}`,"Content-Type":"application/json"},body:JSON.stringify({requester_id:e,requestee_id:this.GetUserId()})});if(!a.ok)throw new Error("Failed to fetch friend request check");return!!(await a.json()).value}async GetWarbands(){return this.Warbands}async GetAchievements(){return this.Achievements}GetUserStatus(){return 1==this.Premium?"Supporter":"Free Member"}IsPremium(){return this.Premium}GetRating(){return this.Ratings.rating}GetMMR(){return this.Ratings.mmr}}},9750:function(e,t,a){"use strict";a.d(t,{A:function(){return c}});a(2565),a(5043);var n=a(3632),o=(a(6184),a(8314),a(4062),a(4684),a(579));a(4286);var i=a(1409),r=a(7630),s=a(4416),l=a(537);var c=e=>{const t=e.data,a=(e.team_col,void 0!=e.col_name?e.col_name:"Pre-Equipped Items");return(0,o.jsx)(n.tH,{fallback:(0,o.jsx)("div",{children:"Something went wrong with ModelEquipmentDisplay.tsx"}),children:(0,o.jsxs)("div",{className:"ModelEquipmentDisplay",children:["Pre-Equipped Items"!=a&&(0,o.jsx)(o.Fragment,{children:t.getUniqueEquipment().map((e=>(0,o.jsx)(i.A,{equipment:e},e.ID)))}),"Pre-Equipped Items"==a&&(0,o.jsx)(o.Fragment,{children:t.getUniqueEquipment().map((e=>(0,o.jsx)(i.A,{equipment:e},e.ID)))}),t.MyOptions.length>0&&(0,o.jsx)(o.Fragment,{children:t.MyOptions.map((e=>(0,o.jsx)("div",{children:(0,o.jsxs)("table",{className:"table_headed table_headed-highlight",style:{width:"100%"},children:[(0,o.jsx)("thead",{children:(0,o.jsx)("tr",{children:(0,o.jsx)("th",{children:"Choose One of the Following"})})}),(0,o.jsx)("tbody",{children:e.Selections.map((e=>(0,o.jsx)("tr",{children:(0,o.jsx)("td",{className:"font-normal",children:e.value.EquipmentItems.map((t=>(0,o.jsxs)("span",{children:[e.value.EquipmentItems.indexOf(t)>0&&(0,o.jsx)("span",{children:" and "}),(0,o.jsx)(l.A,{titlename:t.Name,d_method:()=>(0,o.jsxs)("div",{className:"rules-equipment-main",children:[(0,o.jsx)(s.A,{facrelObject:void 0,baseobject:t}),(0,o.jsx)(r.A,{data:t})]})})]},t.ID)))})},e.value.ID)))})]})},e.RefID)))})]})})}},1979:function(e,t,a){"use strict";a(2565);var n=a(5043),o=a(3632),i=a(8314),r=a(7289),s=a(6264),l=a(5402),c=a(8373),d=a(6184),u=a(579);t.A=e=>{const t=e.data,a=e.show_simple,h=e.show_collapse,[m,p]=(0,n.useState)({}),[f,g]=(0,n.useState)(0);function y(e){const t={};for(let a=0;a<e.length;a++){const n=e[a].GetSpecialCategory();t[n]?t[n].push(e[a]):t[n]=[e[a]]}return t}return(0,n.useEffect)((()=>{!async function(){const e=new s.J;if(null!=t.BonusUpgrades)p(y(t.BonusUpgrades)),g((e=>e+1));else{const a=await e.runEvent("getFactionRuleUpgrades",t,[],[],null);p(y(a)),g((e=>e+1))}}()}),[]),(0,u.jsx)(o.tH,{fallback:(0,u.jsx)("div",{children:"Something went wrong with AbilityDisplay.tsx"}),children:(0,u.jsxs)("div",{className:"RuleDisplay",children:[(0,u.jsx)("div",{className:"RuleDisplay-description",children:(0,i.fE)(t,t.Description)}),t.MyOptions.length>0&&(0,u.jsx)("div",{className:"option-static-display",children:(0,u.jsx)(r.A,{data:t.MyOptions})}),Object.keys(m).length>0&&(0,u.jsx)(u.Fragment,{children:Object.keys(m).map(((e,o)=>(0,u.jsxs)(n.Fragment,{children:[(h||!a)&&(0,u.jsx)("div",{className:"RuleDisplay-upgradeoptions",children:(0,u.jsx)(l.A,{headline:(0,d.h8)(e),content:(0,u.jsx)(u.Fragment,{children:m[e].map(((e,a)=>(0,u.jsx)(n.Fragment,{children:(0,u.jsx)(c.A,{item:e})},"model_ability_"+t.ID+"_ability_id_"+e.ID+a)))})})}),a&&(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)("hr",{}),(0,u.jsx)("div",{className:"RuleDisplay-Upgrade-Title",children:(0,d.h8)(e)}),m[e].map(((e,a)=>(0,u.jsx)(n.Fragment,{children:(0,u.jsx)(c.A,{item:e})},"model_ability_"+t.ID+"_ability_id_"+e.ID+a)))]})]},o)))})]},f)})}},4684:function(e,t,a){"use strict";a(2565),a(5043);var n=a(3632),o=a(8314),i=a(579);t.A=e=>{const t=e.data;return(0,i.jsx)(n.tH,{fallback:(0,i.jsx)("div",{children:"Something went wrong with KeywordDisplay.tsx"}),children:(0,o.fE)(t,t.Description)})}},7281:function(e,t,a){"use strict";a(2565);var n=a(5043),o=a(3632),i=a(8314),r=a(3600),s=a(6184),l=a(9750),c=a(6264),d=a(3519),u=a(5947),h=a(1838),m=a(7164),p=a(2884),f=a(4300),g=a(2925),y=a(4286),_=a(8373),b=a(6421),v=a(579);t.A=e=>{const t=e.data,[a,w]=(0,n.useState)({}),[x,k]=(0,n.useState)({}),[C,j]=(0,n.useState)([]),[S,I]=(0,n.useState)(""),[A,N]=(0,n.useState)(0),{settings:E}=(0,b.t)();return(0,n.useEffect)((()=>{!async function(){new c.J,k(t.GetSplitUpgrades()),j(t.Abilities);const e=await t.GetPresentableStatistics();w(e);const a=await t.getBaseSizeString();I(a),N((e=>e+1))}()}),[]),(0,v.jsx)(o.tH,{fallback:(0,v.jsx)("div",{children:"Something went wrong with ModelDisplay.tsx"}),children:(0,v.jsxs)("section",{className:"RulesModelDisplay fighter-card",children:[(0,v.jsx)(u.A,{name:t.getName()}),(0,v.jsxs)("div",{className:"fighter-card-main-area",children:[(0,v.jsx)(h.A,{model_slug:t.GetSlug()}),(0,v.jsx)(p.A,{movement:(0,r.NJ)(a),melee:(0,r.A)(a),ranged:(0,r.Lp)(a),armour:(0,r.aR)(a)}),(0,v.jsxs)("div",{className:"fighter-card-meta fighter-card-meta-below",children:[t.isVariant()&&(0,v.jsx)(m.A,{className:"fighter-variant",label:"Variant of",value:t.GetBaseVariantName()}),E.show_base_sizes&&(0,v.jsx)(m.A,{className:"fighter-base",label:"Base",value:S}),(0,v.jsx)(f.A,{keywords:t.getKeywords(),modelId:t.ID}),(0,v.jsx)(m.A,{className:"synod-image-source-wrap",label:"Image",value:(0,v.jsx)(g.A,{modelSlug:t.GetSlug()})})]})]}),(0,v.jsxs)("div",{className:"fighter-card-collapse-wrap",children:[C.length>0&&(0,v.jsx)(d.A,{name:"Abilities",state:!1,method:()=>(0,v.jsx)(v.Fragment,{children:C.map((e=>(0,v.jsx)(n.Fragment,{children:(0,v.jsx)(y.A,{data:e})},"model_ability_"+t.ID+"_ability_id_"+e.ID)))})}),t.hasDescription()&&(0,v.jsx)(d.A,{name:"Rules",state:!1,method:()=>(0,v.jsxs)(v.Fragment,{children:[(0,i.fE)(t,t.Description),t.getUniqueEquipment().length>0&&(0,v.jsxs)("div",{className:"container bordergrey",children:[(0,v.jsx)("div",{className:"backgroundgrey"}),(0,v.jsx)("div",{className:"content",children:(0,v.jsx)("div",{children:t.getUniqueEquipment().map((e=>(0,v.jsx)("div",{children:(0,v.jsx)(l.A,{team_col:t.Team,data:e})},e.ID)))})})]})]})}),Object.keys(x).length>0&&(0,v.jsx)(v.Fragment,{children:Object.keys(x).map((e=>(0,v.jsx)(d.A,{name:(0,s.h8)(e),state:!1,has_children:t.hasUpgrades(),method:()=>(0,v.jsx)(v.Fragment,{children:x[e].map((e=>(0,v.jsx)(n.Fragment,{children:(0,v.jsx)(_.A,{item:e})},"model_upgrade_"+t.ID+"_upgrade_id_"+e.ID)))})},e)))}),t.Lore.length>0&&E.show_lore&&(0,v.jsx)(d.A,{name:"Lore",state:!1,method:()=>(0,v.jsx)(v.Fragment,{children:(0,i.fE)(t,t.Lore)})})]},A)]},A)})}},5501:function(e,t,a){"use strict";a(2565),a(5043);var n=a(3632),o=a(8314),i=a(7289),r=a(579);t.A=e=>{const t=e.data;return(0,r.jsx)(n.tH,{fallback:(0,r.jsx)("div",{children:"Something went wrong with SkillDisplay.tsx"}),children:(0,r.jsxs)("div",{className:"SkillDisplay",children:[(0,o.fE)(t,t.Description),t.MyOptions.length>0&&(0,r.jsx)(i.A,{data:t.MyOptions})]})})}},2654:function(e,t,a){"use strict";a(5043);var n=a(3910),o=a(7929),i=a(579);t.A=e=>{let{type:t="",children:a,className:r=""}=e;return(0,i.jsxs)("div",{className:`AlertCustom AlertCustom-${t||"info"} ${r}`,children:["info"==t&&(0,i.jsx)(n.g,{icon:o.mEO,className:"AlertCustom-icon"}),"danger"==t&&(0,i.jsx)(n.g,{icon:o.JAe,className:"AlertCustom-icon"}),"warning"==t&&(0,i.jsx)(n.g,{icon:o.JAe,className:"AlertCustom-icon"}),"tip"==t&&(0,i.jsx)(n.g,{icon:o.EvL,className:"AlertCustom-icon"}),(0,i.jsx)("div",{className:"AlertCustom-inner",children:a})]})}},8736:function(e,t,a){"use strict";a(5043);var n=a(8154),o=a(947),i=a(579);t.A=e=>{let{amount:t,type:a,className:r}=e,s="";return"Ducats"==a||"ducats"==a||"D"==a||"d"==a||0===a?s=(t?t+" ":"")+"Ducats":"Glory"!=a&&"glory"!=a&&"G"!=a&&"g"!=a&&1!==a||(s=(t?t+" ":"")+" Glory Points"),(0,i.jsxs)("span",{className:"Currency",title:s,children:[t,("Ducats"==a||"ducats"==a||"D"==a||"d"==a||0===a)&&(0,i.jsx)(o.A,{}),("Glory"==a||"glory"==a||"G"==a||"g"==a||1===a)&&(0,i.jsx)(n.A,{})]})}},4062:function(e,t,a){"use strict";a(2565),a(5043);var n=a(5212),o=a(2719),i=a(579);t.A=e=>{e.d_colour;const t=e.d_name,a=e.d_type,r=e.d_method,s=e.titlename;return(0,i.jsx)(n.A,{placement:"auto",overlay:(0,i.jsx)(o.A,{children:(0,i.jsx)(o.A.Body,{bsPrefix:"empty",className:"popover rules-popover-element",id:"tooltip",children:(0,i.jsxs)("div",{className:a,children:[(0,i.jsx)("div",{className:"popover-headline",children:s||""}),(0,i.jsx)("div",{className:"popover-content",children:r()})]})})}),children:(0,i.jsx)("span",{className:"rules-popover-link",children:t})})}},6252:function(e,t,a){"use strict";var n=a(5043),o=a(3540),i=a(9165),r=a(579);const s=["kw_plusdice1","kw_plusdice2","kw_minusdice","kw_minusdice1","kw_minusdice2","kw_injurydice1","kw_injurydice2","kw_injurydice-1","kw_injurydice-2","kw_injurymodifier1","kw_injurymodifier2","kw_injurymodifier-1","kw_injurymodifier-2","kw_ignoremodifiercover","kw_ignoremodifierlong_range","kw_ignoremodifierelevated_position","kw_armourpiercing","kw_assault","kw_automatic2","kw_automatic3","kw_blast","kw_blast1","kw_blast2","kw_blast3","kw_block","kw_cleave","kw_cleave_1","kw_cleave_2","kw_critical","kw_flamethrower","kw_deadly","kw_ignorearmour","kw_ignoremodifierarmour","kw_pistol","kw_scatter","kw_shotgun","kw_consumable","kw_shrapnel","kw_negate_kw_shrapnel","kw_fire","kw_negate_kw_fire","kw_gas","kw_negate_kw_gas","kw_fear","kw_negate_kw_fear","kw_ammunition_kw_fire","kw_ammunition_kw_gas","kw_ammunition_kw_shrapnel","kw_ammunition_kw_injurydice1","kw_impervious","kw_cover","kw_regenerate","kw_regenerate_1","kw_regenerate_2","kw_bayonetlug","kw_cumbersome","kw_heavy","kw_held","kw_shieldcombo","kw_riskyaction","kw_reload","kw_goetic","kw_putrescere","kw_blessed","kw_strong","kw_negate_kw_heavy","kw_tough","kw_skirmisher","kw_infiltrator","kw_leader","kw_golem","kw_flying","kw_fireteam","kw_elite","kw_grenade","kw_demonic","kw_artificial","kw_antioch","kw_blackgrail","kw_heretic","kw_pilgrim","kw_sultanate","kw_thecourt","kw_blessingmarker","kw_bloodmarker","kw_infectionmarker","kw_action","kw_limit"];o.A;t.A=e=>{let{className:t="",keywords:a}=e;const o=n.useMemo((()=>[...a].sort(((e,t)=>{const a=s.indexOf(e.ID),n=s.indexOf(t.ID),o=-1!==a,i=-1!==n;return o&&i?a-n:o&&!i?-1:!o&&i?1:e.ID.localeCompare(t.ID)}))),[a]);return(0,r.jsx)("div",{className:`KeywordList ${t}`,children:o.map(((e,t)=>(0,r.jsx)(i.A,{keyword:e},t)))})}},9165:function(e,t,a){"use strict";a.d(t,{z:function(){return ne},A:function(){return oe}});a(5043);var n=a(2719),o=a(5212),i=a(3540),r=a(579);var s=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 194.42",children:[(0,r.jsx)("path",{d:"M63.96,138.29l6.45-6.43c-.49,7.19-.93,13.5-1.21,17.68-.2,1.96-.04,3.93-.5,5.86-1.41,7.77-2.82,15.53-4.51,23.28-.62-7.91-.95-15.79-1.29-23.67-.19-1.98.24-3.92.31-5.88.17-2.51.43-6.31.75-10.84Z"}),(0,r.jsx)("path",{d:"M63.96,138.29c.33-.37,6.73-7.3,6.87-7.46-.02.65-.1,3.3-.12,4.01-.28,4.27-.72,10.47-1.01,14.76.3,4.08-4.3,24.81-5.02,29.18,0,0-.77,3.96-.77,3.96,0,0-.22-4.03-.22-4.03-.17-3.95-1.27-21.74-1.33-25.31.2-3.45,1.25-11.58,1.6-15.12h0ZM63.96,138.29l-.28,10.13c.02,2.51-.52,4.98-.23,7.5,0,0,.14,2.52.14,2.52l1.1,20.2-.99-.07c.73-4.49,5.28-24.89,5-29.05.3-4.29.71-10.48,1.01-14.75,0,0,.32-2.94.32-2.94,0,0,.66.3.66.3,0,0-6.72,6.16-6.72,6.16h0Z"}),(0,r.jsx)("path",{d:"M73.84,81.8c-.47,6.94-1.32,19.29-2.18,31.89l-6.46,6.43c.83-12.11,1.7-24.75,2.22-32.32h-19.66l.6-3.51c2.26-12.42,7.53-45.74,9.96-57.65,2.11-7.38,4.26-14.76,6.68-22.08-.14,7.71-.56,15.39-1.02,23.05-1.48,10.83-6.76,39.93-9.14,54.19,6.12,0,17.74,0,19,0Z"}),(0,r.jsx)("path",{d:"M73.84,81.8c-.04.12-1.69,31.98-1.72,32.09-2.15,2.23-4.37,4.4-6.57,6.58,0,0-.94.94-.94.94l.09-1.32,2.22-32.32.5.53h-19.66s-.59,0-.59,0c0,0,.1-.58.1-.58,3.47-19.47,6.85-41.8,10.56-61.18,0-.04,6.69-22.1,6.7-22.14,0,0,1.15-3.8,1.15-3.8-.08,1.82-1.09,24.53-1.2,27.06-.64,4.56-1.39,9.08-2.15,13.61-2.13,12.62-4.8,28.01-7.22,40.58,0,0-.27-.32-.27-.32,0,0,19,.28,19,.28h0ZM73.84,81.8s-19,.28-19,.28h-.32s.05-.32.05-.32c1.23-8.02,3.03-19.25,4.46-27.12,1.34-7.87,3.37-19.4,4.45-27.06,0,0,1.02-23.03,1.02-23.03,0,0,.97.17.97.17,0,0-6.71,22.18-6.66,22.02-2.74,14.04-5.5,31.67-7.92,45.85,0,0-2.63,15.29-2.63,15.29,0,0-.49-.58-.49-.58h19.66s.54,0,.54,0l-.04.53-2.22,32.32s-.85-.39-.85-.39c2.15-2.15,4.28-4.31,6.48-6.41-.43,1.72,2.63-31.98,2.51-31.56h0Z"}),(0,r.jsx)("path",{d:"M68.75,41.95c1.04-2.41,2.21-4.84,3.42-7.27.53-.98.89-2.06,1.75-2.85.58-.59,3.24-3.9,3.83-4.58,4.06-4.89,8.19-9.76,12.34-14.55l4.13-4.78,1.08,6.17c1.53,9.97,1.6,20.76-3.46,29.78-2.91,5.06-8.05,8.63-14.12,7.38-4.15-1.61-7.22-5.46-8.98-9.3h0ZM68.75,41.95c3.26,1.88,6.61,3.43,10.26,3.3,1.84.56,3.59.02,5.15-1.31,6.97-6.89,6.6-19.65,5.25-28.71,0,0,5.21,1.4,5.21,1.4-5.06,5.89-10.34,11.71-15.53,17.48-2.97,2.23-7.39,5.58-10.35,7.85h0Z"}),(0,r.jsx)("path",{d:"M68.75,41.95c.7-1.68,2.44-5.79,3.14-7.4.95-2.51,2.96-4.56,4.63-6.61,2.19-2.6,8.09-9.55,10.36-12.23,2.3-2.73,4.63-5.42,6.96-8.11l.69-.8.18,1.04c2.1,10.93,3.55,22.91-1.03,33.42-2.42,6.4-8.88,12.19-16.1,10.46-4.21-1.81-7.13-5.65-8.83-9.76h0ZM68.75,41.95c1.87,3.78,5.33,7.57,9.07,8.83,6.8,1.45,12.65-3.89,14.94-9.92,3.56-8.22,3.4-17.5,2.11-26.23,0,0-1.15-6.63-1.15-6.63l.87.24c-2.33,2.69-4.67,5.39-6.96,8.11l-6.91,8.15c-1.21,1.46-4.01,4.75-5.19,6.15-1.27,1.37-2.32,2.46-3.1,4.17-.78,1.52-2.87,5.56-3.68,7.12h0Z"}),(0,r.jsx)("path",{d:"M68.75,41.95c3.22,1.66,6.76,3.08,10.41,2.82,4.48,1.15,7.08-3.85,8.57-7.34,2.64-7.03,2.22-14.78,1.19-22.13,0,0,.37.41.37.41.44.12,1.55.41,1.97.53.43.08.96.42,1.24-.19.11-.34-.21-.56-.12-.54.65.16,1.72.46,2.38.63,0,0,.78.21.78.21l-.53.6s-15.54,17.49-15.56,17.51c-3.44,2.61-7.14,4.88-10.69,7.49h0ZM68.75,41.95c3.23-2.54,6.9-5.91,9.98-8.19,0,0,15.52-17.47,15.52-17.47l.25.81s-1.31-.35-1.31-.35c-.4-.12-.96-.23-1.35-.38-.17-.11-.33-.17-.3-.57.08-.29.26-.34.29-.36.15-.05.08-.05-.05-.09-.19-.06-.75-.2-.95-.26,0,0-1.3-.35-1.3-.35l.37.41c1.05,7.48,1.46,15.43-1.25,22.64-1.35,3.17-3.24,6.84-6.77,7.97-.98.27-2.06.3-3.02-.04l.16.02c-3.79-.02-7.21-1.79-10.28-3.8h0Z"}),(0,r.jsx)("path",{d:"M109.52,19.57c1.85,1.29,4.57,3.06,6.45,4.3.57.31,1.03.81,1.45,1.34,0,0,2.87,2.99,2.87,2.99,4.37,4.57,8.53,9.32,12.57,14.08-3.61,5.46-9.63,13.61-17.19,10.79-3.65-1.83-5.13-5.1-7.32-8.22-2.71-4.51-5.06-9.56-4.47-15.15,0-.6.27-1.12.52-1.63,1.45-3.01,3.15-5.81,5.13-8.48h0ZM109.52,19.57c.12,2.22.19,7.45.4,9.57.09.64.1,1.19-.1,1.76-.21,1.86.31,3.72,1.07,5.74,1.38,3.53,3.56,6.84,5.94,9.85.49.61.88.92,1.22,1.08,2.96.73,6.87-4.36,8.53-6.69,0,0,.24,3.58.24,3.58-3.92-4.5-7.47-9.22-11.03-13.95-1.94-3.71-3.93-7.35-6.27-10.93h0Z"}),(0,r.jsx)("path",{d:"M109.52,19.57s6.72,4.05,6.61,3.99c.67.34,1.17.86,1.62,1.37,0,0-.67,0-.67,0,3.34,2.19,5.88,5.42,8.58,8.32,2.66,2.95,5.25,5.95,7.82,8.98-2.11,3.16-4.33,6.33-7.32,8.83-2.85,2.5-7.04,3.97-10.72,2.44-3.56-1.69-5.43-5.36-7.53-8.41-2.79-4.51-5.19-10.19-4.54-15.4.02-1.08.78-1.98,1.2-2.87,1.43-2.55,3.09-4.99,4.94-7.25h0ZM109.52,19.57c-1.61,2.43-3.06,4.95-4.27,7.59-.35.87-.93,1.82-.88,2.52-.74,7.29,3.51,13.84,7.5,19.47,7.24,9.54,16.09.06,20.57-7.15,0,0,.04.6.04.6-2.48-2.92-4.99-5.82-7.55-8.67-1.28-1.42-2.58-2.83-3.89-4.23-.89-.95-1.89-1.82-2.43-3.02-.23-.41-.53-.83-.84-1.22,0,0-.67,0-.67,0-.38-.52-.79-1.01-1.31-1.31,0,0-6.26-4.58-6.26-4.58h0Z"}),(0,r.jsx)("path",{d:"M109.52,19.57c.32,2.82.47,5.66.78,8.48.12.94.36,2.09,0,3.01,0,0,.03-.11.03-.11-.21,4.64,2.56,8.99,5.05,12.74.74,1.04,2.09,2.96,2.81,3.38.73.16,1.57-.11,2.32-.55,2.34-1.45,4.06-3.73,5.68-5.94-.09.47-.02.95.04,1.44.07.41.1.92.6,1.13.29.07.35.03.39.13.14.67.15,1.94.23,2.63-4.29-4.85-8.22-10.01-12.08-15.17-1.95-3.59-3.77-7.64-5.83-11.16h0ZM109.52,19.57c2.38,3.21,5.04,7.31,6.67,10.63,3.56,4.74,7.12,9.47,11,13.92l-.88.36c.02-.7-.32-1.74.27-2.31.27-.2.4-.21.43-.32.11-.36.03-.77.03-1.17,0,0-.06.48-.06.48-1.11,1.55-2.29,3.06-3.68,4.41-1.47,1.34-3.2,2.9-5.43,2.47-.92-.44-1.41-1.22-1.91-1.83-3.26-4.48-6.86-9.56-6.66-15.36.13-.41.19-.82.13-1.3-.14-1.4-.06-2.88-.05-4.29,0,0,.12-5.69.12-5.69h0Z"}),(0,r.jsx)("path",{d:"M136.6,49.04c-.2-2.39-.33-4.38-.35-5.78.09-6.76.25-13.65.64-20.41,1.77,6.54,3.34,13.24,4.82,19.84.09.34.17.68.24,1.02l-5.35,5.33Z"}),(0,r.jsx)("path",{d:"M136.6,49.04c-.17-1.74-.56-3.91-.77-5.72-.05-4.88.46-15.49.56-20.5,0,0,.12-3.67.12-3.67l.87,3.57,5.08,20.89.06.25c-1.8,1.79-4.11,3.46-5.91,5.18h0ZM136.6,49.04c1.79-1.85,3.28-3.85,4.99-5.69,0,0-.14.46-.14.46-.69-2.99-1.79-7.37-2.51-10.41,0,0-2.53-10.42-2.53-10.42l.98-.1c-.2,5.06-.39,15.53-.71,20.43-.02,1.9-.14,3.76-.08,5.73h0Z"}),(0,r.jsx)("path",{d:"M129.05,86.59c2.11,19.94,6.34,55.07,7.79,72.04-.07,7.04-.15,14.65-.49,21.68-1.86-6.78-3.59-14.2-5.19-21.06-2.42-17.94-6.32-57.77-8.52-76.31l-.31-2.76,1.21-1.2c3.5.9,11.54,2.98,16.67,4.3-.51-4.95-1.31-11.96-2.06-18.84l5.51-5.5c.99,9.5,3.26,31.35,3.36,32.3-1.98-.51-11.95-3.09-17.97-4.65Z"}),(0,r.jsx)("path",{d:"M129.05,86.59c2.65,20.78,6.51,51.42,8.29,72.02-.05,2.23-.53,23.74-.58,25.47-.41-1.76-5.53-22.39-6.1-24.76-3.2-25.06-5.91-53.92-8.83-79.08,0,0-.03-.24-.03-.24l.17-.17s1.21-1.2,1.21-1.2l.2-.2s.27.07.27.07l16.67,4.3-.62.54-2.06-18.84-.03-.24.17-.17s5.51-5.5,5.51-5.5l.74-.74.11,1.04c.46,4.85,1.25,11.39,1.66,16.15,0,0,1.46,16.17,1.46,16.17,0,0,.03.37.03.37,0,0-.35-.1-.35-.1l-17.91-4.9h0ZM129.05,86.59l18.03,4.4s-.32.27-.32.27l-1.9-16.13c-.54-4.73-1.2-11.37-1.7-16.15,0,0,.85.3.85.3l-5.51,5.5.14-.41,2.06,18.84.08.72s-.7-.18-.7-.18c0,0-16.67-4.3-16.67-4.3l.48-.13s-1.21,1.2-1.21,1.2c0,0,.14-.41.14-.41,2.01,17.61,4.53,41.71,6.47,59.32.73,6.51,1.52,13.38,2.35,19.69,0,0,5.19,21.04,5.19,21.04l-.98.11.49-21.66c-1.98-20.56-5.39-50.97-7.29-72.04h0Z"}),(0,r.jsx)("path",{d:"M113.09,141.94c-6.2.63-12.71,1.23-18.18,4.11-4.76,2.96-9.42,6.09-13.93,9.43,4.54-.98,9.45-2.28,13.95-3.43l2.3-.59c1.38-.26,2.85-1.26,4.09-1.58,5.09-1.33,10.46-1.8,15.7-2.33l3.39-.3-.7-3.29c-2.43-10.33-7.41-34.25-15.54-40.71-1.34-.88-2.59-1.26-3.75-1.26l-8.99,8.95c-1.35,2.85-2.39,5.76-3.18,7.68-1.46,3.97-2.73,7.97-3.93,11.98-.77,3.04-2.07,5.96-2.29,9.11-.54,5.21-.97,10.53-1.05,15.77,1.73-3.85,3.43-7.68,5.09-11.5.67-1.7,1.96-4,2.37-5.75,1.5-5.92,3.39-11.82,5.44-17.53,1.36-3.62,2.87-7.46,4.9-10.64.56-.82,1.12-1.61,1.75-2.03-.05-.02-.09-.04-.13-.06.01,0,.06.01.11,0,.04.01.15-.03.13-.02-.04.02-.07.05-.11.08.69.4,1.83,1.87,2.31,2.77,5.13,9.43,7.79,20.52,10.25,31.14"}),(0,r.jsx)("path",{d:"M113.09,141.94c-6.14.73-12.54,1.37-18.05,4.35-4.63,2.96-9.31,6.25-13.76,9.59,0,0-.41-.9-.41-.9,0,0,9.8-2.4,9.8-2.4,2.87-.83,6.98-1.42,9.58-2.86,3.23-1.1,6.67-1.5,10.03-1.96,3.36-.4,6.71-.72,10.07-1.01l-.44.6c-1.66-7.71-3.45-15.43-5.69-23-2.06-6.49-4.16-13.23-8.38-18.66-1.33-1.75-3.15-3.19-5.43-3.2,0,0,.35-.15.35-.15l-8.99,8.95c-.33.96-1.59,3.56-2.13,5.14-.66,1.54-1.42,3.8-1.94,5.42-1,3.17-2.63,7.79-3.51,10.96-.93,2.78-1.66,5.41-1.82,8.33,0,0-.27,2.87-.27,2.87-.34,3.82-.58,7.65-.64,11.48l-.96-.21,5.21-11.79c2.06-3.92,2.86-7.99,4.1-12.14,2.29-7.18,4.43-14.54,8.25-21.1.64-.98,1.18-1.92,2.17-2.64,0,0,.09.9.09.9,0,0-.17-.08-.17-.08l-2.29-1.06s2.53.07,2.53.1c0,0,.22,0,.22,0-.2-.03-.14,0-.16,0,0,0,.01,0,.01,0h.01s.02,0,.02,0h.04s.03-.01.03-.01h.01s0,0,0,0l.3.06.14.78-.05.05s-.06.05-.07.05c-.08.05-.03.02-.05.04,0,0-.02.01-.02.01l-.05-.85c.79.54,1.23,1.14,1.72,1.78,5.79,9.94,8.08,21.47,10.59,32.57-2.2-8.84-4.43-17.74-8.21-26.04-1.41-2.74-2.51-6.21-5.26-7.85,0,0,.6-.43.6-.43l.09-.07s.1-.06.06-.04c-.04.02-.09.07-.12.1,0,0,.14.78.14.78l.3.06s0,0,0,0c0,0,.01,0,.01,0h.02s.03-.01.03-.01c0,0,0,0,0,0h-.02c-.14.03-.06.06-.35.02,0,0,.22,0,.22,0-.07,0-.14.01-.21.01l.23-.97s.09.04.09.04l.83.38c-1.11.66-1.91,1.64-2.62,2.84-4.7,8.38-7.28,17.84-9.87,27.05-.47,2.19-1.6,4.12-2.41,6.05-.64,1.45-5.68,12.87-6.21,14.06.03-4.67.26-9.38.68-14.02,0,0,.27-2.88.27-2.88.15-2.89.95-5.83,1.86-8.52.86-3.14,2.52-7.85,3.52-11.01,1.16-3.64,2.61-7.32,4.2-10.79,0,0,.04-.08.04-.08,0,0,.06-.06.06-.06l8.99-8.95.15-.15s.21,0,.21,0c3.73.01,6.15,3.18,7.95,6.04,3.14,5.11,5.06,10.85,6.81,16.54,2.26,7.61,4.04,15.33,5.72,23.08,0,0,.11.55.11.55,0,0-.56.05-.56.05-6.26.59-12.57,1.02-18.68,2.53-1.62.39-3.06,1.45-4.74,1.74-5,1.29-13.35,3.29-18.39,4.55,5.16-3.89,10.61-7.44,16.14-10.77,5.68-2.86,12.09-3.31,18.31-3.86h0Z"}),(0,r.jsx)("path",{d:"M152.18,50.69c4.03,1.25,8.02,2.61,11.98,4.03.26,2.71,1.02,7.33,1.09,10.01-.42,8.79-.68,27.91-.95,36.92,0,0-.04,1.68-.04,1.68-.27.1-15.5,9.07-16.2,9.44,0,0,1.49-2.67,1.49-2.67.38,10.37.84,20.88,2.62,31.1,1.93,8.63,4.09,17.4,6.22,25.98.64,6.52,1.25,13.06,1.58,19.68-2.71-6.03-5.13-12.15-7.52-18.29-1.42-6.36-3.01-12.69-4.51-19.04-3.55-13.37-3.93-27.32-4.44-41.05.31-.18,15.47-9.01,16.3-9.5,0,0-1.49,2.52-1.49,2.52l.54-22.72s.27-11.36.27-11.36c.02-1.91-.1-3.8.35-5.67,0,0,.95-5.66.95-5.66l1.04,1.78c-3.13-2.35-6.23-4.71-9.27-7.19h0Z"}),(0,r.jsx)("path",{d:"M152.18,50.69c3.93,1.32,7.96,2.56,12.04,3.88,0,0,.09.03.09.03v.1c.39,3.35,1.06,6.65,1.23,10.04-.08,9.21-.45,27.71-.74,36.92,0,0-.5-.52-.5-.52.28.73.56,1.62.46,2.46,0,0-.31.18-.31.18l-16.15,9.42.07-.84c.38-.93.22-1.69.75-2.51,0,0,.87-1.55.87-1.55l.07,1.77c.54,12.03.76,24.17,3.77,35.86,1.1,4.6,3.93,16.4,5.05,21.12.13,1.39,1.75,21.77,1.82,22.64-3.16-6.9-6.02-13.96-8.74-21.02-1.93-8.7-5.34-21.09-6.72-29.75-1.56-10.09-1.86-20.29-2.24-30.43v-.3s.25-.15.25-.15l16.3-9.5,1.41-.82-.9,1.68c-.67,1.27-1.56,2.76-2.29,4,0,0,.05-1.91.05-1.91.2-8.86.47-20.98.84-29.83.26-3.34-.11-6.66.58-9.97,0,0,.21.3.21.3l.34-2.95c.14-1.18.35-2.32.56-3.45,0,0,.23.41.23.41.32.52,1.1,1.96,1.38,2.44-3.29-2.6-6.54-5.27-9.76-7.77h0ZM152.18,50.69c3.14,2.43,6.29,4.75,9.35,7.07,0,0-.21.19-.21.19,0,0-1.06-1.77-1.06-1.77,0,0,.32-.06.32-.06-.14.92-.28,1.8-.48,2.68,0,0-.62,2.71-.62,2.71l.21.3c-.59,3.21-.15,6.61-.32,9.87-.05,8.87-.36,20.98-.57,29.84,0,0-.93-.27-.93-.27.54-.91,1.1-1.81,1.66-2.69l.51.86-16.29,9.49s.25-.45.25-.45c.4,15.17,1.31,30.5,5.42,45.16,0,0,3.51,14.84,3.51,14.84,2.26,5.73,4.83,12.32,7.49,18.19,0,0-.96.23-.96.23.01.01-1.61-19.89-1.56-19.58-1.16-4.81-3.95-16.54-5.06-21.15-3.02-11.73-3.26-24.01-3.79-36.03,0,0,.94.23.94.23-.45,1-1.55,2.04-2.22,2.82,0,0,.07-.84.07-.84l16.26-9.47-.32.45c0-.2.03-.33.16-.48.14-.15.3-.41.38-.69l-.51-.52.47-18.46c.05-3.66,1.12-20.09.29-23.42-.19-1.67-.41-3.33-.55-5.01l.1.13c-3.92-1.37-7.87-2.82-11.93-4.18h0Z"}),(0,r.jsx)("path",{d:"M193.22,111.54c-.28,6.8-.85,13.55-1.49,20.3,0,0-1.54,1.07-1.54,1.07-1.32.91-2.88,1.3-4.28,2.04,0,0-4.29,2.02-4.29,2.02-1.59.74-9.37,4.4-10.81,5.08,0,0-1.46-1.98-1.46-1.98l-17.3-23.47s-5.73-7.78-5.73-7.78c5.74,1.99,21.29,7.38,27.24,9.44,0,0-3.74,1.65-3.74,1.65l6.3-14.74c1.78-4.25,4.59-10.52,6.24-14.76,0,0,.17,2.75.17,2.75-.49-.74-.8-1.58-1.14-2.4-2.35-5.64-4.85-11.72-6.94-17.45,3.38,3.92,6.95,8.41,10.18,12.48.92,1.31,2.47,2.88,3.2,4.28,0,0,.79,1.56.79,1.56-1.35,2.5-2.67,5.91-3.83,8.54-2.61,6.1-7.92,18.5-10.55,24.67-.97-.34-19.15-6.63-20.75-7.19,0,0,3.4-4.61,3.4-4.61l17.3,23.47-3.69-.94,8.58-4.03,4.29-2.02c1.46-.6,2.76-1.56,4.3-1.99,0,0-1.63,2.02-1.63,2.02,2.27-6.06,4.6-12.08,7.19-18.02h0Z"}),(0,r.jsx)("path",{d:"M193.22,111.54c-.19,6.82-.69,13.64-1.25,20.44-1.54,1.22-3.38,2.21-5.21,2.91,0,0-5.24,2.55-5.24,2.55-3.63,1.75-7.23,3.53-10.88,5.24,0,0-.25-.34-.25-.34l-24.49-33.24-.96-1.3,1.52.53,27.24,9.44s1.2.42,1.2.42c-.8.36-4.05,1.79-4.9,2.17,0,0-1.16.51-1.16.51l.5-1.17,6.3-14.73,6.24-14.75c.13.66-.02,1.64.71,2.03.34.09.34.11.38.3.06.31.13,2.08.17,2.44,0,0-1.04-1.56-1.04-1.56-.9-1.46-1.54-3.46-2.19-5-1.28-3.24-4.63-11.64-5.95-14.97,0,0-1.19-3-1.19-3,3.24,3.98,9.01,11.04,12.23,15,1.01,1.43,2.32,2.67,3.25,4.36l-.94.31c.1.13.14.36.3.39.05.01.11-.12.43-.17.33-.01.5.19.58.29.14.18.31.54.42.74,0,0,.12.23.12.23,0,0-.13.23-.13.23-2.32,4.58-5.11,11.74-7.24,16.53,0,0-7.12,16.64-7.12,16.64l-.18.43-.44-.15-20.75-7.19-.64-.22.4-.55s3.4-4.61,3.4-4.61c0,0,.4-.55.4-.55,0,0,.4.55.4.55l17.31,23.46.85,1.15s-1.39-.36-1.39-.36c-.96-.25-4.12-1.07-5.02-1.3,0,0,1.25-.57,1.25-.57,2.89-1.32,10.17-4.63,12.96-5.9,1.65-.69,3.29-1.79,5.16-2.16,0,0-.52.63-.52.63-.6.72-2.04,2.47-2.63,3.18,2.66-6.51,5.45-12.98,7.98-19.34h0ZM193.22,111.54c-2.43,6.1-4.67,12.16-6.97,18.1l-.4-.23,1.61-2.04.28.42c-1.47.43-2.76,1.39-4.24,2.03,0,0-4.26,2.06-4.26,2.06,0,0-8.54,4.13-8.54,4.13,0,0-.09-.92-.09-.92,0,0,3.69.92,3.69.92l-.53.8-17.29-23.47h.81s-3.4,4.61-3.4,4.61c0,0-.24-.77-.24-.77l20.75,7.19-.63.27c2.36-5.52,8.39-19.62,10.68-24.96,1.2-2.75,2.28-5.58,3.72-8.29,0,0,0,.46,0,.46l-.16-.33s-.04-.09-.01-.1c.01-.03.12.04.38-.1.25-.18.25-.44.23-.56-.04-.31-.18-.53-.29-.78,0,0-.94.31-.94.31-.79-1.46-2.11-2.74-3.17-4.22-2.18-2.68-7.9-9.69-10.14-12.44,0,0,.85-.5.85-.5l3.96,9.95s1.98,4.98,1.98,4.98c.58,1.41,1.32,3.59,2.09,4.82,0,0-.91.31-.91.31,0-.64-.22-1.22.25-1.88.33-.31.43-.37.46-.58.03-.18.03-.39.03-.6l.05.46-6.25,14.77-6.3,14.74-.66-.65,3.74-1.65s.04.93.04.93l-27.24-9.44.57-.77,24.5,33.23-.62-.16c5.09-2.35,10.78-4.92,15.91-7.27,1.87-.69,3.5-1.48,5.09-2.68,0,0-.11.18-.11.18.72-6.75,1.37-13.5,1.73-20.28h0Z"}),(0,r.jsx)("path",{d:"M46.61,155.56c-.99,6.02-1.88,11.46-2.53,15.64-.24,1.63-1.02,3.45-1.45,5.03-1.54,4.83-3.25,10.24-4.99,15-.11-5.97.05-12.45.2-18.43-.02-2.63.78-5.15,1.11-7.73l.38-2.26,7.28-7.25Z"}),(0,r.jsx)("path",{d:"M46.61,155.56c-.69,5.11-1.12,10.81-2.09,16.02-1.99,7.22-5.14,15.65-7.42,22.84.02-1.89.16-15.24.19-17.46.06-2.14-.08-5.11.31-7.2.39-2.13.93-5.03,1.24-7.19,2.43-2.36,5.37-4.68,7.76-7.01h0ZM46.61,155.56c-1.82,1.87-3.58,3.88-5.26,5.8-.55.61-1.07,1.25-1.66,1.81l.14-.28c-.48,3.5-1.52,6.95-1.5,10.5-.03,2.33-.17,15.22-.19,17.83,0,0-.97-.16-.97-.16,1.92-6.07,4.73-13.58,6.37-19.66.76-5.4,2.08-10.36,3.07-15.84h0Z"}),(0,r.jsx)("path",{d:"M54.85,106.15c-1.2,7.25-3.01,18.03-4.87,29.12l-7.27,7.24c1.61-9.7,3.5-21.03,4.69-28.15h0c.16-.96.3-1.84.43-2.62-1.14-.17-2.27-.39-3.39-.68h-.01c-.57-.14-1.13-.31-1.69-.49-1.36-.43-2.67-.97-3.93-1.63-.13-.07-.26-.14-.39-.21-4.3-2.88-6.34-7.22-7.52-11.95-.52-4.8-1.91-17.39-2.41-22.05l-.41-3.67c-.26-1.74-.53-3.58-.4-5.36l.69-.61c4.75-4.21,9.94-8.82,14.9-12.77-2.88,5.06-6.27,10.41-9.46,15.38.24,1.99.38,4.57.64,6.38.49,4.52,1.84,16.84,2.38,21.8.18.69.48,1.56.75,2.24.82,2.06,2.28,4.49,4.02,5.52,2.61,1.36,5.65,1.99,8.55,2.36.95.12,3.75.12,4.7.15Z"}),(0,r.jsx)("path",{d:"M54.85,106.15s-2.17,14.49-2.17,14.49c-.73,4.87-1.38,9.79-2.2,14.72l-.03.16s-.12.12-.12.12c-.61.63-7.98,7.92-8.38,8.33,0,0,.26-1.53.26-1.53,0,0,4.75-28.48,4.69-28.16,0,0,.43-2.61.43-2.61l.42.58-3.44-.69s.13.02.13.02h0s-.07,0-.07,0c-8.02-1.79-12.07-6.89-13.95-14.66-.05-.07-1.68-15.53-1.71-15.6,0,0-.85-7.76-.85-7.76-.2-2.64-.89-5.28-.66-8.07,0,0,.15-.14.15-.14,5.76-5.12,11.57-10.26,17.65-15.02,0,0-1.29,2.27-1.29,2.27-2.99,5.24-6.22,10.33-9.47,15.4l.08-.33c.65,6.77,1.51,14.33,2.26,21.14.27,2.35.47,4.7.69,7.06.45,1.47,1.12,3.62,2.15,5.09.96,1.65,2.45,2.79,4.25,3.39,3.56,1.4,7.4,1.8,11.2,1.84h0ZM54.85,106.15c-4.72.07-9.84-.19-13.99-2.7-2.34-1.87-3.53-4.69-4.44-7.46-.58-4.1-1.16-9.96-1.62-14.13-.53-4.75-1.04-9.51-1.5-14.28,3.28-5.11,6.54-10.24,9.54-15.5,0,0,.75.64.75.64-5.34,4.26-10.44,8.82-15.57,13.36,0,0,.17-.34.17-.34-.18,2.49.46,5.07.67,7.68,0,0,.85,7.77.85,7.77l1.7,15.54c.99,4.22,3.32,9.07,7.3,11.59,1.47.88,4.4,1.9,5.79,2.25,0,0,.08.02.08.02l3.34.67.5.1-.08.48s-.43,2.61-.43,2.61c.06-.32-4.69,28.15-4.69,28.16,0,0-.85-.44-.85-.44l7.26-7.25-.14.28c1.49-8.28,3.84-20.59,5.37-29.04h0Z"}),(0,r.jsx)("path",{d:"M35.22,43.86c-4.19,2.99-8.45,5.88-12.74,8.71,0,0,.91-.87.91-.87l-2.42,6.02c-.7,2.06-1.95,3.82-2.96,5.72,0,0-6.17,11.31-6.17,11.31,0,0,.13-2.61.13-2.61l16.9,39.87s-3.05-1.82-3.05-1.82c4.78-.46,22.08-2.12,26.56-2.56-4.1,5.53-20.03,27.07-24.26,32.79-1.33-1.17-12.54-10.3-14.18-11.7-2.09-1.73-6.78-5.61-8.84-7.22-1.27-1.19-2.5-2.61-3.75-3.84.45-3.69.84-7.39,1.35-11.08.43-3.38.9-6.76,1.42-10.14,1.03,6.75,1.87,13.5,2.65,20.27,0,0-.96-2.04-.96-2.04,2.22,1.29,4.18,2.88,6.09,4.57,3.76,3.11,13.73,11.33,17.6,14.53,0,0-4.32.53-4.32.53l18.37-24.83,2.7,4.77c-1.18.13-21.54,2.06-22.04,2.12-.1-.24-17.95-42.34-18.32-43.23.22-.39,6.46-11.86,6.86-12.58,1.05-1.88,1.86-3.88,3.21-5.59.15-.23,4.22-5.95,4.27-6.02,4.97-1.79,9.97-3.49,15.01-5.09h0Z"}),(0,r.jsx)("path",{d:"M35.22,43.86c-4.37,2.98-8.75,6.11-13.19,9.2,0,0,.33-.41.33-.41.36-.51.92-1.11,1.43-1.54,0,0-.25.64-.25.64l-2.35,6.02c-.69,2.09-1.94,3.91-2.93,5.79l-.14-.39c-2.23,4.35-4.37,9.02-6.76,13.33.03-1.06.14-3.32.17-4.39,0,0,.08-1.9.08-1.9,2.52,5.78,6.83,15.83,9.27,21.66,0,0,8.45,19.93,8.45,19.93,0,0,.6,1.41.6,1.41,0,0-1.31-.78-1.31-.78-.94-.56-3.47-2.07-4.36-2.6,0,0,1.52-.15,1.52-.15l26.56-2.56,1.12-.11-.67.9-24.26,32.79-.31.42s-.42-.35-.42-.35c-5.71-4.75-17.25-14.2-22.99-18.9-1.41-1.32-2.63-2.75-3.97-4.05,0,0,.03-.25.03-.25,0,0,1.29-10.63,1.29-10.63.37-2.67,1.64-11.78,1.98-14.28,0,0,.48,3.67.48,3.67.26,2.03,2.89,22.06,3.07,23.45-.58-1.22-1.76-3.74-2.33-4.94,0,0-.68-1.45-.68-1.45,2.72,1.47,5.28,3.38,7.54,5.42,4.28,3.53,14.14,11.67,18.51,15.28-.73.1-4.65.56-5.48.67,0,0-1.15.14-1.15.14,0,0,.69-.94.69-.94,0,0,18.37-24.83,18.37-24.83,0,0,.46-.62.46-.62.54.96,2.91,5.15,3.46,6.11,0,0-.76.07-.76.07l-22.04,2.12-.37.04-.15-.35c-5.26-12.51-13.18-30.86-18.24-43.25,0,0-.08-.19-.08-.19l.1-.18s5.06-9.07,5.06-9.07c1.51-2.5,3.48-6.81,5.2-9.03-.05.05,4.33-5.97,4.32-5.97,5.04-1.77,10.18-3.29,15.13-5.01h0ZM35.22,43.86c-4.93,1.62-10.41,3.72-14.88,5.17-1.94,2.87-5.44,7.41-6.77,10.55-1.51,2.88-5.74,10.8-7.33,13.78,0,0,.02-.37.02-.37,2.72,6.2,6.58,15.25,9.24,21.59,0,0,9.16,21.62,9.16,21.62,0,0-.52-.31-.52-.31l22.04-2.12-.38.74-2.7-4.77s.84.05.84.05l-18.37,24.83-.46-.79s4.32-.53,4.32-.53c0,0-.26.88-.26.88l-11.75-9.7c-3.51-2.73-8.1-7.16-11.88-9.36,0,0,.7-.65.7-.65,0,0,.96,2.04.96,2.04s-.95.27-.95.27l-2.65-20.26h.99s-1.47,10.59-1.47,10.59l-1.29,10.62s-.15-.42-.15-.42c1.24,1.23,2.62,2.76,3.71,3.8,0,0,11.54,9.45,11.54,9.45l11.49,9.49-.73.08s24.26-32.79,24.26-32.79l.45.8-26.56,2.56s.21-.93.21-.93l3.05,1.82-.72.62c-4.78-11.31-12.21-28.67-16.84-39.89,0,0,.83-.15.83-.15,0,0-.15,2.61-.15,2.61l-.77-.22c2.03-3.73,4.29-7.13,6.41-10.86,0,0-.14-.39-.14-.39,1.05-1.91,2.3-3.66,3.01-5.68l2.47-5.99.26.17c-.25.26-.55.41-.9.67l-.2-.04c4.22-2.83,8.53-5.64,12.82-8.58h0Z"}),(0,r.jsxs)("g",{id:"negate_Stroke",children:[(0,r.jsx)("path",{d:"M5.43,188.09c6.91-8.35,14.04-16.49,21.16-24.63,14.47-14.37,53.88-53.6,68.86-68.51,15.11-15.04,54.21-53.96,68.84-68.53,8.18-7.08,16.35-14.17,24.71-21.07-6.94,8.32-14.07,16.46-21.18,24.61-14.45,14.39-53.86,53.61-68.84,68.53-15.11,15.04-54.21,53.96-68.82,68.55-8.17,7.09-16.34,14.18-24.73,21.05h0Z"}),(0,r.jsx)("path",{d:"M5.43,188.09c5.99-6.96,14.92-17.63,20.97-24.8,19.64-20.01,48.52-48.62,68.69-68.7.04-.05,68.83-68.52,68.86-68.55,0,0,24.72-21.08,24.72-21.08,0,0,.7.71.7.71,0,0-21.19,24.62-21.19,24.62,0,0-68.86,68.55-68.86,68.55-20.26,20.17-48.8,48.72-69.01,68.38-7.14,5.97-17.88,14.88-24.89,20.86h0ZM5.43,188.09c7.09-6.03,17.41-15.04,24.56-21.24,11.33-11.43,22.72-23.09,34.22-34.44,21.87-21.79,80.63-80.29,103.25-102.8-.08.09,21.15-24.58,21.15-24.58,0,0,.7.71.7.71.01,0-24.79,21.14-24.68,21.04-22.9,22.8-81.14,80.77-103.27,102.78-11.4,11.45-23.11,22.79-34.59,34.07-6.19,7.1-15.28,17.35-21.36,24.47h0Z"})]})]})};var l=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 194.42",children:[(0,r.jsx)("path",{d:"M65,4.56c-.14,7.71-.56,15.38-1.01,23.05-1.62,11.82-7.75,45.38-9.71,57.69,0,0-2.96-3.5-2.96-3.5,2.19,0,20.9,0,22.53,0-1.01,14.66-3.67,53.52-4.65,67.75-.19,1.95-.03,3.93-.5,5.86-1.41,7.76-2.82,15.53-4.51,23.27-.62-7.9-.95-15.79-1.29-23.67-.19-1.98.24-3.91.31-5.87.81-11.84,3.57-52.03,4.43-64.54,0,0,2.99,3.21,2.99,3.21h-22.87s.6-3.5.6-3.5c2.26-12.42,7.53-45.74,9.96-57.65,2.11-7.38,4.26-14.76,6.68-22.08h0Z"}),(0,r.jsx)("path",{d:"M68.75,41.95c1.04-2.41,2.21-4.84,3.42-7.27.53-.98.89-2.06,1.75-2.85.58-.59,3.24-3.9,3.83-4.58,4.06-4.89,8.19-9.76,12.34-14.55l4.13-4.78,1.08,6.17c1.53,9.97,1.6,20.76-3.46,29.78-2.91,5.06-8.05,8.63-14.12,7.38-4.15-1.61-7.22-5.46-8.98-9.3h0ZM68.75,41.95c3.26,1.88,6.61,3.43,10.26,3.3,1.84.56,3.59.02,5.15-1.31,6.97-6.89,6.6-19.65,5.25-28.71,0,0,5.21,1.4,5.21,1.4-5.06,5.89-10.34,11.71-15.53,17.48-2.97,2.23-7.39,5.58-10.35,7.85h0Z"}),(0,r.jsx)("path",{d:"M109.52,19.57c1.85,1.29,4.57,3.06,6.45,4.3.57.31,1.03.81,1.45,1.34,0,0,2.87,2.99,2.87,2.99,4.37,4.57,8.53,9.32,12.57,14.08-3.61,5.46-9.63,13.61-17.19,10.79-3.65-1.83-5.13-5.1-7.32-8.22-2.71-4.51-5.06-9.56-4.47-15.15,0-.6.27-1.12.52-1.63,1.45-3.01,3.15-5.81,5.13-8.48h0ZM109.52,19.57c.12,2.22.19,7.45.4,9.57.09.64.1,1.19-.1,1.76-.21,1.86.31,3.72,1.07,5.74,1.38,3.53,3.56,6.84,5.94,9.85.49.61.88.92,1.22,1.08,2.96.73,6.87-4.36,8.53-6.69,0,0,.24,3.58.24,3.58-3.92-4.5-7.47-9.22-11.03-13.95-1.94-3.71-3.93-7.35-6.27-10.93h0Z"}),(0,r.jsx)("path",{d:"M136.89,22.85c1.77,6.54,3.34,13.25,4.82,19.84,1.02,3.94.97,8.03,1.51,12.05.26,2.48,3.68,35.33,3.8,36.5-2.62-.67-19.15-4.95-22.15-5.72,0,0,3.73-3.23,3.73-3.23,1.9,18.77,6.68,58.07,8.24,76.34-.07,7.04-.15,14.65-.49,21.68-1.86-6.78-3.59-14.2-5.19-21.06-2.42-17.94-6.33-57.77-8.53-76.31,0,0-.47-4.32-.47-4.32,2.6.68,19.19,4.95,22.18,5.73,0,0-3.73,3.22-3.73,3.22-.68-8.56-4.21-36.25-4.35-44.31.09-6.76.25-13.65.63-20.41h0Z"}),(0,r.jsx)("path",{d:"M80.98,155.48c4.51-3.34,9.17-6.47,13.93-9.43,6.49-3.4,14.44-3.62,21.61-4.47,0,0-2.69,3.59-2.69,3.59-2.68-11.57-5.34-23.97-10.99-34.37-.52-.96-1.78-2.57-2.44-2.83,0,0,.06,0,.1,0,.04,0,.15-.03.13-.02-.67.41-1.27,1.24-1.86,2.11-2.03,3.18-3.54,7.02-4.9,10.63-2.06,5.72-3.95,11.61-5.44,17.53-.41,1.75-1.69,4.05-2.37,5.75-1.66,3.82-3.36,7.65-5.09,11.5h0ZM80.98,155.48c.08-5.24.51-10.56,1.05-15.77.22-3.15,1.52-6.06,2.29-9.11,1.19-4.01,2.47-8,3.93-11.98,2.43-5.88,7.17-21.08,15.92-15.37,8.13,6.46,13.1,30.38,15.53,40.71,0,0,.71,3.28.71,3.28l-3.39.31c-5.24.53-10.61,1-15.71,2.33-1.24.32-2.71,1.32-4.09,1.58,0,0-2.29.59-2.29.59-4.5,1.15-9.41,2.45-13.95,3.43h0Z"}),(0,r.jsx)("path",{d:"M152.18,50.69c4.03,1.25,8.02,2.61,11.98,4.03.26,2.71,1.02,7.33,1.09,10.01-.42,8.79-.68,27.91-.95,36.92,0,0-.04,1.68-.04,1.68-.27.1-15.5,9.07-16.2,9.44,0,0,1.49-2.67,1.49-2.67.38,10.37.84,20.88,2.62,31.1,1.93,8.63,4.09,17.4,6.22,25.98.64,6.52,1.25,13.06,1.58,19.68-2.71-6.03-5.13-12.15-7.52-18.29-1.42-6.36-3.01-12.69-4.51-19.04-3.55-13.37-3.93-27.32-4.44-41.05.31-.18,15.47-9.01,16.3-9.5,0,0-1.49,2.52-1.49,2.52l.54-22.72s.27-11.36.27-11.36c.02-1.91-.1-3.8.35-5.67,0,0,.95-5.66.95-5.66l1.04,1.78c-3.13-2.35-6.23-4.71-9.27-7.19h0Z"}),(0,r.jsx)("path",{d:"M193.22,111.54c-.28,6.8-.85,13.55-1.49,20.3,0,0-1.54,1.07-1.54,1.07-1.32.91-2.88,1.3-4.28,2.04,0,0-4.29,2.02-4.29,2.02-1.59.74-9.37,4.4-10.81,5.08,0,0-1.46-1.98-1.46-1.98l-17.3-23.47s-5.73-7.78-5.73-7.78c5.74,1.99,21.29,7.38,27.24,9.44,0,0-3.74,1.65-3.74,1.65l6.3-14.74c1.78-4.25,4.59-10.52,6.24-14.76,0,0,.17,2.75.17,2.75-.49-.74-.8-1.58-1.14-2.4-2.35-5.64-4.85-11.72-6.94-17.45,3.38,3.92,6.95,8.41,10.18,12.48.92,1.31,2.47,2.88,3.2,4.28,0,0,.79,1.56.79,1.56-1.35,2.5-2.67,5.91-3.83,8.54-2.61,6.1-7.92,18.5-10.55,24.67-.97-.34-19.15-6.63-20.75-7.19,0,0,3.4-4.61,3.4-4.61l17.3,23.47-3.69-.94,8.58-4.03,4.29-2.02c1.46-.6,2.76-1.56,4.3-1.99,0,0-1.63,2.02-1.63,2.02,2.27-6.06,4.6-12.08,7.19-18.02h0Z"}),(0,r.jsx)("path",{d:"M43.27,52.32c-3.14,5.51-6.88,11.36-10.31,16.7,0,0,.71-2.29.71-2.29.34,2.05.47,5.24.78,7.35.5,4.6,1.89,17.27,2.41,22.05,0,0-.06-.34-.06-.34.17.7.49,1.62.77,2.33.82,2.06,2.28,4.48,4.02,5.52,2.61,1.36,5.64,1.99,8.55,2.36.95.12,3.74.12,4.69.15-2.64,16.04-8.31,49.31-10.76,65.05-.24,1.63-1.02,3.46-1.46,5.03-1.53,4.83-3.25,10.24-4.99,15-.11-5.97.05-12.45.21-18.43-.03-2.62.78-5.14,1.11-7.73,0,0,.86-5.13.86-5.13,1.07-6.45,7.34-44.03,8.55-51.34,0,0,2.96,3.49,2.96,3.49-4.48-.25-8.97-1.2-12.9-3.36-4.3-2.88-6.34-7.22-7.52-11.95-.52-4.79-1.91-17.39-2.41-22.05,0,0-.4-3.67-.4-3.67-.26-1.74-.53-3.58-.4-5.36,0,0,.68-.61.68-.61,4.75-4.21,9.94-8.82,14.9-12.77h0Z"}),(0,r.jsx)("path",{d:"M35.22,43.86c-4.19,2.99-8.45,5.88-12.74,8.71,0,0,.91-.87.91-.87l-2.42,6.02c-.7,2.06-1.95,3.82-2.96,5.72,0,0-6.17,11.31-6.17,11.31,0,0,.13-2.61.13-2.61l16.9,39.87s-3.05-1.82-3.05-1.82c4.78-.46,22.08-2.12,26.56-2.56-4.1,5.53-20.03,27.07-24.26,32.79-1.33-1.17-12.54-10.3-14.18-11.7-2.09-1.73-6.78-5.61-8.84-7.22-1.27-1.19-2.5-2.61-3.75-3.84.45-3.69.84-7.39,1.35-11.08.43-3.38.9-6.76,1.42-10.14,1.03,6.75,1.87,13.5,2.65,20.27,0,0-.96-2.04-.96-2.04,2.22,1.29,4.18,2.88,6.09,4.57,3.76,3.11,13.73,11.33,17.6,14.53,0,0-4.32.53-4.32.53l18.37-24.83,2.7,4.77c-1.18.13-21.54,2.06-22.04,2.12-.1-.24-17.95-42.34-18.32-43.23.22-.39,6.46-11.86,6.86-12.58,1.05-1.88,1.86-3.88,3.21-5.59.15-.23,4.22-5.95,4.27-6.02,4.97-1.79,9.97-3.49,15.01-5.09h0Z"})]})};var c=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 194.42",children:[(0,r.jsx)("path",{d:"M105.79,50.05c.42-2.76,1.2-5.67,2.07-8.27,3.61-2.81,12.24-10.09,15.91-13.08,3.48-2.88,12.5-10.34,15.87-13.13,2.72-.34,5.69-.58,8.48-.52-.46,2.75-1.26,5.62-2.11,8.23-3.33,2.76-12.42,10.27-15.88,13.12-3.68,3.07-12.34,10.12-15.84,13.17-2.72.37-5.72.59-8.51.48h0Z"}),(0,r.jsx)("path",{d:"M157.35,15.05c2.74.78,5.59,1.95,8.12,3.18,2.48,4.03,8.97,13.74,11.62,17.86,2.56,3.91,9.19,14.04,11.67,17.83.08,2.81.03,5.85-.3,8.68-2.72-.83-5.53-2.01-8.07-3.21-2.45-3.74-9.13-13.95-11.67-17.83-2.73-4.14-8.98-13.85-11.71-17.8-.11-2.81-.04-5.88.34-8.71h0Z"}),(0,r.jsx)("path",{d:"M160.46,126.61c-.78-2.85-1.28-6-1.56-8.9,2.15-4.49,7.08-15.78,9.22-20.48,2.01-4.5,7.22-16.14,9.17-20.5,2.37-1.7,5-3.43,7.62-4.79.73,2.86,1.2,5.98,1.51,8.87-1.92,4.3-7.17,16.04-9.17,20.5-2.11,4.77-7.16,15.85-9.12,20.52-2.35,1.72-5.02,3.45-7.67,4.77h0Z"}),(0,r.jsx)("path",{d:"M107.13,177.5c.56-2.94,1.5-6.01,2.52-8.77,3.94-3.17,13.39-11.34,17.41-14.71,3.81-3.24,13.68-11.62,17.37-14.75,2.9-.53,6.05-.98,9.03-1.1-.61,2.92-1.56,5.96-2.56,8.73-3.65,3.1-13.59,11.54-17.38,14.75-4.03,3.44-13.5,11.38-17.34,14.79-2.89.56-6.08.99-9.06,1.06h0Z"}),(0,r.jsx)("path",{d:"M39.57,141.27c3.03.09,6.26.55,9.2,1.13,3.87,3.43,13.72,11.57,17.8,15.04,3.91,3.29,14.04,11.81,17.83,15,1.05,2.8,2.06,5.87,2.73,8.83-3.03-.14-6.22-.62-9.16-1.17-3.74-3.15-13.95-11.74-17.83-15-4.16-3.47-13.77-11.67-17.87-14.96-1.08-2.79-2.08-5.89-2.69-8.87h0Z"}),(0,r.jsx)("path",{d:"M12.9,81.72c2.35,1.5,4.69,3.4,6.7,5.26,1.09,4.43,4.22,15.28,5.45,19.85,1.21,4.35,4.33,15.62,5.5,19.83-.8,2.62-1.79,5.43-2.98,7.95-2.32-1.54-4.61-3.44-6.65-5.27-1.15-4.16-4.3-15.52-5.5-19.83-1.3-4.61-4.2-15.38-5.55-19.82.77-2.63,1.8-5.46,3.04-7.96h0Z"}),(0,r.jsx)("path",{d:"M39.57,23.5c.36,2.73.42,5.72.31,8.42-2.67,3.61-8.9,12.79-11.59,16.59-2.53,3.65-9.09,13.09-11.54,16.63-2.51,1.03-5.28,2.03-7.95,2.69-.31-2.73-.35-5.68-.26-8.39,2.42-3.49,9.03-13.01,11.54-16.63,2.67-3.88,8.99-12.84,11.5-16.66,2.5-1.06,5.31-2.04,8-2.66h0Z"}),(0,r.jsx)("path",{d:"M90.24,50.05c-2.72.07-5.65-.19-8.29-.59-3.2-3.01-11.41-10.12-14.8-13.17-3.26-2.88-11.68-10.33-14.83-13.12-.69-2.58-1.32-5.42-1.63-8.12,2.71-.02,5.61.26,8.26.63,3.11,2.76,11.61,10.27,14.83,13.13,3.46,3.04,11.45,10.22,14.87,13.08.72,2.57,1.33,5.45,1.59,8.16h0Z"}),(0,r.jsx)("path",{d:"M99.73,83.2c6.45-7.74,20.19-20.55,31.16-17.83,12.88,2.43,15.9,16.29,13.5,27.28-.75,3.41-1.59,6.76-3.79,9.78-4.75,5.77-10.39,10.84-15.64,16.04-8.08,7.8-16.27,15.49-24.48,23.14,0,0-3.14-1.75-3.14-1.75-12.57-7.29-37.02-21.95-41.04-36.38-2.2-9.69-1.49-20.77,5.17-28.75,2.02-2.15,4.34-4.59,7.28-5.36,6.12-2.22,12.02-.78,16.74,3.18,4.03,3.33,6.89,7.34,9.08,11.6-5.01-4.04-14.4-10.81-20.6-6.72-1.11.6-1.98,1.6-3.06,2.18-.66.35-1.33,1.08-1.85,1.62-3.6,4.36-4.3,10.56-3.67,16.13.14,1.35.35,2.8.72,4.1.78,2.08,2.04,3.82,3.69,5.76,8.86,9.77,20.93,17.25,32.34,23.86,0,0-5.8.72-5.8.72,10.85-10.16,21.81-20.39,32.23-30.94,1.22-1.24,2.46-2.58,3.6-3.86.84-.95,1.13-1.79,1.63-3.24,1.7-5.65,2.95-15.69-3.68-18.27-1.12-.45-2.2-.29-3.48-.25-1.82-.08-4.02-.07-6.25.39-7.17,1.37-13.94,4.29-20.65,7.57h0Z"})]})};var d=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 194.42",children:[(0,r.jsx)("line",{x1:"111.32",y1:"190.5",x2:"141.71",y2:"119.51"}),(0,r.jsx)("path",{d:"M111.32,190.5c-.04-3.37.19-6.93.55-10.27,2.61-5.89,8.78-20.49,11.43-26.61,2.5-5.83,8.98-20.97,11.4-26.62,2.24-2.59,4.51-5.11,7.02-7.5,0,3.45-.25,6.85-.58,10.25-2.39,5.58-8.92,20.83-11.4,26.62-2.65,6.21-8.86,20.6-11.37,26.63-2.16,2.56-4.58,5.19-7.05,7.48h0Z"}),(0,r.jsx)("line",{x1:"131.25",y1:"114.68",x2:"95.69",y2:"190.5"}),(0,r.jsx)("path",{d:"M131.25,114.68c-.18,3.62-.66,7.42-1.24,10.98-3.04,6.28-10.28,21.88-13.37,28.42-2.92,6.23-10.51,22.4-13.34,28.43-2.44,2.75-4.91,5.45-7.61,7.99.23-3.7.72-7.33,1.28-10.96,2.8-5.96,10.44-22.25,13.34-28.43,3.1-6.63,10.36-22,13.3-28.44,2.36-2.72,4.98-5.52,7.65-7.98h0Z"}),(0,r.jsx)("path",{d:"M160.64,46.79c-.65-2.36-.87-4.82-.84-7.26,2.14-4.4,4.24-8.43,8.7-11.4,6.67-4.05,13.93.79,13.91,8.27.1,5.17-1.63,9.43-3.39,13.96-1.85,1.69-3.9,3.2-6.13,4.35,0,0-.12-1.89-.12-1.89-.05-1.12-.2-4.15-.26-5.31,1.66-3.82,3.71-8.79,2.55-12.75-.2-.45-.41-.68-.75-.91l.22.13c-3.33-1.84-7.12,5.88-8.43,8.48-1.56,1.22-3.91,3.12-5.47,4.32h0Z"}),(0,r.jsx)("path",{d:"M152,120.05l-3.65-2.46c-3.78-2.55-14.98-9.35-21.26-10.11-1.89-.23-3.06.41-5.31,1.75-4.13,2.46-9.79,5.84-22.8,1.17-11.19-4.02-13.75-13.65-16-22.15-1.91-7.19-3.55-13.4-9.78-16.2l-.29-.15c-1.93-1.1-6.23,1.48-10.02,3.74-5.31,3.17-11.33,6.77-17.39,5.22-7.97-2.04-12.2-12.5-15.6-20.9-1.36-3.37-2.77-6.86-3.86-8.18-3.05-3.7-8.36-3.59-8.41-3.58l-12.99.41,11-6.88c1.33-.83,13.22-8.02,21.28-5.12,4.67,1.68,8.18,7.23,11.59,12.6,2.16,3.4,4.84,7.63,6.63,8.46.79.37,1.21.52,1.42.58.37-.24,1.07-.8,1.7-1.31,2.08-1.69,5.57-4.52,12.19-8.34.48-.28.95-.54,1.42-.78-3.09.85-6.3,1.26-9.34.2-5.04-1.76-6.45-5.96-7.81-10.02-1.27-3.77-2.7-8.04-7.07-12.74-8.29-3.57-18.42-4.24-18.52-4.25l-7.26-.45,4.89-5.39c.5-.55,12.36-13.45,24.44-11.44,6.81,1.14,11.62,7.54,15.86,13.18,2.67,3.55,5.98,7.96,8.18,8.15,1.82.15,4.29-1.55,6.92-3.35,5.24-3.61,12.43-8.56,22.24-3.9,8.87,4.21,12.56,13.75,15.81,22.16,2,5.15,3.88,10.02,6.43,12.02,4.08,3.2,10.85.53,16.3-1.62,2.66-1.05,4.95-1.95,6.94-2.2,6.4-.8,18.96,8.52,22.65,11.4l2.04,1.59-22.56,58.91ZM126.35,100.43c.51,0,1.04.03,1.59.1,6.58.8,15.59,5.8,20.64,8.9l17.58-45.92c-6.6-4.86-13.47-8.67-15.41-8.41-1.12.14-3.22.97-5.25,1.77-6.35,2.51-15.95,6.29-23.19.61-4.06-3.19-6.28-8.92-8.63-15-2.92-7.55-5.94-15.35-12.29-18.36-6.17-2.93-10.39-.02-15.27,3.34-3.53,2.43-7.16,4.94-11.5,4.56-5.31-.46-9.12-5.54-13.17-10.92-3.46-4.6-7.37-9.81-11.42-10.48-4.17-.69-8.91,1.74-12.62,4.43,4.06.75,9.12,2.01,13.73,4.1l.61.28.46.48c5.83,6.03,7.74,11.71,9.13,15.86,1.27,3.79,1.82,5.06,3.48,5.64,2.29.8,5.9-.48,9.39-1.73,4.73-1.69,9.62-3.43,13.91-1.12,6.55,3.52,11.47,11.62,11.68,11.96l16.66,27.7-22.2-23.5c-.28-.28-7.56-7.44-20.32-.06-6.15,3.55-9.24,6.06-11.29,7.72-3.7,3-5.56,3.92-10.47,1.64-3.65-1.69-6.54-6.24-9.6-11.06-2.51-3.96-5.64-8.89-8.05-9.76-1.75-.63-4.4-.18-7.07.7,1.4.85,2.76,1.97,3.97,3.43,1.77,2.15,3.24,5.79,4.95,10,2.66,6.58,6.3,15.58,10.85,16.74,3.24.83,7.72-1.85,12.06-4.45,5.65-3.37,11.48-6.86,16.91-3.91,9.16,4.19,11.49,12.98,13.54,20.73,2.07,7.82,3.87,14.58,11.6,17.36,9.9,3.55,13.27,1.54,16.85-.59,2.21-1.32,4.67-2.79,8.16-2.79Z"})]})};var u=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 194.42",children:[(0,r.jsx)("path",{d:"M50.15,21.55c3.52-2,7.13-3.59,10.83-5.05,3.61.11,7.22.03,10.83.05,10.8,0,32.53,0,43.33,0,0,0,10.83,0,10.83,0,3.6,1.45,7.4,3.12,10.83,5-3.44,1.88-7.23,3.55-10.83,5,0,0-10.83,0-10.83,0-10.8,0-32.54,0-43.33,0-3.61.02-7.22-.05-10.83.05-3.7-1.46-7.31-3.05-10.83-5.05h0Z"}),(0,r.jsx)("path",{d:"M33.49,38.55c5.21-2.02,10.49-3.61,15.83-5.05,10.52.13,36.6.02,47.5.06,10.45,0,37.39,0,47.5,0,5.23,1.45,10.73,3.09,15.83,5-5.11,1.91-10.6,3.55-15.83,5-9.99,0-37.15,0-47.5,0-11.02.02-36.81-.07-47.5.05-5.34-1.45-10.62-3.03-15.83-5.05h0Z"}),(0,r.jsx)("path",{d:"M22.49,55.88c5.71-2.03,10.49-3.61,16.33-5.05,11.51.13,40.06.02,52,.06,11.44,0,40.93,0,52,0,5.72,1.44,12.73,3.09,18.33,5-5.61,1.91-12.61,3.56-18.33,5-10.94,0-40.67,0-52,0-12.06.02-40.3-.07-52,.05-5.84-1.44-10.62-3.03-16.33-5.05h0Z"}),(0,r.jsx)("path",{d:"M19.15,72.88c6.02-2.03,12.11-3.61,18.25-5.05,12.12.13,42.18.02,54.75.06,12.04,0,43.1,0,54.75,0,6.02,1.44,12.34,3.09,18.25,5-5.91,1.91-12.23,3.56-18.25,5-11.51,0-42.82,0-54.75,0-12.7.02-42.43-.07-54.75.05-6.14-1.44-12.23-3.02-18.25-5.05h0Z"}),(0,r.jsx)("path",{d:"M46.57,95.22c1.19-1.52,2.39-3,3.58-5-1.19-2-2.39-3.48-3.58-5,0,0-3.58,0-3.58,0-3.57,0-10.76,0-14.33,0-1.19-.02-2.39.05-3.58-.05-1.19,1.49-3.58,5.05-3.58,5.05h0l3.58,5.05,21.5-.05Z"}),(0,r.jsx)("path",{d:"M71.49,92.22c1.92-1.85,4.2-3.6,6.37-5.05,4.24.13,14.73.02,19.13.06,4.2,0,15.06,0,19.12,0,2.16,1.48,4.43,3.19,6.38,5-1.94,1.81-4.22,3.52-6.38,5-4.02,0-14.96,0-19.13,0-4.45.02-14.82-.07-19.12.05-2.17-1.45-4.46-3.21-6.38-5.05h0Z"}),(0,r.jsx)("path",{d:"M140.15,90.22c1.04-2.08,2.08-3.56,3.12-5.05,1.04.1,2.08.03,3.12.05,3.12,0,9.39,0,12.5,0,0,0,3.12,0,3.12,0,1.04,1.52,2.08,3,3.12,5-1.04,2-2.08,3.48-3.12,5h-3.12c-3.12,0-9.39,0-12.5,0-1.04.02-2.08-.05-3.12.05-1.04-1.49-2.08-2.97-3.12-5.05h0Z"}),(0,r.jsx)("path",{d:"M27.15,109.55l3.21-5.05,3.21.05c3.2,0,12.83,0,12.83,0h3.21s3.21,5,3.21,5l-3.21,5h-16.04s-3.21.05-3.21.05c-1.07-1.49-2.14-2.97-3.21-5.05h0Z"}),(0,r.jsx)("path",{d:"M75.15,109.55l5.5-5.05,16.5.05s13,0,16.5,0l5.5,5-5.5,5s-12.92,0-16.5,0c-3.85.01-16.5.05-16.5.05l-5.5-5.05h0Z"}),(0,r.jsx)("path",{d:"M140.15,111.22l3.12-5.05c1.04.1,2.08.03,3.12.05,3.12,0,9.39,0,12.5,0,0,0,3.12,0,3.12,0l3.12,5-3.12,5h-15.63s-3.12.05-3.12.05l-3.12-5.05h0Z"}),(0,r.jsx)("polygon",{points:"84.49 130.55 93.49 125.55 84.49 120.55 75.49 120.55 39.49 120.55 31.49 120.5 24.49 125.55 24.49 125.55 31.49 130.61 84.49 130.55"}),(0,r.jsx)("path",{d:"M103.49,125.55l9.04-5.05,9.04.05s27.15,0,36.17,0c0,0,7.04,0,7.04,0l8.04,5-8.04,5h-7.04c-9.01,0-27.16,0-36.17,0-3.01.02-6.03-.05-9.04.05l-9.04-5.05h0Z"}),(0,r.jsx)("path",{d:"M52.82,142.22l3.62-5.05,3.62.05c3.61,0,14.5,0,14.5,0h3.62s2.42,3,3.62,5c-1.21,2-2.42,3.48-3.62,5h-18.13s-3.62.05-3.62.05l-3.62-5.05h0Z"}),(0,r.jsx)("polygon",{points:"105.28 138.55 107.15 143.55 105.28 148.55 94.03 148.6 92.15 143.55 92.15 143.55 94.03 138.5 105.28 138.55"}),(0,r.jsx)("path",{d:"M119.15,142.22l3.54-5.05,3.54.05h14.17s3.54,0,3.54,0l3.54,5-3.54,5h-17.71c-1.18.02-3.54.05-3.54.05l-3.54-5.05h0Z"}),(0,r.jsx)("path",{d:"M66.24,164.61l-11.42-5.05h0c3.72-2.01,7.52-3.6,11.42-5.05l11.42.05h45.67s11.42,0,11.42,0l11.42,5-11.42,5-68.5.05Z"}),(0,r.jsx)("path",{d:"M69.13,169.83l-3.81,5.05h0c.41,1.48,3.81,5.05,3.81,5.05l10.87-.05,3.81-5-3.81-5-10.87-.05Z"}),(0,r.jsx)("polygon",{points:"89.82 174.88 93.57 169.83 98.82 169.88 104.07 169.88 107.82 174.88 104.07 179.88 98.82 179.88 93.57 179.93 89.82 174.88 89.82 174.88"}),(0,r.jsx)("polygon",{points:"128.24 179.88 132.15 174.88 128.24 169.88 116.74 169.83 112.82 174.88 112.82 174.88 116.74 179.93 128.24 179.88"})]})};var h=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 194.42",children:[(0,r.jsx)("path",{d:"M71.82,26.55c10.8,0,32.53,0,43.33,0h10.83c3.6-1.45,7.4-3.12,10.83-5-3.44-1.88-7.23-3.55-10.83-5,0,0-10.83,0-10.83,0-10.8,0-32.53,0-43.33,0-3.61-.02-7.22.05-10.83-.05-3.7,1.46-7.31,3.05-10.83,5.05,3.52,2,7.13,3.59,10.83,5.05,3.61-.11,7.22-.03,10.83-.05Z"}),(0,r.jsx)("path",{d:"M148.22,34.65l-8.94,8.9h-42.46c-11.01.02-36.81-.07-47.5.05-5.34-1.44-10.62-3.03-15.83-5.05,5.21-2.03,10.49-3.61,15.83-5.06,10.52.14,36.6.02,47.5.06h47.5c1.29.35,2.59.72,3.9,1.1Z"}),(0,r.jsx)("path",{d:"M90.82,50.88h41.1l-10.05,10h-31.05c-12.06.02-40.3-.06-52,.06-5.84-1.45-10.62-3.03-16.33-5.06,5.71-2.03,10.49-3.61,16.33-5.05,11.51.13,40.07.02,52,.05Z"}),(0,r.jsx)("path",{d:"M161.16,55.88c-4.87,1.66-10.81,3.12-16.03,4.42l7.08-7.04c3.11.81,6.2,1.68,8.95,2.62Z"}),(0,r.jsx)("path",{d:"M92.16,67.88h22.68l-10.05,10h-12.63c-12.7.02-42.44-.06-54.75.06-6.15-1.44-12.23-3.03-18.25-5.06,6.02-2.03,12.1-3.61,18.25-5.05,12.12.13,42.18.02,54.75.05Z"}),(0,r.jsx)("path",{d:"M165.16,72.88c-5.92,1.91-12.24,3.56-18.25,5h-19.43l10.04-10h9.39c6.02,1.44,12.34,3.09,18.25,5Z"}),(0,r.jsx)("path",{d:"M46.57,95.22c1.19-1.52,2.39-3,3.58-5-1.19-2-2.39-3.48-3.58-5,0,0-3.58,0-3.58,0-3.57,0-10.76,0-14.33,0-1.19-.02-2.39.05-3.58-.05-1.19,1.49-3.58,5.05-3.58,5.05l3.58,5.05,21.5-.05Z"}),(0,r.jsx)("path",{d:"M95.42,87.21l-10.04,9.99c-2.97,0-5.76.02-7.52.07-2.17-1.45-4.46-3.21-6.37-5.05,1.91-1.85,4.2-3.61,6.37-5.06,3.8.12,12.6.04,17.56.05Z"}),(0,r.jsx)("path",{d:"M122.49,92.22c-1.95,1.8-4.22,3.52-6.38,5h-8.06l9.22-9.18c1.8,1.27,3.62,2.69,5.22,4.18Z"}),(0,r.jsx)("path",{d:"M162.03,85.22h-3.12c-3.11,0-9.38,0-12.5,0-1.04-.02-2.08.05-3.12-.05-1.04,1.49-2.08,2.97-3.12,5.05,1.04,2.08,2.08,3.56,3.12,5.05,1.04-.1,2.08-.03,3.12-.05,3.11,0,9.38,0,12.5,0h3.12c1.04-1.52,2.08-3,3.12-5-1.04-2-2.08-3.48-3.12-5Z"}),(0,r.jsx)("path",{d:"M46.4,104.55s-9.63,0-12.83,0l-3.21-.05-3.21,5.05c1.07,2.08,2.14,3.56,3.21,5.05l3.21-.05h16.04l3.21-5-3.21-5h-3.21Z"}),(0,r.jsx)("path",{d:"M119.16,109.55l-5.5,5h-16.5c-1.38.01-3.89.01-6.54.02l10.07-10.02h12.97l5.5,5Z"}),(0,r.jsx)("path",{d:"M158.9,106.22c-3.11,0-9.38,0-12.5,0-1.04-.02-2.08.05-3.12-.05l-3.12,5.05,3.12,5.05,3.12-.05h12.5s3.12,0,3.12,0l3.12-5-3.12-5h-3.12Z"}),(0,r.jsx)("polygon",{points:"39.49 120.55 61.93 120.55 51.85 130.58 31.49 130.6 24.49 125.55 31.49 120.49 39.49 120.55"}),(0,r.jsx)("polygon",{points:"93.49 125.55 84.49 130.55 74.56 130.56 84.57 120.59 93.49 125.55"}),(0,r.jsx)("path",{d:"M164.78,120.55s-7.04,0-7.04,0c-9.01,0-36.17,0-36.17,0l-9.04-.05-9.04,5.05,9.04,5.05c3.01-.11,6.03-.03,9.04-.05,9.01,0,27.15,0,36.17,0h7.04l8.04-5-8.04-5Z"}),(0,r.jsx)("path",{d:"M81.82,142.22c-1.21,2-2.41,3.48-3.62,5h-18.13l-2.28.03,10.08-10.03h10.33s2.41,2.99,3.62,5Z"}),(0,r.jsx)("polygon",{points:"92.15 143.55 94.03 148.6 105.28 148.55 107.15 143.55 105.28 138.55 94.03 138.5 92.15 143.55"}),(0,r.jsx)("path",{d:"M140.4,137.22h-14.17l-3.54-.05-3.54,5.05,3.54,5.05s2.36-.03,3.54-.05h14.17s3.54,0,3.54,0l3.54-5-3.54-5h-3.54Z"}),(0,r.jsx)("path",{d:"M123.32,154.55h-45.67l-11.42-.05c-3.89,1.46-7.7,3.05-11.42,5.05l11.42,5.05,68.5-.05,11.42-5-11.42-5h-11.42Z"}),(0,r.jsx)("path",{d:"M69.13,169.83l-3.81,5.05c.41,1.48,3.81,5.05,3.81,5.05l10.88-.05,3.81-5-3.81-5-10.87-.05Z"}),(0,r.jsx)("polygon",{points:"98.82 169.88 93.57 169.83 89.82 174.88 93.57 179.93 98.82 179.88 104.07 179.88 107.82 174.88 104.07 169.88 98.82 169.88"}),(0,r.jsx)("polygon",{points:"116.74 169.83 112.82 174.88 116.74 179.93 128.24 179.88 132.15 174.88 128.24 169.88 116.74 169.83"}),(0,r.jsx)("polygon",{id:"negate_Stroke_2",points:"177.97 22.83 183.7 10.16 170.45 16.28 11.61 174.88 6.25 188.39 6.25 188.39 19.16 182.47 177.97 22.83"})]})};var m=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 194.42",children:[(0,r.jsx)("path",{d:"M58.67,176.67c-6.71-3.59-13.66-8.07-19.81-13.4l3.05-3.04c5.01,6.1,10.91,11.58,16.76,16.44Z"}),(0,r.jsx)("path",{d:"M126.42,59.18l-7.34,7.31c-2.81-4.69-5.02-9.62-6.22-14.9-2.54,3.93-4.38,8.25-4.92,12.97l-.04.53-1.18,13.7-2.01,2c-2.78-5.99-7.55-16.28-8.99-19.41-.42-.87-1.57-3.33-1.99-4.18-1.47-2.65-2.28-6.03-2.72-8.93-.5-3.19-.88-6.47-1.25-9.63-.29-2.68-.21-5.35.17-7.98-1.8,1.52-3.52,3.12-5.12,4.84-6.95,7.66-12.67,17.42-17.39,26.89-5.07,11.48-7.15,24.48-8.5,36.91l-1.03,10.98c-3.88-4.09-11.76-12.33-15.65-16.43-.83-.94-1.54-1.85-2.17-2.77-.61,1.24-1.21,2.48-1.77,3.71-4.53,10.09-8.39,20.83-8.7,31.91-.33,4.2-.41,8.25.67,12.37,1.09,3.89,2.71,7.6,4.71,11.14l-4.54,4.52c-6.69-8.05-11.14-17.54-11.08-28.41,1.35-20.86,11.02-40.08,21.95-57.5,2.23,5.1,4.56,14.01,8.18,18.15l.81.85c.1-.63.2-1.26.3-1.9,2.03-12.58,5.48-25.2,12.21-36.21,5.18-9.1,11.25-18.49,19.44-25.65,4.98-4.21,10.06-7.83,15.67-11.22L116.38,1.89l-11.87,18.17-.29.44c-.84,1.34-1.58,2.76-2.22,4.21-1.75,4.04-2.78,8.45-2.31,12.81l.37,3.09c.53,3.44.64,6.91,1.76,10.13,5.14-10.21,14.34-18.14,22.61-26.28-.16,1.4-2.64,16.31-2.56,17.2-.22,6.35,1.65,12.14,4.55,17.52Z"}),(0,r.jsx)("path",{d:"M165.64,152.07c-5.99,11.4-16.4,17.99-27.54,23.37-6.95,3.46-14.04,6.51-21.23,9.29,6.53-4.08,12.93-8.33,19.13-12.77,8.75-6.26,17.62-13.41,21.17-23.82,1.13-3.18,1.83-6.45,2.52-9.74,2.24-14.26-5.44-27.26-13.86-38.42-5.88-7.76-13.34-15.37-19.76-23.52l7.15-7.12c1.81,2.35,3.71,4.62,5.57,6.84,10.32,11.9,21.25,23.55,27.4,38.56,4.84,11.61,5.85,26.06-.55,37.33Z"}),(0,r.jsx)("path",{d:"M99.72,82.7v3.06l-8.77,8.73-1.23,1.22-4.66,4.64c.23-.91.52-1.82.87-2.7,1.3-2.94,3.19-5.2,5.45-7.35l8.34-7.6Z"}),(0,r.jsx)("path",{d:"M131.05,154.39c-.28,1.32-.59,2.79-.97,4.07-2.76,8.88-8.79,16.67-15.84,22.41,5.07-7.96,8.95-16.8,8.74-26.23,0-1.25-.07-2.5-.15-3.75-.62,1.28-1.26,2.57-1.92,3.88l-8.16,16.02c-1.07-10.59-.78-26.11-4.57-35.95-1.5-3.28-3.63-5.96-5.92-8.94-1.23-1.49-2.48-3.02-3.69-4.6,1.69,4.24,3.18,8.58,3.42,13.14.48,6.47,1.07,13.87-3.83,19.11-5.51,4.64-13.85,6.56-20.48,2.96-6.18-3.12-7.67-9.02-7.65-15.01.01-2.02.14-3.95.36-5.85-1.23.56-2.32,1.29-3.09,2.2l-1.42,2.01c-7.23,10.38-5.6,24.11-4.17,36.12-4.07-8.77-7.42-18.46-7.26-28.23l16.62-16.55,1.88-1.86,5.33-5.31c1.92-.08,3.91-.13,4.77-.17-.78,3.41-2.24,8.59-2.62,12.05-.37,3.41-.95,7.98.57,10.78,2.76,2.79,7.22,1.68,10.21-.31,1.84-3.58.97-9.56.49-13.86-.75-4.14-3.32-9.51-4.88-13.58-.35-.81-.66-1.63-.94-2.47l6.03-6.01,2.39-2.38,5.59-5.56c.5,2.85,1.92,5.69,3.32,8.16,4,6.03,9.49,11.39,13.07,17.98.76,1.37,1.46,3.03,1.95,4.49.15.47.29.94.43,1.41.31-1.21.56-2.46.73-3.74.86-4.47,1.92-34.18,2.28-39.3,1.08,3.95,8.81,33.62,9.67,36.78.86,3.42,1.01,7.19,1.14,10.51.56,5.25-.41,10.47-1.43,15.58Z"}),(0,r.jsx)("polygon",{points:"149.8 59.5 145.52 57.09 147.71 54.92 149.8 59.5"}),(0,r.jsx)("path",{d:"M142.15,34.58c-.29,2.84-.14,5.67.53,8.41l-6.23,6.2c-2.4-5.1-3.48-10.92-2.1-16.6,1.02-5.26,3.28-10.17,6.42-14.52l9.7-5.07-4.14,10.5c-2.28,4.28-3.78,7.24-4.18,11.08Z"}),(0,r.jsx)("polygon",{id:"negate_Stroke_2","data-name":"negate Stroke 2",points:"178.01 21.7 182.29 12.33 172.39 16.86 13.66 174.23 9.65 184.23 9.65 184.23 19.3 179.85 178.01 21.7"})]})};var p=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 194.42",children:[(0,r.jsx)("path",{d:"M58.66,176.67c-18.78-10.05-39.44-27.04-39.31-50.35,1.36-20.86,11.02-40.08,21.96-57.5,2.22,5.1,4.56,14.02,8.18,18.15,0,0,8.06,8.46,8.06,8.46,0,0-8.6,3.03-8.6,3.03.4-4.31.96-8.37,1.65-12.54,2.02-12.59,5.48-25.21,12.21-36.22,5.18-9.1,11.25-18.49,19.44-25.65,4.99-4.21,10.06-7.83,15.67-11.22,0,0,18.47-10.95,18.47-10.95l-11.88,18.17s-.29.44-.29.44c-.84,1.34-1.58,2.76-2.21,4.21-1.76,4.04-2.79,8.45-2.31,12.81,0,0,.37,3.09.37,3.09.65,4.18.68,8.41,2.63,12.16,0,0,.72,1.48.72,1.48.87,1.81,3.17,6.78,4.04,8.67,0,0-9.55,1.98-9.55,1.98.01-.39.03-.53.04-.77,1.57-17.36,14.94-28.29,26.49-39.66-.16,1.4-2.64,16.3-2.56,17.2-.47,13.56,8.61,24.61,16.92,34.52,10.31,11.9,21.24,23.55,27.4,38.56,4.84,11.61,5.84,26.06-.55,37.33-5.99,11.4-16.4,17.99-27.54,23.37-6.95,3.46-14.04,6.51-21.22,9.29,6.53-4.08,12.93-8.33,19.13-12.77,8.75-6.27,17.62-13.41,21.17-23.82,1.13-3.19,1.83-6.45,2.53-9.74,2.23-14.26-5.45-27.25-13.87-38.42-13.71-18.1-35.96-35.36-33.81-60.54.05-.53.16-1.3.29-1.94,0,0,8.36,4.66,8.36,4.66-6.15,6.12-11.71,13.56-12.72,22.41,0,0-.05.53-.05.53l-1.64,19.06c-1.91-4.14-8.75-18.92-10.54-22.77-.42-.87-1.57-3.33-1.99-4.18-1.47-2.65-2.28-6.03-2.72-8.94-.51-3.19-.88-6.47-1.26-9.63-.87-7.96,1.54-15.91,5.53-22.71,0,0,.48-.79.48-.79.18-.28.31-.49.58-.88,0,0,6.59,7.22,6.59,7.22-6.42,4-12.93,8.42-18.13,14.01-6.95,7.66-12.67,17.42-17.4,26.88-5.06,11.49-7.15,24.48-8.5,36.91,0,0-1.03,10.98-1.03,10.98-3.88-4.09-11.76-12.33-15.65-16.43-3.44-3.9-4.81-7.45-6.65-11.93,0,0,8.95.91,8.95.91-2.23,3.74-4.39,7.94-6.24,11.96-4.54,10.09-8.39,20.83-8.7,31.91-.33,4.2-.41,8.25.67,12.37,4.27,15.18,16.47,27.68,28.4,37.6h0Z"}),(0,r.jsx)("path",{d:"M114.24,180.87c5.06-7.96,8.95-16.79,8.74-26.23-.02-3.99-.59-7.96-.59-11.93.2-3.7.03-7.72-.57-11.23-.35-1.48-1.21-4.61-1.59-6.12,0,0,9.83-1.07,9.83-1.07-.37,5.71-.85,10.66-2.73,16.25-1.89,5.04-4.04,9.48-6.43,14.22,0,0-8.15,16.01-8.15,16.01-1.07-10.58-.79-26.11-4.57-35.95-1.5-3.28-3.64-5.95-5.92-8.94-5.58-6.77-11.51-14.2-12.48-23.41-.11-1.34-.04-3.07-.06-4.41,0,0,0-4.15,0-4.15,0,0,8.34,3.81,8.34,3.81-1.12,1.08-2.34,2.48-2.94,3.83-1.23,3.48-1.1,7.53.01,11.03,2.46,7.07,6.45,14.13,6.85,21.85.47,6.47,1.07,13.86-3.83,19.1-5.51,4.65-13.85,6.57-20.48,2.97-6.18-3.13-7.67-9.02-7.65-15.02.03-4.76.68-9.04,1.75-13.62,0,0,4.97,6.23,4.97,6.23l-.55.04c-3.07.31-6.98,1.43-8.9,3.71,0,0-1.42,2-1.42,2-7.23,10.38-5.59,24.12-4.16,36.12-5.3-11.4-9.38-24.35-6.1-37.01,1.74-8.55,10.37-13.72,18.55-14.66,1.49-.26,7.26-.37,8.89-.46-.78,3.41-2.25,8.59-2.62,12.06-.38,3.41-.95,7.98.57,10.78,2.76,2.79,7.22,1.68,10.2-.31,1.85-3.57.97-9.56.49-13.85-.75-4.14-3.32-9.52-4.87-13.58-2.86-6.65-3.59-14.45-.9-21.29,1.3-2.95,3.19-5.2,5.45-7.35,0,0,8.34-7.61,8.34-7.61v11.42c0,1.36,0,4.51,0,5.81-.19,3.71,1.66,7.53,3.49,10.75,4,6.04,9.48,11.4,13.07,17.98.76,1.37,1.47,3.03,1.95,4.49,1.98,6.31,2.73,12.53,3.22,19.05,0,0-9.44-2-9.44-2,3.04-6.35,6.44-12.25,7.37-19.38.86-4.47,1.93-34.18,2.29-39.3,1.08,3.95,8.8,33.62,9.67,36.78.86,3.42,1.01,7.18,1.14,10.51.56,5.25-.42,10.46-1.43,15.58-.28,1.32-.59,2.79-.98,4.07-2.76,8.88-8.78,16.66-15.83,22.4h0Z"}),(0,r.jsx)("path",{d:"M146.33,23.5c-2.28,4.28-3.78,7.25-4.18,11.08-.49,4.75.25,9.45,2.57,13.8l5.08,11.11-11.03-6.2c-3.93-5.91-6.19-13.43-4.42-20.71,1.02-5.25,3.27-10.17,6.42-14.52l9.7-5.07-4.14,10.5Z"})]})};var f=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 194.42",children:[(0,r.jsx)("path",{d:"M139.75,163.96c2.99-2.66,5.9-5.16,9.25-7.14,2.67-.23,13.67-2.73,16.38-3.21,5.84,1.98,19.55,6.64,25.25,8.58-5.8,5.77-21.12,21.01-27.01,26.88-2.82-1.99-7.75-5.51-10.59-7.5-1.68-.76-2.67-2.3-3.85-3.67-3.11-3.76-6.14-7.57-8.99-11.57,4.72,1.36,9.32,2.96,13.9,4.65,1.68.65,3.46,1.09,4.73,2.42.98.72,6.07,4.31,7.15,5.08,0,0-6.42.53-6.42.53l18.31-18.22,1.92,8.28-16.34-5.55,2.61.16c-1.74.41-13.61,2.64-15,3.21-3.86-.5-7.52-1.66-11.31-2.93h0Z"}),(0,r.jsx)("path",{d:"M134.08,5c2.83,4.27,5.39,8.62,7.82,13,0,0,1.8,3.29,1.8,3.29.66,1.08.69,2.33,1.01,3.51,6.02,21.91,19.01,69.15,25.17,91.54,0,0-9.77.6-9.77.6l1.36-9.33c.49-2.31.36-4.73,1.08-6.99,2.46-6.83,5.03-13.61,7.95-20.29.41,3.24.72,6.46.99,9.68.29,3.22.52,6.43.7,9.63.04,1.32.36,3.47-.07,4.76-1.52,9.07-4.14,28.32-5.56,37.6-8.96-32.61-22.55-82.02-31.49-114.55-.33-1.18-.94-2.27-.93-3.53,0,0-.14-3.75-.14-3.75-.15-5.01-.17-10.05.07-15.17h0Z"}),(0,r.jsx)("path",{d:"M168.42,2.67c2.16.65,3.71,1.37,5.28,2.08-.01.87.15,1.73.21,2.59.26,2.58.78,7.76,1.04,10.34,0,0,.26,2.59.26,2.59-1.43,1.01-2.81,2.02-4.72,3.09-2.08-.66-3.64-1.38-5.23-2.08l-.26-2.59c-.26-2.58-.78-7.76-1.04-10.34-.11-.86-.12-1.73-.31-2.58,1.4-1.01,2.78-2.02,4.76-3.09h0Z"}),(0,r.jsx)("path",{d:"M159.08,34.33c3.86-2.02,7.71-3.56,11.67-5.02.78-.3,1.56.09,2.33.02h4.67s4.78,0,4.78,0c.12,2.89,1.03,22.98,1.17,26.36.55,11.35,1.66,34.48,2.21,45.89-5.64-11.61-15.28-31.33-20.87-42.82-.27-.74-.95-1.28-1.02-2.09-.39-4.2-.67-8.42-.61-12.67,3.38,2.56,6.54,5.39,9.6,8.28.59.57.59,1.43,1.02,2.1,0,0,2.04,4.19,2.04,4.19l8.17,16.76s-9.49,2.43-9.49,2.43c-.54-10.77-1.54-32.44-2-43.21,0,0,5,4.78,5,4.78h-4.67c-.78-.07-1.56.32-2.33.02-3.96-1.46-7.8-3-11.67-5.02h0Z"}),(0,r.jsx)("path",{d:"M92.36,10.6c4.76,6.06,9.18,12.26,13.5,18.6,1.64,2,2.39,4.37,3.4,6.69,0,0,12.35,27.35,12.35,27.35,7.42,16.44,28.47,63.06,35.59,78.84-13.81-13.49-36.99-36.12-50.83-49.63-1-1.1-2.36-1.84-3.15-3.15,0,0-2.57-3.74-2.57-3.74-1.71-2.51-3.39-5.03-5.04-7.6-1.67-2.54-3.29-5.13-4.87-7.77,2.67,1.52,5.3,3.08,7.88,4.69,2.6,1.59,5.17,3.21,7.72,4.85l3.8,2.48c1.33.76,2.1,2.1,3.22,3.08,4.19,4.09,27.21,26.57,31.88,31.13,0,0-8.05,5.63-8.05,5.63-8.2-18.17-29.12-64.5-37.04-82.05-.48-1.15-1.1-2.25-1.67-3.36-1.33-3.53-1.95-7.36-2.93-11.03-1.18-4.96-2.26-9.95-3.2-15.02h0Z"}),(0,r.jsx)("path",{d:"M26.36,8.69c2.36-.24,4.96-.21,7.27-.01,2.44,2.5,8.67,8.39,11.26,10.91,2.47,2.38,8.9,8.57,11.29,10.87.2,2.3.43,4.57.3,7.23-2.65.24-4.92.09-7.23-.02-2.36-2.28-8.84-8.51-11.29-10.87-2.65-2.53-8.7-8.46-11.33-10.84-.29-2.3-.41-4.89-.26-7.26h0Z"}),(0,r.jsx)("path",{d:"M54.51,53.78c3.52-2.63,7.07-4.8,10.8-6.92.6-.4,1.27-.35,1.93-.39.65-.08,1.3-.22,1.94-.32,0,0,15.54-2.71,15.54-2.71,0,0,6.78-1.18,6.78-1.18,0,0-.97,6.81-.97,6.81-.47,3.44-4.17,29.26-4.53,31.95-2.87-.37-24.52-3.04-27.94-3.47,0,0-3.22-.4-3.22-.4-.4-1.22-1.06-3.74-1.6-4.86-.2-.5,0-1.37,0-1.9.07-1.29.18-2.6.29-3.9.26-2.65.53-5.27.99-7.92,1.83,1.97,3.48,4.02,5.15,6.1,1.01,1.28,1.99,2.59,2.95,3.89.66.74.5,1.74.86,2.61,0,0-4.18-3.54-4.18-3.54l23.06,2.87-5.57,4.26,3.84-27.09,5.81,5.63-15.54,2.71c-.65.12-1.3.21-1.94.35-.63.19-1.25.47-1.95.29-4.23-.74-8.31-1.58-12.5-2.86h0Z"}),(0,r.jsx)("path",{d:"M2.97,37.69c2.94,0,6.09.33,8.95.82,3.74,3.24,13.26,10.92,17.2,14.2,3.78,3.11,13.57,11.15,17.23,14.16,1,2.72,1.96,5.71,2.57,8.58-2.94-.04-6.05-.4-8.92-.86-3.62-2.97-13.48-11.08-17.23-14.16-4.02-3.28-13.31-11.02-17.27-14.12-1.03-2.71-1.97-5.74-2.53-8.63h0Z"}),(0,r.jsx)("path",{d:"M54.51,82.67c5.72,3.38,11.26,6.94,16.7,10.61,2.64,1.91,5.66,3.44,7.63,6.05,4.53,4.42,29.65,28.82,34.73,33.76,0,0,17.33,16.83,17.33,16.83l-22.58-8.57c-17.8-6.76-63.14-23.97-80.33-30.5-1.11-.43-2.22-.87-3.38-1.17-3.32-1.38-6.26-3.72-9.39-5.54-4.1-2.64-8.2-5.29-12.23-8.13,4.9.55,9.72,1.29,14.54,2.04,3.55.71,7.3.92,10.7,2.09,1.07.54,2.19.95,3.31,1.37,17,6.45,62.75,23.82,80.33,30.5,0,0-5.26,8.26-5.26,8.26-5.23-5.09-30.09-29.24-34.74-33.74-2.67-1.89-4.28-4.86-6.27-7.45-3.82-5.34-7.54-10.77-11.08-16.39h0Z"}),(0,r.jsx)("path",{d:"M4.25,130.74c2.61-1.12,5.55-2.01,8.27-2.66,4.44,1.56,15.54,5,20.17,6.53,4.43,1.42,15.89,5.1,20.18,6.47,1.82,2.13,3.69,4.52,5.2,6.92-2.63,1.07-5.54,1.93-8.26,2.6-4.24-1.36-15.79-5.06-20.18-6.47-4.7-1.49-15.62-5.08-20.2-6.42-1.84-2.11-3.71-4.54-5.18-6.97h0Z"}),(0,r.jsx)("path",{d:"M64.92,150.81c1.87-1.71,3.81-3.16,5.85-4.51.49-.28.97-.81,1.46-.59.49.16.97.07,1.46.09,1.31.02,4-.01,5.3,0,3.79,4.66,11.36,13.91,15.1,18.51-7,2.25-19.95,6.41-26.97,8.67,0,0-1.62-4.57-1.62-4.57-.37-.88-1.05-3.32-1.54-4.03-.14-.2-.08-.48,0-.76.64-2.62,1.38-5.15,2.41-7.72,2.41,1.34,4.59,2.85,6.73,4.47.24.17.47.34.48.59.06.86,1.08,3.2,1.34,4.1,0,0-6.24-3.09-6.24-3.09l15.38-4.94-2.34,7.92-8.97-10.99,3.87,1.84h-2.92c-.49.03-.97-.07-1.46.09-.49.22-.97-.31-1.46-.59-2.04-1.35-3.98-2.8-5.85-4.5h0Z"}),(0,r.jsx)("path",{d:"M87.95,173.4c3.93-4.12,8.19-7.98,12.49-11.69.8-.83,1.83-1.2,2.87-1.6,0,0,5.87-2.92,5.87-2.92l4.86-2.42s2.01,5.04,2.01,5.04c1.91,4.78,8.22,20.54,10.02,25.06-4.38.08-14.98.28-19.48.36-1.07.05-3.56,0-4.59.13-.5.29-1.02-.24-1.54-.52-2.14-1.32-4.2-2.74-6.2-4.39,1.94-1.72,3.95-3.21,6.04-4.61.5-.3,1-.85,1.52-.58,1.02.11,3.53-.05,4.59-.04,0,0,12.24-.23,12.24-.23l-4.55,6.86-7.33-18.33,6.88,2.62-5.86,2.94c-.94.6-1.85,1.19-3,1.34-5.55,1.21-11.19,2.3-16.84,2.98h0Z"}),(0,r.jsx)("path",{d:"M2.97,171.21c2.29-1.73,4.95-3.31,7.46-4.61,4.75.42,16.51,1.03,21.44,1.37,4.71.29,16.88,1.03,21.44,1.31,2.32,1.62,4.75,3.47,6.84,5.43-2.31,1.69-4.96,3.23-7.45,4.55-4.5-.28-16.78-1.03-21.44-1.31-4.99-.29-16.61-1.08-21.44-1.26-2.33-1.59-4.78-3.48-6.84-5.48h0Z"})]})};var g=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 194.42",children:[(0,r.jsx)("path",{d:"M139.75,163.96c2.99-2.66,5.9-5.16,9.25-7.14,2.67-.23,13.67-2.73,16.38-3.21,5.84,1.98,19.55,6.64,25.25,8.58-5.8,5.77-21.12,21.01-27.01,26.88-2.82-1.99-7.75-5.51-10.59-7.5-1.68-.76-2.67-2.3-3.85-3.67-3.11-3.76-6.14-7.57-8.99-11.57,4.72,1.36,9.32,2.96,13.9,4.65,1.68.65,3.46,1.09,4.73,2.42.98.72,6.07,4.31,7.15,5.08,0,0-6.42.53-6.42.53l18.31-18.22,1.92,8.28-16.34-5.55,2.61.16c-1.74.41-13.61,2.64-15,3.21-3.86-.5-7.52-1.66-11.31-2.93h0Z"}),(0,r.jsx)("path",{d:"M148.2,37.5l-8.15,8.1c-1.76-6.44-3.44-12.55-4.98-18.15-.34-1.18-.95-2.27-.93-3.53l-.14-3.75c-.15-5.01-.17-10.05.08-15.17,2.83,4.27,5.39,8.62,7.82,13l1.8,3.29c.66,1.08.69,2.32,1.01,3.51.99,3.62,2.18,7.93,3.49,12.7Z"}),(0,r.jsx)("path",{d:"M172.12,104.4c-1.52,9.06-4.15,28.32-5.56,37.59-6.38-23.23-15.12-54.99-22.85-83.1l8.14-8.1c4.01,14.56,8.55,31.08,12.41,45.14,1.95-5.25,3.99-10.45,6.24-15.6.41,3.24.72,6.46.99,9.68.29,3.22.51,6.43.7,9.63.04,1.32.36,3.47-.07,4.76Z"}),(0,r.jsx)("path",{d:"M174.34,11.48l-9.14,9.09-.19-1.9c-.26-2.57-.78-7.76-1.04-10.34-.11-.86-.13-1.72-.31-2.58,1.4-1.01,2.78-2.02,4.76-3.09,2.16.66,3.72,1.37,5.29,2.08-.01.87.14,1.73.21,2.59.11,1.06.25,2.57.42,4.15Z"}),(0,r.jsx)("path",{d:"M185.91,101.58c-5.64-11.61-15.28-31.33-20.87-42.82-.26-.75-.94-1.28-1.02-2.1-.39-4.19-.68-8.42-.61-12.66,3.39,2.56,6.55,5.39,9.61,8.28.29.28.44.64.57,1-.23-5-.45-9.86-.63-13.96-.74-.02-1.48.31-2.21.03-1.79-.66-3.56-1.33-5.32-2.07l7.98-7.95h9.12c.12,2.89,1.03,22.98,1.17,26.37.55,11.35,1.66,34.47,2.21,45.88Z"}),(0,r.jsx)("path",{d:"M105.99,79.51l-5.63,5.61c-1.61-2.36-3.19-4.75-4.75-7.16-1.67-2.55-3.29-5.14-4.87-7.77,2.67,1.51,5.3,3.08,7.88,4.68,2.48,1.52,4.94,3.06,7.37,4.64Z"}),(0,r.jsx)("path",{d:"M114.26,71.28c-5.68-12.6-10.94-24.25-14.11-31.28-.48-1.15-1.1-2.25-1.67-3.36-1.33-3.53-1.95-7.36-2.93-11.02-1.18-4.96-2.26-9.96-3.19-15.02,4.76,6.06,9.18,12.26,13.5,18.6,1.63,1.99,2.39,4.37,3.4,6.69l12.35,27.35c.07.16.15.33.23.5l-7.58,7.54Z"}),(0,r.jsx)("path",{d:"M157.2,142.08c-13.22-12.91-35.02-34.2-48.99-47.85l7.08-7.05c2.52,2.46,6.61,6.45,11,10.74-2.17-4.81-4.46-9.87-6.75-14.96l7.57-7.54c9.4,20.82,24.32,53.87,30.09,66.66Z"}),(0,r.jsx)("path",{d:"M26.36,8.69c2.36-.24,4.96-.21,7.27-.01,2.44,2.5,8.67,8.39,11.26,10.91,2.47,2.38,8.9,8.57,11.29,10.87.2,2.3.43,4.57.3,7.23-2.65.24-4.92.09-7.23-.02-2.36-2.28-8.84-8.51-11.29-10.87-2.65-2.53-8.7-8.46-11.33-10.84-.29-2.3-.41-4.89-.26-7.26h0Z"}),(0,r.jsx)("path",{d:"M54.51,53.78c3.52-2.63,7.07-4.8,10.8-6.92.6-.4,1.27-.35,1.93-.39.65-.08,1.3-.22,1.94-.32l15.54-2.71,6.78-1.18s-.97,6.81-.97,6.81c-.47,3.44-4.17,29.26-4.53,31.95-2.87-.37-24.52-3.04-27.94-3.47,0,0-3.22-.4-3.22-.4-.4-1.22-1.06-3.74-1.6-4.86-.2-.5,0-1.37,0-1.9.07-1.29.18-2.6.29-3.9.26-2.65.53-5.27.99-7.92,1.83,1.97,3.48,4.02,5.15,6.1,1.01,1.28,1.99,2.59,2.95,3.89.66.74.5,1.74.86,2.61,0,0-4.18-3.54-4.18-3.54l23.06,2.87s-5.57,4.26-5.57,4.26l3.84-27.09s5.81,5.63,5.81,5.63l-15.54,2.71c-.65.12-1.3.21-1.94.35-.63.19-1.25.47-1.95.29-4.23-.74-8.31-1.58-12.5-2.86h0Z"}),(0,r.jsx)("path",{d:"M2.97,37.69c2.94,0,6.09.33,8.95.82,3.74,3.24,13.26,10.92,17.2,14.2,3.78,3.11,13.57,11.15,17.23,14.16,1,2.72,1.96,5.71,2.57,8.58-2.94-.04-6.05-.4-8.92-.86-3.62-2.97-13.48-11.08-17.23-14.16-4.02-3.28-13.31-11.02-17.27-14.12-1.03-2.71-1.97-5.74-2.53-8.63h0Z"}),(0,r.jsx)("path",{d:"M69.45,115.89l-7.78,7.74c-13.5-5.12-26.24-9.96-33.7-12.79-1.11-.42-2.22-.87-3.38-1.17-3.32-1.38-6.26-3.72-9.38-5.54-4.11-2.64-8.21-5.29-12.24-8.13,4.9.55,9.73,1.29,14.55,2.04,3.54.71,7.3.92,10.69,2.09,1.08.54,2.2.94,3.31,1.36,8.14,3.09,22.86,8.69,37.93,14.4Z"}),(0,r.jsx)("path",{d:"M82.5,102.89l-7.09,7.06c-1.59-1.53-2.82-2.73-3.55-3.44-2.67-1.89-4.28-4.87-6.27-7.45-3.82-5.34-7.55-10.77-11.08-16.4,5.72,3.38,11.26,6.95,16.7,10.61,2.64,1.92,5.66,3.44,7.63,6.05.73.72,2.01,1.96,3.66,3.57Z"}),(0,r.jsx)("path",{d:"M130.89,149.91l-22.59-8.57c-7.75-2.94-20.71-7.86-34.31-13.03l7.77-7.75c2.56.98,5.08,1.93,7.52,2.86-1.78-1.72-3.55-3.45-5.26-5.1l7.09-7.06c8.79,8.55,19.36,18.81,22.45,21.82l17.33,16.83Z"}),(0,r.jsx)("path",{d:"M46.27,138.96l-7.97,7.94c-3.45-1.1-6.74-2.15-8.66-2.77-4.7-1.49-15.62-5.08-20.2-6.42-1.84-2.11-3.71-4.54-5.19-6.97,2.62-1.13,5.55-2.01,8.28-2.66,4.43,1.56,15.53,5,20.16,6.53,2.86.92,8.67,2.78,13.58,4.35Z"}),(0,r.jsx)("path",{d:"M58.08,148c-1.87.76-3.88,1.41-5.86,1.97l4.3-4.28c.55.76,1.07,1.53,1.56,2.31Z"}),(0,r.jsx)("path",{d:"M64.92,150.81c1.87-1.71,3.81-3.16,5.85-4.51.49-.28.97-.81,1.46-.59.49.16.97.07,1.46.09,1.31.02,4-.01,5.3,0,3.79,4.66,11.36,13.91,15.1,18.51-7,2.25-19.95,6.41-26.97,8.67,0,0-1.62-4.57-1.62-4.57-.37-.88-1.05-3.32-1.54-4.03-.14-.2-.08-.48,0-.76.64-2.62,1.38-5.15,2.41-7.72,2.41,1.34,4.59,2.85,6.73,4.47.24.17.47.34.48.59.06.86,1.08,3.2,1.34,4.1,0,0-6.24-3.09-6.24-3.09l15.38-4.94-2.34,7.92-8.97-10.99,3.87,1.84h-2.92c-.49.03-.97-.07-1.46.09-.49.22-.97-.31-1.46-.59-2.04-1.35-3.98-2.8-5.85-4.5h0Z"}),(0,r.jsx)("path",{d:"M87.95,173.4c3.93-4.12,8.19-7.98,12.49-11.69.8-.83,1.83-1.2,2.87-1.6,0,0,5.87-2.92,5.87-2.92l4.86-2.42s2.01,5.04,2.01,5.04c1.91,4.78,8.22,20.54,10.02,25.06-4.38.08-14.98.28-19.48.36-1.07.05-3.56,0-4.59.13-.5.29-1.02-.24-1.54-.52-2.14-1.32-4.2-2.74-6.2-4.39,1.94-1.72,3.95-3.21,6.04-4.61.5-.3,1-.85,1.52-.58,1.02.11,3.53-.05,4.59-.04,0,0,12.24-.23,12.24-.23l-4.55,6.86-7.33-18.33,6.88,2.62-5.86,2.94c-.94.6-1.85,1.19-3,1.34-5.55,1.21-11.19,2.3-16.84,2.98h0Z"}),(0,r.jsx)("path",{d:"M17.98,167.13l-9.02,8.97c-2.07-1.46-4.18-3.13-5.99-4.89,2.29-1.73,4.95-3.32,7.46-4.61,1.77.16,4.53.34,7.55.53Z"}),(0,r.jsx)("path",{d:"M60.15,174.71c-2.31,1.69-4.95,3.23-7.45,4.56-4.5-.28-16.78-1.03-21.44-1.32-1.67-.1-4.08-.25-6.73-.41l9.48-9.44c5.55.34,15.32.94,19.3,1.18,2.32,1.62,4.75,3.48,6.84,5.43Z"}),(0,r.jsx)("polygon",{id:"negate_Stroke_2",points:"178.01 21.7 182.29 12.33 172.39 16.86 13.66 174.23 9.65 184.23 9.65 184.23 19.3 179.85 178.01 21.7"})]})};var y=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 194.42",children:[(0,r.jsx)("path",{d:"M59.19,184.72c-13.22-7.55-28.29-16.26-41.36-23.99,0,0-5.68-3.4-5.68-3.4,3.98-1.46,26.92-9.72,31.46-11.37,0,0-2.82,6.78-2.82,6.78-2.58-4.13-5.04-8.33-7.17-12.71-7.52-14.3-19.35-36.21-26.97-50.49,7.96,3.07,49.46,19.09,58.35,22.52,0,0-6.77,4.11-6.77,4.11.92-8.16,4.42-39.28,5.27-46.87,0,0,7.47,8.59,7.47,8.59l8.89,10.22-8.7,2.42c3.01-17.2,11.36-65.06,14.26-81.64,3.36,16.04,12.75,60.8,16.24,77.48,0,0-8.98-1.86-8.98-1.86,4.53-6.4,13.65-19.36,18.18-25.76,0,9.81,0,35.83,0,45.98,0,0-8.08-3.94-8.08-3.94,10.06-7.88,51.8-40.56,61.09-47.83-3.8,10.06-29.35,78.66-33.77,90.41,0,0-5.21-6.72-5.21-6.72,9.84-1.02,21.62-2.33,31.38-3.42,8.94-.52,21.7-1.08,30.67-1.53-17.86,15.82-38.04,33.53-56.19,49.04,13.03-14.95,28.75-32.6,42.04-47.32,0,0,3.27,6.9,3.27,6.9-4.59.76-14.32,2.39-18.72,3.04-9.73,1.02-21.57,2.13-31.4,3.25,0,0-8.04.85-8.04.85,0,0,2.83-7.58,2.83-7.58l27.56-73.78s7.77,5.69,7.77,5.69c-5.75,4.5-50.84,39.81-55.19,43.22,0-6.89,0-33.14,0-40.49,0,0,9.08,2.88,9.08,2.88,0,0-9.1,12.89-9.1,12.89l-6.62,9.38c-1.48-7.04-11.55-55.08-13.26-63.24,0,0,9.82-.17,9.82-.17-1.34,7.56-10.52,60.33-11.58,66.35,0,0-6.89-7.93-6.89-7.93l-8.89-10.22,8.74-2.72-4,35.56s-.72,6.44-.72,6.44c-1.39-.57-48.59-18.74-51.82-20,0,0,6.21-7.03,6.21-7.03,4.92,9.12,15.88,29.81,20.72,38.56,3.41,5.8,6.31,12.4,9.17,18.51-3.57.86-27.09,6.41-31.16,7.39,0,0,.88-5.77.88-5.77,12.04,9.24,25.82,19.89,37.75,29.34h0Z"}),(0,r.jsx)("path",{d:"M160.08,102.94c-.36-2.25-.5-4.76-.44-6.98,2.27-2.31,7.59-8.19,9.87-10.63,2.15-2.33,7.75-8.41,9.83-10.67,2.21-.15,4.39-.34,6.95-.17.38,2.54.37,4.73.4,6.94-2.06,2.23-7.7,8.35-9.83,10.67-2.29,2.5-7.65,8.22-9.8,10.7-2.21.24-4.72.31-6.99.13h0Z"}),(0,r.jsx)("path",{d:"M113.41,49.61c-1.49-1.96-2.4-3.71-3.33-5.46.56-1.19.95-2.43,1.44-3.65,1.39-3.65,4.17-11.01,5.56-14.67,0,0,1.39-3.67,1.39-3.67,1.88-.68,3.73-1.38,6.06-1.9,1.41,1.93,2.33,3.68,3.29,5.44l-1.39,3.67c-1.39,3.65-4.17,11.01-5.56,14.67-.44,1.23-.97,2.43-1.34,3.68-1.86.69-3.7,1.39-6.11,1.88h0Z"}),(0,r.jsx)("path",{d:"M44.78,75.5c-2.77-1.43-5.55-3.28-8.01-5.12-2.17-4.9-7.94-16.82-10.28-21.86-2.27-4.79-8.14-17.19-10.33-21.83.17-3.07.48-6.37,1.07-9.42,2.74,1.48,5.48,3.32,7.96,5.14,2.17,4.58,8.08,17.08,10.33,21.83,2.42,5.07,7.95,16.94,10.38,21.81-.14,3.07-.48,6.39-1.12,9.44h0Z"}),(0,r.jsx)("path",{d:"M24.52,142.5c-1.85,1.37-3.4,2.2-4.97,3.05-.8-.55-1.69-.95-2.53-1.43-2.55-1.39-7.68-4.17-10.22-5.56,0,0-2.56-1.39-2.56-1.39-.13-1.8-.27-3.56-.17-5.78,1.81-1.3,3.37-2.13,4.94-3l2.56,1.39c2.55,1.39,7.68,4.17,10.22,5.56.86.44,1.68.97,2.58,1.34.14,1.77.29,3.53.14,5.83h0Z"}),(0,r.jsx)("path",{d:"M132.21,68.38s1.57-2.25,2.35-3.38c2.38-3.34,7.17-10.05,9.56-13.39l3.43-4.47-.79-7.92-7.35,2.11s-3.43,4.47-3.43,4.47c-2.38,3.34-7.17,10.05-9.56,13.39-.81,1.1-1.55,2.26-2.43,3.32l-.35,8.6,8.57-2.74Z"})]})};var _=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 194.42",children:[(0,r.jsx)("path",{d:"M130.75,180.72c5.27-6.05,10.98-12.53,16.79-19.09v4.62c-5.7,4.95-11.34,9.81-16.79,14.47Z"}),(0,r.jsx)("path",{d:"M163.86,52.95c-3.28,8.7-22.85,61.21-30.93,82.83,4.81-.51,9.8-1.06,14.61-1.59v10.15c-7.27.73-14.9,1.48-21.6,2.24l-8.04.85,2.83-7.57,21.34-57.15c-15.49,12.14-38.19,29.91-41.21,32.28v-24.73h0s-6.63,9.39-6.63,9.39c-.86-4.08-4.59-21.9-7.92-37.77-3,17.24-6.47,37.16-7.1,40.71l-6.89-7.92-1.42-1.64-2.73,24.25-.73,6.44c-.97-.4-24.17-9.34-39.25-15.16,5.09,9.53,11.11,20.81,14.36,26.69,3.41,5.79,6.31,12.4,9.17,18.51-2.64.64-16.23,3.85-24.75,5.87,10.61,8.15,22.09,17.06,32.23,25.09-13.22-7.55-28.29-16.26-41.36-23.99l-5.67-3.4c3.05-1.11,17.27-6.24,25.77-9.32-1.53-2.61-2.99-5.27-4.31-7.99-7.52-14.29-19.35-36.2-26.98-50.49,6.76,2.61,37.66,14.54,52.3,20.19,1.38-12.25,3.85-34.22,4.55-40.43l7.47,8.59,2,2.3c3.73-21.36,10.01-57.36,12.45-71.3,2.76,13.2,9.6,45.8,13.88,66.24,4.16-5.89,8.75-12.4,11.57-16.38v35.7c15.89-12.42,45.38-35.52,53-41.49Z"}),(0,r.jsx)("path",{d:"M186.94,131.68c-4.47,3.96-9.08,8.03-13.77,12.17v-11.51c4.9-.23,9.73-.45,13.77-.66Z"}),(0,r.jsx)("path",{d:"M160.08,102.94c-.36-2.25-.5-4.76-.44-6.98,2.27-2.31,7.59-8.19,9.87-10.63,2.15-2.33,7.75-8.41,9.83-10.67,2.21-.15,4.39-.34,6.95-.17.38,2.54.37,4.73.4,6.94-2.06,2.23-7.7,8.35-9.83,10.67-2.29,2.5-7.65,8.22-9.8,10.7-2.21.24-4.72.31-6.99.13h0Z"}),(0,r.jsx)("path",{d:"M113.41,49.61c-1.49-1.96-2.4-3.71-3.33-5.46.56-1.19.95-2.43,1.44-3.65,1.39-3.65,4.17-11.01,5.56-14.67,0,0,1.39-3.67,1.39-3.67,1.88-.68,3.73-1.38,6.06-1.9,1.41,1.93,2.33,3.68,3.29,5.44l-1.39,3.67c-1.39,3.65-4.17,11.01-5.56,14.67-.44,1.23-.97,2.43-1.34,3.68-1.86.69-3.7,1.39-6.11,1.88h0Z"}),(0,r.jsx)("path",{d:"M44.78,75.5c-2.77-1.43-5.55-3.28-8.01-5.12-2.17-4.9-7.94-16.82-10.28-21.86-2.27-4.79-8.14-17.19-10.33-21.83.17-3.07.48-6.37,1.07-9.42,2.74,1.48,5.48,3.32,7.96,5.14,2.17,4.58,8.08,17.08,10.33,21.83,2.42,5.07,7.95,16.94,10.38,21.81-.14,3.07-.48,6.39-1.12,9.44h0Z"}),(0,r.jsx)("path",{d:"M24.52,142.5c-1.85,1.37-3.4,2.2-4.97,3.05-.8-.55-1.69-.95-2.53-1.43-2.55-1.39-7.68-4.17-10.22-5.56,0,0-2.56-1.39-2.56-1.39-.13-1.8-.27-3.56-.17-5.78,1.81-1.3,3.37-2.13,4.94-3l2.56,1.39c2.55,1.39,7.68,4.17,10.22,5.56.86.44,1.68.97,2.58,1.34.14,1.77.29,3.53.14,5.83h0Z"}),(0,r.jsx)("path",{d:"M132.21,68.38s1.57-2.25,2.35-3.38c2.38-3.34,7.17-10.05,9.56-13.39l3.43-4.47-.79-7.92-7.35,2.11s-3.43,4.47-3.43,4.47c-2.38,3.34-7.17,10.05-9.56,13.39-.81,1.1-1.55,2.26-2.43,3.32l-.35,8.6,8.57-2.74Z"}),(0,r.jsx)("path",{d:"M164.63,134.61v40.69c-1.46,2.73-3.16,5.61-5,8.14-1.84-2.53-3.53-5.41-5-8.14v-40.69c-.02-2.71.06-5.43-.05-8.14,1.48-2.82,3.07-5.53,5.05-8.14,1.98,2.61,3.57,5.32,5.06,8.14-.11,2.71-.04,5.43-.06,8.14Z"})]})};var b=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 194.42",children:[(0,r.jsx)("path",{d:"M130.75,180.72c5.27-6.05,10.98-12.53,16.79-19.09v4.62c-5.7,4.95-11.34,9.81-16.79,14.47Z"}),(0,r.jsx)("path",{d:"M163.86,52.95c-3.28,8.7-22.85,61.21-30.93,82.83,4.81-.51,9.8-1.06,14.61-1.59v10.15c-7.27.73-14.9,1.48-21.6,2.24l-8.04.85,2.83-7.57,21.34-57.15c-15.49,12.14-38.19,29.91-41.21,32.28v-24.73h0s-6.63,9.39-6.63,9.39c-.86-4.08-4.59-21.9-7.92-37.77-3,17.24-6.47,37.16-7.1,40.71l-6.89-7.92-1.42-1.64-2.73,24.25-.73,6.44c-.97-.4-24.17-9.34-39.25-15.16,5.09,9.53,11.11,20.81,14.36,26.69,3.41,5.79,6.31,12.4,9.17,18.51-2.64.64-16.23,3.85-24.75,5.87,10.61,8.15,22.09,17.06,32.23,25.09-13.22-7.55-28.29-16.26-41.36-23.99l-5.67-3.4c3.05-1.11,17.27-6.24,25.77-9.32-1.53-2.61-2.99-5.27-4.31-7.99-7.52-14.29-19.35-36.2-26.98-50.49,6.76,2.61,37.66,14.54,52.3,20.19,1.38-12.25,3.85-34.22,4.55-40.43l7.47,8.59,2,2.3c3.73-21.36,10.01-57.36,12.45-71.3,2.76,13.2,9.6,45.8,13.88,66.24,4.16-5.89,8.75-12.4,11.57-16.38v35.7c15.89-12.42,45.38-35.52,53-41.49Z"}),(0,r.jsx)("path",{d:"M160.08,102.94c-.36-2.25-.5-4.76-.44-6.98,2.27-2.31,7.59-8.19,9.87-10.63,2.15-2.33,7.75-8.41,9.83-10.67,2.21-.15,4.39-.34,6.95-.17.38,2.54.37,4.73.4,6.94-2.06,2.23-7.7,8.35-9.83,10.67-2.29,2.5-7.65,8.22-9.8,10.7-2.21.24-4.72.31-6.99.13h0Z"}),(0,r.jsx)("path",{d:"M113.41,49.61c-1.49-1.96-2.4-3.71-3.33-5.46.56-1.19.95-2.43,1.44-3.65,1.39-3.65,4.17-11.01,5.56-14.67,0,0,1.39-3.67,1.39-3.67,1.88-.68,3.73-1.38,6.06-1.9,1.41,1.93,2.33,3.68,3.29,5.44l-1.39,3.67c-1.39,3.65-4.17,11.01-5.56,14.67-.44,1.23-.97,2.43-1.34,3.68-1.86.69-3.7,1.39-6.11,1.88h0Z"}),(0,r.jsx)("path",{d:"M44.78,75.5c-2.77-1.43-5.55-3.28-8.01-5.12-2.17-4.9-7.94-16.82-10.28-21.86-2.27-4.79-8.14-17.19-10.33-21.83.17-3.07.48-6.37,1.07-9.42,2.74,1.48,5.48,3.32,7.96,5.14,2.17,4.58,8.08,17.08,10.33,21.83,2.42,5.07,7.95,16.94,10.38,21.81-.14,3.07-.48,6.39-1.12,9.44h0Z"}),(0,r.jsx)("path",{d:"M24.52,142.5c-1.85,1.37-3.4,2.2-4.97,3.05-.8-.55-1.69-.95-2.53-1.43-2.55-1.39-7.68-4.17-10.22-5.56,0,0-2.56-1.39-2.56-1.39-.13-1.8-.27-3.56-.17-5.78,1.81-1.3,3.37-2.13,4.94-3l2.56,1.39c2.55,1.39,7.68,4.17,10.22,5.56.86.44,1.68.97,2.58,1.34.14,1.77.29,3.53.14,5.83h0Z"}),(0,r.jsx)("path",{d:"M132.21,68.38s1.57-2.25,2.35-3.38c2.38-3.34,7.17-10.05,9.56-13.39l3.43-4.47-.79-7.92-7.35,2.11s-3.43,4.47-3.43,4.47c-2.38,3.34-7.17,10.05-9.56,13.39-.81,1.1-1.55,2.26-2.43,3.32l-.35,8.6,8.57-2.74Z"}),(0,r.jsx)("path",{d:"M167.53,134.61v40.69c-1.46,2.73-3.16,5.61-5,8.14-1.84-2.53-3.53-5.41-5-8.14v-40.69c-.02-2.71.06-5.43-.05-8.14,1.48-2.82,3.07-5.53,5.05-8.14,1.98,2.61,3.57,5.32,5.06,8.14-.11,2.71-.04,5.43-.06,8.14Z"}),(0,r.jsx)("path",{d:"M181.15,134.61v40.69c-1.46,2.73-3.16,5.61-5,8.14-1.84-2.53-3.53-5.41-5-8.14v-40.69c-.02-2.71.06-5.43-.05-8.14,1.48-2.82,3.07-5.53,5.05-8.14,1.98,2.61,3.57,5.32,5.06,8.14-.11,2.71-.04,5.43-.06,8.14Z"})]})};var v=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 194.42",children:[(0,r.jsx)("path",{d:"M130.75,180.72c5.27-6.05,10.98-12.53,16.79-19.09v4.62c-5.7,4.95-11.34,9.81-16.79,14.47Z"}),(0,r.jsx)("path",{d:"M163.86,52.95c-3.28,8.7-22.85,61.21-30.93,82.83,4.81-.51,9.8-1.06,14.61-1.59v10.15c-7.27.73-14.9,1.48-21.6,2.24l-8.04.85,2.83-7.57,21.34-57.15c-15.49,12.14-38.19,29.91-41.21,32.28v-24.73h0s-6.63,9.39-6.63,9.39c-.86-4.08-4.59-21.9-7.92-37.77-3,17.24-6.47,37.16-7.1,40.71l-6.89-7.92-1.42-1.64-2.73,24.25-.73,6.44c-.97-.4-24.17-9.34-39.25-15.16,5.09,9.53,11.11,20.81,14.36,26.69,3.41,5.79,6.31,12.4,9.17,18.51-2.64.64-16.23,3.85-24.75,5.87,10.61,8.15,22.09,17.06,32.23,25.09-13.22-7.55-28.29-16.26-41.36-23.99l-5.67-3.4c3.05-1.11,17.27-6.24,25.77-9.32-1.53-2.61-2.99-5.27-4.31-7.99-7.52-14.29-19.35-36.2-26.98-50.49,6.76,2.61,37.66,14.54,52.3,20.19,1.38-12.25,3.85-34.22,4.55-40.43l7.47,8.59,2,2.3c3.73-21.36,10.01-57.36,12.45-71.3,2.76,13.2,9.6,45.8,13.88,66.24,4.16-5.89,8.75-12.4,11.57-16.38v35.7c15.89-12.42,45.38-35.52,53-41.49Z"}),(0,r.jsx)("path",{d:"M160.08,102.94c-.36-2.25-.5-4.76-.44-6.98,2.27-2.31,7.59-8.19,9.87-10.63,2.15-2.33,7.75-8.41,9.83-10.67,2.21-.15,4.39-.34,6.95-.17.38,2.54.37,4.73.4,6.94-2.06,2.23-7.7,8.35-9.83,10.67-2.29,2.5-7.65,8.22-9.8,10.7-2.21.24-4.72.31-6.99.13h0Z"}),(0,r.jsx)("path",{d:"M113.41,49.61c-1.49-1.96-2.4-3.71-3.33-5.46.56-1.19.95-2.43,1.44-3.65,1.39-3.65,4.17-11.01,5.56-14.67,0,0,1.39-3.67,1.39-3.67,1.88-.68,3.73-1.38,6.06-1.9,1.41,1.93,2.33,3.68,3.29,5.44l-1.39,3.67c-1.39,3.65-4.17,11.01-5.56,14.67-.44,1.23-.97,2.43-1.34,3.68-1.86.69-3.7,1.39-6.11,1.88h0Z"}),(0,r.jsx)("path",{d:"M44.78,75.5c-2.77-1.43-5.55-3.28-8.01-5.12-2.17-4.9-7.94-16.82-10.28-21.86-2.27-4.79-8.14-17.19-10.33-21.83.17-3.07.48-6.37,1.07-9.42,2.74,1.48,5.48,3.32,7.96,5.14,2.17,4.58,8.08,17.08,10.33,21.83,2.42,5.07,7.95,16.94,10.38,21.81-.14,3.07-.48,6.39-1.12,9.44h0Z"}),(0,r.jsx)("path",{d:"M24.52,142.5c-1.85,1.37-3.4,2.2-4.97,3.05-.8-.55-1.69-.95-2.53-1.43-2.55-1.39-7.68-4.17-10.22-5.56,0,0-2.56-1.39-2.56-1.39-.13-1.8-.27-3.56-.17-5.78,1.81-1.3,3.37-2.13,4.94-3l2.56,1.39c2.55,1.39,7.68,4.17,10.22,5.56.86.44,1.68.97,2.58,1.34.14,1.77.29,3.53.14,5.83h0Z"}),(0,r.jsx)("path",{d:"M132.21,68.38s1.57-2.25,2.35-3.38c2.38-3.34,7.17-10.05,9.56-13.39l3.43-4.47-.79-7.92-7.35,2.11s-3.43,4.47-3.43,4.47c-2.38,3.34-7.17,10.05-9.56,13.39-.81,1.1-1.55,2.26-2.43,3.32l-.35,8.6,8.57-2.74Z"}),(0,r.jsx)("path",{d:"M162.53,134.61v40.69c-1.46,2.73-3.16,5.61-5,8.14-1.84-2.53-3.53-5.41-5-8.14v-40.69c-.02-2.71.06-5.43-.05-8.14,1.48-2.82,3.07-5.53,5.05-8.14,1.98,2.61,3.57,5.32,5.06,8.14-.11,2.71-.04,5.43-.06,8.14Z"}),(0,r.jsx)("path",{d:"M176.15,134.61v40.69c-1.46,2.73-3.16,5.61-5,8.14-1.84-2.53-3.53-5.41-5-8.14v-40.69c-.02-2.71.06-5.43-.05-8.14,1.48-2.82,3.07-5.53,5.05-8.14,1.98,2.61,3.57,5.32,5.06,8.14-.11,2.71-.04,5.43-.06,8.14Z"}),(0,r.jsx)("path",{d:"M188.98,134.61v40.69c-1.46,2.73-3.16,5.61-5,8.14-1.84-2.53-3.53-5.41-5-8.14v-40.69c-.02-2.71.06-5.43-.05-8.14,1.48-2.82,3.07-5.53,5.05-8.14,1.98,2.61,3.57,5.32,5.06,8.14-.11,2.71-.04,5.43-.06,8.14Z"})]})};var w=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 194.42",children:[(0,r.jsx)("path",{d:"M143.97,64.56c4.29,1.01,8.51,2.32,12.65,3.96,4.1,1.74,8.6,3.51,12.05,6.42,6.21,6.2,12.24,12.36,17.98,19.02,0,0,2.83,3.24,2.83,3.24,0,0-2.79,3.24-2.79,3.24-7.17,8.23-14.91,15.6-23.51,22.32-8.43,6.69-18.11,11.81-27.82,16.58-4.83,2.33-9.78,4.52-14.96,6.36-8.46,2.98-18.18,5.21-27.34,3.77-7.21-2.43-13.98-6.04-20.21-10.35,5.4.4,10.72.66,15.88.62,2.47.13,5.06-.5,7.43-.07,2.36.37,4.44.26,6.82.04,9.66-1.11,19.14-5.11,28.02-9.36,9.06-4.47,18.04-9.13,26.05-15.48,5.97-4.64,11.64-9.83,16.9-15.31,1.75-1.81,3.52-3.74,5.08-5.55l.04,6.49c-5.53-6.15-11.05-12.61-17.34-18-1.53-1.34-2.52-3.08-3.95-4.54-4.3-4.73-8.99-9.03-13.82-13.4h0Z"}),(0,r.jsx)("path",{d:"M54.63,135.33c-8.29-2.08-16.33-5.79-23.46-10.55-6.03-6.03-11.81-12.13-17.14-18.79-2.32-2.78-4.59-6.14-6.56-9.24,0,0,2.5-2.83,2.5-2.83,7.38-8.29,14.83-16.2,23.02-23.73,3.72-3.36,7.61-6.74,11.97-9.39,16.61-9.94,32.14-17.93,52.21-16.68,2.3.12,4.61.44,6.84.92,1.45.4,3.02.37,4.33,1.18,1.33.72,2.62,1.47,3.86,2.26,4.85,3.18,9.21,6.95,12.86,11.39-2.66-.91-5.33-1.65-7.96-2.31-3.92-.92-7.73-1.62-11.66-1.89-1.28,0-2.34-.69-3.53-.87-1.17-.26-2.34-.44-3.5-.57-6.2-.53-12.53-.11-18.48,1.3-11.13,2.77-21.46,8.8-31.33,14.79-11.62,8.5-21.38,19.49-31.11,30.17,0,0,.46-5.97.46-5.97.19.29.55.81.85,1.22,5.75,7.65,12.17,15.1,19.29,21.45,5.12,6.4,10.35,12.51,16.53,18.12h0Z"}),(0,r.jsx)("path",{d:"M163.28,34.87c-4.17,7.1-8.69,13.93-13.36,20.66-11.34,11.28-39.18,39.54-50.87,51.3-11.18,11.29-40.01,40.41-50.83,51.33-6.6,4.62-13.61,9.37-20.5,13.59,4.15-6.93,8.84-13.98,13.39-20.63,10.69-10.8,39.76-40.15,50.83-51.33,11.78-11.92,39.44-39.74,50.8-51.37,6.69-4.73,13.47-9.32,20.53-13.56h0Z"}),(0,r.jsx)("path",{d:"M108.44,75.22c-2.78,1.05-5.66,2.29-8.24,3.61-6.97-.77-14.53,1.24-18.79,7.02-.26.32-.74,1.01-.95,1.37-.56.84-1.34,2.08-1.76,2.97-2.09,3.91-3.18,8.29-2.81,12.65-1.24,2.25-2.33,4.87-2.92,8.11-.77-.35-1.44-.84-2.12-1.34-2.02-1.62-3.63-3.61-4.92-5.89-.29-3.19-.03-6.41.67-9.47,1.19-5.33,3.66-10.16,6.87-14.49,6.01-8.22,16.56-11.64,26.39-11.07.38-.05.77-.14,1.13.06,2.87,1.66,5.51,3.78,7.45,6.47h0Z"}),(0,r.jsx)("path",{d:"M90.02,118.07c2.76-.46,5.64-1.4,8.05-2.61.27-.13.5.01.75.11.24.11.5.09.75.1,1.38.11,3.12-.02,4.49-.28,7.82-1.57,15.45-8.96,17.53-16.68.57-1.98.78-4.05.7-6.13,1.03-1.63,2.05-3.61,2.75-5.54.3-.71.51-1.42.75-2.21,2.11,1.27,3.79,3.15,5.21,5.17.44.69.89,1.42,1.29,2.17.13,3.07-.19,6.19-1.04,9.16-1.6,6.01-5.19,11.25-9.4,15.28-6.23,6.29-16.09,10.28-25.26,8.84-2.79-1.81-5.25-4.32-6.56-7.39h0Z"})]})};var x=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 194.42",children:[(0,r.jsxs)("g",{children:[(0,r.jsx)("path",{d:"M88.4,24.73c-34.21,4.05-61.41,31.25-65.46,65.46h9.2c3.95-29.17,27.09-52.33,56.26-56.28v-9.18Z"}),(0,r.jsx)("path",{d:"M106.12,24.73v9.18c29.17,3.95,52.31,27.1,56.26,56.28h9.2c-4.05-34.21-31.25-61.41-65.46-65.46Z"})]}),(0,r.jsxs)("g",{children:[(0,r.jsx)("path",{d:"M88.4,164.19c-29.17-3.95-52.31-27.1-56.26-56.28h-9.2c4.05,34.21,31.25,61.41,65.46,65.46v-9.18Z"}),(0,r.jsx)("path",{d:"M162.38,107.91c-3.95,29.17-27.09,52.33-56.26,56.28v9.18c34.21-4.05,61.41-31.25,65.46-65.46h-9.2Z"})]}),(0,r.jsx)("polygon",{points:"45.93 92.94 18.87 92.94 5.34 99.05 18.87 105.17 45.93 105.17 59.46 99.05 45.93 92.94"}),(0,r.jsx)("polygon",{points:"174.45 92.94 147.39 92.94 133.86 99.05 147.39 105.17 174.45 105.17 187.98 99.05 174.45 92.94"}),(0,r.jsx)("polygon",{points:"91.14 146.64 91.14 173.7 97.26 187.23 103.37 173.7 103.37 146.64 97.26 133.11 91.14 146.64"}),(0,r.jsx)("polygon",{points:"91.14 18.25 91.14 45.31 97.26 58.85 103.37 45.31 103.37 18.25 97.26 4.72 91.14 18.25"})]})};var k=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 194.42",children:[(0,r.jsx)("path",{d:"M9.12,46.98c8.47,3.52,16.66,7.44,24.79,11.44,13.83,9.74,51.46,36.35,65.77,46.48,0,0-5.69-.06-5.69-.06,15.95-10.86,53.34-35.93,68.71-46.56,8.33-3.92,17.19-7.86,25.76-11.3-6.38,6.67-13.33,13.43-20.07,19.7-17,11.33-54.3,36.66-71.66,48.38,0,0-2.82-2-2.82-2-14.44-10.21-51.78-36.61-65.73-46.52-6.48-6.33-12.9-12.75-19.05-19.56h0Z"}),(0,r.jsx)("path",{d:"M3.45,82.64c8.88,3.46,17.57,7.29,26.16,11.35,15.33,10.53,53.98,36.08,69.95,46.83,0,0-5.49-.04-5.49-.04,12.55-8.11,51.23-33.08,63.16-40.79,1.98-1.14,3.65-2.76,5.78-3.65,4.22-1.86,8.44-3.72,12.73-5.49,3.64-1.52,9.23-3.82,12.92-5.19-2.72,2.84-7.15,6.86-10.05,9.64-3.37,3.17-6.81,6.26-10.24,9.34-1.69,1.57-3.85,2.42-5.71,3.76-13.58,8.77-51.86,33.5-65.92,42.57,0,0-2.73-1.82-2.73-1.82-16.22-10.75-54.22-36.39-70.05-46.67-7.04-6.38-13.9-12.94-20.5-19.82h0Z"})]})};var C=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 194.42",children:[(0,r.jsx)("path",{d:"M96.76.72c2,3.37,3.59,6.82,5.05,10.37-.11,3.46-.03,6.91-.05,10.37,0,10.34,0,31.15,0,41.49,0,0,0,10.37,0,10.37-1.46,3.45-3.13,7.09-5,10.37-1.87-3.28-3.54-6.92-5-10.37,0,0,0-10.37,0-10.37,0-10.34,0-31.15,0-41.49-.02-3.46.05-6.91-.05-10.37,1.47-3.55,3.06-7,5.05-10.37h0Z"}),(0,r.jsx)("path",{d:"M97.26,110.36c1.98,3.29,3.55,6.67,4.99,10.14-.13,3.37-.07,6.74-.12,10.11-.06,10.08-.19,30.36-.25,40.44,0,0-.06,10.11-.06,10.11-1.48,3.36-3.17,6.9-5.06,10.08-1.85-3.21-3.5-6.76-4.94-10.14,0,0,.06-10.11.06-10.11.06-10.08.19-30.36.25-40.44,0-3.37.1-6.74,0-10.11,1.49-3.45,3.1-6.81,5.12-10.08h0Z"}),(0,r.jsx)("path",{d:"M1.34,99.05c5.98-2.03,12.01-3.61,18.11-5.05,12.03.13,41.86.02,54.33.06,11.95,0,42.77,0,54.33,0,5.97,1.44,12.25,3.09,18.11,5-5.87,1.91-12.14,3.56-18.11,5-11.43,0-42.5,0-54.33,0-12.6.02-42.11-.07-54.33.05-6.1-1.44-12.13-3.02-18.11-5.05h0Z"}),(0,r.jsx)("path",{d:"M112.01,83.69c-.47-1.96-.59-3.58-.71-5.22.82-.78,1.53-1.65,2.31-2.47,2.27-2.49,6.84-7.51,9.11-10,0,0,2.28-2.5,2.28-2.5,1.66-.01,3.29-.05,5.23.19.43,1.91.54,3.54.68,5.19l-2.28,2.5c-2.27,2.49-6.84,7.51-9.11,10-.75.85-1.55,1.64-2.25,2.53-1.64.03-3.27.07-5.26-.22h0Z"}),(0,r.jsx)("path",{d:"M112.01,112.14c1.95-.07,4.08.08,5.96.36,1.98,2.17,7.03,7.32,9.14,9.53,2,2.08,7.23,7.49,9.17,9.5.14,1.9.31,3.77.18,5.94-2.17.06-4.04-.18-5.93-.39-1.92-1.99-7.18-7.44-9.17-9.5-2.15-2.21-7.06-7.38-9.2-9.47-.21-1.9-.29-4.03-.15-5.97h0Z"}),(0,r.jsx)("path",{d:"M138.23,73.69c.82-2.19,1.95-4.44,3.11-6.43,3.45-1.86,11.82-6.72,15.36-8.71,3.37-1.92,12.07-6.89,15.33-8.75,2.3.04,4.79.19,7.09.56-.85,2.17-1.99,4.39-3.13,6.39-3.22,1.84-12,6.85-15.33,8.75-3.56,2.05-11.9,6.73-15.31,8.79-2.3-.02-4.81-.18-7.12-.6h0Z"}),(0,r.jsx)("path",{d:"M141.34,117.27c1.37-1.31,2.59-2.15,3.81-3.01.83.35,1.7.58,2.54.87,2.55.83,7.68,2.5,10.22,3.33,0,0,2.56.83,2.56.83.47,1.43.96,2.83,1.32,4.64-1.35,1.25-2.57,2.09-3.8,2.97l-2.56-.83c-2.55-.83-7.68-2.5-10.22-3.33-.86-.26-1.69-.59-2.57-.8-.48-1.41-.97-2.81-1.3-4.67h0Z"}),(0,r.jsx)("path",{d:"M116.72,44.82c-1.15-1.5-1.86-2.8-2.59-4.11.44-.78.75-1.63,1.14-2.44,1.1-2.44,3.3-7.37,4.4-9.81,0,0,1.1-2.45,1.1-2.45,1.48-.32,2.92-.65,4.75-.82,1.1,1.47,1.81,2.77,2.55,4.09,0,0-1.1,2.45-1.1,2.45-1.1,2.44-3.3,7.37-4.4,9.81-.35.82-.77,1.62-1.06,2.47-1.46.33-2.9.66-4.79.8h0Z"}),(0,r.jsx)("path",{d:"M115.64,135.1c1.98.56,4.06,1.4,5.88,2.29,1.49,2.88,5.38,9.8,6.98,12.74,1.53,2.78,5.53,10.03,7.01,12.72-.29,2-.54,3.98-1.16,6.17-2.18-.64-4-1.48-5.84-2.31-1.47-2.66-5.49-9.96-7.01-12.72-1.65-2.97-5.39-9.87-7.05-12.7.21-2.01.61-4.22,1.2-6.19h0Z"})]})};var j=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 194.42",children:[(0,r.jsx)("path",{d:"M3.34,51.27c13.59-1.78,29.44-3.39,43.12-4.67,5.96-.8,12.45-.2,18.48-.33,7.8,0,28.89,0,36.96,0,0,0-4.55,7.08-4.55,7.08-4.04-8.83-12.98-28.36-16.95-37.03,14.8,8.91,70.5,42.42,85.72,51.58-8.77,4.84-41.16,22.75-50.11,27.69-1.32-3.45-7.13-18.78-8.57-22.55,0,0,4.64,3.22,4.64,3.22-2.93-.02-10.18-.07-13-.08-4.19.27-8.81-.17-13-.64-14.37-1.4-29-2.91-43.3-4.73,5.78-.65,11.56-1.28,17.35-1.82,8.34-.83,17.62-1.64,26.02-2.35,2.55-.2,6.15-.62,8.67-.61,4.94.21,12.33.19,17.33.23,0,0,3.42.02,3.42.02l1.22,3.2,6.52,17.16-7.09-2.6,37.48-20.71s-.16,8.66-.16,8.66c0,0-64.44-38.78-64.44-38.78,0,0,7.12-6.37,7.12-6.37,2.39,5.21,11.25,24.59,13.46,29.41-5.12,0-26.88,0-32.43,0-7.09.02-17.64-.08-24.64.13-15.9-1.16-33.45-3.17-49.28-5.13h0Z"}),(0,r.jsx)("path",{d:"M53.23,116.25c14.99-1.25,30.53-2.41,45.5-3.38,7.98-.31,26.38-2.1,34.12-1.7,3.79.1,7.58.08,11.38.08,0,0-4.53,2.88-4.53,2.88l8.17-17.41s2.62-5.57,2.62-5.57l4.92,3.7c3.75,2.8,32.06,24.16,35.07,26.41,0,0-5.58,3.96-5.58,3.96-9.49,6.75-59.59,42.27-67.88,48.16,0,0,5.17-14.8,5.17-14.8l8.84-25.32,4.72,6.65c-12.24-.08-70.29.13-81.37-.01-15.75-1.46-33.18-3.07-48.82-4.99,10.85-1.3,21.7-2.43,32.55-3.47,5.93-.51,18.7-2.06,24.41-1.53,10.51,0,69.62,0,80.28,0,0,0-2.32,6.65-2.32,6.65,0,0-8.84,25.32-8.84,25.32l-7.61-5.73,55.09-39.09-.11,8.07s-29.61-22.3-29.61-22.3c0,0,7.53-1.87,7.53-1.87-.97,2.06-8.81,18.78-9.52,20.28-8.64-.18-17.3.47-25.93-.19-21.96-1.35-46.43-2.95-68.25-4.81h0Z"})]})};var S=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 194.42",children:[(0,r.jsx)("path",{d:"M19.23,176.25c-.19-2.37-.11-4.97.14-7.28,2.55-2.41,8.58-8.54,11.16-11.09,2.43-2.43,8.77-8.77,11.12-11.12,2.31-.16,4.59-.36,7.24-.17.18,2.65-.01,4.93-.17,7.24-2.33,2.33-8.71,8.71-11.13,11.13-2.59,2.61-8.65,8.57-11.09,11.16-2.31.25-4.91.33-7.28.14h0Z"}),(0,r.jsx)("path",{d:"M57.23,138.25c-.19-2.37-.11-4.97.14-7.28,2.55-2.41,8.58-8.54,11.16-11.09,2.43-2.43,8.77-8.77,11.12-11.12,2.31-.16,4.59-.36,7.24-.17.18,2.65-.01,4.93-.17,7.24-2.33,2.33-8.71,8.71-11.13,11.13-2.59,2.61-8.65,8.57-11.09,11.16-2.31.25-4.91.33-7.28.14h0Z"}),(0,r.jsx)("path",{d:"M92.08,103.4c-.19-2.37-.11-4.97.14-7.28,2.55-2.41,8.58-8.54,11.16-11.09,2.43-2.43,8.77-8.77,11.12-11.12,2.31-.16,4.59-.36,7.24-.17.18,2.65-.01,4.93-.17,7.24-2.33,2.33-8.71,8.71-11.13,11.13-2.59,2.61-8.65,8.57-11.09,11.16-2.31.25-4.91.33-7.28.14h0Z"}),(0,r.jsx)("path",{d:"M96.51,59.05c3.26-2,6.61-3.59,10.06-5.05,3.35.11,6.71.03,10.06.05,10.03,0,30.22,0,40.25,0,0,0,10.06,0,10.06,0,3.35,1.46,6.88,3.13,10.06,5-3.18,1.87-6.71,3.54-10.06,5,0,0-10.06,0-10.06,0-10.03,0-30.22,0-40.25,0-3.35.02-6.71-.05-10.06.05-3.45-1.47-6.8-3.06-10.06-5.05h0Z"}),(0,r.jsx)("path",{d:"M136.76,99.3c-2-3.26-3.59-6.61-5.05-10.06.11-3.35.03-6.71.05-10.06,0-10.03,0-30.22,0-40.25,0,0,0-10.06,0-10.06,1.46-3.35,3.13-6.88,5-10.06,1.87,3.18,3.54,6.71,5,10.06,0,0,0,10.06,0,10.06,0,10.03,0,30.22,0,40.25.02,3.35-.05,6.71.05,10.06-1.47,3.45-3.06,6.8-5.05,10.06h0Z"})]})};var I=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 194.42",children:[(0,r.jsx)("path",{d:"M65.82,55.81c1.89,4.16,3.63,8.38,5.57,12.36.23,2.58.64,5.33,1.69,7.37,5.77,7.68,24.72,16.4,20.71,28.08-1.66,4.38-5.48,6.92-8.63,9.2-3.23,2.28-6.92,4.44-9.39,7.12-.86.95-1.15,1.58-1.57,2.64-.5,1.3-.9,2.62-1.25,4.02-.37.94-.15,2.01-.67,2.9-1.95,3.28-4.64,8.43-6.46,11.91-.45-1.11-.79-2.23-1.16-3.36-1-3.43-1.76-6.86-2.14-10.46-.12-1.19.56-2.26.73-3.43.92-3.71,2.36-8.08,5.07-10.9,3.42-3.72,7.31-5.98,11.12-8.65,1.99-1.44,4-2.75,4.92-4.37,0-.03-.02.04-.01.12,0,.13.02.12-.02,0-.08-.25-.39-.85-.85-1.45-4.49-5.57-11.15-9.6-16.24-14.79-1.83-1.61-3.95-5.14-4.49-7.58-.57-1.88-.83-3.61-1.18-5.46-.14-.58-.35-1.15-.27-1.74.89-4.76,2.36-9.21,4.51-13.53h0Z"}),(0,r.jsx)("path",{d:"M59.81,52.55c3.07-1.95,6.23-3.49,9.49-4.91,3.14.16,6.28.12,9.42.2,9.39.14,28.28.42,37.66.56,0,0,9.42.14,9.42.14,3.12,1.51,6.41,3.24,9.34,5.14-2.99,1.82-6.33,3.45-9.49,4.86,0,0-9.42-.14-9.42-.14-9.39-.14-28.28-.42-37.66-.56-3.14-.02-6.28-.15-9.42-.09-3.21-1.52-6.33-3.16-9.34-5.2h0Z"}),(0,r.jsx)("path",{d:"M136.65,144.78c-3.35,1.92-6.78,3.44-10.3,4.83-3.39-.19-6.79-.18-10.19-.28-10.16-.23-30.61-.68-40.77-.9,0,0-10.19-.23-10.19-.23-3.36-1.53-6.9-3.28-10.08-5.22,3.26-1.8,6.88-3.39,10.3-4.77,0,0,10.19.23,10.19.23,10.16.23,30.61.68,40.77.9,3.4.05,6.79.21,10.19.17,3.46,1.54,6.82,3.21,10.08,5.28h0Z"}),(0,r.jsx)("path",{d:"M124.06,141.4c-.72-5.26-2.27-9.45-4.23-13.44-.09-2.03-1-3.96-2.06-5.64-4-5.88-10.97-7.97-16.87-12.61-4.15-3.15-6.43-9.64-3.91-14.52,3.92-7.58,12.29-10.46,17.7-16.2,2.37-2.47,3.09-5.65,3.69-9.05.08-.46.16-.93.09-1.42-.06-.48.34-.93.58-1.4.52-.93,1.04-1.91,1.55-2.91,1.04-2.01,2-4.13,2.99-6.39,2.14,3.06,3.68,6.47,4.75,10.06.16.6.45,1.23.26,1.82-.19.58-.25,1.18-.35,1.78-.75,5-2.54,10.6-6.27,14.35-3.33,3.51-7.12,5.94-10.76,8.65-2.09,1.62-4.11,3.03-5.19,4.95-.78,2.22,3.92,4.35,5.98,5.65,8.57,4.7,15.66,10.58,17.9,20.98.16.64.04,1.31-.05,1.96-.74,5-2.69,9.57-5.82,13.39h0Z"}),(0,r.jsx)("path",{d:"M148.09,3.63c2.79,3.05,5.1,6.16,7.37,9.39.27.35.49.71.54,1.11.13,1.6,1.28,5.46,1.63,7.08,0,0,4.69,18.8,4.69,18.8l1.97,7.87-7.92-1.78c-7.7-1.75-25.27-5.68-32.73-7.36-1.86-1.4-4.04-3.25-5.79-4.81-2.7-2.55-2.96-1.98.71-3.13,0,0,2.94-.83,2.94-.83,1.39-.36,2.95-.72,4.36-1.03.49-.12.87.19,1.31.31l10.47,2.36,20.94,4.72-5.95,6.09c-.87-3.5-5.09-20.38-5.87-23.5-.17-.69-.41-1.68-.71-2.32-.15-.38-.12-.8-.05-1.24.48-3.92,1.07-7.75,2.09-11.76h0Z"}),(0,r.jsx)("path",{d:"M171.89,73.32c3.72,12.41,4.46,25.9,1.53,39.44-9.25,42.75-51.56,70.01-94.32,60.76-42.75-9.25-70.01-51.56-60.76-94.32S69.91,9.19,112.66,18.44c14.08,3.05,26.46,9.7,36.43,18.75l8.38-5.89c-11.49-10.98-26.05-19.03-42.69-22.64C66.63-1.75,18.99,28.94,8.57,77.08c-10.42,48.14,20.27,95.79,68.42,106.21s95.79-20.27,106.21-68.42c3.55-16.4,2.32-32.74-2.73-47.58l-8.57,6.03Z"})]})};var A=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 194.42",children:[(0,r.jsx)("path",{d:"M10.31,53.15c-1.33-7.73-2.43-15.5-3.47-23.27-.52-3.88-.99-7.76-1.47-11.63-.46-3.87.1-7.75-.07-11.63,0,0,.03-5,.03-5,5.01,0,105.32,0,110.33,0,0,6.87,0,49.66,0,56.53-1.34-.08-52.38.05-55.1,0,0,0-6.26,0-6.26,0-2.09.05-4.18.25-6.26-.09-12.17-1.45-25.51-3.03-37.57-4.92,12.04-1.87,25.42-3.49,37.57-4.92,2.09-.33,4.17-.14,6.26-.09,0,0,6.26,0,6.26,0,0,0,50.1,0,50.1,0,0,0-5,5-5,5,0,0,0-46.53,0-46.53,0,0,5,5,5,5H10.31l5-5c-.17,3.89.39,7.77-.07,11.63-.48,3.88-.94,7.76-1.47,11.63-1.04,7.77-2.14,15.54-3.47,23.27h0Z"}),(0,r.jsx)("path",{d:"M183.31,77.54c1.18,6.3,2.3,15.44,3.25,21.87.9,7.28,2.24,14.52,1.75,21.87,0,0,.11,5,.11,5-4.8,0-108.36,0-113.22,0,0-6.88,0-49.66,0-56.53,8.06,0,55.36,0,63.22,0,2.16.05,4.31-.27,6.47-.02l12.94,1.52c8.63,1.04,17.25,2.18,25.88,3.5-12.44,1.91-26.26,3.57-38.81,5.02-2.16.25-4.31-.07-6.47-.02h-58.22l5-5v46.53s-5-5-5-5h103.11l-5,5c-.49-7.35.85-14.58,1.75-21.87.82-6.45,2.2-15.53,3.25-21.87h0Z"}),(0,r.jsx)("path",{d:"M129,6.61c7.88-2.04,15.79-3.86,23.8-5.13,4.27.2,9.96.13,14.28.13,3.43,0,14.42,0,17.69,0,0,0,0,5,0,5,.04,2.3-.03,50.96,0,51.53-6.71,0-54.06,0-60.77,0,0-3.17,0-13.1,0-16.44-.47-3.81.48-7.62.99-11.44.59-3.81,1.22-7.62,1.89-11.44.64-3.81,1.35-7.62,2.12-11.44.77,3.81,1.48,7.62,2.12,11.44.67,3.81,1.3,7.62,1.89,11.44.51,3.81,1.46,7.62.99,11.44v11.44s-5-5-5-5h50.77l-5,5V6.61l5,5c-4.26,0-14.93,0-19.04,0,0,0-3.17,0-3.17,0-2.12-.13-4.25.39-6.35-.08-7.45-1.41-14.86-2.95-22.21-4.92h0Z"}),(0,r.jsx)("path",{d:"M10.31,186.33c-1.33-7.73-2.43-15.5-3.47-23.27-.52-3.88-.99-7.76-1.47-11.63-.46-3.87.1-7.75-.07-11.63,0,0,.03-5,.03-5,5.01,0,105.32,0,110.33,0,0,6.87,0,49.66,0,56.53-1.34-.08-52.38.05-55.1,0,0,0-6.26,0-6.26,0-2.09.05-4.18.25-6.26-.09-12.17-1.45-25.51-3.03-37.57-4.92,12.04-1.87,25.42-3.49,37.57-4.92,2.09-.33,4.17-.14,6.26-.09,0,0,6.26,0,6.26,0h50.1s-5,5-5,5c0,0,0-46.53,0-46.53,0,0,5,5,5,5H10.31s5-5,5-5c-.17,3.89.39,7.77-.07,11.63-.48,3.88-.94,7.76-1.47,11.63-1.04,7.77-2.14,15.54-3.47,23.27h0Z"}),(0,r.jsx)("path",{d:"M129,139.8c7.88-2.04,15.79-3.86,23.8-5.13,4.27.2,9.96.13,14.28.13,3.43,0,14.42,0,17.69,0,0,0,0,5,0,5,.04,2.3-.03,50.96,0,51.53-6.71,0-54.06,0-60.77,0,0-3.17,0-13.1,0-16.44-.47-3.81.48-7.62.99-11.44.59-3.81,1.22-7.62,1.89-11.44.64-3.81,1.35-7.62,2.12-11.44.77,3.81,1.48,7.62,2.12,11.44.67,3.81,1.3,7.62,1.89,11.44.51,3.81,1.46,7.62.99,11.44v11.44l-5-5h50.77s-5,5-5,5c0,0,0-46.53,0-46.53,0,0,5,5,5,5-4.26,0-14.93,0-19.04,0,0,0-3.17,0-3.17,0-2.12-.13-4.25.39-6.35-.08-7.45-1.41-14.86-2.95-22.21-4.92h0Z"}),(0,r.jsx)("path",{d:"M10.21,74.73c6.27-1.68,12.52-3.05,18.86-4.29,1.83-.26,4.44-1.1,6.28-.79,3.58.15,8.94.06,12.57.08,3.41,0,14.31,0,17.57,0,0,0,0,5,0,5,.04,2.31-.03,50.95,0,51.53-.98.04-52.83-.03-55.28,0,0,0-5,0-5,0v-16.44c.01-1.91-.3-3.81.1-5.72,1.43-9.51,3-19.16,4.9-28.59,1.9,9.43,3.48,19.08,4.9,28.59.4,1.9.09,3.8.1,5.72,0,0,0,11.44,0,11.44,0,0-5-5-5-5h50.28s-5,5-5,5v-46.53l5,5c-4.23,0-14.78,0-18.86,0,0,0-3.14,0-3.14,0-2.1-.12-4.2.4-6.29-.1-7.38-1.4-14.71-2.94-22-4.9h0Z"})]})};var N=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 194.42",children:[(0,r.jsx)("path",{d:"M10.31,53.15c-1.33-7.73-2.43-15.5-3.47-23.27-.52-3.88-.99-7.76-1.47-11.63-.46-3.87.1-7.75-.07-11.63,0,0,.03-5,.03-5,5.01,0,105.32,0,110.33,0,0,6.87,0,49.66,0,56.53-1.34-.08-52.38.05-55.1,0,0,0-6.26,0-6.26,0-2.09.05-4.18.25-6.26-.09-12.17-1.45-25.51-3.03-37.57-4.92,12.04-1.87,25.42-3.49,37.57-4.92,2.09-.33,4.17-.14,6.26-.09,0,0,6.26,0,6.26,0,0,0,50.1,0,50.1,0,0,0-5,5-5,5,0,0,0-46.53,0-46.53,0,0,5,5,5,5H10.31l5-5c-.17,3.89.39,7.77-.07,11.63-.48,3.88-.94,7.76-1.47,11.63-1.04,7.77-2.14,15.54-3.47,23.27h0Z"}),(0,r.jsx)("path",{d:"M85.2,100.21l-10,9.95c.01-15.23,0-35.84.01-40.43h40.61l-10.05,10h-20.57v20.48Z"}),(0,r.jsx)("path",{d:"M122.78,79.73l10.05-10h5.6c2.15.05,4.31-.27,6.46-.02l12.94,1.53c8.63,1.04,17.25,2.18,25.88,3.49-12.44,1.91-26.26,3.57-38.82,5.02-2.15.25-4.31-.07-6.46-.02h-15.65Z"}),(0,r.jsx)("path",{d:"M188.42,126.27c-4.64-.01-101.43,0-112.39,0l7.1-7.07,2.07-2.06v-.87h93.04c.17-5.64,1.12-11.24,1.82-16.87.83-6.45,2.2-15.53,3.25-21.87,1.18,6.31,2.31,15.44,3.26,21.87.9,7.28,2.23,14.52,1.74,21.87l.11,5Z"}),(0,r.jsx)("path",{d:"M134,48.15h3.5l-3.5,3.48v1.52l-.76-.76-5.79,5.76h-3.45c0-3.17-.01-13.11,0-16.44-.47-3.81.47-7.62.98-11.44.6-3.81,1.22-7.62,1.9-11.43.64-3.81,1.35-7.63,2.12-11.44.76,3.81,1.47,7.63,2.12,11.44.67,3.81,1.29,7.62,1.89,11.43.51,3.82,1.45,7.63.99,11.44v6.44Z"}),(0,r.jsx)("path",{d:"M151.21,11.53c-7.45-1.41-14.86-2.95-22.21-4.92,7.87-2.04,15.79-3.86,23.79-5.13,4.28.2,9.96.13,14.28.13,3.27,0,13.39,0,17.18,0l-7.26,7.22-2.22,2.21v.57h-17.22c-2.11-.13-4.25.39-6.34-.08Z"}),(0,r.jsx)("path",{d:"M184.77,58.15c-4.19-.01-24.22,0-40.31,0l10.04-10h20.27v-20.17l10.01-9.97c0,15.09-.03,39.73-.01,40.14Z"}),(0,r.jsx)("path",{d:"M15.24,151.43c-.48,3.88-.94,7.76-1.46,11.63-.43,3.19-.87,6.38-1.33,9.57l-3.74,3.72c-.66-4.43-1.28-8.86-1.87-13.29-.53-3.87-.99-7.75-1.47-11.63-.46-3.87.1-7.75-.06-11.63l.03-5h45.11l-10.04,10H15.36c.07,2.21.14,4.42-.12,6.63Z"}),(0,r.jsx)("path",{d:"M115.67,191.33c-1.34-.08-52.39.06-55.1,0h-6.26c-2.09.06-4.18.25-6.26-.08-10.67-1.27-22.23-2.64-33.05-4.23l1.61-1.6c10.34-1.5,21.31-2.82,31.44-4.01,2.08-.33,4.17-.14,6.26-.08,0-.01,6.26,0,6.26,0h45.1v-36.53h-48.25l10.04-10h48.21c0,6.87,0,49.65,0,56.53Z"}),(0,r.jsx)("path",{d:"M129,139.8c7.88-2.04,15.79-3.86,23.8-5.13,4.27.2,9.96.13,14.28.13,3.43,0,14.42,0,17.69,0,0,0,0,5,0,5,.04,2.3-.03,50.96,0,51.53-6.71,0-54.06,0-60.77,0,0-3.17,0-13.1,0-16.44-.47-3.81.48-7.62.99-11.44.59-3.81,1.22-7.62,1.89-11.44.64-3.81,1.35-7.62,2.12-11.44.77,3.81,1.48,7.62,2.12,11.44.67,3.81,1.3,7.62,1.89,11.44.51,3.81,1.46,7.62.99,11.44v11.44l-5-5h50.77s-5,5-5,5c0,0,0-46.53,0-46.53,0,0,5,5,5,5-4.26,0-14.93,0-19.04,0,0,0-3.17,0-3.17,0-2.12-.13-4.25.39-6.35-.08-7.45-1.41-14.86-2.95-22.21-4.92h0Z"}),(0,r.jsx)("path",{d:"M65.48,119.84l-6.47,6.44c-14.19,0-46.87-.04-48.8-.01h-5v-16.44c.01-1.91-.31-3.82.1-5.72,1.43-9.51,2.99-19.16,4.9-28.59,1.89,9.43,3.47,19.08,4.9,28.59.4,1.9.08,3.81.1,5.72v6.44h40.28v-36.54h-17c-2.11-.12-4.2.4-6.29-.1-7.38-1.41-14.71-2.94-21.99-4.9,6.27-1.68,12.52-3.05,18.85-4.29,1.83-.26,4.45-1.1,6.29-.79,3.58.15,8.94.06,12.57.08,3.41,0,14.3-.01,17.57,0v5c.03,1.8,0,31.68-.01,45.11Z"}),(0,r.jsx)("polygon",{points:"182.3 12.32 178.01 21.7 19.3 179.84 9.66 184.23 13.66 174.23 172.39 16.85 182.3 12.32"})]})};var E=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 194.42",children:[(0,r.jsx)("path",{d:"M79.82,13.98c-2.66,8.28-5.62,16.29-8.65,24.23-7.36,13.52-27.48,50.3-35.13,64.29,0,0,.04-5.56.04-5.56,8.21,15.6,27.16,52.14,35.2,67.17,2.96,8.15,5.94,16.81,8.54,25.18-5.04-6.24-10.15-13.03-14.89-19.62-8.57-16.62-27.71-53.09-36.57-70.05,0,0,1.51-2.76,1.51-2.76,7.72-14.11,27.67-50.61,35.17-64.26,4.78-6.34,9.64-12.61,14.78-18.62h0Z"}),(0,r.jsx)("path",{d:"M52.86,8.44c-2.62,8.68-5.51,17.18-8.58,25.58-7.96,14.98-27.27,52.77-35.4,68.38,0,0,.03-5.37.03-5.37,6.13,12.27,25.01,50.08,30.83,61.74.86,1.94,2.09,3.57,2.76,5.65,1.41,4.13,2.81,8.26,4.15,12.44,1.15,3.56,2.89,9.02,3.93,12.63-2.15-2.66-5.19-6.99-7.29-9.82-2.4-3.3-4.73-6.66-7.06-10.01-1.19-1.65-1.83-3.77-2.84-5.58-6.63-13.28-25.32-50.7-32.18-64.44,0,0,1.38-2.67,1.38-2.67,8.13-15.86,27.51-53.01,35.28-68.48,4.82-6.88,9.78-13.59,14.98-20.04h0Z"}),(0,r.jsx)("path",{d:"M113.51,13.98c2.66,8.28,5.62,16.29,8.65,24.23,7.36,13.52,27.48,50.3,35.13,64.29,0,0-.04-5.56-.04-5.56-8.21,15.6-27.16,52.14-35.2,67.17-2.96,8.15-5.94,16.81-8.54,25.18,5.04-6.24,10.15-13.03,14.89-19.62,8.57-16.62,27.71-53.09,36.57-70.05,0,0-1.51-2.76-1.51-2.76-7.72-14.11-27.67-50.61-35.17-64.26-4.78-6.34-9.64-12.61-14.78-18.62h0Z"}),(0,r.jsx)("path",{d:"M140.47,8.44c2.62,8.68,5.51,17.18,8.58,25.58,7.96,14.98,27.27,52.77,35.4,68.38,0,0-.03-5.37-.03-5.37-6.13,12.27-25.01,50.08-30.83,61.74-.86,1.94-2.09,3.57-2.76,5.65-1.41,4.13-2.81,8.26-4.15,12.44-1.15,3.56-2.89,9.02-3.93,12.63,2.15-2.66,5.19-6.99,7.29-9.82,2.4-3.3,4.73-6.66,7.06-10.01,1.19-1.65,1.83-3.77,2.84-5.58,6.63-13.28,25.32-50.7,32.18-64.44,0,0-1.38-2.67-1.38-2.67-8.13-15.86-27.51-53.01-35.28-68.48-4.82-6.88-9.78-13.59-14.98-20.04h0Z"})]})};var T=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 194.42",children:[(0,r.jsx)("path",{d:"M12.46,122.57c1.09-2.3,2.28-3.99,3.47-5.7,1.45-.14,2.87-.45,4.31-.67,4.29-.72,12.93-2.17,17.22-2.89,0,0,4.31-.72,4.31-.72,1.69,1.26,3.37,2.47,5.13,4.21-1.1,2.22-2.29,3.91-3.48,5.65l-4.31.72c-4.29.72-12.93,2.17-17.22,2.89-1.43.26-2.88.43-4.3.77-1.68-1.23-3.36-2.44-5.14-4.26h0Z"}),(0,r.jsx)("path",{d:"M46.91,119.68c1.03-9.02,2.3-17.99,3.72-26.91,2.83-8.57,5.79-17.48,7.14-26.38.27-2.97.74-8.64,1.01-11.67.46-4.55.92-9.13,2.25-14.08.89-2.93,1.75-5.5,4.08-8.05,6.53-6.53,12.8-13.39,20.52-18.75,3.69-2.35,8.05-5.2,13.39-3.9,5.26,1.42,8.09,7.97,8.44,12.51.5,5.5-.39,10.41-2.3,15.51-.88,2.71-3.32,5.88-5.53,7.37-3.05,2.42-6.04,3.72-8.5,6.12-.08.16.25-.43.25-.81,0,0,0,.05,0,.05-.07,3.55.73,7.32,1.83,10.67.72,1.7,1.49,3.3,2,5.02,1.85,5.74,8.64,6.4,14.02,6.43,2.21.01,4.44-.16,6.7-.47-7.16,4.08-17.45,7.7-25.17,2.21-2.31-1.71-4.26-3.86-5.65-6.29-1.5-3.53-2.53-7.23-3.17-10.95-.41-2.77-.83-5.63-.37-8.47,1.52-6,7.94-8.11,11.95-11.42,1.61-1.32,1.53-1.25,2.37-3.17,1.59-4.4,2.84-10.57.42-14.46-.14-.19-.3-.34-.45-.49.06.06.36.23.49.26-2.77.61-7.17,3.9-9.91,6.3-3.99,3.4-7.97,7.43-11.73,11.28,0,0-2.3,2.31-2.3,2.31-.71.81-1.35,2.57-1.71,3.88-1.5,5.4-1.96,13-2.5,18.93-.53,11.64-4.7,22.56-7.8,33.61-4.05,8.17-8.53,16.1-13.45,23.79h0Z"}),(0,r.jsx)("path",{d:"M139.85,65.35c-3.8,2.63-7.91,4.48-12.47,5.58-.58.14-1.18.29-1.77.18-4.79-.85-9.86-1.92-13.06-6.18-3.79-5.09-2.44-11.86.21-17,3.88-7,10.82-11.32,18.52-12.37,2.58-.31,5.31-.26,8.1.57,2.73.85,4.58,2.05,6.78,3.49,3.96,2.72,7.38,5.93,10.02,10.09,1.5,2.58,3.83,6.78,2.36,10.36-1.22,2.28-2.34,4.6-3.26,7.05-1.49,3.76-.81,3.85-2.87.15-.99-2.08-1.84-4.24-2.43-6.5-.26-.82-.19-1.76-.96-2.28.06-.85-.52-2.2-1.32-3.49-2.34-3.75-7.2-7.78-11.16-9.28-6.58-1.77-15.66,3.81-16.25,10.99-.31,2.35.31,2.73,2.82,3.65.69.21,1.46.38,2.28.51.91.1,1.69-.11,2.55.45,3.51,1.57,7.59,2.79,11.9,4.03h0Z"}),(0,r.jsx)("path",{d:"M170.29,91.79c-6.21-1.65-12.18-3.96-18.01-7.15-1.42-.84-3.04-1.57-4.12-2.94-2.61-3.02-5.52-6.05-6.32-10.33-1.28-5.91,3.96-11.01,9.5-11.89,5.55-1.05,11.04.13,16.1,1.62,3.23,1.01,6.31,2.21,9.42,3.85,1.77.96,3.68,2.08,5.08,3.68,2.11,2.22,4.9,4.71,6.67,7.72,3.55,5.41,2.95,12.52-.17,17.98-1.6,3.14-3.68,6.29-6.75,8.89-6.09,5.45-16,6.13-22.85,1.9-3.12-1.7-5.73-3.66-8.34-5.59-.71-.42-1.36-.9-1.81-1.61-2.42-3.26-4.66-6.77-6.64-10.3-.78-1.43-1.55-2.86-2.23-4.36l4.39,2.08c2.45,1.23,6.05,2.83,8.56,4.03,1.2.58,3.06,1.14,3.91,2.21,3.1,2.45,6.53,4.97,10,6.07,2.93.62,6.2.01,8.55-2.08,2.4-2.03,4.61-5.74,5.61-9.02.73-3.2-.39-4.92-3.01-7.83-.91-.97-2.5-2.5-3.57-3.65-4.99-3.31-11.73-5.47-17.63-5.98-1.77-.08-4.14-.05-5.14,1.03,0,0,.08-.12.11-.22.08-.24.05-.42.07-.31.36,1.38,2.23,3.73,3.69,4.89,1.1.81,1.77,2.14,2.7,3.29,3.61,4.71,7.87,9.33,12.21,14.01h0Z"}),(0,r.jsx)("path",{d:"M151.02,123.49c-1.81.25-3.6-.28-5.39-.52-5.36-1.07-10.51-2.64-15.57-4.85-6.23-4.69-13.03-9.72-15.56-17.7-1.67-5.05.46-11.49,5.03-14.57,4.05-2.98,9.86-2.7,14.22-1.29,7.41,2.39,13.32,6.47,19.33,10.93,3.53,2.67,6.94,5.56,10.2,8.54.48.47,1.21,1.09,1.7,1.65,2.78,3.12,5.13,6.37,6.97,10.19,5.21,10.11,1.01,20.86-10.84,22.45-3.18.44-5.98.2-9.02.02-2.75-.41-5.37-1.68-7.9-2.68-6.55-2.92-12.63-6.51-18.34-10.75,6.85,1.4,13.68,2.52,20.31,3,3.3.34,6.56-.06,9.44.6,10.49.7,10.24-4.46,5.12-12.12-.95-1.39-2.02-2.75-3.14-3.99,0,0-.16-.18-.16-.18.13.14.04.05-.03-.02-3.28-3.07-6.8-6.05-10.36-8.75-4.62-3.41-16.35-11.99-21.76-9.42-2.28,1.76-1.18,4.48.42,6.67,2.67,3.6,6.26,6.5,10.14,9.05,3.41,3.62,7.22,7.24,11.07,10.56,1.33,1.09,2.6,2.42,4.12,3.18h0Z"}),(0,r.jsx)("path",{d:"M112.52,145.45c.48.47-.51.48-.79.45-5.15-.63-10.07-2.56-14.8-4.58-8.26-7.06-16.63-14.37-21.76-24.26-1.3-2.71-2.5-5.86-2.39-9.76.17-7.01,5.88-12.5,12.88-11.58,11.98,1.37,27.34,15.28,36.06,23.31,3,5.23,5.93,10.54,8.59,15.98-3.52-1.92-6.89-3.96-10.28-6.04-1.06-.61-2.3-1.17-3.44-1.77l-1.75-.87c-.6-.28-.95-.81-1.37-1.27-7.89-7.1-16.38-14.82-26.18-18.77-1.21-.43-2.89-.82-3.77-.52-.42.29-.74,1.24-.75,1.95.42,7.37,9.4,15.83,14.87,20.99,1.38,1.22,2.73,2.48,4.2,3.59.51.35,1.07.64,1.45,1.14,2.83,3.91,5.58,8.07,8.75,11.76.13.17.34.29.45.43.03.04.05-.09.04-.17h0Z"}),(0,r.jsx)("path",{d:"M130.29,128.59c1.6,2.87,2.55,6.04,3.02,9.3.08,1.07.42,2.29.11,3.34-1.74,4.3-3.59,8.45-7.16,11.7-6.46,6.12-16.22,5.94-24.42,6.82-9.47.71-18.99.96-28.42,1.13-.85.03-3.4-.02-4.25.13-.47.11-.94.01-1.42-.19-1.89-.7-3.78-1.41-5.67-2.23-1.62-.71-4.08-1.77-5.63-2.62.94-.49,1.88-.9,2.82-1.36,2.71-1.2,5.68-2.49,8.4-3.53.46-.22.93-.32,1.4-.22.87.15,3.27,0,4.2.03,9.22-.16,18.71-.42,27.82-1.1,4.99-.46,10.7-.76,15.22-2.22,3.83-1.49,6.45-5.47,7.32-9.44.08-.38.43-.7.73-1.04,2.24-2.68,4.06-5.38,5.93-8.49h0Z"}),(0,r.jsx)("path",{d:"M55.76,154.86c-1.33,2.24-3.03,4.49-4.71,6.42-4,.88-13.76,3.49-17.88,4.51-3.92,1-14.07,3.59-17.87,4.56-2.39-.92-4.94-2.04-7.19-3.32,1.36-2.21,3.07-4.42,4.72-6.36,3.75-.96,13.98-3.57,17.87-4.56,4.15-1.08,13.86-3.47,17.86-4.61,2.39.89,4.97,2.05,7.21,3.38h0Z"})]})};var D=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 194.42",children:[(0,r.jsx)("path",{d:"M4.24,93.13c4.5-3.41,9.7-6.52,14.62-9.11,9.73.24,33.78.03,43.87.1,9.63,0,34.55,0,43.87,0,4.91,2.64,10.07,5.69,14.62,9.01-4.55,3.32-9.72,6.37-14.62,9.01-9.21,0-34.32,0-43.87,0-10.2.03-33.99-.12-43.87.1-4.93-2.59-10.12-5.71-14.62-9.11h0Z"}),(0,r.jsx)("path",{d:"M62.73,151.62c-3.41-4.5-6.52-9.7-9.11-14.62.24-9.73.03-33.78.1-43.87,0-9.63,0-34.55,0-43.87,2.64-4.91,5.69-10.07,9.01-14.62,3.32,4.55,6.37,9.72,9.01,14.62,0,9.21,0,34.32,0,43.87.03,10.2-.12,33.99.1,43.87-2.59,4.93-5.71,10.12-9.11,14.62h0Z"}),(0,r.jsx)("path",{d:"M97.44,136.66c3.33-2.71,7.2-5.21,10.88-7.29,7.24.17,25.14.05,32.65.08,7.17,0,25.71,0,32.65,0,3.66,2.12,7.52,4.57,10.88,7.21-3.37,2.64-7.22,5.09-10.88,7.21-6.86,0-25.54,0-32.65,0-7.59.03-25.29-.09-32.65.08-3.68-2.08-7.56-4.58-10.88-7.29h0Z"}),(0,r.jsx)("path",{d:"M140.97,180.19c-2.71-3.33-5.21-7.2-7.29-10.88.17-7.24.04-25.14.08-32.65,0-7.17,0-25.71,0-32.65,2.12-3.66,4.57-7.52,7.21-10.88,2.64,3.37,5.09,7.22,7.21,10.88,0,6.86,0,25.54,0,32.65.03,7.59-.09,25.29.08,32.65-2.08,3.68-4.58,7.56-7.29,10.88h0Z"}),(0,r.jsx)("path",{d:"M100.32,41.45c1.96-2.25,3.92-3.85,5.89-5.46,1.96.11,3.92.03,5.89.05,5.87,0,17.68,0,23.54,0,0,0,5.89,0,5.89,0,1.96,1.64,3.92,3.24,5.89,5.41-1.96,2.17-3.92,3.76-5.89,5.41h-5.89c-5.87,0-17.68,0-23.54,0-1.96.02-3.92-.05-5.89.05-1.96-1.61-3.92-3.21-5.89-5.46h0Z"}),(0,r.jsx)("path",{d:"M123.86,65c-2.25-1.96-3.85-3.92-5.46-5.89.11-1.96.03-3.92.05-5.89,0-5.87,0-17.68,0-23.54,0,0,0-5.89,0-5.89,1.64-1.96,3.24-3.92,5.41-5.89,2.17,1.96,3.76,3.92,5.41,5.89v5.89c0,5.87,0,17.68,0,23.54.02,1.96-.05,3.92.05,5.89-1.61,1.96-3.21,3.92-5.46,5.89h0Z"}),(0,r.jsx)("path",{d:"M23.69,27.5c.67-1.13,1.34-1.92,2.01-2.73.67.05,1.34.01,2.01.03,2,0,6.02,0,8.02,0,0,0,2.01,0,2.01,0,.67.82,1.34,1.62,2.01,2.7-.67,1.08-1.34,1.88-2.01,2.7h-2.01c-2,0-6.02,0-8.02,0-.67.01-1.34-.03-2.01.03-.67-.81-1.34-1.6-2.01-2.73h0Z"}),(0,r.jsx)("path",{d:"M31.71,35.52c-1.13-.67-1.92-1.34-2.73-2.01.05-.67.01-1.34.03-2.01,0-2,0-6.02,0-8.02,0,0,0-2.01,0-2.01.82-.67,1.62-1.34,2.7-2.01,1.08.67,1.88,1.34,2.7,2.01v2.01c0,2,0,6.02,0,8.02.01.67-.03,1.34.03,2.01-.81.67-1.6,1.34-2.73,2.01h0Z"}),(0,r.jsx)("path",{d:"M152.75,68.8c.67-1.13,1.34-1.92,2.01-2.73.67.05,1.34.01,2.01.03,2,0,6.02,0,8.02,0,0,0,2.01,0,2.01,0,.67.82,1.34,1.62,2.01,2.7-.67,1.08-1.34,1.88-2.01,2.7h-2.01c-2,0-6.02,0-8.02,0-.67.01-1.34-.03-2.01.03-.67-.81-1.34-1.6-2.01-2.73h0Z"}),(0,r.jsx)("path",{d:"M160.77,76.82c-1.13-.67-1.92-1.34-2.73-2.01.05-.67.01-1.34.03-2.01,0-2,0-6.02,0-8.02,0,0,0-2.01,0-2.01.82-.67,1.62-1.34,2.7-2.01,1.08.67,1.88,1.34,2.7,2.01v2.01c0,2,0,6.02,0,8.02.01.67-.03,1.34.03,2.01-.81.67-1.6,1.34-2.73,2.01h0Z"}),(0,r.jsx)("path",{d:"M83.77,165.73c.67-1.13,1.34-1.92,2.01-2.73.67.05,1.34.01,2.01.03,2,0,6.02,0,8.02,0,0,0,2.01,0,2.01,0,.67.82,1.34,1.62,2.01,2.7-.67,1.08-1.34,1.88-2.01,2.7h-2.01c-2,0-6.02,0-8.02,0-.67.01-1.34-.03-2.01.03-.67-.81-1.34-1.6-2.01-2.73h0Z"}),(0,r.jsx)("path",{d:"M91.79,173.76c-1.13-.67-1.92-1.34-2.73-2.01.05-.67.01-1.34.03-2.01,0-2,0-6.02,0-8.02,0,0,0-2.01,0-2.01.82-.67,1.62-1.34,2.7-2.01,1.08.67,1.88,1.34,2.7,2.01v2.01c0,2,0,6.02,0,8.02.01.67-.03,1.34.03,2.01-.81.67-1.6,1.34-2.73,2.01h0Z"})]})};var R=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{id:"Shotgun",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 194.42",children:[(0,r.jsx)("path",{className:"cls-1",d:"M71.26,172.61l-37.83,9.79s-4.62-21.62-1.66-39.62c2.55-15.46,26.1-35.65,26.1-35.65l17.89,23.22s-9.27,6.09-6.99,18.07l2.48,24.2Z"}),(0,r.jsx)("polyline",{className:"cls-1",points:"59.53 105.5 156.94 10.55 167.73 23.11 68 117.4"}),(0,r.jsx)("polyline",{className:"cls-1",points:"79.08 128.64 169.9 40.42 157.45 28.54"}),(0,r.jsx)("path",{className:"cls-1",d:"M94.31,117.14s12.47,12.9.25,25.69-23.25,8.89-23.25,8.89"})]})};var M=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 194.42",children:[(0,r.jsx)("path",{d:"M56.33,74.79c3.63.81,7.03,1.96,10.42,3.27,2.2,2.36,4.54,4.59,6.81,6.89,6.83,6.83,20.56,20.56,27.39,27.39,0,0,6.85,6.85,6.85,6.85,1.25,3.31,2.47,6.91,3.31,10.38-3.48-.84-7.07-2.06-10.38-3.31,0,0-6.85-6.85-6.85-6.85-6.82-6.83-20.56-20.56-27.39-27.39-2.3-2.26-4.53-4.6-6.89-6.81-1.31-3.39-2.47-6.79-3.27-10.42h0Z"}),(0,r.jsx)("path",{d:"M15.01,127.16c3.41.58,6.61,1.51,9.8,2.59,2,2.14,4.14,4.15,6.21,6.23,6.23,6.17,18.76,18.58,24.98,24.74,0,0,6.25,6.19,6.25,6.19,1.06,3.11,2.08,6.49,2.73,9.74-3.26-.62-6.65-1.6-9.76-2.63,0,0-6.25-6.19-6.25-6.19-6.22-6.17-18.76-18.58-24.98-24.74-2.1-2.04-4.13-4.16-6.28-6.15-1.11-3.18-2.07-6.37-2.69-9.78h0Z"}),(0,r.jsx)("path",{d:"M39.99,145.42c-.5,3.34-1.21,6.37-2.25,9.46-.89.69-7.67,7.51-8.63,8.48,0,0,0-7.07,0-7.07l16.82,16.82s-7.27.21-7.27.21l6.97-7.81c.28-.33.6-.63.85-.99.21-.45.5-.74,1.01-.85,2.91-1.05,5.72-1.94,8.84-2.63-.33,3.17-.9,6.07-1.61,9.08-.06.51-.31.84-.73,1.1-.33.29-.59.64-.89.96-2.32,2.59-8.25,9.24-10.49,11.76-2.27-2.29-17.9-17.89-20.56-20.56,0,0-3.54-3.54-3.54-3.54l3.54-3.54c.99-1.02,7.78-7.7,8.48-8.63,3.1-1.04,6.12-1.75,9.46-2.25h0Z"}),(0,r.jsx)("path",{className:"cls-1",d:"M44.98,137.85l19.99,21.02s4.38-9.13,11.83-16.82,16.52-12.49,16.52-12.49l-19.94-19.76s-5.04,8.71-10.81,14.47c-5.77,5.77-17.59,13.58-17.59,13.58Z"}),(0,r.jsx)("path",{d:"M107.56,114.67s18.06-22.85,18.06-22.85c7.02-9.8,16.07-17.4,22.95-27.03,4.08-5.5,6.9-11.56,9.43-18.01,3.31-8.63,5.89-17.83,7.71-26.89,0,0,7.81,4.99,7.81,4.99l-41.8,29.61.86-.77-36.98,41.86s-.23-6.86-.23-6.86l13.54,13.41-7.6.67c5.29-7.54,14.76-20.69,19.78-28.19,5.25-6.34,10.85-12.42,16.32-18.59,4.42-4.91,8.86-9.8,13.41-14.62-6.88,13.18-13.9,26.29-21.37,39.11-6.89,9.29-16.62,23.42-23.38,32.88-2.77-2.75-14.73-14.59-17.73-17.57,0,0-3.35-3.32-3.35-3.32,0,0,3.13-3.54,3.13-3.54l36.98-41.86.38-.43.47-.34,41.8-29.61,10.14-7.19s-2.34,12.17-2.34,12.17c-1.97,9.85-4.62,19.3-8.21,28.69-2.72,7.01-6.12,14.18-10.69,20.31-7.64,9.7-15.52,19.37-25.41,26.71-7.48,5.84-15.77,12.04-23.67,17.26h0Z"})]})};var O=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{id:"Shile_Combo","data-name":"Shile Combo",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 194.42",children:[(0,r.jsx)("path",{d:"M158.34,71.78c2.26,14.48,3.17,29.17,2.63,43.84-1.33,8.98-3.07,17.68-6.48,26.35-1.65,4.24-4.52,9.24-7.94,12.44,0,0-3.15,3.2-3.15,3.2-8.62,8.27-18.18,15.51-28.48,21.55-5.73,3.31-11.58,6.38-17.8,8.76-7.72-2.41-15-5.52-22.15-9.23-10.72-5.63-21.24-12.83-28.85-22.56-12.61-17.35-19-38.23-23.12-58.99-1.5-7.01-1.66-15.16-1.29-22.36.4-10.78,1.09-21.47,1.87-32.22,0,0,.42-5.74.42-5.74,7.48,1.85,15.59,3.02,23.25,2.28,5.81-.45,11.14-2.22,16.01-5.3,2.67-1.49,5.09-3.46,7.69-5.09,8.17-4.8,16.07-10.2,23.79-15.74,0,0,2.5-1.79,2.5-1.79,0,0,1.34,2.18,1.34,2.18,4.69,7.26,9.85,14.59,16.8,19.9-8.19-3.79-14.84-10.26-21-16.77,0,0,3.84.4,3.84.4-6.8,7.09-13.87,13.82-21.44,20.11-3.31,2.5-7.06,4.59-10.65,6.69-11.71,6.62-25.83,6.59-38.67,4.11,0,0,6.1-4.5,6.1-4.5-.93,13.94-2.1,28.22-1.96,42.14,1.67,20.26,10.97,50.71,23.96,66.42,11.2,12.53,27.12,20.48,42.86,25.95,0,0-3.26.11-3.26.11,1.13-.47,2.49-1.04,3.65-1.59,13.84-6.49,26.6-15.35,37.63-25.92,1.44-1.53,4.21-4.08,5.3-5.67,5.85-8.77,7.61-20.1,9.17-30.54,3.38-13.95,5.57-28.16,7.43-42.44h0Z"}),(0,r.jsx)("path",{d:"M93.98,54.32c3.46-2,7-3.59,10.64-5.05,3.55.11,7.09.03,10.64.05,10.61,0,31.94,0,42.54,0,0,0,10.64,0,10.64,0,3.54,1.45,7.27,3.13,10.64,5-3.37,1.87-7.1,3.55-10.64,5,0,0-10.64,0-10.64,0-10.6,0-31.94,0-42.54,0-3.55.02-7.09-.05-10.64.05-3.64-1.46-7.18-3.05-10.64-5.05h0Z"}),(0,r.jsx)("path",{d:"M136.64,96.97c-2-3.46-3.59-7-5.05-10.64.11-3.55.03-7.09.05-10.64,0-10.61,0-31.94,0-42.54,0,0,0-10.64,0-10.64,1.45-3.54,3.13-7.27,5-10.64,1.87,3.37,3.55,7.1,5,10.64,0,0,0,10.64,0,10.64,0,10.6,0,31.94,0,42.54.02,3.55-.05,7.09.05,10.64-1.46,3.64-3.05,7.18-5.05,10.64h0Z"})]})};var q=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 194.42",children:[(0,r.jsxs)("g",{children:[(0,r.jsx)("path",{d:"M15.44,146.84s2.54,7.11,8.36,12.43c3.17,2.89,5.94,6.22,5.94,6.22l23.61-21.65s-17.19-14.03-16.12-17.78.1-7.21,3.69-9.34c3.21-1.91,4.5-3.67,4.5-3.67,0,0-7.46-8.02-15.45-7.96-7.99.06-19.1,3.41-19.1,3.41,0,0,1.49,4.37,1.13,6.47-.34,1.99-3.05,6.88-2.58,13.55.37,5.19,3.92,12.11,3.92,12.11"}),(0,r.jsx)("path",{className:"cls-2",d:"M9.51,109.22s12.43-6.87,12.26-16.36-4.52-13.75-4.52-13.75l32.03-27.82,23.27,27.25s-8.21,6.01-8.32,7.6-.57,4.96,1.19,7.12,3.64,8.57,1.41,11.39c-2.23,2.82-9.21,12.43-14.87,11.28-5.67-1.16-8.25-8.16-6.94-11.58s6.28-10.3,9.14-11.48,6.15-2.26,8.23-1.85"}),(0,r.jsx)("path",{d:"M44.31,100.77c1.16-.31,1.99-.64,2.76-1.03,1.19.79,2.48,1.08,3.97,1.13,1.12.04,2.25.02,3.38-.07.56-.04,1.13-.09,1.69-.16.33.36.67.72,1.01,1.07.28.27.83.84,1.1,1.14-.16.41-.47,1.07-.7,1.44-.25.44-.52.88-.79,1.31-.65.08-1.29.14-1.94.19-3.51.27-7.22.17-10.36-1.75-.26-1.03-.42-2.09-.11-3.27h0Z"}),(0,r.jsx)("polyline",{className:"cls-3",points:"42.92 91.27 31.89 78.14 46.61 65.82 57.33 78.4 40.32 91.91"}),(0,r.jsx)("path",{d:"M53.65,70.35c.13,1.27.05,2.32-.02,3.37-.59.45-1.13.96-1.69,1.44-1.67,1.46-5.04,4.39-6.71,5.85,0,0-1.68,1.46-1.68,1.46-1.06-.09-2.1-.15-3.32-.42-.1-1.24-.03-2.29.03-3.35l1.68-1.46c1.67-1.46,5.04-4.39,6.71-5.85.55-.5,1.13-.96,1.66-1.48,1.05.07,2.09.14,3.34.44h0Z"}),(0,r.jsx)("polyline",{points:"49.53 53.65 101.52 9.38 110.94 20.4 60.58 62.86"}),(0,r.jsx)("line",{x1:"87.85",y1:"5.07",x2:"97.28",y2:"16.43"}),(0,r.jsx)("path",{className:"cls-3",d:"M6.5,94.25s3.58-5.3,7.47-6.06,10.51-.94,10.51-.94"})]}),(0,r.jsxs)("g",{children:[(0,r.jsx)("path",{className:"cls-1",d:"M78.39,162.39s1.76,6.71,6.67,12.04c2.67,2.9,4.94,6.16,4.94,6.16l23.34-17.95s-14.63-14.21-13.35-17.56c1.28-3.35.66-6.59,4.12-8.26,3.09-1.49,4.41-3,4.41-3,0,0-6.19-7.94-13.52-8.52-7.32-.58-17.76,1.6-17.76,1.6,0,0,1.02,4.12.52,6.02-.47,1.79-3.34,6.05-3.44,12.2-.07,4.78,2.62,11.4,2.62,11.4"}),(0,r.jsx)("path",{className:"cls-2",d:"M75.95,127.47s11.92-5.31,12.53-14.01c.6-8.7-3.05-12.95-3.05-12.95l31.54-22.93,19.14,26.8s-7.99,4.85-8.23,6.3-.92,4.5.52,6.61c1.44,2.11,2.65,8.14.39,10.54s-9.42,10.65-14.52,9.14-6.9-8.13-5.43-11.15c1.47-3.03,6.57-8.93,9.28-9.78s5.81-1.58,7.68-1.04"}),(0,r.jsx)("path",{d:"M108.48,122.5c1.15-.25,1.97-.53,2.73-.89,1,.8,2.11,1.15,3.45,1.31,1.01.12,2.04.19,3.08.21.52,0,1.04,0,1.55-.02.27.39.55.77.84,1.15.24.29.7.92.92,1.23-.16.37-.52,1.04-.75,1.37-.27.42-.54.83-.83,1.24-.6.02-1.2.03-1.8.02-3.28-.03-6.71-.43-9.46-2.47-.13-1.02-.16-2.05.28-3.17h0Z"}),(0,r.jsx)("polyline",{className:"cls-3",points:"107.96 113.69 98.91 100.79 113.37 90.68 122.18 103.05 105.53 114.07"}),(0,r.jsx)("path",{d:"M119.45,95.39c.06,1.24-.05,2.24-.16,3.25-.58.36-1.11.79-1.67,1.19-1.65,1.2-4.96,3.62-6.61,4.82,0,0-1.65,1.21-1.65,1.21-1-.21-1.98-.41-3.13-.81-.04-1.21.07-2.21.18-3.23l1.65-1.21c1.65-1.2,4.96-3.62,6.61-4.82.54-.41,1.12-.78,1.64-1.23.99.2,1.98.39,3.14.83h0Z"}),(0,r.jsx)("polyline",{points:"117.01 79.77 168.13 43.37 175.88 54.2 126.39 89.08"}),(0,r.jsx)("line",{x1:"155.96",y1:"38.33",x2:"163.69",y2:"49.48"}),(0,r.jsx)("path",{className:"cls-3",d:"M74.38,113.52s3.7-4.57,7.32-4.96c3.62-.39,9.69-.03,9.69-.03"})]})]})};var G=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 194.42",children:[(0,r.jsx)("path",{d:"M28.42,82.06c11.07-3.05,22.79-5.72,34.03-7.97,17.36-1.31,34.71-2.69,52.18-2.72,15.95-.28,30.95,2.81,43.47,13.33,3.33,2.7,6.23,6.11,8.61,9.69,0,0-1.63,2.62-1.63,2.62-7.14,10.74-18.11,18.73-30.48,22.37-5.98,1.72-12.25,2.19-18.42,2.44-17.66.76-35.28.31-52.9-.1-11.66-1.78-23.3-3.63-34.87-6.11,11.75-1.35,23.46-2.32,35.14-3.42,17.4.5,34.84.87,52.18.15,14.38-.2,26.08-3.8,36.36-14.3,1.75-1.79,3.51-3.88,4.85-5.93,0,0,.13,5.1.13,5.1-1.46-1.95-3.21-3.66-5.09-5.24-6.76-5.74-15.27-9.08-24.03-10.4-10.07-1.19-20.25-.64-30.4-.28-11.42.54-22.88,1.33-34.32,2.31-11.41-.4-23.4-.84-34.82-1.54h0Z"}),(0,r.jsx)("path",{d:"M42.52,25.12c11.07-3.05,22.79-5.72,34.03-7.97,17.36-1.31,34.71-2.69,52.18-2.72,15.95-.28,30.95,2.81,43.47,13.33,3.33,2.7,6.23,6.11,8.61,9.69,0,0-1.63,2.62-1.63,2.62-7.14,10.74-18.11,18.73-30.48,22.37-5.98,1.72-12.25,2.19-18.42,2.44-17.66.76-35.28.31-52.9-.1-11.66-1.78-23.3-3.63-34.87-6.11,11.75-1.35,23.46-2.32,35.14-3.42,17.4.5,34.84.87,52.18.15,14.38-.2,26.08-3.8,36.36-14.3,1.75-1.79,3.51-3.88,4.85-5.93,0,0,.13,5.1.13,5.1-1.46-1.95-3.21-3.66-5.09-5.24-6.76-5.74-15.27-9.08-24.03-10.4-10.07-1.19-20.25-.64-30.4-.28-11.42.54-22.88,1.33-34.32,2.31-11.41-.4-23.4-.84-34.82-1.54h0Z"}),(0,r.jsx)("path",{d:"M9.72,138.85c11.07-3.05,22.79-5.72,34.03-7.97,17.36-1.31,34.71-2.69,52.18-2.72,15.95-.28,30.95,2.81,43.47,13.33,3.33,2.7,6.23,6.11,8.61,9.69,0,0-1.63,2.62-1.63,2.62-7.14,10.74-18.11,18.73-30.48,22.37-5.98,1.72-12.25,2.19-18.42,2.44-17.66.76-35.28.31-52.9-.1-11.66-1.78-23.3-3.63-34.87-6.11,11.75-1.35,23.46-2.32,35.14-3.42,17.4.5,34.84.87,52.18.15,14.38-.2,26.08-3.8,36.36-14.3,1.75-1.79,3.51-3.88,4.85-5.93,0,0,.13,5.1.13,5.1-1.46-1.95-3.21-3.66-5.09-5.24-6.76-5.74-15.27-9.08-24.03-10.4-10.07-1.19-20.25-.64-30.4-.28-11.42.54-22.88,1.33-34.32,2.31-11.41-.4-23.4-.84-34.82-1.54h0Z"})]})};var P=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 194.42",children:[(0,r.jsx)("path",{d:"M25.31,112.79c11.07-3.05,22.79-5.72,34.03-7.97,17.36-1.31,34.71-2.69,52.18-2.72,15.95-.28,30.95,2.81,43.47,13.33,3.33,2.7,6.23,6.11,8.61,9.69,0,0-1.63,2.62-1.63,2.62-7.14,10.74-18.11,18.73-30.48,22.37-5.98,1.72-12.25,2.19-18.42,2.44-17.66.76-35.28.31-52.9-.1-11.66-1.78-23.3-3.63-34.87-6.11,11.75-1.35,23.46-2.32,35.14-3.42,17.4.5,34.84.87,52.18.15,14.38-.2,26.08-3.8,36.36-14.3,1.75-1.79,3.51-3.88,4.85-5.93,0,0,.13,5.1.13,5.1-1.46-1.95-3.21-3.66-5.09-5.24-6.76-5.74-15.27-9.08-24.03-10.4-10.07-1.19-20.25-.64-30.4-.28-11.42.54-22.88,1.33-34.32,2.31-11.41-.4-23.4-.84-34.82-1.54h0Z"}),(0,r.jsx)("path",{d:"M39.41,55.85c11.07-3.05,22.79-5.72,34.03-7.97,17.36-1.31,34.71-2.69,52.18-2.72,15.95-.28,30.95,2.81,43.47,13.33,3.33,2.7,6.23,6.11,8.61,9.69,0,0-1.63,2.62-1.63,2.62-7.14,10.74-18.11,18.73-30.48,22.37-5.98,1.72-12.25,2.19-18.42,2.44-17.66.76-35.28.31-52.9-.1-11.66-1.78-23.3-3.63-34.87-6.11,11.75-1.35,23.46-2.32,35.14-3.42,17.4.5,34.84.87,52.18.15,14.38-.2,26.08-3.8,36.36-14.3,1.75-1.79,3.51-3.88,4.85-5.93,0,0,.13,5.1.13,5.1-1.46-1.95-3.21-3.66-5.09-5.24-6.76-5.74-15.27-9.08-24.03-10.4-10.07-1.19-20.25-.64-30.4-.28-11.42.54-22.88,1.33-34.32,2.31-11.41-.4-23.4-.84-34.82-1.54h0Z"})]})};var F=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 194.42",children:[(0,r.jsx)("path",{d:"M9.44,169.17c8.8-19.03,19.17-39.86,28.55-58.74,10.93-18.38,48.15-81.98,59.3-100.98,0,0,4.3,7.43,4.3,7.43l86.62,149.78s4.34,7.5,4.34,7.5c-13.54,0-90.73,0-104.03,0-3.12.06-7.52.22-10.6-.08-20.55-1.47-43.16-3.02-63.57-4.93,14.13-1.29,28.25-2.4,42.38-3.43,4.1-.2,22.78-1.82,26.49-1.68,9.46.22,89.31.08,100.66.11,0,0-4.33,7.5-4.33,7.5L92.93,21.89s8.64.03,8.64.03c-8.45,14.36-47.29,80.62-54.82,93.65-11.86,17.45-25.03,36.57-37.32,53.6h0Z"}),(0,r.jsx)("path",{d:"M97.26,56.28c1.96,2.73,3.53,5.56,4.98,8.49-.13,2.81-.08,5.63-.13,8.44-.08,8.42-.22,25.36-.3,33.78,0,0-.07,8.44-.07,8.44-1.49,2.82-3.2,5.78-5.07,8.4-1.82-2.65-3.49-5.65-4.93-8.49,0,0,.07-8.44.07-8.44.08-8.42.22-25.36.3-33.78,0-2.81.1-5.63.02-8.44,1.51-2.91,3.12-5.7,5.13-8.4h0Z"}),(0,r.jsx)("path",{d:"M96.96,133.17c2.07.74,3.53,1.47,5.01,2.2-.11.7-.05,1.41-.09,2.11l-.07,4.22-.07,4.22-.04,2.11c-1.53.68-3.02,1.35-5.04,2.02-1.99-.74-3.45-1.47-4.96-2.2l.04-2.11.07-4.22.07-4.22c0-.7.07-1.41-.01-2.11,1.5-.68,2.99-1.35,5.09-2.02,0,0-2.1.67,0,0Z"})]})};var L=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 194.42",children:[(0,r.jsx)("path",{d:"M143.33,61.43c4.53,13.55,7.11,27.79,7.39,42.09-1.17,12.31-3.9,24.71-11.83,34.74-9.77,11-21.94,19.66-35.09,26.15-1.67.78-3.67,1.69-5.44,2.37-11.41-3.65-22.08-8.81-31.46-16.44-4.5-3.67-8.49-8.3-11.41-13.36-5.75-9.73-9.38-20.24-12.11-31.07-1.31-5.63-2.51-10.78-2.82-16.75-.13-10.99.77-21.59,1.49-32.5,0,0,.42-5.74.42-5.74,0,0,5.68,1.24,5.68,1.24,7.51,1.38,15.98,1.64,22.76-2.22,2.49-1.28,4.71-3.09,7.08-4.59,2.02-1.13,4.07-2.3,6.09-3.51,5-3,9.98-6.37,14.86-9.61,3.22,8.06,10.34,13.83,17.7,18.12,6.93,3.96,14.67,6.43,22.53,7.93-4.03-.26-8.07-.81-12.05-1.71-11.1-2.46-22-7.73-29.56-16.47-.78-.91-1.38-1.68-2.06-2.76,0,0,4.04.72,4.04.72-3.27,3.69-6.71,7.12-10.24,10.56-1.79,1.69-3.57,3.41-5.49,5.03-1.98,1.58-4.23,2.73-6.4,4.09-9.33,5.97-20.96,6.27-31.5,4.17,0,0,6.1-4.5,6.1-4.5-.69,10.35-1.56,21.04-1.46,31.37.23,4.69,1.4,10.01,2.53,14.73,2.45,9.8,5.86,19.69,10.98,28.33,2.42,4.17,5.47,7.75,9.23,10.82,7.58,6.23,17,10.87,26.34,14.04,0,0-3.31.13-3.31.13.41-.17,1.01-.43,1.52-.66,12.43-5.82,24.08-14.02,33.28-24.21,6.46-8.01,8.58-19.14,9.51-29.29,2.58-13.57,3.1-27.41,2.69-41.22h0Z"}),(0,r.jsx)("path",{d:"M71.8,5.28c-5.03,1.89-9.41,5-12.37,9.45-1.75,2.33-5.12,6.72-6.92,9.04-3.7-.67-8.39-1.2-11.99-2.21-3.12-1.04-6.31-1.86-9.47-2.76l5-4.65s4.33,21.15,4.33,21.15l.34,1.68-1.01,1.46c-9.18,13.82-11.6,30.9-13.82,47.01,0,0-1.33,1.02-1.33,1.02l-14.33,11s.07-6.29.07-6.29c.98.8,14.7,11.82,15.27,12.29-.01.38-.15,2.47-.16,2.81-.21,15.24,6.69,34.48,15.66,46.74,0,0-.35,1.74-.35,1.74,0,0-4,19.67-4,19.67l-5.02-4.64,4.1-1.17c2.73-.83,5.41-1.75,8.26-2.09,1.32-.2,4.88-.85,6.15-1.05,6.84,6.34,14.3,12.04,22.48,16.6-8.98-2.1-17.47-5.83-25.44-10.46,0,0,2.84.51,2.84.51-2.32.88-5.62,2.42-7.97,3.11-4.36,1.15-10.19,2.76-14.55,4.04,0,0,1.31-6.45,1.31-6.45l4-19.67s.74,3.22.74,3.22c-9.48-13.9-16.46-33.54-16.2-50.46.02-.33.03-.58.07-1.04l1.47,3.53s-13.67-11-13.67-11c0,0-3.96-3.19-3.96-3.19l4.04-3.1s14.33-11,14.33-11l-1.54,2.72c2.4-17.01,5.25-34.55,15.05-49.05,0,0-.67,3.13-.67,3.13-.89-4.31-4.81-23.49-5.64-27.54,5.03,1.32,10.83,3.1,15.83,4.3,2.74.69,6.57,2.49,9.27,3.5,0,0-3.27.94-3.27.94,2.91-2.39,7.28-6.21,10.31-8.47,3.79-2.68,8.24-4.02,12.75-4.35h0Z"}),(0,r.jsx)("path",{d:"M119.97,5.28c5.62.32,11.22,2.62,15.42,6.46,1.54,1.22,6.05,5.04,7.65,6.37,0,0-3.27-.94-3.27-.94,2.69-1,6.5-2.81,9.27-3.5,4.98-1.27,10.84-2.93,15.83-4.3,0,0-1.31,6.38-1.31,6.38,0,0-4.33,21.15-4.33,21.15,0,0-.67-3.13-.67-3.13,9.81,14.51,12.65,32.04,15.05,49.05,0,0-1.54-2.72-1.54-2.72,0,0,14.33,11,14.33,11l4.04,3.1-3.96,3.19-13.67,11s1.47-3.53,1.47-3.53c.04.46.05.71.07,1.04.27,16.91-6.71,36.56-16.19,50.46,0,0,.73-3.22.73-3.22.89,4.34,4.47,21.99,5.31,26.11-4.41-1.22-10.15-2.98-14.55-4.04-2.33-.7-5.65-2.22-7.97-3.11,0,0,2.84-.51,2.84-.51-7.98,4.64-16.46,8.37-25.44,10.46,8.17-4.56,15.64-10.26,22.48-16.6,1.24.24,4.85.81,6.15,1.05,2.85.34,5.53,1.26,8.26,2.09,0,0,4.1,1.17,4.1,1.17l-5.02,4.64-4-19.67-.35-1.74c8.97-12.25,15.87-31.5,15.66-46.74-.04-.34-.13-2.42-.16-2.81.53-.44,14.34-11.53,15.27-12.29,0,0,.07,6.29.07,6.29l-14.33-11-1.33-1.02c-2.22-16.1-4.64-33.19-13.82-47.01,0,0-1.01-1.46-1.01-1.46,0,0,.34-1.68.34-1.68l4.33-21.15,5,4.65c-3.16.91-6.35,1.72-9.47,2.76-3.6.99-8.3,1.53-11.99,2.21-1.8-2.32-5.16-6.69-6.92-9.04-2.96-4.45-7.34-7.56-12.37-9.45h0Z"})]})};var W=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 194.42",children:[(0,r.jsx)("path",{fill:"#2ecc40",d:"M9.71,79.58c16.64-11.28,35.03-22.96,52-33.79,6.13,2.67,11.74,6.4,17.58,9.59,9.4,5.27,34.61,19.42,44.33,24.86,0,0,2.55,1.43,2.55,1.43,0,0,0,2.93,0,2.93v67.72s-2.44,1.45-2.44,1.45c0,0-55.15,32.82-55.15,32.82,0,0-2.52,1.5-2.52,1.5-1.85-1.06-62.13-35.79-64-36.87,0,0,0-2.89,0-2.89v-69.51c13.47,6.92,38.56,19.82,51.94,26.69,5,2.5,10.04,4.89,14.72,7.96,0,0-4.52.15-4.52.15,17.77-9.06,35.56-18.07,53.54-26.74-16.09,11.81-32.4,23.27-48.74,34.71,0,0-1.86,1.31-1.86,1.31,0,0-2.66-1.16-2.66-1.16-5.23-2.02-10.1-4.72-15.04-7.34-9.51-4.88-34.84-17.91-44.65-22.95,0,0,7.29-4.45,7.29-4.45v61.32l-2.5-4.33s58.96,33.97,58.96,33.97c0,0-5.05.04-5.05.04l55.15-32.82s-2.44,4.3-2.44,4.3v-64.88s2.55,4.36,2.55,4.36c-17.05-9.69-42.33-23.53-59.1-33.16,0,0,4.8.04,4.8.04-17.64,7.86-36.89,16.39-54.72,23.73h0Z"}),(0,r.jsx)("path",{fill:"#2ecc40",d:"M67.37,185.74c-1.89-2.48-3.62-5.34-5.05-8.06.13-5.36.02-18.63.06-24.19,0-5.31,0-19.05,0-24.19,1.47-2.7,3.16-5.55,5-8.06,1.84,2.51,3.53,5.36,5,8.06,0,5.08,0,18.92,0,24.19.02,5.62-.07,18.74.05,24.19-1.44,2.72-3.17,5.58-5.05,8.06h0Z"}),(0,r.jsx)("path",{d:"M147.47,39.28c1.75-4.36,3.05-8.87,3.48-13.5.29-2.41-.46-5.07-.09-7.34,0,0,3.51-16.31,3.51-16.31,0,0,6.06,14.12,6.06,14.12,1.11,2.43,2.97,5.97,4.2,8.4,1.22,2.33,2.79,5.69,4.16,7.89,3.18,5.21,6.77,10.37,10.02,15.68,1.8,3.06,3.95,6.28,4.8,9.85,1.36,6.81,1.59,14.49-2.12,20.74-5.4,8.21-15.16,14.36-25.36,13.26-8.44-.99-20.1-6.73-23.16-15.09-1.37-3.7-1.73-7.04-2.19-10.58-.15-2.98.78-5.74,2.05-8.53.51-1,1-1.54,1.54-2.36,3.85-5.18,7.82-10.02,11.99-14.83-1.99,6.42-4.28,12.71-6.15,18.99-.08.32-.21.73-.12.8.06.37.1.92.21,1.5.14,1.23.72,2.54.68,3.82-.07,2.51.58,5.39,1.36,7.66.76,2.12,2.39,3.11,4.21,4.47,4.12,2.69,9.06,4.84,14.01,4.1,4.89-.73,9.02-3.94,12.05-7.93.62-.79.94-1.56,1.25-2.55,1-3.56.75-7.66-.01-11.35-.27-1.03-.8-1.92-1.33-2.95-4.49-8.19-10.43-15.58-14.72-24-1.05-2.05-3.15-6.2-4.2-8.25-.71-1.37-1.37-2.77-2.16-4.09l9.57-2.19c-.22,7.85-7.33,16.28-13.53,20.59h0Z"})]})};var B=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 194.42",children:[(0,r.jsx)("path",{fill:"#ff4136",d:"M9.71,79.58c16.64-11.28,35.03-22.96,52-33.79,6.13,2.67,11.74,6.4,17.58,9.59,9.4,5.27,34.61,19.42,44.33,24.86,0,0,2.55,1.43,2.55,1.43,0,0,0,2.93,0,2.93v67.72s-2.44,1.45-2.44,1.45c0,0-55.15,32.82-55.15,32.82,0,0-2.52,1.5-2.52,1.5-1.85-1.06-62.13-35.79-64-36.87,0,0,0-2.89,0-2.89v-69.51c13.47,6.92,38.56,19.82,51.94,26.69,5,2.5,10.04,4.89,14.72,7.96,0,0-4.52.15-4.52.15,17.77-9.06,35.56-18.07,53.54-26.74-16.09,11.81-32.4,23.27-48.74,34.71,0,0-1.86,1.31-1.86,1.31,0,0-2.66-1.16-2.66-1.16-5.23-2.02-10.1-4.72-15.04-7.34-9.51-4.88-34.84-17.91-44.65-22.95,0,0,7.29-4.45,7.29-4.45v61.32l-2.5-4.33s58.96,33.97,58.96,33.97c0,0-5.05.04-5.05.04l55.15-32.82s-2.44,4.3-2.44,4.3v-64.88s2.55,4.36,2.55,4.36c-17.05-9.69-42.33-23.53-59.1-33.16,0,0,4.8.04,4.8.04-17.64,7.86-36.89,16.39-54.72,23.73h0Z"}),(0,r.jsx)("path",{fill:"#ff4136",d:"M67.37,185.74c-1.89-2.48-3.62-5.34-5.05-8.06.13-5.36.02-18.63.06-24.19,0-5.31,0-19.05,0-24.19,1.47-2.7,3.16-5.55,5-8.06,1.84,2.51,3.53,5.36,5,8.06,0,5.08,0,18.92,0,24.19.02,5.62-.07,18.74.05,24.19-1.44,2.72-3.17,5.58-5.05,8.06h0Z"}),(0,r.jsx)("path",{d:"M147.47,39.28c1.75-4.36,3.05-8.87,3.48-13.5.29-2.41-.46-5.07-.09-7.34,0,0,3.51-16.31,3.51-16.31,0,0,6.06,14.12,6.06,14.12,1.11,2.43,2.97,5.97,4.2,8.4,1.22,2.33,2.79,5.69,4.16,7.89,3.18,5.21,6.77,10.37,10.02,15.68,1.8,3.06,3.95,6.28,4.8,9.85,1.36,6.81,1.59,14.49-2.12,20.74-5.4,8.21-15.16,14.36-25.36,13.26-8.44-.99-20.1-6.73-23.16-15.09-1.37-3.7-1.73-7.04-2.19-10.58-.15-2.98.78-5.74,2.05-8.53.51-1,1-1.54,1.54-2.36,3.85-5.18,7.82-10.02,11.99-14.83-1.99,6.42-4.28,12.71-6.15,18.99-.08.32-.21.73-.12.8.06.37.1.92.21,1.5.14,1.23.72,2.54.68,3.82-.07,2.51.58,5.39,1.36,7.66.76,2.12,2.39,3.11,4.21,4.47,4.12,2.69,9.06,4.84,14.01,4.1,4.89-.73,9.02-3.94,12.05-7.93.62-.79.94-1.56,1.25-2.55,1-3.56.75-7.66-.01-11.35-.27-1.03-.8-1.92-1.33-2.95-4.49-8.19-10.43-15.58-14.72-24-1.05-2.05-3.15-6.2-4.2-8.25-.71-1.37-1.37-2.77-2.16-4.09l9.57-2.19c-.22,7.85-7.33,16.28-13.53,20.59h0Z"})]})};var H=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 194.42",children:[(0,r.jsx)("path",{d:"M39.95,57.7c16.64-11.28,35.03-22.96,52-33.79,6.13,2.67,11.74,6.4,17.58,9.59,9.4,5.27,34.61,19.42,44.33,24.86,0,0,2.55,1.43,2.55,1.43s0,2.93,0,2.93v67.72s-2.44,1.45-2.44,1.45l-55.15,32.82s-2.52,1.5-2.52,1.5c-1.85-1.06-62.13-35.79-64-36.87,0,0,0-2.89,0-2.89,0,0,0-61.32,0-61.32,0,0,0-8.19,0-8.19,13.47,6.92,38.56,19.82,51.94,26.69,5,2.5,10.04,4.89,14.72,7.96,0,0-4.52.15-4.52.15,17.77-9.06,35.56-18.07,53.54-26.74-16.09,11.81-32.4,23.27-48.74,34.71,0,0-1.86,1.31-1.86,1.31,0,0-2.66-1.16-2.66-1.16-5.23-2.02-10.1-4.72-15.04-7.34-9.51-4.88-34.84-17.91-44.65-22.95,0,0,7.29-4.45,7.29-4.45v61.32s-2.5-4.33-2.5-4.33l58.96,33.97s-5.05.04-5.05.04l55.15-32.82s-2.44,4.3-2.44,4.3V62.73l2.55,4.36c-17.05-9.69-42.33-23.53-59.1-33.16,0,0,4.8.04,4.8.04-17.64,7.86-36.89,16.39-54.72,23.73h0Z"}),(0,r.jsx)("path",{d:"M97.61,163.86c-1.89-2.48-3.62-5.34-5.05-8.06.13-5.36.02-18.63.06-24.19,0-5.31,0-19.05,0-24.19,1.47-2.7,3.16-5.55,5-8.06,1.84,2.51,3.53,5.36,5,8.06,0,5.08,0,18.92,0,24.19.02,5.62-.07,18.74.05,24.19-1.44,2.72-3.17,5.58-5.05,8.06h0Z"})]})};var U=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 194.42",children:[(0,r.jsx)("path",{fill:"#ff4136",d:"M39.95,57.7c16.64-11.28,35.03-22.96,52-33.79,6.13,2.67,11.74,6.4,17.58,9.59,9.4,5.27,34.61,19.42,44.33,24.86,0,0,2.55,1.43,2.55,1.43s0,2.93,0,2.93v67.72s-2.44,1.45-2.44,1.45l-55.15,32.82s-2.52,1.5-2.52,1.5c-1.85-1.06-62.13-35.79-64-36.87,0,0,0-2.89,0-2.89,0,0,0-61.32,0-61.32,0,0,0-8.19,0-8.19,13.47,6.92,38.56,19.82,51.94,26.69,5,2.5,10.04,4.89,14.72,7.96,0,0-4.52.15-4.52.15,17.77-9.06,35.56-18.07,53.54-26.74-16.09,11.81-32.4,23.27-48.74,34.71,0,0-1.86,1.31-1.86,1.31,0,0-2.66-1.16-2.66-1.16-5.23-2.02-10.1-4.72-15.04-7.34-9.51-4.88-34.84-17.91-44.65-22.95,0,0,7.29-4.45,7.29-4.45v61.32s-2.5-4.33-2.5-4.33l58.96,33.97s-5.05.04-5.05.04l55.15-32.82s-2.44,4.3-2.44,4.3V62.73l2.55,4.36c-17.05-9.69-42.33-23.53-59.1-33.16,0,0,4.8.04,4.8.04-17.64,7.86-36.89,16.39-54.72,23.73h0Z"}),(0,r.jsx)("path",{fill:"#ff4136",d:"M97.61,163.86c-1.89-2.48-3.62-5.34-5.05-8.06.13-5.36.02-18.63.06-24.19,0-5.31,0-19.05,0-24.19,1.47-2.7,3.16-5.55,5-8.06,1.84,2.51,3.53,5.36,5,8.06,0,5.08,0,18.92,0,24.19.02,5.62-.07,18.74.05,24.19-1.44,2.72-3.17,5.58-5.05,8.06h0Z"})]})};var K=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 195.28",children:[(0,r.jsx)("path",{d:"M188.65,84.23c-8.88-3.46-17.57-7.29-26.16-11.35-15.33-10.53-53.98-36.08-69.95-46.83,0,0,5.49.04,5.49.04-12.55,8.11-51.23,33.08-63.16,40.79-1.98,1.14-3.65,2.76-5.78,3.65-4.22,1.86-8.44,3.72-12.73,5.49-3.64,1.52-9.23,3.82-12.92,5.19,2.72-2.84,7.15-6.86,10.05-9.64,3.37-3.17,6.81-6.26,10.24-9.34,1.69-1.57,3.85-2.42,5.71-3.76,13.58-8.77,51.86-33.5,65.92-42.57,0,0,2.73,1.82,2.73,1.82,16.22,10.75,54.22,36.39,70.05,46.67,7.04,6.38,13.9,12.94,20.5,19.82h0Z"}),(0,r.jsx)("path",{d:"M87.07,119.15c1.75-4.36,3.05-8.87,3.48-13.5.29-2.41-.46-5.07-.09-7.34,0,0,3.51-16.31,3.51-16.31l6.06,14.12c1.11,2.43,2.97,5.97,4.2,8.4,1.22,2.33,2.79,5.69,4.16,7.89,3.18,5.21,6.77,10.37,10.02,15.68,1.8,3.06,3.95,6.28,4.8,9.85,1.36,6.81,1.59,14.49-2.12,20.74-5.4,8.21-15.16,14.36-25.36,13.26-8.44-.99-20.1-6.73-23.16-15.09-1.37-3.7-1.73-7.04-2.19-10.58-.15-2.98.78-5.74,2.05-8.53.51-1,1-1.54,1.54-2.36,3.85-5.18,7.82-10.02,11.99-14.83-1.99,6.42-4.28,12.71-6.15,18.99-.08.32-.21.73-.12.8.06.37.1.92.21,1.5.14,1.23.72,2.54.68,3.82-.07,2.51.58,5.39,1.36,7.66.76,2.12,2.39,3.11,4.21,4.47,4.12,2.69,9.06,4.84,14.01,4.1,4.89-.73,9.02-3.94,12.05-7.93.62-.79.94-1.56,1.25-2.55,1-3.56.75-7.66-.01-11.35-.27-1.03-.8-1.92-1.33-2.95-4.49-8.19-10.43-15.58-14.72-24-1.05-2.05-3.15-6.2-4.2-8.25-.71-1.37-1.37-2.77-2.16-4.09,0,0,9.57-2.19,9.57-2.19-.22,7.85-7.33,16.28-13.53,20.59h0Z"})]})};var z=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 195.28",children:[(0,r.jsx)("path",{d:"M188.65,84.23c-8.88-3.46-17.57-7.29-26.16-11.35-15.33-10.53-53.98-36.08-69.95-46.83,0,0,5.49.04,5.49.04-12.55,8.11-51.23,33.08-63.16,40.79-1.98,1.14-3.65,2.76-5.78,3.65-4.22,1.86-8.44,3.72-12.73,5.49-3.64,1.52-9.23,3.82-12.92,5.19,2.72-2.84,7.15-6.86,10.05-9.64,3.37-3.17,6.81-6.26,10.24-9.34,1.69-1.57,3.85-2.42,5.71-3.76,13.58-8.77,51.86-33.5,65.92-42.57,0,0,2.73,1.82,2.73,1.82,16.22,10.75,54.22,36.39,70.05,46.67,7.04,6.38,13.9,12.94,20.5,19.82h0Z"}),(0,r.jsx)("path",{d:"M113.13,126.3c1.75-4.36,3.05-8.87,3.48-13.5.29-2.41-.46-5.07-.09-7.34,0,0,3.51-16.31,3.51-16.31l6.06,14.12c1.11,2.43,2.97,5.97,4.2,8.4,1.22,2.33,2.79,5.69,4.16,7.89,3.18,5.21,6.77,10.37,10.02,15.68,1.8,3.06,3.95,6.28,4.8,9.85,1.36,6.81,1.59,14.49-2.12,20.74-5.4,8.21-15.16,14.36-25.36,13.26-8.44-.99-20.1-6.73-23.16-15.09-1.37-3.7-1.73-7.04-2.19-10.58-.15-2.98.78-5.74,2.05-8.53.51-1,1-1.54,1.54-2.36,3.85-5.18,7.82-10.02,11.99-14.83-1.99,6.42-4.28,12.71-6.15,18.99-.08.32-.21.73-.12.8.06.37.1.92.21,1.5.14,1.23.72,2.54.68,3.82-.07,2.51.58,5.39,1.36,7.66.76,2.12,2.39,3.11,4.21,4.47,4.12,2.69,9.06,4.84,14.01,4.1,4.89-.73,9.02-3.94,12.05-7.93.62-.79.94-1.56,1.25-2.55,1-3.56.75-7.66-.01-11.35-.27-1.03-.8-1.92-1.33-2.95-4.49-8.19-10.43-15.58-14.72-24-1.05-2.05-3.15-6.2-4.2-8.25-.71-1.37-1.37-2.77-2.16-4.09l9.57-2.19c-.22,7.85-7.33,16.28-13.53,20.59h0Z"}),(0,r.jsx)("path",{d:"M57.59,111.27c1.75-4.36,3.05-8.87,3.48-13.5.29-2.41-.46-5.07-.09-7.34,0,0,3.51-16.31,3.51-16.31,0,0,6.06,14.12,6.06,14.12,1.11,2.43,2.97,5.97,4.2,8.4,1.22,2.33,2.79,5.69,4.16,7.89,3.18,5.21,6.77,10.37,10.02,15.68,1.8,3.06,3.95,6.28,4.8,9.85,1.36,6.81,1.59,14.49-2.12,20.74-5.4,8.21-15.16,14.36-25.36,13.26-8.44-.99-20.1-6.73-23.16-15.09-1.37-3.7-1.73-7.04-2.19-10.58-.15-2.98.78-5.74,2.05-8.53.51-1,1-1.54,1.54-2.36,3.85-5.18,7.82-10.02,11.99-14.83-1.99,6.42-4.28,12.71-6.15,18.99-.08.32-.21.73-.12.8.06.37.1.92.21,1.5.14,1.23.72,2.54.68,3.82-.07,2.51.58,5.39,1.36,7.66.76,2.12,2.39,3.11,4.21,4.47,4.12,2.69,9.06,4.84,14.01,4.1,4.89-.73,9.02-3.94,12.05-7.93.62-.79.94-1.56,1.25-2.55,1-3.56.75-7.66-.01-11.35-.27-1.03-.8-1.92-1.33-2.95-4.49-8.19-10.43-15.58-14.72-24-1.05-2.05-3.15-6.2-4.2-8.25-.71-1.37-1.37-2.77-2.16-4.09,0,0,9.57-2.19,9.57-2.19-.22,7.85-7.33,16.28-13.53,20.59h0Z"})]})};var V=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 195.28",children:[(0,r.jsx)("path",{d:"M3.45,99.91c8.88,3.46,17.57,7.29,26.16,11.35,15.33,10.53,53.98,36.08,69.95,46.83,0,0-5.49-.04-5.49-.04,12.55-8.11,51.23-33.08,63.16-40.79,1.98-1.14,3.65-2.76,5.78-3.65,4.22-1.86,8.44-3.72,12.73-5.49,3.64-1.52,9.23-3.82,12.92-5.19-2.72,2.84-7.15,6.86-10.05,9.64-3.37,3.17-6.81,6.26-10.24,9.34-1.69,1.57-3.85,2.42-5.71,3.76-13.58,8.77-51.86,33.5-65.92,42.57,0,0-2.73-1.82-2.73-1.82-16.22-10.75-54.22-36.39-70.05-46.67-7.04-6.38-13.9-12.94-20.5-19.82h0Z"}),(0,r.jsx)("path",{d:"M87.07,55.82c1.75-4.36,3.05-8.87,3.48-13.5.29-2.41-.46-5.07-.09-7.34,0,0,3.51-16.31,3.51-16.31l6.06,14.12c1.11,2.43,2.97,5.97,4.2,8.4,1.22,2.33,2.79,5.69,4.16,7.89,3.18,5.21,6.77,10.37,10.02,15.68,1.8,3.06,3.95,6.28,4.8,9.85,1.36,6.81,1.59,14.49-2.12,20.74-5.4,8.21-15.16,14.36-25.36,13.26-8.44-.99-20.1-6.73-23.16-15.09-1.37-3.7-1.73-7.04-2.19-10.58-.15-2.98.78-5.74,2.05-8.53.51-1,1-1.54,1.54-2.36,3.85-5.18,7.82-10.02,11.99-14.83-1.99,6.42-4.28,12.71-6.15,18.99-.08.32-.21.73-.12.8.06.37.1.92.21,1.5.14,1.23.72,2.54.68,3.82-.07,2.51.58,5.39,1.36,7.66.76,2.12,2.39,3.11,4.21,4.47,4.12,2.69,9.06,4.84,14.01,4.1,4.89-.73,9.02-3.94,12.05-7.93.62-.79.94-1.56,1.25-2.55,1-3.56.75-7.66-.01-11.35-.27-1.03-.8-1.92-1.33-2.95-4.49-8.19-10.43-15.58-14.72-24-1.05-2.05-3.15-6.2-4.2-8.25-.71-1.37-1.37-2.77-2.16-4.09l9.57-2.19c-.22,7.85-7.33,16.28-13.53,20.59h0Z"})]})};var Y=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 195.28",children:[(0,r.jsx)("path",{d:"M3.45,99.91c8.88,3.46,17.57,7.29,26.16,11.35,15.33,10.53,53.98,36.08,69.95,46.83,0,0-5.49-.04-5.49-.04,12.55-8.11,51.23-33.08,63.16-40.79,1.98-1.14,3.65-2.76,5.78-3.65,4.22-1.86,8.44-3.72,12.73-5.49,3.64-1.52,9.23-3.82,12.92-5.19-2.72,2.84-7.15,6.86-10.05,9.64-3.37,3.17-6.81,6.26-10.24,9.34-1.69,1.57-3.85,2.42-5.71,3.76-13.58,8.77-51.86,33.5-65.92,42.57,0,0-2.73-1.82-2.73-1.82-16.22-10.75-54.22-36.39-70.05-46.67-7.04-6.38-13.9-12.94-20.5-19.82h0Z"}),(0,r.jsx)("path",{d:"M113.13,63.97c1.75-4.36,3.05-8.87,3.48-13.5.29-2.41-.46-5.07-.09-7.34,0,0,3.51-16.31,3.51-16.31l6.06,14.12c1.11,2.43,2.97,5.97,4.2,8.4,1.22,2.33,2.79,5.69,4.16,7.89,3.18,5.21,6.77,10.37,10.02,15.68,1.8,3.06,3.95,6.28,4.8,9.85,1.36,6.81,1.59,14.49-2.12,20.74-5.4,8.21-15.16,14.36-25.36,13.26-8.44-.99-20.1-6.73-23.16-15.09-1.37-3.7-1.73-7.04-2.19-10.58-.15-2.98.78-5.74,2.05-8.53.51-1,1-1.54,1.54-2.36,3.85-5.18,7.82-10.02,11.99-14.83-1.99,6.42-4.28,12.71-6.15,18.99-.08.32-.21.73-.12.8.06.37.1.92.21,1.5.14,1.23.72,2.54.68,3.82-.07,2.51.58,5.39,1.36,7.66.76,2.12,2.39,3.11,4.21,4.47,4.12,2.69,9.06,4.84,14.01,4.1,4.89-.73,9.02-3.94,12.05-7.93.62-.79.94-1.56,1.25-2.55,1-3.56.75-7.66-.01-11.35-.27-1.03-.8-1.92-1.33-2.95-4.49-8.19-10.43-15.58-14.72-24-1.05-2.05-3.15-6.2-4.2-8.25-.71-1.37-1.37-2.77-2.16-4.09l9.57-2.19c-.22,7.85-7.33,16.28-13.53,20.59h0Z"}),(0,r.jsx)("path",{d:"M58.59,43.94c1.75-4.36,3.05-8.87,3.48-13.5.29-2.41-.46-5.07-.09-7.34,0,0,3.51-16.31,3.51-16.31,0,0,6.06,14.12,6.06,14.12,1.11,2.43,2.97,5.97,4.2,8.4,1.22,2.33,2.79,5.69,4.16,7.89,3.18,5.21,6.77,10.37,10.02,15.68,1.8,3.06,3.95,6.28,4.8,9.85,1.36,6.81,1.59,14.49-2.12,20.74-5.4,8.21-15.16,14.36-25.36,13.26-8.44-.99-20.1-6.73-23.16-15.09-1.37-3.7-1.73-7.04-2.19-10.58-.15-2.98.78-5.74,2.05-8.53.51-1,1-1.54,1.54-2.36,3.85-5.18,7.82-10.02,11.99-14.83-1.99,6.42-4.28,12.71-6.15,18.99-.08.32-.21.73-.12.8.06.37.1.92.21,1.5.14,1.23.72,2.54.68,3.82-.07,2.51.58,5.39,1.36,7.66.76,2.12,2.39,3.11,4.21,4.47,4.12,2.69,9.06,4.84,14.01,4.1,4.89-.73,9.02-3.94,12.05-7.93.62-.79.94-1.56,1.25-2.55,1-3.56.75-7.66-.01-11.35-.27-1.03-.8-1.92-1.33-2.95-4.49-8.19-10.43-15.58-14.72-24-1.05-2.05-3.15-6.2-4.2-8.25-.71-1.37-1.37-2.77-2.16-4.09l9.57-2.19c-.22,7.85-7.33,16.28-13.53,20.59h0Z"})]})};var J=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 195.28",children:[(0,r.jsx)("path",{d:"M3.45,99.91c8.88,3.46,17.57,7.29,26.16,11.35,15.33,10.53,53.98,36.08,69.95,46.83,0,0-5.49-.04-5.49-.04,12.55-8.11,51.23-33.08,63.16-40.79,1.98-1.14,3.65-2.76,5.78-3.65,4.22-1.86,8.44-3.72,12.73-5.49,3.64-1.52,9.23-3.82,12.92-5.19-2.72,2.84-7.15,6.86-10.05,9.64-3.37,3.17-6.81,6.26-10.24,9.34-1.69,1.57-3.85,2.42-5.71,3.76-13.58,8.77-51.86,33.5-65.92,42.57,0,0-2.73-1.82-2.73-1.82-16.22-10.75-54.22-36.39-70.05-46.67-7.04-6.38-13.9-12.94-20.5-19.82h0Z"}),(0,r.jsx)("path",{d:"M88.82,62.97c1.75-4.36,3.05-8.87,3.48-13.5.29-2.41-.46-5.07-.09-7.34,0,0,3.51-16.31,3.51-16.31l6.06,14.12c1.11,2.43,2.97,5.97,4.2,8.4,1.22,2.33,2.79,5.69,4.16,7.89,3.18,5.21,6.77,10.37,10.02,15.68,1.8,3.06,3.95,6.28,4.8,9.85,1.36,6.81,1.59,14.49-2.12,20.74-5.4,8.21-15.16,14.36-25.36,13.26-8.44-.99-20.1-6.73-23.16-15.09-1.37-3.7-1.73-7.04-2.19-10.58-.15-2.98.78-5.74,2.05-8.53.51-1,1-1.54,1.54-2.36,3.85-5.18,7.82-10.02,11.99-14.83-1.99,6.42-4.28,12.71-6.15,18.99-.08.32-.21.73-.12.8.06.37.1.92.21,1.5.14,1.23.72,2.54.68,3.82-.07,2.51.58,5.39,1.36,7.66.76,2.12,2.39,3.11,4.21,4.47,4.12,2.69,9.06,4.84,14.01,4.1,4.89-.73,9.02-3.94,12.05-7.93.62-.79.94-1.56,1.25-2.55,1-3.56.75-7.66-.01-11.35-.27-1.03-.8-1.92-1.33-2.95-4.49-8.19-10.43-15.58-14.72-24-1.05-2.05-3.15-6.2-4.2-8.25-.71-1.37-1.37-2.77-2.16-4.09l9.57-2.19c-.22,7.85-7.33,16.28-13.53,20.59h0Z"}),(0,r.jsx)("path",{d:"M146.23,41.32c1.75-4.36,3.05-8.87,3.48-13.5.29-2.41-.46-5.07-.09-7.34,0,0,3.51-16.31,3.51-16.31l6.06,14.12c1.11,2.43,2.97,5.97,4.2,8.4,1.22,2.33,2.79,5.69,4.16,7.89,3.18,5.21,6.77,10.37,10.02,15.68,1.8,3.06,3.95,6.28,4.8,9.85,1.36,6.81,1.59,14.49-2.12,20.74-5.4,8.21-15.16,14.36-25.36,13.26-8.44-.99-20.1-6.73-23.16-15.09-1.37-3.7-1.73-7.04-2.19-10.58-.15-2.98.78-5.74,2.05-8.53.51-1,1-1.54,1.54-2.36,3.85-5.18,7.82-10.02,11.99-14.83-1.99,6.42-4.28,12.71-6.15,18.99-.08.32-.21.73-.12.8.06.37.1.92.21,1.5.14,1.23.72,2.54.68,3.82-.07,2.51.58,5.39,1.36,7.66.76,2.12,2.39,3.11,4.21,4.47,4.12,2.69,9.06,4.84,14.01,4.1,4.89-.73,9.02-3.94,12.05-7.93.62-.79.94-1.56,1.25-2.55,1-3.56.75-7.66-.01-11.35-.27-1.03-.8-1.92-1.33-2.95-4.49-8.19-10.43-15.58-14.72-24-1.05-2.05-3.15-6.2-4.2-8.25-.71-1.37-1.37-2.77-2.16-4.09l9.57-2.19c-.22,7.85-7.33,16.28-13.53,20.59h0Z"}),(0,r.jsx)("path",{d:"M34.29,42.94c1.75-4.36,3.05-8.87,3.48-13.5.29-2.41-.46-5.07-.09-7.34,0,0,3.51-16.31,3.51-16.31s6.06,14.12,6.06,14.12c1.11,2.43,2.97,5.97,4.2,8.4,1.22,2.33,2.79,5.69,4.16,7.89,3.18,5.21,6.77,10.37,10.02,15.68,1.8,3.06,3.95,6.28,4.8,9.85,1.36,6.81,1.59,14.49-2.12,20.74-5.4,8.21-15.16,14.36-25.36,13.26-8.44-.99-20.1-6.73-23.16-15.09-1.37-3.7-1.73-7.04-2.19-10.58-.15-2.98.78-5.74,2.05-8.53.51-1,1-1.54,1.54-2.36,3.85-5.18,7.82-10.02,11.99-14.83-1.99,6.42-4.28,12.71-6.15,18.99-.08.32-.21.73-.12.8.06.37.1.92.21,1.5.14,1.23.72,2.54.68,3.82-.07,2.51.58,5.39,1.36,7.66.76,2.12,2.39,3.11,4.21,4.47,4.12,2.69,9.06,4.84,14.01,4.1,4.89-.73,9.02-3.94,12.05-7.93.62-.79.94-1.56,1.25-2.55,1-3.56.75-7.66-.01-11.35-.27-1.03-.8-1.92-1.33-2.95-4.49-8.19-10.43-15.58-14.72-24-1.05-2.05-3.15-6.2-4.2-8.25-.71-1.37-1.37-2.77-2.16-4.09l9.57-2.19c-.22,7.85-7.33,16.28-13.53,20.59h0Z"})]})};var $=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 194.42",children:[(0,r.jsx)("path",{d:"M6.72,162.56c2.58-4.8,5.49-9.31,8.55-13.75,7.92-6.46,27.27-22.81,35.41-29.58,7.78-6.52,27.84-23.32,35.37-29.63,4.83-2.16,9.98-4.32,15-6.04-2.58,4.64-5.61,9.34-8.58,13.71-7.44,6.23-27.67,23.17-35.38,29.62-8.19,6.88-27.46,22.91-35.34,29.67-4.91,2.23-9.86,4.3-15.04,6h0Z"}),(0,r.jsx)("path",{d:"M113.38,93.22c-1.76,5.04-3.89,9.84-6.17,14.6-6.71,7.38-23.03,25.99-29.92,33.71-6.57,7.42-23.52,26.57-29.87,33.75-4.38,2.76-9.07,5.57-13.7,7.94,1.78-4.88,4.01-9.89,6.21-14.56,6.28-7.1,23.37-26.4,29.88-33.75,6.91-7.84,23.2-26.11,29.83-33.79,4.45-2.84,8.96-5.54,13.74-7.9h0Z"}),(0,r.jsx)("path",{d:"M110.99,130.44c-.75-2.85-1.22-5.98-1.5-8.87,1.89-4.69,6.99-15.83,9.04-20.63,0,0,5.45-12.37,5.45-12.37,2.65,8.77,7.03,23.22,9.68,31.99.18.62.68,2.26.87,2.86.09.32.38.58.37.93-.39,2.14-1.12,4.63-1.75,6.77-.93,2.75-.44,2.66-2.77.84,0,0-1.82-1.53-1.82-1.53-1.2-1.02-2.34-2.07-3.39-3.13-.21-.28-.11-.66-.21-.98-.18-.59-.67-2.24-.86-2.86-.75-2.47-4.93-16.29-5.76-19.05,0,0,9.36.57,9.36.57-2.16,4.84-6.96,15.95-9.13,20.59-2.33,1.74-4.95,3.51-7.56,4.87h0Z"}),(0,r.jsx)("path",{d:"M155.46,126.33c-2.91-1.93-5.49-4.1-8-6.41-2.12-5.6-7.55-19.1-9.83-24.86,0,0-5.33-13.39-5.33-13.39,6.76,3.9,20.76,12,27.57,15.93,0,0,7.54,4.37,7.54,4.37,1.79,2.72,3.61,5.72,5.05,8.68-3.29.24-6.79.16-10.04-.04,0,0-7.55-4.35-7.55-4.35l-15.09-8.72,7.15-6.18c2.37,5.81,7.56,19.23,9.95,24.81-.23,3.4-.62,6.74-1.4,10.15h0Z"}),(0,r.jsx)("path",{d:"M182.01,90.51c-3.39.28-6.68.2-9.99-.08-1.17-.84-2.41-1.55-3.64-2.29-2.37-1.43-15.74-9.49-18.4-11.09,0,0-8.57-5.17-8.57-5.17,5.61-2.27,19.08-7.72,24.83-10.04,2.6-1.03,5.17-2.14,7.79-3.11,2.27.18,4.87.56,7.17.94,2.91.59,2.81.09,1.05,2.6,0,0-1.47,1.95-1.47,1.95-.98,1.3-2,2.5-3.03,3.7-2.56,1.12-5.18,2.12-7.76,3.18l-15.56,6.29s.71-8.92.71-8.92l14.72,8.87c2.18,1.27,5.18,3.23,7.4,4.37,1.79,2.79,3.4,5.66,4.74,8.79h0Z"}),(0,r.jsx)("path",{d:"M177.44,37.16c-2.08,2.83-4.3,5.2-6.57,7.45-5.46,1.81-18.79,6.14-24.42,8.02,0,0-8.77,2.89-8.77,2.89l2.38-8.92,4.44-16.69c.72-2.79,1.52-5.56,2.19-8.36,1.53-1.76,3.44-3.67,5.16-5.33,2.27-2.03,1.8-2.26,2.76.73,0,0,.68,2.42.68,2.42.45,1.61.8,3.19,1.14,4.77-.81,2.76-1.5,5.56-2.26,8.34l-4.44,16.69-6.4-6.04c5.71-1.92,18.89-6.18,24.41-8.06,3.16.46,6.36,1.05,9.71,2.09h0Z"}),(0,r.jsx)("path",{d:"M134.61,9.36c.88,3.27,1.38,6.48,1.71,9.76-.57,1.3-1.08,2.62-1.58,3.95-.98,2.56-6.47,17.02-7.57,19.89,0,0-3.55,9.32-3.55,9.32l-5.35-8.42c-3.1-4.99-10.42-16.29-13.4-21.13-.27-3.14-.42-6.53-.27-9.71,2.95,1.21,5.95,2.79,8.68,4.37,3.04,4.71,10.32,16.23,13.43,21.11,0,0-8.89.9-8.89.9l6.06-15.91c.87-2.35,2.2-5.63,2.96-7.98,2.42-2.23,4.93-4.3,7.76-6.16h0Z"}),(0,r.jsx)("path",{d:"M87.97,24.38c3.09,1.76,5.9,3.49,8.33,5.68.15.29.16.63.29.93,0,0,.81,1.75.81,1.75,0,0,1.63,3.49,1.63,3.49,2.78,5.99,8.7,18.54,11.45,24.46-6.48-2.13-21.27-7-27.87-9.17-1.39-.46-4.98-1.64-6.33-2.08-.62-.2-1.49-.55-2.14-.59-.38-.03-.64-.41-.94-.71l-.87-.91c-1.71-1.84-3.55-3.96-5.03-6.01,1.47-.5,3.6-.98,5.11-1.34,1.21-.27,2.53-.52,3.75-.73.41-.06.85-.21,1.17-.01.54.36,1.46.58,2.08.8,0,0,2.11.69,2.11.69,2.73.9,18.03,5.93,21.09,6.94,0,0-6.09,6.87-6.09,6.87l-6.54-13.97-1.63-3.49-.82-1.74c-.14-.29-.4-.52-.53-.82-.13-3.27.35-6.54.97-10.04h0Z"}),(0,r.jsx)("path",{d:"M57.55,66.6c3.17-1.35,6.35-2.3,9.61-3.11,5.73,1.33,19.71,4.27,25.65,5.55,0,0,14.91,3.2,14.91,3.2-7.37,3.31-22.45,10.09-29.86,13.42,0,0-7.97,3.58-7.97,3.58-3.27-.13-6.77-.41-10.02-.98,1.73-2.81,3.86-5.61,5.92-8.14,0,0,7.97-3.59,7.97-3.59l15.94-7.17,1,9.45c-6.04-1.25-19.82-4.33-25.68-5.45-2.64-2.08-5.15-4.25-7.5-6.78h0Z"})]})};var Z=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 194.42",children:[(0,r.jsxs)("g",{children:[(0,r.jsx)("path",{d:"M31.6,85.46c1.22,14.8,6.51,35.05,14.34,51.01l-7.45,7.41c-7.75-14.52-12.29-30.67-15.48-46.74-1.5-7-1.66-15.16-1.29-22.35.39-10.78,1.09-21.47,1.87-32.22l.42-5.74c7.48,1.86,15.59,3.03,23.26,2.28,5.81-.44,11.14-2.22,16-5.3,2.67-1.48,5.09-3.45,7.69-5.09,8.17-4.8,16.07-10.2,23.79-15.74l2.49-1.78,1.34,2.18c4.69,7.26,9.86,14.59,16.8,19.9-7.27-3.36-13.32-8.84-18.9-14.58-6.26,6.43-12.77,12.56-19.7,18.32-3.31,2.5-7.06,4.58-10.65,6.69-9.99,5.65-21.74,6.46-32.94,5.03-.84,12.21-1.71,24.6-1.59,36.72Z"}),(0,r.jsx)("path",{d:"M160.97,115.62c-1.33,8.98-3.07,17.68-6.48,26.35-1.65,4.24-4.52,9.25-7.93,12.45l-3.16,3.19c-8.62,8.27-18.18,15.52-28.48,21.55-5.73,3.32-11.58,6.38-17.8,8.76-7.71-2.41-14.99-5.52-22.14-9.23-10.16-5.33-20.14-12.08-27.63-21.05l7.14-7.1c.35.46.71.9,1.07,1.34,10.81,12.1,26.02,19.92,41.22,25.38.69-.3,1.39-.61,2.03-.91,13.84-6.49,26.6-15.35,37.63-25.91,1.44-1.53,4.21-4.08,5.3-5.68,5.85-8.77,7.6-20.1,9.17-30.54,3.38-13.95,5.58-28.16,7.43-42.44,2.26,14.48,3.18,29.17,2.63,43.84Z"}),(0,r.jsx)("polygon",{id:"negate_Stroke_2","data-name":"negate Stroke 2",className:"cls-1",points:"178.01 21.7 182.29 12.33 172.39 16.86 13.66 174.23 9.65 184.23 9.65 184.23 19.3 179.85 178.01 21.7"})]}),(0,r.jsx)("g",{id:"Negate_Stroke","data-name":"Negate Stroke",children:(0,r.jsx)("polygon",{id:"negate_Stroke_2-2","data-name":"negate Stroke 2",className:"cls-1",points:"178.01 21.7 182.29 12.33 172.39 16.86 13.66 174.23 9.65 184.23 9.65 184.23 19.3 179.85 178.01 21.7"})})]})};var Q=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{viewBox:"0 0 200 200",children:[(0,r.jsx)("path",{d:"M5.6,115.03c-1.53-3.08-2.35-6.57-2.59-9.96.07-.39.53-.53.73-.83,3.21-4.78,6.86-9.17,10.82-13.29,2.16-2.33,4.74-4.43,7.39-6.1,7.25-4.58,15.38-7.23,23.51-9.12,1.98.74,3.97,1.54,5.84,2.56,1.53.79,3.04,1.66,4.51,2.74-2.2,2.62-4.32,5.03-6.52,7.54,0,0-.76.87-.76.87-.25.3-.58.25-.9.23-8.08,1.86-16.47,4.67-22.35,10.31-3.63,3.72-7.04,7.74-9.91,12.04-.17.25-.07.67-.37.83-3.02.78-6.37,1.4-9.41,2.17h0Z"}),(0,r.jsx)("path",{d:"M86.49,113.69c-.94-3.71-2.23-8.17-6-9.75-7.57-3.33-16.77-7.86-19.33-16.72-1.19-5.77.75-11.22,1.72-16.71,4.69-22.43,10.95-45.58,16.77-67.79,2.95,10.92,10.09,37.35,13.11,48.56,0,0-9.3-.93-9.3-.93l12.07-24.11,4.22-8.44c2.97,5.33,16.83,30.06,20.1,35.9,0,0-9.25,1.4-9.25,1.4,2.21-10.32,8.1-37.87,10.23-47.86,6.93,16.49,14.42,33.89,18.33,51.32,1.41,6.46,2.69,13.8,1.51,20.59-.46,4.87-2.56,9.38-5.63,13.2-2.75,3.66-7.13,6.47-10.89,8.43-1.67.9-2.81,2.24-4.04,3.72-2.54,3.19-4.91,6.72-7.17,10.29,1.09-4.15,2.33-8.21,4.06-12.18.93-2.09,2.12-4.36,3.83-5.98,4.41-4,7.77-8.03,8.71-13.84.63-3.02,1.7-6.03,1.61-9.18-.15-8.21-2.53-16.65-4.93-24.63-2.43-7.79-5.3-15.62-8.44-23.12l9.49-.92c-1.96,9.19-7.8,36.47-9.66,45.19-4.26-7.61-17.51-31.28-21.97-39.24,0,0,8.83-.2,8.83-.2-3.95,7.9-14.14,28.24-17.95,35.85-2.27-8.38-9.28-34.36-11.64-43.12,0,0,9.66-.02,9.66-.02-2.14,8.14-4.23,16.34-6.23,24.53-3.1,12.43-5.98,25.14-7.89,37.66.16,5.79,7.28,11.9,11.67,15.68,3.83,2.77,4.57,8.05,4.4,12.4h0Z"}),(0,r.jsx)("path",{d:"M145.49,79.25c3.18-1.98,6.74-3.63,10.31-4.55.34.01.6.29.9.44.61.25,1.25.43,1.88.65,6.67,2.35,12.93,4.85,18.81,9.17,5.28,4.32,9.52,9.16,14.22,13.97,0,0,1.31,1.39,1.31,1.39.38.35.89,1.09,1.36,1.33.15.08.3.15.37.31.22,2.22-.01,4.94-.14,7.21-.35,3.32.22,2.91-3.2,2.91,0,0-2.7-.06-2.7-.06-1.26-.04-2.61-.15-3.85-.25-.4-.01-.75-.05-.85-.47-.21-.49-.86-.99-1.2-1.41-3.74-3.97-7.65-8.06-11.56-11.82-2.42-2.4-4.39-3.52-7.51-5.13-3.82-1.78-8-3.68-12.15-4.58-2.16-2.8-4.12-6.04-5.97-9.12h0Z"}),(0,r.jsx)("path",{d:"M147.49,191.36c-4.83-2.4-9.23-5.78-12.64-9.98-1.35-4.87-2.67-10.09-1.92-15.34,1.11-6.82,3.15-13.51,6.64-19.53,0,0,1.57-2.54,1.57-2.54,2.01-.37,4.69-.96,6.62-1.22,9.14-1.17,21.91-2.72,29.44,4.07,2.88,2.7,5.38,5.7,7.96,8.63.44.39.95.71,1.11,1.33,1.38,4.93,2.43,9.85,2.91,15.01-4.91-1.88-9.38-4.01-13.73-6.06-.56-.25-.76-.78-1.04-1.24-2.1-2.61-4.38-5.14-6.76-7.46-.17-.15-.32-.26-1.05-.51-4.22-1.21-9.15-.78-13.66-.34-1.94.22-4.16.55-6.01.91,0,0,4.52-3.13,4.52-3.13-2.2,4.01-3.58,8.46-4.44,12.97-.26,1.2-.32,2.26-.2,3.52.16,1.57.5,3.56,1.16,5.19.19.35.43.67.46,1.07-.56,4.8-.78,9.28-.9,14.63h0Z"}),(0,r.jsx)("path",{d:"M55.49,194.03c.15-5.61.49-10.51.46-15.58.01-.52.28-.93.55-1.32,1.2-2.32,2.17-5.54,2.21-7.81-.62-4.21-3.62-8.07-6.24-11.54-1.14-1.44-2.46-2.94-3.73-4.28,0,0,4.88,2.07,4.88,2.07-4.09,0-8.49.31-12.55.9-4.42.72-9.28,1.6-12.83,4.08-.46.34-.72.63-1.02,1.06-.89,1.26-1.92,2.47-2.5,3.92-.23.47-.77.74-1.25,1.07-3.85,2.59-7.74,5.52-11.87,8.75-.71-5.25-.4-10.48.48-15.69.13-.65.16-1.36.56-1.84,1.35-1.54,2.35-3.33,3.62-4.95,7.51-9.34,22.69-10.58,33.76-11.23,1.93-.11,4.62-.05,6.65-.05,0,0,2.01,2.06,2.01,2.06,3.36,3.52,6.28,7.11,8.92,11.25,2.07,3.29,4.03,7.12,4.8,11.25.89,4.21-.3,9.39-1.6,13-.37,1.17-.92,2.26-1.23,3.44-.13.6-.3,1.17-.72,1.63-3.96,3.94-8.36,7.25-13.37,9.8h0Z"}),(0,r.jsx)("path",{d:"M79.49,77.03c1.79-.68,3.27-.98,4.76-1.29.67.66,1.43,1.22,2.14,1.84,2.16,1.8,6.51,5.43,8.67,7.24,0,0,2.17,1.81,2.17,1.81-.06,1.54-.09,3.05-.4,4.88-1.75.63-3.23.93-4.73,1.26l-2.17-1.81c-2.16-1.8-6.51-5.43-8.67-7.24-.73-.59-1.42-1.24-2.19-1.78.04-1.52.08-3.03.42-4.91h0Z"}),(0,r.jsx)("path",{d:"M107.04,91.5c-.78-1.67-1.19-3.02-1.61-4.39.56-.55,1.02-1.19,1.53-1.78,1.5-1.8,4.5-5.43,6-7.24,0,0,1.5-1.81,1.5-1.81,1.44.17,2.84.32,4.58.74.73,1.63,1.14,2.98,1.58,4.36l-1.5,1.81c-1.5,1.8-4.5,5.43-6,7.24-.49.61-1.03,1.18-1.47,1.83-1.42-.16-2.83-.31-4.61-.77h0Z"})]})};var X=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{viewBox:"0 0 193.44 194.42",children:[(0,r.jsx)("path",{d:"M165.54,70.08c1.93,12.16,2.8,24.42,2.79,36.77-.06,3.1.08,6.25-.42,9.32-.59,3.07-1.17,6.15-1.8,9.22-1.9,8.49-4.49,18-10.31,25.15-11.21,12.28-25.27,21.62-39.95,29.17-6.12,3.09-12.28,5.89-18.79,8.18-14.77-4.79-28.68-11.58-40.82-21.46-19.25-15.35-28.63-45.86-33.22-69.29-1.5-7.01-1.66-15.16-1.29-22.36.4-10.78,1.09-21.47,1.87-32.22,0,0,.42-5.74.42-5.74l5.68,1.24c8.44,1.62,17.69,1.96,25.92-.59,4.14-1.37,7.9-3.71,11.52-6.13,3.77-2.81,7.93-4.98,11.88-7.58,6.18-3.96,12.26-8.28,18.24-12.57,5,8.07,10.53,16.22,18.14,22.08-8.19-3.79-14.84-10.26-21-16.77,0,0,3.84.4,3.84.4-6.8,7.09-13.87,13.82-21.44,20.11-3.31,2.5-7.06,4.59-10.65,6.69-11.71,6.62-25.83,6.59-38.67,4.11,0,0,6.1-4.5,6.1-4.5-.93,13.94-2.1,28.22-1.96,42.14,1.67,20.26,10.97,50.71,23.96,66.42,11.2,12.53,27.12,20.48,42.86,25.95,0,0-3.13.06-3.13.06,5.41-2,10.83-4.47,16-7.09,13.53-6.96,26.48-15.5,36.83-26.68,4.62-5.94,6.44-13.25,8.19-20.82.63-2.86,1.12-5.75,1.43-8.67,3.26-14.71,5.95-29.37,7.79-44.55h0Z"}),(0,r.jsx)("path",{d:"M79.8,117.86c-11.37,1.09-22.76,2.04-34.14,2.86-.09-1.19-1.4-19.41-1.53-21.19-.24-3.06,0-6.11,0-9.17.02-2.68,0-10.58,0-13.17,0,0,4,0,4,0h31.67l-4,4v-35.67s0-4,0-4c1.1.09,36.5-.07,38.67,0,0,0,4,0,4,0-.05.56.04,38.3,0,40.17,0,0-4-4-4-4,2.24,0,36.35,0,37.67,0,0,0,0,4,0,4,.02,2.45-.01,36.01,0,37.5,0,0-4,0-4,0h-31.67s4-4,4-4v40.33c-4.22,0-8.72-.03-12.92.08-7.35-.03-21.82-1.49-29.28-1.9.47-5.79,1.37-17.47,1.9-23.18,0,0,.63-7,.63-7,.33,3.48.94,10.52,1.24,14,0,0,1.12,14,1.12,14,0,0-2.36-2.36-2.36-2.36,6.27-.34,20.68-1.76,26.75-1.72,2.97.11,5.94.08,8.92.08l-4,4c.01-2.15,0-39.44,0-40.33.54-.03,33.73.02,35.67,0,0,0-4,4-4,4v-33.5s4,4,4,4c-2.55,0-36.12,0-37.67,0-.03-.9.02-38.08,0-40.17,0,0,4,4,4,4h-34.67s4-4,4-4c0,2.29,0,38.56,0,39.67-.53.07-33.73-.05-35.67,0,0,0,4-4,4-4-.12,5.44.24,12.99,0,18.33,0,0-1.32,18.33-1.32,18.33l-2.68-2.68c10.56.79,21.12,1.66,31.67,2.68h0Z"})]})};var ee=e=>{let{className:t}=e;return(0,r.jsxs)("svg",{viewBox:"0 0 200 200",children:[(0,r.jsx)("path",{d:"M4.74,180.42c5.52-5.98,11.51-11.47,17.69-16.72,10.37-5.94,20.85-11.74,31.54-17.11,10.77-5.38,21.67-10.35,32.97-14.66,15.09-5.76,31.02-9.5,47-11.72,7.99-1.09,16-1.81,24.04-2.22,4.05.52,8.08,1.17,12.08,1.96,4,.83,7.97,1.7,11.87,2.93-7.85,1.54-15.71,3.24-23.45,5.1-15.47.76-30.91,2.83-45.96,6.43-15.05,3.71-29.46,9.41-43.51,16.02-14.17,6.65-28.01,14.01-41.48,21.99-7.49,2.74-15.03,5.44-22.78,7.99h0Z"}),(0,r.jsx)("path",{d:"M5.57,155.28c1.91-8.36,4.48-16.54,8.57-24.17,5.99-10.26,13.71-20.35,20.92-29.86.38,4.07.9,13.2,1.66,17.15.43,2.83,1.25,5.72,1.91,8.48.26.78.34,2.03,1.1,2.55,3.06,1.9,8.63.37,11.43-2.23,4.13-3.64,9.82-8.86,11.17-14.13.04-.32-.04-.46-.09-.73-1-5.25-3.35-10.03-8.3-12.44,0,0-2.69-1.48-2.69-1.48-5.96-3.18-13.41-7.1-19.47-10.24,3.32-1.75,9.67-5.42,13.09-6.62,11.45-4.62,27.9-5.26,35.41,6.52,2.74,3.9,3.56,8.18,5.83,11.01.12.1.1.08.14.1.64.19,1.3.36,1.96.52,4.89,1.03,12.39,2.17,14.95-2.69,2.63-5.72.68-13.41-3.41-18.03-.96-1.04-1.73-1.3-3.49-1.74-4.19-.96-10.4-.84-14.95-3.77-1.29-.76-2.47-1.98-3.47-3.2-1.94-2.02-4.44-3.66-7.17-5.35-4.94-3.13-15.49-7.81-20.79-10.45,0,0,14.2-3.09,14.2-3.09,4.44-.97,15.62-3.4,19.9-4.33,13.31-2.74,27.75-5.71,41.03-.47,7.55,3.02,15.21,6.5,20.5,13.07,6.17,8.2,7.9,18.13,9.32,27.89,0,0-8.06-3.31-8.06-3.31,3.56-3.1,6.73-7.21,7.75-11.81.54-3.09.23-6.3.24-9.53-.26-9.38-.76-18.9-1.4-28.28,0,0-.9-12.39-.9-12.39,3.21,2.97,10.89,9.63,13.92,12.56,4.29,4.57,8.22,9.46,12.04,14.43,6.18,8.46,12.97,17.6,13.85,28.45.31,13.75-6.94,26.02-13.05,37.82-.45.91-.94,1.82-1.2,2.81.36-1.75,1.53-4.05,2.21-5.72,4.86-11.32,12.64-28.05,7.51-40.09-1.72-3.41-4.15-6.58-6.73-9.58-5.22-6.04-11.09-11.58-17.14-16.82-3.06-2.52-6.06-5.29-8.85-8.06,0,0,8.35-4.07,8.35-4.07.49,8.57,1.2,20.25,1.38,28.72.03,3.16.19,6.27-.09,9.55-.5,5.06-2.91,9.93-5.91,13.82-1.46,1.91-3.09,3.67-4.88,5.27-.04.13-7.42,6-7.77,6.31,0,0-1.19-8.85-1.19-8.85-1.15-7.85-2.53-16.51-7.24-22.92-3.68-4.5-9.43-7.1-14.79-9.36-5.58-2.53-11.34-3.05-17.65-2.66-8.46.48-17.5,2.66-25.89,4.46,0,0-13.13,2.86-13.13,2.86,0,0,1.05-9.41,1.05-9.41,3.01,1.45,5.76,2.93,8.58,4.63,3.38,2.09,7.29,4.62,10.11,8,.22.27.36.44.73.67,3.42,1.74,7.14,1.32,11.82,2.45,3.87.66,8.12,3.36,10.41,6.91,5.41,7.79,7.37,18.12,3.26,26.97-4.53,9.79-17.25,10.42-26.26,8.07-13.86-2.16-8.79-18.99-22-20.72-6.13-.97-12.62.77-18.25,3.38,0,0-.78.39-.78.39,0,0-.1-8.82-.1-8.82,5.77,3.15,11.72,5.84,17.25,9.52,5.33,3.71,8.48,10.02,9.79,16.15.07.22.22,1.03.28,1.25.62,2.69-.06,5.77-1.06,8.01-2.52,5.58-6.61,9.94-10.92,14.03-1.29,1.18-2.58,2.32-4,3.4-2.79,2.08-6.09,3.33-9.4,3.91-6.76,1.39-15.24-1.31-17.52-8.67-1.97-6.11-1.92-12.42-1.64-18.78,0,0,7.31,2.88,7.31,2.88-5.11,4.84-10.69,10.34-15.51,15.54-5.98,7.16-10.18,15.79-13.82,24.4h0Z"})]})},te=a(8314);var ae=e=>{let{keyword:t}=e;const a=t.ID,n=a?ne[a]:void 0;return(0,r.jsxs)("div",{className:"Keyword_v2_popover",children:[(0,r.jsxs)("div",{className:`Keyword_v2_popover-headline kw-style-${t.ID}`,children:[n&&(0,r.jsx)(n,{className:"kw-icon"}),(o=t.Name||"",o?o.toLowerCase().split(" ").map((e=>0===e.length?"":e[0].toUpperCase()+e.slice(1))).join(" "):"")]}),(0,r.jsx)("div",{className:"Keyword_v2_popover-content",children:(0,te.fE)(t,t.Description)})]});var o};const ne={kw_strong:i.A,kw_fear:l,kw_negate_kw_fear:s,kw_tough:c,kw_leader:d,kw_gas:u,kw_ammunition_kw_gas:u,kw_negate_kw_gas:h,kw_fire:p,kw_ammunition_kw_fire:p,kw_negate_kw_fire:m,kw_shrapnel:f,kw_ammunition_kw_shrapnel:f,kw_negate_kw_shrapnel:g,kw_blast:y,kw_blast1:_,kw_blast2:b,kw_blast3:v,kw_infiltrator:w,kw_heavy:k,kw_critical:x,kw_armourpiercing:C,kw_assault:j,kw_scatter:S,kw_reload:I,kw_cover:A,kw_ignoremodifiercover:N,kw_cumbersome:E,kw_held:T,kw_consumable:D,kw_shotgun:R,kw_bayonetlug:M,kw_shieldcombo:O,kw_pistol:q,kw_automatic2:P,kw_automatic3:G,kw_riskyaction:F,kw_block:L,kw_plusdice:H,kw_plusdice1:H,kw_minusdice1:U,kw_injurydice1:W,kw_ammunition_kw_injurydice1:W,kw_injurydice2:W,"kw_injurydice-1":B,kw_injurymodifier1:K,kw_injurymodifier2:z,"kw_injurymodifier-1":V,"kw_injurymodifier-2":Y,"kw_injurymodifier-3":J,kw_ignoremodifierlong_range:$,kw_ignorearmour:Z,kw_ignoremodifierarmour:Z,kw_impervious:X,kw_golem:Q,kw_flamethrower:ee};var oe=e=>{let{className:t,keyword:a,type:i="block",alt_name:s=""}=e;const l=a.ID,c=l?ne[l]:void 0;return(0,r.jsx)("div",{className:`Keyword_v2 type-${i} ${a.ID}`,children:(0,r.jsx)(o.A,{placement:"auto",overlay:(0,r.jsx)(n.A,{children:(0,r.jsx)(n.A.Body,{bsPrefix:"empty",className:"popover rules-popover-element",id:"tooltip",children:(0,r.jsx)(ae,{keyword:a})})}),children:(0,r.jsxs)("span",{className:`kw-tag kw-style-${a.ID}`,children:[c&&(0,r.jsx)(c,{className:"kw-icon"}),(0,r.jsx)("span",{className:"kw-name",children:(d=s||a.Name,d?d.toLowerCase().split(" ").map((e=>0===e.length?"":e[0].toUpperCase()+e.slice(1))).join(" "):"")})]})})});var d}},1838:function(e,t,a){"use strict";a(5043);var n=a(6014),o=a(579);t.A=e=>{let{model_slug:t,faction_slug:a=""}=e;return t?(0,o.jsx)("div",{className:"fighter-image-wrap",children:(0,o.jsx)(n.A,{modelSlug:t,factionSlug:a,size:"medium",className:"fighter-image"})}):null}},7164:function(e,t,a){"use strict";a(5043);var n=a(579);t.A=e=>{let{className:t,label:a,value:o}=e;return(0,n.jsxs)("div",{className:`fighter-meta-entry-simple ${t}`,children:[(0,n.jsxs)("span",{className:"fighter-meta-label",children:[a,":"]}),(0,n.jsx)("span",{className:"fighter-meta-value",children:o})]})}},4300:function(e,t,a){"use strict";a(5043);var n=a(6252),o=a(579);t.A=e=>{let{keywords:t,modelId:a}=e;return t&&0!==t.length?(0,o.jsx)("div",{className:"fighter-meta-entry-simple fighter-keywords mt-2",children:(0,o.jsx)(n.A,{keywords:t})}):null}},2884:function(e,t,a){"use strict";a(5043);var n=a(4201),o=a(579);t.A=e=>{let{movement:t,ranged:a,melee:i,armour:r}=e;return(0,o.jsxs)("div",{className:"fighter-card-stats",children:[(0,o.jsx)(n.A,{title:"Movement",value:t}),(0,o.jsx)(n.A,{title:"Melee",value:i}),(0,o.jsx)(n.A,{title:"Ranged",value:a}),(0,o.jsx)(n.A,{title:"Armour",value:r})]})}},5947:function(e,t,a){"use strict";a(5043);var n=a(579);t.A=e=>{let{name:t}=e;return(0,n.jsx)("div",{className:"fighter-card-title",children:t})}},2410:function(e,t,a){"use strict";a(5043);var n=a(3216),o=a(3910),i=a(7929),r=a(4587),s=a(579);t.A=e=>{let{link:t,title:a,children:l,type:c}=e;const d=(0,n.Zp)();let u="";return"inline"==c&&(u="inline"),(0,s.jsxs)("div",{className:"RulesBannerText "+u,children:[(0,s.jsxs)(r.A,{link:t,runfunc:()=>{d(t,{state:Date.now().toString()})},classes:"RulesBannerText-link",children:[a,(0,s.jsx)(o.g,{icon:i.XkK,className:"icon-inline-right"})]}),l]})}},5402:function(e,t,a){"use strict";var n=a(5043),o=a(3910),i=a(7929),r=a(2306),s=a(579);t.A=e=>{let{headline:t,headlineIcon:a,content:l}=e;const[c,d]=(0,n.useState)(false);return(0,s.jsxs)("div",{className:"RulesCollapsibleContent",children:[(0,s.jsxs)("div",{className:"RulesCollapsibleContent-title",onClick:()=>{d(!c)},children:[(0,s.jsxs)("span",{className:"text",children:[a&&(0,s.jsx)(o.g,{icon:a,className:"icon-inline-left-l"}),t]}),(0,s.jsx)("span",{className:"collapse-chevron-wrap",children:(0,s.jsx)(o.g,{icon:c?i.w2A:i.Jt$,className:""})})]}),(0,s.jsx)(r.A,{in:c,children:(0,s.jsx)("div",{className:"RulesCollapsibleContent-content",children:(0,s.jsx)("div",{className:"RulesCollapsibleContent-content-inner",children:l})})})]})}},1409:function(e,t,a){"use strict";var n=a(5043),o=a(4286),i=a(6264),r=a(6421),s=a(6252),l=a(579);t.A=e=>{let{equipment:t}=e;const{settings:a}=(0,r.t)(),[c,d]=(0,n.useState)([]),[u,h]=(0,n.useState)(0);return(0,n.useEffect)((()=>{!async function(){const e=[],a=t.GetKeyWords();for(let t=0;t<a.length;t++)e.push(a[t]);const n=new i.J,o=await n.runEvent("findFinalKeywordsForEquipment",t,[t],e,null);d(o),h((e=>e+1))}()}),[]),(0,l.jsxs)("div",{className:"RulesEquipmentEntry",children:[(0,l.jsx)("h4",{className:"equipment-name",children:t.GetName()}),(0,l.jsx)("table",{className:"rules-equipment-stats-table",children:(0,l.jsxs)("tbody",{children:[""!=t.GetRange()&&(0,l.jsxs)("tr",{children:[(0,l.jsx)("td",{className:"label-cell",children:"Range"}),(0,l.jsx)("td",{children:t.GetRange()})]}),(""!=t.GetHandsMelee()||""!=t.GetHandsRanged())&&(0,l.jsxs)("tr",{children:[(0,l.jsx)("td",{className:"label-cell",children:"Hands"}),(0,l.jsxs)("td",{children:[(0,l.jsx)("div",{children:""!=t.GetHandsRanged()&&t.GetHandsRanged()+" (Ranged)"}),(0,l.jsx)("div",{children:""!=t.GetHandsMelee()&&t.GetHandsMelee()+" (Melee)"})]})]}),t.GetModifiers().length>0&&(0,l.jsxs)("tr",{children:[(0,l.jsx)("td",{className:"label-cell",children:"Modifiers"}),(0,l.jsx)("td",{children:t.GetModifiers()})]})]})}),c.length>0&&(0,l.jsxs)("div",{className:"rules-text-element",children:[(0,l.jsx)("div",{className:"text-label",children:"Keywords"}),(0,l.jsx)("div",{className:"mt-2 mb-3",children:(0,l.jsx)(s.A,{keywords:c})})]}),(t.GetDescription()||t.Abilities.length>0)&&(0,l.jsx)("div",{className:"rules-text-element",children:(0,l.jsxs)("p",{children:[t.GetDescription(),t.Abilities.map((e=>(0,l.jsx)(n.Fragment,{children:(0,l.jsx)(o.A,{data:e})},"equip_ability_"+t.ID+"_ability_id_"+e.ID)))]})}),t.GetLore()&&a.show_lore&&(0,l.jsxs)("div",{className:"rules-text-element",children:[(0,l.jsx)("div",{className:"text-label",children:"Lore"}),(0,l.jsx)("p",{children:t.GetLore()})]})]},u)}},7630:function(e,t,a){"use strict";a(2565);var n=a(5043),o=a(8314),i=a(4286),r=a(6252),s=a(6264),l=a(6421),c=a(579);t.A=e=>{const t=e.data,{settings:a}=(0,l.t)(),[d,u]=(0,n.useState)(t.KeyWord);return(0,n.useEffect)((()=>{!async function(){const e=[],a=t.GetKeyWords();for(let t=0;t<a.length;t++)e.push(a[t]);const n=new s.J,o=await n.runEvent("findFinalKeywordsForEquipment",t,[t],e,null);u(o)}()}),[t]),(0,c.jsxs)("div",{className:"RulesEquipmentMain",children:[(0,c.jsx)("div",{children:d.length>0&&(0,c.jsxs)("div",{className:"mb-3",children:[(0,c.jsx)("div",{className:"text-label mb-2",children:"Keywords"}),(0,c.jsx)(r.A,{keywords:d})]})},d.length),(t.Description.length>0||t.Abilities.length>0)&&(0,c.jsxs)("div",{className:"text-element text-rules",children:[(0,o.fE)(t,t.Description),t.Abilities.map((e=>(0,c.jsx)(n.Fragment,{children:(0,c.jsx)(i.A,{data:e})},"equip_ability_"+t.ID+"_ability_id_"+e.ID)))]}),t.Lore.length>0&&a.show_lore&&(0,c.jsxs)("div",{className:"text-element text-lore",children:[(0,c.jsx)("div",{className:"text-label",children:"Lore"}),(0,o.fE)(t,t.Lore)]})]})}},4416:function(e,t,a){"use strict";a(2565);var n=a(5043),o=a(6264),i=a(8736),r=a(579);t.A=e=>{if("undefined"===typeof e.facrelObject&&"undefined"===typeof e.baseobject)return null;const t=e.baseobject,[a,s]=(0,n.useState)(t.Stats),[l,c]=(0,n.useState)(null),[d,u]=(0,n.useState)(null),[h,m]=(0,n.useState)(null),[p,f]=(0,n.useState)([]),g=t,[y,_]=(0,n.useState)(0);(0,n.useEffect)((()=>{!async function(){if(void 0!=e.facrelObject){c(e.facrelObject.Cost),u(e.facrelObject.CostType),m(e.facrelObject.Limit);const t=await e.facrelObject.getFactionEquipmentStats();s(t);const a=new o.J;if(null!=e.facrelObject.RestrictedEquipment){const t=await a.runEvent("getEquipmentRestrictionPresentable",e.facrelObject,[],[],e.facrelObject.RestrictedEquipment);f(t),_((e=>e+1))}else{const t=await a.runEvent("getEquipmentRestriction",e.facrelObject,[],[],null);e.facrelObject.RestrictedEquipment=t;const n=await a.runEvent("getEquipmentRestrictionPresentable",e.facrelObject,[],[],e.facrelObject.RestrictedEquipment);f(n),_((e=>e+1))}}_((e=>e+1))}()}),[]);let b="";g.Distance>0&&(b+=g.Distance.toString()+'"'),1==a.melee&&(b+="Melee");let v="";void 0!=a.hands_melee&&(v+=a.hands_melee.toString()+" Hands");let w="";return void 0!=a.hands_ranged&&(w+=a.hands_ranged.toString()+" Hands"),(0,r.jsx)(r.Fragment,{children:a&&(""!=b||""!=v||""!=w||t.Modifiers.length>0||null!=l&&null!=d||null!=h&&null!=p)&&(0,r.jsx)("table",{className:"rules-equipment-stats-table",children:(0,r.jsxs)("tbody",{children:[""!=b&&(0,r.jsxs)("tr",{children:[(0,r.jsx)("td",{className:"label-cell",children:"Range"}),(0,r.jsx)("td",{children:b})]}),(""!=v||""!=w)&&(0,r.jsxs)("tr",{children:[(0,r.jsx)("td",{className:"label-cell",children:"Hands"}),(0,r.jsxs)("td",{children:[(0,r.jsx)("div",{children:""!=w&&w+" (Ranged)"}),(0,r.jsx)("div",{children:""!=v&&v+" (Melee)"})]})]}),t.Modifiers.length>0&&(0,r.jsxs)("tr",{children:[(0,r.jsx)("td",{className:"label-cell",children:"Modifiers"}),(0,r.jsx)("td",{children:(0,r.jsx)("div",{children:t.Modifiers.join(", ")})})]}),null!=d&&null!=l&&(0,r.jsxs)("tr",{children:[(0,r.jsx)("td",{className:"label-cell",children:"Cost"}),(0,r.jsx)("td",{children:(0,r.jsx)(i.A,{amount:l,type:d})})]}),null!=h&&0!==h&&null!=p&&(0,r.jsxs)("tr",{children:[(0,r.jsx)("td",{className:"label-cell",children:"Restrictions"}),(0,r.jsxs)("td",{children:[0!==h?(0,r.jsxs)("div",{className:"text-limit",children:["LIMIT: ",h]}):(0,r.jsx)(r.Fragment,{}),p.length>0&&(0,r.jsx)("span",{children:p.join(", ")+" only"})]})]})]})},y)})}},1801:function(e,t,a){"use strict";a(2565),a(5043);var n=a(3632),o=a(8314),i=a(579);t.A=e=>{const t=e.data;return(0,i.jsx)(n.tH,{fallback:(0,i.jsx)("div",{children:"Something went wrong with GloriousDeedDisplay.tsx"}),children:(0,i.jsxs)("div",{className:"RulesGloriousDeed rules-glorious-deed",children:[(0,i.jsx)("h4",{className:"glorious-deed-title",children:t.Name}),(0,i.jsx)("div",{className:"glorious-deed-content",children:(0,o.fE)(t,t.Description)})]})})}},4286:function(e,t,a){"use strict";a(2565);var n=a(5043),o=a(3632),i=a(5855),r=a(7289),s=a(579);t.A=e=>{const t=e.data,a=t.ID;return(0,s.jsx)(o.tH,{fallback:(0,s.jsx)("div",{children:"Something went wrong with AbilityDisplay.tsx"}),children:(0,s.jsxs)("div",{className:"RulesModelDisplayAbility",children:[(0,s.jsx)("span",{className:"ability-name"+(1==e.label?" text-label":""),children:t.Name+": "}),(0,s.jsx)("span",{className:"ability-description",children:t.Description.map(((e,o)=>(0,s.jsx)(n.Fragment,{children:(0,s.jsx)(i.A,{data:e,parent:t})},a+"descriptionDisplay"+o)))}),(0,s.jsx)(r.A,{data:t.MyOptions})]})})}},3519:function(e,t,a){"use strict";var n=a(2306),o=a(5043),i=a(3910),r=a(7929),s=a(579);t.A=e=>{let{name:t="",method:a,state:l,has_children:c=!1}=e;const[d,u]=(0,o.useState)(void 0==l||l);return(0,s.jsxs)("div",{className:"fighter-card-collapse "+(c?"has-children":""),children:[(0,s.jsxs)("div",{onClick:()=>{u(!d)},className:"fighter-card-collapse-title",children:[(0,s.jsx)("span",{className:"text",children:t||""}),(0,s.jsx)("span",{className:"collapse-chevron-wrap",children:(0,s.jsx)(i.g,{icon:d?r.w2A:r.Jt$,className:""})})]}),(0,s.jsx)(n.A,{in:d,children:(0,s.jsx)("div",{className:"fighter-card-collapse-content",children:(0,s.jsx)("div",{className:"fighter-card-collapse-content-inner",children:a()})})})]})}},8373:function(e,t,a){"use strict";a.d(t,{A:function(){return h}});a(2565);var n=a(5043),o=a(6264),i=a(3632),r=a(8314),s=a(7289),l=a(579);var c=e=>{const t=e.data;return(0,l.jsx)(i.tH,{fallback:(0,l.jsx)("div",{children:"Something went wrong with UpgradeDisplay.tsx"}),children:(0,l.jsxs)("div",{className:"UpgradeDisplay",children:[(0,r.fE)(t,t.Description),(0,l.jsx)(s.A,{data:t.MyOptions})]})})};var d=e=>{const t=e.data,[a,r]=(0,n.useState)(t.WarbandLimit.toString()),[s,d]=(0,n.useState)(0);return(0,n.useEffect)((()=>{!async function(){const e=new o.J,a=await e.runEvent("getUpgradeLimitPresentation",t,[],[t.WarbandLimit.toString()],!0);r(a.join(", ")),d((e=>e+1))}()}),[]),(0,l.jsx)(i.tH,{fallback:(0,l.jsx)("div",{children:"Something went wrong with ModelUpgradeDisplay.tsx"}),children:(0,l.jsxs)("div",{className:"ModelUpgradeDisplay",children:[""!=t.GetLimitString()&&(0,l.jsx)("div",{className:"ModelUpgradeDisplay-limitations",children:t.GetLimitString()}),(0,l.jsx)(c,{data:t.UpgradeObject})]})})},u=a(8736);var h=e=>{let{item:t}=e;const a=t,[i,r]=(0,n.useState)(""),[s,c]=(0,n.useState)(""),[h,m]=(0,n.useState)(0);return(0,n.useEffect)((()=>{!async function(){const e=new o.J,t=await e.runEvent("getUpgradeLimitPresentation",a,[],[a.WarbandLimit.toString()],!0),n=await a.GetRestrictions();c(n),r(t.join(", ")),m((e=>e+1))}()}),[]),(0,l.jsxs)("div",{className:"RulesModelUpgrade",children:[(0,l.jsxs)("div",{className:"RulesModelUpgrade-title",children:[(0,l.jsx)("span",{className:"RulesModelUpgrade-name",children:a.GetTrueName().length>0?a.GetTrueName():a.UpgradeObject.GetName()}),""!=a.GetCostString()&&(0,l.jsxs)(l.Fragment,{children:[" - ",(0,l.jsx)(u.A,{amount:a.Cost,type:a.CostType})]})]}),(0,l.jsx)("div",{className:"RulesModelUpgrade-description",children:(0,l.jsx)(d,{data:t})})]})}},537:function(e,t,a){"use strict";var n=a(5043),o=a(2557),i=a(3910),r=a(7929),s=a(579);t.A=e=>{const t=e.d_method,a=e.titlename,[l,c]=(0,n.useState)(!1),d=()=>c(!1);return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("span",{className:"popup-trigger-text",onClick:()=>c(!0),children:a}),(0,s.jsx)(o.A,{show:l,size:"lg",contentClassName:"RulesOverlay",dialogClassName:"",onHide:d,keyboard:!0,centered:!0,children:(0,s.jsxs)(o.A.Body,{children:[(0,s.jsxs)("div",{className:"rules-overlay-head",children:[(0,s.jsx)("div",{className:"rule-name",children:a}),(0,s.jsx)("div",{className:"rules-overlay-close",onClick:()=>d(),children:(0,s.jsx)(i.g,{icon:r.yYc,className:""})})]}),(0,s.jsx)("div",{className:"rules-overlay-content",children:t()})]})})]})}},3944:function(e,t,a){"use strict";a(5043);var n=a(3216),o=a(579);t.A=e=>{let{title:t,children:a}=e;(0,n.Zp)();return(0,o.jsxs)("div",{className:"RulesTableOfContents",children:[(0,o.jsx)("div",{className:"RulesTableOfContents-title",children:t}),a]})}},5855:function(e,t,a){"use strict";a.d(t,{A:function(){return A}});a(2565);var n=a(5043),o=a(3632),i=a(3216),r=a(6184),s=a(8314),l=a(8139),c=a.n(l),d=a(7852),u=a(579);var h=n.forwardRef(((e,t)=>{let{bsPrefix:a,className:n,striped:o,bordered:i,borderless:r,hover:s,size:l,variant:h,responsive:m,...p}=e;const f=(0,d.oU)(a,"table"),g=c()(n,f,h&&`${f}-${h}`,l&&`${f}-${l}`,o&&`${f}-${"string"===typeof o?`striped-${o}`:"striped"}`,i&&`${f}-bordered`,r&&`${f}-borderless`,s&&`${f}-hover`),y=(0,u.jsx)("table",{...p,className:g,ref:t});if(m){let e=`${f}-responsive`;return"string"===typeof m&&(e=`${e}-${m}`),(0,u.jsx)("div",{className:e,children:y})}return y}));var m=e=>{const t=e.data,a=e.d_colour,n=e.d_type,i=!!e.d_number&&e.d_number,l=n+"background"+(0,r.LW)(a);return(0,u.jsx)(o.tH,{fallback:(0,u.jsx)("div",{children:"Something went wrong with TableDisplay.tsx"}),children:(0,u.jsxs)(h,{className:l+"textmaxwidth no-margin",children:[(0,u.jsx)("thead",{className:"packtitlelarge "+l,children:(0,u.jsx)("tr",{className:l,children:t.ColNames.map((e=>(0,u.jsx)("th",{style:{paddingBottom:"0em"},className:l,children:(0,u.jsx)("p",{className:l+" colorWhite",style:{marginBottom:"0.5em"},children:e})},"headtabledesc")))})}),(0,u.jsx)("tbody",{children:t.Items.map((e=>(0,u.jsx)("tr",{className:i?"text-nowrap":"",children:e.Description.map((e=>(0,u.jsx)("td",{className:"tableText",children:(0,u.jsx)("div",{className:"tablecontent",children:(0,s.fE)(t,[e])})},"itemtabledesc")))},"rowtabledesc")))})]})})};var p=e=>{const t=e.d_colour,a=(e.d_name,e.d_type),n=e.d_method;return(0,u.jsx)("div",{className:" basestructure abilityStructure borderstyler "+a+"border"+(0,r.LW)(t),children:n()})},f=a(7281),g=a(1409),y=a(7630),_=a(4416),b=a(537),v=a(4587),w=a(5501),x=a(2410),k=a(1801),C=a(6421),j=a(3944),S=a(2654);const I=e=>{const t=e.data,l=t.Parent,{settings:c}=(0,C.t)();let d=function(e){if(l&&e in l)return l[e];return null}("Team");null==d&&(d="default");const h=(0,i.Zp)();function A(e){const[t,o]=(0,n.useState)(null),[i,r]=(0,n.useState)(0);return(0,n.useEffect)((()=>{!async function(){const t=await Promise.resolve().then(a.bind(a,207)),n=await t.GloriousDeedFactory.CreateNewGloriousDeed(e,null);o(n),r(i+1)}()}),[]),(0,u.jsx)("span",{className:"AdvancedDescriptionItemDisplay-getEquipmentDisplay",children:null!==t&&(0,u.jsx)(k.A,{data:t})},i)}function N(e){const[t,o]=(0,n.useState)(null),[i,r]=(0,n.useState)(0);return(0,n.useEffect)((()=>{!async function(){const t=await Promise.resolve().then(a.bind(a,7880)),n=await t.EquipmentFactory.CreateNewEquipment(e,null);o(n),r(i+1)}()}),[]),(0,u.jsx)("span",{className:"AdvancedDescriptionItemDisplay-getEquipmentDisplay",children:null!==t&&(0,u.jsx)(g.A,{equipment:t})},i)}function E(e){const[t,o]=(0,n.useState)(null),[i,r]=(0,n.useState)(0);return(0,n.useEffect)((()=>{!async function(){const t=await Promise.resolve().then(a.bind(a,7880)),n=await t.EquipmentFactory.CreateNewEquipment(e,null);o(n),r(i+1)}()}),[]),(0,u.jsx)("span",{className:"AdvancedDescriptionItemDisplay-getEquipmentDisplay",children:null!==t&&(0,u.jsx)(u.Fragment,{children:(0,u.jsx)(b.A,{titlename:t.Name,d_method:()=>(0,u.jsxs)("span",{className:"rules-equipment-main",children:[(0,u.jsx)(_.A,{facrelObject:void 0,baseobject:t}),(0,u.jsx)(y.A,{data:t})]})})})},i)}function T(e){const[t,o]=(0,n.useState)(null),[i,r]=(0,n.useState)(0);return(0,n.useEffect)((()=>{!async function(){const t=await Promise.resolve().then(a.bind(a,6498)),n=await t.SkillFactory.CreateNewSkill(e,null);o(n),r(i+1)}()}),[]),(0,u.jsx)("span",{className:"AdvancedDescriptionItemDisplay-getEquipmentDisplay",children:null!==t&&(0,u.jsx)(u.Fragment,{children:(0,u.jsx)(b.A,{titlename:t.Name,d_method:()=>(0,u.jsx)("div",{className:"skill-description",children:(0,u.jsx)(w.A,{data:t})})})})},i)}function D(e){const[t,o]=(0,n.useState)(null),[i,r]=(0,n.useState)(0);return(0,n.useEffect)((()=>{!async function(){const t=await Promise.resolve().then(a.bind(a,7479)),n=await t.ModelFactory.CreateNewModel(e,null);o(n),r(i+1)}()}),[]),(0,u.jsx)("span",{className:"AdvancedDescriptionItemDisplay",children:null!==t&&(0,u.jsx)(f.A,{data:t})},i)}function R(e){const[t,o]=(0,n.useState)(null),[i,r]=(0,n.useState)(0);return(0,n.useEffect)((()=>{!async function(){const t=await Promise.resolve().then(a.bind(a,7479)),n=await t.ModelFactory.CreateNewModel(e,null);o(n),r(i+1)}()}),[]),(0,u.jsx)("span",{className:"AdvancedDescriptionItemDisplay",children:null!==t&&(0,u.jsx)(b.A,{titlename:t.Name,d_method:()=>(0,u.jsx)(f.A,{data:t})})},i)}return(0,u.jsx)(o.tH,{fallback:(0,u.jsx)("div",{children:"Something went wrong with AdvancedDescriptionItemDisplay.tsx"}),children:function(e){if(1==(0,r.Yr)(e.Tags,"lore")&&!c.show_lore)return(0,u.jsx)(u.Fragment,{});switch((0,r.Yr)(e.Tags,"desc_type")){case"paragraph":var t,a;return(0,u.jsxs)("p",{className:"desc-paragraph",children:[(0,s.fj)(e.Glossary,(null===(t=e.Content)||void 0===t?void 0:t.toString())||""),e.SubContent.length>0&&(0,u.jsx)(u.Fragment,{children:null===(a=e.SubContent)||void 0===a?void 0:a.map(((e,t)=>(0,u.jsx)(I,{data:e,parent:l},"descriptionsubitem"+t)))})]});case"paragraph-italic":var n,o;return(0,u.jsxs)("p",{className:"desc-paragraph",children:[(0,u.jsx)("i",{children:(0,s.fj)(e.Glossary,(null===(n=e.Content)||void 0===n?void 0:n.toString())||"")}),e.SubContent.length>0&&(0,u.jsx)(u.Fragment,{children:null===(o=e.SubContent)||void 0===o?void 0:o.map(((e,t)=>(0,u.jsx)(I,{data:e,parent:l},"descriptionsubitem"+t)))})]});case"subheader":var i,f;return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)("h2",{children:(0,s.fj)(e.Glossary,(null===(i=e.Content)||void 0===i?void 0:i.toString())||"")}),null===(f=e.SubContent)||void 0===f?void 0:f.map(((e,t)=>(0,u.jsx)(I,{data:e,parent:l},"descriptionsubitem"+t)))]});case"subsubheader":var g,y;return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)("h4",{children:(0,s.fj)(e.Glossary,(null===(g=e.Content)||void 0===g?void 0:g.toString())||"")}),null===(y=e.SubContent)||void 0===y?void 0:y.map(((e,t)=>(0,u.jsx)(I,{data:e,parent:l},"descriptionsubitem"+t)))]});case"alert":var _,b;return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(S.A,{type:"warning",className:"mb-3",children:(0,s.fj)(e.Glossary,(null===(_=e.Content)||void 0===_?void 0:_.toString())||"")}),null===(b=e.SubContent)||void 0===b?void 0:b.map(((e,t)=>(0,u.jsx)(I,{data:e,parent:l},"descriptionsubitem"+t)))]});case"sub-ability":var w,k;return(0,u.jsxs)("div",{className:"desc-sub-ability",children:[(0,u.jsxs)("span",{className:"desc-ability-name",children:[(0,s.fj)(e.Glossary,(null===(w=e.Content)||void 0===w?void 0:w.toString())||""),": "]}),null===(k=e.SubContent)||void 0===k?void 0:k.map(((e,t)=>(0,u.jsx)(I,{data:e,parent:l},"descriptionsubitem"+t)))]});case"break":return(0,u.jsx)("hr",{});case"infobox":var C,M;return(0,u.jsxs)("div",{className:"desc-infobox",children:[(0,s.fj)(e.Glossary,(null===(C=e.Content)||void 0===C?void 0:C.toString())||""),null===(M=e.SubContent)||void 0===M?void 0:M.map(((e,t)=>(0,u.jsx)(I,{data:e,parent:l},"descriptionsubitem"+t)))]});case"infobox-1-0":var O,q;return(0,u.jsxs)("div",{className:"infobox-1-0",children:[(0,s.fj)(e.Glossary,(null===(O=e.Content)||void 0===O?void 0:O.toString())||""),null===(q=e.SubContent)||void 0===q?void 0:q.map(((e,t)=>(0,u.jsx)(I,{data:e,parent:l},"descriptionsubitem"+t)))]});case"infobox-title":var G;return(0,u.jsx)("div",{className:"infobox-title",children:(0,s.fj)(e.Glossary,(null===(G=e.Content)||void 0===G?void 0:G.toString())||"")});case"headless_table":var P;return(0,u.jsx)("table",{className:"table_headless",children:null===(P=e.SubContent)||void 0===P?void 0:P.map(((e,t)=>(0,u.jsx)(I,{data:e,parent:l},"descriptionsubitem"+t)))});case"headed_table":var F;return(0,u.jsx)("table",{className:"table_headed table_headed-highlight",children:null===(F=e.SubContent)||void 0===F?void 0:F.map(((e,t)=>(0,u.jsx)(I,{data:e,parent:l},"descriptionsubitem"+t)))});case"table_row":var L;return(0,u.jsx)("tr",{className:"table_row",children:null===(L=e.SubContent)||void 0===L?void 0:L.map(((e,t)=>(0,u.jsx)(I,{data:e,parent:l},"descriptionsubitem"+t)))});case"table_headrow":var W;return(0,u.jsx)("tr",{className:"table_headrow",children:null===(W=e.SubContent)||void 0===W?void 0:W.map(((e,t)=>(0,u.jsx)(I,{data:e,parent:l},"descriptionsubitem"+t)))});case"table_item":var B,H;return(0,u.jsxs)("td",{className:"table_item",children:[(0,u.jsx)("span",{children:(0,s.fj)(e.Glossary,(null===(B=e.Content)||void 0===B?void 0:B.toString())||"")}),(0,u.jsx)("span",{children:null===(H=e.SubContent)||void 0===H?void 0:H.map(((e,t)=>(0,u.jsx)(I,{data:e,parent:l},"descriptionsubitem"+t)))})]});case"table_item_wrap":var U,K;return(0,u.jsxs)("td",{className:"table_item text-nowrap",children:[(0,u.jsx)("span",{children:(0,s.fj)(e.Glossary,(null===(U=e.Content)||void 0===U?void 0:U.toString())||"")}),(0,u.jsx)("span",{children:null===(K=e.SubContent)||void 0===K?void 0:K.map(((e,t)=>(0,u.jsx)(I,{data:e,parent:l},"descriptionsubitem"+t)))})]});case"table_headitem":var z,V;return(0,u.jsxs)("th",{className:"desc-table_headitem",children:[(0,s.fj)(e.Glossary,(null===(z=e.Content)||void 0===z?void 0:z.toString())||""),null===(V=e.SubContent)||void 0===V?void 0:V.map(((e,t)=>(0,u.jsx)(I,{data:e,parent:l},"descriptionsubitem"+t)))]});case"bold":var Y,J;return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)("strong",{children:(0,s.fj)(e.Glossary,(null===(Y=e.Content)||void 0===Y?void 0:Y.toString())||"")}),null===(J=e.SubContent)||void 0===J?void 0:J.map(((e,t)=>(0,u.jsx)(I,{data:e,parent:l},"descriptionsubitem"+t)))," "]});case"italic":var $,Z;return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)("i",{children:(0,s.fj)(e.Glossary,(null===($=e.Content)||void 0===$?void 0:$.toString())||"")}),null===(Z=e.SubContent)||void 0===Z?void 0:Z.map(((e,t)=>(0,u.jsx)(I,{data:e,parent:l},"descriptionsubitem"+t)))," "]});case"default":var Q,X;return(0,u.jsxs)("span",{className:"desc-default",children:[(0,s.fj)(e.Glossary,(null===(Q=e.Content)||void 0===Q?void 0:Q.toString())||""),null===(X=e.SubContent)||void 0===X?void 0:X.map(((e,t)=>(0,u.jsx)(I,{data:e,parent:l},"descriptionsubitem"+t)))," "]});case"table":var ee;return(0,u.jsxs)("div",{className:"",children:[(0,u.jsx)("div",{className:"addonbox",children:(0,u.jsx)(p,{d_colour:d,d_name:e.DisplayData?e.DisplayData.Name:"",d_type:"sub",d_method:()=>(0,u.jsx)(m,{d_colour:d,d_type:"sub",data:e.DisplayData})})}),(0,u.jsx)("span",{children:null===(ee=e.SubContent)||void 0===ee?void 0:ee.map(((e,t)=>(0,u.jsx)(I,{data:e,parent:l},"descriptionsubitem"+t)))}),(0,u.jsx)("span",{children:" "})]});case"gap":var te;return(0,u.jsxs)("div",{className:"desc-gap",children:[(0,u.jsx)("br",{}),null===(te=e.SubContent)||void 0===te?void 0:te.map(((e,t)=>(0,u.jsx)(I,{data:e,parent:l},"descriptionsubitem"+t)))," "]});case"list":var ae,ne,oe;return(0,u.jsxs)("div",{className:"desc-list",children:[(null===(ae=e.Content)||void 0===ae?void 0:ae.toString())&&(0,u.jsx)("p",{children:(0,s.fj)(e.Glossary,(null===(ne=e.Content)||void 0===ne?void 0:ne.toString())||"")}),(0,u.jsx)("ul",{children:null===(oe=e.SubContent)||void 0===oe?void 0:oe.map(((e,t)=>(0,u.jsx)("li",{children:(0,u.jsx)(I,{data:e,parent:l})},"descriptionsubitem"+t)))})]});case"equipment":var ie,re;return(0,u.jsxs)("div",{className:"desc-equipment",children:[N((null===(ie=e.Content)||void 0===ie?void 0:ie.toString())||""),null===(re=e.SubContent)||void 0===re?void 0:re.map(((e,t)=>(0,u.jsx)(I,{data:e,parent:l},"descriptionsubitem"+t)))]});case"glorious_deed":var se,le;return(0,u.jsxs)("div",{className:"desc-glorious_deed",children:[A((null===(se=e.Content)||void 0===se?void 0:se.toString())||""),null===(le=e.SubContent)||void 0===le?void 0:le.map(((e,t)=>(0,u.jsx)(I,{data:e,parent:l},"descriptionsubitem"+t)))]});case"equipmentslim":var ce,de;return(0,u.jsxs)("span",{className:"desc-equipmentslim",children:[E((null===(ce=e.Content)||void 0===ce?void 0:ce.toString())||""),null===(de=e.SubContent)||void 0===de?void 0:de.map(((e,t)=>(0,u.jsx)(I,{data:e,parent:l},"descriptionsubitem"+t)))]});case"skillslim":var ue,he;return(0,u.jsxs)("span",{className:"desc-skillslim",children:[T((null===(ue=e.Content)||void 0===ue?void 0:ue.toString())||""),null===(he=e.SubContent)||void 0===he?void 0:he.map(((e,t)=>(0,u.jsx)(I,{data:e,parent:l},"descriptionsubitem"+t)))]});case"model":var me,pe;return(0,u.jsxs)("div",{className:"desc-model",children:[D((null===(me=e.Content)||void 0===me?void 0:me.toString())||""),null===(pe=e.SubContent)||void 0===pe?void 0:pe.map(((e,t)=>(0,u.jsx)(I,{data:e,parent:l},"descriptionsubitem"+t)))]});case"modelslim":var fe,ge;return(0,u.jsxs)("span",{className:"",children:[(0,u.jsx)("span",{children:R((null===(fe=e.Content)||void 0===fe?void 0:fe.toString())||"")}),(0,u.jsx)("span",{children:null===(ge=e.SubContent)||void 0===ge?void 0:ge.map(((e,t)=>(0,u.jsx)(I,{data:e,parent:l},"descriptionsubitem"+t)))})]});case"link":var ye,_e;return(0,u.jsxs)("span",{children:[(0,u.jsx)("span",{children:(0,u.jsx)(v.A,{classes:"font-normal",external:1==(0,r.Yr)(e.Tags,"external"),link:(0,r.Yr)(e.Tags,"url"),runfunc:()=>{if((0,r.Yr)(e.Tags,"external")){const t=window.open((0,r.Yr)(e.Tags,"url"),"_blank");t&&t.focus()}else t=(0,r.Yr)(e.Tags,"url"),h(t,{state:Date.now().toString()});var t},children:(0,s.fj)(e.Glossary,(null===(ye=e.Content)||void 0===ye?void 0:ye.toString())||"")})}),(0,u.jsx)("span",{children:null===(_e=e.SubContent)||void 0===_e?void 0:_e.map(((e,t)=>(0,u.jsx)(I,{data:e,parent:l},"descriptionsubitem"+t)))})]});case"rulesbanner":var be,ve;return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(x.A,{link:(0,r.Yr)(e.Tags,"url"),title:(null===(be=e.Content)||void 0===be?void 0:be.toString())||"",type:""}),null===(ve=e.SubContent)||void 0===ve?void 0:ve.map(((e,t)=>(0,u.jsx)(I,{data:e,parent:l},"descriptionsubitem"+t)))]});case"rulestableofcontents":var we,xe;return(0,u.jsx)(u.Fragment,{children:(0,u.jsx)(j.A,{title:(null===(we=e.Content)||void 0===we?void 0:we.toString())||"",children:null===(xe=e.SubContent)||void 0===xe?void 0:xe.map(((e,t)=>(0,u.jsx)(I,{data:e,parent:l},"descriptionsubitem"+t)))})});case"question":return(0,u.jsx)("span",{children:e.DisplayData});case"subsubheading":var ke,Ce;return(0,u.jsxs)("h5",{children:[(0,s.fj)(e.Glossary,(null===(ke=e.Content)||void 0===ke?void 0:ke.toString())||""),null===(Ce=e.SubContent)||void 0===Ce?void 0:Ce.map(((e,t)=>(0,u.jsx)(I,{data:e,parent:l},"descriptionsubitem"+t)))]});default:var je,Se;return(0,u.jsxs)("span",{className:"fallback-default",children:[(0,s.fj)(e.Glossary,(null===(je=e.Content)||void 0===je?void 0:je.toString())||""),null===(Se=e.SubContent)||void 0===Se?void 0:Se.map(((e,t)=>(0,u.jsx)(I,{data:e,parent:l},"descriptionsubitem"+t)))]})}}(t)})};var A=I},4201:function(e,t,a){"use strict";a(2565),a(5043);var n=a(3632),o=a(579);t.A=e=>{const t=e.title,a=e.value,i=e.base,r=e.raw;let s=!1,l=!1,c=!1;return s=null==i||void 0==i||i!=r,s&&(c=i>r,l=r>i),(0,o.jsx)(n.tH,{fallback:(0,o.jsx)("div",{children:"Something went wrong with ItemStat.tsx"}),children:(0,o.jsxs)("div",{className:`fighter-card-stat\n                ${s?"modified":""}\n                ${l?"modified-positive":""}\n                ${c?"modified-negative":""}\n              `,children:[(0,o.jsx)("div",{className:"stat-label mb-1",children:t}),(0,o.jsxs)("div",{className:"stat-value",children:[a,("Melee"===t||"Ranged"===t)&&(0,o.jsx)(o.Fragment,{children:"D"})]})]})})}},7289:function(e,t,a){"use strict";a.d(t,{A:function(){return g}});a(2565);var n=a(5043),o=a(3632),i=a(6264),r=a(2557),s=a(4282),l=a(7929),c=a(3910),d=a(6184),u=a(5792),h=a(579);var m=e=>{let{show:t,onClose:a,currentChoice:o,onSubmit:i,choiceparent:m}=e;const[p,f]=(0,n.useState)(o),[g,y]=(0,n.useState)(null),_=e=>{i(e),a()};const b=m.Selections.length>0&&m.Selections.every((e=>"FactionEquipmentRelationship"===function(e){var t,a,n,o;return null!==(t=null!==(a=null!==(n=null===e||void 0===e?void 0:e.__typename)&&void 0!==n?n:null===e||void 0===e?void 0:e.type)&&void 0!==a?a:null===e||void 0===e?void 0:e.kind)&&void 0!==t?t:null===e||void 0===e||null===(o=e.constructor)||void 0===o?void 0:o.name}(null===e||void 0===e?void 0:e.value)));return(0,h.jsx)("div",{onClick:e=>{e.stopPropagation()},children:(0,h.jsxs)(r.A,{show:t,onHide:a,className:"WbbModalAddItem",centered:!0,children:[(0,h.jsxs)(r.A.Header,{closeButton:!1,children:[(0,h.jsx)(r.A.Title,{children:"Edit Option"}),(0,h.jsx)(c.g,{icon:l.Jyw,className:"modal-close-icon",role:"button",onClick:a})]}),(0,h.jsx)(r.A.Body,{children:(0,h.jsx)("div",{className:"select-items-wrap",children:m.Selections.map(((e,t)=>(0,h.jsx)(n.Fragment,{children:b?(0,h.jsx)(u.A,{id:e.id,title:e.value.Name,opened:g===e.id,available:!0,onClick:()=>{y(e.id===g?null:e.id)},equipment:e.value.EquipmentItem,isSubmitting:!1,onSubmit:()=>{_(e)},submitBtnString:"Choose Equipment",cost:e.value.Cost,costType:(0,d.Ie)(e.value.CostType)},`select-item-${e.id}`):(0,h.jsx)("div",{className:"select-item "+(p===e?"selected":""),onClick:()=>f(e),children:e.display_str},e.id+e.display_str)},t)))})}),(0,h.jsxs)(r.A.Footer,{children:[(0,h.jsx)(s.A,{variant:"secondary",onClick:a,children:"Cancel"}),p?(0,h.jsx)(s.A,{variant:"primary",onClick:()=>_(p),disabled:p===o,children:"Save Option"}):(0,h.jsx)(s.A,{variant:"primary",disabled:p===o,children:"Save Option"})]})]})})};var p=e=>{let{title:t,value:a,onClick:n}=e;return(0,h.jsxs)("div",{className:"WbbOptionBox",children:[(0,h.jsx)("div",{className:"WbbOptionBox-title",children:t}),(0,h.jsxs)("div",{className:"WbbOptionBox-body",children:[(0,h.jsx)("div",{className:"WbbOptionBox-value",children:""===a?(0,h.jsx)(h.Fragment,{children:"-"}):(0,h.jsx)(h.Fragment,{children:a})}),(0,h.jsxs)("div",{className:"btn btn-primary",onClick:n,children:[(0,h.jsx)(c.g,{icon:l.hpd,className:"icon-inline-left"}),"Change"]})]})]})};var f=e=>{const t=e.data,a=e.onSelectionChange,[r,s]=(0,n.useState)(!1),[l,c]=(0,n.useState)(null),[d,u]=(0,n.useState)((0,h.jsx)(h.Fragment,{})),[f,g]=(0,n.useState)(0);return(0,n.useEffect)((()=>{!async function(){if(null!=t.MyStaticObject&&(a&&a(t.RefID,l),null!=l)){const e=new i.J,a=await e.runEvent("returnOptionDisplay",t.MyStaticObject,[],null,l);null!=a&&(u(a),g((e=>e+1)))}}()}),[l]),(0,h.jsx)(o.tH,{fallback:(0,h.jsx)("div",{children:"Something went wrong with OptionSetStaticDisplay.tsx"}),children:(0,h.jsx)("div",{className:"SingleOptionSetDisplay",children:t.Selections.length>0&&(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(p,{title:t.Name,value:l?l.display_str:"-",onClick:()=>s(!0)}),(0,h.jsx)(m,{show:r,onClose:()=>s(!1),currentChoice:l,onSubmit:function(e){c(e)},choiceparent:t}),(0,h.jsx)("div",{className:"SingleOptionSetDisplay-Details",children:d},f)]})})})};var g=e=>{const t=e.data,a=e.onSelectionChange;return(0,h.jsx)(o.tH,{fallback:(0,h.jsx)("div",{children:"Something went wrong with OptionSetStaticDisplay.tsx"}),children:(0,h.jsx)(h.Fragment,{children:t.map((e=>(0,h.jsx)(f,{data:e,onSelectionChange:a},e.RefID)))})})}},4587:function(e,t,a){"use strict";a(2565),a(5043);var n=a(579);t.A=e=>{let{link:t,children:a,runfunc:o,classes:i="",external:r=!1}=e;return(0,n.jsx)("a",{href:t,onClick:e=>{0!==e.button||e.ctrlKey||e.metaKey||(e.preventDefault(),o())},rel:r?"noopener noreferrer":void 0,className:i||void 0,children:a})}},5792:function(e,t,a){"use strict";a.d(t,{A:function(){return f}});var n=a(5043),o=a(6184),i=a(4286),r=a(6264),s=a(6252),l=a(579);var c=e=>{let{equipment:t,showType:a}=e;const[c,d]=(0,n.useState)(u());function u(){const e=[],a=[],n=t.GetKeyWords();for(let t=0;t<n.length;t++)a.includes(n[t].GetTrueName())||(e.push(n[t]),a.push(n[t].GetTrueName()));return e}const[h,m]=(0,n.useState)(0);return(0,n.useEffect)((()=>{!async function(){const e=u(),a=new r.J,n=await a.runEvent("findFinalKeywordsForEquipment",t,[t],e,null);d(n),m((e=>e+1))}()}),[t]),(0,l.jsxs)("div",{className:"WbbEquipmentDetails",children:[(0,l.jsx)("table",{children:(0,l.jsxs)("tbody",{children:[""!=t.GetRange()&&(0,l.jsxs)("tr",{children:[(0,l.jsx)("td",{children:"Range"}),(0,l.jsx)("td",{children:t.GetRange()})]}),t.Category&&a&&(0,l.jsxs)("tr",{children:[(0,l.jsx)("td",{children:"Type"}),(0,l.jsx)("td",{children:(0,o.h8)(t.Category)})]}),t.GetModifiers()&&(0,l.jsxs)("tr",{children:[(0,l.jsx)("td",{children:"Modifiers"}),(0,l.jsx)("td",{children:t.GetModifiers()})]}),t.GetHandsMelee().length>0&&(0,l.jsxs)("tr",{children:[(0,l.jsx)("td",{children:"Hands (Melee)"}),(0,l.jsx)("td",{children:t.GetHandsMelee()})]}),t.GetHandsRanged().length>0&&(0,l.jsxs)("tr",{children:[(0,l.jsx)("td",{children:"Hands (Ranged)"}),(0,l.jsx)("td",{children:t.GetHandsRanged()})]})]})}),c.length>0&&(0,l.jsxs)("div",{className:"keywords-wrap",children:[(0,l.jsx)("div",{className:"text-label mb-2",children:"Keywords"}),(0,l.jsx)(s.A,{className:"mb-2",keywords:c})]}),t.GetDescription()&&(0,l.jsxs)("div",{className:"rules-wrap mb-3",children:[(0,l.jsx)("div",{className:"text-label",children:"Rules"}),(0,l.jsx)("div",{className:"rules",children:t.GetDescription()})]}),t.Abilities.length>0&&(0,l.jsx)("div",{className:"rules-wrap mb-3",children:(0,l.jsx)("div",{className:"rules",children:t.Abilities.map((e=>(0,l.jsx)(n.Fragment,{children:(0,l.jsx)(i.A,{data:e,label:!0})},"equip_ability_"+t.ID+"_ability_id_"+e.ID)))})})]},h)},d=a(3910),u=a(7929),h=a(4282),m=a(2654),p=a(8736);var f=function(e){let{id:t,title:a,opened:o,selected:i,available:r,onClick:s,cost:f,costType:g,limit:y,restrictions:_,equipment:b,isSubmitting:v,onSubmit:w,submitBtnString:x,unavailableString:k}=e;return(0,l.jsxs)(n.Fragment,{children:[(0,l.jsxs)("div",{className:`select-item ${o||i?"selected":""} ${r?"":"disabled"}`,onClick:()=>s(t),children:[(0,l.jsx)("span",{className:"item-left",children:(0,l.jsx)("span",{className:"item-name",children:a})}),(0,l.jsxs)("span",{className:"item-right",children:[f&&g&&(0,l.jsx)("span",{className:"item-cost",children:(0,l.jsx)(p.A,{amount:f,type:g})}),y&&(0,l.jsx)("span",{className:"item-limit",children:y}),_&&_.length>0&&(0,l.jsxs)("span",{className:"item-limit",children:["Restrictions: ",function(){if(_){if(_.length>1){const e=_[_.length-1];return(_.slice(0,-1).join(", ")+", "+e).replace(/,(\s+)?$/,"")}if(1==_.length)return _[0].replace(/,(\s+)?$/,"")}return""}()]})]})]}),o&&(0,l.jsxs)("div",{className:"details-wrap",children:[b&&(0,l.jsx)(c,{equipment:b,showType:!1}),(0,l.jsx)("div",{className:"details-quick-action",children:r?(0,l.jsxs)(h.A,{variant:"primary",onClick:w,disabled:v,className:" mb-3 btn-sm w-100",children:[v?(0,l.jsx)(d.g,{icon:u.s4k,className:"icon-inline-left fa-spin "}):(0,l.jsx)(d.g,{icon:u.QLR,className:"icon-inline-left"}),x?(0,l.jsx)(l.Fragment,{children:x}):(0,l.jsx)(l.Fragment,{children:"Select Equipment"})]}):(0,l.jsx)(m.A,{type:"danger",className:"mb-3",children:k?(0,l.jsx)(l.Fragment,{children:k}):(0,l.jsx)(l.Fragment,{children:"This option can not be selected"})})})]})]})}},363:function(e,t,a){"use strict";a.d(t,{D:function(){return O}});var n=JSON.parse('[{"id":"gl_cover","source":"core","tags":{"category":"attack","attack":"ranged"},"name":"Cover","description":[{"tags":{"desc_type":"default"},"content":"Add -1 DICE to the roll. A model is in cover whenever it is in contact with a piece of scenery that is at least as long as the model\u2019s base. If an attacker can see a model in its entirety, this penalty does not apply. A model cannot gain cover merely from being obscured due to angles, distant scenery or the surface that they are standing on (such as when standing on top of a building).","glossary":[{"val":"-1 DICE","id":"kw_minusdice"}]}]},{"id":"gl_explorationdice","source":"core","tags":{"category":"campaign","exploration":true},"name":"Exploration Dice","description":[{"tags":{"desc_type":"default"},"content":"After the battle, both players are allocated Exploration Dice. Once the players have determined the number of Exploration Dice, each rolls their dice and consults the result by adding the numbers together to get your Exploration Score. For example, if a player rolls three Exploration Dice and the results are 3, 5 and 6, the combined Exploration Score is 14."}]},{"id":"gl_down","source":"core","tags":{"category":"injury"},"name":"Down","description":[{"tags":{"desc_type":"default"},"content":"A model that is Down suffers a -1 DICE penalty to all of its ACTIONS. Also it cannot move during its Activation through its own ACTIONS","glossary":[{"val":"-1 DICE","id":"kw_minusdice"},{"val":"ACTIONS","id":"kw_action"}]},{"tags":{"desc_type":"default"},"content":"The Down condition can either be represented by placing an indicator next to the model (such as a scrap of paper) or by physically turning the model face-down on its side. A model turned on its side will present a different profile for Line-of-Sight targeting, but these two methods of indication are otherwise identical and the model\u2019s controller may decide which to use."},{"tags":{"desc_type":"default"},"content":"At the start of its own Activation, a Downed warrior can Stand, but any movement (Move, Dash, Charge, Jump, Climb etc.) it can take is halved. If a model is Downed during its own Activation, it may attempt a RISKY ACTION in order to Stand. Otherwise, it remains Down for the remainder of its Activation.","glossary":[{"val":"RISKY ACTION","id":"kw_riskyaction"}]}]},{"id":"gl_minorhit","source":"core","tags":{"category":"injury"},"name":"Minor Hit","description":[{"tags":{"desc_type":"default"},"content":"Add +1 BLOOD MARKER next to the model to represent a wound. Use the dice pips to count the hits inflicted (maximum six per model).","glossary":[{"val":"+1 BLOOD MARKER","id":"kw_bloodmarker"}]}]},{"id":"gl_scar","source":"core","tags":{"category":"campaign"},"name":"Scar","description":[{"tags":{"desc_type":"default"},"content":"When you roll on the Injury Chart, unless the rules state otherwise, each injury causes a Battle Scar, so mark this on your warband roster sheet. An ELITE character only has two slots for Battle Scars. This means that if you sustain a third scar, the model dies and can no longer be used in your campaign. If the model has an ability that allows for their revival (such as the Trench Pilgrim), they use it. When they return to life, they ignore the last Battle Scar that killed them. Otherwise, their profile remains the same.","glossary":[{"val":"ELITE","id":"kw_elite"}]}]},{"id":"gl_bloodbath","source":"core","tags":{"category":"attack"},"name":"Bloodbath","description":[{"tags":{"desc_type":"default"},"content":"You can roll an additional D6 on injury rolls at the cost of six BLOOD MARKERS on any model, or at the cost of three BLOOD MARKERS if the target is Down. This means that instead of rolling 2D6 on your typical weapon, you roll 3D6 on your injury roll and add the numbers together. Weapons such as the Artillery Witch\u2019s Infernal Bomb would therefore roll 4D6 and add the results together (3D6+1D6).","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"},{"val":"Down","id":"gl_down"}]}]}]'),o=JSON.parse('[{"id":"tb_default","type":"Table","source":"core","tags":{},"eventtags":{},"colnames":["Column_A","Column_B"],"description":[],"items":[{"id":"ti_default_01","type":"TableItem","source":"core","tags":{},"eventtags":{},"description":[{"tags":{"desc_type":"default"},"content":"Test_A"},{"tags":{"desc_type":"default"},"content":"Test_B"}]}]}]'),i=JSON.parse('[{"tags":{"id_name":true},"img_src":"https://i.pinimg.com/originals/90/d1/ac/90d1ac48711f63c6a290238c8382632f.jpg","caption":""}]'),r=JSON.parse('[{"id":"kw_plusdice","source":"core","tags":{"category":"dice","positive":true,"modifier":true,"type":"effect"},"name":"+DICE","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"Modifier for ACTION rolls. For each +DICE, add one dice to the dice pool of the 2D6 roll you are about to make. +1 DICE thus makes the roll a total of 3D6.","glossary":[{"val":"ACTION","id":"kw_action"}]},{"tags":{"desc_type":"default"},"content":"Then roll all the dice and pick the two highest. If two +DICE are added, roll 4D6 and pick the two highest, and so on."}]},{"id":"kw_injurymodifier","source":"core","tags":{"category":"injury","positive":true,"modifier":true,"type":"effect"},"name":"+/- INJURY MODIFIER","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"Modifiers that are applied to the result of an Injury Roll. If the Keyword applies to a Weapon, the modifier is only added to Injury Rolls for Attacks made with it."}]},{"id":"kw_injurydice","source":"core","tags":{"category":"injury","positive":true,"modifier":true,"type":"effect"},"name":"+/- INJURY DICE","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"Dice that are added to Injury Rolls. If the Keyword applies to a Weapon, the dice are only added to Injury Rolls for Attacks made with it."}]},{"id":"kw_minusdice","source":"core","tags":{"category":"dice","negative":true,"modifier":true,"type":"effect"},"name":"-DICE","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"Modifier for ACTION rolls. For each -DICE, add one dice to the dice pool of the 2D6 roll you are about to make. Thus -1 DICE makes the roll a total of 3D6.","glossary":[{"val":"ACTION","id":"kw_action"}]},{"tags":{"desc_type":"default"},"content":"Then roll all the dice and pick the two lowest. If two -DICE are added, roll 4D6 and pick the two lowest, and so on."}]},{"id":"kw_action","source":"core","tags":{"category":"action","type":"tag"},"name":"ACTION","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"An activity a model can carry out when it is Activated. Common ACTIONS include Move, Dash, Shoot and Fight."}]},{"id":"kw_armourpiercing","source":"core","tags":{"category":"model","type":"effect"},"name":"ARMOUR PIERCING","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"A Weapon with this Keyword reduces the target\u2019s total -INJURY MODIFIER from its Armour Characteristic, and/or any Armour or Shields it has by 1, to a minimum of 0. For example, if a target had Standard Armour and a Trench Shield, the -INJURY MODIFIER would be lowered from -2 to -1.","glossary":[{"val":"-INJURY MODIFIER","id":"kw_injurymodifier"}]}]},{"id":"kw_artificial","source":"core","tags":{"category":"model","type":"tag"},"name":"ARTIFICIAL","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"This model is not of natural biological origin but is instead constructed from non-organic elements."}]},{"id":"kw_assault","source":"core","tags":{"category":"equipment","equipment":"weapon","type":"effect"},"name":"ASSAULT","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"Ranged Attacks made with Weapons that have this Keyword do not prevent a model from taking a Charge or Fight ACTION during the same Activation."}]},{"id":"kw_automatic","source":"core","tags":{"category":"equipment","equipment":"weapon","type":"effect"},"name":"AUTOMATIC (X)","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"When you take a Shoot ACTION and choose a Weapon with this Keyword to make a Ranged Attack, you can make a number of Ranged Attacks with this Weapon equal to X, one after another. The attacks can target different enemy models if desired, as long as they are all within 6\u201d of each other. Resolve each attack one at a time using steps 2 to 6 of the Ranged Attack Sequence. Any BLOOD MARKERS or BLESSING MARKERS that are spent only modify the Injury Roll for the Ranged Attack they are spent on.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"},{"val":"BLESSING MARKERS","id":"kw_blessingmarker"},{"val":"ACTION","id":"kw_action"}]}]},{"id":"kw_shieldcombo","source":"core","tags":{"category":"equipment","equipment":"weapon","type":"effect"},"name":"SHIELD COMBO","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"For the purposes of wielding a 2-handed weapon with the \u2018Shield Combo\u2019 indicator, the Trench Shield does not take a hand to wield but still functions as normal."}]},{"id":"kw_blackgrail","source":"core","tags":{"category":"faction","faction":"fc_cultoftheblackgrail","type":"tag"},"name":"BLACK GRAIL","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"This model is part of the Cult of the Black Grail Faction."}]},{"id":"kw_blast","source":"core","tags":{"category":"area","type":"effect"},"name":"BLAST (X)","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"A Ranged Weapon with BLAST (X\u201d) has a blast radius in inches equal to X (including vertically). When you make an attack with the Weapon, you must pick a target for the attack. The target can either be an enemy model or a visible point on the battlefield or on a terrain piece; whichever you choose must be within the attacking model\u2019s Line of Sight and the Weapon\u2019s range."},{"tags":{"desc_type":"default"},"content":"If the Success Roll for the attack is a Failure, the attack misses and nothing happens unless the weapon also has the SCATTER Keyword.","glossary":[{"val":"SCATTER","id":"kw_scatter"}]},{"tags":{"desc_type":"default"},"content":"If the Success Roll for the attack is a Success or Critical Success, every model that has a Line of Sight to the target of the attack and which is within the Weapon\u2019s blast radius is hit. In addition, friendly models that are within 1\u201d of an enemy model that was hit by the blast radius are also hit. Measure the blast radius from the centre of the target model\u2019s base, or the centre of the visible point you picked, to the closest point on the other model\u2019s base. Make an Injury Roll for every model that was hit. If you roll a Critical Success, only add the extra INJURY DICE to the roll for a model if it was chosen as the target of the attack.","glossary":[{"val":"INJURY DICE","id":"kw_plusdice"}]}]},{"id":"kw_goetic","source":"core","tags":{"category":"trait","type":"tag"},"name":"GOETIC (X)","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"paragraph"},"content":"Goetic Spells are marked with the Keyword GOETIC (x) where the number in brackets indicates how many BLOOD MARKERS will have to be spent to trigger the effect of the Spell. If multiple numbers or a range of numbers are listed in the brackets, any one of those numbers can be chosen. These BLOOD MARKERS can be taken from any model currently taking part in the battle, be they friendly or enemy models. However, they must come from models that do not have the Keyword DEMONIC or BLACK GRAIL.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"},{"val":"DEMONIC","id":"kw_demonic"},{"val":"BLACK GRAIL","id":"kw_blackgrail"}]},{"tags":{"desc_type":"paragraph"},"content":"BLOOD MARKERS used this way are removed from the game and the described effect of the Goetic Spell or ability then takes effect as described \u2013 no ACTION roll is needed, unless outlined in the spell. Despite not requiring an ACTION roll, Goetic Spells are ACTIONS and, as with other ACTIONS, spells can only be used by the model once per Activation. Some Goetic Powers are not marked with the Keyword GOETIC (x). These powers are typically passive abilities.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"},{"val":"ACTION","id":"kw_action"}]}]},{"id":"kw_putrescere","source":"creature_caster","tags":{"category":"trait","type":"tag"},"name":"PUTRESCERE (X)","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"paragraph"},"content":"Arcana Putrescere spells are marked with the Keyword PUTRESCERE (X) where the number in brackets indicates how many INFECTION MARKERS will have to be spent to trigger the effect of the Arcana. If multiple numbers or a range of numbers are listed in the brackets, any one of those numbers can be chosen.","glossary":[{"val":"INFECTION MARKERS","id":"kw_infectionmarker"}]},{"tags":{"desc_type":"paragraph"},"content":"These INFECTION MARKERS can be taken from any models within 12\u201d of the caster, be they friendly or enemy models. INFECTION MARKERS used this way are removed from the game and the described effect of the Arcana Putrescere then takes effect as described \u2013 no ACTION roll is needed, unless outlined in the Arcana. Despite not requiring an ACTION roll, Arcana being cast through the Arcana Putrescere are ACTIONS and, as with other ACTIONS, spells can only be used by the model once per Activation. Some Arcana Putrescere Powers are not marked with the Keyword PUTRESCRE (X). These powers are typically passive abilities.","glossary":[{"val":"ACTIONS","id":"kw_action"},{"val":"INFECTION MARKERS","id":"kw_infectionmarker"}]}]},{"id":"kw_blessed","source":"core","tags":{"category":"marker","positive":true,"type":"effect"},"name":"BLESSED (X)","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"When you deploy a model with this Keyword for the first time in a game, place a number of BLESSING MARKERS beside the model equal to X.","glossary":[{"val":"BLESSING MARKERS","id":"kw_blessingmarker"}]}]},{"id":"kw_blessingmarker","source":"core","tags":{"category":"marker","positive":true,"type":"tag"},"name":"BLESSING MARKER","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"The model is under the influence of a supernatural or chemical enhancement that provides temporary benefits. Each marker can be converted into +1 DICE for any ACTION the model takes, or into -1 DICE when rolling injuries for this model.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"+1 DICE","id":"kw_plusdice"},{"val":"-1 DICE","id":"kw_minusdice"}]}]},{"id":"kw_bloodmarker","source":"core","tags":{"category":"marker","negative":true,"type":"tag"},"name":"BLOOD MARKER","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"BLOOD MARKERS are placed on models that suffer an injury. Each can be converted into -1 DICE for any ACTION the wounded model takes or into +1 DICE when rolling injuries for this model.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"+1 DICE","id":"kw_plusdice"},{"val":"-1 DICE","id":"kw_minusdice"}]}]},{"id":"kw_infectionmarker","source":"core","tags":{"category":"marker","negative":true,"type":"tag"},"name":"INFECTION MARKER","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"The model is under the influence of a supernatural or chemical malady that provides temporary effects. INFECTION MARKERS can be used to modify dice rolls exactly like BLOOD MARKERS (i.e. ACTION rolls and injury rolls and used in Bloodbaths). A model may have up to six INFECTION MARKERS and six BLOOD MARKERS at the same time. If a model activates with one or more INFECTION MARKERS, it gains +1 INFECTION MARKER to the maximum of 6.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"BLOOD MARKERS","id":"kw_bloodmarker"}]}]},{"id":"kw_consumable","source":"core","tags":{"category":"equipment","type":"effect"},"name":"CONSUMABLE","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"In a Campaign, Battlekit with this Keyword is lost at the end of a game in which it is used."}]},{"id":"kw_cover","source":"core","tags":{"category":"equipment","type":"effect"},"name":"COVER","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"A model with this Keyword has the Cover or Defended Obstacle attack modifiers."}]},{"id":"kw_critical","source":"core","tags":{"category":"action","type":"effect"},"name":"CRITICAL","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"Add +2 INJURY DICE instead of +1 INJURY DICE when a Critical Success is rolled for an attack made by a Weapon with this Keyword.","glossary":[{"val":"+2 INJURY DICE","id":"kw_plusdice"},{"val":"+1 INJURY DICE","id":"kw_plusdice"}]}]},{"id":"kw_cumbersome","source":"core","tags":{"category":"equipment","type":"effect"},"name":"CUMBERSOME","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"Weapons with this Keyword require two hands to use, even if the model has the STRONG Keyword. However, they can still be used alongside a Shield with the Shield Combo stipulation.","glossary":[{"val":"STRONG","id":"kw_strong"}]}]},{"id":"kw_demonic","source":"core","tags":{"category":"model","type":"effect"},"name":"DEMONIC","contextdata":{"option_search_viable":{},"keyword_modify_keywords":{"negate":["kw_fire"]}},"description":[{"tags":{"desc_type":"default"},"content":"model with this Keyword has the NEGATE FIRE Keyword.","glossary":[{"val":"NEGATE FIRE","id":"kw_negate_kw_fire"}]}]},{"id":"kw_elite","source":"core","tags":{"category":"model","type":"tag"},"name":"ELITE","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"The most senior and heroic models in a Warband."}]},{"id":"kw_fear","source":"core","tags":{"category":"trait","type":"effect"},"name":"FEAR","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"Add -1 DICE to a Melee Attack that targets a model with this Keyword. Models that cause FEAR are immune to FEAR themselves.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"}]}]},{"id":"kw_fire","source":"core","tags":{"category":"element","type":"effect"},"name":"FIRE","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"After making the Injury Roll for a Weapon with this Keyword, place 1 extra BLOOD MARKER next to the target model even if the result is No Effect.","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"}]}]},{"id":"kw_fireteam","source":"core","tags":{"category":"model","type":"effect"},"name":"FIRETEAM","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"A model with this Keyword is part of a group of 2 models, both of which must have the FIRETEAM Keyword. You can create Fireteams when you recruit a Warband, and in the Quartermaster Step. Record which models are in Fireteams in your Warband on your Warband Roster. "},{"tags":{"desc_type":"default"},"content":"You can Activate friendly models that are part of the same Fireteam simultaneously. If you do so, you can take their ACTIONS in any order you wish, and you can switch between the two models freely. However, if the Activation of either member of the Fireteam ends during a simultaneous Activation, it immediately ends for the other model too. A model cannot be in more than 1 Fireteam.","glossary":[{"val":"Risky Success","id":"kw_riskyaction"},{"val":"ACTIONS","id":"kw_action"}]}]},{"id":"kw_flamethrower","source":"core","tags":{"category":"equipment","type":"effect"},"name":"FLAMETHROWER","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"When a Weapon with this Keyword is used to make a Ranged Attack it is automatically a Success. Do not make a Success Roll for the attack. Note that this means that the attack cannot achieve a Critical Success."}]},{"id":"kw_gas","source":"core","tags":{"category":"element","type":"effect"},"name":"GAS","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"After making the Injury Roll for a Weapon with this Keyword, place 1 extra BLOOD MARKER next to the target model even if the result is No Effect.","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"}]}]},{"id":"kw_grenade","source":"core","tags":{"category":"equipment","type":"effect"},"name":"GRENADE","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"Grenade-type weapons do not count towards the number of ranged weapons a model can carry and do not have to be held in your hand at all times. A model armed with grenades can use them as many times as they wish."}]},{"id":"kw_heavy","source":"core","tags":{"category":"equipment","type":"effect"},"name":"HEAVY","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"A model cannot be equipped with more than one piece of Battlekit with this Keyword and it does not receive a Charge Bonus when it makes a charge move. In addition, if a Ranged Weapon or Grenade has this Keyword, you cannot use the Weapon or Grenade to make a Ranged Attack and take a Move, Charge or Retreat, or Dash ACTION with the attacking model as part of the same Activation.","glossary":[{"val":"ACTION","id":"kw_action"}]}]},{"id":"kw_heretic","source":"core","tags":{"category":"faction","faction":"fc_hereticlegion","type":"tag"},"name":"HERETIC","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"The model is a member of the Heretic Legions faction."}]},{"id":"kw_held","source":"core","tags":{"category":"equipment","type":"effect"},"name":"HELD","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"A piece of Battlekit with this Keyword requires one hand to carry and cannot be put down. Because of this, a model that has this Keyword can only be equipped with or use either a 1-Handed Weapon or a Shield. It cannot be equipped with or use any 2-Handed Weapons, or both a Weapon and a Shield (even if the Shield has the Shield Combo rule). It may still carry Grenades."}]},{"id":"kw_ignorearmour","source":"core","tags":{"category":"equipment","type":"effect"},"name":"IGNORE ARMOUR","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"Ignore -INJURY DICE and -INJURY MODIFIERS for a target\u2019s Armour Characteristic, and for any Armour or Shield pieces of Battlekit that it has, for attacks that have this Keyword.","glossary":[{"val":"-INJURY DICE","id":"kw_minusdice"},{"val":"-INJURY MODIFIERS","id":"kw_injurymodifier"}]}]},{"id":"kw_infiltrator","source":"core","tags":{"category":"model","type":"effect"},"name":"INFILTRATOR","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"When a model with this Keyword is deployed for the first time in a game, it can be set up anywhere on the battlefield as long as it is out of line of sight of all enemies and is at least 8\\" away from the closest enemy. INFILTRATORS are deployed after models that do not have this Keyword. Any INFILTRATORS that cannot be deployed in this way are instead deployed normally in their deployment zone."}]},{"id":"kw_antioch","source":"core","tags":{"category":"faction","faction":"fc_newantioch","type":"tag"},"name":"NEW ANTIOCH","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"This model is part of the Principality of New Antioch Faction."}]},{"id":"kw_pilgrim","source":"core","tags":{"category":"faction","faction":"fc_trenchpilgrim","type":"tag"},"name":"PILGRIM","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"This model is part of the Trench Pilgrim Faction."}]},{"id":"kw_pistol","source":"core","tags":{"category":"equipment","type":"effect"},"name":"PISTOL","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"A pistol can be used as a Melee Weapon or a Ranged Weapon, and can be used as both in the same Activation. When it is used as a Ranged Weapon it has the Range shown on its Profile and uses the attacking model\u2019s ranged Characteristic. When used as a Melee Weapon it uses the attacking model\u2019s Ranged or Melee Characteristic and can be used as an Off-Hand Weapon if desired."}]},{"id":"kw_reload","source":"core","tags":{"category":"equipment","type":"effect"},"name":"RELOAD","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":" If a model makes an attack with a Weapon that has this Keyword then its Activation ends after the ACTION that allowed the attack is completed.","glossary":[{"val":"ACTION","id":"kw_action"}]}]},{"id":"kw_scatter","source":"core","tags":{"category":"equipment","type":"effect"},"name":"SCATTER","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"Some Weapons with the BLAST Keyword also have the SCATTER Keyword. When you make an attack with the Weapon, pick a target and carry out the attack as described in the rules for BLAST. However, if the Success Roll for the attack was a Failure, the attack will scatter instead of missing. To see where it scatters to, subtract the Success Roll from 7. For example, if the Success Roll was 4, then the target point would scatter (7\u20134=) 3\u201d. Your opponent must move the attack exactly that many inches in a direction of their choice, to a point on the battlefield, on a terrain piece, or on the base of a model. There must be Line of Sight between the point that is chosen and the original target for the attack. If this is impossible for any reason, then treat the attack as a miss. Then, determine who is hit as described in the rules for BLAST.","glossary":[{"val":"BLAST","id":"kw_blast"}]}]},{"id":"kw_shotgun","source":"core","tags":{"category":"equipment","type":"effect"},"name":"SHOTGUN","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"Add -1 INJURY DICE to rolls for attacks made at Long Range with a Weapon that has this Keyword instead of the usual Long Range modifier (-1 DICE).","glossary":[{"val":"-1 DICE","id":"kw_minusdice"},{"val":"-1 INJURY DICE","id":"kw_minusdice"}]}]},{"id":"kw_limit","source":"core","tags":{"category":"list","type":"tag"},"name":"LIMIT (X)","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"You can only purchase as many of this piece of equipment/weapon/armour as indicated by the number in parenthesis for your warband. If you find more via looting/exploration, you can break this limit."}]},{"id":"kw_riskyaction","source":"core","tags":{"category":"action","type":"effect"},"name":"RISKY","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":" If you must make a Success Roll for a model that is using a piece of Battlekit that has this Keyword, then the Success Roll becomes a Risky Success Roll (the model\u2019s Activation or ACTION will end if the Risky Success Roll is a Failure). For example, the Success Roll for an attack made with a Weapon that has the RISKY Keyword would become a Risky Success Roll. This Effect is ignored if the Success Roll is already a Risky Success Roll.","glossary":[{"val":"ACTION","id":"kw_action"}]}]},{"id":"kw_shrapnel","source":"core","tags":{"category":"element","type":"effect"},"name":"SHRAPNEL","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"After making the Injury Roll for a Weapon with this Keyword, place 1 extra BLOOD MARKER next to the target model even if the result is No Effect.","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"}]}]},{"id":"kw_skirmisher","source":"core","tags":{"category":"model","type":"effect"},"name":"SKIRMISHER","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"If an enemy selects a model with this Keyword as the target of a Charge, you can choose to evade with your model before the Charge is made, as long as your model is not within 1\u201d of an enemy. When a model evades, roll a D3 and move the model that many inches. It must finish this move more than 1\u201d away from all enemy models. If this move results in there being an interposing model between the evading model and the model that is making the charge, then the charging model must choose the interposing model as the target for its charge."}]},{"id":"kw_strong","source":"core","tags":{"category":"model","type":"effect"},"name":"STRONG","contextdata":{"option_search_viable":{},"keyword_modify_keywords":{"negate":["kw_heavy"]}},"description":[{"tags":{"desc_type":"default"},"content":"A model with this Keyword has the NEGATE HEAVY Keyword. In addition, it can equip and use one 2-Handed Melee Weapon as if it were a 1-Handed Melee Weapon.","glossary":[{"val":"NEGATE HEAVY","id":"kw_negate_kw_heavy"}]}]},{"id":"kw_sultanate","source":"core","tags":{"category":"faction","faction":"fc_ironsultanate","type":"tag"},"name":"SULTANATE","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"This model is part of the Sultanate of the Iron Wall Faction."}]},{"id":"kw_tough","source":"core","tags":{"category":"model","type":"effect"},"name":"TOUGH","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"The first time a model with this Keyword suffers an Out of Action result on the Injury Table, it is treated as a Down result instead."}]},{"id":"kw_bayonetlug","source":"core","tags":{"category":"equipment","type":"effect"},"name":"BAYONET LUG","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"Bayonets can only be attached to weapons fitted with a \u2018Bayonet lug\u2019."}]},{"id":"kw_golem","source":"core","tags":{"category":"model","type":"effect"},"name":"GOLEM","contextdata":{"option_search_viable":{},"keyword_modify_keywords":{"negate":["kw_gas","kw_fear"],"banned":["kw_tough"]}},"description":[{"tags":{"desc_type":"default"},"content":"A model with this Keyword treats an Out of Action result from the Injury Roll Table as a Down result unless the result was caused by a Bloodbath Roll. In addition, you cannot remove BLOOD MARKERS from a friendly model with this Keyword (the opposing player can use them normally). Finally, a model with this Keyword has the NEGATE FEAR and NEGATE GAS Keywords, but cannot have the TOUGH Keyword.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"},{"val":"NEGATE GAS","id":"kw_negate_kw_fear"},{"val":"NEGATE FEAR","id":"kw_negate_kw_fear"}]}]},{"id":"kw_thecourt","source":"core","tags":{"category":"faction","faction":"fc_courtofthesevenheadedserpent","type":"tag"},"name":"THE COURT","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"This model is part of The Court of the Seven Headed Serpent faction."}]},{"id":"kw_leader","source":"core","tags":{"category":"model","type":"effect"},"name":"LEADER","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"Add +1 DICE to Morale Checks if your Warband has at least 1 model with this Keyword on the battlefield that is not Down or Out of Action.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"}]}]},{"id":"kw_block","source":"core","tags":{"category":"equipment","positive":true,"type":"effect"},"name":"BLOCK","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"Add -1 DICE for Melee Attacks targeting that model if the attacker made a Charge ACTION before making the attack this turn.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"-1 DICE","id":"kw_minusdice"}]}]},{"id":"kw_negate","source":"core","tags":{"category":"model","positive":true,"type":"effect"},"name":"NEGATE X","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"paragraph"},"content":"A model with the NEGATE Keyword is not affected by the specified Keyword\u2019s Effect."},{"tags":{"desc_type":"paragraph"},"content":"For example, a model with NEGATE SHRAPNEL ignores the Effect of the SHRAPNEL Keyword.","glossary":[{"val":"SHRAPNEL","id":"kw_shrapnel"}]}]},{"id":"kw_ignoremodifier","source":"core","tags":{"category":"model","positive":true,"type":"effect"},"name":"IGNORE X","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"Ignore the Success Roll or Injury Roll modifier that is specified. For example, the Success Roll for an attack made with a Ranged Weapon that had the IGNORE COVER Keyword would not be affected by the -1 DICE modifier for a target that is in Cover.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"}]}]},{"id":"kw_impervious","source":"core","tags":{"category":"model","positive":true,"type":"effect"},"name":"IMPERVIOUS","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"The ARMOUR PIERCING and IGNORE ARMOUR Effects do not affect any -INJURY DICE and -INJURY MODIFIERS that apply to Battlekit that has this Keyword. Any other Battlekit the target model has is affected normally.","glossary":[{"val":"ARMOUR PIERCING","id":"kw_armourpiercing"},{"val":"IGNORE ARMOUR","id":"kw_ignorearmour"},{"val":"-INJURY DICE","id":"kw_injurydice"},{"val":"-INJURY MODIFIERS","id":"kw_injurymodifier"}]}]},{"id":"kw_cleave","source":"core","tags":{"category":"equipment","equipment":"weapon","type":"effect"},"name":"CLEAVE (X)","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"When you take a Fight ACTION with a Weapon that has this Keyword, you can make a number of Melee Attacks with this weapon equal to X, one after another. The attacks can target different enemy models, as long as they are all within 1\u201d of the model taking the Fight ACTION. Resolve each attack one at a time, using steps 2 to 4 of the Melee Attack Sequence. Any BLOOD MARKERS that are spent only modify the Injury Roll for the attack they are spent on, and do not modify Injury Rolls for subsequent attacks.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"BLOOD MARKERS","id":"kw_bloodmarker"}]}]},{"id":"kw_difficultterrain","source":"core","tags":{"category":"terrain","type":"effect"},"name":"DIFFICULT TERRAIN","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"Every 1\u201d a model is moved across terrain with this Keyword counts as 2\u201d."}]},{"id":"kw_dangerousterrain","source":"core","tags":{"category":"terrain","type":"effect"},"name":"DANGEROUS TERRAIN","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"If you Activate a model that is in terrain with this Keyword, or if you move a model into terrain with this Keyword during a move, you must take a Risky Success Roll for the model. If the roll is a Success or Critical Success, you can carry on with the model\'s move, and you do not have to take any more Risky Success Rolls for the model if it moves into any more terrain with this Keyword as part of that move. If the roll is a Failure, you must make an Injury Roll for the model and its Activation ends. Sometimes DANGEROUS TERRAIN will have one or more Keywords in brackets directly after it. Any Injury Rolls caused by the DANGEROUS TERRAIN rule have those Keywords. For example, if a terrain piece had the DANGEROUS TERRAIN (FIRE) Keywords, then any Injury Rolls caused by it would count as having the FIRE Keyword.","glossary":[{"val":"Risky Success","id":"kw_riskyaction"},{"val":"FIRE","id":"kw_fire"}]}]},{"id":"kw_impassableterrain","source":"core","tags":{"category":"terrain","type":"effect"},"name":"IMPASSABLE TERRAIN","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"Models cannot be moved onto or across terrain with this Keyword."}]},{"id":"kw_deadly","source":"core","tags":{"category":"equipment","equipment":"weapon","type":"effect"},"name":"DEADLY","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"When you make an Injury Roll for an attack made with a weapon with this Keyword, roll 3D6 and add all 3 dice together. Any +INJURY DICE or -INJURY DICE are added to the roll normally, except that you pick the 3 highest or lowest dice in the roll instead of the 2 highest or lowest.","glossary":[{"val":"-INJURY DICE","id":"kw_injurydice"},{"val":"+INJURY DICE","id":"kw_injurydice"}]}]},{"id":"kw_ammunition","source":"core","tags":{"category":"equipment","equipment":"weapon","type":"effect"},"name":"AMMUNITION (KEYWORD)","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"If a model has a piece of Battlekit with this Keyword, it will use it in the next game that it takes part in. When the model is deployed, say which Ranged Weapon the Battlekit will be used for. It gains the (KEYWORD) until the end of the game. The Ranged Weapon you choose cannot already have the BLAST, FIRE, GAS, or SHRAPNEL Keywords, and cannot have more than one type of AMMUNITION.","glossary":[{"val":"BLAST","id":"kw_blast"},{"val":"FIRE","id":"kw_fire"},{"val":"GAS","id":"kw_gas"},{"val":"SHRAPNEL","id":"kw_shrapnel"}]}]},{"id":"kw_deployable","source":"core","tags":{"category":"equipment","equipment":"all","type":"effect"},"name":"DEPLOYABLE","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"Battlekit that is represented by a model or terrain piece that can be set up during the game."}]},{"id":"kw_flying","source":"core","tags":{"category":"model","type":"effect"},"name":"FLYING","contextdata":{"option_search_viable":{},"set_stat":{"upgrades":[{"stat":"movetype","value":1}]}},"description":[{"tags":{"desc_type":"default"},"content":"When you make a move, retreat move or charge move with a model with this Keyword, you can measure the path on which it travels \u2018through the air\u2019. It must end the move on the battlefield or on a terrain piece. You must still take a Risky Success Roll for the model if it is Activated or ends its move on Dangerous terrain, and it cannot end its move on Impassable terrain. In addition do not make an Injury Roll if a model with this Keyword Falls."}]},{"id":"kw_mined","source":"core","tags":{"category":"terrain","type":"effect"},"name":"MINED","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"When a model moves into contact with a Marker or terrain piece with the MINED Keyword, the mine will detonate unless the model has the NEGATE MINED Keyword. Make an Injury Roll with the SHRAPNEL Keyword for the model that detonated the mine, and then the Marker or terrain piece loses the MINED Keyword. If the model that detonated the mine wasn\'t taken Down or Out of Action, it can then continue its move. Models with the FLYING Keyword only detonate a mine if they finish a move in contact with a MINED Marker or terrain piece (they can fly across it without setting it off ).","glossary":[{"val":"NEGATE MINED","id":"kw_negate_kw_mined"},{"val":"FLYING","id":"kw_flying"},{"val":"SHRAPNEL","id":"kw_shrapnel"}]}]},{"id":"kw_regenerate","source":"core","tags":{"category":"model","type":"effect"},"name":"REGENERATE (X)","contextdata":{"option_search_viable":{}},"description":[{"tags":{"desc_type":"default"},"content":"When you Activate a model with this Keyword, before carrying out any ACTIONS, you can remove up to X BLOOD MARKERS from the model.","glossary":[{"val":"ACTIONS","id":"kw_action"},{"val":"BLOOD MARKERS","id":"kw_bloodmarker"}]}]}]'),s=JSON.parse('[{"id":"gr_introduction","source":"core","tags":{"order":"introduction","url_custom":"introduction"},"contextdata":{},"name":"Introduction","item_index":0,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Trench Crusade is a skirmish-scale tabletop miniatures game that plunges players deep into a horrifying alternate timeline. During the Crusades, a heretical order of Templars dared defy the Almighty, breaking their sacred oaths and unleashing the forces of Hell upon the Earth. Now, over eight hundred years later, in the Year of Our Lord 1914, this brutal and merciless war between the forces of Heaven and Hell rages on. This is not merely a fight for survival. This is a cataclysmic struggle that will decide the very fate of humanity\u2019s soul."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"As both sides of the Great War prepare for massive new offensives, a different struggle takes place in the shattered wasteland of No Man\u2019s Land. Here, small warbands of combatants stalk the cratered earth, scarred by artillery and ravaged by centuries of war. These warbands gather information and ancient artefacts, seek out enemy scouts and high-value targets. Some are saboteurs and assassins, working deep behind enemy lines. Many are on holy (or unholy!) missions to obtain relics or perform bloodsoaked rituals in long-lost temples, churches, and basilicas. Others scour the front for vessels worthy of possession or sacrifice."}]}],"sections":[{"title":"These Rules","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"The rules you are reading is a gateway to playing games set in the world of Trench Crusade. You will find all you need to charge into battle and join the countless souls locked in this never-ending conflict."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"In the first section, you will find a timeline of significant events in world history, and a short account of the world and the major factions fighting in the Great War."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Next, you will find the rules. These are divided into two sections: the Core Rules, which will teach you the fundamentals, and the Comprehensive Rules, which provide more detailed guidelines. You will discover that the rules are easy to learn and memorise, but will take skill and time to master."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"After the Core Rules, you will find the section on how to link individual battles into a Campaign. The Campaign Rules are the beating heart of the Trench Crusade game. They allow you to craft your own stories, leading your warband from humble beginnings to legendary status in the Great War, where their deeds are spoken of in hushed tones in the bunkers and pillboxes of No Man\u2019s Land. You will lose warriors and gain new recruits along the way. Others will suffer grievous injuries, but some will survive to learn deadly skills or acquire powerful equipment."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"The rules are followed by an array of thrilling Scenarios for you to play, from daring trench raids to battles over armoured trains."}]}]},{"title":"What You Need To Play","description":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"A warband of 6\u201310 miniatures to lead into battle.","subcontent":[]},{"tags":{"desc_type":"default"},"content":"A battlefield roughly 3\'x3\' (90x90cm), or 4\' by 4\' (120x120cm), or any surface with 24\\" (60cm) between forces.","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Terrain (and lots of it).","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Three sets of six-sided dice in different colours.","subcontent":[]},{"tags":{"desc_type":"default"},"content":"A tape measure with imperial inches.","subcontent":[]},{"tags":{"desc_type":"default"},"content":"The rules (you\u2019re reading them).","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Friends. No one fights the Great War alone.","subcontent":[]}]}]},{"title":"In Depth","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Trench Crusade is a miniatures game, so you will need model soldiers to represent the warband you command. A typical warband at the start of the campaign consists of 6 to 10 models. You can acquire these from online and physical hobby stores. Alternatively, if you own a 3D printer, a vast selection of printable digital files is available online."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"We provide a full range of models for Trench Crusade, but we are also enthusiastic about our support for independent miniature manufacturers. We encourage players to use whichever miniatures bring your vision to life; the battlefield is yours to shape."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"You will need a tabletop to play on. We recommend a playing surface of about 3 feet by 3 feet (90cm by 90cm). However, as long as there is enough space to leave 24 inches (approximately 60cm) between the two forces at the start of the game, play is still perfectly possible. In every game, your forces need cover to huddle behind in order to avoid incoming enemy fire, ruined towers to act as sniper nests, and of course, the ever-present trenches where you can engage your foes in desperate close-quarters combat. The general rule of Trench Crusade is: the more terrain there is, the better the game will be! We have included a comprehensive Terrain Guide tohelp you create immersive battlefields, using off-the-shelf terrain, scratch-built models, or improvised pieces."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"You will also need a tape measure to determine whether your bolt-action rifles are within effective range. Trench Crusade uses the archaic imperial measurement system, so ensure your tape measure includes these esoteric units."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Next, you need something you can blame for any losses and defeats during your games. We call these things dice. Trench Crusade uses six-sided dice, which most wargamers already have in abundance. We recommend using at least three sets of six dice in different colours."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Most importantly, you need friends! A group of like-minded hobbyists to play with is the most essential ingredient for an enjoyable wargaming experience. Local gaming clubs and hobby and gaming shops are a great place to start looking for fellow players. You will find a thriving Trench Crusade community online across various forums, channels, and social media."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Finally, remember the golden rule of wargaming: There is no wrong way to do this hobby, as long as you are respectful and honourable to fellow players across the table and within the wider community."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Happy gaming!"}]}]}]},{"id":"gr_theworldinflames","source":"core","tags":{"order":"introduction","url_custom":"the-world-in-flames"},"contextdata":{},"name":"The World In Flames","item_index":1,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"The Earth has been cleft in two, as if by a bloodied sword, divided between the Faithful and the Fallen powers of the Inferno. There can never be true peace between them. Though decades may pass while both sides, weary and spent, gather their strength and restore their ranks, the conflict always resumes."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"The Principality of New Antioch stands defiant against the Devil\u2019s might. Here, Duke Constantine XI commands the armies of the Faithful. On his shoulders rests the fate of the European continent."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"From all across Christendom the pious and the mad form Trench Pilgrim Processions in bewildering numbers. These men and women seek to throw themselves against the demonic and heretical forces, desperate to earn salvation through battle."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"To the East, behind the protection of the Great Iron Wall, the Sultan marshals his forces as they struggle to hold back the tide of Shaytan."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Opposing the Faithful from the lands under the fiery shadow of Hell come the Lords of the Sixty-Six, scheming towards dominion and the ascension of a new overlord, reflecting the mercurial politics of Inferno on Earth."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Amidst the killing fields, corpses shamble to their feet as the Prince of Decay, Beelzebub, wages his own private war against all life with his Black Grail."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"The mortal worshipers of demons and Heretics are bolstered by the armies of the Court of the Seven-Headed Serpent, Hell\u2019s foot soldiers. In dark majesty the terrible hunting parties of the Inferno seek to bleed the Earth dry."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Between the warring sides yawns No Man\u2019s Land: endless trenchworks, pillboxes and bunkers, ruined villages, towns and cities, pockmarked by devastating artillery, create a landscape of horror, haunted by the ghosts of the fallen. Shattered temples, synagogues, mosques, churches, basilicas, and cathedrals stand in solemn witness to a battle as spiritual as it is physical."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"The perils at sea are no less dire, where the Heretic navies dominate their Faithful counterparts. Maintaining vital trade routes demands every ounce of strength from the admirals and captains charged with the nigh-impossible task of contesting the mighty behemoths and submarines of the Heretics. Only in the Mediterranean do the Faithful and the Heretics meet as near equals, locked in a tenuous balance of power."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"No part of the world is truly safe from Hell\u2019s claws, which reach ever outward to grasp their coveted prize, absolute mastery over Creation."}]}],"sections":[{"title":"A Brief and Incomplete Timeline of Trench Crusade","description":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"ca. 1072: "},{"tags":{"desc_type":"default"},"content":"Ominous celestial signs warn of the disruption of God\u2019s plan. Heretical cults multiply. The Order of Knights Templar is established. They set their sights on capturing the Temple Mount."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"1099: "},{"tags":{"desc_type":"default"},"content":"The First Crusade captures Jerusalem. The Knights Templar commit the Act of Ultimate Heresy. The Gate of Hell appears on Earth. Jerusalem is destroyed in the cataclysm."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"1101: "},{"tags":{"desc_type":"default"},"content":"The Year of Three Battles. Heretics, reinforced by the armies of the Third Circle of Hell, conquer the entirety of the Levant."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"1102: "},{"tags":{"desc_type":"default"},"content":"The ancient city of Antioch is fortified and becomes the focal point of resistance against the forces of Hell."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"1106: "},{"tags":{"desc_type":"default"},"content":"Cobar becomes the First Tyrant of the Sixty-Six."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"1109: "},{"tags":{"desc_type":"default"},"content":"The Great Sultanate of the Invincible Iron Wall of the Two Horns That Pierce the Sky is formed. In the coming decades it unifies the Islamic factions. The Great Iron Wall of Iskandar re-emerges and is fortified against the Heretics."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"1117: "},{"tags":{"desc_type":"default"},"content":"The legendary Seventeen Martyrs travel to the Domains of Hell to convert the Heretics. They are captured, tortured, and preserved in the throes of death, trapped for eternity within white-hot burning altars."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"1165: "},{"tags":{"desc_type":"default"},"content":"The Old Man of the Mountain and his Hashashins defend the mountain fortress of Alamut. Reportedly, the castle endures, despite being besieged for hundreds of years."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"1215-1306: "},{"tags":{"desc_type":"default"},"content":"The Wars of Triclavianism. The Church is divided, engulfed in a fierce internal conflict. Heretic domains spread as the Faithful turn against each other. Millions perish by sword and flame."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"1312: "},{"tags":{"desc_type":"default"},"content":"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 creates the first Communicants. Their entry into the war steadies the battlefront."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"1346-1353: "},{"tags":{"desc_type":"default"},"content":"Beelzebub unleashes the Black Grail. Tens of millions are infected, transforming into metastatic vessels in the worst plague humanity has ever known. The Corpse Wars begin."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"1429: "},{"tags":{"desc_type":"default"},"content":"Living Saint Jeanne d\u2019Arc drives the Black Grail from mainland Europe."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"1477: "},{"tags":{"desc_type":"default"},"content":"The City of Argos is taken by God, and is no more."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"1503: "},{"tags":{"desc_type":"default"},"content":"War Prophet Angelos, guided by Saint Elegius, discovers the formula for orichalcum steel. Though exorbitantly costly to produce, the metal proves to be highly effective against all missile weapons and remains in use to this day."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"1545: "},{"tags":{"desc_type":"default"},"content":"Antioch is annihilated by a mysterious Infernal weapon."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"1573: "},{"tags":{"desc_type":"default"},"content":"The Sacred Order of the Dragon halts the Infernal advance after the destruction of Byzantium. Word spreads of a million Heretics impaled in the hills of Wallachia."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"1588: "},{"tags":{"desc_type":"default"},"content":"The Unified Church compiles the New Orthodox Syncretic Bible."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"1595: "},{"tags":{"desc_type":"default"},"content":"Walls of New Antioch completed."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"1666: "},{"tags":{"desc_type":"default"},"content":"The Year of Six Woes. In a surprise raid, the newly created Heretic Fleet captures Gibraltar. The Rock becomes the Sea Fortress, serving as the Heretic base of operations against Europe. Forces of Hell gain access to the Atlantic."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"1670: "},{"tags":{"desc_type":"default"},"content":"Due to constant coastal raids by the Heretic Fleet, the Crown of England begins the construction of the Fortress of the White Cliffs of Dover."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"1703: "},{"tags":{"desc_type":"default"},"content":"Against all odds, a small force of Hebrew Knights, striking from their secret fortress, destroys the Templar stronghold at Acre."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"1721: "},{"tags":{"desc_type":"default"},"content":"The Third Siege of New Antioch is lifted by the combined forces of Sultan Ibrahim, reinforced by a contingent of Tughlaq warriors from the East and a relief fleet of the Papal States from the West."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"1789: "},{"tags":{"desc_type":"default"},"content":"The Grand Fleet of the Heretic Admiral Amminadab launches a full invasion of the Highlands. Bitter guerrilla warfare rages for decades as the Scots struggle to expel the invaders. The population is devastated."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"1805: "},{"tags":{"desc_type":"default"},"content":"The Heretic Fleet commanded by High Captain Ranga triumphs over England\u2019s navy in the Battle of Bloodied Cliffs. Admiral Nelson is slain in combat."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"1807: "},{"tags":{"desc_type":"default"},"content":"The Heretic Basilisk Fleet invades \xc9ire. The High King Muiredach leads the clans against the invaders but is slain at the Battle of Waterford. The Irish wage a century-long guerrilla campaign to reclaim their land."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"1866: "},{"tags":{"desc_type":"default"},"content":"In utmost secrecy, Heretic scientists, aided by the demon Marbas, construct the first modern submarines."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"1870: "},{"tags":{"desc_type":"default"},"content":"Launched from Gibraltar, the Heretic submarine fleet inflicted severe losses on merchant navies, causing widespread famine."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"1872: "},{"tags":{"desc_type":"default"},"content":"Heretic forces storm and seize the city of Rijeka. It is fortified, and the Heretic conquest is launched against the European mainland."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"1892: "},{"tags":{"desc_type":"default"},"content":"The Heretics are expelled from \xc9ire. An audacious raid by combined Fianna flying columns sinks the Heretic flagship Hymn of Obscenity at anchor."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"1894: "},{"tags":{"desc_type":"default"},"content":"The Year of the Broken Trinity. In a synchronised strike, three master Death Commandos, Cain, Barabbas, and Haman, assassinate the Supreme Pontiff, the High Prophetess Aelia, and the Holy Roman Emperor, plunging the Faithful into turmoil. Simultaneously the Heretic Legions, commanded by Hell\u2019s nobles of the Seventh Circle, launch a lightning offensive in the Levant and Europa, bolstered by a huge vanguard of tanks."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"1899: "},{"tags":{"desc_type":"default"},"content":"Church Space Programme commences."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"1905: "},{"tags":{"desc_type":"default"},"content":"The Supply Fleet of New Antioch is ambushed and destroyed by the Heretic fleet. The wreckage washes ashore along the Levant, creating the Carcass Front. Achish, the Lord of the Sixty-Six, launches the Eighth Siege of New Antioch even as he strikes at the Iron Sultanate, aiming to divide and destroy the armies of the Faithful. The Duke of New Antioch falls in battle, but a hastily assembled relief force eventually defeats the Heretic armies."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"1907: "},{"tags":{"desc_type":"default"},"content":"The construction of the Moving Fortress of Britannia is completed."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"1910: "},{"tags":{"desc_type":"default"},"content":"The Battle of C\xf3rdoba results in a bloody stalemate. Heretic artillery obliterates the ancient city, but their forces fail to gain access to the heartlands of Hispania."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"1914: "},{"tags":{"desc_type":"default"},"content":"The present day. Both sides are preparing for major offensive operations. Skirmishes and raids intensify across the vast swathes of No Man\u2019s Land as the Faithful and the Heretics vie for crucial information, powerful relics, and strategic positions."}]}]}]}]},{"id":"gr_thecorerules","source":"core","tags":{"order":"core","url_custom":"phases"},"contextdata":{},"name":"Phases","item_index":2,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"The first section of the rulebook is called the Core Rules, and explains how to play Trench Crusade in a quick and easy to use format. The Core Rules are followed by the Comprehensive Rules section, which provides more detailed explanations of the rules and additional information about how they work. If you are using the Core Rules and encounter a situation that you are not sure how to resolve, read the Comprehensive Rules to find the answer."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"A game of Trench Crusade is divided into Turns, which are split into an Initiative Phase, an Activation Phase, and a Morale Phase."}]}],"sections":[{"title":"The Initiative Phase","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"The player with the lowest number of models in their Warband has the Initiative and can choose to Activate a model first or second. If both players have the same number of models, each player rolls a dice and whoever rolls the highest has the Initiative."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"rulesbanner","url":"/compendium/comprehensive-rules/initiative-phase"},"content":"Comprehensive Rules: Initiative Phase","subcontent":[]}]}]},{"title":"The Activation Phase","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"When it is your turn to Activate a model, you must choose a model in your Warband that has not yet been Activated and Activate it. Your opponent must then Activate a model, and so on, back and forth until all models have been Activated. A model cannot be Activated more than once per Turn."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"rulesbanner","url":"/compendium/core-rules/activation-phase"},"content":"Core Rules: Activation Phase","subcontent":[]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"rulesbanner","url":"/compendium/comprehensive-rules/activation-phase-comprehensive"},"content":"Comprehensive Rules: Activation Phase","subcontent":[]}]}]},{"title":"The Morale Phase","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"In the Morale Phase, if half the models in your Warband are Down or Out of Action (rounded up), you must make a Success Roll. If the roll is a Success, your Warband carries on normally. If the roll is a Failure, your Warband becomes Shaken."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"rulesbanner","url":"/compendium/comprehensive-rules/morale-phase-comprehensive"},"content":"Comprehensive Rules: Morale Phase","subcontent":[]}]}]}]},{"id":"gr_theactivationphase","source":"core","tags":{"order":"core","sub_order":"reference","url_custom":"activation-phase"},"contextdata":{},"name":"Activation Phase","item_index":3,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"When it is your turn to Activate a model, you must choose a model in your Warband that has not yet been Activated and Activate it. Your opponent must then Activate a model, and so on, back and forth until all models have been Activated. A model cannot be Activated more than once per Turn."}]}],"sections":[{"title":"Actions","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"The Activated model can take the following ACTIONS once each, in any order you wish:","glossary":[{"val":"ACTIONS","id":"kw_action"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Move or Charge or Retreat: "},{"tags":{"desc_type":"default"},"content":"You can use an ACTION to Move or Charge or Retreat with your model, but not more than one. ","glossary":[{"val":"ACTION","id":"kw_action"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Move: "},{"tags":{"desc_type":"default"},"content":"You can move your model a number of inches equal to its Movement Characteristic in any direction (no roll is required). Obstacles up to 1\u201d high can be crossed without penalty, and your model can climb sheer surfaces if you first pass a Risky Success Roll. Difficult terrain is crossed at half speed. A Move ACTION cannot be used to move a model within 1\u201d of an enemy model (you must use a Charge Action instead).","glossary":[{"val":"Risky Success","id":"kw_riskyaction"},{"val":"ACTION","id":"kw_action"}]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Charge: "},{"tags":{"desc_type":"default"},"content":"Pick an enemy model that is visible to your model and within 12\u201d of it as the target of the charge. Then roll a dice, add the result to your model\u2019s Movement Characteristic and move it towards the target. If your model finishes its move within 1\u201d of the target, it can Fight."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Retreat: "},{"tags":{"desc_type":"default"},"content":" You can only move a model that is within 1\u201d of an enemy by taking a Retreat ACTION. A retreating model moves a number of inches equal to its Movement Characteristic in any direction but it must end its retreat move more than 1\u201d away from all enemy models. Your opponent can take a Fight ACTION with 1 Melee Weapon before the retreating model is moved away. If this takes your model Down or Out of Action it is not moved.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"CLEAVE","id":"kw_cleave"}]}]}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Dash: "},{"tags":{"desc_type":"default"},"content":"A Dash ACTION can be carried out in addition to a Move, Charge or Retreat ACTION. You can move your model a number of inches equal to its Movement Characteristic in any direction, but you must take a Risky Success Roll for the model first. If you succeed, your model can move (it cannot charge or retreat). If you fail, the model\u2019s Activation ends.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"Risky Success","id":"kw_riskyaction"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Shoot: "},{"tags":{"desc_type":"default"},"content":"You can make a Ranged Attack with your model if it is more than 1\\" from an enemy and has a Ranged Weapon. Your model cannot Shoot and take a Charge or Fight ACTION in the same activation unless it uses a weapon that has the ASSAULT keyword.","glossary":[{"val":"ASSAULT","id":"kw_assault"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Fight: "},{"tags":{"desc_type":"default"},"content":"You can make a Melee Attack with your model if it is within 1\\" of an enemy and has a Melee Weapon."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Other: "},{"tags":{"desc_type":"default"},"content":"Some models have other ACTIONS they can take during their Activations.","glossary":[{"val":"ACTIONS","id":"kw_action"}]}]}]},{"title":"Success Rolls","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"To take a Success Roll, roll two dice, add any +DICE or -DICE to the roll as described below, pick the two highest (or lowest if any -DICE were used), add them together, and consult the table below to see if you have succeeded. The instructions for the task you are carrying out will tell you what happens if you succeed or fail. If you are taking a Risky Success Roll and you fail, the model\u2019s Activation is over and your opponent can now Activate one of their models!","glossary":[{"val":"+DICE","id":"kw_plusdice"},{"val":"-DICE","id":"kw_minusdice"},{"val":"Risky Success","id":"kw_riskyaction"}]}]},{"tags":{"desc_type":"headless_table"},"content":"","subcontent":[{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"2-6"},{"tags":{"desc_type":"table_item"},"content":"Failure"}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"7-11"},{"tags":{"desc_type":"table_item"},"content":"Success"}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"12"},{"tags":{"desc_type":"table_item"},"content":"Critical Success. Add +1 INJURY DICE to Ranged or Melee Attacks if you roll a Critical Success.","glossary":[{"val":"+1 INJURY DICE","id":"kw_plusdice"}]}]}]}]},{"title":"+DICE and -DICE","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Rules often have modifiers to Success Rolls marked as +DICE and -DICE. These are shown in the format \u201c+1 DICE\u201d or \u201c-1 DICE\u201d.","glossary":[{"val":"+DICE","id":"kw_plusdice"},{"val":"-DICE","id":"kw_minusdice"},{"val":"+1 DICE","id":"kw_plusdice"},{"val":"-1 DICE","id":"kw_minusdice"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"For each +DICE, add 1 dice to the Success Roll. Then roll all the dice and pick the 2 highest rolls. For example, +1 DICE means you roll 3 dice and pick the 2 highest. If +2 DICE are added, roll 4 dice and pick the 2 highest, and so on.","glossary":[{"val":"+DICE","id":"kw_plusdice"},{"val":"+1 DICE","id":"kw_plusdice"},{"val":"+2 DICE","id":"kw_plusdice"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"The -DICE works in reverse. For each -DICE, add 1 dice to the Success Roll and pick the 2 lowest numbers. For example, -1 DICE means you roll 3 dice and pick the 2 lowest.","glossary":[{"val":"-DICE","id":"kw_minusdice"},{"val":"-1 DICE","id":"kw_minusdice"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"If both +DICE and -DICE are added to the same Success Roll, remove pairs of +DICE and -DICE until only one type is remaining. For example, if a roll had +2 DICE and -1 DICE, one of the +1 DICE and the -1 DICE would be removed, leaving +1 DICE to be added to the roll.","glossary":[{"val":"+DICE","id":"kw_plusdice"},{"val":"-DICE","id":"kw_minusdice"},{"val":"+2 DICE","id":"kw_plusdice"},{"val":"+1 DICE","id":"kw_plusdice"},{"val":"-1 DICE","id":"kw_minusdice"}]}]}]},{"title":"Ending The Activation Phase","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Once you have taken any and all ACTIONS you wish, or have failed a Risky Success Roll, your model\u2019s Activation ends. Your opponent can now Activate one of their models. The players then alternate Activating models in this fashion until one player runs out of models to Activate. Their opponent can then Activate their remaining models one after the other until they have all been Activated, then proceed to the Morale Phase.","glossary":[{"val":"ACTIONS","id":"kw_action"},{"val":"Risky Success","id":"kw_riskyaction"}]}]}]}]},{"id":"gr_corerulescombat","source":"core","tags":{"order":"core","sub_order":"reference","url_custom":"combat"},"contextdata":{},"name":"Combat","item_index":4,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Combat is divided into Ranged Attacks and Melee Attacks. Ranged Attacks are carried out when you take a Shoot ACTION with a model, and Melee Attacks when you take a Fight ACTION with a model.","glossary":[{"val":"ACTION","id":"kw_action"}]}]}],"sections":[{"title":"Ranged Attacks","description":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Choose a Ranged Weapon and then pick a target that is visible to your model and in range of the weapon.","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Take a Success Roll for the attacking model.","subcontent":[]},{"tags":{"desc_type":"default"},"content":"If the roll is a Failure, the attack misses and has no effect. If the roll is a Success it hits, so make an Injury Roll roll for the target. Add +1 INJURY DICE if the attack was a Critical Success.","glossary":[{"val":"+1 INJURY DICE","id":"kw_plusdice"}]}]}]},{"title":"Shooting Into Melee","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"If a target is within 1\\" of any friendly models, roll a dice to determine who is attacked: on a 1 \u2013 3 you must target a friendly model; on a 4 \u2013 6 you can target an enemy model. Take a Success Roll as normal once the target has been determined."}]}]},{"title":"Ranged Attack Modifiers","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Shooting from an elevated position: "},{"tags":{"desc_type":"default"},"content":"Add +1 DICE if the attacking model is at least 3\\" higher than the target.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Cover: "},{"tags":{"desc_type":"default"},"content":"Add -1 DICE if the target is in cover. A model is in cover if it is in contact with a terrain piece that is at least \xbd\\" high and as wide as its base, and the terrain piece lies between it and the attacking model.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Long Range: "},{"tags":{"desc_type":"default"},"content":"Add -1 DICE if the range to the target is more than half of the weapon\u2019s maximum range.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"}]}]}]},{"title":"Melee Attacks","description":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Choose a Melee Weapon and pick a target within 1\\" of your model.","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Take a Success Roll for the attacking model.","subcontent":[]},{"tags":{"desc_type":"default"},"content":"If the roll is a Failure, the attack misses and has no effect. If the roll is a Success it hits, so make an Injury Roll roll for the target. Add +1 INJURY DICE if the attack was a Critical Success.","glossary":[{"val":"+1 INJURY DICE","id":"kw_plusdice"}]}]}]},{"title":"Melee Attack Modifiers","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Multiple Melee Weapons: "},{"tags":{"desc_type":"default"},"content":"If your model is armed with two Melee Weapons, it may attack with both, one after the other in the order of your choice. Add -1 DICE for the second attack.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Fear: "},{"tags":{"desc_type":"default"},"content":"Add -1 DICE if your opponent has the FEAR Keyword. If both models cause FEAR the effect is cancelled out.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"},{"val":"FEAR","id":"kw_fear"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Defended Obstacle: "},{"tags":{"desc_type":"default"},"content":"Add -1 DICE if the target is in cover. A model is in cover if it is in contact with a terrain piece that is at least \xbd\\" high and as wide as its base, and the terrain piece lies between it and the attacking model.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Diving Charge: "},{"tags":{"desc_type":"default"},"content":"A model may attempt a Diving Charge against enemy models that are at least 3\\" below it. Take a Risky Success Roll for the model. If the roll is a Failure the model is taken Down, and a Falling Injury Roll must then be taken for the model. If the roll is a Success, you do not have to take a Falling Injury Roll for the model, and you can add +1 DICE to the next Melee Attack that the model makes.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"},{"val":"Risky Success","id":"kw_riskyaction"}]}]}]}]},{"id":"gr_corerulesinjuries","source":"core","tags":{"order":"core","sub_order":"reference","url_custom":"injuries-simple"},"contextdata":{},"name":"Injuries","item_index":5,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"To make an Injury Roll, roll two dice and add any +INJURY DICE or -INJURY DICE to the roll. +/-INJURY DICE work in the same way as +/-DICE but modify Injury Rolls instead of Success Rolls.","glossary":[{"val":"+INJURY DICE","id":"kw_plusdice"},{"val":"-INJURY DICE","id":"kw_minusdice"},{"val":"+/","id":"kw_plusdice"},{"val":"-DICE","id":"kw_minusdice"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Pick the two highest dice (or lowest if any -INJURY DICE were used). Any INJURY MODIFIERS that apply are then added to the roll, and the modified roll is looked up on the table below:","glossary":[{"val":"-INJURY DICE","id":"kw_minusdice"}]}]}],"sections":[{"title":"Injury Table","description":[{"tags":{"desc_type":"headless_table"},"content":"","subcontent":[{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"1 (or less)"},{"tags":{"desc_type":"table_item"},"content":"No Effect. The model is unharmed, and the injury has no effect."}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"2-6"},{"tags":{"desc_type":"table_item"},"content":"Minor Hit. Place 1 BLOOD MARKER next to the model.","glossary":[{"val":"1 BLOOD MARKER","id":"kw_bloodmarker"}]}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"7-8"},{"tags":{"desc_type":"table_item"},"content":"Down. Place 1 BLOOD MARKER next to the model and mark them as being Down. If the model is already Down, place 2 BLOOD MARKERS next to the model instead of 1.","glossary":[{"val":"1 BLOOD MARKER","id":"kw_bloodmarker"},{"val":"2 BLOOD MARKERS","id":"kw_bloodmarker"}]}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"9+"},{"tags":{"desc_type":"table_item"},"content":"Out of Action. The model has been seriously injured or killed and is removed from play."}]}]}]},{"title":"Injury Roll and Result Modifiers","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"The following modifiers are cumulative. The maximum -INJURY MODIFIER cannot be more than -3 in total.","glossary":[{"val":"INJURY MODIFIER","id":"kw_injurymodifier"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Blessing Markers: "},{"tags":{"desc_type":"default"},"content":" Add -1 INJURY DICE for each BLESSING MARKER that is spent.","glossary":[{"val":"BLESSING MARKER","id":"kw_blessingmarker"},{"val":"-1 INJURY DICE","id":"kw_minusdice"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Blood Markers: "},{"tags":{"desc_type":"default"},"content":"Add +1 INJURY DICE for each BLOOD MARKER that is spent.","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"},{"val":"+1 INJURY DICE","id":"kw_plusdice"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Critical Success: "},{"tags":{"desc_type":"default"},"content":"Add +1 INJURY DICE.","glossary":[{"val":"+1 INJURY DICE","id":"kw_plusdice"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Down: "},{"tags":{"desc_type":"default"},"content":"Add +1 INJURY DICE for a Melee Attack if the target is Down.","glossary":[{"val":"+1 INJURY DICE","id":"kw_plusdice"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Abilities or Keywords: "},{"tags":{"desc_type":"default"},"content":" Add any +/-INJURY DICE and/or any +/-INJURY MODIFIERS for abilities or Keywords that apply to the Injury Roll.","glossary":[{"val":"INJURY MODIFIERS","id":"kw_injurymodifier"},{"val":"INJURY DICE","id":"kw_injurydice"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Armour Characteristic: "},{"tags":{"desc_type":"default"},"content":"Add the -INJURY MODIFIER of the model\u2019s Armour Characteristic (if any).","glossary":[{"val":"-1 INJURY MODIFIER","id":"kw_injurymodifier"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Battlekit: "},{"tags":{"desc_type":"default"},"content":"Add the -INJURY MODIFIER for the model\u2019s Battlekit (e.g. Armour, Shield, etc.)","glossary":[{"val":"-1 INJURY MODIFIER","id":"kw_injurymodifier"}]}]}]},{"title":"","description":[{"tags":{"desc_type":"infobox-1-0"},"content":"","subcontent":[{"tags":{"desc_type":"infobox-title"},"content":"Falling"},{"tags":{"desc_type":"default"},"content":"When a model Jumps, Dives, or Falls 3\\" or more, there is a chance it will be injured. To see if this happens, make an Injury Roll for the model, and add +1 INJURY DICE for every 3\\" that the model fell.","glossary":[{"val":"+1 INJURY DICE","id":"kw_plusdice"}]}]}]},{"title":"Down Results","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"You can show that a model is Down by placing the model on its side. The following rules apply to a model that is Down:"}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"If a model is taken Down during its Activation, its Activation ends immediately.","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Add -1 DICE to any rolls you take for a model that is Down.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"}]},{"tags":{"desc_type":"default"},"content":"Add +1 INJURY DICE for a Melee Attack if the target is Down.","glossary":[{"val":"+1 INJURY DICE","id":"kw_plusdice"}]},{"tags":{"desc_type":"default"},"content":"Until the model stands back up, it cannot be moved for any reason unless it falls."},{"tags":{"desc_type":"default"},"content":"A model that is Down stands back up when it is next Activated. However, its Movement Characteristic is halved for the rest of the Activation (including the bonus for charging)."},{"tags":{"desc_type":"default"},"content":"A model that is within 1\\" of a ledge when it is taken down may Fall off the ledge. Take a Success Roll for the model. If the roll is a Success, the model is taken Down but does not Fall off the ledge. If the roll is a Failure, the model Falls from the nearest ledge and is then taken Down."}]}]}]}]},{"id":"gr_corerulesmarkers","source":"core","tags":{"order":"core","sub_order":"reference","url_custom":"markers"},"contextdata":{},"name":"Markers","item_index":6,"description":[],"sections":[{"title":"Blood Markers","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"During a battle your warriors can be wounded. Wounds are tracked with BLOOD MARKERS. A model cannot have more than 6 BLOOD MARKERS at any one time. We recommend using a red dice to keep track of the number of BLOOD MARKERS on a model.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Each time one of your models suffers a wound, place a BLOOD MARKER next to it. When you make a Success Roll for the model, your opponent may choose to spend one or more BLOOD MARKERS to add -1 DICE.","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"},{"val":"-1 DICE","id":"kw_minusdice"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"In addition, each time your opponent makes an Injury Roll for the model, they may choose to spend one or more BLOOD MARKERS to add +1 INJURY DICE, making a serious injury far more likely.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"},{"val":"+1 INJURY DICE","id":"kw_plusdice"}]}]}]},{"title":"Bloodbath Rolls","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"When you make an Injury Roll for an enemy model, you can spend 6 BLOOD MARKERS (or 3 BLOOD MARKERS if the target is Down) to convert the Injury Roll to a Bloodbath Roll. To make a Bloodbath Roll, roll 3 dice and add all three of them together, and then look up the roll on the Injury Table.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"}]}]}]},{"title":"Blessing Markers","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"BLESSING MARKERS are similar to BLOOD MARKERS, but specifically aid Success Rolls for the model.","glossary":[{"val":"BLESSING MARKERS","id":"kw_blessingmarker"},{"val":"BLOOD MARKERS","id":"kw_bloodmarker"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Each time one of your models receives a blessing, place a BLESSING MARKER next to it. When you take a Success Roll for the model, you may choose to spend one or more BLESSING MARKERS to add +1 DICE, and each time you make an Injury Roll for the model you may spend one or more BLESSING MARKERS to add -1 INJURY DICE.","glossary":[{"val":"BLESSING MARKER","id":"kw_blessingmarker"},{"val":"-1 INJURY DICE","id":"kw_minusdice"},{"val":"+1 DICE","id":"kw_plusdice"}]}]}]}]},{"id":"gr_quickmoralephase","source":"core","tags":{"order":"core","sub_order":"reference","url_custom":"morale-phase"},"contextdata":{},"name":"Morale Phase","item_index":7,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"In the Morale Phase, if half the models in your Warband are Down or Out of Action (rounded up), you must make a Success Roll. If the roll is a Success, your Warband carries on normally. If the roll is a Failure, your Warband becomes Shaken."}]}],"sections":[{"title":"Shaken Warbands","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"All Success Rolls made for a Shaken Warband are treated as Risky Success Rolls. In the Morale Phase at the end of the next turn you must make another Success Roll for your Warband, even if less than half its models are Down or Out of Action. If you succeed, your Warband is no longer Shaken (though it may become so again if you fail a Morale check in a future turn). However, if you fail your Warband flees, and you immediately lose the game!"}]}]},{"title":"Ending The Turn","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"After the Morale Phase the Turn ends and a new one begins."}]}]}]},{"id":"gr_comprehensivewhatyouneedtoplay","source":"core","tags":{"order":"comprehensive","sub_order":"introduction","url_custom":"what-you-need-to-play"},"contextdata":{},"name":"What You Need To Play","item_index":9,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"The Comprehensive Rules section of the Trench Crusade rulebook expands on the Core Rules. It explains the rules in greater depth, adds additional rules, and provides examples of how the rules function, but does not alter the Core Rules in any way. The Comprehensive Rules are followed by supplemental sections that explain how to create a Warband and Scenarios that will allow you to play a wide variety of different sorts of Trench Crusade games."}]}],"sections":[{"title":"Players","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"That\u2019s you and your opponent! The following rules are written assuming the game is played between two players. If you want to play games with more than two players, you can find scenarios on the Trench Crusade website at www.trenchcrusade.com"}]}]},{"title":"Warbands & Models","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Each player commands a Warband, which typically consists of 6-20 models (\u25b6 see Starting a Warband in Warbands of Trench Crusade). While there is no ironclad rule on which models you should use, we recommend you use the Trench Crusade range for obvious reasons. However, if you prefer to use other models, do not worry \u2013 Witchburners will not be dispatched to cleanse you for your lack of purity!"}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Friendly & Enemy Models: "},{"tags":{"desc_type":"default"},"content":"The models in your Warband are referred to as \u201cfriendly models\u201d in the rules, while those in your opponent\u2019s Warband are referred to as \u201cenemy models\u201d. If a rule that applies to a model (or to a piece of Battlekit carried by a model) says \u201cyou\u201d can do something with it, it refers to the player commanding the Warband that the model is part of. Similarly, you \u201ctake a roll\u201d for your own models, and \u201cmake a roll\u201d against your opponent\u2019s models."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Profiles: "},{"tags":{"desc_type":"default"},"content":"Each model in your Warband has a Profile which describes its effectiveness in combat and the Weapons it is armed with."}]}]},{"title":"Battlefield","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"You will also need a gaming surface to play on, which is referred to as \u201cthe Battlefield\u201d in the following rules. Most games can be played on a typical kitchen table, as long as it is at least 30\\" wide. Some games will require a larger battlefield: 36\\" x 36\\" or 48\\" x 48\\" is the ideal size for these. You can find more information on how to set up the Battlefield and when you may need more space in the Scenarios section"}]}]},{"title":"Terrain","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Terrain is also necessary, and the more you have, the better! Trench Crusade is a game of position and tactics, so different types of elevation, cover, and varied terrain pieces, will all help to enhance your games. You can find rules for setting up the terrain for a game in the Terrain section"}]}]},{"title":"Tape Measure Or Ruler","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"To measure distances, you will need a tape measure or ruler. Trench Crusade uses the Imperial measurement system, meaning all measurements are in inches, so make sure your measuring tool reflects this."}]}]},{"title":"Dice (D6s and D3s)","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Each player will need several 6-sided dice, referred to as \u201cD6s\u201d in the following rules. They are used to determine if a task being carried out by a model, like making an attack or leaping across a gap between two buildings, is carried out successfully."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"D3 Rolls: "},{"tags":{"desc_type":"default"},"content":"Occasionally, you will be asked to roll a \u201cD3\u201d. To do so, roll a D6 and halve the result, rounding up: a 1 or 2 = 1, a 3 or 4 = 2, and a 5 or 6 = 3."}]}]},{"title":"Scenario","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Finally, you will need to pick a Scenario for the game you are about to play. The Scenario tells you how to set up the Terrain for the game, where to deploy your Warbands, how many turns the game will last, and how the winner of the game is determined. If this is your first game, we recommend using Scenario 1: Claim No Man\u2019s Land."}]}]}]},{"id":"gr_successrolls","source":"core","tags":{"order":"comprehensive","sub_order":"core_concepts","url_custom":"success-rolls"},"contextdata":{},"name":"Success Rolls","item_index":11,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"During a game of Trench Crusade, you will often have to take a Success Roll for a model and look up the result on the Success Roll table to see if the model has carried out a task successfully. For example, if you want a model to leap across a gap, you will need to take a Success Roll for the model to see if they make the jump. Similarly, when a model makes a Ranged Attack, you must take a Success Roll for the model to see if the attack hits the target, and so on."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"The rules say when you have to take a Success Roll, and what the result of the Success Roll means. For example, if the Success Roll for a Ranged Attack is a Failure, the attack misses the target. If it is a Success, the attack hits and you make an Injury Roll for the target. If it is a Critical Success, the attack hits and you make an Injury Roll for the target with +1 INJURY DICE.","glossary":[{"val":"+1 INJURY DICE","id":"kw_plusdice"}]}]}],"sections":[{"title":"Success Roll Procedure","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"To take a Success Roll for a model, carry out the following steps:"}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Take 2 D6.","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Add any +DICE or -DICE.","glossary":[{"val":"+DICE","id":"kw_plusdice"},{"val":"-DICE","id":"kw_minusdice"}]},{"tags":{"desc_type":"default"},"content":"Roll all of the dice.","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Pick the 2 highest dice if any +DICE were added to the roll, or the 2 lowest if any -DICE were added to the roll.","glossary":[{"val":"+DICE","id":"kw_plusdice"},{"val":"-DICE","id":"kw_minusdice"}]},{"tags":{"desc_type":"default"},"content":"Add the 2 dice together and then look up the roll on the Success Roll Table.","subcontent":[]}]}]}]},{"title":"Success Roll Table","description":[{"tags":{"desc_type":"headless_table"},"content":"","subcontent":[{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"2-6"},{"tags":{"desc_type":"table_item"},"content":"Failure"}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"7-11"},{"tags":{"desc_type":"table_item"},"content":"Success"}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"12"},{"tags":{"desc_type":"table_item"},"content":"Critical Success."}]}]}]},{"title":"Risky Success Rolls","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Sometimes you will be called on to take a Risky Success Roll for a model. A Risky Success Roll is taken in exactly the same way as a normal Success Roll. However, if the roll is failed the model\u2019s Activation immediately ends. If a rule applies to a Success Roll, then it applies in the same way to a Risky Success Roll. If a model takes a Risky Success Roll as part of an ACTION outside of that model\u2019s Activation and the roll is a Failure, that ACTION immediately ends.","glossary":[{"val":"Risky Success","id":"kw_riskyaction"}]}]}]}]},{"id":"gr_plusminusdice","source":"core","tags":{"order":"comprehensive","sub_order":"core_concepts","url_custom":"plus-minus-dice"},"contextdata":{},"name":"+/- Dice","item_index":12,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"The rules often require you to add extra dice to a roll. These are shown in the format \u201c+1 DICE\u201d or \u201c-1 DICE\u201d (for example, shooting from elevated positions adds +1 DICE to Ranged Attacks against enemies).","glossary":[{"val":"+1 DICE","id":"kw_plusdice"},{"val":"-1 DICE","id":"kw_minusdice"}]}]}],"sections":[{"title":"+DICE","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"For each +DICE, add 1 dice to the Success Roll. Then roll all the dice and pick the 2 highest rolls. For example, +1 DICE means you roll 3 dice and pick the 2 highest. If +2 DICE were added, you would roll 4 dice and pick the 2 highest, and so on.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"},{"val":"+DICE","id":"kw_plusdice"},{"val":"+2 DICE","id":"kw_plusdice"}]}]}]},{"title":"-DICE","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"The -DICE works in reverse, so for each -1 DICE, add 1 dice to the Success Roll and pick the 2 lowest rolls. For example, -1 DICE means you roll 3 dice and pick the 2 lowest. If -2 DICE were added, you would roll 4 dice and pick the 2 lowest, and so on.","glossary":[{"val":"-DICE","id":"kw_minusdice"},{"val":"-1 DICE","id":"kw_minusdice"},{"val":"-2 DICE","id":"kw_minusdice"}]}]}]},{"title":"Gameplay Example","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"A Success Roll is taken by a Trench Pilgrim to see if a Ranged Attack they are making with their Bolt-Action Rifle hits a Heretic model. The Heretic is in Cover, which adds -1 DICE to the Success Rolls for the Trench Pilgrim\u2019s Ranged Attack. No other modifiers apply to the attack. 3 dice are rolled for the attack, and come up 5, 5 and 1. The two lowest rolls are picked (a 5 and the 1) giving a Success Roll of 6. The Success Roll has failed and so the Trench Pilgrim\u2019s shot misses!","glossary":[{"val":"-1 DICE","id":"kw_minusdice"}]}]}]},{"title":"Combing +DICE and -DICe","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"If both +DICE and -DICE are added to the same Success Roll, remove pairs of +DICE and -DICE until only one type is remaining. For example, if two +DICE and one -DICE were added to the same Success Roll, one +DICE would cancel out the -DICE, leaving a single +DICE to modify the roll.","glossary":[{"val":"-DICE","id":"kw_minusdice"},{"val":"+DICE","id":"kw_plusdice"}]}]}]},{"title":"Injury Dice","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"The rules will sometimes refer to +/- INJURY DICE. These work in the same way as +/- DICE except that they add dice to an Injury Roll rather than a Success Roll.","glossary":[{"val":"+/","id":"kw_plusdice"},{"val":"-","id":"kw_minusdice"}]}]}]},{"title":"Dice & Injury Dice","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Note that if a model or piece of Battlekit has the +/- DICE Keyword, then the Keyword only applies to Success Rolls, not to Injury Rolls. By the same token, if a model or piece of Battlekit has the +/- INJURY DICE Keyword, then the Keyword only applies to Injury Rolls and not to Success Rolls.","glossary":[{"val":"+/","id":"kw_plusdice"},{"val":"-","id":"kw_minusdice"}]}]}]}]},{"id":"gr_bloodmarkers","source":"core","tags":{"order":"comprehensive","sub_order":"core_concepts","url_custom":"blood-markers"},"contextdata":{},"name":"Blood Markers","item_index":13,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"During a battle, your warriors can be wounded due to enemy attacks, the use of supernatural powers, falling from great heights, and so on. In Trench Crusade, injuries are represented using BLOOD MARKERS. In addition to physical injuries, BLOOD MARKERS can represent exhaustion, concussion, shellshock, mental strain, and so on.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"}]}]}],"sections":[{"title":"Placing Blood Markers","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Each time one of your models suffers a wound, place a BLOOD MARKER next to it. A model cannot have more than 6 BLOOD MARKERS at any time. When a model gets to this point, ignore any instructions to place more BLOOD MARKERS next to it until there are less than 6.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"}]}]}]},{"title":"Spending Blood Markers","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"MARKERS, your opponent can declare that they are spending one or more of them, removing the model\u2019s BLOOD MARKERS as they are spent. For each BLOOD MARKER that is spent, add -1 DICE to the Success Roll. For example, if you were making a Success Roll for a model that had 3 BLOOD MARKERS, then the opposing player could choose to spend 1, 2, or all 3 of the BLOOD MARKERS to add -1, -2, or -3 DICE to the Success Roll.","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"},{"val":"-1 DICE","id":"kw_minusdice"},{"val":"-3 DICE","id":"kw_minusdice"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Alternatively, when your opponent makes an Injury Roll for a model from your Warband that has BLOOD MARKERS, they can declare that they are spending one or more of them, removing the model\u2019s BLOOD MARKERS as they are spent. For each BLOOD MARKER that is spent, add +1 INJURY DICE to the Injury Roll, making a serious injury far more likely.","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"},{"val":"+1 INJURY DICE","id":"kw_plusdice"}]}]}]},{"title":"Gameplay Example","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"A Trench Pilgrim has sustained a wound during the battle and has a BLOOD MARKER. A Heretic Trooper shoots at the Pilgrim with a bolt action rifle, rolls an 8 and hits! The Heretic player decides to use the BLOOD MARKER to make the shot more likely to injure. The Heretic player rolls 3D6 (2D6 +1 INJURY DICE from the spent marker) and consults the Injury Chart. The roll is 5, 1 and 4. Since one +1 INJURY DICE was used, the player picks the two highest numbers which total 9. The Pilgrim is taken out of action!","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"},{"val":"+1 INJURY DICE","id":"kw_plusdice"}]}]}]}]},{"id":"gr_blessingmarkers","source":"core","tags":{"order":"comprehensive","sub_order":"core_concepts","url_custom":"blessing-markers"},"contextdata":{},"name":"Blessing Markers","item_index":14,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"BLESSING MARKERS work in a similar way to BLOOD MARKERS. Supernatural powers, holy relics, and other sources may grant these to a model.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"},{"val":"BLESSING MARKERS","id":"kw_blessingmarker"}]}]}],"sections":[{"title":"Placing Blessing Markers","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Each time one of your models receives a blessing, place a BLESSING MARKER next to it. A model cannot have more than 6 BLESSING MARKERS at any time. When a model gets to this point, ignore any instructions to place more BLESSING MARKERS next to it until there are less than 6.","glossary":[{"val":"BLESSING MARKER","id":"kw_blessingmarker"}]}]}]},{"title":"Spending Blessing Markers","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Every time you take a Success Roll for a friendly model that has BLESSING MARKERS, you can declare that you are spending one or more of them, removing the model\u2019s BLESSING MARKERS as they are spent. For each BLESSING MARKERS that is spent, add +1 DICE to the Success Roll.","glossary":[{"val":"BLESSING MARKERS","id":"kw_blessingmarker"},{"val":"+1 DICE","id":"kw_plusdice"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Alternatively, when your opponent makes an Injury Roll for a model from your Warband that has BLESSING MARKERS, you can declare that you are spending one or more of them, removing the model\u2019s BLESSING MARKERS as they are spent. For each BLESSING MARKERS that is spent, add -1 INJURY DICE to the Injury Roll, making a serious injury far less likely.","glossary":[{"val":"BLESSING MARKERS","id":"kw_blessingmarker"},{"val":"-1 INJURY DICE","id":"kw_minusdice"}]}]}]}]},{"id":"gr_trackingmarkers","source":"core","tags":{"order":"comprehensive","sub_order":"core_concepts","url_custom":"tracking-markers"},"contextdata":{},"name":"Tracking Markers","item_index":15,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"You can keep track of the number of BLOOD MARKERS or BLESSING MARKERS a model has by placing a suitably coloured D6 next to the model. Use the pip number on the D6 to indicate the number of MARKERS that have been added to the model.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"},{"val":"BLESSING MARKERS","id":"kw_blessingmarker"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Alternatively, you can keep track of them by using cardboard counters or wooden cubes. For example, you could use a red dice or red cubes for keeping track of BLOOD MARKERS, and a yellow dice or yellow cubes for keeping track of BLESSING MARKERS.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"},{"val":"BLESSING MARKERS","id":"kw_blessingmarker"}]}]}],"sections":[]},{"id":"gr_otherruleprinciples","source":"core","tags":{"order":"comprehensive","sub_order":"core_concepts","url_custom":"other-rules-principles"},"contextdata":{},"name":"Other Rule Principles","item_index":16,"description":[],"sections":[{"title":"Fractions","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"In all cases where the rules refer to fractions, retain any fractions if the value being modified is a distance, such as the range of a Weapon or the move of a model. In all other cases, round up to the nearest whole number. For example, if your Warband has 9 models and the rule calls for something to affect half of the entire force, round 4.5 up to 5. On the other hand, if a model with a Movement characteristic of 9\\" had its movement halved, its Move would be halved to 4.5\\"."}]}]},{"title":"Measuring Distances","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"When measuring to or from a model or terrain piece, always measure from its base. If the model or terrain piece doesn\u2019t have a base, measure to the nearest part of the model. Something is within a certain distance of another thing, if the distance between the nearest points of the two things is equal to or less than the stated distance."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"In Contact: "},{"tags":{"desc_type":"default"},"content":"Two models are in contact if any part of the models and/or their bases are in contact. A model is in contact with a terrain piece if any part of the model and/or its base is in contact with the terrain piece."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Within: "},{"tags":{"desc_type":"default"},"content":"Something is within a certain distance of another thing if the distance between the nearest points of the two things is equal to or less than the stated distance. For example, if the distance between a model and a piece of terrain was 12\\", then the model and the piece of terrain are within 12\\" of each other."}]}]},{"title":"Line of Sight","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"You will often need to check to see if a model has a \u201cLine of Sight\u201d to another model or terrain piece. If you are unsure whether a model has a Line of Sight to a target, stoop down and take a look from behind the attacking model and check if it can see any part of the target model (do not count the target\u2019s base, its hands or feet, or anything that is carried by or attached to the target such as a weapon or banner), or any part of a target terrain piece. Models can see all around (i.e. 360\xb0) and they may be pivoted to face any direction before the Line of Sight is checked."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Partial Line of Sight: "},{"tags":{"desc_type":"default"},"content":"A model that has a Line of Sight to a model is said to have a partial Line of Sight if it can draw a Line of Sight to part of the target model but not all of it."}]}]},{"title":"Points on the Battlefield or Terrain Pieces","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"You may also need to check Line of Sight to a point on the battlefield or on a terrain piece. When this is the case, the point is considered to be 1mm across and 1mm high, and you have a Line of Sight to it if you can see any part of it."}]}]},{"title":"Model Accuracy","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"When it comes to ensuring the models in your game match their stated size and actual equipment, weapons, and armour, we recommend the following maxim: \u201cBe strict with yourself but lenient with others\u201d."}]}]},{"title":"Model Placement","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"When you set up or move a model, it cannot be set up with its base overlapping Impassable terrain or the base of another model. You can set up a model so that part of its base is on the battlefield or in terrain and the rest of its base is \u201cin the air\u201d, as long as more than half of the model\u2019s base is on the battlefield or in terrain. With your opponent\u2019s permission you can place it in a safe location nearby so that there is no risk of it falling over and being damaged (it will still count as being at the location for all other purposes)."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Deployment and Redeployment: "},{"tags":{"desc_type":"default"},"content":"Some rules may ask you to deploy or redeploy a model. When you do so, set up the model as described above. Redeploying a model is not treated as a move."}]}]},{"title":"Pre-Measuring","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Unless the rules specifically tell you otherwise, you are allowed to measure distances at any time. For example, you can measure to see if you are in range for shooting, charging, and so on."}]}]},{"title":"Re-Rolls","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Some rules refer to re-rolls. To make a re-roll, roll the dice used for the roll again. You cannot re-roll a dice more than once. If the rules allow you to re-roll an XD6 roll (i.e. 2D6, 3D6 etc), you must re-roll all of the dice used for the roll."}]}]},{"title":"Rolling Off","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Sometimes a rule may require the players to \u201croll-off \u201d. To roll-off, each player rolls a D6, and whoever rolls highest wins. You cannot re-roll or modify the dice in a roll-off unless the roll is a tie, in which case the players must take the roll-off again."}]}]},{"title":"Profiles","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Every model has a Profile that defines its effectiveness in the game. In addition, Battlekit Profiles cover the Weapons, Armour, and Equipment that a model can carry. Below, you will find examples of a model Profile and a Battlekit Profile. A detailed explanation of the model Profile is provided in the Starting a Warband , and the Battlekit Profile is explained in the Battlekit section."}]}]}]},{"id":"gr_gameturns","source":"core","tags":{"order":"comprehensive","sub_order":"game_turns","url_custom":"game-turns"},"contextdata":{},"name":"Game Turns","item_index":17,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"A game of Trench Crusade is divided into Turns. The scenario being used for the game will explain how many Turns the game will last and how the winner is determined once the game is over."}]}],"sections":[{"title":"The Sequence of Play","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"A Trench Crusade Turn is split into the following phases:"}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Initiative Phase: "},{"tags":{"desc_type":"default"},"content":"Determine which player has the Initiative and then carry out any \u201cstart of turn\u201d tasks."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Activation Phase: "},{"tags":{"desc_type":"default"},"content":"The players alternate Activating their models, one at a time, until all of the models in both Warbands have been Activated once each."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Morale Phase: "},{"tags":{"desc_type":"default"},"content":"A player must take a Morale Check if at least half their models are Down or Out of Action. A player loses the game if they fail a Morale Check two Turns in a row. Then the players carry out end of turn tasks and a new turn begins."}]}]}]}]}]},{"id":"gr_initiativephase","source":"core","tags":{"order":"comprehensive","sub_order":"game_turns","url_custom":"initiative-phase"},"contextdata":{},"name":"Initiative Phase","item_index":18,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"At the beginning of each Turn, you must determine which player has the Initiative for the turn and then carry out any start of turn tasks. The player with the Initiative chooses which player will carry out the first Activation in the Activation Phase."}]}],"sections":[{"title":"Determining The Initiative","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"To determine which player has the Initiative, count up the number of models in each Warband that are currently on the battlefield. Do not count models that are Down or Out of Action when determining which player has the least models. The player with the fewest number of models has the Initiative for the rest of the Turn. If both players have the same number of models, they roll-off and the winner has the Initiative for the rest of the Turn."}]}]},{"title":"Start Of Turn Tasks","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Some rules require the players to do things at \u201cthe start of the turn\u201d. These are referred to as start of turn tasks. If more than one start of turn task needs to be carried out, the player who has the Initiative determines the order in which they are carried out."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Simultaneous Activities: "},{"tags":{"desc_type":"default"},"content":"If two things happen at the same time, the player who has the Initiative determines the order in which they are performed."}]}]}]},{"id":"gr_activationphase","source":"core","tags":{"order":"comprehensive","sub_order":"game_turns","url_custom":"activation-phase-comprehensive"},"contextdata":{},"name":"Activation Phase","item_index":19,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"During the Activation Phase, the players alternate Activating their models one at a time until both players have Activated all their models once each. The player with the Initiative chooses which player Activates a model first."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"rulesbanner","url":"/compendium/comprehensive-rules/actions"},"content":"List of ACTIONS","subcontent":[]}]}],"sections":[{"title":"Carrying Out Activations","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"When it is your turn to Activate a model, you can choose to Activate any model in your Warband that has not yet been Activated. You can then take ACTIONS with the Activated model as explained below.","glossary":[{"val":"ACTIONS","id":"kw_action"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"When your model\u2019s Activation is over, your opponent can Activate one of their models. If one player runs out of models to Activate, their opponent Activates their remaining models one after the other until all of their models have been Activated. Play then proceeds to the Morale Phase."}]}]},{"title":"Showing Activations","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"You may wish to indicate that a model has been Activated by placing a small marker beside it. In the heat of battle, it is all too easy to forget if a model has had an Activation or not!"}]}]}]},{"id":"gr_actions","source":"core","tags":{"order":"comprehensive","sub_order":"gameplay","url_custom":"actions"},"contextdata":{},"name":"Actions","item_index":20,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"When you Activate a model, you can take one or more ACTIONS with the model. You can take the ACTIONS in any order you choose. However, each type of ACTION can only be taken once per Activation unless otherwise stated in the rules. For example, you could Shoot, then Move, and then Dash with a model during its Activation, or Dash, then Charge, and then Fight, but you could not Shoot, then Dash, and then Shoot again.","glossary":[{"val":"ACTION","id":"kw_action"}]}]}],"sections":[{"title":"Common Actions","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Common ACTIONS that all models can take are listed below. In addition to these, some models can take ACTIONS that are described in their Warband Entry or in the special rules for a piece of Battlekit or a Campaign Skill that the model has. These ACTIONS can be taken when the model is Activated in addition to any of the common ACTIONS listed below, but each can still only be taken once per Activation.","glossary":[{"val":"ACTIONS","id":"kw_action"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Move or Charge or Retreat: "},{"tags":{"desc_type":"default"},"content":"You can take one of the following ACTIONS with a model:","glossary":[{"val":"ACTIONS","id":"kw_action"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Move: "},{"tags":{"desc_type":"default"},"content":"You can move your model a number of inches up to its Movement Characteristic in any direction. A Move ACTION cannot be used to move a model within 1\u201d of an enemy model (you must use a Charge ACTION instead)."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Charge: "},{"tags":{"desc_type":"default"},"content":"Pick an enemy model that is in the Line of Sight of your model and within 12\\" of it as the target of the charge. Then roll a dice, add the roll to your model\u2019s Movement Characteristic, and move your model towards the target. You cannot take a Charge ACTION with a model that is already within 1\\" of an enemy model. A model cannot take a Shoot or Fight ACTION and a Charge ACTION in the same Activation, unless it uses a Weapon that has the ASSAULT keyword.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"ASSAULT","id":"kw_assault"}]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Retreat: "},{"tags":{"desc_type":"default"},"content":"A Retreat is a special type of move that is used when a model is within 1\\" of an enemy model and wishes to move away."}]}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Dash: "},{"tags":{"desc_type":"default"},"content":"You can move your model a number of inches up to its Movement Characteristic in any direction, but you must take a Risky Success Roll for the model first. If you Succeed you can move with the model (it cannot charge or retreat); if you fail, the model\u2019s Activation ends. A Dash can be carried out in addition to, and either before or after a Move, Charge, or Retreat ACTION. For example, a model could Dash, then Shoot, and then Move.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"Risky Success","id":"kw_riskyaction"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Shoot: "},{"tags":{"desc_type":"default"},"content":"This ACTION allows you to make a Ranged Attack with the model.","glossary":[{"val":"ACTION","id":"kw_action"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Fight: "},{"tags":{"desc_type":"default"},"content":"This ACTION allows you to make a Melee Attack with the model.","glossary":[{"val":"ACTION","id":"kw_action"}]}]}]}]},{"id":"gr_movement","source":"core","tags":{"order":"comprehensive","sub_order":"gameplay","url_custom":"movement"},"contextdata":{},"name":"Movement","item_index":21,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"A Move, Charge, Retreat, or Dash ACTION allows you to pick up one of your models and move it across the battlefield. The move is carried out in the same way for a Move or Dash ACTION, except that you must take a Risky Success Roll before moving the model when you take a Dash ACTION. Charge and retreat moves are carried out in a similar way to a normal move, but in both cases additional rules apply to the way that the move is carried out.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"Risky Success","id":"kw_riskyaction"}]}]}],"sections":[{"title":"Move and move","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Note that when we say Move with a capital \u201cM\u201d we are referring to a Move ACTION. When we say move with a lowercase \u201cm\u201d we are referring to the process of moving your model.","glossary":[{"val":"ACTION","id":"kw_action"}]}]}]},{"title":"Moves","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"To move a model, pick it up and move it along a path across the battlefield or terrain. The length of the path cannot be longer than the model\u2019s Movement Characteristic unless otherwise specified. You can move the model in any direction or combination of directions, and you can pivot the model freely to face in any direction as you move it, as long as the path along which it travels is not longer than its Movement Characteristic. In addition, when you move a model, the following rules apply:"}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"A model can only move across a friendly model if it has enough movement to move past them entirely."},{"tags":{"desc_type":"default"},"content":"A model can only move off the Battlefield if a rule states explicitly that it is allowed to do so."},{"tags":{"desc_type":"default"},"content":"A model can only move within 1\\" of enemy models if it charges."},{"tags":{"desc_type":"default"},"content":"A model that starts a move within 1\\" of enemy models can only move if it remains within 1\\" of every enemy model that it started within 1\\" of throughout the entire move or it is retreating."},{"tags":{"desc_type":"default"},"content":"At the end of the move, no part of the model\u2019s base can finish further from its starting position than a number of inches equal to its Movement Characteristic."}]}]}]},{"title":"Charging","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Taking a Charge ACTION with a model allows you to make a special type of move, called a charge, that is used to bring a model within 1\u201d of an enemy model.","glossary":[{"val":"ACTION","id":"kw_action"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Declare Charge: "},{"tags":{"desc_type":"default"},"content":"After you take a Charge ACTION with a model, you must pick an enemy model that is visible to your model and within 12\\" of it as the target of the charge.","glossary":[{"val":"ACTION","id":"kw_action"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Interposing Enemy Models: "},{"tags":{"desc_type":"default"},"content":"You cannot choose an enemy model as the target of a charge if the route it would have to take to reach the target would pass within 1\\" of a different enemy model before the charging model was within 1\\" of its target. In such a situation, you must choose the interposing enemy model as the target of the charge, or not make the charge at all."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Charge Bonus: "},{"tags":{"desc_type":"default"},"content":"After you have selected the target, roll a D6 and add the roll to the charging model\u2019s Movement Characteristic, up to a maximum Movement Characteristic of 12\\". The D6 roll is referred to as the model\u2019s Charge Bonus."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Charge Moves: "},{"tags":{"desc_type":"default"},"content":"After determining the Charge Bonus, move the charging model toward the target. When you make a charge move with a model, the following additional rules apply to the move:"}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"The model must move by the shortest route available that takes it directly towards the target."},{"tags":{"desc_type":"default"},"content":"Climbing, Jumping, Jumping Down or moving through Dangerous terrain is optional during a charge, as long as the route you use to avoid the obstacles is as short as possible."},{"tags":{"desc_type":"default"},"content":"The model must stop as soon as it moves into contact with the target, unless carrying on with its move allows it to stay in contact with the target and finish within 1\u201d of any other enemy models."}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"If after completing the move the charging model is within 1\\" of the target, the charging model is considered to have successfully completed the charge. If the charging model does not reach its target, the charge is considered to have failed, but the charging model must remain where it was after the charge move was completed. Note that completing a charge does not automatically allow you to Fight \u2013 to make a Melee Attack after a charge you will need to take a Fight ACTION with the model, assuming it is allowed to do so.","glossary":[{"val":"ACTION","id":"kw_action"}]}]}]},{"title":"Retreating","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Taking a Retreat ACTION with a model allows you to make a special type of move, called a retreat, that is used when a model is within 1\u201d of an enemy model and wishes to move away. Before you make, or are forced to make, a retreat move with a model, your opponent can take a Fight ACTION with each enemy model that is within 1\u201d of the retreating model. When a model attacks a retreating enemy model, it can only make 1 melee attack with 1 weapon (it cannot use the Multiple Melee Attacks rule, but if the attacking weapon has the CLEAVE (X) Keyword it will still apply). After carrying out the attack(s) you can move the retreating model as long as it did not suffer a Down or Out of Action result. A retreating model must end its retreat move more than 1\u201d away from all enemy models. If this is impossible, it cannot move at all. Note that redeploying a model does not count as a retreat move.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"CLEAVE","id":"kw_cleave"}]}]}]}]},{"id":"gr_movingoverterrain","source":"core","tags":{"order":"comprehensive","sub_order":"gameplay","url_custom":"moving-over-terrain"},"contextdata":{},"name":"Moving Over Terrain","item_index":22,"description":[],"sections":[{"title":"","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"At the start of the game of Trench Crusade, the players must agree on what type of terrain each terrain piece represents. There are four types of terrain in Trench Crusade: Open, Difficult, Dangerous, and Impassable. Terrain can be both Difficult and Dangerous. The players will also need to agree on the boundary of each terrain piece so that they will be easily able to tell if a model has moved into it, and decide which surfaces on a terrain piece can be climbed or jumped from."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Open: "},{"tags":{"desc_type":"default"},"content":"Open terrain includes any area where there is nothing to impede a model, and is the most common terrain in Trench Crusade. Models can be moved freely across Open terrain."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Difficult: "},{"tags":{"desc_type":"default"},"content":"Difficult terrain includes rock beds, swamps, craters and so on, and has the DIFFICULT TERRAIN Keyword.","glossary":[{"val":"DIFFICULT TERRAIN","id":"kw_difficultterrain"}]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Dangerous: "},{"tags":{"desc_type":"default"},"content":"Dangerous terrain includes barbed wire, minefields, raging fires, areas covered in poisonous gas, and so on, and has the DANGEROUS TERRAIN Keyword.","glossary":[{"val":"DANGEROUS TERRAIN","id":"kw_dangerousterrain"}]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Impassable: "},{"tags":{"desc_type":"default"},"content":"Impassable terrain includes cliffs, large monuments on which there is nowhere for a model to stand, pools of magma, and so on, and has the IMPASSABLE TERRAIN Keyword.","glossary":[{"val":"IMPASSABLE TERRAIN","id":"kw_impassableterrain"}]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Cover: "},{"tags":{"desc_type":"default"},"content":"A model has the COVER Keyword from another model if it is on or in contact with a terrain piece that is at least \xbd\u201d high and at least as wide as its base, and the terrain piece lies between it and the other model in such a way that it partially blocks the Line of Sight between the two model,","glossary":[{"val":"COVER","id":"kw_cover"}]}]}]}]}]},{"title":"Moving Onto Terrain","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"A model is said to be \u201cin\u201d a piece of terrain if more than half of its base is within the boundary of that piece of terrain."}]}]}]},{"id":"gr_climbingandjumping","source":"core","tags":{"order":"comprehensive","sub_order":"gameplay","url_custom":"climbing-and-jumping"},"contextdata":{},"name":"Climbing & Jumping","item_index":23,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Terrain up to 1\u201d high, Trench Walls up to 3\\" high - and ladders, ramps, ropes, stairs, and other devices meant for climbing - are treated as Open terrain. In addition, a model can Climb up sheer surfaces and Jump over gaps as described below."}]}],"sections":[{"title":"Climbing Sheer Surfaces","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"If one of your models moves within 1\\" of a sheer surface like a wall, you can say it will attempt to Climb up or down it. To do so the model must have enough movement to clear the entire surface it is climbing (i.e. it cannot finish the move halfway up a wall). You must take a Risky Success Roll for the model when it reaches the sheer surface. If the Risky Success Roll is a Success, you can move the model directly up or down so that they are standing at the top or bottom of the sheer surface, and can carry on with its move if it has any movement remaining. If the roll is a Failure, you cannot move the model any further and its Activation ends.","glossary":[{"val":"Risky Success","id":"kw_riskyaction"}]}]}]},{"title":"Jumping Over Gaps","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"You may declare that a model is going to attempt to Jump as part of its move, which allows it to cross a gap that is no wider than half its Movement Characteristic, as long the move up to the gap and the distance that is to be Jumped does not exceed the distance the model can be moved. For example, a model with a Movement Characteristic of 6\\" could move 3\\" and then try to Jump over a gap up to 3\\" wide. Move the model up to the gap and then take a Risky Success Roll for the model. If the roll is a Success, you can move the model to the other side of the gap and carry on with its move if it has any movement remaining. If the roll is a Failure, the model Falls as described below, and its Activation ends (your opponent can choose which side of the gap it Falls from).","glossary":[{"val":"Risky Success","id":"kw_riskyaction"}]}]}]},{"title":"Jumping Between Ledges of Uneven Height","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"If the gap that a model is Jumping across is higher on the side it is Jumping from, apply the rules for Jumping Down if the model Jumps the gap. If the gap is higher on the side that it is Jumping to, add the extra height to the horizontal distance of the Jump. (This may make the Jump impossible if the modified distance is greater than the distance the model can be moved.)"}]}]},{"title":"Jumping Down","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"When you move a model, it can Jump Down as part of the move. Jumping Down does not affect the distance you can move the model (the Jump Down is \u201cfree\u201d). However, if a model Jumps Down 3\\" or more, it counts as Falling and you must make an Injury Roll for the model before carrying on with its movement."}]}]},{"title":"Falling","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"When a model Falls, it is moved from its current position to the first flat surface that it can occupy directly beneath the position that it fell from. If it Falls 3\\" or more, you must make an Injury Roll for the model to see if it was harmed. Add +1 INJURY DICE to the roll for every 3\\" it Falls (for example, a Fall of 3-5\\" would be rolled with +1 DICE, a Fall of 6-8\\" with +2 DICE, and so on).","glossary":[{"val":"+1 INJURY DICE","id":"kw_plusdice"},{"val":"+1 DICE","id":"kw_plusdice"},{"val":"+2 DICE","id":"kw_plusdice"}]}]}]}]},{"id":"gr_rangedattacks","source":"core","tags":{"order":"comprehensive","sub_order":"gameplay","url_custom":"ranged-attacks"},"contextdata":{},"name":"Ranged Attacks","item_index":24,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"In order to make a Ranged Attack, a model must have a Ranged Weapon and cannot be within 1\\" of an enemy model. A model cannot use a Shoot ACTION to make a Ranged Attack if it has used a Charge or Fight ACTION in the same Activation, unless it uses a Ranged Weapon that has the ASSAULT keyword.","glossary":[{"val":"ASSAULT","id":"kw_assault"}]}]}],"sections":[{"title":"Ranged Attack Sequence","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"A Ranged Attack is made using the following sequence."}]},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Choose Weapon"},{"tags":{"desc_type":"default"},"content":"Pick Target"},{"tags":{"desc_type":"default"},"content":"Check Line of Sight"},{"tags":{"desc_type":"default"},"content":"Check Range"},{"tags":{"desc_type":"default"},"content":"Determine Modifiers"},{"tags":{"desc_type":"default"},"content":"Take a Success Roll for the attacking model."}]}]},{"title":"Choosing The Weapon","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"When you make a Ranged Attack with a model you must first pick a Ranged Weapon that the model is armed with to make the attack. The Weapons a model is armed with can be found on its Profile."}]}]},{"title":"Picking The Target","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"When a model makes a Ranged Attack you must pick one enemy model to be the target of the attack. The target must be in the line of sight of the attacking model and within range of the Weapon being used to make the attack."}]}]},{"title":"Measuring The Range","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"The target is in range if the distance from the closest point of the attacking model\u2019s base to the closest point of the target model\u2019s base is less than or equal to the range of the Weapon being used. You can find the range of each Weapon on its Weapon Profile."}]}]},{"title":"Short Range & Long Range","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"If the distance between an attacking model and the target is less than or equal to half of the Weapon\u2019s range, then the attack is being made at Short Range. If the distance between an attacking model and the target is greater than half of the Weapon\u2019s range, then the attack is being made at Long Range. Add -1 DICE to the roll for a Ranged Attack that is being made at Long Range. Some Weapons and Skills may affect attacks made at either Short or Long Range, as stated in the Weapon Profile or Skill Description.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"}]}]}]},{"title":"Determine Ranged Attack Modifiers","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Next you must determine if there are any modifiers that will affect the attack. Modifiers add +/- DICE to the Success Roll.","glossary":[{"val":"- DICE","id":"kw_minusdice"},{"val":"+/","id":"kw_plusdice"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Elevated Position (+1 DICE): ","glossary":[{"val":"+1 DICE","id":"kw_plusdice"}]},{"tags":{"desc_type":"default"},"content":"Add +1 DICE to the roll if the attacking model is in a position at least than 3\\" higher than the target. Use the model\u2019s bases when determining the difference in their heights","glossary":[{"val":"+1 DICE","id":"kw_plusdice"}]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Cover (-1 DICE): ","glossary":[{"val":"-1 DICE","id":"kw_minusdice"}]},{"tags":{"desc_type":"default"},"content":"Add -1 DICE to the roll if the target is in cover from the attacking model.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"}]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Long Range (-1 DICE): ","glossary":[{"val":"-1 DICE","id":"kw_minusdice"}]},{"tags":{"desc_type":"default"},"content":"Add -1 DICE to the roll if the attack is taking place at Long Range.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"}]}]}]}]}]},{"title":"Ranged Attack Success Roll","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Finally, make a Success Roll for the attacking model. If the roll is a Failure, the attack misses and nothing further happens. If the roll is a Success, the target is hit, and you must make an Injury Roll. If the roll is a Critical Success, the target is hit and +1 DICE is added to the Injury Roll.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"}]}]}]},{"title":"Shooting Into Melee","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"If you want to shoot at an enemy model that is within 1\\" of any of your models, you must roll a D6 to determine who is the target: on a 1-3 you must target one of your own models, on a 4-6 you can target an enemy model."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Note that, unless stated otherwise, the only time you randomly decide which model is affected by something is when you make a Ranged Attack with a model and the target is within 1\\" of another model from your Warband. For example, if a friendly model made a Ranged Attack with a Weapon that had the BLAST Keyword, and the target was within 1\\" of a model from your Warband, then you would randomly pick the target before making the Success Roll to see if the attack hits, but you would not randomise the Injury Rolls for any models that were caught in the blast radius of the Weapon after the hit had been scored. Similarly, if a rule allowed you to place a BLOOD MARKER next to an enemy model, you would not randomly choose which model to place the marker beside if the enemy model was within 1\\" of a friendly model, and so on.","glossary":[{"val":"BLAST","id":"kw_blast"},{"val":"BLOOD MARKER","id":"kw_bloodmarker"}]}]}]}]},{"id":"gr_meleeattacks","source":"core","tags":{"order":"comprehensive","sub_order":"gameplay","url_custom":"melee-attacks"},"contextdata":{},"name":"Melee Attacks","item_index":25,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"In order to make a Melee Attack, a model must have a Melee Weapon and be within 1\\" of a target."}]}],"sections":[{"title":"Melee Attack Sequence","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"A Melee Attack is made using the following sequence."}]},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Choose Weapon"},{"tags":{"desc_type":"default"},"content":"Pick Target"},{"tags":{"desc_type":"default"},"content":"Determine Modifiers"},{"tags":{"desc_type":"default"},"content":"Take a Success Roll for the attacking model."}]}]},{"title":"Choosing The Weapon","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"When you make a Melee Attack with a model you must first pick a Melee Weapon that the model is armed with to make the attack. The Weapons a model is armed with can be found on its Profile."}]}]},{"title":"Choosing The Target","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"When a model makes a Melee Attack you must pick one enemy model to be the target of the attack. The target must be within 1\\" of the attacking model in its Line of Sight."}]}]},{"title":"Determine Melee Attack Modifiers","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Next you must determine if there are any modifiers that will affect the attack. Modifiers add +/- DICE to the Success Roll for the attacking model.","glossary":[{"val":"+/","id":"kw_plusdice"},{"val":"- DICE","id":"kw_minusdice"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Diving Charge (+1 DICE): ","glossary":[{"val":"+1 DICE","id":"kw_plusdice"}]},{"tags":{"desc_type":"default"},"content":"Add +1 DICE to the roll if the attacker is making a Diving Charge.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"}]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Defended Obstacle (-1 DICE): ","glossary":[{"val":"-1 DICE","id":"kw_minusdice"}]},{"tags":{"desc_type":"default"},"content":"Add -1 DICE to the roll if the target is in cover and the terrain piece providing the cover lies between it and the attacking model.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"}]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Off-Hand Weapon (-1 DICE): ","glossary":[{"val":"-1 DICE","id":"kw_minusdice"}]},{"tags":{"desc_type":"default"},"content":"Add -1 DICE to the roll if the attacking model is making the attack with an Off-Hand Weapon.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"}]}]}]}]}]},{"title":"Melee Attack Success Roll","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Finally, you make a Success Roll for the attacking model. If the roll is a Failure, the attack misses and nothing further happens. If the roll is a Success, the target is hit and you must make an Injury Roll to see what effect the attack has had on the target model. If the roll is a Critical Success, the target is hit and +1 DICE is added to the Injury Roll.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"}]}]}]},{"title":"Diving Charge","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"You can convert a charge for a friendly model into a diving charge if it Jumps Down at least 3\\" and lands within 1\\" of a target. If you do so, take a Risky Success Roll for the model after it Jumps Down. If the roll is a Failure the model is taken Down, and a Falling Injury Roll must then be taken for the model (\u25b6 see Falling). If the roll is a Success, you do not have to take a Falling Injury Roll for the model, and you can add +1 DICE to the Success Roll for the next Melee Attack that the model makes.","glossary":[{"val":"ACTION","id":"kw_action"}]}]}]},{"title":"Multiple Melee Weapons","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"A model that has two Melee Weapons can use a single Fight ACTION to make two separate Melee Attacks, one with each Weapon, in the order of your choice. The Weapon used for the second attack is referred to as the Off-Hand Weapon. You can pick the same or a different model as the target for each attack.","glossary":[{"val":"ACTION","id":"kw_action"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"If a model has two Melee Weapons, and one or both of them have the CLEAVE Keyword, pick one of them and make a Melee Attack with it; if it has the CLEAVE Keyword carry out all of its attacks one after the other. Then pick the other Melee Weapon and make a Melee Attack with it using the Off-Hand Modifier; if it has the CLEAVE Keyword carry out all of its attacks out one after the other with the Off-Hand modifier.","glossary":[{"val":"CLEAVE","id":"kw_cleave"}]}]}]}]},{"id":"gr_injuries","source":"core","tags":{"order":"comprehensive","sub_order":"gameplay","url_custom":"injuries"},"contextdata":{},"name":"Injuries","item_index":26,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"During games of Trench Crusade, models can be injured by attacks, falling from high terrain, or when trying to move through Dangerous Terrain. Regardless of how it occurs, when an enemy model suffers an injury, you must make an Injury Roll for the model as described in Making an Injury Roll."}]}],"sections":[{"title":"","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"An Injury Roll is made in a similar way to a Success Roll, by taking 2D6, adding extra dice to the roll, and then picking the two highest or lowest dice and adding them together. However, when you make an Injury Roll, INJURY DICE and INJURY MODIFIERS may be added to the roll instead of +/- DICE.","glossary":[{"val":"INJURY MODIFIERS","id":"kw_injurymodifier"},{"val":"+/","id":"kw_plusdice"},{"val":"- DICE","id":"kw_minusdice"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"INJURY DICE: "},{"tags":{"desc_type":"default"},"content":"+ or - INJURY DICE are added to an Injury Roll in the same way that + DICE or - DICE are added to a Success Roll.","glossary":[{"val":"+ DICE","id":"kw_plusdice"},{"val":"- DICE","id":"kw_minusdice"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"INJURY MODIFIER: "},{"tags":{"desc_type":"default"},"content":"+ or - INJURY MODIFIERS are applied to the Injury Roll. Make the Injury Roll, adding any + or - INJURY DICE, and then add or subtract any INJURY MODIFIERS from the roll. The maximum -INJURY MODIFIER cannot be more than -3 in total.","glossary":[{"val":"INJURY MODIFIERS","id":"kw_injurymodifier"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"For example, an Injury Roll has a +1 INJURY DICE modifier and a -1 INJURY MODIFIER. 3 dice are rolled, resulting in a 2, 4 and 5. The two highest dice are used, giving a roll of 9. Then the -1 INJURY MODIFIER is applied, subtracting 1 from the roll and changing it to an 8. The roll is looked up on the Injury Table, which gives a Down result for the Injury Roll.","glossary":[{"val":"+1 INJURY DICE","id":"kw_plusdice"},{"val":"-1 INJURY MODIFIER","id":"kw_injurymodifier"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Note that if a rule says a model is taken Down or Out of Action, apply the appropriate Result from the Injury Roll Table in full (which means a model that is taken Down will have a BLOOD MARKER placed beside it).","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"}]}]}]},{"title":"Bloodbath Rolls","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"When you make an Injury Roll for an enemy model, you can spend 6 BLOOD MARKERS (or 3 BLOOD MARKERS if the target is Down) to convert the Injury Roll to a Bloodbath Roll. To make a Bloodbath Roll, roll 3D6 and add all 3 dice together. Add +/- INJURY DICE and +/- INJURY MODIFIERS in the same way that you would to an Injury Roll, except that you pick the 3 highest or 3 lowest dice in the roll instead of the 2 highest or lowest.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"},{"val":"INJURY MODIFIERS","id":"kw_injurymodifier"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"If the Injury Roll has the DEADLY Keyword, instead roll 3D6 and add all 3 dice together.","glossary":[{"val":"DEADLY","id":"kw_deadly"}]}]}]},{"title":"Making An Injury Roll","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"To make an Injury Roll for a model, carry out the following steps:"}]},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Take two D6."},{"tags":{"desc_type":"default"},"content":"Add any +/- INJURY DICE.","glossary":[{"val":"+/","id":"kw_plusdice"},{"val":"- INJURY DICE","id":"kw_minusdice"}]},{"tags":{"desc_type":"default"},"content":"Roll all of the dice."},{"tags":{"desc_type":"default"},"content":"Pick the 2 highest dice if any +INJURY DICE were added to the roll, or the 2 lowest if any -INJURY DICE were added to the roll.","glossary":[{"val":"+INJURY DICE","id":"kw_plusdice"},{"val":"-INJURY DICE","id":"kw_minusdice"}]},{"tags":{"desc_type":"default"},"content":"Add the two dice together."},{"tags":{"desc_type":"default"},"content":"Add any +/- INJURY MODIFIERS to the roll.","glossary":[{"val":"INJURY MODIFIERS","id":"kw_injurymodifier"}]},{"tags":{"desc_type":"default"},"content":"Look up the roll on the Injury Roll Table below."}]}]},{"title":"Injury Roll Table","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"headless_table"},"content":"","subcontent":[{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"1 (or less)"},{"tags":{"desc_type":"table_item"},"content":"No Effect. The model is unharmed, and the injury has no effect."}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"2-6"},{"tags":{"desc_type":"table_item"},"content":"Minor Hit. Place 1 BLOOD MARKER next to the model.","glossary":[{"val":"1 BLOOD MARKER","id":"kw_bloodmarker"}]}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"7-8"},{"tags":{"desc_type":"table_item"},"content":"Down. Place 1 BLOOD MARKER next to the model and mark them as being Down. If the model is already Down, place 2 BLOOD MARKERS next to the model instead of 1.","glossary":[{"val":"1 BLOOD MARKER","id":"kw_bloodmarker"},{"val":"2 BLOOD MARKERS","id":"kw_bloodmarker"}]}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"9+"},{"tags":{"desc_type":"table_item"},"content":"Out of Action. The model has been seriously injured or killed and is removed from play."}]}]}]}]},{"title":"Common Injury Roll Modifiers","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"The following modifiers are cumulative, The maximum -INJURY MODIFIER added to an injury roll cannot be more than -3 in total:","glossary":[{"val":"INJURY MODIFIER","id":"kw_injurymodifier"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Blessing Markers: "},{"tags":{"desc_type":"default"},"content":"Add -1 INJURY DICE for each BLESSING MARKER that is spent","glossary":[{"val":"BLESSING MARKER","id":"kw_blessingmarker"},{"val":"-1 INJURY DICE","id":"kw_injurydice"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Blood Markers: "},{"tags":{"desc_type":"default"},"content":"Add +1 INJURY DICE for each BLOOD MARKER that is spent.","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"},{"val":"+1 INJURY DICE","id":"kw_plusdice"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Critical Success: "},{"tags":{"desc_type":"default"},"content":"Add +1 INJURY DICE.","glossary":[{"val":"+1 INJURY DICE","id":"kw_plusdice"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Down: "},{"tags":{"desc_type":"default"},"content":"Add +1 INJURY DICE for a Melee Attack if the target is Down.","glossary":[{"val":"+1 INJURY DICE","id":"kw_plusdice"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Abilities or Keywords: "},{"tags":{"desc_type":"default"},"content":" Add any +/-INJURY DICE and/or any +/-INJURY MODIFIERS for abilities or Keywords that apply to the Injury Roll.","glossary":[{"val":"INJURY MODIFIERS","id":"kw_injurymodifier"},{"val":"INJURY DICE","id":"kw_injurydice"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Armour Characteristic: "},{"tags":{"desc_type":"default"},"content":"Add the -INJURY MODIFIER of the model\u2019s Armour Characteristic (if any).","glossary":[{"val":"-1 INJURY MODIFIER","id":"kw_injurymodifier"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Battlekit: "},{"tags":{"desc_type":"default"},"content":"Add the -INJURY MODIFIER for the model\u2019s Battlekit (e.g. Armour, Shield, etc.)","glossary":[{"val":"-1 INJURY MODIFIER","id":"kw_injurymodifier"}]}]}]},{"title":"Gameplay Example","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"A Heretic Trooper makes a Ranged Attack that hits a Trench Pilgrim Castigator who has 2 BLOOD MARKERS and Standard Armour. The Heretic player decides to use both BLOOD MARKERS to make the shot more likely to injure. The Heretic player takes 4D6 (2D6 +2 INJURY DICE from the BLOOD MARKERS) and rolls 2, 5, 4 and 1. Since two +INJURY DICE were added to the roll, the two highest numbers are used for the Injury Roll, giving a total of 9. The Castigator\u2019s armour adds -1 INJURY MODIFIER, so the total is reduced by 1, to give a modified roll of 8. The Heretic player consults the Injury Table and finds that the Pilgrim is Down!","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"},{"val":"+2 INJURY DICE","id":"kw_plusdice"},{"val":"-1 INJURY MODIFIER","id":"kw_injurymodifier"}]}]}]},{"title":"Down","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"The following rules apply to a model that is Down:"}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"If a model is taken Down during its Activation, its Activation ends immediately.","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Add -1 DICE to any rolls you take for a model that is Down.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"}]},{"tags":{"desc_type":"default"},"content":"Add +1 INJURY DICE for a Melee Attack if the target is Down.","glossary":[{"val":"+1 INJURY DICE","id":"kw_plusdice"}]},{"tags":{"desc_type":"default"},"content":"Until the model stands back up, it cannot be moved for any reason unless it falls"},{"tags":{"desc_type":"default"},"content":"A model that is Down stands back up when it is next Activated. However, its Movement Characteristic is halved for the rest of the Activation (including the bonus for charging)."},{"tags":{"desc_type":"default"},"content":"A model that is within 1\u201d of a ledge when it is taken down may Fall off the ledge. Take a Success Roll for the model before it is taken Down. If the roll is a Success, the model is taken Down but does not Fall off the ledge. If the roll is a Failure, the model Falls from the nearest ledge and is then taken Down"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"You can show that a model is Down by placing a marker next to the model (such as a wooden cube) or by laying the model on its side. If you choose to place the model on its side, lay it down in such a way that the centre of the model lies over the point where the centre of its base was located (do not add -1 DICE for the model being Down as it has not been taken Down yet). When measuring the range to or from a model that is Down, you can measure from any part of the model, not just from its base. Note: A model lying on its side will be more difficult to see, but otherwise the two methods are identical, and you may decide which to use for your models.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"}]}]}]}]},{"id":"gr_moralephase","source":"core","tags":{"order":"comprehensive","sub_order":"game_turns","url_custom":"morale-phase-comprehensive"},"contextdata":{},"name":"Morale Phase","item_index":27,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Your Warband may abandon the battle if it suffers too many casualties. In the Morale Phase, if half the models in your Warband are Down or Out of Action (rounded up), you must take a special type of Success Roll called a Morale Check. A Morale Check is taken in the same way as a Success Roll for a model. If the Morale Check is a Success, your Warband carries on normally. If the Morale Check is a Failure, your Warband becomes Shaken."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Note: "},{"tags":{"desc_type":"default"},"content":"Remember that when counting models, any fractions are rounded up. For example, a Warband that has 5 models will not need to make a Morale Check until 3 of its models are Down or Out of Action (half of 5 is 2.5, which rounds up to 3)."}]}],"sections":[{"title":"Shaken Warbands","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"All Success Rolls taken for models from a Shaken Warband are treated as Risky Success Rolls (unless they are Risky Success Rolls already). In addition, in the Morale Phase at the end of the next turn you must make another Morale Check for your Warband, even if fewer than half of its models are Down or Out of Action. If the Morale Check is a Success, your Warband is no longer Shaken (though it may become so again if you fail a Morale check in a future turn). However, if the Morale Check is a failure, your Warband flees and you immediately lose the game!"}]}]},{"title":"Ending The Turn","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"As long as neither player\u2019s Warband flees, they can carry out any end of turn tasks. A new Turn can then begin."}]}]},{"title":"End Of Turn Tasks","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Some rules require the players to do things at \u201cthe end of the turn\u201d. These are referred to as end of turn tasks. If more than one end of turn task needs to be carried out, the player that as the Initiative determines the order in which they are carried out."}]}]},{"title":"","description":[{"tags":{"desc_type":"infobox-1-0"},"content":"","subcontent":[{"tags":{"desc_type":"infobox-title"},"content":"Sounding The Retreat"},{"tags":{"desc_type":"default"},"content":"If a Morale Check for your Warband is a Failure, you can choose to immediately flee and lose the game instead of becoming Shaken. Sometimes it is better to retreat to conserve your losses, rather than fighting on to the last man!"}]}]}]},{"id":"gr_winningthegame","source":"core","tags":{"order":"comprehensive","sub_order":"game_turns","url_custom":"winning-the-game"},"contextdata":{},"name":"Winning The Game","item_index":28,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"You win a game of Trench Crusade immediately if the opposing player\u2019s Warband flees. If this doesn\u2019t happen, the winner of the game is determined after the final turn has been completed. The scenario chosen for the game will say how many Turns the game will last, and how the winner is decided."}]}],"sections":[]},{"id":"gr_keywords","source":"core","tags":{"order":"comprehensive","sub_order":"gameplay","url_custom":"keywords"},"contextdata":{},"name":"Keywords","item_index":29,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Rules governing all Keywords in the game are listed here. A model, a piece of Battlekit, a Marker or a terrain piece can have 1 or more Keywords. They define the core abilities, rules, troop types and damage categories in the game. Keywords appear in the rules in CAPITALS to make it easy for you to spot them."}]},{"tags":{"desc_type":"rulesbanner","url":"/compendium/comprehensive-rules/keyword"},"content":"Keywords Glossary","subcontent":[]}],"sections":[{"title":"","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Keywords have two benefits: they act as Tags and may confer an Effect. A Keyword that confers an Effect also acts as a Tag."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Tags: "},{"tags":{"desc_type":"default"},"content":"A Keyword that can be referred to by other rules."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Effect: "},{"tags":{"desc_type":"default"},"content":"A Keyword that confers a special rule to a model that has the Keyword, or has a piece of Battlekit that has that Keyword."}]}]}]},{"id":"gr_terrain","source":"core","tags":{"order":"comprehensive","sub_order":"terrain","url_custom":"terrain"},"contextdata":{},"name":"Trench Crusade Terrain","item_index":30,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Just as a real battlefield would have terrain features such as buildings, hills and forests, the battlefield for a game of Trench Crusade will need its own terrain features to provide cover for the warriors in your Warband. The terrain you place on the battlefield is made up of individual models that are called terrain pieces."}]}],"sections":[{"title":"The Battlefield","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"The area on which you play your game is referred to as the Battlefield. Before you can set up the terrain for your game, you will need a Battlefield to place it on. Most games of Trench Crusade can be played on a dining table, but some require an area that is 36\\" or 48\\" square. If you are going to play one of these larger scenarios, you may need to make a special gaming board. For all of the other scenarios, a standard dining table will provide more than enough space for your game."}]}]},{"title":"Terrain Pieces","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"In addition to the battlefield you will need as many terrain pieces as you can lay your hands on. You can purchase plastic terrain models suitable for use as terrain pieces in much the same way as you can the models that make up the warriors in your Warband. We would recommend you use the models from the growing range of Trench Crusade terrain for your games, but we won\u2019t mind if you decide to use another company\u2019s kits instead of our own. Many players enjoy scratch-building the terrain pieces for their games from modelling materials like plasticard, foam board and foam card, PVA glue and modelling sand. Suffice to say that a quick search on the internet will bring up plenty of examples of terrain models that you can use, and introductory articles about how to scratch-build terrain."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Don\u2019t worry if you are new to tabletop wargaming and have not yet had a chance to build up a large collection of terrain. Just use any terrain pieces you have available, and/or supplement them with household items that can stand-in for actual terrain pieces. For example, you could use books to represent low hills, pens to represent walls, rocks collected from your garden or a park as boulders, twigs to represent fallen trees and so on. Placing a thick blanket over some books will create a rolling landscape with hills and gullies to fight over."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"The important thing to appreciate is that it is absolutely okay to use whatever you have to hand in order to play a game of Trench Crusade; after all, the Lord took six days to create everything, so don\u2019t worry if it takes a little time to create your ideal battlefield! Don\u2019t worry, very soon your collection of terrain pieces will grow and you will be able to return your books to their shelves and your rocks and twigs to the garden (though you may well find yourself looking back very fondly on those early games and the improvised terrain that you used in order to play them)."}]}]}]},{"id":"gr_terrainelements","source":"core","tags":{"order":"comprehensive","sub_order":"terrain","url_custom":"terrain-elements"},"contextdata":{},"name":"Terrain Elements","item_index":31,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Once you have set up your Battlefield, it\u2019s a sensible idea to discuss each Terrain Piece with your opponent to agree what type each will be treated as. Because terrain can be represented in such a wide variety of ways, it\u2019s not possible for us to list every Terrain Piece you might want to use in a game. Instead we have come up with the following list, which covers the vast majority of the types of terrain used for games of Trench Crusade. After the list you will find more detailed explanations of each type:"}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Open Terrain","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Landmarks (statues, shrines, altars, etc.)","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Areas of Dangerous Terrain (swamp, barbed wire etc.)","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Areas of Difficult Terrain (rubble, craters, fallen trees etc.)","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Areas of Impassable Terrain (lava or hellfire, sheer cliff faces, etc.)","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Hills","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Linear Terrain (walls, hedges, etc.)","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Trenches","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Ruined Buildings (a tower, house etc.)","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Corner Ruins (two ruined walls in an L shape)","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Rivers and Streams","subcontent":[]}]}]}],"sections":[{"title":"Open Terrain","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Open terrain is any area of a Battlefield where there is nothing to impede a model, and it is the most common terrain type in Trench Crusade. Models can be moved freely across open terrain."}]}]},{"title":"Landmarks","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"A landmark is a single piece of Impassable terrain, such as a statue, shrine or altar. They cannot be moved across except by models that have the FLYING Keyword. If a scenario includes any Markers, then the players can agree to use a suitable landmark terrain piece in the place of the Markers. It makes a game more interesting to know that you are fighting to capture a statue or shrine, rather than an anonymous cardboard counter!","glossary":[{"val":"FLYING","id":"kw_flying"}]}]}]},{"title":"Area Terrain","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Area terrain is a catch-all term for areas of Dangerous, Difficult and Impassable Terrain. It\u2019s important to agree where the boundary of a piece of area terrain lies so that you can tell if a model has strayed into it. This can be determined by either mounting the terrain on a suitable base, marking its boundary with a small piece of cotton, or simply making sure that you and your opponent agree where the boundary lies."}]}]},{"title":"Hills","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"A hill can be of any size or height, though we recommend that it not be more than 12\\" across at its widest point. If the hill is high enough it will block Line of  to models on the far side of the hill, and may give a model a height advantage when they make an attack. Hills are usually treated as being open terrain for the purposes of movement, but other pieces of terrain can be placed upon it, such as patches of rocky ground, barbed wire, trenches, or ruins. The players should agree what type of terrain any such areas will be considered as."}]}]},{"title":"Linear Terrain","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Linear terrain includes obstacles such as walls and hedges. It can have bends and kinks, and several sections can be joined together to create a long set of walls or hedges. Linear terrain can be crossed as if it is Open ground if it is up to 1\\" high, but must be climbed using the rules for climbing sheer surfaces if it is more than 1\\" high."}]}]},{"title":"Trench Sections","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Trenches are a common piece of terrain on Trench Crusade battlefields, for obvious reasons! Trenches are divided into trench sections that may be from 4\u201d to 12\u201d long and from 2\u201d to 4\u201d wide. A trench section can have bends and kinks, and several sections can be joined together to create a trench line. Trench sections can also include crossroads and/or T-junctions where two lines of trenches meet each other. The side of a trench can be crossed as if it is Open terrain if it is less than 3\u201d high, but must be Climbed or Jumped Down from if it is at least 3\u201d high. A model can attempt to Jump from one side of a trench to the other using the rules for jumping over a gap."}]}]},{"title":"Ruined Buildings","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"A ruined building is a single Terrain Piece that can be any size or height, though we recommend that it not be more than 12\\" across at its widest point. Its walls can be climbed using the rules for climbing a sheer surface. Any stairs or floors that remain can be crossed as if they were open ground, while any piles of rubble will be Difficult Terrain."}]}]},{"title":"Corner Ruins","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"A corner ruin consists of two ruined walls that are each up to 6\\" long, placed together roughly in the shape of an L or T. Corner ruins are a popular form of terrain because they are easy to make and work really well in games of Trench Crusade. A corner ruin can include the remains of floors from the upper levels of the original building, and if they do, models can Climb up to them using the rules for climbing sheer surfaces. Any piles of rubble will be Difficult Terrain."}]}]},{"title":"Rivers & Streams","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"A river must enter on one edge of the Battlefield and exit on another. Streams must enter from an edge, and may either leave by a different edge or end in a swamp or lake. A stream is Difficult Terrain, and a river is Dangerous Terrain. Both should include one or more crossing points, such as bridges or fords, that models can treat as open terrain. You can only use a river or stream in a game if the scenario says you must do so, or if both players agree to include a river or stream in the game they are about to play."}]}]},{"title":"Unique Terrain","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"If you plan to use any unique terrain pieces that aren\u2019t included in the standard terrain list, then you will need to chat with your opponent before the game to decide how you will use it in the game (don\u2019t worry, this is usually a pretty straightforward thing to establish!)."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Scattered Terrain: "},{"tags":{"desc_type":"default"},"content":"Terrain that is too small to have an effect on the battle, or is otherwise inconsequential, is called scattered terrain. Examples of scattered terrain include individual trees, boxes or crates, signposts and so on. Scattered terrain is purely decorative; any amount can be added to a battlefield, and you can ignore it or move it out of the way when setting up other terrain pieces, moving models, making attacks or checking visibility."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Intact Buildings: "},{"tags":{"desc_type":"default"},"content":"We recommend that you only include ruined buildings in your games, as they are much more practical to use during a game. However, if you wish you can use intact buildings such as large bunkers. If you do, you must either agree to treat them as Impassable Terrain, or you will need to draw up detailed floor plans of the interior. When a model enters an intact building, transfer it to the floor plan and carry on its move from there. When you use intact buildings in this way a certain amount of common sense and restraint will need to be exercised - for example, you shouldn\u2019t move a model through an entrance  is too small for it, and so on."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Trench Crusade Gaming Boards: "},{"tags":{"desc_type":"default"},"content":"To make a gaming board, simply purchase a piece of MDF, chipboard, or marine plywood that is 48\\" square. MDF, chipboard and plywood often come in 8\u2019 by 4\u2019 sheets, in which case you simply need to ask the supplier to cut the board in half, giving you two boards to play on. Your new gaming board can then be placed directly on your dining table, though you may want to put a tablecloth on the table to prevent scratches. You can either play on the plain wooden board covered with a blanket, or paint it with a combination of brown and green emulsion paints to represent the muddy fields that Trench Crusade battles are fought upon. Some players take this a step further by gluing 2\\" foamboard onto the gaming table, and then carving trenches and craters into the foam. Some examples of what can be achieved are shown throughout this book."}]}]}]},{"id":"gr_battlefieldarchetypes","source":"core","tags":{"order":"comprehensive","sub_order":"terrain","url_custom":"battlefield-archetypes"},"contextdata":{},"name":"Battlefield Archetypes","item_index":32,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Trench Crusade games are fought across all kinds of terrain, from the highest mountain passes to shadowed subterranean depths, but for the purposes of the scenarios in this rulebook we have focused on three battlefield archetypes: No Man\u2019s Land; Decimated Ruins; and (of course) Trench Lines. The scenario you are using for the game will clearly explain what type of battlefield archetype is to be used. The terrain for the scenario can then be set up using the instructions below."}]}],"sections":[{"title":"No Man\'s Land","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"No Man\u2019s Land is the area that lies between the trench systems of the Great War. It is a stark and deadly place, criss-crossed with fire from machine-guns and artillery, and with only occasional ruined buildings, craters, fallen trees, wrecked tanks or cannons, and pockmarked shrines to provide cover. This makes it a dangerous place to enter in daylight, so most Scenarios that take place in No Man\u2019s Land will be night-time raids where the cover of darkness can be used to provide some measure of protection against enemy gunfire."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Terrain Pieces: "},{"tags":{"desc_type":"default"},"content":"The players roll-off, and the winner sets up the terrain for the game. The terrain pieces for a game taking place in No Man\u2019s Land must be from the following list:"}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Trenches","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Ruined Buildings","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Ruined Corners","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Areas of Difficult Terrain (rubble, craters, fallen trees etc.)","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Areas of Dangerous Terrain (barbed wire, swampy ground etc.)","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Hills","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Linear Terrain (walls, hedges, etc.)","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Landmarks (statues, shrines, altars, etc.)","subcontent":[]}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Number of Terrain Pieces: "},{"tags":{"desc_type":"default"},"content":"We recommend that you use at least 2 pieces of each terrain type if you can. Count pieces that are more than 8\\" across or more than 8\\" long as being 2 pieces of terrain towards this number rather than only 1. However, this is only a guideline, and you can use any number of terrain pieces in a No Man\u2019s Land scenario, from there being almost no terrain at all, to there being as much terrain as can be fitted onto the Battlefield (without breaking any of the following restrictions on how pieces can be placed, of course!)"}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Terrain Set-Up: "},{"tags":{"desc_type":"default"},"content":"The terrain pieces must be set up in such a way that each piece of terrain is at least 3\\" away from any other pieces of terrain. Trenches can only be set up if they are wholly within one of the Deployment Zones shown on the map for the scenario that is being played."}]}]},{"title":"Decimated Ruins","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Battles are frequently fought to capture cities, towns and villages located between, or just behind, the trench lines of the opposing Warbands. The constant warfare quickly reduces once-proud buildings to ruins, amongst which Warbands fight each other in brutal short-ranged engagements. Tactical and strategic success can be measured by who takes control of the ruined buildings, piles of rubble and wrecked vehicles that litter the shattered landscape."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Terrain Pieces: "},{"tags":{"desc_type":"default"},"content":"The players roll-off, and the winner sets up the terrain for the game. The terrain pieces for a game taking place in Decimated Ruins must be chosen from the following list:"}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Landmarks (statues, wrecked vehicles, etc.)","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Areas of Difficult Terrain (craters, rubble, etc.)","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Areas of Dangerous Terrain (barbed wire, minefields etc.)","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Ruined Buildings","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Corner Ruins","subcontent":[]}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Number of Terrain Pieces: "},{"tags":{"desc_type":"default"},"content":"You will need at least 6 ruined buildings and at least 2 pieces of each other sort of terrain. Count pieces that are more than 8\\" across or more than 8\\" long as being 2 pieces of terrain towards this number rather than only 1."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Terrain Set-Up: "},{"tags":{"desc_type":"default"},"content":"Any ruins that are going to be used for the game must be set up first. The first ruined building or corner can be set up anywhere on the Battlefield. Each subsequent ruined building or corner must be placed between 3\\" and 9\\" away from any other ruined building or corner. After all of the ruins have been set up, any other terrain can be added to the Battlefield. Terrain apart from ruins can be set up anywhere on the Battlefield that is at least 3\\" away from any other terrain pieces."}]}]},{"title":"Trench Lines","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Behind No Man\u2019s Land lies a system of interconnected Trench Lines, often several miles thick. Trench Lines are made up of interlinked trenches that are deep enough to shield most warriors from enemy fire. Because of this combat usually takes place in the trenches themselves, though sometimes a brave warrior will risk clambering out of a trench and running across open ground in order to outflank a strong enemy position."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Terrain Pieces: "},{"tags":{"desc_type":"default"},"content":"The players roll-off, and the winner sets up the terrain for the game. The terrain pieces for a game taking place in Trench Lines must be chosen from the following list:"}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Trenches","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Ruined Corners","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Areas of Dangerous Terrain (barbed wire, minefields etc.)","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Areas of Difficult Terrain (craters, rubble, etc.)","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Landmarks (statues, shrines, wrecked vehicles, etc.)","subcontent":[]}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Number of Terrain Pieces: "},{"tags":{"desc_type":"default"},"content":"You will need enough Trenches to reach from one edge of the battlefield to the opposite edge. In addition to the trenches, you will need 2 pieces of each other sort of terrain. Count pieces that are more than 8\\" across or more than 8\\" long as being 2 pieces of terrain towards this number rather than only 1."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Terrain Set-Up: "},{"tags":{"desc_type":"default"},"content":"Any trenches that are going to be used for the game must be set up first. The first trench must be set up so that it enters from one edge of the Battlefield, and subsequent trenches must connect with an existing trench. Once all of the trenches have been set up they must extend from the edge of the Battlefield, from where the first trench was placed, to the opposite edge of the Battlefield, so that a model could enter on one edge and exit off the other without ever having to leave a trench. After all of the trenches have been set up, any other terrain can be set up anywhere on the battlefield that is at least 1\\" from any trenches and 3\\" away from any other Terrain Pieces."}]}]}]},{"id":"gr_battlekit","source":"core","tags":{"order":"comprehensive","url_custom":"model-battlekit"},"contextdata":{},"name":"Model Battlekit","item_index":33,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Models usually carry Battlekit that helps them fight, protects them from harm, and grants them special benefits or abilities. This section of the rules presents Battlekit Descriptions for the most common types of Battlekit. The Faction List documents include additional Battlekit available exclusively to members of the Faction."}]}],"sections":[{"title":"Battlekit Descriptions","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Each piece of Battlekit has a Battlekit Description that contains the following information."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Name: ","subcontent":[]},{"tags":{"desc_type":"default"},"content":"The name of the piece of Battlekit.","subcontent":[]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Description: ","subcontent":[]},{"tags":{"desc_type":"default"},"content":"A description of the Battlekit and how it is used.","subcontent":[]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Battlekit Profile: ","subcontent":[]},{"tags":{"desc_type":"default"},"content":"A Battlekit Profile includes the name of the Battlekit and the following information:","subcontent":[]},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Type: ","subcontent":[]},{"tags":{"desc_type":"default"},"content":"What the Battlekit is used for:","subcontent":[]},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"1-Handed: A 1-Handed Weapon."},{"tags":{"desc_type":"default"},"content":"2-Handed: A 2-Handed Weapon."},{"tags":{"desc_type":"default"},"content":"Grenade: Grenades can be thrown at enemy models."},{"tags":{"desc_type":"default"},"content":"Armour: Armour that will protect the model from harm."},{"tags":{"desc_type":"default"},"content":"Shield: A Shield is also used to protect the model from harm."},{"tags":{"desc_type":"default"},"content":"Equipment: A piece of Battlekit that provides the model with special rules."},{"tags":{"desc_type":"default"},"content":"Special: A unique piece of Battlekit that has a special rule which describes how it is used."}]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Range: ","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Indicates the distance at which the Battlekit can be used to make an attack.","subcontent":[]},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Ranged Weapons: If the range is a value in inches (e.g. 12\\"), the Battlekit is a Ranged Weapon and can be used to make Ranged Attacks.","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Melee Weapons: If the range is listed as \u201cMelee\u201d then the Weapon is a Melee Weapon and can be used to make Melee Attacks against targets within 1\\" of it.","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Dual-purpose: If the range is a value in inches followed by Melee (e.g. 12\\"/Melee), then the Battlekit can be used as both a Ranged Weapon and a Melee Weapon.","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Other: If the range is listed as \u201c-\u201d the Battlekit cannot be used to make an attack.","subcontent":[]}]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Keywords: ","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Any Keywords that apply to the piece of Battlekit.","subcontent":[]},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Weapon Keywords: Keywords for 1-Handed or 2-Handed Weapons and Grenades apply to attacks made by the model that has the weapon (ignore them at all other times).","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Armour & Shield Keywords: Keywords for Armour and Shields apply to Injury Rolls for the model that has the Armour and/or Shield (ignore them at all other times)","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Other Battlekit Keywords: Keywords for other Battlekit are added to the Keywords found on the Profile for the model. They apply all of the time unless stated specifically otherwise.","subcontent":[]}]}]}]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Special Rules: ","subcontent":[]},{"tags":{"desc_type":"default"},"content":"Some Battlekit has special rules that apply exclusively to it. Special rules appear below the Battlekit Profile.","subcontent":[]}]}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Note that if a Weapon has the +/- DICE Keyword, then the Keyword only applies to the Success Rolls for attacks made by the weapon. It does not apply to any other sort of Success Roll, or to Injury Rolls. By the same token, if a Weapon has the +/- INJURY DICE Keyword, then the Keyword only applies to Injury Rolls for attacks made by the weapon. It does not apply to any other sort of Injury Roll, or to Success Rolls.","glossary":[{"val":"+/","id":"kw_plusdice"},{"val":"-","id":"kw_minusdice"}]}]}]},{"title":"Battlekit Limits","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Unless otherwise stated a model is limited to the following Battlekit:"}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"One 2-Handed Ranged Weapon or two 1-Handed Ranged Weapons."},{"tags":{"desc_type":"default"},"content":"One 2-Handed Melee Weapon or two 1-Handed Melee Weapons."},{"tags":{"desc_type":"default"},"content":"One type of Grenade."},{"tags":{"desc_type":"default"},"content":"One suit of Armour."},{"tags":{"desc_type":"default"},"content":"One Shield."},{"tags":{"desc_type":"default"},"content":"Any number of pieces of Equipment or Special Battlekit. A Model cannot have two or more pieces of Equipment or Special Battlekit with the same Name."}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Shields: "},{"tags":{"desc_type":"default"},"content":"A Shield requires one hand to carry and cannot be unequipped. As a result, if a model has a Shield, the following restrictions apply to the other Battlekit it can carry:"}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"It may carry a maximum of one 1-Handed Melee and Ranged Weapon each."},{"tags":{"desc_type":"default"},"content":"It cannot carry a 2-Handed Weapon unless the Weapon and the Shield both have the Shield Combo stipulation."}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Dual-Purpose Battlekit: "},{"tags":{"desc_type":"default"},"content":"Dual-Purpose Battlekit can be used in two different ways. For example, a Pistol can be used as a Ranged Weapon or a Melee Weapon. However, it still only counts as a single 1-Handed or 2-Hand Weapon. So a Pistol counts as a single 1-Handed Weapon when determining how many Weapons a model can have."}]}]},{"title":"Two Hands, One Head, and a Body","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Unless otherwise stated, a model is assumed to have:"}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Two hands to carry weapons and equipment."},{"tags":{"desc_type":"default"},"content":"One head for wearing a helmet."},{"tags":{"desc_type":"default"},"content":"One body that can be covered by armour."}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"In addition a model is assumed to have enough belts, backpacks and pouches to carry Grenades and any other Equipment it possesses."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"All Weapon entries specify whether they require one or two hands to use. A model may freely switch between Ranged and Melee Weapons between ACTIONS, slinging unused weapons over the shoulder or stowing them in a holster or scabbard as needed.","glossary":[{"val":"ACTIONS","id":"kw_action"}]}]}]}]},{"id":"gr_equipmenttypes","source":"core","tags":{"order":"comprehensive","sub_order":"equipment"},"contextdata":{},"name":"Equipment Types","item_index":34,"description":[],"sections":[{"title":"Ranged","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Ranged Weapons can be used to perform a Ranged Attack. Ranged Weapons cannot be used to make a Melee Attack unless they have the word \u201cMelee\u201d noted under their Range on their Profile."}]},{"tags":{"desc_type":"rulesbanner","url":"/compendium/battlekit/ranged"},"content":"Ranged Battlekit","subcontent":[]}]},{"title":"Grenades","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Grenades have a Range and can be used to perform a Ranged Attack even though they are not specifically a Ranged Weapon. They do not count towards the number of Ranged Weapons a model can have, and a model is assumed to be carrying enough to be able to use them every Turn."}]},{"tags":{"desc_type":"rulesbanner","url":"/compendium/battlekit/grenade"},"content":"Grenade Battlekit","subcontent":[]}]},{"title":"Melee Weapons","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Melee Weapons can be used to perform a Melee Attack. Melee Weapons cannot be used to make a Ranged Attack unless they have a value in inches noted under their Range on their Profile."}]},{"tags":{"desc_type":"rulesbanner","url":"/compendium/battlekit/melee"},"content":"Melee Battlekit","subcontent":[]}]},{"title":"Shields","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Keywords for Shields only apply to Injury Rolls for the model that is using the Shield (ignore them at all other times). The effect of a Shield can be combined with the effect of a suit of Armour unless noted otherwise. A Shield does not block Line of Sight to the model that is carrying it."}]},{"tags":{"desc_type":"rulesbanner","url":"/compendium/battlekit/shield"},"content":"Shields Battlekit","subcontent":[]}]},{"title":"Armour","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Keywords for Armour only apply to Injury Rolls for the model that is wearing the Armour (ignore them at all other times). Sometimes the INJURY MODIFIER for Armour or a Shield is listed in the Injury Modifiers Table in the Core Rules and is repeated for completeness in the Profile for the Armour or Shield as well. When this is the case, be careful not to apply the modifier more than once.","glossary":[{"val":"INJURY MODIFIER","id":"kw_injurymodifier"}]}]},{"tags":{"desc_type":"rulesbanner","url":"/compendium/battlekit/armour"},"content":"Armour Battlekit","subcontent":[]}]},{"title":"Equipment","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Unless noted otherwise a model can have any number of pieces of Equipment, but cannot have the same piece of Equipment more than once. For example, a model could have an Iron Capirote and a Medi-kit, but could not have two Iron Capirotes or two Medi-kits."}]},{"tags":{"desc_type":"rulesbanner","url":"/compendium/battlekit/equipment"},"content":"Equipment Battlekit","subcontent":[]}]},{"title":"Ranged Weapons","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Ranged Weapons can be used to perform a Ranged Attack. Ranged Weapons cannot be used to make a Melee Attack unless they have the word \u201cMelee\u201d noted under their Range on their Profile."}]},{"tags":{"desc_type":"rulesbanner","url":"/compendium/battlekit/ranged"},"content":"Ranged & Grenade Battlekit","subcontent":[]}]},{"title":"Grenades","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Grenades have a Range and can be used to perform a Ranged Attack even though they are not specifically a Ranged Weapon. They do not count towards the number of Ranged Weapons a model can have, and a model is assumed to be carrying enough to be able to use them every Turn."}]},{"tags":{"desc_type":"rulesbanner","url":"/compendium/battlekit/ranged"},"content":"Ranged & Grenade Battlekit","subcontent":[]}]},{"title":"Melee Weapons","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Melee Weapons can be used to perform a Melee Attack. Melee Weapons cannot be used to make a Ranged Attack unless they have a value in inches noted under their Range on their Profile."}]},{"tags":{"desc_type":"rulesbanner","url":"/compendium/battlekit/melee"},"content":"Melee Battlekit","subcontent":[]}]},{"title":"Shields","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Keywords for Shields only apply to Injury Rolls for the model that is using the Shield (ignore them at all other times). The effect of a Shield can be combined with the effect of a suit of Armour unless noted otherwise."}]},{"tags":{"desc_type":"rulesbanner","url":"/compendium/battlekit/armour"},"content":"Shields & Armour Battlekit","subcontent":[]}]},{"title":"Armour","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Keywords for Armour only apply to Injury Rolls for the model that is wearing the Armour (ignore them at all other times). Sometimes the INJURY MODIFIER for Armour or a Shield is listed in the Injury Modifiers Table in the Core Rules and is repeated for completeness in the Profile for the Armour or Shield as well. When this is the case, be careful not to apply the modifier more than once.","glossary":[{"val":"INJURY MODIFIER","id":"kw_injurymodifier"}]}]},{"tags":{"desc_type":"rulesbanner","url":"/compendium/battlekit/armour"},"content":"Shields & Armour Battlekit","subcontent":[]}]},{"title":"Equipment","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Unless noted otherwise a model can have any number of pieces of Equipment, but cannot have the same piece of Equipment more than once. For example, a model could have an Iron Capirote and a Medi-kit, but could not have two Iron Capirotes or two Medi-kits."}]},{"tags":{"desc_type":"rulesbanner","url":"/compendium/battlekit/equipment"},"content":"Equipment Battlekit","subcontent":[]}]}]},{"id":"gr_preparingtoplay","source":"core","tags":{"order":"scenarios","url_custom":"preparing-to-play"},"contextdata":{},"name":"Preparing To Play","item_index":35,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":""}]}],"sections":[{"title":"","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"To play a game of Trench Crusade, you will need to recruit a Warband, find an opponent, and then decide which scenario you and your opponent want to play. If you\u2019re playing a campaign game, the scenario you will play will be determined using the rules."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"If you\u2019re playing a one-off game, you can choose which scenario you want to play; if you can\u2019t agree, roll-off and the winner can pick the scenario you will use. Once you\u2019ve chosen your scenario, the rules in this section will explain how to set up and play the game."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"When you are ready to play the scenario, you will need to bring along the models for the force you will use in the game, some terrain pieces, rules, dice and markers, and a copy of the rulebook."}]}]},{"title":"Scenario List","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"The rulebook includes the following scenarios. The scenarios provided here will be enough for months of play, and you can find more on the Trench Crusade website at www.trenchcrusade.com"}]},{"tags":{"desc_type":"rulestableofcontents"},"content":"Scenarios","subcontent":[{"tags":{"desc_type":"rulesbanner","url":"/compendium/scenario/claim-no-mans-land"},"content":"I Claim No Man\'s Land","subcontent":[]},{"tags":{"desc_type":"rulesbanner","url":"/compendium/scenario/hunt-for-heroes"},"content":"II Hunt For Heroes","subcontent":[]},{"tags":{"desc_type":"rulesbanner","url":"/compendium/scenario/relic-hunt"},"content":"III Relic Hunt","subcontent":[]},{"tags":{"desc_type":"rulesbanner","url":"/compendium/scenario/trench-warfare"},"content":"IV Trench Warfare","subcontent":[]},{"tags":{"desc_type":"rulesbanner","url":"/compendium/scenario/armoured-train"},"content":"V Armoured Train","subcontent":[]},{"tags":{"desc_type":"rulesbanner","url":"/compendium/scenario/dragon-hunt"},"content":"VI Dragon Hunt","subcontent":[]},{"tags":{"desc_type":"rulesbanner","url":"/compendium/scenario/supply-raid"},"content":"VII Supply Raid","subcontent":[]},{"tags":{"desc_type":"rulesbanner","url":"/compendium/scenario/sc_frombelow"},"content":"VIII From Below","subcontent":[]},{"tags":{"desc_type":"rulesbanner","url":"/compendium/scenario/sc_fieldsofglory"},"content":"IX Fields Of Glory","subcontent":[]},{"tags":{"desc_type":"rulesbanner","url":"/compendium/scenario/sc_dontbreathe"},"content":"X Don\'t Breathe","subcontent":[]},{"tags":{"desc_type":"rulesbanner","url":"/compendium/scenario/sc_thehighground"},"content":"XI The High Ground","subcontent":[]},{"tags":{"desc_type":"rulesbanner","url":"/compendium/scenario/great-war"},"content":"XII Great War","subcontent":[]}]}]}]},{"id":"gr_scenarioformat","source":"core","tags":{"order":"scenarios","url_custom":"scenario-format"},"contextdata":{},"name":"Scenario Format","item_index":36,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"A Trench Crusade scenario includes the following information."}]}],"sections":[{"title":"Game Map","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"The map for a scenario shows the Deployment Zones for each side and where to place any Markers that need to go at a specific location. All of these things are explained in more detail in the following rules."}]}]},{"title":"Forces","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Scenarios are fought with a selection of models from your Warband called a Force. The first thing you must do to play a game is to pick the models from your Warband that will make up your Force. In a one-off game, you will usually be able to use all of the models in your Warband, however, if you are playing a campaign game, your Force must conform to your Warband\u2019s Threshold Value and Field Strength."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Any further restrictions on what you can include in your Force, over and above those for Starting a Warband or your Warband\u2019s Threshold Value and Field Strength, will be noted in the instructions for the scenario. Once you\u2019ve chosen your Force, only the models in your Force are considered part of your Warband for the duration of the Scenario. For example, if a rule states you can do something if a model is part of your Warband, you can only use the rule in a game if you included the model in your Force."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"One-Off Games"}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"The Trench Crusade rules are written primarily for use in campaigns. However, they can also be used for one-off games that are not part of a campaign. In one-off games, you will need to agree on how many \ud83d\udc51 can be spent on your Warbands, and if you will allow the Warbands to use \u263c to purchase models, Mercenaries, or Battlekit."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"If you are new to Trench Crusade, we recommend using a 700 \ud83d\udc51  starting Warband for one-off games. This will allow you to count the game as the first game in a campaign should you wish to do so. Once you\u2019ve gained some experience, we\u2019ve found that 800 \ud83d\udc51  and 6 \u263c is a very good size for one-off games, offering plenty of choice without making the Warbands too large and unwieldy."}]}]},{"title":"The Battlefield","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"The next thing you need to do is set up the battlefield. Most scenarios can be played on a typical dining table, but some require a battlefield that is either 36\\" or 48\\" square."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Battlefield Archetypes"}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"The instructions here will explain which battlefield archetype is used for the scenario. Battlefield archetypes are explained in the Terrain Section of the book, which also includes instructions for setting the terrain pieces up for the game. Any additional instructions on how to set up the terrain pieces for the scenario will be included here. Note that unless stated otherwise, the terrain shown on the map is for illustrative purposes and does not need to be copied when you set up the terrain for the scenario."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Markers"}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Some scenarios will ask you to set up one or more Markers. When a Marker is set up in a specific location, its position is marked on the map with a white cross. If a Marker is set up at the \u2018Midpoint\u2019, it must be set up so that the centre of the Marker is at the centre of the Battlefield. You can use cardboard, wood or plastic counters, flags, or pieces of \u201cscattered terrain\u201d up to 40mm across as Markers. A Marker does not hinder movement or affect the Line of Sight unless it is a terrain piece. If a terrain piece covers the spot where a Marker is to be set up, place the Marker anywhere that it will stand on the terrain piece."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Blocking Terrain"}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"You are not allowed to set up terrain in such a way that it would make it impossible for any of the models being used for the game to either exit their Deployment Zone or reach a location where a Marker is to be placed. If you realise that you have accidentally set up blocking terrain once the game is underway, you must allow models that are blocked by it to cross as if it were Open terrain (it will still block Line of Sight)."}]}]},{"title":"Deployment","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Next, the players must deploy the models from their Forces. Unless stated otherwise, you must deploy all of the models from your Force. Models must be set up on the battlefield or in terrain that isn\u2019t Impassable."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Deployment Zones"}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"The map for the scenario you are using will show an area on the battlefield referred to as your Deployment Zone. This is where each player can deploy their models. When you are instructed to deploy a model or a terrain piece in your Deployment Zone, it must be deployed wholly within it. The instructions for the scenario will explain how the players pick which Deployment Zones they will use."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Infiltrators"}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Some models either have the INFILTRATOR Keyword or a special rule that allows them to deploy after other models and/or outside their side\u2019s Deployment Zone. The scenario will say whether these special deployment rules can be used or if the models must be deployed normally. If a scenario says that Infiltrators must deploy normally, then it means that no models can deploy outside their side\u2019s Deployment Zone. Note that when a rule says that a model is deployed \u2018after\u2019 other sorts of models, it means after all other models from both sides have been deployed. If both sides have models that deploy after other models, then any instructions in the deployment rules about the order in which models are deployed still apply.","glossary":[{"val":"INFILTRATOR","id":"kw_infiltrator"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Gameplay Example"}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"For example, if Gary has 9 models that include 1 infiltrator and Christina has 7 models that include 3 infiltrators, Gary and Christina would deploy the models that can\u2019t infiltrate first until Christina ran out of models. Gary would deploy the rest of their models that can\u2019t infiltrate one after the other. Then, Gary and Christina would deploy their infiltrators, starting with Christina because Gary deployed the last model."}]}]},{"title":"Special Rules","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Some scenarios include one or more special rules. When this is the case, they will be included after the Deployment instructions for the scenario."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Pre-Game Activities"}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Many Abilities, Skills, and Battlekit special rules allow you to take an action before the game begins. These are called Pre-Game Activities. Each pre-game activity will say when it takes place; if they say they take place \u201cbefore\u201d or \u201cafter\u201d something, they happen immediately before or after it. For example, if a rule allowed you to do something \u201cat the start of the game, before deployment\u201d, it would happen immediately before deployment was started. If several pre-game activities happen at the same time, then the players must roll-off and the winner decides what order they are resolved in."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Secret Information"}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"You will sometimes be required to secretly write down information during a game. For example, you might need to secretly write down which enemy models you have marked to be taken Out of Action during the game. When you record information like this, you must ensure that whatever you write down is legible and clearly explains the information it needs to convey. When the secret information is revealed during the game, you must show what you wrote down to your opponent."}]}]},{"title":"Game Length","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Once both sides have deployed, you are ready to start the game\u2019s first turn. The instructions here will explain how long the game lasts, generally stating a number of Turns."}]}]},{"title":"Victory Conditions","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"When the game ends, follow the instructions here to determine who has won."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Victory Points"}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"In most scenarios, Victory Points (sometimes referred to as VPs) are used to determine who wins and loses. If both players score the same number of Victory Points the game is a draw."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Each scenario includes a list of the Victory Points that can be scored by the players during the game, that says when and how they are scored. If Victory Points are scored at the end of each Turn, when the game ends, first score any Victory Points for the end of the final Turn, and then score any Victory Points that are only scored at the end of the game."}]}]}]},{"id":"gr_gloriousdeeds","source":"core","tags":{"order":"scenarios","url_custom":"glorious-deeds"},"contextdata":{},"name":"Glorious Deeds","item_index":37,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Each scenario has a unique set of Glorious Deeds that, when completed, award Victory Points. The number of Victory Points that are awarded will be included in the list of Victory Points for the scenario that is being played. Each Glorious Deed outlines a condition; the Glorious Deeds are completed as soon as the condition is met for the first time during a game."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Unless stated otherwise, each Glorious Deed can only be completed once, and whichever player completes a Deed first gets the glory! If both players complete the same Glorious Deed at the same time, roll-off to determine who completed the Glorious Deed first. Note that a single model can complete several Glorious Deeds at the same time."}]}],"sections":[{"title":"Conditions","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Every Glorious Deed has a title followed by a condition. The condition is what you must do to complete the Glorious Deed. For example, the Lord of War Glorious Deed has the condition that \u201cA friendly model takes two enemy models Out of Action with Melee Attacks in a single Turn.\u201d A model is considered to have achieved a condition if anything it does causes an outcome that completely satisfies the condition."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"For example, the Protect the Relic Glorious Deed has the condition that a model causes an enemy model within 1\\" of a Reliquary Marker to be taken Out of Action. If the enemy was near a ledge, and an attack by a model took them Down, and then they fell from the ledge and the Fall took them Out of Action, then the attacking model would complete the Protect the Relic Glorious Deed. This is because their attack caused the enemy model to be taken Out of Action."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"On the other hand, the Sniper Glorious Deed has the condition that a model must make a Ranged Attack at Long Range against a model that has the Cover modifier, and that the Ranged Attack must take the target Out of Action. If the target was near a ledge, and the attack took them Down, and then they fell from the ledge and the Fall took them Out of Action, then the attacking model would not complete the Sniper Glorious Deed because it was the Fall that took the enemy model Out of Action, not the Ranged Attack."}]}]},{"title":"Glory Points","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"If you are playing a campaign game, you will need to track which of your models completed Glorious Deeds during the game. Although a Glorious Deed can only be carried out once per game, it can be carried out several times in different games throughout a campaign."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Carrying out a Glorious Deed in a campaign allows you to do the following things after the game is finished:"}]},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"You get 1 \u263c, which you can spend to hire mercenaries or purchase Battlekit and Glory Items that have a Cost in \u263c instead of \ud83d\udc51."},{"tags":{"desc_type":"default"},"content":"Models with the ELITE Keyword that carry out one or more Glorious Deeds in a game receive 1 Experience Point. If a Glorious Deed is completed by a Warband or a player rather than a model (e.g. when a player wins the game), then no experience points are received for that Glorious Deed.","glossary":[{"val":"ELITE","id":"kw_elite"}]},{"tags":{"desc_type":"default"},"content":"Add 1 D6 to your Promotion Pool after the game for each Glorious Deed that was carried out."}]}]}]},{"id":"gr_choosingafaction","source":"core","tags":{"order":"starting_a_warband","url_custom":"choosing-a-faction"},"contextdata":{},"name":"Choosing a Faction","item_index":39,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"The first step in recruiting a Warband is choosing its Faction. Every Warband belongs to a Faction fighting in the Great War. A comprehensive Faction List has been provided, detailing all their models, their associated rules, and Battlekit options for each of the Factions you can use. Once you have selected your Faction (and Variant Warband if you want to use one), you can use its Faction List to recruit your warband."}]}],"sections":[{"title":"Alignment","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"All Warbands in this book are either Faithful or Fallen. Faithful Warbands are Heavenly-aligned and fight for the holy cause. Fallen Warbands are Hell-aligned and fight for the unholy cause. The Mercenaries that can be hired for a Warband will also have either Faithful or Fallen alignment. Unless stated otherwise, a Warband cannot include models of the opposing alignment."}]}]},{"title":"Variant Warbands","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"A Variant Warband represents a specialised force which has its own unique models, special rules, and Battlekit. Most Faction Lists include Variant Warbands, which can be found after the main Warband entries in the list."}]}]},{"title":"Warband Special Rules","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Sometimes, a Warband or a Warband Variant will have special rules. When this is the case, they will appear at the start of the Faction List or just after the description of the Warband Variant."}]}]}]},{"id":"gr_recruityourwarband","source":"core","tags":{"order":"starting_a_warband","url_custom":"recruit-your-warband"},"contextdata":{},"name":"Recruit Your Warband","item_index":40,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Once you have selected a Faction, you can start recruiting models. The cost to recruit a model will usually be shown in ducats (\ud83d\udc51). The Faction List will show how many \ud83d\udc51  you have to spend; usually, it will be 700 \ud83d\udc51. Each model you recruit has a specific cost in \ud83d\udc51, as does any Battlekit you choose to equip them with. The Faction List includes the cost in \ud83d\udc51  for all the models in the Faction, along with Armoury Tables that list the cost in \ud83d\udc51  of Battlekit options. (\u25b6 see the Trench Crusade Digital Rulebook)."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"As you make your choices, subtract the cost of each choice from your starting amount of \ud83d\udc51. You can continue spending until you have bought everything you can, or decide to stop. Any unspent \ud83d\udc51  are put into your Warband\u2019s Strongbox (to represent your in-game treasury) and the \ud83d\udc51  can be used later or hoarded to buy something more expensive."}]}],"sections":[{"title":"Glory Points","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Some models and pieces of Battlekit cost Glory Points (\u263c) instead of (\ud83d\udc51), \u263c are earned by performing valorous deeds in battle, as described in the Campaign section. Generally, Warbands don\u2019t have access to \u263c when they are first created, so you will probably have to wait until later on in a campaign to recruit any models that require them."}]}]},{"title":"Maximum Elites","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"A Warband can never include more than 6 models with the ELITE Keyword. This limit applies at all times, not just when the Warband is first recruited, and includes new models or Mercenaries that are recruited during a Campaign, and any models that are promoted to ELITE status during a Campaign.","glossary":[{"val":"ELITE","id":"kw_elite"}]}]}]},{"title":"Mercenaries","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"During the campaign you can use \u263c to purchase powerful troops and famous warriors known as Mercenaries. These will add both numbers and specialist abilities to your Warband. They cannot be purchased with \ud83d\udc51  \u2013 the only way to attract their services is to perform glorious deeds on the battlefield!"}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"The following special rules apply to Mercenaries:"}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Unlike standard troops, Mercenaries must be paid for with \u263c, reflecting the difficulty of securing their services. Their Cost is included in their Warband Entry list, along with information about which Factions can recruit them. Mercenaries can be recruited by any of the Warband Variants for the Factions they will work for, unless stated otherwise."}]},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Mercenaries do not benefit from the Faction Special Rules of your Warband, such as the New Antioch Concentrated Attack rule. They do benefit from abilities belonging to other members of the Warband that can affect friendly models unless stated otherwise."},{"tags":{"desc_type":"default"},"content":"Mercenaries\u2019 Battlekit cannot be removed or lost over the course of the campaign for any reason, and they cannot have any other Battlekit. The rules for any Battlekit that they have can be found in the standard Battlekit section (\u25b6 see Battlekit in the Trench Crusade Digital Rulebook) or is included in their Warband Entry. Note that the Injury Modifier for any Armour they have has been included in the model\u2019s Profile."},{"tags":{"desc_type":"default"},"content":"With the exception of their Battlekit, in a campaign, Mercenaries are treated in the same way as any other model in the Warband. For example, they count towards Threshold Limits and Field Strength, they can complete Glorious Deeds, you must roll on the Trauma Table for them if they are ELITE and taken Out of Action, they can be Promoted and gain Experience Points, and so on.","glossary":[{"val":"ELITE","id":"kw_elite"}]}]}]}]},{"id":"gr_warbandbattlekit","source":"core","tags":{"order":"starting_a_warband","url_custom":"warband-battlekit"},"contextdata":{},"name":"Warband Battlekit","item_index":41,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"When you recruit a model for your Warband, you can also purchase Battlekit for the model."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"The cost for the Battlekit that can be taken for a Warband can be found in the Armoury at the start of the Warband\u2019s Faction List. The Armoury includes an Armoury Table for each of the different types of Battlekit you can purchase, listing any special rules that apply to it and the cost in \ud83d\udc51  or \u263c."}]}],"sections":[{"title":"Armoury Stipulations","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Some pieces of Battlekit have special stipulations that affect how they are chosen and can be used. Any stipulations that apply to a piece of Battlekit are listed on the Armoury Table and its Weapon Profile. For example, a Bolt-Action Rifle has the Bayonet Lug stipulation. Stipulations have the following effects:"}]},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Bayonet Lug: "},{"tags":{"desc_type":"default"},"content":"Some Ranged Weapons have \u201c(Bayonet Lug)\u201d after their cost in \ud83d\udc51  on the Armoury Table. You must purchase a Ranged Weapon with a Bayonet Lug before you can purchase a Bayonet Melee Weapon for a model.","glossary":[{"val":"Bayonet Lug","id":"kw_bayonetlug"}]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Consumable: "},{"tags":{"desc_type":"default"},"content":"This Battlekit is removed from the Warband\u2019s Roster at the end of a game in which it is used.","glossary":[{"val":"Consumable","id":"kw_consumable"}]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"\\"X\\" Only; "},{"tags":{"desc_type":"default"},"content":"This Battlekit can only be purchased for models from the \u201cX\u201d Warband Entry, or that have the \u201cX\u201d Keyword. For example, a piece of Battlekit that has the \u201cDeath Commando only\u201d stipulation can only be given to Death Commando models. One that has the \u201cELITE only\u201d stipulation can only be given to models with the ELITE Keyword.","glossary":[{"val":"ELITE","id":"kw_elite"}]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Headgear: "},{"tags":{"desc_type":"default"},"content":"Some pieces of Battlekit have \u201c(Headgear)\u201d after their cost in \ud83d\udc51  on the Armoury Table. A model cannot have more than one piece of Headgear (even if it has more than one head!)."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Limit \\"X\\": "},{"tags":{"desc_type":"default"},"content":"Your Warband cannot have more than \u201cX\u201d pieces of the Battlekit. For example, if a Weapon has Limit: 2 after its cost, then you can have a maximum of two such Weapons for your whole Warband. If you lose any Limit \u201cX\u201d Battlekit over the course of a campaign, you can buy replacements for them.","glossary":[{"val":"Limit","id":"kw_limit"}]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Shield Combo: "},{"tags":{"desc_type":"default"},"content":"A model can have a Shield and a 2-Handed Weapon if both have the \u201cShield Combo\u201d stipulation.","glossary":[{"val":"Shield Combo","id":"kw_shieldcombo"}]}]}]}]},{"title":"What You See Is What You Get","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"We recommend that the Battlekit you choose for your models should be visibly represented on the models themselves, so that you and your opponent can tell at a glance what a model is equipped with. If, for any reason, you cannot do this, before the game starts, it is your duty to make sure that your opponent is fully aware of all of the Battlekit that the models in your Warband are carrying."}]}]},{"title":"Faction Battlekit","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"After the Armoury section in each Faction List, there is a section that has the Weapon Profiles and special rules for Battlekit available only to that Faction. Weapon Profiles and special rules for all other Battlekit options can be found in the standard Battlekit section of the rules (\u25b6 see Battlekit in the Trench Crusade Digital Rulebook)."}]}]}]},{"id":"gr_warbandentries","source":"core","tags":{"order":"starting_a_warband","url_custom":"warband-entries"},"contextdata":{},"name":"Warband Entries","item_index":42,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Each Faction List includes a Warband Entry for each model that can be recruited. Most Faction Lists include a model that must be taken when the Warband is created, usually representing the commander of the Warband (i.e. you!). They may also include some models that can only be taken in limited numbers. Aside from these exceptions, you can recruit as many or as few models as you wish, provided you do not spend more \ud83d\udc51  than you have."}]}],"sections":[{"title":"Warband Entry Information","description":[{"tags":{"desc_type":"paragraph"},"content":"Each Warband Entry includes the following information:","subcontent":[{"tags":{"desc_type":"default"},"content":""}]},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Model Name & Limits"},{"tags":{"desc_type":"default"},"content":"The name of the model and the number that can be included (or must be included) in the Warband."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Model Cost: "},{"tags":{"desc_type":"default"},"content":"The cost of the model in \ud83d\udc51"}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Description: "},{"tags":{"desc_type":"default"},"content":"A short description of the model and what it is capable of doing."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Profile: "},{"tags":{"desc_type":"default"},"content":"The Characteristics of the model:"},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Movement: "},{"tags":{"desc_type":"default"},"content":"The distance in inches that the model can be moved."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Ranged: "},{"tags":{"desc_type":"default"},"content":"Add this number of +/- DICE to the Success Roll when this model makes a Ranged Attack. If the Characteristic is \u201c - \u201d the model is not allowed to make Ranged Attacks.","glossary":[{"val":"+/","id":"kw_plusdice"},{"val":"- DICE","id":"kw_minusdice"}]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Melee: "},{"tags":{"desc_type":"default"},"content":"Add this number of +/- DICE to the Success Roll when this model makes a Melee Attack. If the Characteristic is \u201c - \u201d the model is not allowed to make Melee Attacks.","glossary":[{"val":"+/","id":"kw_plusdice"},{"val":"- DICE","id":"kw_minusdice"}]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Armour: "},{"tags":{"desc_type":"default"},"content":"Apply this INJURY MODIFIER to Injury Rolls made for attacks on this model.","glossary":[{"val":"INJURY MODIFIER","id":"kw_injurymodifier"}]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Base: "},{"tags":{"desc_type":"default"},"content":"The size of the base the model must be mounted on. If a model\'s Base Characteristic has a single number, the base is round and the number is its diameter. If a model\'s Base Characteristic has two numbers, the base is an oval, the smaller number is the width of the base, and the larger number is the length of the base."}]}]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Battlekit: "},{"tags":{"desc_type":"default"},"content":"The Battlekit that the model always starts with, and any other pieces of Battlekit that can be purchased for it. (Battlekit a model starts with is included in its cost.)"}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Abilities: "},{"tags":{"desc_type":"default"},"content":"If the model has any unique special abilities not covered by the Core and Comprehensive rules, they will be described here."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Keywords: "},{"tags":{"desc_type":"default"},"content":"Any Keywords the model has will be listed here."}]}]}]},{"title":"Purchasable Abilities or Upgrades","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Some Warbands allow you to purchase optional abilities, Keywords, or upgrades for your models, such as the Goetic Powers of the Court of the Seven-Headed Serpent. Unless otherwise specified, these abilities cannot be purchased more than once for the same model, and can only be purchased when a model is recruited for a Warband."}]}]}]}]'),l=JSON.parse('[{"id":"br_startingacampaign","source":"core","tags":{"url_custom":"starting-a-campaign"},"contextdata":{},"name":"Starting A Campaign","item_index":0,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"These rules govern playing a series of linked games with your friends. At least 2 players are required to complete a campaign, but the more players you can muster, the better! You can also play games against players who are not part of the campaign. Rules on how to do this are explained here."},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Beginning The Campaign"}]},{"tags":{"desc_type":"default"},"content":"At the beginning of a campaign, each player must first recruit a starting Warband. Once they have recruited their Warband, they must pick a Patron for it."}]}],"sections":[{"title":"Patrons","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Select a Patron for your Warband from this list. Your choice determines which skill you may select if you roll a Patron Skill result on any of the Skill Tables."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"rulesbanner","url":"/compendium/campaigns/patrons"},"content":"List of Patrons","subcontent":[]}]}]}]},{"id":"br_campaignsintroduction","source":"core","tags":{"order":"campaign_games","url_custom":"campaign-games"},"contextdata":{},"name":"Campaign Games","item_index":1,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Once you have picked your Warband\u2019s Patron, you are ready to start the campaign! A campaign is played by linking together the individual games that you play. You can play a campaign game against any of the other players that are taking part; all you need to do is arrange a time and place for the game, get together, and then select the scenario you are going to play, and then play the game using the normal rules. After the game you carry out a Campaign Phase where you find out the fate of models that were taken Out of Action, see if any models have gained new Skills, explore the region where the campaign is taking place, and use any loot you have captured to recruit more models for your Warband."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Once you have played 11 campaign games in total you can play no more until all the other players have played 11 games as well. Once all of the players have played 11 games, they must each play a final 12th game against one of the other players, using The Great War scenario. After all of the players have played 12 games in total, the winner of the campaign can be determined as described below."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"If the campaign has an odd number of players, then one of the players will need to play an extra 13th game against the odd player. The player who plays the extra game can choose to use the result of the 12th game or the result of the 13th game (not both!) when they work out their Campaign Victory Points."}]}],"sections":[{"title":"Winning The Campaign","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"In a campaign you score Campaign Victory Points for each game that you play:"}]},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"The winner of the game scores +15 Campaign Victory Points"},{"tags":{"desc_type":"paragraph"},"content":"The loser of the game scores +7 Campaign Victory Points"},{"tags":{"desc_type":"paragraph"},"content":"In a draw, both players score +10 Campaign Victory Points"}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Keep track of the Campaign Victory Points you have scored on your Warband Roster. At the end of the campaign, the player with the most Campaign Victory Points is the winner. In the case of a tie, all tied players are joint winners."}]}]},{"title":"Latecomers To Campaign","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Players may want to join a campaign that is already in progress. This is fine; the latecomer\u2019s Warband can be recruited using the Warband Threshold Value of the player who has played the most games in the campaign, and the latecomer also receives 4 Experience points for each game that the top player has played. These Experience points can be divided between ELITE models as the latecomer sees fit.","glossary":[{"val":"ELITE","id":"kw_elite"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"If you wish you can increase or lower the number of games that must be played before you reach the Final Battle Scenario; for example you might want to lower the number of games to 4 or 5, which will give you the chance to finish a campaign over the course of a single weekend, or increase it to 23 and say that each player must play 2 games a month, with the final battle taking place after a year of play!"}]}]}]},{"id":"br_selectingscenario","source":"core","tags":{"order":"campaign_games","url_custom":"selecting-a-scenario"},"contextdata":{},"name":"Selecting A Scenario","item_index":2,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"To determine which scenario you will use for a campaign game, count up how many games you have played in the campaign thus far, and then roll on the appropriate Campaign Scenario table below to pick the scenario that will be used. If one player has played more games than the other, then the greater number is used to decide which table to roll on."}]}],"sections":[{"title":"Pick & Choose Option","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Some scenarios require special terrain pieces or a large table, which the players may not always have available. Because of this, after randomly generating a scenario to play, if both players agree they can swap the scenario they rolled for another one from the same table."}]}]},{"title":"Scenario List Table","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Early Campaign (Battles 1-3)"},{"tags":{"desc_type":"headed_table"},"content":"","subcontent":[{"tags":{"desc_type":"table_headrow"},"content":"","subcontent":[{"tags":{"desc_type":"table_headitem"},"content":"Battle Number"},{"tags":{"desc_type":"table_headitem"},"content":"Scenario"}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"1"},{"tags":{"desc_type":"table_item"},"content":"","subcontent":[{"tags":{"desc_type":"link","url":"/compendium/scenario/claim-no-mans-land"},"content":"Claim No Man\'s Land"}]}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"2"},{"tags":{"desc_type":"table_item"},"content":"","subcontent":[{"tags":{"desc_type":"link","url":"/compendium/scenario/hunt-for-heroes"},"content":"Hunt for Heroes"}]}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"3"},{"tags":{"desc_type":"table_item"},"content":"","subcontent":[{"tags":{"desc_type":"link","url":"/compendium/scenario/sc_thehighground"},"content":"The High Ground"}]}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"4"},{"tags":{"desc_type":"table_item"},"content":"","subcontent":[{"tags":{"desc_type":"link","url":"/compendium/scenario/relic-hunt"},"content":"Relic Hunt"}]}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"5"},{"tags":{"desc_type":"table_item"},"content":"","subcontent":[{"tags":{"desc_type":"link","url":"/compendium/scenario/supply-raid"},"content":"Supply Raid"}]}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"6"},{"tags":{"desc_type":"table_item"},"content":"The player who has played fewer games chooses one of the Scenarios listed above. If tied, roll-off and the winner chooses."}]}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Mid Campaign (Battles 4-8)"},{"tags":{"desc_type":"headed_table"},"content":"","subcontent":[{"tags":{"desc_type":"table_headrow"},"content":"","subcontent":[{"tags":{"desc_type":"table_headitem"},"content":"Battle Number"},{"tags":{"desc_type":"table_headitem"},"content":"Scenario"}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item"},"content":"1"},{"tags":{"desc_type":"table_item"},"content":"","subcontent":[{"tags":{"desc_type":"link","url":"/compendium/scenario/hunt-for-heroes"},"content":"Hunt for Heroes"}]}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item"},"content":"2"},{"tags":{"desc_type":"table_item"},"content":"","subcontent":[{"tags":{"desc_type":"link","url":"/compendium/scenario/armoured-train"},"content":"Armoured Train"}]}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item"},"content":"3"},{"tags":{"desc_type":"table_item"},"content":"","subcontent":[{"tags":{"desc_type":"link","url":"/compendium/scenario/trench-warfare"},"content":"Trench Warfare"}]}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item"},"content":"4"},{"tags":{"desc_type":"table_item"},"content":"","subcontent":[{"tags":{"desc_type":"link","url":"/compendium/scenario/claim-no-mans-land"},"content":"Claim No Man\'s Land"}]}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item"},"content":"5"},{"tags":{"desc_type":"table_item"},"content":"","subcontent":[{"tags":{"desc_type":"link","url":"/compendium/scenario/dragon-hunt"},"content":"Dragon Hunt"}]}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item"},"content":"6"},{"tags":{"desc_type":"table_item"},"content":"The player who has played fewer games chooses one of the Scenarios listed above. If tied, roll-off and the winner chooses."}]}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Endgame (Battles 9-11)"},{"tags":{"desc_type":"headed_table"},"content":"","subcontent":[{"tags":{"desc_type":"table_headrow"},"content":"","subcontent":[{"tags":{"desc_type":"table_headitem"},"content":"Battle Number"},{"tags":{"desc_type":"table_headitem"},"content":"Scenario"}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item"},"content":"1"},{"tags":{"desc_type":"table_item"},"content":"","subcontent":[{"tags":{"desc_type":"link","url":"/compendium/scenario/trench-warfare"},"content":"Trench Warfare"}]}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item"},"content":"2"},{"tags":{"desc_type":"table_item"},"content":"","subcontent":[{"tags":{"desc_type":"link","url":"/compendium/scenario/dragon-hunt"},"content":"Dragon Hunt"}]}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item"},"content":"3"},{"tags":{"desc_type":"table_item"},"content":"","subcontent":[{"tags":{"desc_type":"link","url":"/compendium/scenario/sc_frombelow"},"content":"From Below"}]}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item"},"content":"4"},{"tags":{"desc_type":"table_item"},"content":"","subcontent":[{"tags":{"desc_type":"link","url":"/compendium/scenario/sc_fieldsofglory"},"content":"Fields of Glory"}]}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item"},"content":"5"},{"tags":{"desc_type":"table_item"},"content":"","subcontent":[{"tags":{"desc_type":"link","url":"/compendium/scenario/sc_dontbreathe"},"content":"Don\'t Breathe"}]}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item"},"content":"6"},{"tags":{"desc_type":"table_item"},"content":"The player who has played fewer games chooses one of the Scenarios listed above. If tied, roll-off and the winner chooses."}]}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Final Battle"},{"tags":{"desc_type":"headed_table"},"content":"","subcontent":[{"tags":{"desc_type":"table_headrow"},"content":"","subcontent":[{"tags":{"desc_type":"table_headitem"},"content":"Battle Number"},{"tags":{"desc_type":"table_headitem"},"content":"Scenario"}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item"},"content":"12"},{"tags":{"desc_type":"table_item"},"content":"","subcontent":[{"tags":{"desc_type":"link","url":"/compendium/scenario/great-war"},"content":"The Great War"}]}]}]}]}]}]},{"id":"br_campaignforces","source":"core","tags":{"order":"campaign_games","url_custom":"campaign-forces"},"contextdata":{},"name":"Campaign Forces","item_index":3,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"The models you use in a campaign game are called a Force. Sometimes you will use all of the models in your Warband as your Force, but sometimes the Threshold Value and Field Strength of your Warband will mean you cannot use all of the models you have available."}]}],"sections":[{"title":"Warband Threshold Value & Field Strength","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"As you play the campaign, word of your Warband\u2019s deeds on the battlefield spreads and attracts the attention of your superiors who will allocate more troops and resources to your disposal, and make greater reinforcements available to you. This is represented by your Warband\u2019s Threshold Value and Field Strength. Note that when your Warband\u2019s Threshold Value and Field Strength rises, you are not automatically granted any additional troops or equipment. You must either call for Reinforcements or recruit more models for your Warband."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Threshold Values: "},{"tags":{"desc_type":"default"},"content":"Your Warband\u2019s Threshold Value is shown on the Warband Threshold Table below, and increases after each game that you play. The total Cost of all the models you use for a Force (including Battlekit, upgrades that are paid for in \ud83d\udc51, and any discounts they receive to their Cost) must be less than or equal to your Warband\u2019s Threshold Value."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Field Strength: "},{"tags":{"desc_type":"default"},"content":"Your Warband\u2019s Field Strength is shown on the Warband Threshold Table below, and increases after each game that you play. When you play a Campaign game, the number of models you include in your Force cannot be greater than your Warband\u2019s Field Strength. If a Scenario limits the number of models that can be used by one or both sides, and the limit is less than your Field Strength, then limit from the Scenario takes precedence over Field Strength and is used instead of it. When you\u2019re working out the number of models in your Warband, only include models that have a Warband Entry; models that represent pieces of Battlekit or a Glory Item are not included."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Your Warband\u2019s Threshold Value and/or its Field Strength may mean that you cannot take all of the models that are on your Warband Roster. When this is the case any models you do not use will have to sit the game out; they will not earn any experience and cannot influence the game in any way."}]}]},{"title":"Warband Threshold Table","description":[{"tags":{"desc_type":"headed_table"},"content":"","subcontent":[{"tags":{"desc_type":"table_headrow"},"content":"","subcontent":[{"tags":{"desc_type":"table_headitem"},"content":"Game"},{"tags":{"desc_type":"table_headitem"},"content":"Threshold Value"},{"tags":{"desc_type":"table_headitem"},"content":"Field Strength"}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item"},"content":"1"},{"tags":{"desc_type":"table_item"},"content":"700"},{"tags":{"desc_type":"table_item"},"content":"10"}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item"},"content":"2"},{"tags":{"desc_type":"table_item"},"content":"800"},{"tags":{"desc_type":"table_item"},"content":"11"}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item"},"content":"3"},{"tags":{"desc_type":"table_item"},"content":"900"},{"tags":{"desc_type":"table_item"},"content":"12"}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item"},"content":"4"},{"tags":{"desc_type":"table_item"},"content":"1000"},{"tags":{"desc_type":"table_item"},"content":"13"}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item"},"content":"5"},{"tags":{"desc_type":"table_item"},"content":"1100"},{"tags":{"desc_type":"table_item"},"content":"14"}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item"},"content":"6"},{"tags":{"desc_type":"table_item"},"content":"1200"},{"tags":{"desc_type":"table_item"},"content":"15"}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item"},"content":"7"},{"tags":{"desc_type":"table_item"},"content":"1300"},{"tags":{"desc_type":"table_item"},"content":"16"}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item"},"content":"8"},{"tags":{"desc_type":"table_item"},"content":"1400"},{"tags":{"desc_type":"table_item"},"content":"17"}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item"},"content":"9"},{"tags":{"desc_type":"table_item"},"content":"1500"},{"tags":{"desc_type":"table_item"},"content":"18"}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item"},"content":"10"},{"tags":{"desc_type":"table_item"},"content":"1600"},{"tags":{"desc_type":"table_item"},"content":"19"}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item"},"content":"11"},{"tags":{"desc_type":"table_item"},"content":"1700"},{"tags":{"desc_type":"table_item"},"content":"20"}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item"},"content":"12"},{"tags":{"desc_type":"table_item"},"content":"1800"},{"tags":{"desc_type":"table_item"},"content":"22"}]}]}]}]},{"id":"br_gloriousdeeds","source":"core","tags":{"order":"campaign_games","url_custom":"glorious-deeds"},"contextdata":{},"name":"Glorious Deeds","item_index":4,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Every Trench Crusade scenario includes a list of Glorious Deeds that can be carried out by a model during the game. In a Campaign, you should keep track of which of your models have carried out any Glorious Deeds in each game. Each Glorious Deed can only be carried out once per game, but can be carried out several times in different games over the course of a campaign."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Carrying out a Glorious Deed does 4 things:"}]},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"You receive 1 Victory Point towards deciding which side wins the game."},{"tags":{"desc_type":"default"},"content":"Models with the ELITE Keyword that carry out any Glorious Deeds receive 1 Experience Point.","glossary":[{"val":"ELITE","id":"kw_elite"}]},{"tags":{"desc_type":"default"},"content":"You gain 1 \u263c"},{"tags":{"desc_type":"default"},"content":"You can add 1 D6 to your Promotion Pool after the game for each Glorious Deed that was carried out."}]}],"sections":[{"title":"Glory Points","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Each time you carry out a Glorious Deed in a Campaign, your Warband gains 1 \u263c. The more \u263c your Warband has, the greater its reputation and fame. Record the \u263c your Warband gains in the \u263c box on your Warband Roster."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"You can spend \u263c in the Quartermaster Step of the Campaign Phase to purchase Battlekit or models from your Faction List that have a Cost in \u263c rather than \ud83d\udc51. You can also spend\u263c in the Quartermaster step to purchase Glory Items for your Warband (\u25b6 see Purchase Glory Items) or recruit Mercenaries for your Warband (\u25b6 see Mercenaries in Warbands of Trench Crusade)."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Adjust the number of \u263c you have on your Warband Roster to reflect how many points you spent. For example, if you had 5 \u263c on your roster and spent 3, you must adjust the number of \u263c on your roster to show that you only have 2 \u263c left."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Note that you do not have to spend all of your \u263c in the Quartermaster Step, and can hold onto some or all of your \u263c if you wish to. Doing this will allow you to save them up, so you can purchase an especially expensive and valuable item or model in a future Campaign Phase."}]}]},{"title":"One-Off Games","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Glory Points are usually earned as part of a Campaign and spent in the Quartermaster Step. However, if you and your opponent have decided to play a one-off game, you can agree to allow the use of \u263c when you create the Warband for the one-off game."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"If you do so, the \u263c can be used in the same way as they would in the Quartermaster step, and can be spent to include Battlekit or models that have a Cost in \u263c, or to include Mercenaries."}]}]}]},{"id":"br_campaignphases","source":"core","tags":{"order":"campaign_phases","url_custom":"campaign-phase"},"contextdata":{},"name":"Campaign Phase","item_index":5,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"When you finish a Campaign game, you and your opponent must carry out a Campaign Phase. During the Campaign Phase you will find out what happened to any models from your Warband that were taken Out of Action during the game and if any models have earned Promotions or learned new Skills. You also get the chance to explore the territory near the Battlefield in search of loot, buy new Battlekit, and recruit new models into your Warband."}]}],"sections":[{"title":"","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"To carry out a Campaign Phase you must go through the following Campaign Phase Steps in the order that they appear below:"}]},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Trauma Step: "},{"tags":{"desc_type":"default"},"content":"Check to see what has happened to any models that were taken Out of Action during the game."},{"tags":{"desc_type":"rulesbanner","url":"/compendium/campaigns/campaign-rules/trauma-step"},"content":"Trauma Step","subcontent":[]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Promotions & Experience Step: "},{"tags":{"desc_type":"default"},"content":"Promote models, record Experience Points and check to see if any models in your Warband have learnt new Skilla."},{"tags":{"desc_type":"rulesbanner","url":"/compendium/campaigns/campaign-rules/promotions-step"},"content":"Promotions Step","subcontent":[]},{"tags":{"desc_type":"rulesbanner","url":"/compendium/campaigns/campaign-rules/experience-step"},"content":"Experience Step","subcontent":[]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Reinforcements Step (Optional): "},{"tags":{"desc_type":"default"},"content":"If your Warband has suffered heavy losses, you can call for reinforcements. However, if you do so you will not be able to Explore or visit the Quartermaster, so it is not a decision to be taken lightly."},{"tags":{"desc_type":"rulesbanner","url":"/compendium/campaigns/campaign-rules/reinforments-step"},"content":"Reinforcements Step","subcontent":[]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Exploration Step: "},{"tags":{"desc_type":"default"},"content":"Roll to see what your Warband discovers in the area they are currently occupying."},{"tags":{"desc_type":"rulesbanner","url":"/compendium/campaigns/campaign-rules/exploration-step"},"content":"Exploration Step","subcontent":[]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Quartermaster Step: "},{"tags":{"desc_type":"default"},"content":"You can add new recruits to your Warband, hire Mercenaries, and sell, purchase and reallocate the Battlekit for your Warband."},{"tags":{"desc_type":"rulesbanner","url":"/compendium/campaigns/campaign-rules/quartermaster-step"},"content":"Quartermaster Step","subcontent":[]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Roster Step: "},{"tags":{"desc_type":"default"},"content":"Update your Warband Roster. You are now ready for the next game!"}]}]}]},{"title":"Disbanding A Warband","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"You may disband your Warband at the end of any game and start again with a completely new one. Start your new Warband as if you were a latecomer to the Campaign"}]}]}]},{"id":"br_trauma","source":"core","tags":{"order":"campaign_phases","url_custom":"trauma-step"},"contextdata":{},"name":"Trauma Step","item_index":6,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"In this step of the Campaign Phase you must find out what happened to models that were taken Out of Action during the game. If the model is ELITE this determines what Injuries they sustained. For other models this determines whether or not they die from their wounds. If injuries result in a model being removed from your Warband Roster, all of its Battlekit is lost unless stated otherwise.","glossary":[{"val":"ELITE","id":"kw_elite"}]}]}],"sections":[{"title":"Troops","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Troops are any models in your Warband that do not have the ELITE Keyword. You must make a Survival Roll for each Troop model from your Warband that was taken Out of Action during a game by rolling a D6. On a roll of 1-2, they are dead or very badly wounded, and you must remove them from your Warband Roster. On a roll of 3 or more, they survived the battle and can fight on as normal.","glossary":[{"val":"ELITE","id":"kw_elite"}]}]}]},{"title":"Elite Models","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"After rolling for any Troops, you must make a D66 roll for any ELITE models from your Warband that were taken Out of Action during the game. A D66 roll is made by rolling two D6s, one after the other, counting the first roll as tens and the second roll as units. For example, if you rolled a 3 followed by a 4, the D66 roll would be 34. Look up the D66 roll on the Trauma Table to see what Injury the model has suffered (if any).","glossary":[{"val":"ELITE","id":"kw_elite"}]}]}]},{"title":"Models Killed In Action","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"When a model is killed all its Battlekit is lost in the ruinous tumult of the battlefield. It is not possible to reallocate fallen warriors\u2019 Battlekit once they die."}]}]},{"title":"Battle Scars","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Unless stated otherwise, each time an ELITE model is taken Out of Action, they receive a Battle Scar. Mark the number of Battle Scars a model has received on your Warband Roster.","glossary":[{"val":"ELITE","id":"kw_elite"}]}]}]},{"title":"Unfit For Duty","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"When a model receives their third Battle Scar, the cumulative effect of their injuries makes them unfit for further combat duty and they are sent back home. Remove the model from your Warband Roster. You can add their Battlekit and Glory Items to the Arsenal on your Warband Roster, unless it has a rule that says it cannot be removed from the model.","glossary":[{"val":"ELITE","id":"kw_elite"}]}]}]},{"title":"Recording Injuries & Battle Scars","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"You must record the Injuries and Battle Scars suffered by the models in your Warband on your Warband Roster. Unless stated otherwise a model can only suffer each type of Injury once. If a model receives the same Injury a second time, make the D66 roll for the model again until you roll a result on the Trauma Table that can be used."}]}]}]},{"id":"br_promotions","source":"core","tags":{"order":"campaign_phases","url_custom":"promotions-step"},"contextdata":{},"name":"Promotions Step","item_index":7,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"In a campaign you can Promote the Troops in your Warband up to ELITE status, by using the following rules. Troops are any models in your Warband that do not have the ELITE Keyword.","glossary":[{"val":"ELITE","id":"kw_elite"}]}]}],"sections":[{"title":"The Promotion Pool","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"To see how many Troop models you are allowed to Promote, you must first create a Promotion Dice Pool. The Promotion Dice are assigned to Troop models in your Warband, and if at least one of them rolls a 6, then the model is Promoted and gains the ELITE Keyword.","glossary":[{"val":"ELITE","id":"kw_elite"}]},{"tags":{"desc_type":"default"},"content":"Your Promotion Dice Pool is made up of 1D6, plus 1D6 for each Glorious Deed that was carried out during the game by any model from your Warband. Note that the Glorious Deeds can have been carried out by any model in your Warband, not just Troops models. In addition, some Skills and Glory Items allow you to add more dice to the Promotion Dice Pool."}]}]},{"title":"Assign Promotion Dice","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"After you have filled the Promotion Dice Pool, you must assign the dice in the pool to the Troop models in your Warband that can be Promoted. You cannot assign a 3rd dice to the same model until all Troop models in your Warband have at least 2 dice each, or assign a 4th dice until all Troop models have at least 3 dice each, and so on. Any Promotion Dice not assigned are lost."}]}]},{"title":"Roll Promotion Dice","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Next you must roll the Promotion Dice you have assigned to your models. Roll the dice you assigned to a model one at a time, in any order that you choose. As soon as one of the dice rolls a \u201c6\u201d, stop rolling for that model, and Promote the model you were rolling for as described next. Then roll for the next model you assigned Promotion Dice to, and so on. If you roll all of the dice without a model being Promoted, then make a note on your Roster of how many dice you have rolled in a row without getting a Promotion. Once the total reaches 5 dice, then the next roll (the 6th one), is automatically considered to be a 6."}]}]},{"title":"Promoting A Troop","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"When a Troop model receives a Promotion, they immediately gain the ELITE Keyword and they are considered to be an Elite model from then on, including for the rest of the Promotions and Experience Step. Cross out their old entry on your Warband Roster and write a new one for them in the Elite Models section. They begin with 0 Experience Points, but will gain at least 1 due to surviving the game after which they were Promoted.","glossary":[{"val":"ELITE","id":"kw_elite"}]}]}]},{"title":"Maximum Elites","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Ignore the Promotion step completely if there are already 6 or more models with the ELITE Keyword in your Warband at the start of the Promotions & Experience Phase, and stop rolling for Promotions when a successful Promotion Roll means that you have 6 models with the ELITE Keyword in your Warband.","glossary":[{"val":"ELITE","id":"kw_elite"}]}]}]},{"title":"Units Which Cannot Be Promoted","description":[{"tags":{"desc_type":"paragraph"},"content":"Not all of the models in your Warband can be Promoted. This could be due to their inherent limitations, being machines, lack of access to training and/or necessary equipment, and so on. The following models cannot be Promoted to ELITE status."},{"tags":{"desc_type":"headless_table"},"content":"","subcontent":[{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"NEW ANTIOCH"}]},{"tags":{"desc_type":"table_item"},"content":"-"}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"IRON SULTANATE"}]},{"tags":{"desc_type":"table_item"},"content":"-"}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"HERETIC LEGION"}]},{"tags":{"desc_type":"table_item"},"content":"The Wretched, War Wolf Assault Beast"}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"BLACK GRAIL"}]},{"tags":{"desc_type":"table_item"},"content":"Grail Thralls, Fly Thralls, Amalgam, Grail Hounds"}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"TRENCH PILGRIMS"}]},{"tags":{"desc_type":"table_item"},"content":"Ecclesiastic Prisoners, Anchorite Shrine"}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"THE COURT"}]},{"tags":{"desc_type":"table_item"},"content":"Yoke Fiends, The Wretched"}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"ALLIES"}]},{"tags":{"desc_type":"table_item"},"content":"Note that Allies & Mercenaries cannot become ELITE unless otherwise noted in the rules. Note that models such as Goetic Warlock and Combat Medic that are bought as part of the Warband List can be promoted and can claim ELITE status.","glossary":[{"val":"ELITE","id":"kw_elite"}]}]}]}],"content":[]},{"title":"Limited Potential","description":[{"tags":{"desc_type":"paragraph"},"content":"Some models have a limited capacity to gain Experience and learn new Skills. They might be too bestial, have limited intelligence or their utmost potential might be supernaturally limited. The following models cannot have more than 7 Experience Points."},{"tags":{"desc_type":"headless_table"},"content":"","subcontent":[{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"NEW ANTIOCH"}]},{"tags":{"desc_type":"table_item"},"content":"-"}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"IRON SULTANATE"}]},{"tags":{"desc_type":"table_item"},"content":"Brazen Bull, Lions of Jabir, Homunculi (House of Wisdom)"}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"HERETIC LEGION"}]},{"tags":{"desc_type":"table_item"},"content":"Artillery Witch"}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"BLACK GRAIL"}]},{"tags":{"desc_type":"table_item"},"content":"-"}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"TRENCH PILGRIMS"}]},{"tags":{"desc_type":"table_item"},"content":"Communicant"}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"THE COURT"}]},{"tags":{"desc_type":"table_item"},"content":"Desecrated Saint, Pit Locust"}]}]}],"content":[]}]},{"id":"br_experience","source":"core","tags":{"order":"campaign_phases","url_custom":"experience-step"},"contextdata":{},"name":"Experience Step","item_index":8,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"After making any Promotions, each ELITE model that took part in a game and survived will gain 1 Experience Point, even if they were taken Out of Action. Any ELITE model that performed at least one Glorious Deed gains a second Experience Point (no matter how many Glorious Deeds they carried out).","glossary":[{"val":"ELITE","id":"kw_elite"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Record the Experience Points the ELITE models in your Warband have earned on your Roster Sheet, by checking off one Experience box per point, from left to right, starting with the top row; when you reach a box that is a circle, you can make an Advancement Roll for the model.","glossary":[{"val":"ELITE","id":"kw_elite"}]}]}],"sections":[{"title":"Advancement Rolls","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"To make an Advancement Roll for a model, you must do the following things:"}]},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Pick two of the Skill Tables to roll on."},{"tags":{"desc_type":"default"},"content":"Roll 2D6 for each of the tables, and look up the roll to see which Skills are available for the model to learn.","subcontent":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"If you roll a Skill that the model already has, use the next lowest Skill from the table that the model does not have instead. If the model has all of the lower Skills from the table, use the next highest one."},{"tags":{"desc_type":"default"},"content":"If a Patron skill is rolled, use one of the Patron skills for the Patron you picked for your Warband."}]}]},{"tags":{"desc_type":"default"},"content":"Pick one of the two Skills for the model to learn and record it for the model on your Warband Roster."}]}]},{"title":"Skill Tables","description":[{"tags":{"desc_type":"rulesbanner","url":"/compendium/campaigns/skills"},"content":"Available Skills","subcontent":[]}]}]},{"id":"br_reinforcements","source":"core","tags":{"order":"campaign_phases","url_custom":"reinforments-step"},"contextdata":{},"name":"Reinforcements Step","item_index":9,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"In the Reinforcements Step you have the option to Call for Reinforcements if you feel that the losses you have suffered have left you with too few models to field a viable Force in your next game."}]}],"sections":[{"title":"Reinforcements Sequence","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Calling for Reinforcements is not to be taken lightly. When you do so, you must work through the following Exploration Sequence:"}]},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Discard any Battlekit that you have in the Arsenal on your Warband Roster. It is abandoned when you fall back."},{"tags":{"desc_type":"default"},"content":"Reduce the number of \ud83d\udc51  in your Strongbox to zero. They are used to pay for favors to ensure that the reinforcements you receive are of the best quality."},{"tags":{"desc_type":"default"},"content":"Once you\u2019ve done this, calculate the total Cost of all the models in your Warband (including their Battlekit and any other upgrades that are paid for in \ud83d\udc51 )."},{"tags":{"desc_type":"default"},"content":" Subtract the Total Cost of your Warband from the Threshold Value of the next game you will play. The difference is the number of \ud83d\udc51  you can spend to recruit new models to your Warband. For example, if the Total Cost of your Warband was 635, and the Threshold Value for the next game was 1,000, you can spend up to 365 \ud83d\udc51  on the reinforcements for your Warband. Reinforcement models are recruited in the same ways as the starting models in your Warband, and can have any Battlekit that they are allowed to take and you can afford to pay for, and can be used to create new Fireteams."},{"tags":{"desc_type":"default"},"content":"Any \ud83d\udc51  you do not spend on reinforcements are lost, and you cannot add any Battlekit to your Warbands Arsenal (both will start the next game empty)."},{"tags":{"desc_type":"default"},"content":"If you Call for Reinforcements, you must forego the Exploration Step and Quartermaster Step completely. Go directly to the Roster Step."}]}]}]},{"id":"br_exploration","source":"core","tags":{"order":"campaign_phases","url_custom":"exploration-step"},"contextdata":{"url_custom":"campaign-exploration"},"name":"Exploration Step","item_index":10,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"In this step you get the chance to explore the territory over which the campaign is taking place. Doing so gives you the chance to make important discoveries and collect valuable loot."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"In order to Explore, you must work through the following Exploration Sequence:"}]},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Determine the number of Exploration Dice you receive."},{"tags":{"desc_type":"default"},"content":"Roll the Exploration Dice."},{"tags":{"desc_type":"default"},"content":"Use Allies, Equipment, and Exploration Skills to modify the Exploration Roll."},{"tags":{"desc_type":"default"},"content":"Consult the Exploration Table to see what you have discovered."},{"tags":{"desc_type":"default"},"content":"Collect loot equal to 10 times your Exploration Roll in \ud83d\udc51."}]}],"sections":[{"title":"Determine Exploration Dice","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"The number of Exploration Dice you receive depends on the number of games you have played in the campaign so far, as shown below."}]},{"tags":{"desc_type":"headed_table"},"content":"","subcontent":[{"tags":{"desc_type":"table_headrow"},"content":"","subcontent":[{"tags":{"desc_type":"table_headitem"},"content":"Games Played"},{"tags":{"desc_type":"table_headitem"},"content":"Exploration Dice"}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"1-2"},{"tags":{"desc_type":"table_item"},"content":"3 Exploration Dice"}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"3-5"},{"tags":{"desc_type":"table_item"},"content":"4 Exploration Dice"}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"6-9"},{"tags":{"desc_type":"table_item"},"content":"5 Exploration Dice"}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"10+"},{"tags":{"desc_type":"table_item"},"content":"6 Exploration Dice"}]}]}]},{"title":"Roll Exploration Dice","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Next you need to roll all of the Exploration Dice you received and add them altogether. If you wish, you can re-roll one of the Exploration Dice, and if you won the game that was just played you are allowed to reroll another Exploration Dice (you can\u2019t re-roll the same Exploration Dice twice)."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"For example, it is your third game so you roll 4 Exploration Dice getting 5, 3, 1, 1; you won the game so you can re-roll the two 1s, getting a 4 and a 5, giving you an Exploration Roll of (5+5+4+3) = 17!"}]}]},{"title":"Modify Exploration Roll","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"After making your Exploration Roll, you can use any Mercenaries, pieces of Battlekit and Exploration Skills that you have to modify the roll. The rules for each of these things will explain if you can use them to modify an Exploration Roll and how they effect it."}]}]},{"title":"Consult Exploration Table","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"After you have modified the Exploration Roll, consult the appropriate Exploration Table to see if you have made a discovery. The Exploration Table you must use is determined by the number of games you have played in the campaign so far, as shown on the following table. If you roll a number that is not included on the Exploration Table, then you discover nothing (but you still use the roll to determine how much Loot you collect as described below). Record the Locations you discover in the War Journal on your Warband Roster. You can discover a Location only once during the Campaign; if you discover it again, treat the roll as a Pillaged result instead (i.e. you discover nothing). Note that the same Location can be discovered by more than one player in the Campaign, but not more than once by the same player."}]},{"tags":{"desc_type":"headed_table"},"content":"","subcontent":[{"tags":{"desc_type":"table_headrow"},"content":"","subcontent":[{"tags":{"desc_type":"table_headitem"},"content":"Games Played"},{"tags":{"desc_type":"table_headitem"},"content":"Possible Locations"}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"1-2"},{"tags":{"desc_type":"table_item"},"content":"","subcontent":[{"tags":{"desc_type":"link","url":"/compendium/campaigns/exploration-locations/common-locations"},"content":"Common Exploration Locations"}]}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"3-5"},{"tags":{"desc_type":"table_item"},"content":"","subcontent":[{"tags":{"desc_type":"link","url":"/compendium/campaigns/exploration-locations/common-locations"},"content":"Common "},{"tags":{"desc_type":"default"},"content":" or "},{"tags":{"desc_type":"link","url":"/compendium/campaigns/exploration-locations/rare-locations"},"content":"Rare Exploration Locations"}]}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"6-9"},{"tags":{"desc_type":"table_item"},"content":"","subcontent":[{"tags":{"desc_type":"link","url":"/compendium/campaigns/exploration-locations/rare-locations"},"content":"Rare Exploration Locations"}]}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item_wrap"},"content":"10+"},{"tags":{"desc_type":"table_item"},"content":"","subcontent":[{"tags":{"desc_type":"link","url":"/compendium/campaigns/exploration-locations/rare-locations"},"content":"Rare"},{"tags":{"desc_type":"default"},"content":" or "},{"tags":{"desc_type":"link","url":"/compendium/campaigns/exploration-locations/legendary-locations"},"content":"Legendary Exploration Locations"}]}]}]}]},{"title":"Discoveries","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"When you look up your roll on the Exploration Table, you will often discover pieces of Battlekit and Glory Items that you can add to the Arsenal on your Warband Roster. Things that you discover like this are always \u201cfree\u201d and do not cost you any \ud83d\udc51  or \u263c. You can distribute them to models in your Warband in the following Quartermaster Step if you wish to do so, or choose to sell them or keep them in the Arsenal for later use."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Note that any stipulations still apply to Battlekit or Glory Items that are discovered, unless stated otherwise. For example, you could not take a piece of Equipment with a Limit of 0-1 if your Warband already had one, and you could not take a Glory Item that Warbands from your Faction cannot use. Also note that if a discovery allows you to take Battlekit that is worth a certain number of \ud83d\udc51 , you cannot take anything that has a cost in \u263c, or vice-versa."}]}]},{"title":"Collecting Loot","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"You can now collect Loot from the battlefield by scavenging, foraging, selling broken weapons and armour to traders, receiving the regular pay from their Patron, hunting, and so on. The value of the Loot you find is equal to your Exploration Roll times 10 in \ud83d\udc51 . Add the loot to your Strongbox."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"For example, if your Exploration Roll was 12, you would add 120 \ud83d\udc51  to your Strongbox from Looting."}]}]},{"title":"Exploration Skills","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"During a campaign, your Warband may gain one or more of the following Exploration Skills, either by hiring allies, making useful discoveries, or having the right piece of Equipment. Record the Exploration Skills you have gained on your Warband Roster. You can have multiples of any of the Exploration Skills on the list (found alongside other skill lists in the compendium)."}]}]}]},{"id":"br_quartermaster","source":"core","tags":{"order":"campaign_phases","url_custom":"quartermaster-step"},"contextdata":{},"name":"Quartermaster Step","item_index":11,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"In the Quartermaster Step you can recruit new models for your Warband, purchase and sell Battlekit and Glory Items, and allocate Battlekit and Glory Items to the models in your Warband. Each of these activities is described below. You can carry them out in any order you like, and can swap back and forth between the activities as you wish. For example, you could recruit a new model, purchase them some Battlekit, then sell some Battlekit, and then recruit another model and so on."}]}],"sections":[{"title":"Retire Injured Models","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"You can retire any model in your Warband that has 2 Battle Scars. If you decide to do so, remove the model from your Warband Roster. You can sell or reallocate their Battlekit or Glory Items before you retire them if you wish, or allow them to retire with their Battlekit in honour of the service they have performed."}]}]},{"title":"Hire New Recruits","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"You can recruit models to your Warband in the Quartermaster Step in the same way as you did when you first created it. Any restrictions that applied to recruiting a model for your Starting Warband also apply when you hire a new recruit. For example, if the model\u2019s Warband Entry says that only 0-1 can be included in a Warband, and you already have 1 of those models in your Warband, then you could not hire another one as a new recruit. However, if your Warband used to have 1 of the models but it has subsequently been removed from your Warband Roster for any reason, then you could hire a new recruit to replace them."}]}]},{"title":"Purchase Battlekit","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"If you have any \ud83d\udc51  in your Strongbox, you can spend them to purchase new Battlekit from your Warband\u2019s Armoury Tables that has a Cost in \ud83d\udc51 . Likewise, if you have any \u263c, you can spend them to purchase new Battlekit for your Warband\u2019s Armoury Tables that has a Cost in \u263c. Add any Battlekit that you purchase to your Arsenal, or allocate it to a model as described below."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Any stipulations that applied to purchasing the Battlekit for your Starting Warband will also apply when you purchase it in the Quartermaster Step. For example, if the Battlekit had a Limit of 2, and your Warband already has 2 such items in its Arsenal and/or equipped by a model, then you could not purchase any more. However, if your Warband used to have 2 of the Battlekit and one has subsequently been removed from your Warband Roster for any reason, then you could purchase a replacement."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Battlekit that can only be taken by certain models can be purchased and added to your Arsenal, but can only be equipped by a model that is allowed to have it. For example, you can purchase a piece of Battlekit that has the \u201cELITE only\u201d rule and add it to your Arsenal, but you could only allocate it to a model that has the ELITE Keyword.","glossary":[{"val":"ELITE","id":"kw_elite"}]}]}]},{"title":"Sell Battlekit","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"If you wish you can sell Battlekit or Glory Items. If you do so, you receive half the Cost of the item you were selling, rounding any fractions up. Add the \ud83d\udc51  or \u263c that you receive to your Roster Sheet. Note that some pieces of Battlekit or Glory Items state that they cannot be removed from a model, in which case you cannot sell them."}]}]},{"title":"Purchase Glory Items","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"If you have any \u263c, you can spend them to purchase Glory Items. Add any Glory Items that you purchase to your Arsenal (you can Allocate it to a model as described below)."}]}]},{"title":"Allocate Battlekit & Glory Items","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Battlekit or Glory Items in your Arsenal can be allocated to any model that is allowed to have them, and you can reallocate Battlekit or Glory Items from one model in your Warband to another model, or from a model to your Arsenal"}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"A model cannot be allocated or reallocated any Battlekit or Glory Item that it isn\u2019t allowed to have, or that exceeds the limits on what it can carry. For example, you could not allocate a piece of Battlekit that had the ELITE Only rule to a model that did not have the ELITE Keyword, and you could not reallocate a 2-Handed Weapon to a model that already has one unless the model has a special rule that would allow it to take it. Note that some pieces of Battlekit or Glory Items state that they cannot be removed from a model, in which case you cannot reallocate them.","glossary":[{"val":"ELITE","id":"kw_elite"}]}]}]},{"title":"Create New Fireteams","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"You can create new Fireteams in the Quartermaster Step if you have models in your Warband that are eligible to form a Fireteam and are not already in an existing Fireteam. If one model in a Fireteam is removed from your Warband Roster for any reason, the remaining member of the Fireteam can be used to create a new Fireteam in the Quartermaster Step","glossary":[{"val":"Fireteams","id":"kw_fireteam"}]}]}]},{"title":"Roster Step","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"The final thing you need to do is to make sure that your Warband Roster is up to date, and includes all of the updates and changes that happened during the Campaign Phase. Once that is done, you are ready to play your next campaign game. Good luck!"}]}]}]},{"id":"br_gloryitemscampaign","source":"core","tags":{"order":"campaign_phases","url_custom":"glory-items"},"contextdata":{},"name":"Glory Items","item_index":12,"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Glory Items are pieces of Battlekit. They are similar in many ways to the Battlekit that can only be purchased with \u263c that are found in the Armoury Tables of a Faction List. However, Glory Items can only be purchased during a campaign and if the Warband has made a discovery from an Exploration Table that allows them to take a Glory Item for free or purchase it in the Quartermaster Step. For example, the Trench Merchant discovery on the Common Exploration Locations Table allows a Warband to purchase Glory Items costing 5 \u263c or less."}]}],"sections":[{"title":"Glory Item Tables","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"The Glory Items that can be taken for a Warband can be found in the Glory Item Table for the Warband\u2019s Faction in the Compendium. Each Glory Item Table includes all of the Glory Items that can be purchased for Warband\u2019s that belong to the Faction and their Cost in \u263c. Any special rules in brackets after the Cost of the Glory Item work in exactly the same way as they do for the Battlekit in the Faction\u2019s Armoury Table."}]}]},{"title":"Glory Items","description":[{"tags":{"desc_type":"rulesbanner","url":"/compendium/warbands"},"content":"See Faction Armoury for Glory Items","subcontent":[]}]}]}]'),c=JSON.parse('[{"id":"er_faqcommunity","source":"core","tags":{"url_custom":"community-faq"},"contextdata":{},"name":"Community Questions & Answers","item_index":0,"description":[{"tags":{"desc_type":"paragraph"},"content":"This page collects a series of frequent rules questions and answers from the Trench Crusade Discord Server. Answers provided here are those confirmed by the development team themselves. Official FAQ documents are documented in other Errata sections."},{"tags":{"desc_type":"paragraph"},"content":"There are currently no community FAQ available."}],"sections":[]},{"id":"er_erratafaqone","source":"core","tags":{"url_custom":"errata-and-faq-1"},"contextdata":{},"name":"Errata & Answers #1","item_index":1,"description":[],"sections":[{"title":"Success Rolls on Goetic Spells?","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Q: "},{"tags":{"desc_type":"bold"},"content":"Do I have to take a Success Roll to cast Goetic Spells?","glossary":[{"val":"Goetic","id":"kw_goetic"}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"A: "},{"tags":{"desc_type":"default"},"content":"No, as it is written on page 146 in Warbands of Trench Crusade: \u201cNote that you do not have to take a Success Roll for a model in order to cast a spell."}]}]}]}]}]'),d=JSON.parse('[{"id":"ab_countercharge","name":"Counter-Charge","source":"core","tags":{"trait":true,"modifier":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"If the first ACTION a model makes during their Activation is a Charge, add +1 DICE to Melee Attacks made by the Y\xfczba\u015f\u0131 for the rest of the Activation.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"+1 DICE","id":"kw_plusdice"}]}],"options":[]},{"id":"ab_whirlingdervishes","name":"Whirling Dervish","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"The ritual dance of these Dervishes is hypnotic to witness, and it is as graceful as it is deadly. Add -1 DICE to the Success Rolls for Ranged Attacks that target a Dervish.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"}]}],"options":[]},{"id":"ab_minesetting","name":"Set Mine","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A Sultanate Sapper can take a Set Mine ACTION if they are in contact with a terrain piece that measures up to 8\u201d by 8\u201d that doesn\'t have the MINED Keyword. If they do so, take a Success Roll for the model and add +2 DICE to the roll. If the roll is a Failure, nothing happens. If the roll is a Success or a Critical Success, the terrain piece gains the MINED Keyword.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"+2 DICE","id":"kw_plusdice"},{"val":"MINED","id":"kw_mined"}]}],"options":[]},{"id":"ab_demine","name":"Defuse Mine","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"When you move a Sultanate Sapper into contact with a Marker or terrain piece with the MINED Keyword, you can say the Sultanate Sapper will try to defuse the mine before it detonates. If you do so, take a Risky Success Roll for the model. If the roll is a Failure the mine detonates and the Sultanate Sapper\u2019s Activation ends. If the roll is a Success or a Critical Success, the mine does not detonate, and the Marker or terrain piece loses the MINED Keyword. A model that sets a mine on a terrain piece can defuse the mine automatically if it moves into contact with the terrain piece (do not take a Risky Success Roll.","glossary":[{"val":"Risky Success","id":"kw_riskyaction"},{"val":"MINED","id":"kw_mined"}]}],"options":[]},{"id":"ab_detonatingmines","name":"Detonating Mines","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"When a model moves into contact with a Mined terrain piece, the mine will detonate unless the model is the one that set the mine, or has the Defuse Mine ability. Make an Injury Roll with the SHRAPNEL Keyword for the model that detonated the mine. The terrain piece is then no longer considered to be Mined. If the model wasn\u2019t taken Down or Out of Action, it can then continue its move. Flying models only detonate a mine if they finish a move in contact with a Mined terrain piece (they can fly across it without setting it off ).","glossary":[{"val":"SHRAPNEL","id":"kw_shrapnel"}]}],"options":[]},{"id":"ab_forwardpositions","name":"Forward Positions","source":"core","tags":{"trait":true},"contextdata":{"infiltrator_scenario":{}},"description":[{"tags":{"desc_type":"default"},"content":"When you deploy a Sultanate Sapper for the first time in a game, you can deploy them up to 6\u201d away from your deployment zone and in contact with a terrain piece that is at least \xbd\u201d high."}],"options":[]},{"id":"ab_fortify","name":"Fortify","source":"core","tags":{"action":true,"risky":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A Sultanate Sapper can take a Fortify ACTION. If they do so, take a Risky Success Roll for the Sultanate Sapper. If the roll is a Failure, the Sultanate Sappers Activation ends. If the roll is a Success or a Critical Success, the Sultanate Sapper has the COVER Keyword until they move away from their current position.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"Risky Success","id":"kw_riskyaction"},{"val":"COVER","id":"gl_cover"}]}],"options":[]},{"id":"ab_artificialbody","name":"Artificial Life","source":"core","tags":{"trait":true},"contextdata":{"self_defense_injury":{"type":"dice","val":-1}},"description":[{"tags":{"desc_type":"default"},"content":"Add -1 INJURY DICE to Injury Rolls for the model.","glossary":[{"val":"-1 INJURY DICE","id":"kw_injurydice"}]}],"options":[]},{"id":"ab_trample","name":"Trample","source":"core","tags":{"action":true,"attack":true,"action_type":["attack_melee"]},"contextdata":{"custom_attack_type":{"range":0},"armour_ignore":{}},"description":[{"tags":{"desc_type":"default"},"content":"A Brazen Bull can take a Trample ACTION. If it does so, it can make a Melee Attack that must target an enemy model that is Down. A Trample Melee Attack does not use a Melee Weapon and has the IGNORE ARMOUR Keyword.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"IGNORE ARMOUR","id":"kw_ignorearmour"}]}],"options":[]},{"id":"ab_pin","name":"Pin","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Enemy models that are Down and that are mounted on a base of 40mm or less are not allowed to stand up if a Lion of Jabir is within 1\\" of them (even if the Lion of Jabir is also Down)."}],"options":[]},{"id":"ab_agilelion","name":"Agile","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add +1 DICE to Risky Success Roll when a Lion of Jabir Climbs, Jumps, or makes a Diving Charge, or takes a Dash ACTION.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"+1 DICE","id":"kw_plusdice"}]}],"options":[]},{"id":"ab_masteryoftheelements","name":"Mastery of the Elements","source":"core","tags":{"trait":true,"selection":true,"action_choose":true,"deployment_choose":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"When this model is deployed for the first time in a game, you can give one of the following Keywords to all of the Jabirean Alchemist\u2019s Ranged Weapons and Melee Weapons: FIRE or GAS or SHRAPNEL. All of the Weapons have the same Keyword. If the Weapon already has the Keyword, it does not receive it a second time.","glossary":[{"val":"SHRAPNEL","id":"kw_shrapnel"},{"val":"FIRE","id":"kw_fire"},{"val":"GAS","id":"kw_gas"},{"val":"RISKY ACTION","id":"kw_riskyaction"},{"val":"+1 DICE","id":"kw_plusdice"}]}],"options":[{"ref_id":"ot_masteryoftheelements","name":"Elements","description":[],"category":"type","type":"text","strictness":"strict","predefined_options":[],"option_context":{"basic_option_default":{}},"data_search":{"searchtype":"complex","searchparam":{"type":"keyword","request":{"operator":"and","terms":[{"item":"tags","value":"category","equals":true,"strict":true,"istag":true,"tagvalue":"element"}],"subparams":[]}}}}]},{"id":"ab_elementalchange","name":"Elemental Change","source":"core","tags":{"trait":true,"selection":true,"action_choose":true,"deployment_choose":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A Jabirean Alchemist can take an Elemental Change ACTION. If they do so, take a Risky Success Roll for the model. If the roll is a Failure, nothing happens and the Jabirean Alchemist\u2019s Activation ends. If the roll is a Success or a Critical Success, you can change the Master of the Elements Keyword on all of the Jabirean Alchemist\u2019s Weapons to one of the other two choices.","glossary":[{"val":"ACTION","id":"kw_shrapnel"},{"val":"Risky Success","id":"kw_riskyaction"}]}],"options":[]},{"id":"ab_mubarizun","name":"Mubarizon","source":"core","tags":{"trait":true},"contextdata":{"keyword_ignore":{"value":["kw_fear"]},"injury_bonus_conditional":{"condition":[{"bonus_type":"dice","value":1,"target":"foe","keyword":"kw_tough"}]}},"description":[{"tags":{"desc_type":"default"},"content":"A Y\xfczba\u015f\u0131 is expected to face the mightiest of their enemies in personal combat, inspiring the troops to victory with their personal prowess. Add +1 INJURY DICE for attacks made by a Y\xfczba\u015f\u0131 if the target model has the TOUGH Keyword.","glossary":[{"val":"FEAR","id":"kw_fear"},{"val":"TOUGH","id":"kw_tough"},{"val":"+1 INJURY DICE","id":"kw_injurydice"}]}],"options":[]},{"id":"ab_timeslip","name":"Time Slip","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"If your opponent fails their Success Roll for an attack targeting a Sultanate Assassin, you can say the Sultanate Assassin will slip into a moment in the future. If you do so, you can redeploy it anywhere within 6\u201d of its original location (measured from the centre of its base to the centre of its base), and more than 1\u201d away from any enemy models. If the failed attack took place because the Sultanate Assassin is retreating, the retreat move ends after you redeploy the model."}],"options":[]},{"id":"ab_temporalassassin","name":"Temporal Assassin","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"After determining the Charge Bonus for a Sultanate Assassin that has not already carried out a Fight ACTION in its Activation, you can say that the Sultanate Assassin will split itself through time. If you do so, choose an additional enemy model as the target of the Charge (the normal rules for picking a target apply, but do not count enemy models picked as targets for the Charge as interposing enemy models). Then make a charge move with the Sultanate Assassin which finishes within 1\u201d of the first enemy model you picked as a target, and then take a Fight ACTION with the enemy model as the target. After resolving the Fight ACTION, you must immediately remove the Sultanate Assassin from the battlefield and redeploy it to within 1\u201d of the other model that you picked. Then take a second Fight ACTION with the other enemy model as the target. The Sultanate Assassin must use the same Melee Weapon for both attacks, and cannot take a Fight ACTION later in the same Activation.","glossary":[{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"ab_swornbretheren","name":"Sworn Bretheren","source":"core","tags":{"trait":true},"contextdata":{"add_fireteam_model":{"type":"ft_model","count":1,"restriction":[{"rest_type":"elite","value":true}]}},"description":[{"tags":{"desc_type":"default"},"content":"When you recruit a Mamluk Faris to your Warband, before adding it to your roster, you can say it will form a FIRETEAM with 1 other model from your Warband that has the ELITE Keyword. Both of the models gain the FIRETEAM Keyword. Note that the Mamluk Faris\u2019s FIRETEAM is in addition to any other FIRETEAMS your Warband can have, and that if a Mamluk Faris is in a FIRETEAM with a model from a New Antioch Warband, then only the model from the New Antioch Warband can use the Concentrated Attack special rule.","glossary":[{"val":"FIRETEAM","id":"kw_fireteam"},{"val":"ELITE","id":"kw_elite"}]}],"options":[]},{"id":"ab_martialprowess","name":"Martial Prowess","source":"core","tags":{"trait":true},"contextdata":{"offhand_fighting":{"type":"melee"},"equipment_add_keyword":{"equip_check":[{"check_type":"id","value":"eq_jezzail"}],"additions":["kw_assault","kw_shieldcombo"]}},"description":[{"tags":{"desc_type":"default"},"content":"Mamluks are disciples of fur\u016bsiyya, the knightly discipline passed on through generations, they practice ceaselessly and thus have few equals. The Mamluk\u2019s Greatsword does not have the HEAVY Keyword, and the Jezzail carried by a Mamluk Faris has the ASSAULT Keyword and Shield Combo stipulation.","glossary":[{"val":"ASSAULT","id":"kw_assault"}]}],"options":[]},{"id":"ab_automatondestrier","name":"Automaton Destrier","source":"core","tags":{"trait":true},"contextdata":{"infiltrator_scenario":{}},"description":[{"tags":{"desc_type":"default"},"content":"If the scenario you are playing allows Infiltrators to use their special deployment rules, after any Infiltrators have deployed, you can deploy the Mamluk Faris within 1\\" of any edge of the battlefield and more than 8\\" away from any enemy models.","glossary":[{"val":"Infiltrators","id":"kw_infiltrator"}]}],"options":[]},{"id":"ab_recreation","name":"Re-creation","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"If a Takwin Homunculus is killed in the postbattle sequence, you do not have to remove it from your roster. Instead, you can spend 40 \ud83d\udc51  to leave it on the Roster."}],"options":[]},{"id":"ab_slow","name":"Slow","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Treat a Scripture Guardian as having a Movement Characteristic of 3\\"/Infantry when it takes a Dash ACTION.","glossary":[{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"ab_vengefulscripture","name":"Vengeful Scripture","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"The Scripture Guardian reads words from the holy (or unholy) text it carries. A Scripture Guardian can take a Vengeful Scripture ACTION. If they do so, pick 1 enemy model within 18\\" of the Scripture Guardian and in its Line of Sight. Then take a Success Roll for the Scripture Guardian, with +2 DICE if the enemy model is within 9\\" of the Scripture Guardian and +1 DICE otherwise. If the roll is a Failure, nothing happens. If the roll is a Success, make an Injury Roll for the enemy model, with a +1 INJURY MODIFIER for each BLOOD MARKER the enemy model has (in addition to any benefits you receive if you then spend them to affect the Injury Roll). If the roll is a Critical Success, make an Injury Roll for the enemy model with IGNORE ARMOUR, and +1 INJURY DICE and a +1 INJURY MODIFIER for each BLOOD MARKER the enemy model has","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"},{"val":"ACTION","id":"kw_action"},{"val":"+2 DICE","id":"kw_plusdice"},{"val":"+1 DICE","id":"kw_plusdice"},{"val":"+1 INJURY DICE","id":"kw_injurydice"},{"val":"IGNORE ARMOUR","id":"kw_ignorearmour"},{"val":"+1 INJURY MODIFIER","id":"kw_injurymodifier"}]}],"options":[]},{"id":"ab_fourpaws","name":"Four Paws","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add +1 DICE to Risky Success rolls for a Trench Dog when they Climb, Jump or take a Dash ACTION.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"Risky Success","id":"kw_riskyaction"},{"val":"+1 DICE","id":"kw_plusdice"}]}],"options":[]},{"id":"ab_guarddog","name":"Guard Dog","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"These dogs warn their masters of impending danger and fight fiercely for their company. Models cannot use the INFILTRATOR Keyword to deploy within 12\\" of an enemy Guard Dog.","glossary":[{"val":"INFILTRATOR","id":"kw_infiltrator"},{"val":"Risky Success","id":"kw_riskyaction"}]}],"options":[]},{"id":"ab_strengththroughpain","name":"Strength Through Pain","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add +1 DICE to the Crimson Communicant\u2019s Melee characteristic for each BLOOD MARKER currently placed next to it.In addition, your opponent cannot spend a Crimson Communicant\u2019s BLOOD MARKERS to add - DICE to a Success Roll for a Fight ACTION.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"},{"val":"- DICE","id":"kw_minusdice"},{"val":"BLOOD MARKER","id":"kw_bloodmarker"},{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"ab_mercydog","name":"Mercy Dog","source":"core","tags":{"action":true,"heal":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Mercy Dogs have and can use a Medi-kit. In addition, when you move a Mercy Dog that starts the move in contact with a friendly model that is Down that is more than 1\\" from any enemy models, it can drag the friendly model along with itself. If it does so, halve the Mercy Dog\u2019s Movement Characteristic. A Mercy Dog cannot drag a friendly model when it retreats or charges."}],"options":[]},{"id":"ab_mercydogbrigade","name":"Mercy Dog","source":"core","tags":{"action":true,"heal":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Mercy Dogs have and can use a Medi-kit ( see the Standard Battlekit section of the Trench Crusade rulebook). In addition, when you move a Mercy Dog that starts the move in contact with a friendly model that is Down that is more than 1\u201d from any enemy models, it can drag the friendly model along with itself. If it does so, halve the Mercy Dog\u2019s Movement Characteristic. A Mercy Dog cannot drag a friendly model when it retreats or charges.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"},{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"ab_brigadedog","name":"Grenade Harness","source":"westfalia","tags":{"action":true,"heal":true},"contextdata":{"model_equipment_restriction":{"added":[{"category":"grenade","res_type":"id","value":"eq_molotovcocktail"},{"category":"grenade","res_type":"id","value":"eq_grenades"}]},"keyword_add":{"value":["kw_antioch"]}},"description":[{"tags":{"desc_type":"default"},"content":"Trench Dogs of the Red Brigade that are equipped with either Frag Grenades or Molotov Cocktails cannot use them to take a Shoot ACTION. However any friendly non-Trench Dog model can use them to take a Shoot ACTION if they were within 1\u201d of a Trench Dog equipped with them at any point during their own Activation."}],"options":[]},{"id":"ab_martyrdomdog","name":"Martydom Dog","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Trench Pilgrims often enthusiastically strap their dogs with explosives so they can partake in a glorious martyrdom operation. A Martyrdom Dog has a Martyrdom Device and can trigger it like an Ecclesiastic Prisoner.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"+1 DICE","id":"kw_plusdice"}]}],"options":[]},{"id":"ab_hellhound","name":"Hellhound","source":"core","tags":{"action":true},"contextdata":{"ignore_element":{"element":["kw_fire"]}},"description":[{"tags":{"desc_type":"default"},"content":"his horrifying infernal canine is the size of a small pony, and within its tortured belly rage the flames of Hell itself. It howls in constant agony and rage in combat. All Hellhounds gain the NEGATE FIRE Keyword. Attacks made by a Hellhound that is part of a Black Grail or Knights of Avarice Warband have the +1 DICE and GAS Keywords. Attacks made by a Hellhound that is part of any other Warband have the +1 DICE and FIRE Keywords.","glossary":[{"val":"NEGATE FIRE","id":"kw_negate_kw_fire"},{"val":"FIRE","id":"kw_fire"},{"val":"+1 DICE","id":"kw_plusdice"},{"val":"GAS","id":"kw_gas"}]}],"options":[]},{"id":"ab_puppetmaster","name":"Puppet Master","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A Heretic Priest can take a Puppet Master ACTION. If they do so, take a Risky Success Roll for the model. If the roll is a Failure, the Heretic Priest\u2019s Activation ends immediately. If the roll is a Success or Critical Success, pick 1 model (friend or foe) that is within 12\u201d of the Heretic Priest and in their Line of Sight, apart from the Heretic Priest themselves. You can move the model D6\u201d. The move must be in a straight line, but can be in any direction, and can be used to make the model move within 1\u201d of an enemy, make a retreat move, Climb, Jump, or Jump Down. The model cannot make a Diving Charge and does not count as charging if it finishes the move within 1\u201d of an enemy model.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"Risky Success","id":"kw_riskyaction"}]}],"options":[]},{"id":"ab_thepriceofgreed","name":"The Price of Greed","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Worldly wealth becomes the target of this curse, gradually crushing its victim under its weight. A Knights of Avarice Heretic Priest can take a Price of Greed ACTION. If they do so, take a Risky Success Roll for the model. If the roll is a Failure, the Knights of Avarice Heretic Priest\u2019s Activation ends immediately. If the roll is a Success or Critical Success, make an Injury Roll for an enemy model that is within 12\\" of the model taking the Price of Greed ACTION and in its line of sight. Add +1 INJURY DICE to the roll if the Success Roll was a Critical Success, and add +1 DICE to the roll for each -1 INJURY MODIFIER that applies to the target (the -1 INJURY MODIFIER still applies). For example, if the target had Standard Armour with a -1 INJURY MODIFIER, you would add +1 INJURY DICE and a -1 INJURY MODIFIER to the roll.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"Risky Success","id":"kw_riskyaction"},{"val":"+1 INJURY DICE","id":"kw_injurydice"},{"val":"+1 DICE","id":"kw_plusdice"},{"val":"INJURY MODIFIER","id":"kw_injurymodifier"},{"val":"+2 DICE","id":"kw_plusdice"}]}],"options":[]},{"id":"ab_hide","name":"Hide","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A Death Commando can take a Hide ACTION if they are in contact with a terrain piece that is at least \xbd\\" high. If they do so, take a Risky Success Roll for the model and add +1 DICE to the roll. If the roll is a Failure, the Death Commando\u2019s Activation ends immediately. If the roll is a Success or Critical Success, enemy models cannot choose the Death Commando as the target for a Ranged Attack or Charge until the Death Commando moves, charges, retreats, makes a Ranged Attack, or an enemy model moves within 1.5\\" of them. The Death Commando can be hit if they are within the blast radius of a Weapon with the BLAST Keyword.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"Risky Success","id":"kw_riskyaction"},{"val":"+1 DICE","id":"kw_plusdice"},{"val":"BLAST","id":"kw_blast"}]}],"options":[]},{"id":"ab_stealthgenerator","name":"Stealth Generator","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add -1 DICE to rolls for Ranged Attacks that target a Death Commando.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"}]}],"options":[]},{"id":"ab_unholyhymns","name":"Unholy Hymns","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add -1 DICE to Success Rolls taken for enemy models that are within 8\\" of one or more Choristers.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"}]}],"options":[]},{"id":"ab_hereticlegionnaire","name":"Heretic Legionnaire","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"You can upgrade Heretic Troopers in your Warband to Heretic Legionnaires, at a cost of +10 \ud83d\udc51  each. You cannot upgrade a Heretic Trooper if doing so would result in there being more Heretic Legionnaires in your Warband than there are Heretic Troopers. When you upgrade a Heretic Trooper to a Heretic Legionnaire, you can change either their Ranged Characteristic or their Melee Characteristic from 0 to +1."}],"options":[]},{"id":"ab_lopingdash","name":"Loping Dash","source":"core","tags":{"trait":true,"bonus":true},"contextdata":{"bonus_ability":{"action_type":["dash"]}},"description":[{"tags":{"desc_type":"default"},"content":"Add +1 DICE to the Risky Success Roll for a War Wolf that is taking a Dash ACTION.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"},{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"ab_assaultbeast","name":"Assault Beast","source":"core","tags":{"trait":true,"bonus":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A War Wolf is armed with two Melee Weapons (its Chainsaw Mouth and Shredding Claws). When it makes a Melee Attack, it can attack once using either its Chainsaw Mouth or Shredding Claws, or twice, first with the Chainsaw Mouth and second with its Shredding Claws (the Off-Hand Weapon modifier applies to the attack made with the Shredding Claws). Note that both Weapons have the RISKY keyword, which means that the War Wolf \u2019s Activation ends immediately if the Success Roll for an attack made with either weapon is a Failure.","glossary":[{"val":"RISKY","id":"kw_riskyaction"}]}],"options":[]},{"id":"ab_unrelenting","name":"Unrelenting","source":"core","tags":{"trait":true,"bonus":true},"contextdata":{"bonus_ability":{"action_type":["dash"]}},"description":[{"tags":{"desc_type":"default"},"content":"The Beast may take its Dash and any of its Jump ACTIONS with +2 DICE. ","glossary":[{"val":"+2 DICE","id":"kw_plusdice"},{"val":"ACTIONS","id":"kw_action"}]}],"options":[]},{"id":"ab_resilient","name":"Resilient","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"The Beast is a massive creature with unnatural vitality and is subject to the rules for TOUGH creatures. Additionally, its hide is rough and thick, acting like natural armour. Attacks made against the Beast are made with -1 DICE.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"},{"val":"TOUGH","id":"kw_tough"}]}],"options":[]},{"id":"ab_undying","name":"Undying","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"The first, second, and third time The Dragon suffers an Out of Action result on the Injury Table, it is treated as a Down result instead. It then loses the Undying ability and replaces it with the Defiant ability."}],"options":[]},{"id":"ab_defiant","name":"Defiant","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"When The Dragon suffers an Out of Action result on the Injury Table, it is treated as a Down result instead. The Defiant ability is lost immediately when the sixth BLOOD MARKER is placed next to The Dragon (from then on, Out of Action results will affect it normally.)","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"}]}],"options":[]},{"id":"ab_resistant","name":"Resistant","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Remove 1 BLOOD MARKER from The Dragon when it is Activated. In addition, add -1 INJURY DICE to Injury Rolls for The Dragon if the attack has one or more of the following Keywords: FIRE, GAS, or SHRAPNEL.","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"},{"val":"-1 INJURY DICE","id":"kw_minusdice"},{"val":"FIRE","id":"kw_fire"},{"val":"GAS","id":"kw_gas"},{"val":"SHRAPNEL","id":"kw_shrapnel"}]}],"options":[]},{"id":"ab_siegeweapon","name":"Siege Weapon","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"The Dragon can move over terrain pieces that measure up to 4\\" by 4\\" as if they were Open terrain. If it does so, the terrain piece is removed from the game when the Dragon moves into contact with it. Models that were on top of the terrain piece Fall directly down to the battlefield; an additional Injury Roll may have to be made for them if they Fall 3\\" or more, or if they land where they may be Trampled by the Dragon as it carries on with its move."}],"options":[]},{"id":"ab_dragoncrush","name":"Crush","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"The Dragon can move over other models. If it does so, make an Injury Roll for the model when the Dragon moves into contact with it, as if the model had been hit with an attack with the +1 INJURY MODIFIER and IGNORE ARMOUR Keywords. The Dragon then continues with its move. Leave the model where it was if the Dragon moves beyond it. If the Dragon would end up on top of the model, move it by the shortest distance possible so that it will not be underneath the Dragon (even if it is Down). If it is not possible to move the model out of the way for any reason, it is removed from play and counts as being taken Out of Action in the Campaign Phase.","glossary":[{"val":"+1 INJURY MODIFIER","id":"kw_injurymodifier"},{"val":"IGNORE ARMOUR","id":"kw_ignorearmour"}]}],"options":[]},{"id":"ab_levitate","name":"Levitate","source":"core","tags":{"trait":true,"bonus":true},"contextdata":{"bonus_ability":{"action_type":["climb"]}},"description":[{"tags":{"desc_type":"default"},"content":"You do not have to take a Risky Success Roll for an Artillery Witch when they Climb or Jump, or an Injury Roll if they Fall.","glossary":[{"val":"Risky Success","id":"kw_riskyaction"}]}],"options":[]},{"id":"ab_abioticlife","name":"Abiotic Life","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add -1 INJURY DICE to rolls for an Artillery Witch that has been hit by an attack with the GAS Keyword.","glossary":[{"val":"GAS","id":"kw_gas"},{"val":"-1 INJURY DICE","id":"kw_injurydice"}]}],"options":[]},{"id":"ab_artillerywitchbattery","name":"Artillery Witch Battery","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"You may include 0-2 Artillery Witches in a Warband if the total cost of all of the other models in the Warband (including their Battlekit, etc) adds up to 1,000 \ud83d\udc51  or more."}],"options":[]},{"id":"ab_lawofhell","name":"Law of Hell","source":"core","tags":{"trait":true},"contextdata":{"activated":{}},"description":[{"tags":{"desc_type":"default"},"content":"If an attack made by a Wretched takes an enemy model with the ELITE Keyword out of Action, the Wretched model gains its freedom and is immediately removed from the game. It no longer counts as being part of the Warband for the purposes of Morale Checks and is removed from the Warband Roster.","glossary":[{"val":"ELITE","id":"kw_elite"}]}],"options":[]},{"id":"ab_darkblessing","name":"Dark Blessing","source":"core","tags":{"trait":true},"contextdata":{"activated":{}},"description":[{"tags":{"desc_type":"default"},"content":"When a Wretched is taken Out of Action, place 1 BLESSING MARKER next to the nearest friendly model with the ELITE and HERETIC Keywords. If two or more eligible models are equally close to the Wretched, you can choose which receives the BLESSING MARKER.","glossary":[{"val":"ELITE","id":"kw_elite"},{"val":"HERETIC","id":"kw_heretic"},{"val":"BLESSING MARKER","id":"kw_blessingmarker"}]}],"options":[]},{"id":"ab_chattel","name":"Chattel","source":"core","tags":{"trait":true},"contextdata":{"get_sale_price":{"mod":2}},"description":[{"tags":{"desc_type":"default"},"content":"In a campaign, Wretched can be sold in the Quartermaster Step for 25 \ud83d\udc51  plus half the cost in \ud83d\udc51  of any Battlekit they have."}],"options":[]},{"id":"ab_devourtheguilty","name":"Devour the Guilty","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Sin Eater can take a Devour the Guilty ACTION. If they do so, pick 1 model (friend or foe) that is within 1\\" of the Sin Eater and is mounted on a base that is 40mm or smaller. If the model is an enemy, take a Risky Success Roll for the Sin Eater. If the model is friendly, take a Success Roll for the Sin Eater with +1 DICE. If the roll is a Failure, the Sin Eater\u2019s Activation ends, if it was a Risky Success Roll, and nothing happens if it was a normal Success Roll. If the roll is a Success or a Critical Success, the model you picked is devoured, and the following rules apply to it:","glossary":[{"val":"Risky Success","id":"kw_riskyaction"},{"val":"ACTION","id":"kw_action"},{"val":"+1 DICE","id":"kw_plusdice"}]},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Place the model to one side, along with any MARKERS it may have. It is inside the Sin Eater and cannot be affected in any way or carry out any ACTIONS except as described below. While it is in the Sin Eater it is considered to be Down for the purposes of Morale Checks. A Sin Eater can only have 1 devoured model at a time.","glossary":[{"val":"ACTIONS","id":"kw_action"}]},{"tags":{"desc_type":"default"},"content":"When it is Activated, it can take a Fight ACTION and must target the Sin Eater. Add -3 DICE to the roll for the Melee Attack, and do not use any of the model\u2019s abilities or any of the special rules for its weapons.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"-3 DICE","id":"kw_minusdice"}]},{"tags":{"desc_type":"default"},"content":"If the Sin Eater is taken Out of Action, before removing them from the battlefield, deploy the devoured model within 1\\" of the Sin Eater and place it Down. If this is impossible, the model is taken Out of Action. In either case, the Sin Eater is then removed from the battlefield."},{"tags":{"desc_type":"default"},"content":"If a devoured model is still inside a Sin Eater when the game ends, it is considered to have been taken Out of Action."},{"tags":{"desc_type":"default"},"content":"Each time the Sin Eater is Activated, place 1 BLOOD MARKER next to the devoured model. As soon as a devoured model has 6 BLOOD MARKERS, it is immediately taken Out of Action (ignoring any rules that would prevent this) and is no longer considered to be inside the Sin Eater. ","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"}]},{"tags":{"desc_type":"default"},"content":"A Sin Eater that has a devoured model inside it can take a Purge ACTION.If it does so, take a Success Roll for the Sin Eater with +4 DICE. If the roll is a Failure, nothing happens. If the roll is a Success or Critical Success, deploy the devoured model within 1\\" of the Sin Eater and place it Down. If this is impossible, the devoured model remains inside the Sin Eater. Once released the model can be Activated normally.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"+4 DICE","id":"kw_plusdice"}]}]}],"options":[]},{"id":"ab_goeticportal","name":"Goetic Portal","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A Goetic Warlock can take a Goetic Portal ACTION. If they do so, take a Risky Success Roll for the Goetic Warlock with +1 DICE. If the roll is a Failure, the Goetic Warlock\u2019s Activation ends. If the roll is a Success or Critical Success, you can pick up the Goetic Warlock and redeploy them on the battlefield anywhere within 6\u201d of the location they originally occupied (measured from the centre of its base to the centre of its base). If this is impossible for any reason, the Goetic Warlock must stay in their original position. Note that the Goetic Warlock can redeploy even if they are down or within 1\u201d of an enemy model (in which case the enemy model cannot make a Melee Attack before the Goetic Warlock is redeployed), and can redeploy within 1\u201d of an enemy model. In addition, if the roll is a Success or Critical Success and the Goetic Warlock is within 1\u201d of any enemy models mounted on a 32mm base or smaller, then the Goetic Warlock can take 1 of the enemy models with them. If they do so, you must redeploy the Goetic Warlock first and then redeploy the enemy model within 1\u201d of the Goetic Warlock. If you cannot redeploy the enemy model within 1\u201d of the Goetic Warlock, then the enemy model stays in its original position.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"Risky Success","id":"kw_riskyaction"},{"val":"+1 DICE","id":"kw_plusdice"}]}],"options":[]},{"id":"ab_barbedembrace","name":"Barbed Embrace","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"An enemy model within 1\\" of a Goetic Warlock cannot take a Retreat ACTION.","glossary":[{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"ab_ironclawedhands","name":"Iron Clawed Hands","source":"core","tags":{"trait":true},"contextdata":{"equipment_add_keyword":{"equip_check":[{"check_type":"id","value":"eq_unarmed_nopenalty"}],"additions":["kw_critical"],"special_additions":[{"base":"kw_cleave","value":2}]},"unarmed_penalty_remove":{}},"description":[{"tags":{"desc_type":"default"},"content":"A Goetic Warlock can make a Melee Attack with the CLEAVE 2 and CRITICAL Keywords even though it does not have a Melee Weapon. In addition, the Off-Hand Weapon modifier applies to the second attack.","glossary":[{"val":"CLEAVE 2","id":"kw_cleave"},{"val":"CRITICAL","id":"kw_critical"}]}],"options":[]},{"id":"ab_goeticgaze","name":"Goetic Gaze","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A Goetic Warlock can take a Goetic Gaze ACTION. If they do so, take a Success Roll for the Goetic Warlock. If the roll is a Failure, nothing happens. If the roll is a Success, place 1 BLOOD MARKER next to an enemy model within 24\\" of the Goetic Warlock and in their Line of Sight. If the roll is a Critical Success, place 2 BLOOD MARKERS next to an enemy model within 24\\" of the Goetic Warlock and in their Line of Sight instead of only 1.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"BLOOD MARKER","id":"kw_bloodmarker"}]}],"options":[]},{"id":"ab_deathwail","name":"Death Wail","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"All enemy models within 8\u201d of the Chorister suffer an additional +1 INJURY DICE when any injury roll is made against them.","glossary":[{"val":"+1 INJURY DICE","id":"kw_injurydice"}]}],"options":[]},{"id":"ab_loudspeakers","name":"Loudspeakers","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A War Prophet can take a Loudspeakers ACTION. If they do so, take a Risky Success Roll for the model and add +2 DICE to the roll. If the roll is a Failure, the War Prophet\u2019s Activation ends immediately. If the roll is a Success or Critical Success, you can move all friendly models within 8\\" of the War Prophet up to 3\\". They must end the move as close as possible to the nearest enemy model that was visible to them at the start of the move. This move can be used to bring a model within 1\\" of an enemy model in which case the model counts as charging. If no enemy models are visible, they can move normally.","glossary":[{"val":"+2 DICE","id":"kw_plusdice"},{"val":"ACTION","id":"kw_action"},{"val":"Risky Success","id":"kw_riskyaction"}]}],"options":[]},{"id":"ab_layingonhands","name":"Laying On Hands","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"War Prophet can take a Laying on of Hands ACTION. If they do so, take a Success Roll for the model. If the roll is a Failure, nothing happens. If the roll is a Success, remove 1 BLOOD MARKER from a friendly model within 6\\" of the War Prophet. If the roll is a Critical Success, remove 3 BLOOD MARKERS from a friendly model within 6\\" of the War Prophet instead of only 1. The War Prophet can use this ACTION to heal themselves.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"},{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"ab_mementomori","name":"Memento Mori","source":"core","tags":{"trait":true},"contextdata":{"activated":{}},"description":[{"tags":{"desc_type":"default"},"content":"The War Prophet is touched by a higher power, and the revealed truth allows them a degree of protection against premature death. The first time the War Prophet suffers an Out of Action result on the Injury Table, it is treated as a No Effect result instead. A War Prophet cannot have the TOUGH Keyword.","glossary":[{"val":"TOUGH","id":"kw_tough"}]}],"options":[]},{"id":"ab_enforcedorthodoxy","name":"Enforced Orthodoxy","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A Castigator can take an Enforced Orthodoxy ACTION. If they do so, take a Risky Success Roll for the model and add +1 DICE to the roll. If the roll is a Failure, the Castigator\u2019s Activation ends immediately. If the roll is a Success or Critical Success, all friendly models that are within 8\\" of the Castigator that are Down immediately stand back up at no cost to their movement.","glossary":[{"val":"+1 DICE","id":"kw_riskyaction"},{"val":"ACTION","id":"kw_action"},{"val":"Risky Success","id":"kw_riskyaction"}]}],"options":[]},{"id":"ab_whipofgod","name":"Whip of God","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"When a Castigator makes a Melee Attack, they can target a friendly model that is within 1\\" instead of an enemy model. Set aside a D6 each time a Castigator attacks a friendly model and takes them Out of Action with a Melee Attack. The next time the Castigator\u2019s Warband is forced to take a Morale Check, each D6 that was put aside adds +1 DICE to the roll  and is then discarded.","glossary":[{"val":"+1 DICE","id":"kw_riskyaction"}]}],"options":[]},{"id":"ab_miracleofregeneration","name":"Miracle of Regeneration","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"When you Activate a Communicant, before carrying out any ACTIONS, you can remove up to 1 BLOOD MARKER from the model.","glossary":[{"val":"ACTIONS","id":"kw_action"},{"val":"BLOOD MARKER","id":"kw_bloodmarker"}]}],"options":[]},{"id":"ab_bodyguard_pilgrim","name":"Pilgrim Bodyguard","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"If a friendly PILGRIM model within 1\\" of a Communicant is hit by a Ranged Attack or Melee Attack, you can say that the Communicant will take the hit. If you do so, make an Injury Roll for the Communicant instead of the original target. This ability cannot be used against attacks that have the BLAST Keyword.","glossary":[{"val":"PILGRIM","id":"kw_pilgrim"},{"val":"BLAST","id":"kw_blast"}]}],"options":[]},{"id":"ab_awaited","name":"Awaited","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"An Ecclesiastic Prisoner that is taken Out of Action when their Martyrdom Device is triggered does not count towards the number of models from the Warband taken Out of Action for Morale Checks."}],"options":[]},{"id":"ab_maddash","name":"Mad Dash","source":"core","tags":{"trait":true,"bonus":true},"contextdata":{"bonus_ability":{"action_type":["dash"]}},"description":[{"tags":{"desc_type":"default"},"content":"Add +1 DICE to the Risky Success Roll for an Ecclesiastic Prisoner that is taking a Dash ACTION.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"},{"val":"Risky Success","id":"kw_riskyaction"},{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"ab_feebleflailing","name":"Feeble Flailing","source":"core","tags":{"trait":true,"bonus":true},"contextdata":{"unarmed_penalty_remove":{}},"description":[{"tags":{"desc_type":"default"},"content":"An Ecclesiastic Prisoner can make a Melee Attack even though it doesn\'t have a melee weapon. If it does so, add -1 DICE to the Success Roll for the attack.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"}]}],"options":[]},{"id":"ab_agile","name":"Agile","source":"core","tags":{"trait":true,"bonus":true},"contextdata":{"bonus_ability":{"action_type":["dash"]}},"description":[{"tags":{"desc_type":"default"},"content":"Add +1 DICE to Risky Success Rolls when a Stigmatic Nun Climbs, Jumps, or makes a Diving Charge, or takes a Dash ACTION.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"},{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"ab_blessedstigmata","name":"Blessed Stigmata","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Each time you remove a BLOOD MARKER from a Stigmatic Nun because of the REGENERATE 1 Keyword, place 1 BLESSING MARKER next to the Stigmatic Nun.","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"},{"val":"REGENERATE","id":"kw_regenerate"},{"val":"BLESSING MARKER","id":"kw_blessingmarker"}]}],"options":[]},{"id":"ab_symphonyofslaughter","name":"Symphony of Slaughter","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"An Anchorite Shrine is armed with two 1-Handed Melee Weapons (the Catherine Wheel and Bonebreaker Mace). When it makes a Melee Attack, it can either attack once using either its Catherine Wheel or the Bonebreaker Mace, or twice, first with the Catherine Wheel and second with its Bonebreaker Mace (the Off-Hand Weapon modifier applies to the attack made with the Bonebreaker Mace).","glossary":[{"val":"RISKY","id":"kw_riskyaction"}]}],"options":[]},{"id":"ab_brokenonthewheel","name":"Broken on the Wheel","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"At the start of each game, before deployment, you can say that one Trench Pilgrim or Ecclesiastic Prisoner will be broken on the wheel to show their piety and devotion. The model you choose is permanently removed from your Warband, but in a campaign you can redistribute their Battlekit to other models that would be allowed to have it in the following Quartermaster Step. Injuries that would be inflicted on the Anchorite Shrine are instead inflicted on its unfortunate victim, until the victim finally passes away. This is represented by the following special rules, which apply to the Anchorite Shrine until it suffers an Out of Action result on the Injury Table:"},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"It has an Armour Characteristic of 0 and does not have the NEGATE SHRAPNEL and TOUGH Keywords.","glossary":[{"val":"NEGATE SHRAPNEL","id":"kw_negate_kw_shrapnel"},{"val":"TOUGH","id":"kw_tough"}]},{"tags":{"desc_type":"default"},"content":"It treats Down results as Minor Hit results."},{"tags":{"desc_type":"default"},"content":"The first time the Anchorite Shrine suffers an Out of Action result on the Injury Table, it is treated as a No Effect result. When this happens, any BLOOD MARKERS on the Anchorite Shrine are removed, and from then on, these special rules no longer apply to the model, it has an Armour Characteristic of -3, and gains the NEGATE SHRAPNEL and TOUGH Keywords (the TOUGH Keyword will apply the next time the Anchorite Shrine suffers an Out of Action result on the Injury Table)."}]}],"options":[]},{"id":"ab_finishthefallen","name":"Finish the Fallen","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Due to their knowledge of anatomy and physiology, medics are experts at inflicting debilitating injuries and excruciating pain. Add +1 INJURY DICE to Injury Rolls for Melee Attacks made by a Combat Medic if the target is Down and does not have the BLACK GRAIL or DEMONIC Keywords.","glossary":[{"val":"DEMONIC","id":"kw_demonic"},{"val":"BLACK GRAIL","id":"kw_blackgrail"},{"val":"+1 INJURY DICE","id":"kw_injurydice"},{"val":"Down","id":"gl_down"}]}],"options":[]},{"id":"ab_expertmedic","name":"Expert Medic","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add +2 DICE to the Risky Success Roll when a Combat Medic carries out a Treat ACTION with their Medi-kit.","glossary":[{"val":"+2 DICE","id":"kw_plusdice"},{"val":"ACTION","id":"kw_action"},{"val":"Risky Success","id":"kw_riskyaction"}]}],"options":[]},{"id":"ab_conventconditioning","name":"Convent Conditioning","source":"core","tags":{"trait":true},"contextdata":{"keyword_ignore":{"value":["kw_fear"]}},"description":[{"tags":{"desc_type":"default"},"content":"The medic is immune to FEAR.","glossary":[{"val":"FEAR","id":"kw_fear"}]}],"options":[]},{"id":"ab_divinejudgement","name":"Divine Judgement","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A Witchburner can take a Divine Judgement ACTION. If they do so, take a Risky Success Roll for the Witchburner. If the roll is a Failure, the Witchburner\u2019s Activation ends. If the roll is a Success or a Critical Success, pick 1 enemy model within 24\\" of the Witchburner (no Line of Sight is required) and place 1 BLOOD MARKER next to them. If the enemy model has the BLACK GRAIL, DEMONIC, or HERETIC Keyword, place 2 BLOOD MARKERs next to it instead of 1.","glossary":[{"val":"Risky Success","id":"kw_riskyaction"},{"val":"ACTION","id":"kw_action"},{"val":"HERETIC","id":"kw_heretic"},{"val":"BLACK GRAIL","id":"kw_blackgrail"},{"val":"DEMONIC","id":"kw_demonic"},{"val":"BLOOD MARKER","id":"kw_bloodmarker"}]}],"options":[]},{"id":"ab_dignifiedconduct","name":"Dignified Conduct","source":"core","tags":{"trait":true,"bonus":true},"contextdata":{"bonus_ability":{"action_type":["dash"]}},"description":[{"tags":{"desc_type":"default"},"content":"Witchburners are well aware of the dignity of their status. A Witchburner cannot take a Dash ACTION.","glossary":[{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"ab_faithfulfollowers","name":"Faithful Followers","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"When you Activate a model within 1\\" of a Mendelist Ammo Monk, you can also Activate the Mendelist Monk if they have not yet been Activated during the Turn. If you do so, the two models can take their ACTIONS in any order you wish, and you can switch between the two models freely. If the Activation of either model ends (due to a failed Risky Success Roll, for example), the other model can carry on with its Activation normally.","glossary":[{"val":"ACTIONS","id":"kw_action"}]}],"options":[]},{"id":"ab_theammunitionsacrement","name":"The Ammunition Sacrement","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A Mendelist Ammo Monk can take an Ammunition Sacrament ACTION. If they do so, take a Risky Success Roll for the Mendelist Ammo Monk. If the roll is a Failure, the Mendelist Ammo Monk\u2019s Activation ends. If the roll is a Success or a Critical Success, pick 1 friendly model within 1\\" of the Mendelist Ammo Monk and in their Line of Sight, and then pick one of the following Ammunition Sacraments. The Sacrament you pick applies to the model until the end of its next Activation.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"Risky Success","id":"kw_riskyaction"}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Bullet of the Guided Path: "},{"tags":{"desc_type":"default"},"content":"Add +1 DICE to rolls for Ranged Attacks made by the model.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"}]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Cartridge of His Wrath: "},{"tags":{"desc_type":"default"},"content":"Add the BLAST 2\\" and SHRAPNEL Keywords to Ranged Weapons used by the model that do not have the BLAST or FLAMETHROWER Keywords.","glossary":[{"val":"SHRAPNEL","id":"kw_shrapnel"},{"val":"BLAST","id":"kw_blast"},{"val":"FLAMETHROWER","id":"kw_flamethrower"}]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Echo of His Word: "},{"tags":{"desc_type":"default"},"content":"Add +1 INJURY DICE to rolls for Ranged Attacks made by the model.","glossary":[{"val":"+1 INJURY DICE","id":"kw_injurydice1"}]}]}]}]}],"options":[]},{"id":"ab_lightningspeed","name":"Lightning Speed","source":"core","tags":{"trait":true},"contextdata":{"equipment_add_keyword":{"equip_check":[{"check_type":"id","value":"eq_trenchpolearm"}],"special_additions":[{"base":"kw_cleave","value":2}]}},"description":[{"tags":{"desc_type":"default"},"content":"An Observer\'s Polearm has the CLEAVE 2 Keyword.","glossary":[{"val":"CLEAVE","id":"kw_cleave"}]}],"options":[]},{"id":"ab_temporalfuge","name":"Temporal Fuge","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add -1 DICE to rolls for Ranged Attacks and Melee Attacks that target an Observer.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"}]}],"options":[]},{"id":"ab_eyeofgod","name":"Eye of God","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"You can re-roll failed Success Rolls and Risky Success Rolls for an Observer. If you do so and any of the re-rolled dice show a 1, then the roll is treated as a Failure, the Observer is taken Down and their Activation immediately ends.","glossary":[{"val":"Risky Success","id":"kw_riskyaction"},{"val":"BLOOD MARKER","id":"kw_bloodmarker"},{"val":"Down","id":"gl_down"}]}],"options":[]},{"id":"ab_voiceofgod","name":"Voice of God","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"An Observer can take a Voice of God ACTION. If they do so, take a Risky Success Roll for the Observer. If the roll is a Failure, the Observer\u2019s Activation ends. If the roll is a Success or Critical Success, pick 1 model (friend or foe), anywhere on the battlefield, that has not been Activated this Turn. The Observer\u2019s Activation then ends, and the other model\u2019s Activation immediately begins.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"Risky Success","id":"kw_riskyaction"}]}],"options":[]},{"id":"ab_dayofhiswrath","name":"Day of His Wrath","source":"core","tags":{"action":true},"contextdata":{"armour_ignore":{}},"description":[{"tags":{"desc_type":"default"},"content":"A Cavalcade of the Tenth Plague War Prophet can take a Day of his Wrath ACTION. If they do so, take a Risky Success Roll for the model. If the roll is a Failure the War Prophet\u2019s Activation ends immediately. If the roll is a Success, make an Injury Roll with the IGNORE ARMOUR Keyword for 1 enemy model within 3\\" of the War Prophet. If the roll is a Critical Success, make an Injury Roll with +1 INJURY DICE and the IGNORE ARMOUR Keyword for 1 enemy model within 3\\" of the War Prophet","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"Risky Success","id":"kw_riskyaction"},{"val":"+1 INJURY DICE","id":"kw_injurydice"},{"val":"IGNORE ARMOUR","id":"kw_ignorearmour"}]}],"options":[]},{"id":"ab_holdyourfire","name":"Hold Your Fire!","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"The Lieutenant orders their warband to stop shooting, forcing the enemy to move first. To represent this, a Lieutenant can take a Hold Your Fire! ACTION. If they do so, pick 1 enemy model that is in the Lieutenant\u2019s Line of Sight and that the opponent is allowed to Activate. The Lieutenant\u2019s Activation then ends, and the opponent must Activate the model you picked.","glossary":[{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"ab_godiswithus","name":"God is With Us!","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A Trench Cleric can take a God is With Us! ACTION. If they do so, take a Risky Success Roll for the Trench Cleric. If the roll is a Failure, nothing happens, and the Trench Cleric\u2019s Activation ends. If the roll is a Success or a Critical Success, you can place 1 BLESSING MARKER next to the Trench Cleric or a friendly model within 6\\" of the Trench Cleric.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"Risky Success","id":"kw_riskyaction"},{"val":"BLESSING MARKER","id":"kw_blessingmarker"}]}],"options":[]},{"id":"ab_blessedpalm","name":"Blessed Psalm","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A Holy Warrior can take a Blessed Psalm ACTION. If they do so, you can remove 1 BLESSED MARKER from the Holy Warrior and place it beside a friendly model. A Success Roll is not required to carry out this Action.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"BLESSED MARKER","id":"kw_blessingmarker"}]}],"options":[]},{"id":"ab_godsmercy","name":"God\'s Mercy","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Select one friendly model within 3\u201d of the warrior and take an ACTION. If successful, the target immediately stands if Down and loses up to one BLOOD MARKER or INFECTION MARKER(your choice) it has.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"BLOOD MARKER","id":"kw_bloodmarker"},{"val":"INFECTION MARKER","id":"kw_infectionmarker"}]}],"options":[]},{"id":"ab_awayserpents","name":"Away Serpents!","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"An \xc9ire Rangers Trench Cleric can take an Away Serpents! ACTION. If they do so, pick 1 enemy model within 12\\" of the Trench Cleric and say that the Trench Cleric orders them to crawl on their belly like a snake. Then take a Risky Success Roll for the Trench Cleric. Add -1 DICE to the roll if the enemy model is mounted on a base that is 40mm or greater. If the roll is a Failure, nothing happens, and the Trench Cleric\u2019s Activation ends. If the roll is a Success or Critical Success, the enemy model is taken Down.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"Risky Success","id":"kw_riskyaction"},{"val":"-1 DICE","id":"kw_minusdice"},{"val":"Down","id":"gl_down"}]}],"options":[]},{"id":"ab_onwardschristiansoldiers","name":"Onward, Christian Soldiers!","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Friendly NEW ANTIOCH models within 8\\" of a Trench Cleric have the NEGATE FEAR Keyword.","glossary":[{"val":"NEGATE FEAR","id":"kw_negate_kw_fear"}]}],"options":[]},{"id":"ab_ariseandbehealed","name":"Arise and be Healed!","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"The Trench Cleric can take an Arise and be Healed! ACTION. If they do so, take a Risky Success Roll for the Trench Cleric. If the roll is a Failure, nothing happens, and the Trench Cleric\u2019s Activation ends. If the roll is a Success or Critical Success, pick the Trench Cleric or 1 friendly model within 3\\" of the Trench Cleric. The model you pick can stand back up at no cost to their movement, and you can remove up to D3 BLOOD MARKERS and/or INFECTION MARKERS from the model.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"Risky Success","id":"kw_riskyaction"},{"val":"BLOOD MARKERS","id":"kw_bloodmarker"},{"val":"INFECTION MARKERS","id":"kw_infectionmarker"}]}],"options":[]},{"id":"ab_aim","name":"Aim","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A Sniper Priest can take an Aim ACTION. If they do so, take a Risky Success Roll for the model and add +2 DICE to the roll. If the roll is a Failure, nothing happens and the Sniper Priest\u2019s Activation ends. If the roll is a Success or Critical Success, for the rest of the Activation, add +2 DICE to the Success Rolls for Ranged Attacks that are made by the Sniper Priest","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"Risky Success","id":"kw_riskyaction"},{"val":"+2 DICE","id":"kw_plusdice"}]}],"options":[]},{"id":"ab_absolutefaith","name":"Absolute Faith","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Sniper Priests do not use their eyesight to aim at their enemies. The opposing player cannot spend BLOOD MARKERS to add -DICE to a Ranged Attack by a Sniper Priest.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"},{"val":"-DICE","id":"kw_minusdice"}]}],"options":[]},{"id":"ab_shockcharge","name":"Shock Charge","source":"core","tags":{"trait":true,"bonus":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"When you roll the Charge Bonus for a Shock Trooper, roll 1 extra D6 and use the single highest die to determine the bonus."}],"options":[]},{"id":"ab_assaultdrill","name":"Assault Drill","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"You can ignore the Effect of the HEAVY Keyword for 1 Melee Weapon that a Shock Trooper has. A Shock Trooper still cannot have more than 1 Weapon (of any type) with the HEAVY Keyword.","glossary":[{"val":"HEAVY","id":"kw_heavy"}]}],"options":[]},{"id":"ab_battlefielddemolition","name":"Battlefield Demolition","source":"core","tags":{"trait":true},"contextdata":{"equipment_add_keyword":{"equip_check":[{"check_type":"id","value":"eq_satchelcharge"}],"removals":["kw_heavy"]}},"description":[{"tags":{"desc_type":"default"},"content":"You can ignore the Effect of the HEAVY Keyword for 1 Satchel Charge that a Combat Engineer has. A Combat Engineer still cannot have more than 1 Weapon (of any type) with the HEAVY Keyword.","glossary":[{"val":"HEAVY","id":"kw_heavy"}]}],"options":[]},{"id":"ab_fortifyeng","name":"Fortify","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A Combat Engineer can take a Fortify ACTION. If they do so, take a Risky Success Roll for the Combat Engineer. If the roll is a Failure, the Combat Engineer\u2019s Activation ends. If the roll is a Success or a Critical Success, the Combat Engineer has the COVER Keyword until they move away from their current position.","glossary":[{"val":"Risky Success","id":"kw_riskyaction"},{"val":"ACTION","id":"kw_action"},{"val":"COVER","id":"kw_cover"}]}],"options":[]},{"id":"ab_demineengineer","name":"Defuse Mine","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"When you move a Combat Engineer into contact with a Marker or terrain piece with the MINED Keyword, you can say the Combat Engineer will try to defuse the mine before it detonates. If you do so, take a Risky Success Roll for the model. If the roll is a Failure the mine detonates and the Combat Engineer\u2019s Activation ends. If the roll is a Success or a Critical Success, the mine does not detonate, and the Marker or terrain piece loses the MINED Keyword. A model that sets a mine on a terrain piece can defuse the mine automatically if it moves into contact with the terrain piece (do not take a Risky Success Roll).","glossary":[{"val":"Risky Success","id":"kw_riskyaction"},{"val":"MINED","id":"kw_mined"}]}],"options":[]},{"id":"ab_setmineengineer","name":"Set Mine","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A Combat Engineer can take a Set Mine ACTION if they are in contact with a terrain piece that measures up to 8\u201d by 8\u201d that doesn\'t have the MINED Keyword. If they do so, take a Success Roll for the model and add +2 DICE to the roll. If the roll is a Failure, nothing happens. If the roll is a Success or a Critical Success, the terrain piece gains the MINED Keyword.","glossary":[{"val":"+2 DICE","id":"kw_plusdice"},{"val":"MINED","id":"kw_mined"},{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"ab_undeadfortitude","name":"Undead Fortitude","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add -1 INJURY DICE to Injury Rolls for the model unless the attack has the FIRE Keyword.","glossary":[{"val":"FIRE","id":"kw_fire"},{"val":"-1 INJURY DICE","id":"kw_injurydice"}]}],"options":[]},{"id":"ab_beelzebubstouch","name":"Beelzebub\'s Touch","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Whenever a Melee Attack made by a Lord of Tumours causes any BLOOD MARKERS or INFECTION MARKERS to be placed on the target, place 1 extra INFECTION MARKER next to the target model.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"},{"val":"INFECTION MARKER","id":"kw_bloodmarker"}]}],"options":[]},{"id":"ab_crushingblows","name":"Crushing Blows","source":"core","tags":{"trait":true},"contextdata":{"equipment_add_keyword":{"equip_check":[{"check_type":"id","value":"eq_unarmed_nopenalty"}],"special_additions":[{"base":"kw_cleave","value":2}]},"unarmed_penalty_remove":{}},"description":[{"tags":{"desc_type":"default"},"content":"A Lord of Tumours can make a Crushing Blows Melee Attack even if it does not have any Melee Weapons, or instead of using any Melee Weapons that it has. If it does so, this Melee Attack has the CLEAVE 2 Keyword."}],"options":[]},{"id":"ab_plagueknightranks","name":"Plague Knight Ranks","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Each Plague Knight in a Warband can be given a Plague Knight Ranks at the indicated cost in \ud83d\udc51."}],"options":[]},{"id":"ab_parasitictick","name":"Parasite Host","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Whenever a Melee Attack made by a Corpse Guard causes any BLOOD MARKERS or INFECTIONMARKERS to be placed on the target, you can remove up to 1 BLOOD MARKER or INFECTION MARKER from the attacking Corpse Guard model.","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"},{"val":"INFECTION MARKERS","id":"kw_bloodmarker"},{"val":"BLACK GRAIL","id":"kw_blackgrail"}]}],"options":[]},{"id":"ab_bodyguard_blackgrail","name":"Black Grail Bodyguard","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"If a friendly BLACK GRAIL model within 1\u201d of a Corpse Guard is hit by a Ranged Attack or Melee Attack, you can say that the Corpse Guard will take the hit. If you do so, make an Injury Roll for the Corpse Guard instead of the original target. This ability cannot be used against attacks that have the BLAST Keyword.","glossary":[{"val":"BLAST","id":"kw_blast"},{"val":"BLACK GRAIL","id":"kw_blackgrail"}]}],"options":[]},{"id":"ab_frighteningspeed","name":"Frightening Speed","source":"core","tags":{"trait":true,"bonus":true},"contextdata":{"bonus_ability":{"action_type":["dash"]}},"description":[{"tags":{"desc_type":"default"},"content":"Add +1 DICE to the Risky Success Roll for a Hound of the Black Grail that is taking a Dash ACTION. In addition, do not halve the Movement Characteristic of a Hound of the Cult of the Black Grail when it stands up at the start of an Activation.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"},{"val":"Down","id":"gl_down"},{"val":"Risky Success","id":"kw_riskyaction"},{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"ab_diseasecarrier","name":"Disease Carrier","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"If an enemy model is Activated while it is within 1\\" of a Hound of the Black Grail, place 1 INFECTION MARKER next to the enemy model before it carries out any Actions.","glossary":[{"val":"INFECTION MARKER","id":"kw_infectionmarker"}]}],"options":[]},{"id":"ab_infestedcarcasses","name":"Infested Carcasses","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Hounds of the Black Grail models can add the INFECTION MARKERS Keyword to their melee attacks at a cost of +5 \ud83d\udc51  each.","glossary":[{"val":"INFECTION MARKERS","id":"kw_infectionmarker"}]}],"options":[]},{"id":"ab_overwhelminghorde","name":"Overwhelming Horde","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A Grail Thrall or Fly Thrall can make a Melee Attack even though it does not have a Melee Weapon. In addition, add +1 DICE to the Success Roll for a Melee Attack made by a Grail Thrall or Fly Thrall for each other friendly model within 3\\" of the attacking model (not including the attacking model itself ).","glossary":[{"val":"BLACK GRAIL","id":"kw_blackgrail"},{"val":"+1 DICE","id":"kw_plusdice"},{"val":"+4 DICE","id":"kw_plusdice"}]}],"options":[]},{"id":"ab_infectedproboscis","name":"Infected Proboscis","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A Herald of Beelzebub can make a Melee Attack with the INFECTION MARKERS Keyword even though it does not have a Melee Weapon. If a Melee Attack made by a Herald of Beelzebub causes any INFECTION MARKERS to be placed on the target model, you can remove up to 1 BLOOD MARKER from the attacking Herald of Beelzebub.","glossary":[{"val":"INFECTION MARKERS","id":"kw_infectionmarker"},{"val":"BLOOD MARKER","id":"kw_bloodmarker"}]}],"options":[]},{"id":"ab_maddeningbuzzing","name":"Maddening Buzzing","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Up to 1 Herald of Beelzebub model can have the Maddening Buzzing ability at a cost of +10 \ud83d\udc51. Success Rolls taken for enemy models within 8\\" of a model with this ability become Risky Success Rolls (there is no additional effect if they are Risky Success Rolls already).","glossary":[{"val":"Risky Success","id":"kw_riskyaction"}]}],"options":[]},{"id":"ab_corpulent","name":"Corpulent","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add -2 INJURY DICE to Injury Rolls for any attacks that target an Amalgam model.","glossary":[{"val":"-2 INJURY DICE","id":"kw_injurydice"}]}],"options":[]},{"id":"ab_sixarmedmonstrosity","name":"Six-Armed Monstrosity","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"An Amalgam can take 1 Shoot ACTION per Activation with each Ranged Weapon it is equipped with, and can take 1 Fight ACTION per Activation with each Melee Weapon it is equipped with. The Off-Hand Weapon modifier does not apply to any of its Melee Attacks.","glossary":[{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"ab_trample_amalgam","name":"Trample","source":"core","tags":{"action":true,"attack":true,"action_type":["attack_melee"]},"contextdata":{"custom_attack_type":{"range":0},"armour_ignore":{}},"description":[{"tags":{"desc_type":"default"},"content":"An Amalgam can take a Trample ACTION. If it does so, it can make a Melee Attack that must target an enemy model that is Down. A Trample Melee Attack does not use a Melee Weapon and has the IGNORE ARMOUR Keyword.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"IGNORE ARMOUR","id":"kw_ignorearmour"}]}],"options":[]},{"id":"ab_unstoppable","name":"Unstoppable","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Enemy models that are mounted on a base of 32mm or less are not allowed to make a Melee Attack when an Amalgam that is within 1\u201d of them retreats. In addition, an Amalgam can take a Move or Charge ACTION if all enemy models within 1\u201d of it are mounted on bases of 32mm or less."}],"options":[]},{"id":"ab_goetics_praetor","name":"Goetic Power","source":"core","tags":{"trait":true},"contextdata":{"special_category_upgrades":{"upgrades":[{"category":"goetic","count":2}]}},"description":[{"tags":{"desc_type":"default"},"content":"A Praetor can have up to 2 Goetic Powers. Praetors from a Warband dedicated to Wrath can have only 1 Goetic Power.","glossary":[{"val":"GOETIC","id":"kw_goetic"}]}],"options":[]},{"id":"ab_goetics_praetor_wrath","name":"Goetic Power","source":"core","tags":{"trait":true},"contextdata":{"special_category_upgrades":{"upgrades":[{"category":"goetic","count":1}]}},"description":[{"tags":{"desc_type":"default"},"content":"A Praetor can have up to 2 Goetic Powers. Praetors from a Warband dedicated to Wrath can have only 1 Goetic Power.","glossary":[{"val":"GOETIC","id":"kw_goetic"}]}],"options":[]},{"id":"ab_goetics_sorcerer","name":"Goetic Magic","source":"core","tags":{"trait":true},"contextdata":{"special_category_upgrades":{"upgrades":[{"category":"goetic","count":3}]}},"description":[{"tags":{"desc_type":"default"},"content":"Powers A Sorcerer can have up to 3 Goetic Powers. In addition it has the Blessing of the Serpent Moon Goetic Spell which is taken at no extra cost.","glossary":[{"val":"GOETIC","id":"kw_goetic"}]}],"options":[]},{"id":"ab_blessingsoftheserpentmoon","name":"Blessings of the Serpent Moon","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"GOETIC (2/4/6) Spell: You can cast this spell before an Injury Roll is made for the spellcaster. If you do so, add a -1 INJURY MODIFIER to the roll for every 2 BLOOD MARKERS that were paid to cast the spell.","glossary":[{"val":"GOETIC","id":"kw_goetic"},{"val":"BLOOD MARKERS","id":"kw_bloodmarker"},{"val":"INJURY MODIFIER","id":"kw_injurymodifier"}]}],"options":[]},{"id":"ab_shadowwalker","name":"Shadow Walker","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"GOETIC (2): You can cast this spell before the spellcaster takes a Retreat ACTION. If you do so, enemy models cannot make a Melee Attack on the spellcaster when they retreat.","glossary":[{"val":"GOETIC","id":"kw_goetic"},{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"ab_lefthandpath","name":"Left-Hand Path","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"GOETIC (2): You can cast this spell when the spellcaster takes a Move, Charge, Retreat or Dash ACTION and moves into contact with a terrain piece. If you do so, you can interrupt the spellcaster\'s move to remove them from the battlefield and then redeploy them in contact with another terrain piece and more than 1\u201d from any enemy models, unless the spellcaster is making a charge. If the spell is cast during a charge, the spellcaster must redeploy closer to the target than it was before it was removed from the battlefield. You can then carry on with the spellcaster\'s move as normal.","glossary":[{"val":"GOETIC","id":"kw_goetic"},{"val":"ACTION","id":"kw_action"}]},{"tags":{"desc_type":"gap"}},{"tags":{"desc_type":"default"},"content":"This spell can be cast as part of any movement the Hunter takes during its Activation (Standard Move, Retreat, Charge, Dash etc.). If it is cast as part of a Charge, it does not need to take the most direct route possible, but it still selects the target as normal (Line of Sight, within 12\u201d etc.)."}],"options":[]},{"id":"ab_oraclebeastcloak","name":"Oracle Beast Cloak","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"GOETIC (3): You can cast this spell once per Turn after an Injury Roll is made for the spellcaster. If you do so, the result of the Injury Roll is changed to a No Effect result (make Injury Rolls for other models hit by the same attack normally).","glossary":[{"val":"GOETIC","id":"kw_goetic"}]}],"options":[]},{"id":"ab_goetics_knight","name":"Goetic Power","source":"core","tags":{"trait":true},"contextdata":{"special_category_upgrades":{"upgrades":[{"category":"goetic","count":1}]}},"description":[{"tags":{"desc_type":"default"},"content":"A Hell Knight can have up to 2 GOETIC Powers, one of which must be the Blood Magic Goetic Spell taken at no extra cost. ","glossary":[{"val":"GOETIC","id":"kw_goetic"}]}],"options":[]},{"id":"ab_bloodmagic","name":"Blood Magic","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"GOETIC (1): You can cast this spell before making any Injury Rolls for an attack made by the spellcaster. If you do so, add +1 INJURY DICE to all of the Injury Rolls you make for the attack. For example, if the attack has the BLAST Keyword, you would add +1 INJURY DICE to the rolls for each model that was caught in the blast radius of the attack.","glossary":[{"val":"GOETIC","id":"kw_goetic"},{"val":"BLAST","id":"kw_blast"},{"val":"+1 INJURY DICE","id":"kw_injurydice"}]}],"options":[]},{"id":"ab_hateful","name":"Hateful","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"When a Yoke Fiend is Activated, if it is more than 1\\" from any enemy models and there is an enemy model within 12\\" of it, that is in its Line of Sight, and that does not have the BLACK GRAIL or DEMONIC Keywords, then the Yoke Fiend must take a Charge ACTION with the closest enemy model as the target of the charge. If the Yoke Fiend was Down at the start of the Activation, it will stand up if it can do so and must then attempt to make the charge.","glossary":[{"val":"BLACK GRAIL","id":"kw_blackgrail"},{"val":"DEMONIC","id":"kw_demonic"},{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"ab_torturer","name":"Torturer","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"When a Yoke Fiend makes a Melee Attack, it can target a friendly model that does not have the DEMONIC Keyword. If it does so, it cannot attack again during the same Activation.","glossary":[{"val":"DEMONIC","id":"kw_demonic"}]}],"options":[]},{"id":"ab_annihilator","name":"Annihilator","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A Desecrated Saint can take 1 Fight ACTION per Activation with each Melee Weapon it is equipped with. The Off-hand Weapon modifier does not apply to any of its Melee Attacks.","glossary":[{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"ab_poisonstingers","name":"Poison Stingers","source":"core","tags":{"action":true},"contextdata":{"equipment_add_keyword":{"equip_check":[{"check_type":"id","value":"eq_unarmed_nopenalty"}],"special_additions":[{"base":"kw_cleave","value":2}]},"unarmed_penalty_remove":{}},"description":[{"tags":{"desc_type":"default"},"content":"A Pit Locust can make a Melee Attack with the CLEAVE 2 and SHRAPNEL Keywords even though it does not have a Melee Weapon.","glossary":[{"val":"SHRAPNEL","id":"kw_shrapnel"},{"val":"IGNORE OFF-HAND WEAPON","id":"kw_ignoremodifier"},{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"ab_demonicaura","name":"Demonic Aura","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A Desecrated Saint has one of the following auras. The aura it has is determined by the Deadly Sin its Warband is dedicated to."}],"options":[]},{"id":"ab_demonicaura_sloth","name":"Aura of Sloth","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Enemy models within 8\\" of this Desecrated Saint treat Minor Hit results as Down results. The aura affects enemy models that normally treat Down results as a Minor Hit result (such as models wearing Machine Armour).","glossary":[{"val":"Down","id":"gl_down"}]}],"options":[]},{"id":"ab_demonicaura_envy","name":"Aura of Envy","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Enemy models within 12\u201d of the Desecrated Saint cannot charge a model from the Desecrated Saint\'s Warband that is within 1\u201d of a model from the charging model\'s own Warband (it is allowed to move around them in order to reach a different target and does not treat them as an interposing enemy model)."}],"options":[]},{"id":"ab_demonicaura_pride","name":"Aura of Pride","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Place 1 BLOOD MARKER next to each enemy model that is within 8\\" of this Desecrated Saint when the Desecrated Saint\u2019s Activation ends.","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"}]}],"options":[]},{"id":"ab_demonicaura_greed","name":"Aura of Greed","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Enemy models within 12\\" of this Desecrated Saint that take a Charge ACTION must charge this Desecrated Saint if it is within 12\\", in the Line of Sight of the charging model, and can be reached without having to cross Dangerous terrain or Climb, Jump, Jump Down or make a Diving Charge","glossary":[{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"ab_demonicaura_wrath","name":"Aura of Wrath","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add +1 DICE to rolls for Melee Attacks and the Risky Success Roll for taking a Dash ACTION for friendly models that are within 8\\" of this Desecrated Saint (including the Desecrated Saint themselves).","glossary":[{"val":"+1 DICE","id":"kw_plusdice"}]}],"options":[]},{"id":"ab_demonicaura_lust","name":"Aura of Lust","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"If an enemy model within 4\\" of this Desecrated Saint is wearing Armour that does not have the IMPERVIOUS Keyword, you can negate any of the Armour\u2019s Keywords or special rules, if you wish to do so, for as long as the model is within 4\\" of the Desecrated Saint. The only rules or Keywords you cannot negate are those that affect the size of the base the model is mounted on. For example, if a model has Machine Armour, you could say that you will negate its -3 INJURY MODIFIER Keyword and Steadfast special rule while it is within 4\\" of the Desecrated Saint, but that you choose not to negate the Machine Armour\u2019s Bulky special rule.","glossary":[{"val":"INJURY MODIFIER","id":"kw_injurymodifier"},{"val":"IMPERVIOUS","id":"kw_impervious"}]}],"options":[]},{"id":"ab_demonicaura_gluttony","name":"Aura of Famine","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add -1 DICE to rolls for enemy models within 8\\" of this Desecrated Saint unless the enemy model has the BLACK GRAIL or ARTIFICIAL Keyword.","glossary":[{"val":"BLACK GRAIL","id":"kw_blackgrail"},{"val":"ARTIFICIAL","id":"kw_artificial"},{"val":"-1 DICE","id":"kw_minusdice"}]}],"options":[]},{"id":"ab_holydna","name":"Sample of Holy DNA","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"When this model is activated, one INFECTION MARKER or BLOOD MARKER the model has becomes a BLESSINGS MARKER instead.","glossary":[{"val":"INFECTION MARKER","id":"kw_infectionmarker"},{"val":"BLOOD MARKER","id":"kw_bloodmarker"},{"val":"BLESSINGS MARKER","id":"kw_blessingmarker"}]}],"options":[]},{"id":"ab_fruitofgoodandevil","name":"Fruit from the Tree of Good and Evil Knowledge","source":"core","tags":{"trait":true},"contextdata":{"keyword_add":{"value":["kw_demonic"]}},"description":[{"tags":{"desc_type":"default"},"content":"Any model eating this fruit will immediately gain any Skill of your choice normally available to your Warband/this model (including any Exploration Skill). In addition the model will gain the Keyword DEMONIC.","glossary":[{"val":"DEMONIC","id":"kw_demonic"}]}],"options":[]},{"id":"ab_prizespecimens","name":"Prize Specimens","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"When a Combat Biologist takes any enemy model with the Keyword DEMONIC or BLACK GRAIL Out of Action with a Melee attack, place 1 BLESSING MARKER beside the Combat Biologist.","glossary":[{"val":"DEMONIC","id":"kw_demonic"},{"val":"BLACK GRAIL","id":"kw_blackgrail"},{"val":"BLESSING MARKER","id":"kw_blessingmarker"}]}],"options":[]},{"id":"ab_battlefieldvivisection","name":"Battlefield Vivisection","source":"core","tags":{"trait":true},"contextdata":{"bonus_deed":{"deeds":["gd_battlefieldvivisection"]}},"description":[{"tags":{"desc_type":"default"},"content":"Whenever a Combat Biologist is part of your Warband, add the Gather Knowledge Glorious Deed to those normally available in each scenario you play."},{"tags":{"desc_type":"gap"}},{"tags":{"desc_type":"glorious_deed"},"content":"gd_battlefieldvivisection"}],"options":[]},{"id":"ab_ravenousinfection","name":"Ravenous Infection","source":"creature_caster","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Some infected with The Great Hunger care only to proliferate their agonizing disease. A model with the Ravenous Infection Ability may make a RISKY ACTION to spread the virus. On a success, the model may place an INFECTION MARKER on any other model within 1\u201d, as the Great Hunger virus burns through the battlefield. A model\u2019s Activation ends immediately after using this Ability.","glossary":[{"val":"RISKY ACTION","id":"kw_riskyaction"},{"val":"INFECTION MARKER","id":"kw_infectionmarker"}]}],"options":[]},{"id":"ab_pestilent","name":"Pestilent","source":"creature_caster","tags":{"trait":true},"contextdata":{"equipment_add_keyword":{"equip_check":[{"check_type":"category","value":"melee"}],"additions":["kw_critical","kw_infectionmarker"]}},"description":[{"tags":{"desc_type":"default"},"content":"A Matagot Hag can make a Melee Attack with the INFECTION MARKERS and CRITICAL Keywords even though she does not have a Melee Weapon. In  addition, whenever a Melee Attack made by a Matagot Hag causes any INFECTION MARKERS to be placed on the target, place 1 extra INFECTION MARKER next to  the target model.","glossary":[{"val":"CRITICAL","id":"kw_critical"},{"val":"INFECTION MARKER","id":"kw_infectionmarker"}]}],"options":[]},{"id":"ab_frenziedfollowers","name":"Frenzied Followers","source":"creature_caster","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add +1 DICE to Risky Success Rolls for friendly models that are  taking a Dash ACTION and are within 8\u201d of the Matagot Hag.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"},{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"ab_cadreofflesh","name":"Cadre of Flesh","source":"creature_caster","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"If a friendly Matagot Hag within 4\u201d of a friendly Ravenous model is  hit by a Ranged Attack or Melee Attack, you can say that the Ravenous will take the  hit. If you do so, make an Injury Roll for the Ravenous instead of the Matagot Hag. This ability cannot be used against attacks that have the BLAST Keyword.","glossary":[{"val":"BLAST","id":"kw_blast"}]}],"options":[]},{"id":"ab_arcanaputrescere","name":"Arcana Putrescere","source":"creature_caster","tags":{"trait":true},"contextdata":{"special_category_upgrades":{"upgrades":[{"category":"arcana_putrescere","count":3}]}},"description":[{"tags":{"desc_type":"default"},"content":"A Matagot Hag can have up to 3 Arcana Putrescere Powers."}],"options":[]},{"id":"ab_arcanaputrescere_one","name":"Arcana Putrescere","source":"creature_caster","tags":{"trait":true},"contextdata":{"special_category_upgrades":{"upgrades":[{"category":"arcana_putrescere","count":1}]}},"description":[{"tags":{"desc_type":"default"},"content":"The model can have 1 Arcana Putrescere Power.","glossary":[{"val":"ARCANA PUTRESCERE","id":"kw_putrescere"}]}],"options":[]},{"id":"ab_plagueriddenflesh","name":"Plague-Ridden Flesh","source":"creature_caster","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add -2 INJURY DICE to Injury Rolls for a Gregori Gula unless the attack has the FIRE Keyword.","glossary":[{"val":"-2 INJURY DICE","id":"kw_injurydice"},{"val":"FIRE","id":"kw_fire"}]}],"options":[]},{"id":"ab_gnashingandwailing","name":"Gnashing and Tearing","source":"creature_caster","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"When a Gregori Gula takes a Fight ACTION, it can make two Melee Attacks even though it does not have a Melee Weapon. The first attack is  carried out as if it were being made with a Melee Weapon with the +1 INJURY DICE Keyword. The second attack is carried out as if it were being made with a Melee  Weapon with the +1 INJURY DICE and IGNORE OFF-HAND WEAPON Keywords.  In addition, a Gregori Gula can make a third Melee Attack with the +1 INJURY DICE  Keyword if it made a charge move earlier in the same Activation.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"+1 DICE","id":"kw_plusdice"},{"val":"INJURY DICE","id":"kw_injurydice"},{"val":"IGNORE OFF-HAND WEAPON","id":"kw_ignoremodifier"}]}],"options":[]},{"id":"ab_dormanthunger","name":"Dormant Hunger","source":"creature_caster","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Once per Turn, when a Gregori Gula would be taken Out of Action,  it instead goes dormant. Remove all INFECTION MARKERS from the Gregori Gula  and replace its model with a 60mm Marker to represent its dormant state. The  Marker counts as dangerous terrain. The Marker cannot be attacked, or targeted by  any Abilities that interact with Terrain, and it does not count as a model for any  purpose. If a friendly Ravenous model finishes a move within 1\u201d of this Marker,  remove the Marker and the Ravenous model, and set up the Gregori Gula model  where the Marker was. A Gregori Gula set up in this way is Down, but can be  Activated this Turn if it has not been Activated already. A Gregori Gula in a dormant  state is treated as Out of Action for the purposes of Morale, and in the Trauma Step of  the Campaign Phase if it is dormant at the end of a battle. If a Ravenous model was  removed to revive the Gregori Gula, then the Ravenous is removed from the Warband  Roster in the Trauma Step (it dies to save the Gregori Gula).","glossary":[{"val":"INFECTION MARKERS","id":"kw_infectionmarker"}]}],"options":[]},{"id":"ab_specialdeployment_cradle","name":"Special Deployment","source":"creature_caster","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"If the scenario you are playing allows INFILTRATORS to use their special deployment rules, after any INFILTRATORS have deployed, you can deploy these Cradle Thralls within 1\u201d of any edge of the battlefield and more than 8\u201d away from any enemy models.","glossary":[{"val":"INFILTRATORS","id":"kw_infiltrator"}]}],"options":[]},{"id":"ab_golgothatektites","name":"Applied Golgotha Tektites","source":"core","tags":{"trait":true},"contextdata":{"keyword_ignore":{"value":["kw_gas","kw_fire","kw_shrapnel"]}},"description":[{"tags":{"desc_type":"default"},"content":"The armour now ignores extra BLOOD MARKERS from Keywords GAS, FIRE, and SHRAPNEL.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"},{"val":"GAS","id":"kw_gas"},{"val":"FIRE","id":"kw_fire"},{"val":"SHRAPNEL","id":"kw_shrapnel"}]}],"options":[]},{"id":"ab_painamplifier","name":"Pain Amplifier","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Lower the roll needed to achieve a Critical Success for a Melee Attack made by this weapon by 1 for each BLOOD MARKER next to the target (so an enemy with 1 BLOOD MARKER will suffer a Critical Success on a roll of 11+).","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"}]}],"options":[]},{"id":"ab_inflictpain","name":"Inflict Pain","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"If an attack made by this weapon against a target without the ARTIFICIAL Keyword and mounted on a 40mm base or smaller is a Critical Success, but the target is not taken Out of Action, then the target will move D3\u201d in a straight line directly away from the attacking model. It will stop if it moves into a friendly model, Impassable terrain, a terrain piece it cannot cross without having to Climb, or immediately before it would move within 1\u201d of an enemy model other than the attacker. If the target model would finish the move more than 1\u201d from the attacking model, then the attacking model and any other models within 1\u201d of the target model can make an additional Melee Attack on it before it is moved, as if the target were carrying out a retreat move. If this causes the model to move a second time, add D3\u201d to the distance it is moved but do not attack it again.","glossary":[{"val":"ARTIFICIAL","id":"kw_artificial"}]}],"options":[]},{"id":"ab_focusedfire","name":"Focused Fire","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"When this Weapon is used to make 2 Ranged Attacks, the same enemy model must be the target of both attacks."}],"options":[]},{"id":"ab_tungstenorichalcumalloyshot","name":"Tungsten-orichalcum Alloy Shot","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add +1 INJURY DICE to rolls for Ranged Attacks made by this Weapon at Short Range.","glossary":[{"val":"+1 INJURY DICE","id":"kw_injurydice"}]}],"options":[]},{"id":"ab_gunsilent","name":"Silent","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add +1 DICE to the roll if the attacker is in contact with a terrain piece that is at least \xbd\\" tall and that lies in between it and the target model.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"}]}],"options":[]},{"id":"ab_bullseye","name":"Bull\'s Eye","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"If the Success Roll for a Ranged Attack made with a Sniper Rifle is a Critical Success then the Injury Roll for the attack has the IGNORE ARMOUR Keyword.","glossary":[{"val":"IGNORE ARMOUR","id":"kw_ignorearmour"}]}],"options":[]},{"id":"ab_quickbursts","name":"Quick Bursts","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A model armed with a Submachine Gun can take two Shoot ACTIONS during the same Activation, as long as the Submachine Gun is used to make both attacks. The Shoot ACTIONS can be taken one after the other, or other ACTIONS can be taken between the Shoot ACTIONS.","glossary":[{"val":"ACTIONS","id":"kw_action"}]}],"options":[]},{"id":"ab_liquidfire","name":"Liquid Fire","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"If the Success Roll for a Ranged Attack made with an Incendiary Grenade is a Critical Success then the Injury Roll for the attack has the IGNORE ARMOUR Keyword.","glossary":[{"val":"IGNORE ARMOUR","id":"kw_ignorearmour"}]}],"options":[]},{"id":"ab_dangerous","name":"Dangerous","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Place 1 BLOOD MARKER next to the model using this Weapon if it makes a Melee Attack and the Success Roll is a Success or a Critical Success.","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"}]}],"options":[]},{"id":"ab_despatch","name":"Despatch","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"This weapon has the IGNORE ARMOUR Keyword if the target is Down.","glossary":[{"val":"IGNORE ARMOUR","id":"kw_ignorearmour"}]}],"options":[]},{"id":"ab_unwieldy","name":"Unwieldy","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"The +1 DICE Keyword does not apply when this Weapon is used as an Off-Hand Weapon.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"}]}],"options":[]},{"id":"ab_armourpiercing","name":"Armour Piercing","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"When this Battlekit is taken, you must choose 1 Ranged Weapon that the model already has that does not have the BLAST, FIRE, GAS, or SHRAPNEL Keywords. The Weapon gains the ARMOUR-PIERCING Keyword.","glossary":[{"val":"ARMOUR PIERCING","id":"kw_armourpiering"},{"val":"BLAST","id":"kw_blast"},{"val":"FIRE","id":"kw_fire"},{"val":"GAS","id":"kw_gas"},{"val":"SHRAPNEL","id":"kw_shrapnel"}]}],"options":[]},{"id":"ab_binoculars","name":"Survey the Land","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Enemy models cannot use the INFILTRATOR Keyword to deploy within 16\u201d of a model with this Keyword unless they are in their own side\u2019s deployment zone.","glossary":[{"val":"INFILTRATOR","id":"kw_infiltrator"}]}],"options":[]},{"id":"ab_talisman","name":"Talisman","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Once during a game, when a Risky Success Roll for a model with a Blessed Icon is a Failure, you can say that the model will use its Talisman. If you do, the model\u2019s Activation does not end.","glossary":[{"val":"Risky Success","id":"kw_riskyaction"}]}],"options":[]},{"id":"ab_dumdums","name":"Dum-Dums","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"When this Battlekit is taken, you must choose 1 Ranged Weapon that the model already has that does not have the BLAST, FIRE, GAS, or SHRAPNEL keywords. The Weapon gains the CRITICAL Keyword.","glossary":[{"val":"CRITICAL","id":"kw_critical"},{"val":"BLAST","id":"kw_blast"},{"val":"FIRE","id":"kw_fire"},{"val":"GAS","id":"kw_gas"},{"val":"SHRAPNEL","id":"kw_shrapnel"}]}],"options":[]},{"id":"ab_shrine","name":"Site of Worship","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":" After you deploy a model that has Field Shrine, you can also deploy their Field Shrine anywhere wholly within their deployment zone. In the Morale Phase, each friendly Field Shrine on the battlefield adds 3 to the number of models you have in your Warband that are not Down or Out of Action, up to a maximum bonus of 9 extra models. Once deployed, the model that had the Field Shrine is not considered to be carrying it for the rest of the game."}],"options":[]},{"id":"ab_tearitdown","name":"Tear it Down!","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Models can attack a Field Shrine as if it were an enemy model. If it is hit by an attack or is in the blast radius of an attack made with a Weapon that has the BLAST Keyword, it is removed from the battlefield and is removed from the Warband Roster (no Injury Roll is required).","glossary":[{"val":"BLAST","id":"kw_blast"}]}],"options":[]},{"id":"ab_contract","name":"Fiery Exodus","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"If a model with a Hellbound Soul Contract is taken Out of Action, before removing it from the battlefield add 1 BLOOD MARKER to each enemy model that is within 1\\" of it. Models that have the NEGATE FIRE Keyword are not affected by this special rule.","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"},{"val":"NEGATE FIRE","id":"kw_negate_kw_fire"}]}],"options":[]},{"id":"ab_incendiary","name":"Incendiary","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"When this Battlekit is taken, you must choose 1 Ranged Weapon that the model already has that does not have the BLAST, FIRE, GAS, or SHRAPNEL keywords. The Weapon gains the FIRE Keyword.","glossary":[{"val":"FIRE","id":"kw_fire"},{"val":"BLAST","id":"kw_blast"},{"val":"GAS","id":"kw_gas"},{"val":"SHRAPNEL","id":"kw_shrapnel"}]}],"options":[]},{"id":"ab_inuredtopain","name":"Inured to Pain","source":"core","tags":{"equipment":true},"contextdata":{"injury_dice_mod":{"modifiers":[-1]}},"description":[{"tags":{"desc_type":"default"},"content":"When you deploy a model that has Martyrdom Pills you can say that they will consume them. If you do so, until the end of the game the model has the NEGATE FEAR Keyword. In addition, add -1 INJURY DICE to rolls for attacks that hit the model.","glossary":[{"val":"NEGATE FEAR","id":"kw_negate_kw_fear"},{"val":"-1 INJURY DICE","id":"kw_injurydice"}]}],"options":[]},{"id":"ab_treat","name":"Treat","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"ACTION: A model with this Keyword can take a Treat ACTION. If it does so, take a Risky Success Roll for the model. If the roll is a Failure, the model\u2019s Activation ends immediately. If it is a Success or a Critical Success, you can do one of the following things:","glossary":[{"val":"ACTION","id":"kw_action"}]},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Remove 1 BLOOD MARKER from the model or a friendly model within 1\\" of the model.","glossary":[{"val":"1 BLOOD MARKER","id":"kw_bloodmarker"}]},{"tags":{"desc_type":"default"},"content":"Stand up a friendly model that is Down and within 1\\" of the model."}]}],"options":[]},{"id":"ab_mountaineer","name":"Ropes and Pitons","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add +1 DICE to Risky Success Rolls for friendly models with this special rule that are attempting to climb a sheer surface.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"},{"val":"Risky Success","id":"kw_riskyaction"}]}],"options":[]},{"id":"ab_fanfare","name":"Fanfare","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add +1 DICE to Risky Success Rolls for friendly models that are taking a Dash ACTION and are within 4\\" of one or more models with a Musical Instrument.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"},{"val":"Risky Success","id":"kw_riskyaction"}]}],"options":[]},{"id":"ab_angelicfanfare","name":"Angelic Fanfare","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add +1 DICE to Risky Success Rolls for friendly models that are taking a Dash ACTION and are within 4\\" of one or more models with a Musical Instrument.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"},{"val":"Risky Success","id":"kw_riskyaction"}]}],"options":[]},{"id":"ab_shovel","name":"Dug In","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A model equipped with a Shovel that starts the game on Open terrain has the COVER Keyword until it moves away from its starting position. In addition, a model equipped with a Shovel can use it as a 2-Handed Melee Weapon instead of using any other Melee Weapons it has.","glossary":[{"val":"COVER","id":"kw_cover"}]}],"options":[]},{"id":"ab_tracers","name":"Tracers","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"When this Battlekit is taken, you must choose 1 Ranged Weapon that the model already has that does not have the BLAST, FIRE, GAS, or SHRAPNEL keywords. The Weapon gains the +1 DICE Keyword.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"},{"val":"BLAST","id":"kw_blast"},{"val":"FIRE","id":"kw_fire"},{"val":"GAS","id":"kw_gas"},{"val":"SHRAPNEL","id":"kw_shrapnel"}]}],"options":[]},{"id":"ab_feeble","name":"Feeble","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add +2 DICE and +2 INJURY DICE to the rolls for attacks that target a Peasant.","glossary":[{"val":"INJURY DICE","id":"kw_injurydice"},{"val":"+2 DICE","id":"kw_plusdice"}]}],"options":[]},{"id":"ab_livingbattlefield","name":"Living Battlefield","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Models can treat The Dragon and its base as if they were Dangerous terrain, and can finish a move on top of the Dragon\u2019s model. All Success Rolls for a model on top of The Dragon become Risky Success Rolls if they are not already. Attacks made by a model that is on top of The Dragon and target it get +1 DICE and +1 INJURY DICE. The Dragon cannot attack a model that is on top of it. When the Dragon moves, any models on top of The Dragon are moved with it. After The Dragon\u2019s move is finished, make a Success Roll for each model on it. If the roll is a Failure, the model Falls from the Dragon. Move it the shortest possible distance to the ground and place it Down, and then make an Injury Roll for it if it has Fallen 3\\" or more. If the roll is a Success or Critical Success, nothing happens. Take the Success Roll in the same way if a model on top of The Dragon is taken Down for any reason.","glossary":[{"val":"INJURY DICE","id":"kw_injurydice"},{"val":"+1 DICE","id":"kw_plusdice"},{"val":"Risky Success","id":"kw_riskyaction"}]}],"options":[]},{"id":"ab_mandibles","name":"Mandibles","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A Hell Tick can make a Melee Attack even though it does not have a Melee Weapon. Add +1 INJURY DICE to rolls for a Melee Attack made by a Hell Tick. Whenever a Melee Attack made by a Hell Tick causes any BLOOD MARKERS to be placed on the target, you can remove up to 1 BLOOD MARKER from the attacking Hell Tick model.","glossary":[{"val":"+1 INJURY DICE","id":"kw_injurydice"},{"val":"BLOOD MARKER","id":"kw_bloodmarker"}]}],"options":[]},{"id":"ab_poisoned","name":"Poisoned","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Whenever a Melee Attack made by a Hell Tick causes any BLOOD MARKERS to be placed on the target, the target model becomes poisoned (it cannot be poisoned more than once). When you Activate a friendly model that has been poisoned, you must place 1 BLOOD MARKER next to the model. You can then spend a BLESSING MARKER that is next to the model if you wish to do so. If you do, the model is no longer poisoned.","glossary":[{"val":"BLESSING MARKER","id":"kw_blessingmarker"},{"val":"BLOOD MARKER","id":"kw_bloodmarker"}]}],"options":[]},{"id":"ab_leadtodeath","name":"Lead To Death","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Place 1 BLESSING MARKER next to a model that has the Armour of Cobar each time a friendly model is taken Out of Action.","glossary":[{"val":"BLESSING MARKER","id":"kw_blessingmarker"}]}],"options":[]},{"id":"ab_weightofsins","name":"Weight of Sins","source":"core","tags":{"equipment":true},"contextdata":{"model_equipment_restriction":{"removed":[{"category":"shield","res_type":"all"}]}},"description":[{"tags":{"desc_type":"default"},"content":"Add -1 DICE to the Risky Success Roll for a model that has the Armour of Cobar that is taking a Dash ACTION. In addition, a model wearing the Armour of Cobar cannot have a Shield.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"},{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"ab_insectwings","name":"Insect Wings","source":"core","tags":{"equipment":true},"contextdata":{"set_stat":{"upgrades":[{"stat":"movement","value":8},{"stat":"movetype","value":1}]}},"description":[{"tags":{"desc_type":"default"},"content":"Change the Movement Characteristic of a model that has the Armour of the Fly to 8\\"/Flying"}],"options":[]},{"id":"ab_suckeddry","name":"Sucked Dry","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"After a model that has the Armour of the Fly takes a Fight ACTION, it can immediately make an additional Melee Attack with +1 DICE to the roll. However, do not make an Injury Roll if this Melee Attack hits the target; instead place 1 BLOOD MARKER next to the target model.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"},{"val":"ACTION","id":"kw_action"},{"val":"BLOOD MARKER","id":"kw_bloodmarker"}]}],"options":[]},{"id":"ab_privilegedaccess","name":"Privileged Access","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Pick 1 Weapon or suit of Armour from your Armoury Tables that has the Limit special rule. Note on your Warband Roster that the Limit is increased by 1. The increase will remain in place even if the model that has the Battlefield Title is removed from your Roster later during the campaign. You are encouraged to come up with a special title for the Weapon or Armour that you have gained access to."}],"options":[]},{"id":"ab_manyleggedform","name":"Many-Legged Form","source":"core","tags":{"equipment":true},"contextdata":{"set_arms":{"ranged":0,"melee":0,"special":0},"unique":{},"unremovable":{},"remove_on_equip":{"removed":[{"category":"ranged","res_type":"all","value":""},{"category":"melee","res_type":"all","value":""},{"category":"armour","res_type":"all","value":""},{"category":"grenade","res_type":"all","value":""},{"category":"shield","res_type":"all","value":""},{"category":"equipment","res_type":"keyword","value":"kw_held"}]},"model_equipment_restriction":{"removed":[{"category":"ranged","res_type":"all","value":""},{"category":"melee","res_type":"all","value":""},{"category":"armour","res_type":"all","value":""},{"category":"grenade","res_type":"all","value":""},{"category":"shield","res_type":"all","value":""},{"category":"equipment","res_type":"keyword","value":"kw_held"}]}},"description":[{"tags":{"desc_type":"default"},"content":"A model that has been blessed with Beelzebub\u2019s Embrace has its arms replaced with fly-like limbs. The model cannot have Weapons, Grenades, Shields or Equipment that has the HELD Keyword. It can take a Melee Attack with the CLEAVE 4 Keyword even though it doesn\u2019t have any Melee Weapons. If all 4 Melee Attacks successfully hit the same target model, and the target is mounted on a 32mm base or smaller, then the target is immediately taken Out of Action when it is hit by the fourth attack. Do not make an Injury Roll for the fourth attack, and any rules or abilities that would change the result do not apply (i.e. the TOUGH Keyword would not affect the fourth attack). This Battlekit cannot be removed or lost for any reason throughout the campaign.","glossary":[{"val":"HELD","id":"kw_held"},{"val":"CLEAVE 4","id":"kw_cleave"},{"val":"ACTION","id":"kw_action"},{"val":"TOUGH","id":"kw_tough"}]}],"options":[]},{"id":"ab_spiritofthebeast","name":"Spirit of the Beast","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Once per Turn, you can do one of the following things for a model that as a Bestial Skin Cloak."},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Add +1 DICE to the roll for a Melee Attack made by the model.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"}]},{"tags":{"desc_type":"default"},"content":"Add +1 INJURY DICE to the roll for a Melee Attack made by the model.","glossary":[{"val":"+1 INJURY DICE","id":"kw_injurydice"}]},{"tags":{"desc_type":"default"},"content":"Add +1 DICE to the Risky Success Roll when the model takes a Dash ACTION.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"},{"val":"Risky Success","id":"kw_riskyaction"},{"val":"ACTION","id":"kw_action"}]}]}],"options":[]},{"id":"ab_continuouslitanyofprayers","name":"Continuous Litany of Prayers","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A model that has the Book of Battle Prayers cannot take a Dash ACTION.","glossary":[{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"ab_speakablessing","name":"Speak A Blessing","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A model that has the Book of Battle Prayers can take a Speak a Blessing ACTION. If they do so, take a Success Roll for the model. If the roll is a Failure nothing happens. If the roll is a Success or Critical Success, you can place 1 BLESSING MARKER next to a friendly model that is within 12\\" of the model with the Book of Battle Prayers.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"BLESSING MARKER","id":"kw_blessingmarker"}]}],"options":[]},{"id":"ab_gruesomeweight","name":"Gruesome Weight","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"When a model with a Cruel Helmet is deployed for the first time in a game, they are placed Down. In addition, if they are the target of an attack on the first turn before they have been Activated, place 1 extra BLOOD MARKER next to them (even if the attack misses or the Injury Roll for it has No Effect).","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"}]}],"options":[]},{"id":"ab_drinkfromthecup","name":"Drink From The Cup","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"At the start of the game, before either side deploys, you can pick either 1 ELITE model or up to 4 Thralls to drink from the cup. For the rest of the game, add +1 DICE to the Risky Success Roll for models that drank from the cup when they take a Dash ACTION.","glossary":[{"val":"ELITE","id":"kw_elite"},{"val":"+1 DICE","id":"kw_plusdice"},{"val":"Risky Success","id":"kw_riskyaction"},{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"ab_inspiringgift","name":"Inspiring Gift","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A model that has a suit of Damascus Armour is not sent back home until they suffer their 4th Battle Scar. In addition, a suit of Damascus Armour cannot be removed from a model during a campaign unless the model wearing it has been killed or been declared Unfit for Duty."}],"options":[]},{"id":"ab_deadlylight","name":"Deadly Light","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Double the number of BLOOD MARKERS placed next to a model by an Injury Roll for an attack made with a Demonic Aura Grenade. In addition, an Injury Roll is made for all models that are within 3\\" of the target point when the Demonic Aura Grenade explodes, even if interposing terrain blocks the line of sight.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"}]}],"options":[]},{"id":"ab_myrmidonwings","name":"Myrmidon Wings","source":"core","tags":{"equipment":true},"contextdata":{"set_stat":{"upgrades":[{"stat":"movement","value":10},{"stat":"movetype","value":1}]}},"description":[{"tags":{"desc_type":"default"},"content":"Change the Movement Characteristic of a model that has the Ducal Winged Armour to 10\\"/Flying."}],"options":[]},{"id":"ab_steadfast","name":"Steadfast","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"When a model that has this Battlekit suffers a Down result on the Injury table, it is treated as a Minor Hit result instead."}],"options":[]},{"id":"ab_twinblows","name":"Twin Blows","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"After a model with the Executioner\u2019s Axe makes a Melee Attack, it can immediately make a second Melee Attack with the axe. The additional attack for the Executioner\u2019s Axe cannot be combined with further additional attacks allowed by other Abilities or Skills (you can make two Melee Attacks with the Axe and no more)."}],"options":[]},{"id":"ab_fieldhospital","name":"Battlefield Surgery","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A Field Hospital cannot be allocated to a model, but is added to your Arsenal. If your Warband also includes a Combat Medic, a Jaberian Alchemist, or a Sister of Saint Cosmas, at the end of the Trauma Step in the Campaign Phase you can use a Field Hospital to treat 1 model from your Warband that has 1 or more Battle Scars. If you do so, roll 2D6. On a roll of 7+ you can remove 1 of the model\u2019s Battle Scars; on a roll of 3-6 nothing happens; on a roll of 2 the model receives 1 extra Battle Scar."}],"options":[]},{"id":"ab_rallytotheflag","name":"Rally to the Flag","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"If a model with a Great Banner of New Antioch is on the Battlefield when you take a Morale Check (even if they are Down), you can choose for the Morale Check to be a Success or for your Warband to flee."}],"options":[]},{"id":"ab_sandstorm","name":"Sandstorm","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Models that start an Activation within 24\u201d of an enemy model that has the Banner of Desert Wind have 1 subtracted from their Movement Characteristic until the end of the Activation. This rule does not apply if the model with the Banner of Desert Wind is Down."}],"options":[]},{"id":"ab_spiritofvengance","name":"Spirit of Vengance","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add +1 INJURY DICE to rolls against models that have the BLACK GRAIL or DEMONIC Keyword.","glossary":[{"val":"+1 INJURY DICE","id":"kw_injurydice"},{"val":"BLACK GRAIL","id":"kw_blackgrail"},{"val":"DEMONIC","id":"kw_demonic"}]}],"options":[]},{"id":"ab_blowthyhorn","name":"Blow Thy Horn","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A model with the Horn of Joshua can take a Blow Thy Horn ACTION. If they do so, take a Risky Success Roll for the model and add +1 DICE to the roll. If the roll is a Failure, nothing happens and the models Activation ends. If the roll is a Success or Critical Success, pick 1 terrain piece that is within 12\u201d of the model with the Horn of Joshua and that measures up to 8\u201d by 8\u201d. Make an Injury Roll for each model (friend or foe) that is on or in contact with the terrain piece, and then remove the terrain piece from the game. Models that were on top of the terrain piece Fall directly down to the battlefield, and an additional Injury Roll may have to be made for them if they Fall 3\u201d or more. Once a model has successfully taken a Blow Thy Horn ACTION, it cannot be used again in the same game.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"Risky Success","id":"kw_riskyaction"},{"val":"+1 DICE","id":"kw_plusdice"}]}],"options":[]},{"id":"ab_famousdeed","name":"Famous Deeds","source":"core","tags":{"equipment":true},"contextdata":{"gain_glory":{"value":1}},"description":[{"tags":{"desc_type":"default"},"content":"At the end of each game, your Warband receives 1 \u263c for each model with a Knighthood that is on the battlefield."}],"options":[]},{"id":"ab_goeticpower","name":"Goetic Secrets","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"You can purchase a Goetic Power for a Sorcerer that has Koraktor, the Great Tome of Hell. It can be taken in addition to the 3 Goetic Powers the Sorcerer can normally have, and you can ignore any stipulations that would normally apply (such as the Sin the Sorcerer\u2019s Warband needs to be dedicated to, or it only being allowed for a model that isn\u2019t a Sorcerer). The additional power is purchased in the Quartermaster Step and its Cost must be paid normally."}],"options":[]},{"id":"ab_devouringswarm","name":"Devouring Swarm","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"When a target is hit with the Locust Spitter, the mindless hunger of the Lord of Flies compels the swarm to continue devouring. If the Success Roll for a Ranged Attack made with Locust Spitter is a Success or Critical Success, after making the Injury Roll for the target, subtract the range to the target from 18\\". Then make another Injury Roll for the closest model (friend or foe) that is within this distance of the target model and has a line of sight to it (no Success Roll is required)."},{"tags":{"desc_type":"gap"}},{"tags":{"desc_type":"default"},"content":"After the second target\u2019s Injury Roll has been made, the swarm moves on again, but this time the remaining distance it can travel is reduced by the distance between the first and second target, and it must target a new model that has not already been attacked. This carries on until the swarm either runs out of new target models it can reach and has a line of sight to, or the distance it is allowed to move is reduced to 0\\""},{"tags":{"desc_type":"gap"}},{"tags":{"desc_type":"default"},"content":"For example, if the range to the first target was 10\\", then after making an Injury Roll for the first target, the closest model that can see the first target and is within (18-10) = 8\\" of it would also be hit. If the second target was within 3\\" of the first, then after making the second Injury Roll , the closest model that has not yet been attacked, and which can see the second target and is within (18-10-3) = 5\\" of it would be hit, and so on."},{"tags":{"desc_type":"gap"}},{"tags":{"desc_type":"default"},"content":"Note that if the original attack was a Critical Success, the Injury Roll modifier only applies to the first Injury Roll; it does not apply to any subsequent models that are hit by the swarm. However, the -1 INJURY DICE and IGNORE ARMOUR Keywords apply to all of the Injury Rolls made.","glossary":[{"val":"-1 INJURY DICE","id":"kw_injurydice"},{"val":"IGNORE ARMOUR","id":"kw_ignorearmour"}]}],"options":[]},{"id":"ab_markofthepit","name":"Mark of the Pit","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"The model carries a mark such as a living tattoo or a rune painted or carved by the hand of its infernal patron. At the start of each game, after both sides have deployed, if a friendly model with the Lordship of This World is on the battlefield you can pick 1 terrain piece that measures up to 8\\" by 8\\" and does not have any models from your Warband on it. You can move the terrain piece 6\\" in any direction, but it must finish wholly upon the battlefield, more than 1\\" from any other terrain pieces, and not on top of any of the models from your Warband. Any enemy models that are on the terrain piece are moved with it. Enemy models that the terrain piece is moved on top of are removed from the battlefield and then immediately redeployed by your opponent anywhere they desire within their deployment zone."}],"options":[]},{"id":"ab_enhancedbullets","name":"Enhanced Bullets","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":" If the target of an attack made with a Masterwork Jezzail is within 1\\" of a friendly model, you do not have to roll a D6 to see if the friendly model is hit by the attack. In addition, if the Success Roll for an attack made with a Masterwork Jezzail is more than 7, after making the Injury Roll for the target, subtract 7 from the Success Roll. Then make an Injury Roll for the closest enemy model that is within this distance in inches of the target model and has a Line of Sight to it (no Success Roll is taken)."},{"tags":{"desc_type":"gap"}},{"tags":{"desc_type":"default"},"content":"For example, if you roll a 9 for the Success Roll, you could make an Injury Roll for a second enemy model that was within (9-7=) 2\\" of the target model and in its Line of Sight. Note that if the original attack was a Critical Success, you only add the extra INJURY DICE to the first Injury Roll; the extra dice do not apply to any subsequent models that are hit.","glossary":[{"val":"INJURY DICE","id":"kw_injurydice"}]}],"options":[]},{"id":"ab_luckofthedevil","name":"Luck of the Devil","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"At the start of each game, before deployment, if you have a model with a Piece of Silver in your Warband, take 3 D6, set them to 6, and put them aside. During the game, unless you are making an Injury Roll or a Bloodbath Roll, you can replace a D6 that you are about to roll with one of the dice you put aside. It is not rolled and is always treated as having rolled a 6 (roll any other dice normally). You can only use one of the dice you set aside per roll. If the model with the Piece of Silver is taken Out of Action, any of the dice you set aside that remain are discarded and cannot be used."}],"options":[]},{"id":"ab_restrained","name":"Brought to Heel","source":"core","tags":{"equipment":true},"contextdata":{"upgrade_stat":{"upgrades":[{"stat":"ranged","value":1}]},"equipment_remove_ability":{"action_id":["ab_hateful"]}},"description":[{"tags":{"desc_type":"default"},"content":"Add +1 DICE to rolls made for a Ranged Attack made by a Yoke Fiend that has a Restraining Muzzle. In addition, the Hateful ability does not apply to a Yoke Fiend that has a Restraining Muzzle.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"}]}],"options":[]},{"id":"ab_holymachine","name":"Holy Machine","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A Resurrection Engine is not allocated to a model (just add it to your Arsenal instead). Once during the campaign, you can use the Resurrection Engine to change the result rolled on the Trauma Table to a Full Recovery result. The Resurrection Engine is Consumed when it is used."}],"options":[]},{"id":"ab_disposablerocket","name":"Disposable Rocket","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A Rocket-Propelled Grenade can be used once during a campaign as a Ranged Weapon. If a model that has been hit by a Rocket-Propelled Grenade is not taken Out of Action by the Injury Roll, it is blown D6\\" in a straight line directly away from the attacking model. It stops if it is blown into another model, Impassable terrain or terrain it cannot cross without having to Climb."}],"options":[]},{"id":"ab_helpfulservitor","name":"Helpful Servitor","source":"core","tags":{"equipment":true},"contextdata":{"gain_ducats":{"dice_value":5}},"description":[{"tags":{"desc_type":"default"},"content":"A Salvage Golem is not allocated to a model (just add it to your Arsenal instead). At the end of each game, your Warband receives an extra D6x5 \ud83d\udc51  for each Salvage Golem it has in its Arsenal."}],"options":[]},{"id":"ab_swathedinsmoke","name":"Swathed in Smoke","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"At the start of a game, after deployment, if you have a model with a Smokescreen, you can say they will use it. If you do so, divide the battlefield into 4 equal quarters and say which one is swathed in smoke. Add -1 DICE to Ranged Attacks if the Line of Sight for the attack crosses any part of the quarter that is swathed in smoke.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"}]}],"options":[]},{"id":"ab_enhancedaccuracy","name":"Enhanced Accuracy","source":"core","tags":{"equipment":true},"contextdata":{"unique":{}},"description":[{"tags":{"desc_type":"default"},"content":"When this Glory Item is given to a model, you must choose 1 Ranged Weapon that the model already has and which has the word \u201cRifle\u201d as part of its name. That Weapon gains the IGNORE LONG RANGE Keyword. A Sniper Scope cannot be reallocated during the Quartermaster Step."}],"options":[]},{"id":"ab_brazenbullgrandcannon","name":"Brazen Bull Grand Cannon","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A Grand Cannon that is found as a Glory Item must be carried by a Brazen Bull and uses the profile above for all rules purposes."}],"options":[]},{"id":"ab_mobilegrandcannon","name":"Mobile Grand Cannon","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A Grand Cannon carried by a Brazen Bull is treated as a 1-Handed Ranged Weapon that uses the profile above for all rules purposes. If it is removed from the Brazen Bull for any reason, or if the Brazen Bull is removed from the Warband for any reason, then the Grand Cannon is lost (it cannot be fielded as a stationary gun battery)."}],"options":[]},{"id":"ab_unstoppableobject","name":"Unstoppable Object","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"If a model that has been hit by a Sultanate Grand Cannon is not taken Out of Action by the Injury Roll, it is pushed D6\\" in a straight line directly away from the attacking model. The model stops if it pushed into another model, Impassable terrain or a terrain piece it cannot cross without having to Climb."}],"options":[]},{"id":"ab_retribution","name":"Retribution","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"If an ACTION taken by a model causes one or more BLOOD MARKERS to be placed next to a model with the Mark of Cain, then place an equal number of BLOOD MARKERS next to the model that took the ACTION.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"},{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"ab_draggedforwards","name":"Dragged Forwards","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"If an attack made with a Tormentor Chain is a Success or Critical Success, do not make an Injury Roll for the target. Instead, place 1 BLOOD MARKER next to the target, and then place a second BLOOD MARKER on the target because the Tormentor Chain has the SHRAPNEL Keyword. After placing the BLOOD MARKERS, you can move the target model up to 12\\" in a straight line, but you must move it so that it finishes the move as close as possible to the attacking model. This move can be used to make the model move within 1\u201d of an enemy, make a retreat move, Climb, Jump, or Jump Down. The model cannot make a Diving Charge.","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"},{"val":"SHRAPNEL","id":"kw_shrapnel"}]}],"options":[]},{"id":"ab_deadlyembrace","name":"Deadly Embrace","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Enemy models cannot retreat if they are within 1\\" of a model with a Tormentor Chain"}],"options":[]},{"id":"ab_thedogsofwar","name":"The Dogs of War","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"After you deploy a model with a Trench Dog, you can also deploy their Trench Dog. The Trench Dog is treated as if it were a model in the Warband, except that it is not counted as part of the Warband for the purposes of Morale Checks. If a Trench Dog is taken Out of Action, roll for its survival in the same way as you would for a Troops model. Trench Dogs cannot, of course, be Promoted."}],"options":[]},{"id":"ab_packloyalty","name":"Pack Loyalty","source":"core","tags":{},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A Trench Dog has the same Faction Keyword as the model that has it. For example, the owner of a Trench Dog had the NEW ANTIOCH Faction Keyword, then the Trench Dog will have the NEW ANTIOCH Faction Keyword too.","glossary":[{"val":"NEW ANTIOCH","id":"kw_antioch"}]}],"options":[]},{"id":"ab_teethandclaws","name":"Teeth and Claws","source":"core","tags":{},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"The model can make a Melee Attack even though it doesn\u2019t have a Melee Weapon."}],"options":[]},{"id":"ab_ironfists","name":"Iron Fists","source":"core","tags":{},"contextdata":{"equipment_add_keyword":{"equip_check":[{"check_type":"id","value":"eq_unarmed_nopenalty"}],"special_additions":[{"base":"kw_cleave","value":2}]},"unarmed_penalty_remove":{}},"description":[{"tags":{"desc_type":"default"},"content":"The flesh of a Communicant Anti-Tank Hunter is as hard as iron, which makes their fists deadly weapons in their own right. A Communicant Anti-Tank Hunter can make a Melee Attack with the CLEAVE 2 Keyword even though it does not have a Melee Weapon. In addition, the Off-Hand Weapon modifier applies to the second attack.","glossary":[{"val":"CLEAVE","id":"kw_cleave"}]}],"options":[]},{"id":"ab_ballisticboxarmour","name":"Ballistic Box Armour","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add -1 INJURY DICE to Injury Rolls for a model that has Engineer Body Armour that has been hit by an attack with the SHRAPNEL Keyword even if the attacking weapon has the IGNORE ARMOUR Keyword.","glossary":[{"val":"-1 INJURY DICE","id":"kw_injurydice"},{"val":"SHRAPNEL","id":"kw_shrapnel"},{"val":"IGNORE ARMOUR","id":"kw_ignorearmour"}]}],"options":[]},{"id":"ab_bulky","name":"Bulky","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Change the base size of a model that has Machine Armour to 40mm unless it is already 40mm or larger. In addition, a model with Machine Armour cannot be equipped with a Trench Shield and has a Charge Bonus of D3\\" instead of D6\\"."}],"options":[]},{"id":"ab_bulkytank","name":"Bulky","source":"core","tags":{"equipment":true},"contextdata":{"set_stat":{"upgrades":[{"stat":"base","value":[50]},{"stat":"armour","value":-3}]}},"description":[{"tags":{"desc_type":"default"},"content":"A model that has a Tank Palanquin must be mounted on a 50mm base and cannot be equipped with a Shield. In addition, it has a Charge Bonus of D3\\" instead of D6\\"."}],"options":[]},{"id":"ab_deathfromonhigh","name":"Death From On High","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add 3\\" to the height of a model that has a Tank Palanquin when determining if it receives the Elevated Position modifier for any Ranged Attacks that it makes."}],"options":[]},{"id":"ab_celticbulk","name":"Celtic Bulk","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A model that has Machine Armour cannot be equipped with a Trench Shield."}],"options":[]},{"id":"ab_trenchmole","name":"Trench Mole","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Trench Moles are scouts who use tunnels that criss-cross No Man\u2019s Land to reach positions ahead of the main trench lines. Up to 2 Yeomen can be upgraded to Trench Moles with the INFILTRATOR Keyword at a cost of +10 \ud83d\udc51 each. You can include a 3rd Trench Mole in a Warband if the total cost of all of the other models in the Warband (including their Battlekit, etc) adds up to 1,000 \ud83d\udc51 or more.","glossary":[{"val":"INFILTRATOR","id":"kw_infiltrator"}]}],"options":[]},{"id":"ab_inspiringrelic","name":"Inspiring Relic","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"The bearer of this relic does not end their activation after a failed Risky Success Roll.","glossary":[{"val":"Risky Success","id":"kw_riskyaction"}]}],"options":[]},{"id":"ab_heavyexplosive","name":"Heavy Explosive","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Once during a game, a model with a Satchel Charge can use it to make a Ranged Attack."}],"options":[]},{"id":"ab_bagpipes","name":"Bagpipes","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Friendly models within 8\\" of a model that has a set of Bagpipes have the NEGATE FEAR Keyword.","glossary":[{"val":"NEGATE FEAR","id":"kw_negate_kw_fear"}]}],"options":[]},{"id":"ab_tanksplitter","name":"Melt Armour","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"When you make an Injury Roll for an attack made with a Tank-Splitter Sword, determine if the target has an Armour Characteristic that is -1 or greater, or if it is wearing Armour or carrying a Shield. If it does, before rolling the dice for the Success Roll, put one dice aside and turn it so that it shows a roll of \u20186\u2019. Roll the rest of the dice, and then return the dice you put to one side; it counts as having rolled a 6. In addition, attacks made with a Tank-Splitter Sword are not affected by the Dragonslayer Patron Skill."}],"options":[]},{"id":"ab_holysmoke","name":"Chemical Incense","source":"core","tags":{"equipment":true},"contextdata":{"keyword_ignore":{"value":["kw_fear"]}},"description":[{"tags":{"desc_type":"default"},"content":"When you deploy a model that has Holy Smoke, you can say that they will consume it. If you do so, until the end of the game, the model has the NEGATE FEAR Keyword if it doesn\'t already have it, and -1 INJURY DICE is added to Injury Rolls for attacks that hit it.","glossary":[{"val":"NEGATE FEAR","id":"kw_negate_kw_fear"},{"val":"-1 INJURY DICE","id":"kw_injurydice"}]}],"options":[]},{"id":"ab_bypassshield","name":"Bypass Shield","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"The Shotel is specifically designed to overcome enemy shields. Ignore -INJURY DICE or -INJURY MODIFIERS for Shields against Melee Attacks made with a Shotel. Any other Keywords or special rules that apply to the Shield are used normally.","glossary":[{"val":"-INJURY MODIFIERS","id":"kw_injurymodifier"},{"val":"-INJURY DICE","id":"kw_injurydice"}]}],"options":[]},{"id":"ab_healingwaters","name":"Healing Waters","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add +1 DICE when a model with the Holy Water of Lalibela takes a Success Roll for an ACTION that can remove BLOOD MARKERS and/or INFECTION MARKERS from another model or itself.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"},{"val":"BLOOD MARKERS","id":"kw_bloodmarker"},{"val":"INFECTION MARKERS","id":"kw_infectionmarker"}]}],"options":[]},{"id":"ab_tokenofhonour","name":"Token of Honour","source":"core","tags":{"equipment":true},"contextdata":{"upgrade_stat":{"upgrades":[{"stat":"melee","value":1}]}},"description":[{"tags":{"desc_type":"default"},"content":"Add +1 DICE to the Melee Characteristic of a model with an Anfarro.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"}]}],"options":[]},{"id":"ab_virtuousrewards","name":"Virtuous Rewards","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Place 1 BLESSING MARKER next to a model that has a Tabot each time that an ACTION carried out by a friendly model results in one or more BLOOD MARKERS and/or INFECTION MARKERS being removed from one or more friendly models.","glossary":[{"val":"BLESSING MARKER","id":"kw_blessingmarker"},{"val":"ACTION","id":"kw_action"},{"val":"BLOOD MARKERS","id":"kw_bloodmarker"},{"val":"INFECTION MARKERS","id":"kw_infectionmarker"}]}],"options":[]},{"id":"ab_overcharge","name":"Overcharge","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Before making a Ranged Attack with a model armed with a Punt Gun, you can say that the model will Overcharge the weapon. To do so, the model has to either have the STRONG Keyword or be in contact with a friendly model. An Overcharged Ranged Attack gains the BLAST 3\u201d and RELOAD Keywords. After an Overcharged attack has been carried out, place 1 BLOOD MARKER next to the model that made the attack, and its activation immediately ends.","glossary":[{"val":"STRONG","id":"kw_strong"},{"val":"BLOOD MARKER","id":"kw_bloodmarker"},{"val":"BLAST","id":"kw_blast"},{"val":"RELOAD","id":"kw_reload"}]}],"options":[]},{"id":"ab_martyrdom","name":"Martyrdom","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"An Ecclesiastic Prisoner with a Martyrdom Device can take a Trigger Martyrdom Device ACTION. If they do so, the Martyrdom Device detonates and cannot be used again. When Martyrdom Device detonates, make an Injury Roll for all models within 3\\" of the Ecclesiastic Prisoner (friend or foe, including the Ecclesiastic Prisoner). Make the Injury Roll for the Ecclesiastic Prisoner by rolling 4D6 and adding all 4 dice together, and add +1 INJURY DICE to the Injury Rolls for other models that are within 1\\" of the Ecclesiastic Prisoner. If an Ecclesiastic Prisoner detonates their Martyrdom Device and survives the game, you must either buy them a new Martyrdom Device for 35 \ud83d\udc51, or use them without one.","glossary":[{"val":"+1 INJURY DICE","id":"kw_injurydice"},{"val":"BLAST","id":"kw_blast"}]}],"options":[]},{"id":"ab_mightyblows","name":"Mighty Blows","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"When you make an Injury Roll for an attack made with the Catherine Wheel, roll 3D6 and add all 3 dice together. Any +INJURY DICE or -INJURY DICE are added to the roll normally, except that you pick the 3 highest or lowest dice in the roll instead of the 2 highest or lowest.","glossary":[{"val":"INJURY DICE","id":"kw_injurydice"}]}],"options":[]},{"id":"ab_fullauto","name":"Full Auto","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":" Each time you take a Shoot ACTION with an Autocannon, you must choose to either fire it using the Bursts Weapon Profile or the Full Auto  Weapons Profile - which becomes AUTOMATIC 5 and gains the RISKY and RELOAD keywords.","glossary":[{"val":"AUTOMATIC","id":"kw_automatic"},{"val":"RISKY","id":"kw_riskyaction"},{"val":"RELOAD","id":"kw_reload"},{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"ab_fullauto","name":"Full Auto","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Each time you make a Ranged Attack with an Autocannon, you must choose to either fire it using the Bursts Weapon Profile or the Full Auto  Weapons Profile - which becomes AUTOMATIC 5 and gains the RISKY and RELOAD keywords.","glossary":[{"val":"AUTOMATIC","id":"kw_automatic"},{"val":"RISKY","id":"kw_riskyaction"},{"val":"RELOAD","id":"kw_reload"}]}],"options":[]},{"id":"ab_cloudofgas","name":"Cloud of Gas","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"When you take a Shoot ACTION with this model, instead of making a Ranged Attack, you can unleash a cloud of gas. If you do so, do not make a Success Roll. Instead, all other models within 6\u201d of the model using the Gas Censer are hit, and an Injury Roll must be made for each one. Note that the attack hits all models, friend or foe, apart from the model making the attack, regardless of Line of Sight.","glossary":[{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"ab_impossibletostop","name":"Impossible to Stop","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Enemy models are not allowed to make a Melee Attack when a Grand Anchorite Shrine that is within 1\u201d of them retreats. In addition, a Grand Anchorite Shrine can take a Move or Charge ACTION if it starts within 1\u201d of any enemy models.","glossary":[{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"ab_manifoldblessings","name":"Manifold Blessings","source":"core","tags":{"equipment":true},"contextdata":{"set_stat":{"upgrades":[{"stat":"potential","value":0}]}},"description":[{"tags":{"desc_type":"default"},"content":"A Hallowed Anchorite Shrine can be promoted to ELITE status in the Promotions & Experience Step of the Campaign Phase.","glossary":[{"val":"ELITE","id":"kw_elite"}]}],"options":[]},{"id":"ab_advanceddesign","name":"Advanced Design","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"When you take a Dash ACTION with this Anchorite Shrine, you can choose to add +2 DICE to the Risky Success Roll. If you do so, you must place 1 BLOOD MARKER next to the model.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"Risky Success","id":"kw_riskyaction"},{"val":"+2 DICE","id":"kw_plusdice"},{"val":"1 BLOOD MARKER","id":"kw_bloodmarker"}]}],"options":[]},{"id":"ab_grindtodust","name":"Grind To Dust","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"This Anchorite Shrine can take a Grind to Dust ACTION. If it does so, it makes a Melee Attack but must target an enemy model within 1\\" that is Down and is mounted on a base that is 32mm or smaller. The attack does not use a Melee Weapon.","glossary":[{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"ab_divineaccuracy","name":"Divine Accuracy","source":"core","tags":{"equipment":true},"contextdata":{"set_stat":{"upgrades":[{"stat":"ranged","value":1}]}},"description":[{"tags":{"desc_type":"default"},"content":"Add +1 DICE to the Ranged Characteristic of this Anchorite Shrine.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"}]}],"options":[]},{"id":"ab_hightrajectory","name":"High Trajectory","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"When a Trench Mortar is used to make a Ranged Attack, the target model (or target point, if targeting a point on the ground) cannot be within 6\\" of the attacking model. Note that if the attack Scatters it may end up landing within 6\\" of the attacking model."}],"options":[]},{"id":"ab_cowerbeforethelord","name":"Cower Before The Lord","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"An enemy model that does not have the FEAR keyword and that starts an Activation within 1\u201d of this Anchorite Shrine must take a Retreat ACTION as part of the Activation. It cannot take any ACTIONs that require a Risky Success Roll while it is within 1\u201d of this Anchorite Shrine.","glossary":[{"val":"FEAR","id":"kw_fear"},{"val":"ACTION","id":"kw_action"},{"val":"RISKY","id":"kw_riskyaction"}]}],"options":[]},{"id":"ab_anointed","name":"Warded by Blood","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"When you deploy a model that has a Sacrificial Lamb, you can say that they will sacrifice it and anoint themselves with its blood. If you do so, the first BLOOD MARKER placed on the model is ignored.","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"}]}],"options":[]},{"id":"ab_onlytherighteous","name":"Only the Righteous","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Ecclesiastic Prisoners cannot have a Sacrificial Lamb."}],"options":[]},{"id":"ab_castigatortough","name":"Blood of The Lamb","source":"core","tags":{"equipment":true},"contextdata":{"keyword_add":{"value":["kw_tough"]}},"description":[{"tags":{"desc_type":"default"},"content":"Castigators in a Cavalcade of the Tenth Plague Warband have the TOUGH Keyword.","glossary":[{"val":"TOUGH","id":"kw_tough"}]}],"options":[]},{"id":"ab_causeconfusion","name":"Cause Confusion","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Success Rolls taken for Melee Attacks that target a model with a Takwin Anq\u0101 Bird become Risky Success Rolls (there is no additional effect if they are Risky Success Rolls already). In addition, before an enemy model within 1\\" of a model with Takwin Anq\u0101 Bird makes a retreat, the opposing player must take a Risky Success Roll for the model. If the Roll is a Failure the enemy model cannot retreat and its Activation ends. If the Roll is a Success or a Critical Success, the enemy model can retreat normally.","glossary":[{"val":"Risky Success","id":"kw_riskyaction"}]}],"options":[]},{"id":"ab_guidingpath","name":"Guiding Path","source":"core","tags":{"equipment":true},"contextdata":{"unique":{},"validate_final_unit_equipment":{"requirements_single":[{"id":"eq_halberdgun","value":true},{"id":"eq_alaybozan","value":true},{"id":"eq_siegejezzail","value":true},{"id":"eq_jezzail","value":true}]}},"description":[{"tags":{"desc_type":"default"},"content":"Alchemical Ammunition can only be used with an Alaybozan, Halberd-Gun, Jezzail or Siege Jezzail (even though the Alaybozan has the SHRAPNEL Keyword). In a campaign, you cannot reallocate Alchemical Ammunition to another model","glossary":[{"val":"SHRAPNEL","id":"kw_shrapnel"}]}],"options":[]},{"id":"ab_protectionfromharm","name":"Protection From Harm","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add -1 INJURY DICE to Injury Rolls for attacks made by Weapons with the FIRE or GAS Keywords that target a model that has Alchemist Armour, even if the attacking weapon has the IGNORE ARMOUR Keyword.","glossary":[{"val":"-1 INJURY DICE","id":"kw_injurydice"},{"val":"FIRE","id":"kw_fire"},{"val":"GAS","id":"kw_gas"},{"val":"IGNORE ARMOUR","id":"kw_ignorearmour"}]}],"options":[]},{"id":"ab_slashingattack","name":"Slashing Attack","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"If an Assassin\u2019s Dagger causes at least one BLOOD MARKER to be placed next to the target model, the Assassin can use a Dash ACTION to Retreat in the same Activation. In addition, if the Assassin Retreats (by Dashing or using the normal Retreat ACTION) during the same Activation, enemy models within 1\u201d cannot make a Melee Attack against it before it is moved as they would normally be able to do.","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"},{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"ab_blendin","name":"Blend In","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"The Ranged Attack Modifier for a target being in Cover is -2 DICE instead of -1 DICE if the target has a Cloak of Alamut.","glossary":[{"val":"-2 DICE","id":"kw_minusdice"},{"val":"-2 DICE","id":"kw_minusdice"}]}],"options":[]},{"id":"ab_greekfire","name":"Greek Fire","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"When a Flame Cannon is used to make a Ranged Attack, do not make a Success Roll for the attack. Instead, measure a straight line 1mm wide and up to 12\\" long from the attacking model to a point on the ground or a model\u2019s base. The line stops if it reaches a terrain piece that is taller than the model making the Attack. Make an Injury Roll for every model (friend or foe) that is touched by the line, apart from the attacking model itself."}],"options":[]},{"id":"ab_echoingblast","name":"Echoing Blast","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"If the Success Roll for a Ranged Attack with an M.U.R.A.D Bombard that targets an enemy model is a Success or a Critical Success, or if the attack is a Failure and the target point scatters onto a model\'s base, apply the effect of the DEADLY Keyword to the Injury Roll for that model. All other models caught in the M.U.R.A.D. Bombard\u2019s blast radius, or that are in the M.U.R.A.D. Bombard\'s blast radius if it did not hit the target model or scatter onto a model\'s base, are taken Down (do not make an Injury Roll for them).","glossary":[{"val":"DEADLY","id":"kw_deadly"}]}],"options":[]},{"id":"ab_gustsofwind","name":"Gusts of Wind","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Once per game, when you Activate a model that has a Wind Amulet you may declare that it will use the amulet before it takes any ACTIONS. Using the Wind Amulet adds 3\\" to the model\u2019s Movement Characteristic for the rest of the Activation.","glossary":[{"val":"ACTIONS","id":"kw_action"}]}],"options":[]},{"id":"ab_temporalslipstream","name":"Temporal Slipstream","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"If a Ranged Attack made with this Weapon causes any BLOOD MARKERS to be placed on the target model, you can immediately redeploy the attacking model within 1\\" of the target model, regardless of the distance or any intervening obstacles. Note that if the attack takes the target Out of Action, no BLOOD MARKERS are placed and this ability cannot be used.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"}]}],"options":[]},{"id":"ab_attacktwice","name":"Attack Twice","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"You can make 2 Melee Attacks with this Weapon, one after the other, when it is used as a Melee Weapon. Note that if you spend BLOOD MARKERS to modify the Injury Rolls for one attack, they do not modify Injury Rolls for any of the subsequent attacks.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"}]}],"options":[]},{"id":"ab_enhancedstrength","name":"Enhanced Strength","source":"core","tags":{"equipment":true},"contextdata":{"keyword_add":{"value":["kw_strong"]}},"description":[{"tags":{"desc_type":"default"},"content":"When you deploy a model with a Hashashin Leaf for the first time in a game, you can say that the model will consume the Hashashin Leaf. If you do so, the model has the STRONG Keyword for the rest of the game.","glossary":[{"val":"STRONG","id":"kw_strong"}]}],"options":[]},{"id":"ab_pummellingblows","name":"Pummelling Blows","source":"core","tags":{},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"The model can make a Melee Attack even though it does not have any Melee Weapons."}],"options":[]},{"id":"ab_chosenhomunculus","name":"Chosen Homunculus","source":"core","tags":{},"contextdata":{"warband_general_hook":{},"warband_wide":{},"add_onto_warband":{},"model_attatch":{"restriction":[{"rest_type":"id","value":true,"subvalue":"md_takwincreation"}]}},"description":[{"tags":{"desc_type":"default"},"content":"Choose one Takwin Homunculus to be assoctiated with this Alchemist."}],"options":[{"ref_id":"ot_chosenhomunculus","name":"","description":[],"category":"contextobject","self_ask":true,"option_context":{"basic_option_default":{}},"dyna_only":true,"hide":true,"parent_level":1,"question_name":"getMemberOptionsFromWarbandModel"}]},{"id":"ab_fountainoflife","name":"Fountain of Life","source":"core","tags":{"equipment":true},"contextdata":{"keyword_add":{"value":["kw_tough"]}},"description":[{"tags":{"desc_type":"default"},"content":"When deploying a model with an Elixir of Al-Khidr for the first time in a game, you can say that the model will consume the Elixir of Al-Khidr. If you do so, the model has the TOUGH Keyword for the rest of the game. An Elixir of Al-Khidr cannot be used by models with the ARTIFICIAL Keyword.","glossary":[{"val":"TOUGH","id":"kw_tough"},{"val":"ARTIFICIAL","id":"kw_artificial"}]}],"options":[]},{"id":"ab_fireshield","name":"Flame Repellent","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add -1 INJURY DICE to Injury Rolls for attacks with the FIRE Keyword that targets a model that has a Fire Shield, even if the attacking weapon has the IGNORE ARMOUR Keyword.","glossary":[{"val":"-1 INJURY DICE","id":"kw_injurydice"},{"val":"FIRE","id":"kw_fire"},{"val":"IGNORE ARMOUR","id":"kw_ignorearmour"}]}],"options":[]},{"id":"ab_prebattledeployment","name":"Pre-Battle Deployment","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"After you deploy a model with an Anq\u0101 Guard, you can also deploy their Anq\u0101 Guard. If you do so, deploy the Anq\u0101 Guard anywhere wholly within your deployment zone. Once deployed, the model that had the Anq\u0101 Guard is not considered to be carrying it for the rest of the game."}],"options":[]},{"id":"ab_combatdeployment","name":"Combat Deployment","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A model that has an Anq\u0101 Guard can take a Combat Deployment ACTION. If it does so, take a Risky Success Roll for the model and add +2 DICE to the roll. If the roll is a Failure, nothing happens and the model\u2019s Activation ends. If the roll is a Success or Critical Success, you can deploy the Anq\u0101 Guard within 1\\" of the model.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"+2 DICE","id":"kw_plusdice"},{"val":"Risky Success","id":"kw_riskyaction"}]}],"options":[]},{"id":"ab_mobilecover","name":"Mobile Cover","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Once deployed, the Anq\u0101 Guard is treated as a piece of Impassable terrain and can serve as Cover or a Defended Obstacle. The model that had the Anq\u0101 Guard is not considered to be carrying it for the rest of the game."}],"options":[]},{"id":"ab_hiddenexplosives","name":"Hidden Explosives","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"At the start of the game, after Deployment, you can say that a model that has Explosive Charges is going to plant them on the battlefield. If you do so, secretly write down their location on a piece of paper. The Explosive Charges must be planted on a terrain piece that measures up to 8\\" by 8\\", is not fully or partially within the enemy deployment zone or within 1\\" of a model, and which is not a Scenario Objective that is worth any Victory Points."}],"options":[]},{"id":"ab_detonatingtheexplosives","name":"Detonating the Explosives","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"When you Activate a friendly model, before you carry out any ACTIONS you can say that the model is going to detonate any hidden explosives you set up at the start of the game. If you do so, show your opponent the piece of paper saying where the explosives are hidden, and then make an Injury Roll with the SHRAPNEL Keyword for each model (friend or foe) that is in on or in contact with the terrain piece. The terrain piece is then removed from the game. Models that were on top of the terrain piece Fall directly down to the battlefield, and an additional Injury Roll may have to be made for them if they Fall 3\\" or more.","glossary":[{"val":"ACTIONS","id":"kw_action"},{"val":"SHRAPNEL","id":"kw_shrapnel"}]}],"options":[]},{"id":"ab_othismos","name":"Othismos","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"When a Brazen Bull that has an Iron Wall Kalkan takes a Move ACTION (not a Dash or Charge) and is in contact with 1 enemy model that is mounted on a base of 40mm or less, then the Brazen Bull can use the Iron Wall Kalkan to push the enemy model when it moves. The Brazen Bull must move in a straight line, directly towards the enemy model. The enemy model is pushed in front of the Brazen Bull as the Brazen Bull moves along. The move can also be used to push a model off a terrain piece, so that it Falls. If the move pushes the enemy model into contact with another model, both the enemy model and the Brazen Bull must stop moving. If it pushes the enemy into contact with a terrain piece that is more than \xbd\\" high, the enemy model and the Brazen Bull must stop moving and an Injury Roll is made for the enemy model.","glossary":[{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"ab_deployingthegunbattery","name":"Deploying the Gun Battery","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A Grand Cannon that is included in the Armoury on a Warband\u2019s roster as a gun battery must be mounted on its own 50mm base. It is deployed in the same way as a unit when the Warband is deployed. After it has been deployed it is treated as a piece of Impassable Terrain and cannot be moved or attacked during the game."}],"options":[]},{"id":"ab_firingagunbattery","name":"Firing a Gun Battery","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Each Grand Cannon weapon battery can be used once per Turn by a friendly model that is within 1\\" of it, as long as both the friendly model and the Grand Cannon are not within 1\\" of an enemy model, and as long as the friendly model does not move as part of the same Activation. The friendly model must take a Shoot ACTION, and can then use the Grand Cannon as the Ranged Weapon for the attack using the profile above (if the model is an Alchemist, then its Mastery of the Elements ability will apply to the attack). Measure the range and check the Line of Sight using the Grand Cannon instead of the attacking model. In a campaign the Grand Cannon gun battery is assumed to have been returned to the Warband\u2019s Armoury at the end of the game, and will be available to be deployed in the Warband\u2019s next game.","glossary":[{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"ab_evilpower","name":"Evil Power","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add +1 DICE to Success Rolls or Risky Success Rolls for a model with a Blasphemous Staff, apart from the Success Rolls for a Ranged or Melee Attack, or the Risky Success Roll to take a Dash ACTION.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"Risky Success","id":"kw_riskyaction"},{"val":"+1 DICE","id":"kw_plusdice"}]}],"options":[]},{"id":"ab_pairedweapon","name":"Harrowing Assault","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"If the target is taken Down or Out of Action by a Melee Attack made with Tartarus Claws, you can immediately move the model up to 3\u201d. You can use this move to move within 1\u201d another enemy model, and if you do so, this model can take another Fight ACTION. However, it cannot make the 3\u201d move if the second attack takes the target Down or Out of Action.","glossary":[{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"ab_duck","name":"Duck","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add -1 INJURY DICE to the roll for a model that is hit by an Infernal Bomb if it is in contact with a terrain piece that is at least \xbd\\" tall and that lies in between it and the target point.","glossary":[{"val":"-1 INJURY DICE","id":"kw_injurydice"}]}],"options":[]},{"id":"ab_infernalstrike","name":"Infernal Strike","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"If the Success Roll for a Ranged Attack with an Infernal Bomb that targets an enemy model is a Success or a Critical Success, or if the attack is a Failure and the target point scatters onto a model\'s base, apply the effect of the DEADLY Keyword to the Injury Roll for that model. Injury Rolls for other models caught in the Infernal Bomb\u2019s BLAST are made normally.","glossary":[{"val":"DEADLY","id":"kw_deadly"},{"val":"BLAST","id":"kw_blast"}]}],"options":[]},{"id":"ab_mightyexplosion","name":"Mighty Explosion","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"If a model that has been hit by an Infernal Bomb is not taken Out of Action by the Injury Roll, it is blown away D3\u201d in a straight line by the explosion, even if the model has been taken Down by the Injury Roll. Roll separately for each model to see how far it is blown away by an Infernal Bomb. If the model was the target of the attack, it is blown directly away from the Artillery Witch. If the model was caught in the Blast of the weapon, it is blown directly away from the target point. The model stops if it is blown into another model, Impassable terrain, or terrain it cannot cross without having to Climb."}],"options":[]},{"id":"ab_walkingbomb","name":"Walking Bomb","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph"},"content":"A model that has a Sarcophagus Mine cannot have any other Battlekit. A model with a Sarcophagus Mine can take a Trigger ACTION. In addition, if an enemy model finishes a move within 3\u201d of a model with a Sarcophagus Mine, you can interrupt its Activation and detonate the Sarcophagus Mine without having to take a Trigger ACTION.","glossary":[{"val":"ACTION","id":"kw_action"}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Trigger: "},{"tags":{"desc_type":"paragraph"},"content":"When a model with a Sarcophagus Mine takes a Trigger ACTION, you must take a Risky Success Roll for the model with +1 DICE. If the roll is a Failure, nothing happens (but you can try again the next time the model is Activated). If the roll is a Success or Critical Success, the Sarcophagus Mine detonates as described below.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"+1 DICE","id":"kw_plusdice"}]}]}],"options":[]},{"id":"ab_triggersarcophagus","name":"Trigger","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"When a model with a Sarcophagus Mine takes a Trigger ACTION, you must take a Risky Success Roll for the model with +1 DICE. If the roll is a failure, nothing happens (but you can try again the next time the model is Activated). If the roll is a Success or Critical Success, the Sarcophagus Mine detonates as described below.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"Risky Success","id":"kw_riskyaction"},{"val":"+1 DICE","id":"kw_plusdice"}]}],"options":[]},{"id":"ab_detonationsarcophagus","name":"Detonation","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"When a Sarcophagus Mine detonates, all models (friend or foe) within 3\\" of the model carrying the Sarcophagus Mine and in its Line of Sight are hit by a Ranged Attack with the SHRAPNEL Keyword. Add +1 INJURY DICE to the Injury Rolls for models that are within 1\\" of the model carrying the Sarcophagus Mine. The model carrying the Sarcophagus Mine is then taken Out of Action.","glossary":[{"val":"INJURY DICE","id":"kw_injurydice"},{"val":"SHRAPNEL","id":"kw_shrapnel"}]}],"options":[]},{"id":"ab_runeofmammon","name":"Rune of Mammon","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"If the Injury Roll for an attack made by a Coin Hammer results in 1 or more BLOOD MARKERS being placed next to the target, place 1 BLESSING MARKER next to the model using the Coin Hammer.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"},{"val":"BLESSING MARKER","id":"kw_blessingmarker"}]}],"options":[]},{"id":"ab_illusions","name":"Illusions","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Enemy models treat Open ground and all terrain within 3\u201d of a model with a Golden Calf Altar or a Golden Calf Altar terrain piece as being Difficult terrain (if it is not already), even if they have the FLYING Keyword.","glossary":[{"val":"FLYING","id":"kw_flying"}]}],"options":[]},{"id":"ab_placealtar","name":"Place Altar","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A model with a Golden Calf Altar can take a Place Altar ACTION. If they do so, deploy the Golden Calf Altar anywhere within 1\u201dof the model. Once deployed, the model that had the Golden Calf Altar is not considered to be carrying it for the rest of the game. In addition, the Golden Calf Altar is lost at the end of the game and removed from your Warband Roster.","glossary":[{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"ab_chokinggas","name":"Choking Gas","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"If a model that has been hit by a Gas Bomb is not taken Out of Action by the Injury Roll, it staggers D3\\" in a straight line trying to get away from the gas cloud. Roll separately for each model to see how far it staggers. If the model was the target of the attack, it staggers in a direction chosen by the player making the attack. If the model was caught in the Blast of the weapon, it staggers directly away from the target point. The model stops if it staggers into another model, Impassable Terrain, or a terrain piece it cannot cross without having to Climb."}],"options":[]},{"id":"ab_kneelbeforeme","name":"Kneel Before Me","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"An enemy model that is Down and within 1\\" of a model with the Standard of Mammon cannot stand back up. In addition, the opposing player must take a Success Roll for any of their models that finish a charge within 1\\" of a model with the Standard of Mammon. If the roll is a Failure, the enemy model is marked as being Down. If the roll is a Success or a Critical Success, the enemy model stays on its feet."}],"options":[]},{"id":"ab_target_of_wrath","name":"Target of Wrath","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"An enemy model must choose a model that has Tarnished Armour as the target of the charge if the model is in its Line of Sight, not already within 1\u201d of an enemy model, and can be reached without the charging model having to Climb, Jump, make a Diving Charge, or move across Dangerous terrain."}],"options":[]},{"id":"ab_powerofthecultoftheblackgrail","name":"Power of the Cult of the Black Grail","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"When a model with a Black Grail Shield is chosen as the target for a Ranged Attack, it will draw on the Power of the Black Grail before the Success Roll is made for the attack. Take a Success Roll for the model with the Black Grail Shield. If the roll is a Failure, nothing happens and the attack is carried out as normal. If the roll is a Success, add -2 DICE to the roll for the Ranged Attack. If the roll is a Critical Success, the attack is automatically a Failure (do not make a Success Roll for the attack).","glossary":[{"val":"-2 DICE","id":"kw_minusdice"}]}],"options":[]},{"id":"ab_enhancedvision","name":"Enhanced Vision","source":"core","tags":{"equipment":true},"contextdata":{"upgrade_stat":{"upgrades":[{"stat":"ranged","value":1}]}},"description":[{"tags":{"desc_type":"default"},"content":"Add +1 DICE to the Success Roll of Ranged Attacks taken for a model that has a Compound Eyes Helmet.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"}]}],"options":[]},{"id":"ab_graildevotees","name":"Grovelling Followers","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Up to 2 models can have up to 2 Grail Devotees each. Add +1 INJURY MODIFIER to Injury Rolls for Melee attacks made by the model for each Grail Devotee that it has. Each Grail Devotee can be represented by a model if you wish. Place them adjacent to the model that they are following but note that Grail Devotees are not treated as models for any rules purposes, just move them out of the way if they get in the way of a \u201cproper\u201d model.","glossary":[{"val":"+1 INJURY MODIFIER","id":"kw_injurymodifier"}]}],"options":[]},{"id":"ab_jealousobsession","name":"Jealous Obsession","source":"core","tags":{"equipment":true},"contextdata":{"unique":{}},"description":[{"tags":{"desc_type":"default"},"content":"The Limit of 2 is the number of models that can have Grail Devotees; each model can have up to 2 Grail Devotees. The cost of the second Grail Devotee taken for a model is paid in \u263c instead of \ud83d\udc51. Grail Devotees cannot be reallocated unless the model that had them is removed from the Warband Roster."}],"options":[]},{"id":"ab_terrifyinghallucinations","name":"Terrifying Hallucinations","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"If a Parasite Grenade hits a target, after resolving the Injury Roll, you can move the target model 3\u201d. The move must be in a straight line, but can be in any direction, and can be used to make the model move within 1\u201d of an enemy, make a retreat move, Climb, Jump, or Jump Down. The model cannot make a Diving Charge and does not count as charging if it finishes the move within 1\u201d of an enemy model."}],"options":[]},{"id":"ab_selfsacrifice","name":"Self Sacrifice","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"If a Viscera Cannon hits a target, after resolving the Injury Roll, you can place up to 3 BLOOD MARKERS next to the model that made the Attack (until it has a maximum of 6 markers). Then place 1 INFECTION MARKER next to the target for each BLOOD MARKER that you placed on the attacking model.","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"},{"val":"INFECTION MARKER","id":"kw_infectionmarker"}]}],"options":[]},{"id":"ab_locusofdespair","name":"Locus of Despair","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Each time the model with the Broken Crown is Activated, before carrying out any ACTIONS with the model, place 1 INFECTION MARKER next to each enemy model within 1\\" of the model with the Broken Crown.","glossary":[{"val":"INFECTION MARKER","id":"kw_infectionmarker"},{"val":"ACTIONS","id":"kw_action"}]}],"options":[]},{"id":"ab_sinisterwhispers","name":"Sinister Whispers","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add -1 DICE to the roll for Ranged Attacks that target a model that has the Urn of Bitter Ashes or that is within 3\\" of the model with the Urn of Bitter Ashes.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"}]}],"options":[]},{"id":"ab_batter","name":"Batter","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A model that has an Arquebus can use it as a 2-Handed Melee Weapon."}],"options":[]},{"id":"ab_searingflames","name":"Searing Flames","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"When a model with a Crown of Hellfire ends an Activation, place 1 BLOOD MARKER next to each enemy model within 1\u201d of the model with a Crown of Hellfire, except for enemy models that have the NEGATE FIRE Keyword.","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"},{"val":"NEGATE FIRE","id":"kw_negate_kw_fire"}]}],"options":[]},{"id":"ab_ambushweapon","name":"Ambush Weapon","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add a +2 INJURY MODIFIER to rolls made for this weapon if the target has not yet been Activated this Turn.","glossary":[{"val":"INJURY MODIFIER","id":"kw_injurymodifier"}]}],"options":[]},{"id":"ab_abyssalblade","name":"Abyssal Blade","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"When you make an Injury Roll for an attack made with this weapon, roll 3D6 and add all 3 dice together. Any +INJURY DICE or -INJURY DICE that applied to the Injury Roll will apply normally, except that you pick the 3 highest or lowest dice in the roll instead of the 2 highest or lowest.","glossary":[{"val":"INJURY DICE","id":"kw_injurydice"}]}],"options":[]},{"id":"ab_unnaturalinversion","name":"Unnatural Inversion","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add +1 DICE to roll for attacks made with this weapon if the Cover or Long Range modifiers apply to the attack, instead of adding -1 DICE. Note that this means you add +2 DICE to the roll if both modifiers apply to the attack.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"},{"val":"+2 DICE","id":"kw_plusdice"},{"val":"-1 DICE","id":"kw_minusdice"}]}],"options":[]},{"id":"ab_agonisinginjuries","name":"Agonising Injuries","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"When you make an Injury Roll for an attack made with a Torture Instrument, roll 1D6 instead of 2D6, but then double the number of BLOOD MARKERS that are caused by the roll (if there are any). Any +INJURY DICE or -INJURY DICE that applied to the Injury Roll will apply normally, except that you pick the single highest or lowest dice in the roll instead of the 2 highest or lowest. Note that when you make a Bloodbath Roll for an attack made with a Torture Instrument, you only roll 2D6 instead of 3D6, but you can then double the number of BLOOD MARKERS that are caused by the roll.","glossary":[{"val":"INJURY DICE","id":"kw_injurydice"},{"val":"BLOOD MARKERS","id":"kw_bloodmarker"}]}],"options":[]},{"id":"ab_specialammunition","name":"Special Ammunition","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Before making an Injury Roll for an attack made with a Bow of Lethe, you must choose if the roll will have the +2 INJURY DICE Keyword or the IGNORE ARMOUR Keyword.","glossary":[{"val":"INJURY DICE","id":"kw_injurydice"},{"val":"IGNORE ARMOUR","id":"kw_ignorearmour"}]}],"options":[]},{"id":"ab_swingingblow","name":"Swinging Blow","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"When a model armed with a Tenderiser Maul takes a Fight ACTION, you can make 1 Melee Attack against each enemy model with 1\u201d of the attacking model. Resolve each Melee Attack one at a time in the order of your choice.","glossary":[{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"ab_wrathofgod","name":"Found Guilty","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"After making the Injury Roll for a Gavel of Justice, place 1 extra BLOOD MARKER next to the target model (even if the Injury Roll has No Effect). If the target has the BLACK GRAIL, DEMONIC, or HERETIC Keyword, place 2 BLOOD MARKERs next to it instead of 1.","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"},{"val":"BLACK GRAIL","id":"kw_blackgrail"},{"val":"DEMONIC","id":"kw_demonic"},{"val":"HERETIC","id":"kw_heretic"}]}],"options":[]},{"id":"ab_bloodofmartyrs","name":"Blood of Martyrs","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add +2 DICE to Morale checks for your Warband as long the model carrying the Red Banner is not Down or Out of Action.","glossary":[{"val":"+2 DICE","id":"kw_plusdice"}]}],"options":[]},{"id":"ab_channelledsorrow","name":"Channelled Sorrow","source":"core","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"An Atonement Bell can only be used to make an off-hand attack, and does not roll an Injury Roll if it hits. Instead If the roll is a Success or Critical Success, move the target model D3\u201d. The move must be in a straight line, but can be in any direction, and can be used to make the model retreat, and to Climb a sheer surface, Jump across a gap, or Jump Down."}],"options":[]},{"id":"ab_freshmeat","name":"Fresh Meat","source":"creature_caster","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"If an Injury Roll for a Ranged Attack made with a Black Spot Rifle does not take an enemy model Out of Action, a Ravenous within 12\u201d of the attacking model can immediately carry out a Charge move. This Charge move does not stop that Ravenous from also being Activated in the same Turn (before or after this Charge move was made)."}],"options":[]},{"id":"ab_hackandhew","name":"Hack and Hew","source":"creature_caster","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A model with a Butcher Bayonet, and Friendly Ravenous, Cradle Thralls, Lords of Tumours and Desiccated Husks within 3\u201d of a model with a Butcher Bayonet, achieve a Critical Success on an 11+ for their Melee Attacks."}],"options":[]},{"id":"ab_masticate","name":"Masticate","source":"creature_caster","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A model with Devouring Jaws can make an additional Melee Attack ACTION once per Activation. If it does so, place 1 BLOOD MARKER beside it.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"BLOOD MARKER","id":"kw_bloodmarker"}]}],"options":[]},{"id":"ab_mutation","name":"Mutation","source":"creature_caster","tags":{"equipment":true},"contextdata":{"unique":{}},"description":[{"tags":{"desc_type":"default"},"content":"Once this Battlekit has been equipped, it cannot be removed or lost over the course of a campaign for any reason."}],"options":[]},{"id":"ab_grasp","name":"Grasp","source":"creature_caster","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A model with this Battlekit can take a Grasp ACTION. If it does so, take a Risky Success Roll for the model. If the roll is a Failure, the model\u2019s Activation ends immediately. If the roll is a Success or Critical Success, pick 1 enemy model that is within 12\u201d of the model taking the Grasp ACTION and in their Line of Sight. You can move the model up to D6\u201d. The move must be in a straight line directly towards the model taking the Grasp ACTION, and can be used to make the model move with 1\u201d of an enemy or retreat, but you cannot make Melee attacks with models within 1\u201d of it before it retreats. The model stops if the model moves into contact with another model, Difficult, Dangerous or Impassable Terrain, or a terrain piece it cannot cross without having to Climb or Jump.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"Risky Success","id":"kw_riskyaction"}]}],"options":[]},{"id":"ab_gnashingblow","name":"Gnashing Blow","source":"creature_caster","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":" When a Melee Attack made with a Pestilent Fang causes 1 or more BLOOD MARKERS to be placed next to the target, place 1 INFECTION MARKER next to the target model. ","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"},{"val":"INFECTION MARKER","id":"kw_infectionmarker"}]}],"options":[]},{"id":"ab_rottensplinters","name":"Rotten Splinters","source":"creature_caster","tags":{"equipment":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"If the Success Roll for a Melee Attack made with a Pestilent Fang is a Critical Success then the Injury Roll for the Attack has the IGNORE ARMOUR Keyword.","glossary":[{"val":"IGNORE ARMOUR","id":"kw_ignorearmour"}]}],"options":[]},{"id":"ab_limitedupgrades","name":"Golem\'s Limit","source":"core","tags":{},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A maximum of 50 \ud83d\udc51 can be assigned to upgrades for this model."}],"options":[]},{"id":"ab_albabagpipes","name":"Bagpipes","source":"core","tags":{},"contextdata":{"keyword_ignore":{"value":["kw_fear"]}},"description":[{"tags":{"desc_type":"default"},"content":"riendly models within 8\\" of a model that has a set of Bagpipes have the Negate Fear Keyword.","glossary":[{"val":"Negate Fear","id":"kw_negate_kw_fear"}]}],"options":[]}]'),u=JSON.parse('[{"id":"md_janissaries","name":"Janissary","source":"core","tags":{},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A Janissary can have any Battlekit from the Iron Sultanate Armoury Tables.","glossary":[{"val":"Iron Sultanate","id":"kw_sultanate"}]}],"lore":[{"tags":{"desc_type":"italic"},"content":"The Janissaries are the Sultanate\u2019s elite warriors, raised from childhood in the arts of war. Captured during raids upon the desolate northern and eastern marches beyond the Iron Wall, they are subjected to rigorous martial training and indoctrination from an early age. On the battlefield, Janissaries excel at devastating countercharges, crushing the enemy\u2019s elite formations and acting as the bodyguard for highranking individuals."}],"team":"faithful","stats":{"movement":6,"melee":1,"ranged":1,"base":[32],"armour":0,"movetype":0,"potential":0},"keywords":["kw_sultanate","kw_strong"],"abilities":["ab_countercharge"]},{"id":"md_azeb","name":"Azeb","source":"core","tags":{},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"An Azeb can have any Battlekit from the Iron Sultanate Armoury Tables.","glossary":[{"val":"Iron Sultanate","id":"kw_sultanate"}]}],"lore":[{"tags":{"desc_type":"italic"},"content":"Azebs are soldiers recruited from the multitude of provinces of the sultanate, where one house in every twenty is required to equip and provide a warrior to serve the prince of Those Who Believe. They are often used by their superiors as light skirmishers to harass and tie down the enemy while heavier troops close in for the kill."}],"team":"faithful","stats":{"movement":6,"melee":-1,"ranged":0,"base":[25],"armour":0,"movetype":0,"potential":0},"keywords":["kw_sultanate"],"abilities":[]},{"id":"md_sultanatesapper","name":"Sultanate Sapper","source":"core","tags":{},"contextdata":{"keyword_ignore":{"value":["kw_mined"]}},"description":[{"tags":{"desc_type":"default"},"content":"Sappers are equipped with shovels. This equipment can never be removed. They can be equipped with any weapon, armour and equipment from the Iron Sultanate Armoury.","glossary":[{"val":"Iron Sultanate","id":"kw_sultanate"}]}],"lore":[{"tags":{"desc_type":"italic"},"content":"The Sultan\u2019s Sappers are valued specialists, holding the great cannons of the Iron Wall no matter what their enemies throw at them. They are easily identified by the terrible burns all over their bodies as their mighty artillery is prone to overheating."}],"team":"faithful","stats":{"movement":6,"melee":0,"ranged":1,"base":[25],"armour":0,"movetype":0,"potential":0},"keywords":["kw_sultanate"],"abilities":["ab_minesetting","ab_demine","ab_forwardpositions","ab_fortify","ab_detonatingmines"]},{"id":"md_brazenbull","name":"Brazen Bull","source":"core","tags":{},"contextdata":{"model_equipment_restriction":{"required":[{"category":"ranged","res_type":"keyword","value":"kw_heavy"},{"category":"grenade","res_type":"keyword","value":"kw_heavy"},{"category":"melee","res_type":"keyword","value":"kw_heavy"}],"removed":[{"category":"equipment","res_type":"id","value":"eq_shovel"},{"category":"equipment","res_type":"id","value":"eq_exlixerofalkhidr"}]}},"description":[{"tags":{"desc_type":"default"},"content":"A Brazen Bull can have Battlekit from the Iron Sultanate Armoury Tables. It may only have Weapons that have the HEAVY Keyword, and may not have a Shovel unless it is a Marid Shovel. No restrictions apply to any other Types of Battlekit.","glossary":[{"val":"HEAVY","id":"kw_heavy"}]}],"lore":[{"tags":{"desc_type":"italic"},"content":"A Brazen Bull is a monstrous being of immense power and vitality, capable of tearing even the bastard child of a demon clean in half. The Sultan\u2019s armourers equip the Bulls with heavy artillery that even the superhuman Janissaries cannot lift, let alone use in battle: flame cannons, volley guns and holy blades blessed by the Word of the Great Protector."}],"team":"faithful","stats":{"movement":6,"melee":2,"ranged":0,"armour":0,"movetype":0,"potential":1,"base":[60]},"keywords":["kw_sultanate","kw_strong","kw_tough","kw_fear","kw_artificial"],"abilities":["ab_artificialbody","ab_trample"]},{"id":"md_lionofjabir","name":"Lion of Jabir","source":"core","tags":{},"contextdata":{"unarmed_penalty_remove":{},"model_equipment_restriction":{"removed":[{"category":"shield","res_type":"all","value":""},{"category":"melee","res_type":"all","value":""},{"category":"ranged","res_type":"all","value":""},{"category":"grenade","res_type":"all","value":""}],"required":[{"category":"equipment","res_type":"id","value":"eq_windamulet"}]}},"description":[{"tags":{"desc_type":"default"},"content":"A Lion of Jabir can have Armour and/or a Wind Amulet from the Iron Sultanate Armoury Tables. They cannot have Shields or any other Battlekit. Any number of Lions of Jabir can have the FEAR Keyword at a cost of +5 \ud83d\udc51  each."}],"lore":[{"tags":{"desc_type":"italic"},"content":"Named after the deadly hunters of the plains, the Lions of Jabir can take many forms, not all of them leonine. Each one is a unique masterwork, and they are grown according to the skills and artistry of the Jabirean scientist that created them. The speed and ferocity of the Lions is nearly unmatched, and some even have strange powers granted by their alchemical birth."}],"team":"faithful","stats":{"movement":8,"melee":1,"armour":0,"movetype":0,"potential":1,"base":[50]},"keywords":["kw_sultanate","kw_artificial"],"abilities":["ab_artificialbody","ab_pin","ab_agilelion","ab_teethandclaws"]},{"id":"md_jabireanalchemist","name":"Jabirean Alchemist","source":"core","tags":{},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A Jabirean Alchemist can have any Battlekit from the Iron Sultanate Armoury Tables","glossary":[{"val":"Iron Sultanate","id":"kw_sultanate"}]}],"lore":[{"tags":{"desc_type":"italic"},"content":"The Jabirean Alchemist is a master of esoteric powers, able to control fire, ice, metal and liquid, capable of creating intricate mechanical devices and artificial life as well as weapons of calamitous potency. In exchange for the freedom to practise their arts, the Alchemists supply the Sultanate with the peerless Jabirean Battle Lions, and serve on the front lines, where their devastating alchemical compounds melt the flesh from the bones of the Unbelievers, or dissolve through even the toughest enemy armour."}],"team":"faithful","stats":{"movement":6,"melee":1,"ranged":2,"base":[32],"armour":0,"movetype":0,"potential":0},"keywords":["kw_sultanate","kw_elite"],"abilities":["ab_masteryoftheelements","ab_elementalchange"]},{"id":"md_yuzbasicaptain","name":"Y\xfczba\u015f\u0131 Captain","source":"core","tags":{},"contextdata":{"keyword_ignore":{"value":["kw_fear"]}},"description":[{"tags":{"desc_type":"default"},"content":"A Y\xfczba\u015f\u0131 can have any Battlekit from the Iron Sultanate Armoury Tables","glossary":[{"val":"Iron Sultanate","id":"kw_sultanate"}]}],"lore":[{"tags":{"desc_type":"italic"},"content":"Military expeditions over the Great Iron Wall into No Man\u2019s Land carry many risks, and their commanders are field officers known as Y\xfczba\u015f\u0131. They are expected to lead from the front and their selection is solely on merit, with no consideration given to family pedigree or wealth. Y\xfczba\u015f\u0131 are selected from amongst the very best soldiers of the Sultanate, and their bodies are hardened against injury by the Jabirean arts."}],"team":"faithful","stats":{"movement":6,"melee":2,"ranged":2,"base":[32],"armour":0,"movetype":0,"potential":0},"keywords":["kw_sultanate","kw_elite","kw_tough","kw_leader"],"abilities":["ab_mubarizun"]},{"id":"md_sultanateassassin","name":"Sultanate Assassin","source":"core","tags":{},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A Sultanate Assassin can have any Battlekit from the Iron Sultanate Armoury","glossary":[{"val":"Iron Sultanate","id":"kw_sultanate"}]}],"lore":[{"tags":{"desc_type":"italic"},"content":"Assassins are a legendary order of mystic warriors, whispered about the world over for their secrecy and ruthlessness. Assassins are able to bend space and time using the sacred rituals and powerful hallucinogens discovered by magi of the order. With this esoteric power they prowl behind enemy lines, hunting their targets with merciless efficiency. They can seemingly appear in two places simultaneously, strike a foe with startling speed and then travel back into time to a moment a few heartbeats before, safe from any retaliation."}],"team":"faithful","stats":{"movement":6,"melee":2,"ranged":1,"base":[32],"armour":0,"movetype":0,"potential":0},"keywords":["kw_sultanate","kw_elite","kw_infiltrator"],"abilities":["ab_timeslip","ab_temporalassassin"]},{"id":"md_mamlukfaris","name":"Mamluk Faris","source":"core","tags":{},"contextdata":{"add_ignore_mods":{"modifiers":["off-hand_weapon"]}},"description":[{"tags":{"desc_type":"default"},"content":"A Mamluk Faris always has Reinforced Armour, a Combat Helmet, and a a Jezzail with Alchemical Ammunition from the Iron Sultanate Faction List. In addition, a Mamluk Faris always has either a Greatsword, or a Polearm and a Trench Shield, or a Pistol and a Sword/Axe. Decide which Battlekit the Mamluk Faris has upon recruitment, and you can swap the loadout in each Quartermaster Step. The Mamluk Faris has an Armour Characteristic of -3 if it has a Trench Shield and an Armour Characteristic of -2 if it does not."}],"lore":[{"tags":{"desc_type":"italic"},"content":"Mamluks are an echo of a bygone age, the final remnants of the warrior-elite that once ruled a great empire in Northern Africa. They suffered grievous losses in the earliest stages of the Great War when the legions of demon Zalambuer emerged from the Hellgate. The Fatimids led their Mamluk forces in a desperate campaign to reclaim the Levant, but of their fate there is no tale. They did not return victorious, and instead the slaves of Jahannam swept through Sinai like an evil wind, razing Alexandria and Cairo to the ground. The surviving Mamluks fought bitterly to protect their homes, but to no avail. Too proud to abandon their ancestral soil to darkness, some among the last Mamluks refused the call to migrate beyond the Iron Wall. Instead, they dispersed across the lands they once ruled, determined to fight on, waging a hidden war that has raged ever since."},{"tags":{"desc_type":"gap"}},{"tags":{"desc_type":"italic"},"content":"To this day, the Mamluk knights play a deadly game of shadow and steel. They strike with ambushes and sudden raids along the Aegyptian front, harassing Mammon\u2019s legions, making their living as swords for hire, waging an endless war against the Heretics, and composing poems of lamentation in memory of their lost and devastated homelands. Generations of unbroken warfare have hardened the Mamluks into peerless warriors, as parents pass on the ancient secrets of fur\u016bs\u012byah, a code of horsemanship, martial skill, and bravery, to their children."},{"tags":{"desc_type":"gap"}},{"tags":{"desc_type":"italic"},"content":"Too few in number to wage open war, the Mamluks instead fight alongside any of the Peoples of the Book, making their living by offering their swords to the highest bidder, as long as such a leader promises to fight the forces of Shay \u0101n. They respect noble character and martial prowess above all, and often form bonds by sharing their way of the sword with an ally they respect. Only a handful of the legendary automaton heavy warhorses of the Mamluks remain, and they are rarely risked in open combat. Most are reserved to defend their last few hidden abodes, deep within the vast deserts beyond the Nile Delta. A few of these tireless steeds transport Mamluk warriors into advanced positions where they can disrupt the enemy\u2019s plans and launch surprise attacks on exposed hostile units."}],"team":"faithful","stats":{"movement":6,"melee":1,"ranged":1,"base":[32],"armour":0,"movetype":0,"potential":0,"mercenary":true},"keywords":[],"abilities":["ab_swornbretheren","ab_martialprowess","ab_automatondestrier"]},{"id":"md_takwincreation","name":"Takwin Homunculus","source":"core","tags":{},"contextdata":{"unarmed_penalty_remove":{},"model_equipment_restriction":{"removed":[{"category":"equipment","res_type":"all","value":""},{"category":"melee","res_type":"all","value":""},{"category":"ranged","res_type":"all","value":""},{"category":"grenade","res_type":"all","value":""},{"category":"armour","res_type":"all","value":""},{"category":"shield","res_type":"all","value":""}]}},"description":[{"tags":{"desc_type":"default"},"content":"A Takwin Homunculus cannot have any Battlekit but can have Alchemical Formulas."}],"lore":[{"tags":{"desc_type":"italic"},"content":"Takwin Homunculi can take almost any shape and their sizes can range from a tiny imp to a towering colossus of 15 feet tall or more, depending on the skills and needs of the Alchemist that created them. Often their existence is a harsh one, even death does not release them from servitude as they can simply be repaired and re-animated. Some with sufficient intelligence take a philosophical stance and find fulfilment in their service to a greater cause."}],"team":"faithful","stats":{"movement":6,"melee":0,"ranged":0,"base":[25],"armour":0,"movetype":0,"potential":1},"keywords":["kw_sultanate","kw_artificial"],"abilities":["ab_artificialbody","ab_recreation","ab_pummellingblows"]},{"id":"md_scriptureguardian","name":"Scripture Guardian","source":"core","tags":{},"contextdata":{"mercenary_add_equipment":{},"model_equipment_restriction":{"removed":[{"category":"equipment","res_type":"all","value":""},{"category":"armour","res_type":"all","value":""},{"category":"shield","res_type":"all","value":""},{"category":"ranged","res_type":"all","value":""},{"category":"grenade","res_type":"all","value":""},{"category":"melee","res_type":"restricted","value":""}]},"validate_final_unit_equipment":{"requirements":[{"hands_melee":2,"value":true}]}},"description":[{"tags":{"desc_type":"default"},"content":"A Scripture Guardian always has Reinforced Armour and a Combat Helmet. In addition, it must have either two 1-Handed Melee Weapons or one 2-Handed Melee Weapon. You must purchase the Melee Weapons from your Faction Armoury Tables at their normal Cost, and you must obey any stipulation that apply to the weapons you choose (e.g. ELITE Only, Limit: 1 etc). The weapons you choose cannot be removed or lost over the course of the campaign for any reason.","glossary":[{"val":"ELITE","id":"kw_elite"},{"val":"LIMIT","id":"kw_limit"}]}],"lore":[{"tags":{"desc_type":"italic"},"content":"The origins of the Scripture Guardians remain shrouded in mystery, though rumours suggest they were created by the great masters of Kabbalah. Accounts of their existence began circulating in the early days of the Great War as the destruction of Jerusalem unearthed tombs and sacred resting places. Those who had once been interned in peace now wander the unhappy land, endlessly reciting the sacred writings entrusted to them in death. On rare occasions, expeditions into No Man\u2019s Land have encountered such creatures, and by placing a holy text of their faith into its hands, they have transformed the Scripture Guardian into a powerful ally, bound to the will of those who align with the holy (or desecrated) scroll or tome it holds."},{"tags":{"desc_type":"gap"}},{"tags":{"desc_type":"italic"},"content":"Capable of speaking and reading the One True Language, the Scripture Guardian can unleash the powers it calls upon against anyone its master commands. It carries out its purpose with the single-mindedness of an automaton, devoid of thought or empathy. When spoken by the Guardian, the words are imbued with the primordial power of Creation, and capable of unmaking anything in their path. The longer the Guardian concentrates on its target, the greater the power it channels."}],"team":"none","stats":{"movement":6,"melee":1,"base":[40],"armour":0,"movetype":0,"potential":0,"mercenary":true},"keywords":["kw_golem"],"abilities":["ab_slow","ab_vengefulscripture"]},{"id":"md_trenchdog","name":"Trench Dog","source":"core","tags":{"dog":true},"contextdata":{"unarmed_penalty_remove":{},"model_equipment_restriction":{"removed":[{"category":"equipment","res_type":"all","value":""},{"category":"melee","res_type":"all","value":""},{"category":"ranged","res_type":"all","value":""},{"category":"grenade","res_type":"all","value":""},{"category":"armour","res_type":"all","value":""},{"category":"shield","res_type":"all","value":""}]}},"description":[{"tags":{"desc_type":"default"},"content":"A Trench Dog cannot have any Battlekit. At an additional cost the dog gains an ability to form a FIRETEAM with any 1 model in your Warband.","glossary":[{"val":"ELITE","id":"kw_elite"},{"val":"FIRETEAM","id":"kw_fireteam"}]}],"lore":[{"tags":{"desc_type":"italic"},"content":"A great many animals serve in the trenches alongside the soldiers. Wardogs are by far the most common, but tame ocelots, barbary apes, small bears, and other unusual pets abound, while the forces of Hell keep Hellhounds and other infernal beasts as pets."},{"tags":{"desc_type":"italic"},"content":"These loyal canines can be trained to serve in multiple roles: as mercy dogs for on rescuing wounded soldiers, fierce guard dogs, or as messengers."}],"team":"none","stats":{"movement":8,"melee":0,"base":[25],"armour":0,"movetype":0,"potential":3},"keywords":[],"abilities":["ab_fourpaws","ab_packloyalty"]},{"id":"md_deathcommando","name":"Death Commando","source":"core","tags":{},"contextdata":{"model_equipment_restriction":{"required":[{"category":"ranged","res_type":"id","value":"eq_silenecedpistol"},{"category":"ranged","res_type":"id","value":"eq_tormentorchain"},{"category":"grenade","res_type":"id","value":"eq_gasgrenades"}]}},"description":[{"tags":{"desc_type":"default"},"content":"A Death Commando can have Battlekit from the Heretic Legions Armoury Tables. The only Ranged Weapons they can have are Silenced Pistols and Tormentor Chains, and the only Grenades they can have are Gas Grenades. No restrictions apply to any other Types of Battlekit.","glossary":[{"val":"Heretic Legion","id":"kw_heretic"}]}],"lore":[{"tags":{"desc_type":"italic"},"content":"These terrifying infiltrators are silent killers, equipped with stealth generators that hide them from the Eyes of God. They have been known to eliminate entire enemy squads single-handedly."}],"team":"hell","stats":{"movement":6,"melee":2,"ranged":1,"base":[32],"armour":0,"movetype":0,"potential":0},"keywords":["kw_elite","kw_infiltrator","kw_heretic"],"abilities":["ab_hide","ab_stealthgenerator"]},{"id":"md_annointedheavyinfantry","name":"Annointed Heavy Infantry","source":"core","tags":{},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"An Anointed Heavy Infantry always has Reinforced Armour and an Infernal Brand. This Battlekit cannot be removed or lost throughout the campaign for any reason. The Injury Modifier for the Armour is already included in the model\u2019s Profile above. They can also have any Battlekit from the Heretic Legions Armoury Tables.","glossary":[{"val":"Heretic Legion","id":"kw_heretic"}]}],"lore":[{"tags":{"desc_type":"italic"},"content":"Heavily armed and armoured assault troops. Their skin is burned and blistering from their ordained pilgrimages to Hell and back."}],"team":"hell","stats":{"movement":6,"melee":1,"ranged":1,"base":[32],"armour":0,"movetype":0,"potential":0},"keywords":["kw_heretic","kw_strong"],"abilities":[]},{"id":"md_heretictrooper","name":"Heretic Trooper","source":"core","tags":{},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph"},"content":"A Heretic Trooper or Heretic Legionnaire can have any Battlekit from the Heretic Legions Armoury Tables.","glossary":[{"val":"Heretic Legion","id":"kw_heretic"}]}],"lore":[{"tags":{"desc_type":"italic"},"content":"These soldiers make up the bulk of the Heretic forces. Heretic Legionnaires have witnessed the Gate of Hell and survived; they are damned for all eternity."}],"team":"hell","stats":{"movement":6,"melee":0,"ranged":0,"base":[25],"armour":0,"movetype":0,"potential":0},"keywords":["kw_heretic"],"abilities":["ab_hereticlegionnaire"]},{"id":"md_hereticpriest","name":"Heretic Priest","source":"core","tags":{},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A Heretic Priest can have any Battlekit from the Heretic Legions Armoury Tables.","glossary":[{"val":"Heretic Legion","id":"kw_heretic"}]}],"lore":[{"tags":{"desc_type":"italic"},"content":"These fallen Priests wield unholy magics, summoning petrifying demons and creatures through their Goetic spells. Often pledged to a demon lord in Hell, such as Pazuzu or Guison, the profane gospels they recite strike fear into Church forces, causing ears to bleed and eyeballs to burst in their sockets."}],"team":"hell","stats":{"movement":6,"melee":2,"ranged":2,"base":[32],"armour":0,"movetype":0,"potential":0},"keywords":["kw_elite","kw_heretic","kw_tough","kw_leader"],"abilities":["ab_puppetmaster"]},{"id":"md_heretichorister","name":"Heretic Chorister","source":"core","tags":{},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A Chorister can have any Battlekit from the Heretic Legions Armoury Tables.","glossary":[{"val":"Heretic Legion","id":"kw_heretic"}]}],"lore":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"Choristers sacrifice themselves upon black altars, and if worthy, rise after nine days, finishing their own beheading as their severed heads begin to sing. Their hymns conjure visions of Hell, sapping the strength and resolve of all who hear, the Chorister\u2019s cold blood forming diabolic symbols in rhythm with their unholy chorus. Those who hear their song find their minds flooded with visions from the Pits of Hell, weakening both their resolve and strength, as the dreadful music eats away at their very soul."}]}],"team":"hell","stats":{"movement":6,"melee":2,"ranged":-2,"base":[32],"armour":0,"movetype":0,"potential":0},"keywords":["kw_elite","kw_heretic","kw_fear"],"abilities":["ab_unholyhymns"]},{"id":"md_warwolfassaultbeast","name":"War Wolf Assault Beast","source":"core","tags":{},"contextdata":{"keyword_ignore":{"value":["kw_difficultterrain"]},"model_equipment_restriction":{"removed":[{"category":"equipment","res_type":"all","value":""},{"category":"melee","res_type":"all","value":""},{"category":"ranged","res_type":"all","value":""},{"category":"grenade","res_type":"all","value":""},{"category":"armour","res_type":"all","value":""},{"category":"shield","res_type":"all","value":""}]}},"description":[{"tags":{"desc_type":"default"},"content":"A War Wolf always has a Chainsaw Mouth and Shredding Claws. These weapons are part of the War Wolf and cannot be removed or lost throughout the campaign for any reason. It cannot have any other Battlekit."}],"lore":[{"tags":{"desc_type":"italic"},"content":"This abomination charges through miles of barbed wire, clearing a path for the Heretic infantry. Its uniquely formed head is designed to cut cleanly through it. War Wolves wear unique armour forged in the factories of Hell, as seen by the maker\u2019s marks stamped upon it."}],"team":"hell","stats":{"movement":8,"melee":2,"base":[50],"armour":-3,"movetype":0,"potential":2},"keywords":["kw_fear","kw_heretic","kw_tough","kw_artificial"],"abilities":["ab_lopingdash","ab_assaultbeast"]},{"id":"md_artillerywitch","name":"Artillery Witch","source":"core","tags":{},"contextdata":{"keyword_ignore":{"value":["kw_gas","kw_fear"]},"model_equipment_restriction":{"removed":[{"category":"ranged","res_type":"all","value":""},{"category":"grenade","res_type":"all","value":""}]}},"description":[{"tags":{"desc_type":"default"},"content":"An Artillery Witch always has Infernal Bombs, and can have Battlekit from the Heretic Legions Armoury Tables except for Ranged Weapons or Grenades.","glossary":[{"val":"Heretic Legion","id":"kw_heretic"}]}],"lore":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"Artillery Witches stalk the battlefields, hurling ordnance assembled in the death factories of Hell\u2019s Third Circle. They are completely mute, and no one has ever seen their faces, leading some to question if they are even alive. Rumours suggest that they too, were manufactured in Hell. They can call forth an endless number of Infernal bombs from a portal to Hell that they manifest at will, summoning them to their hands from a gate of midnight blackness."}]}],"team":"hell","stats":{"movement":6,"melee":-1,"ranged":0,"base":[32],"armour":0,"movetype":0,"potential":1},"keywords":["kw_heretic","kw_artificial"],"abilities":["ab_levitate","ab_abioticlife","ab_artillerywitchbattery"]},{"id":"md_wretched","name":"Wretched","source":"core","tags":{},"contextdata":{"model_equipment_restriction":{"removed":[{"res_type":"ducat","value":10,"param":"maximum"},{"res_type":"id","value":"eq_lockofsamsonshair"}]}},"description":[{"tags":{"desc_type":"default"},"content":"Wretched can have any Battlekit from the Heretic Legions Armoury Tables that costs up to 10 \ud83d\udc51. A Wretched must have at least 1 Weapon (they cannot be sent into battle completely unarmed).","glossary":[{"val":"Heretic Armoury","id":"kw_heretic"}]}],"lore":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"Many unfortunates fall into the hands of Heretic warbands, captured in raids, purchased from the slave markets, or seized by watchful patrols. Such Wretched are branded with cursed flesh-eating tattoos as a safeguard against escape and heavily drugged to degrade and dull their will, while still leaving their aggression intact."}]}],"team":"hell","stats":{"movement":6,"melee":-1,"ranged":-1,"base":[25],"armour":0,"movetype":0,"potential":2},"keywords":["kw_heretic"],"abilities":["ab_lawofhell","ab_darkblessing","ab_chattel"]},{"id":"md_sineater","name":"Sin Eater","source":"core","tags":{},"contextdata":{"modify_equipment_block":{}},"description":[{"tags":{"desc_type":"default"},"content":"Sin Eater always has Reinforced Armour, a Combat Helmet, and a Tenderiser Maul."}],"lore":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"Sin Eaters were once mortal men and women, but their overwhelming greed, combined with the corrupting influence of the Hellgate, turned them into an abominable form that matches their inner foulness. Sin Eaters are among the few creatures outside Beelzebub\u2019s followers that he deems worthy as their boundless gluttony mirrors his essence."}]}],"team":"hell","stats":{"movement":6,"melee":2,"base":[50],"armour":0,"movetype":0,"potential":0,"mercenary":true},"keywords":["kw_demonic","kw_fear","kw_tough","kw_strong"],"abilities":["ab_devourtheguilty"]},{"id":"md_goeticwarlock","name":"Goetic Warlock","source":"core","tags":{},"contextdata":{"modify_equipment_block":{}},"description":[{"tags":{"desc_type":"default"},"content":"A Goetic Warlock always has Reinforced Armour."}],"lore":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"Goetic Warlocks are nightmarish creations forged in the death factories of the Third Circle of Hell. Captured priests, prophets, vicars, rectors, and monks are tortured in fiendish machines that burn away their flesh with hellfire, encasing their still-living skeletons in infernal suits of armour, and stamping them with Goetic runes. The process is so agonising that the victims, driven by desperation, willingly enter into demonic pacts, seeking an end to their unbearable suffering. Thus, a new Goetic Warlock is born, now a ruthless predator, driven to hunt the very mortals they once swore to protect."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"The mere gaze of a Warlock induces necrosis. In close quarters, they clasp their enemies in a merciless embrace. Drawing on Goetic power, they portal to a secluded location, where they can savour the prolonged destruction of their victim, slowly shredding them into pieces. They revel in the grotesque act of skinning their victims alive, transforming the remains into repulsive vellum for dark grimoires and profane religious texts. Some even wear the faces of their victims to power their illusionary spells, confounding their enemies."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"Due to the rarity of the victims required to create Goetic Warlocks, these abominations are reserved for the most renowned Heretic commanders, with the greatest need and the most influential connections in the twisted web of Heretic politics. Mammon, the mighty devil of Greed, offers his personal battalion of Warlocks to the highest bidder."}]}],"team":"hell","stats":{"movement":6,"melee":1,"ranged":1,"base":[40],"armour":0,"movetype":0,"potential":0,"mercenary":true},"keywords":["kw_demonic","kw_fear","kw_artificial"],"abilities":["ab_goeticportal","ab_barbedembrace","ab_ironclawedhands","ab_goeticgaze"]},{"id":"md_warprophet","name":"War Prophet","source":"core","tags":{},"contextdata":{"keyword_mod":{"mods":[{"type":"remove","value":"kw_tough"}]}},"description":[{"tags":{"desc_type":"default"},"content":"A War Prophet can have any Battlekit from the Trench Pilgrims Armoury Tables.","glossary":[{"val":"Trench Pilgrims","id":"kw_pilgrim"}]}],"lore":[{"tags":{"desc_type":"italic"},"content":"A charismatic leader and powerful fighter of the Pilgrim group. They are driven by visions of Armageddon, and their preaching and prophecies drive the pilgrimage from one battlefield to the next, as they seek to thwart the forces of Satan and find martyrdom in combat. They are equipped with loudspeakers, allowing them to blare out holy sermons and dire prophecies at 100 decibels to inspire the faithful."}],"team":"faithful","stats":{"movement":6,"melee":2,"ranged":2,"base":[32],"armour":0,"movetype":0,"potential":0},"keywords":["kw_pilgrim","kw_elite","kw_leader"],"abilities":["ab_loudspeakers","ab_layingonhands","ab_mementomori"]},{"id":"md_castigator","name":"Castigator","source":"core","tags":{},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A Castigator can have any Battlekit from the Trench Pilgrims Armoury Tables.","glossary":[{"val":"Trench Pilgrims","id":"kw_pilgrim"}]}],"lore":[{"tags":{"desc_type":"italic"},"content":"Tasked with instilling the fear of God in the troops, this orthodox officer keeps the warriors on the path of righteousness and punishes those who transgress. They are protected by their unwavering faith as well as by the saints they revere."}],"team":"faithful","stats":{"movement":6,"melee":1,"ranged":1,"base":[32],"armour":0,"movetype":0,"potential":0},"keywords":["kw_pilgrim","kw_elite"],"abilities":["ab_enforcedorthodoxy","ab_whipofgod"]},{"id":"md_communicant","name":"Communicant","source":"core","tags":{},"contextdata":{"regenerate_mod":{"value":1}},"description":[{"tags":{"desc_type":"default"},"content":"A Communicant has a Communicant Cross. The Communicant can also have any Battlekit from the Trench Pilgrims Armoury Tables.","glossary":[{"val":"Trench Pilgrims","id":"kw_pilgrim"}]}],"lore":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"Communicants are devotees who consumed the flesh of a Meta-Christ and drank its blood. Strengthened by the divine essence, they grow to enormous size, and the wounds they suffer close miraculously. They see more clearly blind, so blessed crosses are nailed through their eyes."}]}],"team":"faithful","stats":{"movement":6,"melee":2,"ranged":-3,"base":[40],"armour":0,"movetype":0,"potential":1},"keywords":["kw_pilgrim","kw_elite","kw_strong","kw_tough"],"abilities":["ab_bodyguard_pilgrim"]},{"id":"md_crimsoncommunicant","name":"Crimson Communicant","source":"westfalia","tags":{},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A Crimson Communicant can have any Battlekit from the New Antioch Armoury Tables. In addition, they always carry an Atonement Bell (see below).","glossary":[{"val":"New Antioch","id":"kw_antioch"}]}],"lore":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"Wracked with an aching sense of loss and despair, the Crimson Communicants find solace to their pain in the company of the grim Red Brigade. Numb to lesser physical sensations, they actively seek grevious wounds on the battlefield to forget their mental anguish. As a parting gift when leaving the Mendelist monastery, they are each gifted an Atonement Bell."}]}],"team":"faithful","stats":{"movement":6,"melee":1,"ranged":-1,"base":[40],"armour":0,"movetype":0,"potential":1},"keywords":["kw_antioch","kw_elite","kw_strong","kw_tough"],"abilities":["ab_strengththroughpain"]},{"id":"md_trenchpilgrim","name":"Trench Pilgrim","source":"core","tags":{},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A Trench Pilgrim can have any Battlekit from the Trench Pilgrims Armoury Tables.","glossary":[{"val":"Trench Pilgrims","id":"kw_pilgrim"}]}],"lore":[{"tags":{"desc_type":"italic"},"content":"A holy warrior of the trenches. They consider it their religious duty to make pilgrimages to the sacred battlefields to fight the Heretic Legions. Pilgrims wear the iron capirote to insulate their minds from the horrors of war."}],"team":"faithful","stats":{"movement":6,"melee":0,"ranged":0,"base":[25],"armour":0,"movetype":0,"potential":0},"keywords":["kw_pilgrim"],"abilities":[]},{"id":"md_ecclesiasticprisoner","name":"Ecclesiastic Prisoner","source":"core","tags":{},"contextdata":{"model_equipment_restriction":{"removed":[{"category":"melee","res_type":"all","value":""},{"category":"ranged","res_type":"all","value":""},{"category":"grenade","res_type":"all","value":""},{"category":"armour","res_type":"all","value":""},{"category":"shield","res_type":"all","value":""}],"required":[{"category":"equipment","res_type":"id","value":"eq_martyrdomdevice"}]}},"description":[{"tags":{"desc_type":"default"},"content":"An Ecclesiastic Prisoner always has an Iron Capirote. Up to 4 Ecclesiastic Prisoners can have a Martyrdom Device for 35 \ud83d\udc51. They cannot have any other Battlekit.","glossary":[{"val":"Trench Pilgrims","id":"kw_pilgrim"}]}],"lore":[{"tags":{"desc_type":"italic"},"content":"Bound in chains, their minds consumed by a desperate resolve, Ecclesiastic Prisoners surge forward, driven by the hope that their sacrificial charge will somehow cleanse their tarnished souls."}],"team":"faithful","stats":{"movement":6,"melee":-1,"base":[25],"armour":0,"movetype":0,"potential":2},"keywords":["kw_pilgrim"],"abilities":["ab_awaited","ab_maddash","ab_feebleflailing"]},{"id":"md_stigmaticnun","name":"Stigmatic Nun","source":"core","tags":{},"contextdata":{"regenerate_mod":{"value":1},"model_equipment_restriction":{"required":[{"category":"ranged","res_type":"id","value":"eq_pistolrevolver"},{"category":"ranged","res_type":"id","value":"eq_automaticpistol"},{"category":"grenade","res_type":"id","value":"eq_warcross"}]}},"description":[{"tags":{"desc_type":"default"},"content":"A Stigmatic Nun can have Battlekit from the Trench Pilgrims Armoury Tables. The only Ranged Weapons they can have are Automatic Pistols and Pistols, and the only Grenades they can have are Warcrosses. No restrictions apply to any other Types of Battlekit.","glossary":[{"val":"Trench Pilgrims","id":"kw_pilgrim"}]}],"lore":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"Blessed with stigmata and unshakeable faith, these swordmaster nuns are the vanguard of any assault by the holy armies."}]}],"team":"faithful","stats":{"movement":8,"melee":1,"ranged":1,"base":[25],"armour":0,"movetype":0,"potential":0},"keywords":["kw_pilgrim"],"abilities":["ab_agile","ab_blessedstigmata"]},{"id":"md_anchoriteshrine","name":"Anchorite Shrine","source":"core","tags":{},"contextdata":{"ignore_element":{"element":["kw_shrapnel"]},"model_equipment_restriction":{"removed":[{"category":"melee","res_type":"all","value":""},{"category":"ranged","res_type":"all","value":""},{"category":"grenade","res_type":"all","value":""},{"category":"armour","res_type":"all","value":""},{"category":"shield","res_type":"all","value":""}],"required":[{"category":"equipment","res_type":"id","value":"eq_sacrificiallamb"}]}},"description":[{"tags":{"desc_type":"default"},"content":"An Anchorite Shrine has a Bonebreaker Mace and a Catherine Wheel. These Weapons are built into the Anchorite Shrine and cannot be removed or lost throughout the campaign for any reason. It cannot have any other Battlekit."}],"lore":[{"tags":{"desc_type":"italic"},"content":"A colossal suit of machine armour fuelled by diesel and faith, the Anchorite Shrine stands as a grim symbol of humanity\u2019s despair. Within its spiked, blood-stained interior, the pilot-monk endures a terrible form of penance, his anguished prayers and chants echoing across the battlefield. This grotesque amalgamation of suffering and devotion instills fear in the heart of the Heretic, as the Anchorite, a malevolent weapon draped in holy iconography and weeping gore, emerges to unleash a symphony of slaughter, where the wretched union of man and machine heralds the demise of all who oppose the Almighty."}],"team":"faithful","stats":{"movement":6,"melee":2,"base":[60],"armour":-3,"movetype":0,"potential":2},"keywords":["kw_pilgrim","kw_fear","kw_tough","kw_strong"],"abilities":["ab_brokenonthewheel","ab_symphonyofslaughter"]},{"id":"md_combatmedic","name":"Combat Medic","source":"core","tags":{},"contextdata":{"keyword_ignore":{"value":["kw_fear"]}},"description":[{"tags":{"desc_type":"default"},"content":"A Combat Medic always has Standard Armour, a Gas Mask, a Medi-kit, and a Misericordia (\u25b6 see Battlekit in the Trench Crusade Digital Rulebook). The Injury Modifier for the Armour is included in the model\u2019s Profile above. They can also have any Battlekit from the New Antioch Armoury Tables, apart from Armour."}],"lore":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"New Antioch Combat Medics are highly-trained specialist troops. Many are devout followers of Saint Michael, the Archangel, revered as both a warrior-saint and the protector of medics, whom they believe steadies their hands and guides their blades. Combat Medics serve a brutal dual duty. They must deliver emergency battlefield treatment aimed at returning soldiers to the fight as swiftly as possible, while also standing shoulder to shoulder with them on the front lines. Their misericordia knives are equally useful for on-the-spot surgery and the rapid dispatch of fallen enemies."}]}],"team":"faithful","stats":{"movement":6,"melee":0,"ranged":0,"base":[25],"armour":0,"movetype":0,"potential":0},"keywords":["kw_antioch"],"abilities":["ab_finishthefallen","ab_expertmedic"]},{"id":"md_witchburner","name":"Witchburner","source":"core","tags":{},"contextdata":{"keyword_ignore":{"value":["kw_fear"]},"modify_equipment_block":{}},"description":[{"tags":{"desc_type":"default"},"content":"Witchburners always has Reinforced Armour, a Combat Helmet, and a Gavel of Justice."}],"lore":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"The Witchburners are the field officers of the Inquisition. They are tasked with hunting down and punishing witches, warlocks and heretics that cannot be brought to face justice by conventional means."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"On the battlefield they have the power to channel divine retribution on those deemed to have transgressed against God, causing sinners to burst into flames with mere words of condemnation. Since none are sinless, none are safe from their words of condemnation."}]}],"team":"faithful","stats":{"movement":6,"melee":1,"ranged":0,"base":[32],"armour":0,"movetype":0,"potential":0,"mercenary":true},"keywords":["kw_elite"],"abilities":["ab_divinejudgement","ab_dignifiedconduct"]},{"id":"md_communicantantitankhunter","name":"Communicant Anti-Tank Hunter","source":"core","tags":{},"contextdata":{"modify_equipment_block":{},"regenerate_mod":{"value":1}},"description":[{"tags":{"desc_type":"default"},"content":"A Communicant Anti-Tank Hunter always has an Anti-Materiel Rifle and a Combat Helmet."}],"lore":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"Communicants are forged through the experimental rite of chemical communion, in which Mendelist monks bond blood and flesh harvested from a Meta-Christ to the recipient\u2019s genome. Only the most devout and pious of the Church are granted the honour of communion. Those who endure the ritual transcend their mortal biology and are granted immense size and resilience, making them formidable assets on the battlefield. Their divinely-enhanced strength allows them to wield massive anti-materiel guns as if they were no heavier than a standard-issue firearm. The process is far from perfected, however, with a high possibility of unpredictable side effects. Some unlucky subjects lose the ability to speak, others lose their higher brain functions, as they are distracted by the Heavenly choir only they can hear, and cannot function without exact commands from their handlers."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"The Church, ever needing funds to sustain its military operations, frequently allocates Communicants to the highest bidders. Their services are in constant demand as they possess the ability to incapacitate enemy fighting vehicles, heavily armoured troops, and strongpoints with a single shot."}]}],"team":"faithful","stats":{"movement":6,"melee":1,"ranged":1,"base":[40],"armour":-1,"movetype":0,"potential":0,"mercenary":true},"keywords":["kw_tough","kw_strong"],"abilities":["ab_ironfists"]},{"id":"md_mendelistammomonk","name":"Mendelist Ammo Monk","source":"core","tags":{},"contextdata":{"modify_equipment_block":{}},"description":[{"tags":{"desc_type":"default"},"content":"A Mendelist Ammo Monk only has a Gas Mask. Note that a Mendelist Ammo Monk has no weapons and therefore cannot attack."}],"lore":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"The Order of Mendelist Monks is entrusted with the design of divinely enhanced items and the creation of the Communicants, devotees who have undergone chemical communion."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"The Brotherhood of Blessed Munitions is a subsect of the Order whose duty is to supply the Faithful with ammunition infused with the chemically altered blood of a Meta-Christ. These concoctions are highly unstable, dangerous to handle, and the secrets behind their formulas are fiercely guarded."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"On the battlefield, the monks brave enemy fire and infernal terrors, unwavering in their holy duty to deliver ammunition and unleash the wrath of the Lord upon the Heretics. Their patron, Saint Barbara, is believed to raise those who fall in battle to everlasting glory."}]}],"team":"faithful","stats":{"movement":6,"melee":-1,"ranged":-1,"base":[25],"armour":0,"movetype":0,"potential":0,"mercenary":true},"keywords":[],"abilities":["ab_faithfulfollowers","ab_theammunitionsacrement"]},{"id":"md_observer","name":"Observer","source":"core","tags":{},"contextdata":{"modify_equipment_block":{}},"description":[{"tags":{"desc_type":"default"},"content":"An Observer always has Standard Armour, a Combat Helmet, a Gas Mask, a Medi-kit, and a Polearm."}],"lore":[{"tags":{"desc_type":"paragraph"},"content":"This order of warrior monks lives in absolute solitude, honing their minds and bodies to become living weapons of the Hand of God. Once a soldier joins the order, they rarely leave the Temple of the Word, the sole exception being when they are summoned to the battlefield, where their unique abilities can decisively shift the balance in favour of the Faithful. The slightest disturbance in their prayers or training could sever their connection to the Lord of all Creation. Thus, the days and nights of the Observers are spent in secluded, cloistered cells, when not practicing their rigorous martial and mental disciplines."}],"team":"faithful","stats":{"movement":8,"melee":2,"ranged":1,"base":[32],"armour":0,"movetype":0,"potential":0,"mercenary":true},"keywords":[],"abilities":["ab_lightningspeed","ab_temporalfuge","ab_eyeofgod","ab_voiceofgod"]},{"id":"md_mechanisedheavyinfantry","name":"Mechanized Heavy Infantry","source":"core","tags":{},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A Mechanized Heavy Infantry model always has either Reinforced Armour at cost of 85 \ud83d\udc51 , or Machine Armour at a cost of 95 \ud83d\udc51 . Their Armour cannot be removed or lost throughout the campaign for any reason. The Injury Modifier for the Armour is included in the model\u2019s Profile above. They can have any Battlekit from the New Antioch Armoury Tables, apart from Armour.","glossary":[{"val":"New Antioch","id":"kw_antioch"},{"val":"ELITE","id":"kw_elite"},{"val":"LIMIT","id":"kw_limit"}]}],"lore":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"Well-armoured, imposing soldiers, the Mechanized Heavy Infantry wield the heavy weaponry of the company. Selected from amongst the best, they undergo heavy chemical enhancements to maximise their strength and endurance."}]}],"team":"faithful","stats":{"movement":6,"melee":0,"ranged":1,"base":[40],"armour":0,"movetype":0,"potential":0},"keywords":["kw_antioch","kw_strong"],"abilities":[]},{"id":"md_lieutenant","name":"Lieutenant","source":"core","tags":{},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A Lieutenant can have any Battlekit from the New Antioch Armoury Tables.","glossary":[{"val":"New Antioch","id":"kw_antioch"}]}],"lore":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"Lieutenants are the leaders of small squads or platoons of New Antioch\u2019s soldiers, playing a fundamental role on the frontlines. They are steadfast in their duty, preserving the unity and morale of their troops amid relentless conflict. A lieutenant may be a noble family\u2019s favoured son or daughter, or have risen through the ranks by impressing their superiors with their exceptional strategic acumen and audacious bravery."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"In addition to their command role, Lieutenants are responsible for acquiring weapons, arms, equipment and provisions for their troops. With resupply sporadic at best, they are frequently forced to loot the battlefields of No Man\u2019s Land or even raid settlements to sustain their forces."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"Having rightfully earned their position, Lieutenants enjoy the privilege of selecting their preferred arms and armour, often claiming the rarest battlefield finds. Many wield distinctive weapons, be it a revered family heirloom, an idiosyncratic affectation, or an ostentatious piece providing some much-needed swagger."}]}],"team":"faithful","stats":{"movement":6,"melee":2,"ranged":2,"base":[32],"armour":0,"movetype":0,"potential":0},"keywords":["kw_antioch","kw_elite","kw_leader","kw_tough"],"abilities":["ab_holdyourfire"]},{"id":"md_trenchcleric","name":"Trench Cleric","source":"core","tags":{},"contextdata":{"keyword_ignore":{"value":["kw_fear"]}},"description":[{"tags":{"desc_type":"default"},"content":"Trench Clerics can have any Battlekit from the New Antioch Armoury Tables.","glossary":[{"val":"New Antioch","id":"kw_antioch"}]}],"lore":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"A holy warrior entrusted with the very souls of the soldiers in the company. The Cleric chants inspiring battle prayers and can invoke divine miracles, from healing the wounded to smiting the enemy. The Cleric often carries a portable shrine on their back, honouring the company\u2019s Patron, be it a revered saint of their homeland, a mighty archangel, or the Lord himself."}]}],"team":"faithful","stats":{"movement":6,"melee":1,"ranged":1,"base":[32],"armour":0,"movetype":0,"potential":0},"keywords":["kw_antioch","kw_elite"],"abilities":["ab_onwardschristiansoldiers","ab_godiswithus"]},{"id":"md_sniperpriest","name":"Sniper Priest","source":"core","tags":{},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A Sniper Priest can have any Battlekit from the New Antioch Armoury Tables.","glossary":[{"val":"New Antioch","id":"kw_antioch"}]}],"lore":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"These devotees of the Church ritually blind themselves as a devotion to God, relying solely on their faith to strike His enemies. Stories have been told that during the Siege of the Monastery of Saint Lux, a Sniper Priest killed a target three miles away."}]}],"team":"faithful","stats":{"movement":6,"melee":-1,"ranged":2,"base":[25],"armour":0,"movetype":0,"potential":0},"keywords":["kw_antioch","kw_elite"],"abilities":["ab_aim","ab_absolutefaith"]},{"id":"md_yeoman","name":"Yeoman","source":"core","tags":{},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph"},"content":"A Yeoman may be recruited with a Bolt-Action Rifle for a reduced cost of 5\ud83d\udc51. The Yeoman can also have any Battlekit from the New Antioch Armoury Tables","glossary":[{"val":"New Antioch","id":"kw_antioch"},{"val":"INFILTRATOR","id":"kw_infiltrator"}]}],"lore":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"The basic troopers of New Antioch are brave men and women who have undergone standard training and sworn an oath to the Duke of New Antioch. Though they may lack the combat skills of more elite troops, they make up for it with sheer numbers and access to a wide array of weaponry."}]}],"team":"faithful","stats":{"movement":6,"melee":0,"ranged":0,"base":[25],"armour":0,"movetype":0,"potential":0},"keywords":["kw_antioch"],"abilities":["ab_trenchmole"]},{"id":"md_shocktrooper","name":"Shocktrooper","source":"core","tags":{},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph"},"content":"A Shock Trooper can have any Battlekit from the New Antioch Armoury Tables.","glossary":[{"val":"New Antioch","id":"kw_antioch"}]}],"lore":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"Highly trained in combined arms and fireteam tactics, these assault troops specialise in breaching enemy defences, and are masters of rapid assault and melee combat."}]}],"team":"faithful","stats":{"movement":6,"melee":1,"ranged":0,"base":[25],"armour":0,"movetype":0,"potential":0},"keywords":["kw_antioch"],"abilities":["ab_shockcharge","ab_assaultdrill"]},{"id":"md_combatengineer","name":"Combat Engineer","source":"core","tags":{},"contextdata":{"keyword_ignore":{"value":["kw_mined"]}},"description":[{"tags":{"desc_type":"paragraph"},"content":"A Combat Engineer always has Engineer Body Armour (\u25b6 see New Antioch Battlekit) and a Shovel. This Battlekit cannot be removed or lost throughout the campaign for any reason. The Injury Modifier for the Armour is included in the model\u2019s Profile above. They can also have any Battlekit from the New Antioch Armoury Tables, apart from Armour.","glossary":[{"val":"New Antioch","id":"kw_antioch"}]}],"lore":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"Combat Engineers specialise in destroying bunkers, discovering minefields, and building battlefield emplacements. Clad in steel body armour and armed for close combat, they brave the most perilous frontlines. Casualties within their ranks are exceedingly high, yet they consider it an honour to fight and die for New Antioch and the Church."}]}],"team":"faithful","stats":{"movement":6,"melee":1,"ranged":0,"base":[25],"armour":0,"movetype":0,"potential":0},"keywords":["kw_antioch"],"abilities":["ab_battlefielddemolition","ab_fortifyeng","ab_demineengineer","ab_setmineengineer"]},{"id":"md_amalgam","name":"Amalgam","source":"core","tags":{},"contextdata":{"keyword_ignore":{"value":["kw_gas"]},"ranged_strong":{},"strong_count":{"value":2},"set_arms":{"ranged":0,"melee":0,"special":6},"no_shield_combo":{},"model_equipment_restriction":{"removed":[{"category":"equipment","res_type":"all","value":""},{"category":"grenade","res_type":"all","value":""},{"category":"armour","res_type":"all","value":""}],"required":[{"category":"shield","res_type":"id","value":"eq_trenchshield"}]},"model_equipment_limit":{"maximum":[{"res_type":"keyword","value":"kw_heavy","limit":2},{"res_type":"self","value":"","limit":2}]}},"description":[{"tags":{"desc_type":"paragraph"},"content":"An Amalgam has six arms, which allows it to carry a vast combination of different Ranged and Melee Weapons. It can have up to six Ranged or Melee Weapons from the Black Grail Armoury. In addition, an Amalgam can treat two 2-Handed Weapons with the HEAVY Keyword (regardless of whether they are Ranged or Melee Weapons) as 1-Handed Weapons instead of the single 2-Handed Melee Weapon granted by the STRONG Keyword. Remaining 2-Handed Weapons count as two weapons towards this total. An Amalgam cannot have the same Weapon more than twice and it cannot have Grenades. An Amalgam may have up to 1 Trench Shield in place of one of its 1-Handed Weapons, but it does not benefit from the Shield Combo rule. It cannot have any other Battlekit.","glossary":[{"val":"Black Grail","id":"kw_blackgrail"},{"val":"STRONG","id":"kw_strong"}]}],"lore":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"An Amalgam is a huge, shambling mass of dozens of bodies of infected enemy warriors, insects, mammals and any other living creatures that had the misfortune of succumbing to the agonising blessings of the Cult of the Black Grail together. These aberrations shamble across the battlefield like walking mountains of corpulent, diseased flesh, their flailing arms still wielding weapons its victims used in life. Anyone or anything unfortunate enough to be in its path is crushed into a disgusting pulp beneath its elephantine feet."}]}],"team":"hell","stats":{"movement":6,"melee":0,"ranged":0,"base":[60],"armour":0,"movetype":0,"potential":2},"keywords":["kw_blackgrail","kw_fear","kw_tough","kw_strong"],"abilities":["ab_sixarmedmonstrosity","ab_corpulent","ab_trample_amalgam","ab_unstoppable"]},{"id":"md_plagueknight","name":"Plague Knight","source":"core","tags":{},"contextdata":{"keyword_ignore":{"value":["kw_gas"]},"special_category_upgrades":{"upgrades":[{"category":"plague_knight_ranks","count":1}]},"validate_final_unit_equipment":{"requirements":[{"tag":"armour","value":true}]}},"description":[{"tags":{"desc_type":"paragraph"},"content":"A Plague Knight can have any Battlekit from the Cult of the Black Grail Armoury Tables. It must have a suit of Armour. No restrictions apply to any other Types of Battlekit."}],"lore":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"Ranking lowest in the nobility of the Black Grail, these great armoured warriors were once truly depraved worshippers of Beelzebub. When the Cult of the Black Grail came for them, they willingly submitted to the authority of the Lord of Flies. As a result they retain a semblance of sentience and the ability to wield weapons as they did in life. They aspire to win favour in the eyes of Beelzebub and one day be promoted in the hierarchy of the Order of the Fly."}]}],"team":"hell","stats":{"movement":6,"melee":2,"ranged":0,"base":[32],"armour":0,"movetype":0,"potential":0},"keywords":["kw_blackgrail","kw_fear","kw_elite","kw_strong"],"abilities":["ab_undeadfortitude"]},{"id":"md_heraldofbeelzebub","name":"Herald of Beelzebub","source":"core","tags":{},"contextdata":{"unarmed_penalty_remove":{},"keyword_ignore":{"value":["kw_gas"]},"model_equipment_restriction":{"removed":[{"category":"melee","res_type":"all","value":""},{"category":"armour","res_type":"all","value":""},{"category":"shield","res_type":"all","value":""}],"required":[{"category":"equipment","res_type":"id","value":"eq_compoundeyeshelmet"}]},"model_equipment_limit":{"maximum":[{"category":"equipment","res_type":"id","value":"eq_graildevotee","limit":1}]}},"description":[{"tags":{"desc_type":"paragraph"},"content":"A Herald of Beelzebub can have any Ranged Weapon from the Cult of the Black Grail Armoury Tables. They cannot have any other Battlekit apart from a Compound Eyes Helmet.","glossary":[{"val":"Black Grail","id":"kw_blackgrail"}]}],"lore":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"Some victims of the Cult of the Black Grail suffer a far worse fate than becoming a Thrall. They are bestowed with the black honour of being melded with hell-flies, growing into a grotesque winged insect made of bloated flesh. After this torturous metamorphosis they take to the air as Heralds of Beelzebub, the winged squires and scouts of the Order of the Fly. Their vestigial human bodies are still conscious as they are slowly eaten from within to be used as fuel by the Herald, all the while their warped bodies fight for the glory of Hell against their will."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"The Heralds are the vanguard in any assault of the Cult of the Black Grail, and the ear-numbing otherworldly drone of their wings strikes terror in any defender, breaking their focus and sapping their willpower. Heralds wield discarded weapons contaminated with horrible worms that churn through them, which in turn infect their victims. Each diseased bullet has a sentience of its own, finding even the smallest chink in any armour, burrowing into the nervous system and liquefying the internal organs from within."}]}],"team":"hell","stats":{"movement":10,"melee":0,"ranged":0,"base":[40],"armour":0,"movetype":1,"potential":0},"keywords":["kw_blackgrail","kw_skirmisher","kw_fear","kw_flying"],"abilities":["ab_infectedproboscis","ab_maddeningbuzzing"]},{"id":"md_lordoftumors","name":"Lord of Tumors","source":"core","tags":{},"contextdata":{"keyword_ignore":{"value":["kw_gas"]}},"description":[{"tags":{"desc_type":"paragraph"},"content":"A Lord of Tumours can have any Battlekit from the Cult of the Black Grail Armoury Tables.","glossary":[{"val":"Black Grail","id":"kw_blackgrail"}]}],"lore":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"A high-ranking noble officiant in the Cult of the Black Grail, the Lord of Tumours spreads filth and corruption amongst friend and foe alike. They commune with the Lord of the Flies through a trance-like ecstasy and can channel the very power of the Seventh Circle of Hell which Beelzebub rules."}]}],"team":"hell","stats":{"movement":6,"melee":4,"ranged":1,"armour":0,"base":[50],"movetype":0,"potential":0},"keywords":["kw_blackgrail","kw_elite","kw_leader","kw_tough","kw_strong","kw_fear"],"abilities":["ab_undeadfortitude","ab_beelzebubstouch","ab_crushingblows"]},{"id":"md_corpseguard","name":"Corpse Guard","source":"core","tags":{},"contextdata":{"keyword_ignore":{"value":["kw_gas"]}},"description":[{"tags":{"desc_type":"paragraph"},"content":"A Corpse Guard can have any Battlekit from the Cult of the Black Grail Armoury Tables.","glossary":[{"val":"Black Grail","id":"kw_blackgrail"}]}],"lore":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"Only the strongest human devotees can survive the compounding blessings of the Cult of the Black Grail. The ones that do are inducted into the ranks of the Corpse Guards, bodyguards to the nobility of the Cult of the Black Grail. If they serve with distinction, they may one day join the ranks of the Infernal nobility."}]}],"team":"hell","stats":{"movement":6,"melee":1,"ranged":0,"base":[32],"armour":0,"movetype":0,"potential":0},"keywords":["kw_blackgrail","kw_elite","kw_fear"],"abilities":["ab_undeadfortitude","ab_parasitictick","ab_bodyguard_blackgrail"]},{"id":"md_houndsoftheblackgrail","name":"Hounds of the Black Grail","source":"core","tags":{},"contextdata":{"keyword_ignore":{"value":["kw_gas"]},"unarmed_penalty_remove":{},"model_equipment_restriction":{"removed":[{"category":"equipment","res_type":"all","value":""},{"category":"melee","res_type":"all","value":""},{"category":"ranged","res_type":"all","value":""},{"category":"grenade","res_type":"all","value":""},{"category":"armour","res_type":"all","value":""},{"category":"shield","res_type":"all","value":""}]}},"description":[{"tags":{"desc_type":"paragraph"},"content":"A Hound of the Black Grail cannot have any Battlekit.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"},{"val":"INFECTION MARKERS","id":"kw_bloodmarker"}]}],"lore":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"These are parasitic carcasses of canines infested with maggots and flies spawned from the body of Beelzebub himself. Their unholy mission is to prowl No Man\u2019s Land and spread disease and pestilence in the name of their dark master."}]}],"team":"hell","stats":{"movement":8,"melee":1,"base":[30,60],"armour":0,"movetype":0,"potential":2},"keywords":["kw_blackgrail","kw_fear"],"abilities":["ab_undeadfortitude","ab_frighteningspeed","ab_diseasecarrier","ab_teethandclaws"]},{"id":"md_grailthrall","name":"Grail Thrall","source":"core","tags":{},"contextdata":{"unarmed_penalty_remove":{},"keyword_ignore":{"value":["kw_gas"]},"model_equipment_restriction":{"removed":[{"category":"equipment","res_type":"all","value":""},{"category":"melee","res_type":"all","value":""},{"category":"ranged","res_type":"all","value":""},{"category":"grenade","res_type":"all","value":""},{"category":"armour","res_type":"all","value":""},{"category":"shield","res_type":"all","value":""}]}},"description":[{"tags":{"desc_type":"paragraph"},"content":"A Thrall cannot have any Battlekit."}],"lore":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"The boons of the Cult of the Black Grail lead slowly but surely down the path of utter corruption. Only very few of the chosen can withstand the blessings of the Lord of the Flies. Most are turned into Grail Thralls, destined to join the endless legions of empty, hollowed-out and diseased husks who must obey the whims of the Cult of the Black Grail nobles for all eternity, while suffering the torment of their countless supernatural infections."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Thralls come in two varieties: Grail Thralls, which have become almost impervious to pain, and Fly Thralls, controlled by the gargantuan hell-flies that have buried their proboscis deep into the central nervous system of their victims, allowing far greater mobility in exchange for less resistance to pain."}]}],"team":"hell","stats":{"movement":5,"melee":-1,"base":[25],"armour":0,"movetype":0,"potential":2},"keywords":["kw_blackgrail","kw_fear"],"abilities":["ab_undeadfortitude","ab_overwhelminghorde"]},{"id":"md_beastofnomansland","name":"Beast of No Man\'s Land","source":"core","tags":{"dontshow":true},"contextdata":{"model_equipment_restriction":{"removed":[{"category":"equipment","res_type":"all","value":""},{"category":"melee","res_type":"all","value":""},{"category":"ranged","res_type":"all","value":""},{"category":"grenade","res_type":"all","value":""},{"category":"armour","res_type":"all","value":""},{"category":"shield","res_type":"all","value":""}]}},"description":[{"tags":{"desc_type":"paragraph"},"content":"The Beast model can be up to 60mm tall, placed on a base of 120 x 80mm. It is armed only with its vicious Claws and devastating Bite. These are natural parts of the creature itself and cannot be removed or lost in any way."},{"tags":{"desc_type":"paragraph"},"content":"The Beast will seek out the nearest model with the most BLOOD MARKERS, driven by its bloodthirsty frenzy. The Beast will Charge the model through the fastest route and will Climb, Jump Over Gaps, Between Ledges of Unequal Heights and Down (as long as the height won\u2019t cause an injury to it) to get at a warband model. However, note that it will not move through Dangerous terrain if it can be avoided. The Beast does not need to have line of sight of a model to Charge it. If the beast cannot Charge a model, it will just Move toward the nearest one.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"}]},{"tags":{"desc_type":"paragraph"},"content":"When the Beast reaches a model, it will make one attack ACTION with each of its Claws and one attack ACTION with its Bite, all in Melee Combat (so it can make three attacks per Activation). If the Beast Charges more than one model, it will split its attacks amongst the opponents.","glossary":[{"val":"ACTION","id":"kw_action"}]}],"lore":[],"team":"scenario","stats":{"movement":8,"melee":2,"base":[120,80],"armour":0,"movetype":0,"potential":2},"keywords":["kw_fear","kw_tough"],"abilities":["ab_unrelenting","ab_resilient"]},{"id":"md_thedragon","name":"The Dragon","source":"core","tags":{"dontshow":true},"contextdata":{"stat_options":{"options":[[{"base":[150]},{"base":[180]},{"base":[210]},{"base":[240]},{"base":[270]},{"base":[300]}]]}},"description":[{"tags":{"desc_type":"paragraph"},"content":"The Dragon does not have any Battlekit."}],"lore":[{"tags":{"desc_type":"paragraph"},"content":"This massive entity is wreaking havoc, tearing through the afflicted, plague-ridden villages surrounding No Man\u2019s Land. Descriptions of the monster are wildly inconsistent. While some believe it to be a newborn Larval Beast, others report sighting a Possessed Tank. Whispers abound of an Angelic creature gone rogue, and some even say it is an actual Dragon. All accounts agree on its immense size and the trail of destruction and bloodshed it leaves behind. Showing no allegiance, it has trampled warbands and strongholds alike, spreading chaos indiscriminately."}],"team":"scenario","stats":{"melee":3,"ranged":3,"base":[120],"armour":-3,"movetype":0,"movement":10,"potential":2},"keywords":["kw_fear"],"abilities":["ab_undying","ab_defiant","ab_resistant","ab_siegeweapon","ab_livingbattlefield","ab_dragoncrush"]},{"id":"md_thepeasant","name":"The Peasant","source":"core","tags":{"dontshow":true},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph"},"content":"Peasants do not have any Battlekit."}],"lore":[{"tags":{"desc_type":"paragraph"},"content":"The war has taken its toll on the peasantry. Many are suffering from never-beforeseen ailments and diseases, their contaminated state is the main reason they have not been evacuated from the battlefield."}],"team":"scenario","stats":{"movement":6,"base":[25],"armour":0,"movetype":0,"potential":2},"keywords":[],"abilities":["ab_feeble"]},{"id":"md_yokefiend","name":"Yoke Fiend","source":"core","tags":{},"contextdata":{"model_equipment_restriction":{"removed":[{"category":"ranged","res_type":"ducat","value":30,"param":"maximum"}]},"model_equipment_limit":{"maximum":[{"category":"ranged","res_type":"category","value":"","limit":1}]}},"description":[{"tags":{"desc_type":"paragraph"},"content":"A Yoke Fiend can have 1 Ranged Weapon that has a cost of 30 \ud83d\udc51 or less from The Court\'s Armoury Tables. They can have any other Battlekit from The Court\'s Armoury Tables apart from Ranged Weapons.","glossary":[{"val":"Court","id":"kw_thecourt"}]}],"lore":[{"tags":{"desc_type":"italic"},"content":"A Yoke Fiend stands some seven to eight feet tall, with layers of shivering fat and muscle branded by their masters, carved by the knives of the priests of Hell to mark them as property of greater demons. They exhibit bestial features such as horns and hooves of cattle or goats, ape-like limbs with immensely dense bones. They hate seeing their own reflections, as in their heart of hearts they know the beauty and glory they have lost for all eternity."}],"team":"hell","stats":{"movement":6,"melee":1,"ranged":0,"base":[32],"armour":0,"movetype":0,"potential":2},"keywords":["kw_thecourt","kw_demonic"],"abilities":["ab_hateful","ab_torturer"]},{"id":"md_pitlocust","name":"Pit Locust","source":"core","tags":{},"contextdata":{"unarmed_penalty_remove":{},"model_equipment_restriction":{"removed":[{"category":"armour","res_type":"all","value":""},{"category":"shield","res_type":"all","value":""},{"category":"melee","res_type":"all","value":""},{"category":"ranged","res_type":"all","value":""},{"category":"grenade","res_type":"all","value":""}],"required":[{"category":"equipment","res_type":"id","value":"eq_crownofhellfire"}]}},"description":[{"tags":{"desc_type":"paragraph"},"content":"A Pit Locust can have a Crown of Hellfire from from The Court\'s\' Armoury Table. They cannot have any other Battlekit."}],"lore":[{"tags":{"desc_type":"italic"},"content":"Pit Locusts are terrifying, horse-sized, winged, and armoured creatures with twisted faces resembling humans. They fight with rending blades attached to their limbs and with poison stingers."}],"team":"hell","stats":{"movement":8,"melee":2,"ranged":0,"base":[30,60],"armour":0,"movetype":1,"potential":1},"keywords":["kw_thecourt","kw_demonic","kw_fear","kw_flying"],"abilities":["ab_poisonstingers"]},{"id":"md_sorcerer","name":"Sorcerer","source":"core","tags":{},"contextdata":{"model_equipment_restriction":{"removed":[{"category":"ranged","res_type":"all","value":""},{"category":"grenade","res_type":"all","value":""}]}},"description":[{"tags":{"desc_type":"paragraph"},"content":"A Sorcerer can have any Battlekit from The Court\u2019s Armoury Tables apart from Ranged Weapons and Grenades.","glossary":[{"val":"Court","id":"kw_thecourt"}]}],"lore":[{"tags":{"desc_type":"italic"},"content":"Sorcerers come in many forms and manipulate their bodies to better cast the mighty spells they are charged with. Some have many arms, others multiple heads or countless alterations and terrible improvements, some self-administered, others forced upon them, based on the whims of the archdevil and the cabal of High Sorcerers who lead their Goetic strategy. A Sorcerer\u2019s feet do not touch the ground, a distant echo of their angelic past, instead they float across No Man\u2019s Land, chanting the cruel gospel of Hell as they advance. Their dark wisdom and cunning make them equally capable of leading one of the Court\u2019s warbands or acting as advisors to one of the Praetors as they stride forth into the mortal realms."}],"team":"hell","stats":{"movement":6,"melee":1,"ranged":1,"base":[50],"armour":0,"movetype":1,"potential":0},"keywords":["kw_thecourt","kw_demonic","kw_elite","kw_fear","kw_flying"],"abilities":["ab_goetics_sorcerer","ab_blessingsoftheserpentmoon"]},{"id":"md_praetor","name":"Praetor","source":"core","tags":{},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph"},"content":"A Praetor can have any Battlekit from The Court\u2019s Armoury Tables.","glossary":[{"val":"Court","id":"kw_thecourt"}]}],"lore":[{"tags":{"desc_type":"italic"},"content":"Praetors are demonic commanders and magistrates within a small corner of the fiefdom of a mighty archdevil or demon lord. Each commands small cohorts at their liege\u2019s behest, raised from the denizens of the ever-shifting domains of Hell. Yoke Fiends muster at their command and Hell Knights, bound to blind obedience, bend their knees to these field commanders of Hell."}],"team":"hell","stats":{"movement":8,"melee":3,"ranged":3,"base":[50],"armour":0,"movetype":1,"potential":0},"keywords":["kw_tough","kw_strong","kw_fear","kw_thecourt","kw_demonic","kw_leader","kw_elite","kw_flying"],"abilities":["ab_goetics_praetor"]},{"id":"md_hunterofthelefthandpath","name":"Hunter of the Left-Hand Path","source":"core","tags":{},"contextdata":{"model_equipment_restriction":{"removed":[{"category":"ranged","res_type":"all","value":""}]}},"description":[{"tags":{"desc_type":"paragraph"},"content":"A Hunter of the Left-Hand Path always has a Bow of Lethe, and it cannot be removed or lost over the course of the campaign for any reason. The Hunter of the Left-Hand Path must always hold it in one of their hands. They can also have any Battlekit from The Court\'s Armoury Tables apart from 2-Handed Weapons.","glossary":[{"val":"Court","id":"kw_thecourt"}]}],"lore":[{"tags":{"desc_type":"italic"},"content":"The Hunters of the Court of the Seven-Headed Serpent are followers of the Left-Hand Path. They stalk the primordial hinterlands of hell where they hunt terrifying beasts. They perform vile magicks and auguries using the innards of their still-living prey to discern portents and omens."}],"team":"hell","stats":{"movement":6,"melee":1,"ranged":2,"base":[32],"armour":0,"movetype":0,"potential":0},"keywords":["kw_thecourt","kw_demonic","kw_elite","kw_infiltrator"],"abilities":["ab_shadowwalker","ab_lefthandpath","ab_oraclebeastcloak"]},{"id":"md_hellknight","name":"Hell Knight","source":"core","tags":{},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph"},"content":"A Hell Knight always has a suit of Infernal Iron Armour. The Infernal Iron Armour cannot be removed or lost over the course of the campaign for any reason. The Injury Modifier for the Armour is already included in the model\u2019s Profile above. They can also have any Battlekit from The Court\'s Armoury Tables apart from Armour.","glossary":[{"val":"Court","id":"kw_thecourt"}]}],"lore":[{"tags":{"desc_type":"italic"},"content":"The silent battalions of Inferno, summoned to serve when the Court of the Seven-Headed Serpent seeks sport, are composed of Hell Knights. Their ever-burning banners stream as they march to war, carrying out the bidding of their masters. They are the bannerets of the high lords of the Court, champions who respond to foolish mortals daring to challenge the hunting parties of the Serpent\u2019s nobility."}],"team":"hell","stats":{"movement":6,"melee":2,"ranged":0,"base":[40],"armour":0,"movetype":0,"potential":0},"keywords":["kw_thecourt","kw_demonic","kw_strong","kw_elite"],"abilities":["ab_goetics_knight","ab_bloodmagic"]},{"id":"md_desecratedsaint","name":"Desecrated Saint","source":"core","tags":{},"contextdata":{"set_arms":{"melee":3,"ranged":0,"special":0},"model_equipment_restriction":{"removed":[{"category":"armour","res_type":"all","value":""},{"category":"shield","res_type":"all","value":""},{"category":"equipment","res_type":"all","value":""},{"category":"ranged","res_type":"all","value":""},{"category":"grenade","res_type":"all","value":""}]},"model_equipment_limit":{"maximum":[{"res_type":"stat","value":"hands_melee","subvalue":2,"limit":1}]},"add_ignore_mods":{"modifiers":["off-hand_weapon"]}},"description":[{"tags":{"desc_type":"paragraph"},"content":"A Desecrated Saint has several arms. It can have up to three 1-Handed Melee Weapons from The Court\'s Armoury Tables or two 1-Handed Melee Weapons and one 2-Handed Melee Weapon. It cannot have any other Battlekit.","glossary":[{"val":"Court","id":"kw_thecourt"},{"val":"STRONG","id":"kw_strong"}]}],"lore":[{"tags":{"desc_type":"italic"},"content":"Desecrated Saints are the most prized possessions of the lords of Hell: men and women once destined to become saints, great prophets or holy ones according to God\u2019s plan, but who were led astray and fell from grace."}],"team":"hell","stats":{"movement":6,"melee":3,"base":[60],"armour":-3,"movetype":0,"potential":1},"keywords":["kw_thecourt","kw_demonic","kw_fear","kw_tough","kw_strong"],"abilities":["ab_demonicaura","ab_annihilator"]},{"id":"md_combatbiologist","name":"Combat Biologist","source":"core","tags":{},"contextdata":{"keyword_ignore":{"value":["kw_fear"]},"modify_equipment_block":{}},"description":[{"tags":{"desc_type":"default"},"content":"A Combat Biologist always has Gas Grenades, Standard armour, a Gas Mask, and a Vivisector."}],"lore":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"Faith is not a passive instrument in the theatre of the Great War, rather it is one that is strengthened, sharpened by knowledge and experience. For the Faithful, Combat Biologists are one of the many whetstones upon which this sharpening occurs, travelling to the miseries of No Man\u2019s Land to capture the enemies of the Almighty, or yield as much data as possible from their corpses. This research helps to manufacture new weapons to turn against the foes of the Church and the Sultanate, with no sinner or hellbeast being beyond the reach of the Combat Biologist\u2019s toxinlaced vivisector."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"Combat Biologists are members of the Pontifical Office of Biological warfare, or in the case of the Sultanate, the Al-Bis\u0163\u0101m\u012b School of Ninety-Nine Names, which trains some failed Alchemist apprentices in a similar fashion. These scholars specialise in battlefield vivisections and collecting samples of the most powerful servants of Hell so they can be studied, in the hopes of finding ways to develop weapons capable of driving the servants of the Pit back to the darkness."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"Due to their training, hypnotic conditioning and constant exposure to captured specimens, the Combat Biologist enters a battle trance when faced with creatures that normally induce fear in ordinary troopers. They wield vivisectors, polearm blade weapons that combine sophisticated biological warfare agents and the functional brutality of trench warfare."}]}],"team":"faithful","stats":{"movement":6,"melee":1,"ranged":0,"base":[32],"armour":0,"movetype":0,"potential":0,"mercenary":true},"keywords":[],"abilities":["ab_prizespecimens","ab_battlefieldvivisection"]},{"id":"md_matagothag","name":"Matagot Hag","source":"creature_caster","tags":{},"contextdata":{"unarmed_penalty_remove":{},"keyword_ignore":{"value":["kw_gas"]},"model_equipment_restriction":{"removed":[{"category":"melee","res_type":"all","value":""},{"category":"ranged","res_type":"all","value":""},{"category":"grenade","res_type":"all","value":""},{"category":"armour","res_type":"all","value":""},{"category":"shield","res_type":"all","value":""}],"required":[{"category":"equipment","res_type":"id","value":"eq_graspingmaw"},{"category":"equipment","res_type":"id","value":"eq_devouringjaws"},{"category":"equipment","res_type":"id","value":"eq_graildevotee"}]}},"description":[{"tags":{"desc_type":"paragraph"},"content":"A Matagot Hag can have Devouring Jaws and/or a Grasping Maw and/or Grail Devotees. A Matagot Hag cannot have any other Battlekit. ","glossary":[{"val":"Black Grail","id":"kw_blackgrail"}]}],"lore":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"The Matagot Hag is an undying vessel of The Great Hunger and the favoured child of Beelzebub, for in his heart he hates all things in Creation and the natural circle of life. This creature is a wretched husk of a once-human mother cursed to endlessly birth monstrosities."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"Her bloated and distended body is locked in an obscene cycle of constant regeneration and decay - her flesh splitting open in great, festering ruptures only to stitch itself back together, swollen with the next abomination writhing in her womb. Her skin, stretched thin and sickly pale, is mottled with blackened veins and pulsing sores, her eyes long rotted away, leaving only hollow sockets weeping thick, infectious ichor. The Grail Thralls she births carry her aloft, treating her as a living effigy of gluttony and suffering. Though mindless hunger drives her, the Hag is not without purpose - her whispered, guttural croons are hymns of devotion to Beelzebub, calling forth ever more horrors to devour the world."}]}],"team":"hell","stats":{"movement":6,"melee":3,"armour":0,"movetype":0,"potential":0,"base":[60]},"keywords":["kw_blackgrail","kw_elite","kw_leader","kw_tough","kw_fear"],"abilities":["ab_undeadfortitude","ab_pestilent","ab_frenziedfollowers","ab_cadreofflesh","ab_arcanaputrescere"]},{"id":"md_gergorigula","name":"Gregori Gula","source":"creature_caster","tags":{},"contextdata":{"unarmed_penalty_remove":{},"keyword_ignore":{"value":["kw_gas"]},"add_ignore_mods":{"modifiers":["off-hand_weapon"]},"model_equipment_restriction":{"removed":[{"category":"melee","res_type":"all","value":""},{"category":"ranged","res_type":"all","value":""},{"category":"grenade","res_type":"all","value":""},{"category":"armour","res_type":"all","value":""},{"category":"shield","res_type":"all","value":""}],"required":[{"category":"equipment","res_type":"id","value":"eq_graspingmaw"}]}},"description":[{"tags":{"desc_type":"paragraph"},"content":"A Gregori Gula can have a Grasping Maw. They cannot have any other Battlekit.","glossary":[{"val":"Black Grail","id":"kw_blackgrail"}]}],"lore":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"The Gregori Gula are rare, winged predators - gaunt, angelic abominations draped in rotting flesh and hiding a myriad of waiting mouths. Unlike the mindless thralls, they stalk prey with patience, each kill chosen with eerie precision. When struck down, they do not die, but collapse into a dormant cocoon of necrotic tissue, seeping toxins and viral remnants into the battlefield. If a thrall ventures too close, it is consumed, and the Gula rises again, unfurling its wings in a storm of infectious gas that cripples all nearby. The only solution is fire and absolute destruction, for so long as even a trace remains, the Gregori Gula will endure."}]}],"team":"hell","stats":{"movement":9,"armour":0,"melee":2,"movetype":1,"potential":0,"base":[60]},"keywords":["kw_blackgrail","kw_infiltrator","kw_fear"],"abilities":["ab_arcanaputrescere_one","ab_plagueriddenflesh","ab_dormanthunger","ab_gnashingandwailing"]},{"id":"md_helltick","name":"Hell Tick","source":"core","tags":{"dontshow":true},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph"},"content":"Hell Ticks do not have any Battlekit."}],"lore":[{"tags":{"desc_type":"paragraph"},"content":"Hell Ticks infest No Man\u2019s Land. Creatures of monstrous size with a voracious appetite for blood. Infestation follows wherever the path of the Beast cuts through the land."}],"team":"scenario","stats":{"movement":10,"base":[25],"melee":1,"armour":0,"movetype":0,"potential":2},"keywords":[],"abilities":["ab_mandibles","ab_poisoned"]}]'),h=JSON.parse('[{"id":"md_janissaries_mv_dervish","name":"Dervish","source":"core","tags":{},"contextdata":{"add_ignore_mods":{"modifiers":["off-hand_weapon"]},"restriction_override":{"exception":[{"equipment":"eq_reinforcedarmour"}],"overrides":[{"type":"id","model":"md_janissaries"}]}},"base_id":"md_janissaries","variant_name":"Fidai_Of_Alamut","lore":[{"tags":{"desc_type":"italic"},"content":"Alamut is also a home to a renegade sect of Ismaili Dervishes, warrior monks sworn to poverty and a lethal way of fighting. They accompany the Assassins on their secret missions as an act of piety and payment for their shelter, and their whirling dance of death has been the end of many a disbeliever."}],"team":"faithful","stats":{},"cut_keywords":["kw_strong"],"keywords":[],"cut_abilities":[],"new_abilities":["ab_whirlingdervishes"]},{"id":"md_janissaries_mv_faris","name":"F\u0101ris","source":"core","tags":{},"contextdata":{"restriction_override":{"overrides":[{"type":"id","model":"md_janissaries"}]}},"base_id":"md_janissaries","variant_name":"House_Of_Wisdom","lore":[{"tags":{"desc_type":"italic"},"content":"Each Alchemist dispatched on such a journey is an irreplaceable loss, and since they operate under their own authority, they cannot expect direct support from the Sultan\u2019s forces. Many noble F\u0101ris warriors have taken oaths to protect these scholars in their journeys, as well as their own Kavass bodyguards sworn to fight and die in defence of their Masters."}],"team":"faithful","stats":{},"cut_keywords":[],"keywords":["kw_elite"],"cut_abilities":[],"new_abilities":[]},{"id":"md_janissaries_mv_officer","name":"Janissary Officer","source":"core","tags":{},"contextdata":{"restriction_override":{"overrides":[{"type":"id","model":"md_janissaries"}]}},"base_id":"md_janissaries","variant_name":"Defenders_Of_The_Iron_Wall","team":"faithful","stats":{},"cut_keywords":[],"keywords":["kw_elite"],"cut_abilities":[],"new_abilities":[]},{"id":"md_azeb_mv_kavass","name":"Azeb","source":"core","tags":{},"contextdata":{"restriction_override":{"overrides":[{"type":"id","model":"md_azeb"}]}},"base_id":"md_azeb","variant_name":"House_Of_Wisdom","lore":[{"tags":{"desc_type":"italic"},"content":"Many noble F\u0101ris warriors have taken oaths to protect these scholars in their journeys, as well as their own Kavass bodyguards sworn to fight and die in defence of their Masters. Kavass are sworn guardians of the House of Wisdom. "}],"team":"faithful","stats":{},"cut_keywords":[],"keywords":[],"cut_abilities":[],"new_abilities":[]},{"id":"md_sultanateassassin_mv_masterassassin","name":"Master Assassin","source":"core","tags":{},"contextdata":{"restriction_override":{"overrides":[{"type":"id","model":"md_sultanateassassin"}]}},"base_id":"md_sultanateassassin","variant_name":"Fidai_Of_Alamut","team":"faithful","stats":{},"cut_keywords":[],"keywords":["kw_tough","kw_leader"],"cut_abilities":[],"new_abilities":[]},{"id":"md_azeb_mv_acolyte","name":"Assassin Acolyte","source":"core","tags":{},"contextdata":{"restriction_override":{"overrides":[{"type":"id","model":"md_azeb"}]}},"base_id":"md_azeb","variant_name":"Fidai_Of_Alamut","lore":[{"tags":{"desc_type":"italic"},"content":"These warbands are known as Fida\u2019i (which means \u2018Sacrifice\u2019), dedicated to completing their mission and returning to Alamut to receive rewards said to be able to match those of Paradise itself. They are led by a Master Assassin: one of the deadly Hands of Alamut, with two fully-trained members of the Order. A number of trainee acolytes will serve them during the mission, eager to prove their mettle and be initiated into the Order of Assassins."}],"team":"faithful","stats":{},"cut_keywords":[],"keywords":[],"cut_abilities":[],"new_abilities":[]},{"id":"md_yuzbasicaptain_mv_silahdar","name":"Silahdar","source":"core","tags":{},"contextdata":{"restriction_override":{"overrides":[{"type":"id","model":"md_sultanatesapper"}]}},"base_id":"md_yuzbasicaptain","variant_name":"Defenders_Of_The_Iron_Wall","lore":[{"tags":{"desc_type":"italic"},"content":"Military expeditions over the Great Iron Wall into No Man\u2019s Land carry many risks, and their commanders are field officers known as Y\xfczba\u015f\u0131. They are expected to lead from the front and their selection is solely on merit, with no consideration given to family pedigree or wealth."},{"tags":{"desc_type":"gap"}},{"tags":{"desc_type":"italic"},"content":"The commanders of the Iron Wall units come from amongst the personal bodyguards of the Sultan known as Silahdar."}],"description":[{"tags":{"desc_type":"default"},"content":"A Y\xfczba\u015f\u0131 can have any Battlekit from the Iron Sultanate Armoury Tables including Battlekit available only to Sultanate Sappers.","glossary":[{"val":"Iron Sultanate","id":"kw_sultanate"}]}],"team":"faithful","stats":{},"cut_keywords":[],"keywords":["kw_strong"],"cut_abilities":["ab_mubarizun"],"new_abilities":[]},{"id":"md_mamlukfaris_mv_sipahi","name":"Sipahi Automaton Cavalry","source":"core","tags":{},"contextdata":{"restriction_override":{"overrides":[{"type":"id","model":"md_mamlukfaris"}]}},"base_id":"md_mamlukfaris","variant_name":"Defenders_Of_The_Iron_Wall","lore":[{"tags":{"desc_type":"italic"},"content":"Sipahi Automaton Cavalry often serves as infantry in the Iron Wall units to reinforce areas under severe pressure."}],"team":"faithful","stats":{"potential":0,"mercenary":false},"cut_keywords":[],"keywords":[],"cut_abilities":[],"new_abilities":[]},{"id":"md_trenchdog_guarddog","name":"Guard Dog","source":"core","tags":{"dog":true},"contextdata":{},"base_id":"md_trenchdog","variant_name":"Base","lore":[{"tags":{"desc_type":"italic"},"content":"A great many animals serve in the trenches alongside the soldiers. Wardogs are by far the most common, but tame ocelots, barbary apes, small bears, and other unusual pets abound, while the forces of Hell keep Hellhounds and other infernal beasts as pets."},{"tags":{"desc_type":"italic"},"content":"These dogs both warn their masters of impending danger and fight fiercely for their company."}],"team":"none","stats":{},"cut_keywords":[],"keywords":[],"cut_abilities":[],"new_abilities":["ab_guarddog"]},{"id":"md_trenchdog_attackdog","name":"Attack Dog","source":"westfalia","tags":{"dog":true},"contextdata":{"restriction_override":{"overrides":[{"type":"id","model":"md_trenchdog"}]}},"base_id":"md_trenchdog","variant_name":"Base","lore":[{"tags":{"desc_type":"italic"},"content":"A great many animals serve in the trenches alongside the soldiers. Wardogs are by far the most common, but tame ocelots, barbary apes, small bears, and other unusual pets abound, while the forces of Hell keep Hellhounds and other infernal beasts as pets."},{"tags":{"desc_type":"italic"},"content":"These ferocious hounds are trained by the Brigade to accompany their masters into the fray."}],"team":"none","stats":{"melee":1},"cut_keywords":[],"keywords":[],"cut_abilities":[],"new_abilities":[]},{"id":"md_trenchdog_mercydog","name":"Mercy Dog","source":"core","tags":{"dog":true},"contextdata":{"restriction_override":{"overrides":[{"type":"id","model":"md_trenchdog"}]}},"base_id":"md_trenchdog","variant_name":"Base","lore":[{"tags":{"desc_type":"italic"},"content":"A great many animals serve in the trenches alongside the soldiers. Wardogs are by far the most common, but tame ocelots, barbary apes, small bears, and other unusual pets abound, while the forces of Hell keep Hellhounds and other infernal beasts as pets."},{"tags":{"desc_type":"italic"},"content":"Mercy dogs carry a Medi-Kit."}],"team":"none","stats":{},"cut_keywords":[],"keywords":[],"cut_abilities":[],"new_abilities":["ab_mercydog"]},{"id":"md_trenchdog_martyrdomdog","name":"Martyrdom Dog","source":"core","tags":{"dog":true},"contextdata":{"mercenary_add_equipment":{},"model_equipment_restriction":{"removed":[{"category":"melee","res_type":"all","value":""},{"category":"ranged","res_type":"all","value":""},{"category":"grenade","res_type":"all","value":""},{"category":"armour","res_type":"all","value":""},{"category":"shield","res_type":"all","value":""}],"required":[{"category":"equipment","res_type":"id","value":"eq_martyrdomdevice"}]},"restriction_override":{"overrides":[{"type":"id","model":"md_trenchdog"},{"type":"id","model":"md_ecclesiasticprisoner"}]}},"base_id":"md_trenchdog","variant_name":"Base","lore":[{"tags":{"desc_type":"italic"},"content":"A great many animals serve in the trenches alongside the soldiers. Wardogs are by far the most common, but tame ocelots, barbary apes, small bears, and other unusual pets abound, while the forces of Hell keep Hellhounds and other infernal beasts as pets."},{"tags":{"desc_type":"italic"},"content":"Trench Pilgrims often enthusiastically strap their dogs with explosives so they can partake in a glorious martyrdom operation."}],"team":"none","stats":{},"cut_keywords":[],"keywords":[],"cut_abilities":[],"new_abilities":["ab_martyrdomdog"]},{"id":"md_trenchdog_hellhound","name":"Hellhound","source":"core","tags":{"dog":true},"contextdata":{"restriction_override":{"overrides":[{"type":"id","model":"md_trenchdog"}]}},"base_id":"md_trenchdog","variant_name":"Base","lore":[{"tags":{"desc_type":"italic"},"content":"A great many animals serve in the trenches alongside the soldiers. Wardogs are by far the most common, but tame ocelots, barbary apes, small bears, and other unusual pets abound, while the forces of Hell keep Hellhounds and other infernal beasts as pets."},{"tags":{"desc_type":"italic"},"content":"This horrifying infernal canine is the size of a small pony, and within its tortured belly rage flames of Hell itself. It howls in constant agony and rage in combat."}],"team":"none","stats":{"melee":1},"cut_keywords":[],"keywords":[],"cut_abilities":[],"new_abilities":["ab_hellhound"]},{"id":"md_annointedheavyinfantry_trenchghost","name":"Annointed Heavy Infantry (Trench Ghost)","source":"core","tags":{},"contextdata":{"restriction_override":{"overrides":[{"type":"id","model":"md_annointedheavyinfantry"}]}},"base_id":"md_annointedheavyinfantry","variant_name":"Trench_Ghost","lore":[{"tags":{"desc_type":"italic"},"content":"Heavily armed and armoured assault troops. Their skin is burned and blistering from their ordained pilgrimages to Hell and back."}],"description":[{"tags":{"desc_type":"default"},"content":"Anointed are always equipped with a suit of Reinforced Armour which are included in the cost. This armour can never be removed. Otherwise they can be equipped with any weapon, armour or equipment from the Heretic Legion Armoury and may purchase a Trench Shield.","glossary":[{"val":"Heretic Legion","id":"kw_heretic"}]}],"team":"hell","stats":{},"cut_keywords":[],"keywords":[],"cut_abilities":[],"new_abilities":[]},{"id":"md_heretichorister_barbedwirebanshee","name":"Barbed Wire Banshee","source":"core","tags":{},"contextdata":{"restriction_override":{"overrides":[{"type":"id","model":"md_heretichorister"}]}},"base_id":"md_heretichorister","variant_name":"Trench_Ghost","lore":[],"team":"hell","stats":{},"cut_keywords":[],"keywords":[],"cut_abilities":["ab_unholyhymns"],"new_abilities":["ab_deathwail"]},{"id":"md_hereticpriest_mammonpriest","name":"Heretic Priest of Mammon","source":"core","tags":{},"contextdata":{"restriction_override":{"overrides":[{"type":"id","model":"md_hereticpriest"}]}},"base_id":"md_hereticpriest","variant_name":"Knights_of_Avarice","lore":[],"team":"hell","stats":{},"cut_keywords":[],"keywords":[],"cut_abilities":["ab_puppetmaster"],"new_abilities":["ab_thepriceofgreed"]},{"id":"md_artillerywitch_gaswitch","name":"Artillery Witches of Mammon","source":"core","tags":{},"contextdata":{"restriction_override":{"overrides":[{"type":"id","model":"md_artillerywitch"}]}},"base_id":"md_artillerywitch","variant_name":"Knights_of_Avarice","lore":[],"team":"hell","stats":{},"cut_keywords":[],"keywords":[],"cut_abilities":[],"new_abilities":[]},{"id":"md_combatmedic_mv_pilgrim","name":"Sister of Saint Cosmas","source":"core","tags":{},"contextdata":{"keyword_ignore":{"value":["kw_fear"]},"modify_equipment_block":{},"restriction_override":{"overrides":[{"type":"id","model":"md_combatmedic"}]}},"base_id":"md_combatmedic","variant_name":"Trench_Pilgrim","team":"faithful","stats":{"potential":0,"mercenary":true},"description":[{"tags":{"desc_type":"default"},"content":"A Sister of Saint Cosmas always has Standard Armour, a Gas Mask, Medi-kit, and a Misericordia."}],"lore":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"The Sisters of Saint Cosmas are a highly trained elite medical corps specialising in battlefield first aid and surgeries on the front lines of the Great War. The Sisters take a modified Hippocratic Oath that compels them to aid any wounded soldiers of the faith, no matter how dire the circumstance, whilst showing no mercy or pity when dispatching Heretics and other enemies on the battlefield. Armed with a surgical knife that doubles as a misericordia, they are as adept at saving lives as taking them from those they find lying wounded in No Man\u2019s Land."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"They carry medical kits stocked with a variety of battlefield drugs, capable of numbing the pain of even the most ghastly wounds. In the heat of battle, these drugs are vital, giving soldiers the strength to rise once more and charge back into the fray, even if just for a few moments, so they can accomplish their mission or die trying."}]}],"cut_keywords":["kw_antioch"],"keywords":[],"cut_abilities":[],"new_abilities":[]},{"id":"md_goeticwarlock_mv_knightsofavarice","name":"Goetic Warlock","source":"core","tags":{},"contextdata":{"modify_equipment_block":{},"restriction_override":{"overrides":[{"type":"id","model":"md_goeticwarlock"}]}},"base_id":"md_goeticwarlock","variant_name":"Knights_of_Avarice","team":"hell","stats":{"potential":0,"mercenary":false},"cut_keywords":[],"keywords":[],"cut_abilities":[],"new_abilities":[]},{"id":"md_ecclesiasticprisoner_sacredaffliction","name":"Ecclesiastic Prisoner (Sacred Affliction)","source":"core","tags":{},"contextdata":{"restriction_override":{"overrides":[{"type":"id","model":"md_ecclesiasticprisoner"}]}},"base_id":"md_ecclesiasticprisoner","variant_name":"Procession_of_the_Sacred_Affliction","team":"faithful","cut_keywords":[],"keywords":[],"stats":{},"cut_abilities":[],"new_abilities":[]},{"id":"md_warprophet_tenthplague","name":"War Prophet (Cavalcade of the Tenth Plague)","source":"core","tags":{},"contextdata":{"restriction_override":{"overrides":[{"type":"id","model":"md_warprophet"}]}},"base_id":"md_warprophet","variant_name":"Cavalcade_of_the_Tenth_Plague","team":"faithful","cut_keywords":[],"keywords":[],"stats":{},"cut_abilities":["ab_layingonhands"],"new_abilities":["ab_dayofhiswrath"]},{"id":"md_anchoriteshrine_saintmethodius","name":"Anchorite Shrine (War Pilgrimage of Saint Methodius)","source":"core","tags":{},"contextdata":{"model_equipment_restriction":{"required":[{"category":"melee","res_type":"tag","value":"methodius"},{"category":"ranged","res_type":"tag","value":"methodius"},{"category":"grenade","res_type":"tag","value":"methodius"},{"category":"armour","res_type":"tag","value":"methodius"},{"category":"shield","res_type":"tag","value":"methodius"},{"category":"equipment","res_type":"tag","value":"methodius"}]},"model_equipment_limit":{"maximum":[{"tag":"weapon","res_type":"tag","value":"methodius","limit":1},{"category":"equipment","res_type":"tag","value":"methodius","limit":2}]},"restriction_override":{"overrides":[{"type":"id","model":"md_anchoriteshrine"}]}},"description":[{"tags":{"desc_type":"default"},"content":"You can only buy two pieces of equipment made for Shrine Anchorites. Each Anchorite is equipped with a special suit of armour (reflected in the profile), a Combat Helmet, and a Bonebreaker Mace. These pieces of equipment are built into the integrity of its construction and cannot be removed or lost in any way. The shrine is also equipped with a Catherine Wheel, which you may swap out for another of its special Anchorite Weapons. The Anchorite may make one attack ACTION with each of these weapons and may make no other attacks during its Activation (so if holding the Catherine Wheel it attack in melee with the Wheel and its Mace, at range it can attack with its sole ranged weapon if equipped)."}],"base_id":"md_anchoriteshrine","variant_name":"War_Pilgrimage_of_Saint_Methodius","team":"faithful","cut_keywords":[],"keywords":[],"stats":{"ranged":0},"cut_abilities":["ab_brokenonthewheel"],"new_abilities":[]},{"id":"md_stigmaticnun_saintmethodius","name":"Stigmatic Nun (War Pilgrimage of Saint Methodius)","source":"core","tags":{},"contextdata":{"restriction_override":{"overrides":[{"type":"id","model":"md_stigmaticnun"}]},"validate_final_unit_equipment":{"requirements":[{"tag":"armour","value":true}]}},"base_id":"md_stigmaticnun","variant_name":"War_Pilgrimage_of_Saint_Methodius","team":"faithful","cut_keywords":[],"keywords":[],"stats":{},"cut_abilities":[],"new_abilities":[]},{"id":"md_trenchcleric_lector","name":"Lector","source":"core","tags":{},"contextdata":{"restriction_override":{"overrides":[{"type":"id","model":"md_trenchcleric"}]}},"base_id":"md_trenchcleric","variant_name":"Papal_States_Intervention_Force","team":"faithful","cut_keywords":[],"keywords":["kw_leader"],"stats":{},"cut_abilities":[],"new_abilities":["ab_onwardschristiansoldiers","ab_ariseandbehealed","ab_godiswithus"]},{"id":"md_trenchcleric_erie","name":"Eire Warrior Priest","source":"core","tags":{},"contextdata":{"restriction_override":{"overrides":[{"type":"id","model":"md_trenchcleric"}]}},"base_id":"md_trenchcleric","variant_name":"Eire_Rangers","team":"faithful","cut_keywords":[],"keywords":[],"stats":{},"cut_abilities":["ab_onwardschristiansoldiers"],"new_abilities":["ab_ariseandbehealed","ab_awayserpents"]},{"id":"md_trenchcleric_ethiopia","name":"Holy Warrior","source":"core","tags":{},"contextdata":{"restriction_override":{"overrides":[{"type":"id","model":"md_trenchcleric"}]}},"base_id":"md_trenchcleric","variant_name":"Expeditionary_Forced_of_Abyssinia","team":"faithful","cut_keywords":[],"keywords":[],"stats":{},"cut_abilities":[],"new_abilities":["ab_blessedpalm","ab_ariseandbehealed"]},{"id":"md_lieutenant_eire","name":"Eire Lieutenant","source":"core","tags":{},"contextdata":{"restriction_override":{"overrides":[{"type":"id","model":"md_lieutenant"}]}},"base_id":"md_lieutenant","variant_name":"Eire_Rangers","team":"faithful","cut_keywords":[],"keywords":["kw_skirmisher"],"stats":{},"cut_abilities":["ab_holdyourfire"],"new_abilities":[]},{"id":"md_lieutenant_alba","name":"Highland Lieutenant","source":"core","tags":{},"contextdata":{"restriction_override":{"overrides":[{"type":"id","model":"md_lieutenant"}]}},"base_id":"md_lieutenant","variant_name":"Alba","team":"faithful","cut_keywords":[],"keywords":["kw_strong"],"stats":{},"cut_abilities":[],"new_abilities":[]},{"id":"md_shocktrooper_alba","name":"Highland Shocktrooper","source":"core","tags":{},"contextdata":{"restriction_override":{"overrides":[{"type":"id","model":"md_shocktrooper"}]}},"base_id":"md_shocktrooper","variant_name":"Alba","team":"faithful","cut_keywords":[],"keywords":["kw_strong"],"stats":{},"cut_abilities":[],"new_abilities":[]},{"id":"md_mechanisedheavyinfantry_alba","name":"Highland Mechanized Infantry","source":"core","tags":{},"contextdata":{"restriction_override":{"overrides":[{"type":"id","model":"md_mechanisedheavyinfantry"}]}},"base_id":"md_mechanisedheavyinfantry","variant_name":"Alba","team":"faithful","cut_keywords":[],"keywords":[],"stats":{"ranged":0,"melee":1},"cut_abilities":[],"new_abilities":[]},{"id":"md_mechanisedheavyinfantry_abyssianna","name":"Abyssinian Mechanized Infantry","source":"core","tags":{},"contextdata":{"restriction_override":{"overrides":[{"type":"id","model":"md_mechanisedheavyinfantry"}]}},"base_id":"md_mechanisedheavyinfantry","variant_name":"Expeditionary_Forced_of_Abyssinia","team":"faithful","cut_keywords":[],"keywords":[],"description":[{"tags":{"desc_type":"default"},"content":"Abyssinian Heavy Infantry always wear Light Machine Armour which counts as Reinforced Armour (32mm Base). This is reflected in the cost and profile above. They can be equipped with any weapon, armour and equipment from the New Antioch Armoury.","glossary":[{"val":"New Antioch","id":"kw_antioch"}]}],"stats":{"ranged":1,"melee":0},"cut_abilities":[],"new_abilities":[]},{"id":"md_grailthrall_flythrall","name":"Fly Thrall","source":"core","tags":{},"contextdata":{"restriction_override":{"overrides":[{"type":"id","model":"md_grailthrall"}]}},"base_id":"md_grailthrall","variant_name":"Base","team":"hell","cut_keywords":[],"keywords":["kw_flying"],"stats":{"movement":6,"movetype":1},"cut_abilities":["ab_undeadfortitude"],"new_abilities":[]},{"id":"md_grailthrall_flybereaved","name":"Fly Bereaved","source":"core","tags":{},"contextdata":{"restriction_override":{"overrides":[{"type":"id","model":"md_grailthrall"}]},"model_equipment_restriction":{"removed":[{"category":"melee","res_type":"all","value":""},{"category":"armour","res_type":"all","value":""},{"category":"shield","res_type":"all","value":""}],"required":[{"category":"equipment","res_type":"id","value":"eq_musicalinstrument"},{"category":"equipment","res_type":"id","value":"eq_troopflag"}],"added":[{"category":"ranged","res_type":"all","value":""},{"category":"grenade","res_type":"all","value":""}]}},"base_id":"md_grailthrall","variant_name":"Dirge_of_the_Great_Hegemon","team":"hell","cut_keywords":[],"keywords":[],"stats":{"movement":6,"movetype":1},"cut_abilities":["ab_undeadfortitude"],"new_abilities":[]},{"id":"md_grailthrall_bereaved","name":"Bereaved","source":"core","tags":{},"contextdata":{"restriction_override":{"overrides":[{"type":"id","model":"md_grailthrall"}]},"model_equipment_restriction":{"removed":[{"category":"melee","res_type":"all","value":""},{"category":"armour","res_type":"all","value":""},{"category":"shield","res_type":"all","value":""}],"required":[{"category":"equipment","res_type":"id","value":"eq_musicalinstrument"},{"category":"equipment","res_type":"id","value":"eq_troopflag"}],"added":[{"category":"ranged","res_type":"all","value":""},{"category":"grenade","res_type":"all","value":""}]}},"base_id":"md_grailthrall","variant_name":"Dirge_of_the_Great_Hegemon","team":"hell","description":[{"tags":{"desc_type":"paragraph"},"content":"Thralls can be equipped with ranged weapons, troop flags, or instruments, but nothing else. They do not suffer penalties for fighting unarmed."}],"cut_keywords":[],"keywords":[],"stats":{"ranged":0},"cut_abilities":[],"new_abilities":[]},{"id":"md_plagueknight_executor","name":"Executor","source":"core","tags":{},"contextdata":{"restriction_override":{"overrides":[{"type":"id","model":"md_plagueknight"}]}},"base_id":"md_plagueknight","variant_name":"Dirge_of_the_Great_Hegemon","team":"hell","cut_keywords":[],"keywords":["kw_tough","kw_leader"],"stats":{"ranged":1},"cut_abilities":[],"new_abilities":[]},{"id":"md_wretched_court","name":"Wretched","source":"core","tags":{},"contextdata":{"validate_final_unit_equipment":{"requirements":[{"tag":"weapon","value":true}]},"restriction_override":{"overrides":[{"type":"id","model":"md_wretched"}]}},"base_id":"md_wretched","variant_name":"Court_Of_The_Seven_Headed_Serpent","team":"hell","lore":[{"tags":{"desc_type":"italic"},"content":"These unfortunate souls possess not a drop of demon blood. They act as disposable shock troops or are used as subjects of torture to power the Goetic magic of the sorcerers and other users of the dark arts. Should a Wretched bring down a mighty opponent, the Law of Hell is clear, the mortal will gain its freedom, in memory and honour of the First Rebellion when there was war in Heaven and blood of the angels painted the firmament red."}],"description":[{"tags":{"desc_type":"default"},"content":"Wretched can have any Battlekit from The Court\'s Armoury Tables that costs up to 10 \ud83d\udc51. A Wretched must have at least 1 Weapon (they cannot be sent into battle completely unarmed).","glossary":[{"val":"Court","id":"kw_thecourt"}]}],"cut_keywords":["kw_heretic"],"keywords":["kw_thecourt"],"stats":{},"cut_abilities":["ab_darkblessing","ab_chattel"],"new_abilities":[]},{"id":"md_yeoman_survivor","name":"Survivor Yeoman","source":"core","tags":{},"contextdata":{"restriction_override":{"overrides":[{"type":"id","model":"md_yeoman"}]}},"base_id":"md_yeoman","variant_name":"Common_Exploration","team":"faithful","stats":{},"cut_keywords":[],"keywords":[],"cut_abilities":[],"new_abilities":[]},{"id":"md_takwincreation_golem","name":"Golem","source":"core","tags":{},"contextdata":{"upgrade_budget_free":{"ducats":50},"upgrade_budget_max":{"ducats":50},"model_equipment_restriction":{"removed":[]},"auto_upgrade":{"items":["rel_md_up_alchemicalformulae_humanhands"]},"validate_final_unit_upgrades":{"requirements":[{"type":"ducats","value":50,"subvalue":"maximum"}]}},"description":[{"tags":{"desc_type":"default"},"content":"The golem cannot be equipped with any weapons, armour or equipment. It can fight in melee without any penalty."}],"lore":[],"base_id":"md_takwincreation","variant_name":"Rare_Exploration","team":"none","cut_keywords":["kw_sultanate"],"keywords":["kw_golem"],"stats":{"potential":2},"cut_abilities":[],"new_abilities":["ab_limitedupgrades"]},{"id":"md_heretictrooper_mine","name":"Sarcophagus Mine","source":"core","tags":{},"contextdata":{"restriction_override":{"overrides":[{"type":"id","model":"md_heretictrooper"}]}},"base_id":"md_heretictrooper","variant_name":"Sarcophagus_Mine","team":"hell","stats":{},"cut_keywords":[],"keywords":[],"cut_abilities":[],"new_abilities":[]},{"id":"md_trenchpilgrim_martyr","name":"Martyr-Penitent","source":"core","tags":{},"contextdata":{"restriction_override":{"overrides":[{"type":"id","model":"md_trenchpilgrim"}]}},"base_id":"md_trenchpilgrim","variant_name":"Martyr_Penitent","team":"faithful","stats":{},"cut_keywords":[],"keywords":[],"cut_abilities":[],"new_abilities":[]},{"id":"md_plagueknight_butcherknight","name":"Butcher Knight","source":"creature_caster","tags":{},"contextdata":{"stat_options":{"options":[[{"base":[32]},{"base":[40]}]]},"restriction_override":{"overrides":[{"type":"id","model":"md_plagueknight"}]}},"base_id":"md_plagueknight","variant_name":"The_Great_Hunger","team":"hell","stats":{},"cut_keywords":[],"keywords":[],"cut_abilities":[],"new_abilities":["ab_ravenousinfection"]},{"id":"md_grailthrall_flythrall_hunger","name":"Fly Thrall","source":"creature_caster","tags":{},"contextdata":{"stat_options":{"options":[[{"base":[32]},{"base":[25]}]]},"model_equipment_restriction":{"removed":[{"category":"melee","res_type":"all","value":""},{"category":"ranged","res_type":"all","value":""},{"category":"grenade","res_type":"all","value":""},{"category":"armour","res_type":"all","value":""},{"category":"shield","res_type":"all","value":""}],"required":[{"category":"equipment","res_type":"id","value":"eq_graspingmaw"}]},"equipment_add_keyword":{"equip_check":[{"check_type":"category","value":"melee"}],"additions":["kw_critical"]},"restriction_override":{"overrides":[{"type":"id","model":"md_grailthrall"}]}},"base_id":"md_grailthrall","variant_name":"The_Great_Hunger","description":[{"tags":{"desc_type":"paragraph"},"content":"The Ravenous can have a Grasping Maw, they cannot have any other Battlekit."}],"team":"hell","cut_keywords":[],"keywords":["kw_flying"],"stats":{"movement":6,"movetype":1,"melee":0},"cut_abilities":["ab_undeadfortitude"],"new_abilities":["ab_ravenousinfection"]},{"id":"md_grailthrall_hunger","name":"Grail Thrall","source":"creature_caster","tags":{},"contextdata":{"stat_options":{"options":[[{"base":[32]},{"base":[25]}]]},"model_equipment_restriction":{"removed":[{"category":"melee","res_type":"all","value":""},{"category":"ranged","res_type":"all","value":""},{"category":"grenade","res_type":"all","value":""},{"category":"armour","res_type":"all","value":""},{"category":"shield","res_type":"all","value":""}],"required":[{"category":"equipment","res_type":"id","value":"eq_graspingmaw"}]},"equipment_add_keyword":{"equip_check":[{"check_type":"category","value":"melee"}],"additions":["kw_critical"]},"restriction_override":{"overrides":[{"type":"id","model":"md_grailthrall"}]}},"base_id":"md_grailthrall","variant_name":"The_Great_Hunger","team":"hell","description":[{"tags":{"desc_type":"paragraph"},"content":"The Ravenous can have a Grasping Maw, they cannot have any other Battlekit."}],"cut_keywords":[],"keywords":[],"stats":{"melee":0},"cut_abilities":[],"new_abilities":["ab_ravenousinfection"]},{"id":"md_houndsoftheblackgrail_prowler","name":"Prowler","source":"creature_caster","tags":{},"contextdata":{"model_equipment_restriction":{"removed":[{"category":"melee","res_type":"all","value":""},{"category":"ranged","res_type":"all","value":""},{"category":"grenade","res_type":"all","value":""},{"category":"armour","res_type":"all","value":""},{"category":"shield","res_type":"all","value":""}],"required":[{"category":"equipment","res_type":"id","value":"eq_graspingmaw"}]},"restriction_override":{"overrides":[{"type":"id","model":"md_houndsoftheblackgrail"}]}},"base_id":"md_houndsoftheblackgrail","variant_name":"The_Great_Hunger","team":"hell","stats":{},"cut_keywords":[],"keywords":[],"cut_abilities":[],"new_abilities":[]},{"id":"md_grailthrall_flythrall_cradle_hunger","name":"Cradle Fly Thrall","source":"creature_caster","tags":{},"contextdata":{"exempt_limit":{},"stat_options":{"options":[[{"base":[32]},{"base":[25]}]]},"model_equipment_restriction":{"removed":[{"category":"melee","res_type":"all","value":""},{"category":"ranged","res_type":"all","value":""},{"category":"grenade","res_type":"all","value":""},{"category":"armour","res_type":"all","value":""},{"category":"shield","res_type":"all","value":""}],"required":[{"category":"equipment","res_type":"id","value":"eq_graspingmaw"}]},"equipment_add_keyword":{"equip_check":[{"check_type":"category","value":"melee"}],"additions":["kw_critical"]},"restriction_override":{"overrides":[{"type":"id","model":"md_grailthrall"}]}},"base_id":"md_grailthrall","variant_name":"The_Great_Hunger","team":"hell","description":[{"tags":{"desc_type":"paragraph"},"content":"The Ravenous can have a Grasping Maw, they cannot have any other Battlekit."}],"cut_keywords":[],"keywords":["kw_infiltrator","kw_flying"],"stats":{"movement":6,"movetype":1,"melee":0},"cut_abilities":["ab_undeadfortitude"],"new_abilities":["ab_ravenousinfection"]},{"id":"md_grailthrall_cradle_hunger","name":"Cradle Thrall","source":"creature_caster","tags":{},"contextdata":{"exempt_limit":{},"stat_options":{"options":[[{"base":[32]},{"base":[25]}]]},"model_equipment_restriction":{"removed":[{"category":"melee","res_type":"all","value":""},{"category":"ranged","res_type":"all","value":""},{"category":"grenade","res_type":"all","value":""},{"category":"armour","res_type":"all","value":""},{"category":"shield","res_type":"all","value":""}],"required":[{"category":"equipment","res_type":"id","value":"eq_graspingmaw"}]},"equipment_add_keyword":{"equip_check":[{"check_type":"category","value":"melee"}],"additions":["kw_critical"]},"restriction_override":{"overrides":[{"type":"id","model":"md_grailthrall"}]}},"base_id":"md_grailthrall","variant_name":"The_Great_Hunger","team":"hell","description":[{"tags":{"desc_type":"paragraph"},"content":"The Ravenous can have a Grasping Maw, they cannot have any other Battlekit."}],"cut_keywords":[],"keywords":["kw_infiltrator"],"stats":{"melee":0},"cut_abilities":[],"new_abilities":["ab_ravenousinfection"]},{"id":"md_corpseguard_husk","name":"Dessicated Husk","source":"creature_caster","tags":{},"contextdata":{"equipment_add_keyword":{"equip_check":[{"check_type":"category","value":"melee"}],"additions":["kw_critical"]},"restriction_override":{"overrides":[{"type":"id","model":"md_corpseguard"}]}},"base_id":"md_corpseguard","variant_name":"The_Great_Hunger","team":"hell","stats":{"melee":2},"cut_keywords":[],"keywords":[],"cut_abilities":["ab_bodyguard_blackgrail"],"new_abilities":[]}]'),m=JSON.parse('[{"id":"up_skirmisher","name":"Skirmisher","source":"core","tags":{"trait":true},"contextdata":{"keyword_mod":{"mods":[{"type":"add","value":"kw_skirmisher"}]}},"description":[{"tags":{"desc_type":"default"},"content":"The model is converted to a SKIRMISHER. Unless engaged in melee, when an enemy model declares a charge against any SKIRMISHER, they can immediately move D3\u201d in any direction they wish (except within 1\u201d of any enemy or out of the battlefield). After this manoeuvre, the charging model is moved as normal. This may lead to the charger being unable to enter melee. This move cannot be taken by a model that is Down.","glossary":[{"val":"SKIRMISHER","id":"kw_skirmisher"}]}],"options":[]},{"id":"up_infiltrator","name":"Infiltrator","source":"core","tags":{"trait":true},"contextdata":{"keyword_mod":{"mods":[{"type":"add","value":"kw_infiltrator"}]}},"description":[{"tags":{"desc_type":"default"},"content":"The model is converted to an INFILTRATOR. The model can be placed anywhere on the table out of line of sight of any enemies, but at least 8\u201d away from the closest enemy. Deployed after all other models without the Keyword INFILTRATOR.","glossary":[{"val":"INFILTRATOR","id":"kw_infiltrator"}]}],"options":[]},{"id":"up_meleemight","name":"Kavass","source":"core","tags":{"trait":true,"modifier":true},"contextdata":{"upgrade_stat":{"upgrades":[{"stat":"melee","value":1}]}},"description":[{"tags":{"desc_type":"default"},"content":"The model increases their Melee characteristic by +1 DICE.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"}]}],"options":[]},{"id":"up_fierceandbrave","name":"Fierce and Brave","source":"core","tags":{"trait":true},"contextdata":{"keyword_mod":{"mods":[{"type":"add","value":"kw_fear"}]}},"description":[{"tags":{"desc_type":"default"},"content":"The model gains the FEAR keyword.","glossary":[{"val":"FEAR","id":"kw_fear"}]}],"options":[]},{"id":"up_swissguard","name":"Swiss Guard","source":"core","tags":{"trait":true},"contextdata":{"keyword_ignore":{"value":["kw_fear"]}},"description":[{"tags":{"desc_type":"default"},"content":"The model has the NEGATE FEAR keyword.","glossary":[{"val":"NEGATE FEAR","id":"kw_negate_kw_fear"}]}],"options":[]},{"id":"up_hallucinogendisguise","name":"Hallucinogen Disguise","source":"core","tags":{"trait":true,"special_category":"art_of_assassination"},"contextdata":{"infiltrator_scenario":{}},"description":[{"tags":{"desc_type":"default"},"content":"If this Assassin is deployed using the INFILTRATOR Keyword, it must be deployed at least 8\\" away from any enemy models but you may ignore any and all other restrictions that apply to deploying an INFILTRATOR. For example, the model can be deployed in the Line of Sight of an enemy model, enemy Guard Dogs do not affect how it is deployed, and so on.","glossary":[{"val":"INFILTRATOR","id":"kw_infiltrator"}]}],"options":[]},{"id":"up_thunderboltofalamut","name":"Thunderbolt of Alamut","source":"core","tags":{"trait":true,"special_category":"art_of_assassination"},"contextdata":{"upgrade_stat":{"upgrades":[{"stat":"movement","value":2}]}},"description":[{"tags":{"desc_type":"default"},"content":"Add 2\\" to this Assassin\u2019s Movement Characteristic, and add +1 DICE to the Risky Success Roll when this Assassin takes a Dash ACTION.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"+1 DICE","id":"kw_plusdice"},{"val":"Risky Success","id":"kw_riskyaction"}]}],"options":[]},{"id":"up_mirageoftime","name":"Mirage of Time","source":"core","tags":{"trait":true,"special_category":"art_of_assassination"},"contextdata":{"self_defense_hit":{"type":"dice","val":-1}},"description":[{"tags":{"desc_type":"default"},"content":"Add -1 DICE to the Success Roll for attacks that target this Assassin.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"}]}],"options":[]},{"id":"up_secretpaths","name":"Secret Paths","source":"core","tags":{"trait":true,"special_category":"art_of_assassination"},"contextdata":{"self_defense_hit":{"type":"dice","val":-1}},"description":[{"tags":{"desc_type":"default"},"content":"At the start of the game, before deployment, you can say that this Assassin is using Secret Paths. If you do so, the Assassin is not deployed at the start of the game, and cannot be Activated in the first Turn of the game. Starting from the second Turn, you can Activate the Assassin using the Secret Paths. To do so, deploy the Assassin in contact with any edge of the battlefield and more than 8\u201d away from all enemy models. You can then carry on with the rest of its Activation normally"}],"options":[]},{"id":"up_alchemicalformulae_wings","name":"Wings","source":"core","tags":{"trait":true,"takwin":true},"contextdata":{"keyword_add":{"value":["kw_flying"]}},"description":[{"tags":{"desc_type":"default"},"content":"Change this Takwin Homunculus\u2019s Movement Characteristic to 8\\"/Flying. A Homunculus cannot have the Wings Alchemical Formula if it has the Massive Size Alchemical Formula."}],"options":[]},{"id":"up_alchemicalformulae_elementalresistance","name":"Elemental Resistance","source":"core","tags":{"trait":true,"takwin":true},"contextdata":{"ignore_element":{"element":["kw_fire","kw_gas"]}},"description":[{"tags":{"desc_type":"default"},"content":"Give this Takwin Homunculus the NEGATE FIRE and NEGATE GAS Keywords. In addition, add -1 INJURY DICE to Injury Rolls for attacks with the FIRE or GAS Keywords that target this Takwin Homunculus.","glossary":[{"val":"-1 INJURY DICE","id":"kw_injurydice"},{"val":"NEGATE GAS","id":"kw_negate_kw_gas"},{"val":"NEGATE FIRE","id":"kw_negate_kw_fire"}]}],"options":[]},{"id":"up_alchemicalformulae_massive_size","name":"Massive Size","source":"core","tags":{"trait":true,"takwin":true},"contextdata":{"set_stat":{"upgrades":[{"stat":"base","value":[50]}]},"keyword_add":{"value":["kw_tough"]}},"description":[{"tags":{"desc_type":"default"},"content":"The Homunculus\u2019 size is increased into vast proportions. Give this Takwin Homunculus the TOUGH Keyword and increase its base size to 50mm. A Homunculus cannot have the Massive Size Alchemical Formula if it has the Wings Alchemical Formula.","glossary":[{"val":"TOUGH","id":"kw_tough"}]}],"options":[]},{"id":"up_alchemicalformulae_enslavedmind","name":"Enslaved Mind","source":"core","tags":{"trait":true,"takwin":true},"contextdata":{"add_fireteam_model":{"type":"ft_model","count":1,"exclusive":true}},"description":[{"tags":{"desc_type":"default"},"content":"Give this Takwin Homunculus and one other model in your Warband the FIRETEAM Keyword. The other model can only form a Fireteam with this Homunculus.","glossary":[{"val":"FIRETEAM","id":"kw_fireteam"}]}],"options":[]},{"id":"up_alchemicalformulae_humanhands","name":"Human Hands","source":"core","tags":{"trait":true,"takwin":true},"contextdata":{"model_equipment_restriction":{"added":[{"category":"melee","res_type":"all","value":""},{"category":"ranged","res_type":"all","value":""},{"res_type":"id","value":"eq_trenchshield"},{"res_type":"id","value":"eq_fireshield"}]}},"description":[{"tags":{"desc_type":"paragraph"},"content":"This Takwin Homunculus can have Ranged and Melee Weapons from the Iron Sultanate Armoury. It can also have a Trench Shield or a Fire Shield. A Homunculus cannot have the Human Hands Alchemical Formula if it has the Wings Alchemical Formula. It cannot use its Pummelling Blows ability if it is armed with any Melee Weapons."},{"tags":{"desc_type":"paragraph"},"content":"If a Takwin Homunculus with Human hands also has an Additional Arm, then it can have three 1-Handed Melee Weapons or one 1-Handed Melee Weapon and one 2-Handed Melee Weapon, and it can have three 1-Handed Ranged Weapons or one 1-Handed Ranged Weapon and one 2-Handed Ranged Weapon. If it takes a Shield, then the Shield replaces one of the Melee Weapons it can have but the Shield Combo rule cannot be used for any of its weapons. In addition, when it takes a Fight ACTION it can make 1 Melee Attack with each Melee Weapon that it has, one after the other. If it makes more than 1 attack, the Off-Hand Melee Modifier applies to the last Melee Attack that it makes. When it takes a Shoot ACTION it can make 1 Ranged Attack with up to two Ranged Weapons that it has, one after the other.","glossary":[{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"up_alchemicalformulae_inhumanstrength","name":"Inhuman Strength","source":"core","tags":{"trait":true,"takwin":true},"contextdata":{"set_stat":{"upgrades":[{"stat":"base","value":[32]}]},"upgrade_stat":{"upgrades":[{"stat":"melee","value":1}]},"keyword_add":{"value":["kw_strong"]}},"description":[{"tags":{"desc_type":"default"},"content":"The musculature of the Homunculus is reinforced, replaced and strengthened. Give this Takwin Homunculus the STRONG Keyword, change its Melee Characteristic to +1 DICE, and increase its base size to 32mm.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"},{"val":"STRONG","id":"kw_strong"}]}],"options":[]},{"id":"up_alchemicalformulae_terrifyingappearance","name":"Terrifying Appearance","source":"core","tags":{"trait":true,"takwin":true},"contextdata":{"keyword_add":{"value":["kw_fear"]}},"description":[{"tags":{"desc_type":"default"},"content":"The formula bestows an alluring beauty or horrifying visage upon the Homunculus. Give this Takwin Homunculus FEAR Keyword.","glossary":[{"val":"FEAR","id":"kw_fear"}]}],"options":[]},{"id":"up_alchemicalformulae_additionalarm","name":"Additional Arm","source":"core","tags":{"trait":true,"takwin":true},"contextdata":{"equipment_add_keyword":{"equip_check":[{"check_type":"id","value":"eq_unarmed_nopenalty"}],"special_additions":[{"base":"kw_cleave","value":2}]},"add_arms":{"ranged":1,"melee":1}},"description":[{"tags":{"desc_type":"default"},"content":"This Takwin Homunculus adds the CLEAVE 2 Keyword to attacks made with its Pummelling Blows Ability.","glossary":[{"val":"CLEAVE 2","id":"kw_cleave"}]}],"options":[]},{"id":"up_alchemicalformulae_twoheads","name":"Two Heads","source":"core","tags":{"trait":true,"takwin":true},"contextdata":{"override_upgrade_restriction":{"id":["rel_md_up_alchemicalformulae_hawkeyes","rel_md_up_alchemicalformulae_hypnoticeyes"]}},"description":[{"tags":{"desc_type":"default"},"content":"This Takwin Homunculus can have both the Hawk Eyes and Hypnotic Eyes Alchemical Formulas."}],"options":[]},{"id":"up_alchemicalformulae_hypnoticeyes","name":"Hypnotic Eyes","source":"core","tags":{"trait":true,"takwin":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add -1 DICE to Success Rolls for Melee Attacks that target this Takwin Homunculus, unless the attack is made by a Sniper Priest or a model with the BLACK GRAIL Keyword. A Homunculus cannot have the Hypnotic Eyes Alchemical Formula if it has the Hawk Eyes Alchemical Formula unless it also has the Two Heads Alchemical Formula.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"},{"val":"BLACK GRAIL","id":"kw_blackgrail"}]}],"options":[]},{"id":"up_alchemicalformulae_hawkeyes","name":"Hawk Eyes","source":"core","tags":{"trait":true,"takwin":true},"contextdata":{"upgrade_stat":{"upgrades":[{"stat":"ranged","value":1}]}},"description":[{"tags":{"desc_type":"default"},"content":"The eyesight of the Homunculus is based on that of a predatory bird. Change the Ranged Characteristic of this Takwin Homunculus to +1 DICE. A Homunculus cannot have the Hawk Eyes Alchemical Formula if it has the Hypnotic Eyes Alchemical Formula unless it also has the Two Heads Alchemical Formula.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"}]}],"options":[]},{"id":"up_alchemicalformulae_startlingspeed","name":"Startling Speed","source":"core","tags":{"trait":true,"takwin":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add +1 DICE to the Risky Success Roll for this Takwin Homunculus when it takes a Dash ACTION","glossary":[{"val":"+1 DICE","id":"kw_plusdice"},{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"up_alchemicalformulae_sealofsolomon","name":"Seal of Solomon","source":"core","tags":{"trait":true,"takwin":true},"contextdata":{"model_equipment_restriction":{"added":[{"category":"equipment","res_type":"all","value":""}],"banned":[{"category":"equipment","res_type":"id","value":"eq_exlixerofalkhidr"}]}},"description":[{"tags":{"desc_type":"default"},"content":"This Formula greatly enhances the intelligence of the Homunculus and makes it painfully aware of its artificial existence. This Takwin Homunculus can have Equipment from the Iron Sultanate Armoury"}],"options":[]},{"id":"up_alchemicalformulae_gargantuansize","name":"Gargantuan Size","source":"core","tags":{"trait":true,"takwin":true},"contextdata":{"set_stat":{"upgrades":[{"stat":"base","value":[60]}]},"restriction_override":{"overrides":[{"type":"id","model":"md_brazenbull"}]},"model_equipment_limit":{"maximum":[{"tag":"brazen_bull","res_type":"tag","value":"brazen_bull","limit":1}]}},"description":[{"tags":{"desc_type":"default"},"content":"A Takwin Homunculus can only have this Alchemical Formula if it already has the Human Hands, Inhuman Strength, and Massive Size Alchemical Formulas. The Homunculus can use 1 Weapon that can usually only be taken by a Brazen Bull, and its base size is increased to 60mm."}],"options":[]},{"id":"up_alchemicalformulae_regenerativetissue","name":"Regenerative Tissue","source":"core","tags":{"trait":true,"takwin":true},"contextdata":{"regenerate_mod":{"value":1}},"description":[{"tags":{"desc_type":"default"},"content":"This Takwin Homunculus gains the REGENERATE 1 Keyword.","glossary":[{"val":"REGENERATE","id":"kw_regenerate"}]}],"options":[]},{"id":"up_secrets_medicine","name":"Medicine","source":"core","tags":{"action":true,"special_category":"secrets_of_the_house_of_wisdom"},"contextdata":{"model_equipment_restriction":{"removed":[{"res_type":"id","value":"eq_medikit"}]}},"description":[{"tags":{"desc_type":"paragraph"},"content":"This Alchemist is a student of Ibn Sina\u2019s School of Medicine. This Alchemist cannot have a Medi-kit. Instead, when you Activate this Alchemist it can take a School of Medicine ACTION as part of the Activation. If it does so, take a Success Roll for the Alchemist and add +1 DICE to the roll. If the roll is a Failure, nothing happens. If it is a Success or a Critical Success, you can do one of the following things:","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"+1 DICE","id":"kw_plusdice"}]},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Remove 2 BLOOD MARKERS or 1 INFECTION MARKER from the Alchemist or a friendly model within 1\\" of the Alchemist.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"},{"val":"INFECTION MARKER","id":"kw_infectionmarker"}]},{"tags":{"desc_type":"default"},"content":"Stand up a friendly model that is Down and which is within 1\\" of the Alchemist."}]}],"options":[]},{"id":"up_secrets_cartographyandgeography","name":"Cartography and Geography","source":"core","tags":{"trait":true,"special_category":"secrets_of_the_house_of_wisdom"},"contextdata":{"warband_general_hook":{},"warband_wide":{},"add_onto_warband":{},"model_attatch":{"apply_to_attatch":{"keyword_add":{"value":["kw_infiltrator"]}},"restriction":[{"rest_type":"stat","value":"base","subvalue":[32],"direction":false}]}},"description":[{"tags":{"desc_type":"default"},"content":"The Alchemist has studied long and hard the sciences of cartography and Geometry. At the start of the game, before deployment, you can pick up to 2 models in the Warband that are mounted on a base of 32mm or less, giving them the INFILTRATOR Keyword for that game.","glossary":[{"val":"INFILTRATOR","id":"kw_infiltrator"}]}],"options":[{"ref_id":"ot_cartographyandgeography_a","name":"","description":[],"category":"contextobject","self_ask":true,"option_context":{"basic_option_default":{}},"dyna_only":true,"hide":true,"parent_level":1,"question_name":"getMemberOptionsFromWarbandModel"},{"ref_id":"ot_cartographyandgeography_b","name":"","description":[],"category":"contextobject","self_ask":true,"option_context":{"basic_option_default":{}},"dyna_only":true,"hide":true,"parent_level":1,"question_name":"getMemberOptionsFromWarbandModel"}]},{"id":"up_secrets_secretsoftakwin","name":"Secrets of Takwin","source":"core","tags":{"trait":true,"special_category":"secrets_of_the_house_of_wisdom"},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"The Alchemist has bound their Takwin creature to themselves with unbreakable bonds. If this Alchemist is hit by an attack while within 1\\" of their Takwin Homunculus, you can apply the hit to the Homunculus and make the Injury Roll for it instead of the Alchemist."}],"options":[]},{"id":"up_secrets_chemistryandalchemy","name":"Chemistry and Alchemy","source":"core","tags":{"trait":true,"special_category":"secrets_of_the_house_of_wisdom"},"contextdata":{"warband_wide":{}},"description":[{"tags":{"desc_type":"default"},"content":"At the start of the first Turn of the game, before any models have been Activated, you can set up an Elemental Obstacle terrain piece that is up to 2\u201d wide and 6\u201d long anywhere on the battlefield. It must be set up more than 1\u201d away from any other terrain pieces and more than 6\u201d from any models. The Elemental Obstacle has the DIFFICULT TERRAIN and DANGEROUS TERRAIN (X) Keywords. After setting it up, you must say if X is the FIRE, GAS, or SHRAPNEL Keyword.","glossary":[{"val":"FIRE","id":"kw_fire"},{"val":"GAS","id":"kw_gas"},{"val":"DIFFICULT TERRAIN","id":"kw_difficultterrain"},{"val":"DANGEROUS TERRAIN (X)","id":"kw_dangerousterrain"},{"val":"SHRAPNEL","id":"kw_shrapnel"}]}],"options":[]},{"id":"up_secrets_philosophypoetrytheology","name":"Philosophy Poetry and Theology","source":"core","tags":{"trait":true,"special_category":"secrets_of_the_house_of_wisdom"},"contextdata":{"keyword_ignore":{"value":["kw_fear"]}},"description":[{"tags":{"desc_type":"default"},"content":"The Alchemist is well-versed in the hidden truths of the Universe and of the Divine and has a calm and clear mind. Add +1 DICE to Morale Check Success Rolls for this Alchemist\u2019s Warband, as long as the Alchemist is not Down or Out of Action. In addition, if this Alchemist\u2019s Warband becomes Shaken, ignore the requirement that all Success Rolls become Risky Success Rolls (however you still need to see if the Warband flees in the following Turn\u2019s Morale Phase).  The Alchemist has the NEGATE FEAR Keyword.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"},{"val":"Risky Success","id":"kw_riskyaction"},{"val":"NEGATE FEAR","id":"kw_negate_kw_fear"}]}],"options":[]},{"id":"up_trenchdog_fireteam","name":"Loyal Dog","source":"core","tags":{"trait":true},"contextdata":{"add_fireteam_model":{"type":"ft_model","count":1}},"description":[{"tags":{"desc_type":"default"},"content":"The dog gains an ability to form a FIRETEAM with any 1 model in your Warband.","glossary":[{"val":"FIRETEAM","id":"kw_fireteam"}]}],"options":[]},{"id":"up_heretictrooper_hereticlegionnaire","name":"Heretic Legionnaire","source":"core","tags":{"trait":true},"contextdata":{"new_upgrade":{}},"description":[{"tags":{"desc_type":"default"},"content":"Up to half of your Troopers can pick this upgrade. The Trooper becomes a Legionnaire and chooses to gain +1 DICE for either ranged or melee attacks.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"}]}],"options":[{"ref_id":"ot_legionnaire","name":"Legionnaire Training","description":[],"category":"type","type":"text","strictness":"strict","predefined_options":[],"option_context":{"basic_option_default":{}},"data_search":{"searchtype":"complex","searchparam":{"type":"upgrade","request":{"operator":"and","terms":[{"item":"tags","value":"heretictrooper","equals":true,"strict":true,"istag":true,"tagvalue":""}],"subparams":[]}}}}]},{"id":"up_heretictrooper_hereticlegionnaire_ranged","name":"Ranged Legionnaire","source":"core","tags":{"trait":true,"heretictrooper":true},"contextdata":{"upgrade_stat":{"upgrades":[{"stat":"ranged","value":1}]}},"description":[{"tags":{"desc_type":"default"},"content":"The Trooper becomes a Legionnaire with +1 DICE to ranged attacks.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"}]}],"options":[]},{"id":"up_heretictrooper_hereticlegionnaire_Melee","name":"Melee Legionnaire","source":"core","tags":{"trait":true,"heretictrooper":true},"contextdata":{"upgrade_stat":{"upgrades":[{"stat":"melee","value":1}]}},"description":[{"tags":{"desc_type":"default"},"content":"The Trooper becomes a Legionnaire with +1 DICE to melee attacks.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"}]}],"options":[]},{"id":"up_trenchghost_sarcophagusmine","name":"Sarcophagus Mine","source":"core","tags":{"action":true},"contextdata":{"activated":{},"replace_model":{"new_id":"md_heretictrooper_mine"},"change_model_equipment":{"added":["rel_md_eq_sarcophagusmine"]},"stash_equipment":{}},"description":[{"tags":{"desc_type":"paragraph"},"content":"Heretic Troopers can be encased in suits of thick armour that have been filled with explosives, which can be triggered by the Trooper when the enemy draws close."}],"options":[]},{"id":"up_zealotstrength","name":"Zealot Strength","source":"core","tags":{"trait":true},"contextdata":{"keyword_add":{"value":["kw_strong"]},"set_stat":{"upgrades":[{"stat":"base","value":[32]}]}},"description":[{"tags":{"desc_type":"default"},"content":"The model may have the Keyword STRONG. In addition, change the base size of the model to 32mm.","glossary":[{"val":"STRONG","id":"kw_strong"}]}],"options":[]},{"id":"up_resurrection","name":"Martyr Penitent Ressurection","source":"core","tags":{"trait":true},"contextdata":{"replace_model":{"new_id":"md_trenchpilgrim_martyr","new_price":45,"self_discount":true},"upgrade_stat":{"upgrades":[{"stat":"melee","value":1}]},"reset_scar":{},"reset_skill":{},"model_equipment_restriction":{"removed":[{"category":"equipment","res_type":"id","value":"eq_martyrdompills"}]}},"description":[{"tags":{"desc_type":"default"},"content":"If a Trench Pilgrim is killed after a game, they can be resurrected in the following Quartermaster Step as a Martyr Penitent with the Martyr Penitent Profile for a cost 45 \ud83d\udc51. Add -1 INJURY DICE to Injury Rolls for a Martyr Penitent. A Martyr Penitent keeps their Battlekit and Zealot Strength if the ability was purchased, but loses any Scars, Experience, and Advancements. Martyrdom Pills have no effect on a Martyr Penitent model. A Martyr Penitent has a Melee Characteristic of +1D","glossary":[{"val":"-1 INJURY DICE","id":"kw_injurydice"},{"val":"+1 DICE","id":"kw_plusdice"}]}],"options":[]},{"id":"up_wrathofgod","name":"Wrath of God","source":"core","tags":{"trait":true},"contextdata":{"set_stat":{"upgrades":[{"stat":"base","value":[32]}]},"keyword_ignore":{"value":["kw_fear"]},"model_equipment_restriction":{"removed":[{"category":"ranged","res_type":"all","value":""},{"category":"armour","res_type":"all","value":""},{"category":"grende","res_type":"all","value":""}]},"validate_final_unit_equipment":{"requirements":[{"category":"armour","value":false},{"category":"ranged","value":false},{"category":"grende","value":false}]}},"description":[{"tags":{"desc_type":"default"},"content":"BLOOD MARKERS are never placed next to a model with the Wrath of God special rule, and it has the NEGATE FEAR Keyword. It cannot be Broken on the Wheel by an Anchorite Shrine. A model with the Wrath of God special rule cannot have Ranged Weapons or Armour (it can have a Shield).","glossary":[{"val":"NEGATE FEAR","id":"kw_negate_kw_fear"},{"val":"BLOOD MARKERS","id":"kw_bloodmarker"}]}],"options":[]},{"id":"up_machinearmour","name":"Machine Armour","source":"core","tags":{"trait":true},"contextdata":{"set_stat":{"upgrades":[{"stat":"base","value":[40]}]},"change_model_equipment":{"removed":["rel_md_eq_mechanisedheavyinfantry_base"],"added":["rel_md_eq_mechanisedheavyinfantry_advanced"]}},"description":[{"tags":{"desc_type":"default"},"content":"The model swaps out its Light Machine Armour for Machine Armour, and its base size increases to 40mm."}],"options":[]},{"id":"up_highlandmachinearmour","name":"Celtic Machine Armour","source":"core","tags":{"trait":true},"contextdata":{"set_stat":{"upgrades":[{"stat":"base","value":[40]}]},"change_model_equipment":{"removed":["rel_md_eq_mechanisedheavyinfantry_base"],"added":["rel_md_eq_mechanisedheavyinfantry_highland"]}},"description":[{"tags":{"desc_type":"default"},"content":"The model swaps out its Light Machine Armour for Celtic Machine Armour, and its base size increases to 40mm."}],"options":[]},{"id":"up_fianna","name":"Fianna","source":"core","tags":{"trait":true},"contextdata":{"keyword_mod":{"mods":[{"type":"add","value":"kw_infiltrator"},{"type":"add","value":"kw_skirmisher"}]}},"description":[{"tags":{"desc_type":"default"},"content":"The model gains the keywords INFILTRATOR and SKIRMISHER","glossary":[{"val":"INFILTRATOR","id":"kw_infiltrator"},{"val":"SKIRMISHER","id":"kw_skirmisher"}]}],"options":[]},{"id":"up_berserker","name":"Berserker","source":"core","tags":{"trait":true},"contextdata":{"keyword_ignore":{"value":["kw_fear"]},"model_equipment_restriction":{"removed":[{"category":"armour","res_type":"all","value":""}]},"validate_final_unit_equipment":{"requirements":[{"tag":"armour","value":false}]}},"description":[{"tags":{"desc_type":"default"},"content":"A Berserker cannot have Armour (they can have Shields). In addition, a Berserker has the NEGATE FEAR Keyword, and BLOOD MARKERS are never placed on them under any circumstances.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"},{"val":"NEGATE FEAR","id":"kw_negate_kw_fear"}]}],"options":[]},{"id":"up_rapidassault","name":"Rapid Assault","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add +1 DICE to the Success Roll when a model with the Rapid Assault ability takes a Dash ACTION.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"},{"val":"ACTIONS","id":"kw_action"}]}],"options":[]},{"id":"up_chewa","name":"Chewa","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add +1 DICE to the Success Roll for a Melee Attack made by a model with the Chewa ability for each other friendly model within 1\\" of the target, up to a maximum of +2 DICE.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"},{"val":"+2 DICE","id":"kw_plusdice"}]}],"options":[]},{"id":"up_vanguard","name":"Flanking","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Unless the scenario prohibits use of the special deployment of INFILTRATORS, you may deploy the Vanguard on any table edge as long as they are at least 8\u201d away from any enemy model after INFILTRATORS are deployed. Vanguard can also be deployed in your own deployment zone as standard.","glossary":[{"val":"INFILTRATORS","id":"kw_infiltrator"}]}],"options":[]},{"id":"up_plagueknightcompanionofthefly_base","name":"Knight Companion of the Fly","source":"core","tags":{"trait":true,"special_category":"plague_knight_ranks"},"contextdata":{"new_upgrade":{}},"description":[{"tags":{"desc_type":"default"},"content":"Add +1 DICE to either the Ranged or the Melee Characteristic of this Plague Knight (you can choose which of the Characteristics to increase)","glossary":[{"val":"+1 DICE","id":"kw_plusdice"}]}],"options":[{"ref_id":"ot_companion","name":"Knight Companion Selection","description":[],"category":"type","type":"text","strictness":"strict","predefined_options":[],"option_context":{"basic_option_default":{}},"data_search":{"searchtype":"complex","searchparam":{"type":"upgrade","request":{"operator":"and","terms":[{"item":"tags","value":"knightcompanionofthefly","equals":true,"strict":true,"istag":true,"tagvalue":""}],"subparams":[]}}}}]},{"id":"up_plagueknightcompanionofthefly_ranged","name":"Ranged Knight","source":"core","tags":{"trait":true,"knightcompanionofthefly":true},"contextdata":{"upgrade_stat":{"upgrades":[{"stat":"ranged","value":1}]}},"description":[{"tags":{"desc_type":"default"},"content":"The Knight gains +1 DICE to ranged attacks.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"}]}],"options":[]},{"id":"up_plagueknightcompanionofthefly_melee","name":"Melee Knight","source":"core","tags":{"trait":true,"knightcompanionofthefly":true},"contextdata":{"upgrade_stat":{"upgrades":[{"stat":"melee","value":1}]}},"description":[{"tags":{"desc_type":"default"},"content":"The Knight gains +1 DICE to melee attacks.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"}]}],"options":[]},{"id":"up_plagueknightalmoner","name":"Plague Almoner","source":"core","tags":{"trait":true,"special_category":"plague_knight_ranks"},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"If you convert an Injury Roll into a Bloodbath Roll for an attack made by this Plague Knight, the cost in BLOOD MARKERS and/or INFECTION MARKERS of the Bloodbath Roll is reduced by 1.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"},{"val":"INFECTION MARKERS","id":"kw_infectionmarker"}]}],"options":[]},{"id":"up_plagueknightrottencross","name":"Knight of the Rotten Cross","source":"core","tags":{"trait":true,"special_category":"plague_knight_ranks"},"contextdata":{"model_add_equipment":{"additions":[{"count":1,"option_id":0,"restriction":[{"category":"melee"},{"category":"ranged"}]}]}},"description":[{"tags":{"desc_type":"default"},"content":"You can purchase 1 Ranged Weapon or 1 Melee Weapon from the New Antioch or Heretic Legions Armoury Tables for this model. Any stipulations that apply to the Weapon must be followed (so there is no point in taking a Weapon that can only be used by a specific model). The Weapon cannot be sold or reallocated in the Quartermaster Step of the Campaign Phase, but can be replaced if it is lost for any reason.","glossary":[{"val":"INFILTRATORS","id":"kw_infiltrator"}]}],"options":[{"ref_id":"ot_rottencross","name":"Rotten Cross Expanded Armoury Option","description":[],"category":"type","type":"text","hide":true,"strictness":"strict","predefined_options":[],"option_context":{"basic_option_default":{}},"data_search":{"searchtype":"complex","searchparam":{"type":"factionequipmentrelationship","request":{"operator":"and","terms":[],"subparams":[{"operator":"or","terms":[{"item":"faction_id","value":"fc_newantioch","equals":true,"strict":true},{"item":"faction_id","value":"fc_hereticlegion","equals":true,"strict":true}],"subparams":[]},{"operator":"and","terms":[{"item":"faction_id","value":"fc_cultoftheblackgrail","equals":false,"strict":true}],"subparams":[]}]}}}}]},{"id":"up_plagueknightrankofbutcher","name":"Knightly Rank of Butchery","source":"core","tags":{"trait":true,"special_category":"plague_knight_ranks"},"contextdata":{"upgrade_stat":{"upgrades":[{"stat":"melee","value":1}]}},"description":[{"tags":{"desc_type":"default"},"content":"The Knight gains +1 DICE to melee attacks.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"}]}],"options":[]},{"id":"up_plagueknightrankbutcherking","name":"Butcher King","source":"core","tags":{"trait":true,"special_category":"plague_knight_ranks"},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"At the end of a battle, if this Plague Knight is not Out of Action and it has taken at least one enemy model Out of Action with a Melee Attack, gain 1\u263c."}],"options":[]},{"id":"up_plagueknightrankofthefeast","name":"Knight Companion of the Feast","source":"core","tags":{"trait":true,"special_category":"plague_knight_ranks"},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add +1 DICE to Risky Success Roll for a Ravenous Infection ACTION (see below) if the model taking the ACTION is this Plague Knight or is a friendly model within 3\u201d of this Plague Knight.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"},{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"up_plagueknightrankofferocity","name":"Knight of Twin Cleavers","source":"core","tags":{"trait":true,"special_category":"plague_knight_ranks"},"contextdata":{"add_ignore_mods":{"modifiers":["off-hand_weapon"]},"equipment_add_keyword":{"equip_check":[{"check_type":"category","value":"melee"}],"additions":["kw_shrapnel"]}},"description":[{"tags":{"desc_type":"default"},"content":"This Plague Knight has the IGNORE OFF-HAND Keyword, and its Melee Attacks have the SHRAPNEL Keyword.","glossary":[{"val":"IGNORE OFF-HAND","id":"kw_ignoremodifier"},{"val":"SHRAPNEL","id":"kw_shrapnel"}]}],"options":[]},{"id":"up_infectioushound","name":"Infested Carcasses","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Hounds of the Black Grail models adds the INFECTION MARKERS Keyword to their melee attacks.","glossary":[{"val":"INFECTION MARKERS","id":"kw_infectionmarker"}]}],"options":[]},{"id":"up_maddeningbuzz","name":"Maddening Buzz","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Success Rolls taken for enemy models within 8\\" of a model with this ability become Risky Success Rolls (there is no additional effect if they are Risky Success Rolls already).","glossary":[{"val":"Risky Success","id":"kw_riskyaction"}]}],"options":[]},{"id":"up_goetic_burninginferno","name":"Burning Inferno","source":"core","tags":{"action":true,"special_category":"goetic"},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph-italic","lore":true},"content":"The Sorcerer opens a portal to the Lake of Fire, drawing forth a great screaming ball of Infernal lava mixed with damned souls."},{"tags":{"desc_type":"paragraph"},"content":"GOETIC (1-3): You must take a Cast Spell ACTION with the spellcaster in order for it to cast this spell. If you do so, the spellcaster can make a Ranged Attack with a Range of 36\u201d. The attack has the BLAST, FIRE and SCATTER Keywords, and a blast radius in inches equal to the number of BLOOD MARKERS that were paid to cast the spell. In addition, if the Success Roll for a Ranged Attack with a Burning Inferno that targets an enemy model is a Success or a Critical Success, or if the attack is a Failure and the target point scatters onto a model\'s base, apply the effect of the IGNORE ARMOUR Keyword to the Injury Roll for that model.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"BLAST","id":"kw_blast"},{"val":"FIRE","id":"kw_fire"},{"val":"SCATTER","id":"kw_scatter"},{"val":"BLOOD MARKERS","id":"kw_bloodmarker"},{"val":"IGNORE ARMOUR","id":"kw_ignorearmour"},{"val":"GOETIC","id":"kw_goetic"}]}],"options":[]},{"id":"up_goetic_slavemaster","name":"Slavemaster","source":"core","tags":{"action":true,"special_category":"goetic"},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph-italic","lore":true},"content":"Yoke Fiends are held in total thrall by the mightier members of the Court."},{"tags":{"desc_type":"paragraph"},"content":"GOETIC (1): You must take a Cast Spell ACTION with the spellcaster in order for it to cast this spell. If you do so, you can carry out one of the following Commands with a Yoke Fiend that is within 18\\" of the spellcaster. Carrying out a Command does not stop the Yoke Fiend from being Activated in the same Turn (before or after the Command was issued).","glossary":[{"val":"GOETIC","id":"kw_goetic"},{"val":"ACTION","id":"kw_action"}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Move Command: "},{"tags":{"desc_type":"default"},"content":"The Yoke Fiend carries out a Move (it cannot Charge or Retreat)."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Shoot Command: "},{"tags":{"desc_type":"default"},"content":"The Yoke Fiend carries out a Ranged Attack."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Fight Command: "},{"tags":{"desc_type":"default"},"content":"The Yoke Fiend carries out a Melee Attack."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Sacrifice Command: "},{"tags":{"desc_type":"default"},"content":"The Yoke Fiend kills itself. It is taken Out of Action and crossed off its Warband Roster."}]}]}]}],"options":[]},{"id":"up_goetic_wrath_chargeofhatred","name":"Charge of Hatred","source":"core","tags":{"trait":true,"special_category":"goetic"},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"There is virtually no escape from the hatred of this creature."}]},{"tags":{"desc_type":"default"},"content":"When a model with this Goetic Ability makes a Charge it counts as having Movement Characteristic of 12\u201d. Do not roll a D6 to determine its Charge Bonus, but in all other regards carry out the Charge normally (i.e. Difficult terrain will slow the model down, it will have to Jump across gaps, and so on). In addition, unless the target of the charge is the closest enemy model in Line of Sight, you must take a Risky Success Roll for the model before making the charge move. If the roll is a Failure, the model cannot move and its Activation ends. If the roll is a Success, it can carry out the Charge normally.","glossary":[{"val":"Risky Success","id":"kw_riskyaction"}]}],"options":[]},{"id":"up_goetic_wrath_lessermarkofcain","name":"Lesser Mark of Cain","source":"core","tags":{"trait":true,"special_category":"goetic"},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph","lore":true},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"An inferior copy of the mark that the God-Tyrant YHWH placed on the forehead of Cain, the First Murderer."}]},{"tags":{"desc_type":"paragraph"},"content":"A model with this Goetic Ability has the -1 INJURY DICE Keyword.","glossary":[{"val":"-1 INJURY DICE","id":"kw_injurydice"}]}],"options":[]},{"id":"up_goetic_wrath_blindrage","name":"Blind Rage","source":"core","tags":{"trait":true,"special_category":"goetic"},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"With alacrity borne out of sheer rage, this creature can move at a startling speed."}]},{"tags":{"desc_type":"default"},"content":"Add +1 DICE to the Risky Success Roll for a model with this Goetic Ability that is taking a Dash ACTION.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"Risky Success","id":"kw_riskyaction"},{"val":"+1 DICE","id":"kw_plusdice"}]}],"options":[]},{"id":"up_goetic_envy_enviouseyes","name":"Envious Eyes","source":"core","tags":{"trait":true,"special_category":"goetic"},"contextdata":{"model_add_equipment":{"additions":[{"count":1,"option_id":0,"restriction":[{"all":"all"}]}]},"override_flat":{"id":["md_sorcerer"],"selections":{"type":"factionequipmentrelationship"}}},"description":[{"tags":{"desc_type":"paragraph","lore":true},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"So great is the envy of this creature, it can manifest the object of its desire in physical form."}]},{"tags":{"desc_type":"default"},"content":"You can purchase 1 piece of Battlekit from the New Antioch, Trench Pilgrims, or Iron Sultanate Armouries for a model with this Goetic Ability. Any stipulations that apply to it must still be followed (so there is little point in taking the Assassin\u2019s Dagger, for example, as it can only be used by Assassins). This piece of Battlekit cannot be sold or reallocated in the Quartermaster Step, and you can repurchase the Battlekit later during the campaign if it is lost for any other reason."}],"options":[{"ref_id":"ot_enviouseyes","name":"Envious Eyes Selections","description":[],"category":"type","type":"text","strictness":"strict","hide":true,"predefined_options":[],"option_context":{"basic_option_default":{}},"data_search":{"searchtype":"complex","searchparam":{"type":"factionequipmentrelationship","request":{"operator":"and","terms":[],"subparams":[{"operator":"or","terms":[{"item":"faction_id","value":"fc_newantioch","equals":true,"strict":true},{"item":"faction_id","value":"fc_trenchpilgrim","equals":true,"strict":true},{"item":"faction_id","value":"fc_ironsultanate","equals":true,"strict":true}],"subparams":[]},{"operator":"and","terms":[{"item":"faction_id","value":"fc_courtofthesevenheadedserpent","equals":false,"strict":true}],"subparams":[]}]}}}}]},{"id":"up_goetic_envy_covetedposition","name":"Coveted Position","source":"core","tags":{"action":true,"special_category":"goetic"},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph","lore":true},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"The burning jealousy and envy of those in better position in life allows the caster of this spell to instantly change places with whomever they envy."}]},{"tags":{"desc_type":"default"},"content":"GOETIC (2): You must take a Cast Spell ACTION with the spellcaster in order for it to cast this spell. If you do so, pick a model (friend or foe) that is within 12\u201d of the spellcaster, in its Line of Sight, and is more than 1\u201d away from any other models. You can then swap the position of the two models. You must redeploy each model so that the centre of their base is at the location that was previously occupied by the centre of the base of the model they are swapping positions with. If this is impossible for any reason (e.g. because Impassable terrain or another model gets in the way), the two models remain in their original locations. Note that the spellcaster can cast this spell even if they are within 1\u201d of an enemy model (in which case the enemy model cannot make a Melee Attack before the spellcaster\'s position is swapped), and can redeploy within 1\u201d of an enemy model.","glossary":[{"val":"GOETIC","id":"kw_goetic"},{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"up_goetic_envy_whatisyoursismine","name":"What Is Yours Is Mine","source":"core","tags":{"action":true,"special_category":"goetic"},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph","lore":true},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"The caster of this spell cannot bear another to possess that which it lacks, and bends reality to its will to sate its jealousy."}]},{"tags":{"desc_type":"default"},"content":"GOETIC (1): You must take a Cast Spell ACTION with the spellcaster in order for it to cast this spell. If you do so, you can remove 1 BLOOD MARKER or BLESSING MARKER from a model in the spellcaster\u2019s Line of Sight (friend or foe) and place it next to the spellcaster.","glossary":[{"val":"GOETIC","id":"kw_goetic"},{"val":"ACTION","id":"kw_action"},{"val":"BLOOD MARKER","id":"kw_bloodmarker"},{"val":"BLESSING MARKER","id":"kw_blessingmarker"}]}],"options":[]},{"id":"up_goetic_lust_forbiddenpleasures","name":"Forbidden Pleasures","source":"core","tags":{"trait":true,"special_category":"goetic"},"contextdata":{},"description":[{"tags":{"desc_type":"italic","lore":true},"content":"The unspeakable things done to the poor slave of the fiend are best left unsaid."},{"tags":{"desc_type":"default"},"content":"You can use this Goetic Ability at the start of each game, before deployment. For each model in your Warband that has this Goetic Ability, you can pick a model from your Warband that does not have the DEMONIC Keyword. Place 3 BLOOD MARKERS next to each model that you pick.","glossary":[{"val":"DEMONIC","id":"kw_demonic"},{"val":"BLOOD MARKERS","id":"kw_bloodmarker"}]}],"options":[]},{"id":"up_goetic_lust_exquisitepain","name":"Exquisite Pain","source":"core","tags":{"action":true,"special_category":"goetic"},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"italic","lore":true},"content":"Pain and pleasure are but two sides of the same coin. This is the wisdom of the Sin of Lust."}]},{"tags":{"desc_type":"default"},"content":"GOETIC (1-2): You must take a Cast Spell ACTION with the spellcaster in order for it to cast this spell. If you do so, pick a model that is in the spellcaster\u2019s Line of Sight (friend or foe). Place the BLOOD MARKERS paid to cast the spell next to the model that you picked.","glossary":[{"val":"GOETIC","id":"kw_goetic"},{"val":"ACTION","id":"kw_action"},{"val":"BLOOD MARKERS","id":"kw_bloodmarker"}]}],"options":[]},{"id":"up_goetic_lust_callofflesh","name":"Call of the Flesh","source":"core","tags":{"action":true,"special_category":"goetic"},"contextdata":{},"description":[{"tags":{"desc_type":"italic","lore":true},"content":"None can resist the call of Lust."},{"tags":{"desc_type":"default"},"content":"GOETIC (2): You must take a Cast Spell ACTION with the spellcaster in order for it to cast this spell. If you do so, the spellcaster\u2019s Activation immediately ends and the first ACTION taken by the next model your opponent Activates must be a Move, Charge or Retreat. If the enemy model is Down, it will stand up before taking the ACTION; if it cannot stand up for any reason, the spell has no effect on it. In addition, when your opponent moves the model, it must end the move as close to the spellcaster as possible, taking a Retreat ACTION if it Activates within 1\u201d of an enemy model, and taking a Charge ACTION if it Activates within 12\u201d of the spellcaster. If the model must move through Dangerous terrain, or Climb, Jump, or Jump Down, to get as close to the spellcaster as possible, then it must do so. After taking the Move, Charge or Retreat ACTION the model can carry out other ACTIONS normally, with the exception that it cannot choose the spellcaster as the target for a Ranged or Melee attack for the rest of the Turn.","glossary":[{"val":"GOETIC","id":"kw_goetic"},{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"up_goetic_pride_prouddefiance","name":"Proud Defiance","source":"core","tags":{"trait":true,"special_category":"goetic"},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"Retreat would mean submitting to others, an unthinkable act."}]},{"tags":{"desc_type":"default"},"content":"You do not have to take Morale Checks if your Warband has at least 1 model with this Goetic Ability on the battlefield."}],"options":[]},{"id":"up_goetic_pride_tooproudtofall","name":"Too Proud to Fall","source":"core","tags":{"action":true,"special_category":"goetic"},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"The pride of this creature matches Morningstar himself. It will never kneel down willingly."}]},{"tags":{"desc_type":"default"},"content":"GOETIC (2): You can cast this spell immediately after the spellcaster is taken Down. If you do so, the spellcaster ignores the Down result and remains standing, but will still suffer any other effects of the Injury Roll or rule that caused them to be taken Down. For example, BLOOD MARKERS from an Injury Roll must be placed next to the model as normal, and if the TOUGH Keyword was used then it cannot be used again during the game, and so on.","glossary":[{"val":"GOETIC","id":"kw_goetic"},{"val":"BLOOD MARKER","id":"kw_bloodmarker"},{"val":"TOUGH","id":"kw_tough"}]}],"options":[]},{"id":"up_goetic_pride_lightofsamael","name":"Light of Samael","source":"core","tags":{"action":true,"special_category":"goetic"},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"The Angel Samael fell from splendour and glory, and now his divine light burns all in its path."}]},{"tags":{"desc_type":"default"},"content":"GOETIC (2): You must take a Cast Spell ACTION with the spellcaster in order for it to cast this spell. If you do so, pick an enemy model that is within 24\\" of the spellcaster and in their Line of Sight, and then make an Injury Roll for the enemy model. If the enemy model is mounted on a base of 32mm or less, it is driven back D6\\" in a straight line directly away from the spellcaster. The model stops if it is driven into another model, Impassable terrain or terrain it cannot cross without having to Climb.","glossary":[{"val":"GOETIC","id":"kw_goetic"},{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"up_goetic_sloth_morpheanmind","name":"Morphean Mind","source":"core","tags":{"trait":true,"special_category":"goetic"},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph","lore":true},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"The mind of this demonic creature warps the flow of time so it may take as long as it wishes to decide on its actions."}]},{"tags":{"desc_type":"paragraph"},"content":"The opposing player cannot spend more than 1 BLOOD MARKER to add -1 DICE when you take a Success Roll for a model with this Goetic Ability.","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"},{"val":"-1 DICE","id":"kw_minusdice"}]}],"options":[]},{"id":"up_goetic_sloth_charmofacedia","name":"Charm of Acedia","source":"core","tags":{"action":true,"special_category":"goetic"},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph","lore":true},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"Not even trying is the surest way to succeed."}]},{"tags":{"desc_type":"default"},"content":"GOETIC (1): You must take a Cast Spell ACTION with the spellcaster in order for it to cast this spell. If you do so, if the next ACTION the spellcaster takes as part of this Activation requires one or more Success Rolls or Risky Success Rolls for any part of it, the first roll is automatically a Success (do not roll any dice).","glossary":[{"val":"GOETIC","id":"kw_goetic"},{"val":"Risky Success","id":"kw_riskyaction"}]}],"options":[]},{"id":"up_goetic_sloth_daemoniummeridianum","name":"Daemonium Meridianum","source":"core","tags":{"trait":true,"special_category":"goetic"},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph","lore":true},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"It is all but impossible to approach this infernal warrior with any energy or enthusiasm."}]},{"tags":{"desc_type":"default"},"content":"Enemy models treat Open or Dangerous terrain within 6\u201d of a model with this Goetic Ability as if it had the DIFFICULT TERRAIN Keyword.","glossary":[{"val":"DIFFICULT TERRAIN","id":"kw_difficultterrain"}]}],"options":[]},{"id":"up_goetic_gluttony_bellyofthebeast","name":"Belly of the Beast","source":"core","tags":{"trait":true,"special_category":"goetic"},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph","lore":true},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"This creature is known to feast on vast mounds of flesh before it leaves Hell. If it is wounded in battle, its opponents suffer agonizing acidic burns as the contents of its gut gush all over them."}]},{"tags":{"desc_type":"default"},"content":"After making a Melee Attack that targets a model with this Goetic Ability, place 1 BLOOD MARKER next to the attacking model as long as at least 1 BLOOD MARKER was placed next to the model with this Goetic Ability as a result of the attack.","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"}]}],"options":[]},{"id":"up_goetic_gluttony_uncaringgluttony","name":"Uncaring Gluttony","source":"core","tags":{"action":true,"special_category":"goetic"},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph","lore":true},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"This curse drives its target mad with an unnatural hunger, making them heedless of any danger as they seek to consume any matter they now perceive as edible."}]},{"tags":{"desc_type":"default"},"content":"GOETIC (2): You must take a Cast Spell ACTION with the spellcaster in order for it to cast this spell. If you do so, pick 1 enemy model that has not yet been Activated this Turn, and pick one piece of Equipment that the model has (note its Type must be Equipment, not Weapon or Special and so on). Equipment that has the CONSUMABLE Keyword cannot be picked as it has already been consumed, and Equipment that has the DEPLOYABLE Keyword cannot be picked if it is more than 1\u201d away from the model. The model chews on the Equipment, rendering it unusable for the rest of the game.","glossary":[{"val":"GOETIC","id":"kw_goetic"},{"val":"ACTION","id":"kw_action"},{"val":"CONSUMABLE","id":"kw_consumable"},{"val":"DEPLOYABLE","id":"kw_deployable"}]}],"options":[]},{"id":"up_goetic_gluttony_eateroftheflesh","name":"Eater of the Flesh","source":"core","tags":{"trait":true,"special_category":"goetic"},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph","lore":true},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"An unnatural hunger for flesh haunts this creature. Whenever mortal blood is spilled, this demonic entity feeds through tears in reality, gorging itself on viscera and guts."}]},{"tags":{"desc_type":"default"},"content":"After making a Melee Attack for a model with this Goetic Ability, remove 1 BLOOD MARKER from the model for each BLOOD MARKER that is placed next to the target model as a result of the attack. This Goetic Ability does not affect attacks that target an enemy model with the BLACK GRAIL or DEMONIC Keywords.","glossary":[{"val":"DEMONIC","id":"kw_demonic"},{"val":"BLACK GRAIL","id":"kw_blackgrail"},{"val":"BLOOD MARKER","id":"kw_bloodmarker"}]}],"options":[]},{"id":"up_goetic_greed_bodyofgold","name":"Body of Gold","source":"core","tags":{"trait":true,"special_category":"goetic"},"contextdata":{"keyword_mod":{"mods":[{"type":"add","value":"kw_golem"},{"type":"remove","value":"kw_tough"}]}},"description":[{"tags":{"desc_type":"paragraph","lore":true},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"So great is the devotion of this servant of greed that their entire body takes on the aspect of the precious metal."}]},{"tags":{"desc_type":"default"},"content":"A model with this Goetic Ability has the GOLEM Keyword. In addition, this model loses the TOUGH Keyword if it has it, and it cannot gain the TOUGH Keyword through any other means.","glossary":[{"val":"GOLEM","id":"kw_golem"},{"val":"TOUGH","id":"kw_tough"}]}],"options":[]},{"id":"up_goetic_greed_blackheart","name":"Black Heart","source":"core","tags":{"action":true,"special_category":"goetic"},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph","lore":true},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"Greed has corrupted the heart of this fallen creature to such an extent that there is a gaping hole within its chest. When it desires something it bleeds black tar that empowers this servant of avarice."}]},{"tags":{"desc_type":"default"},"content":"GOETIC (1): You can cast this spell before taking a Success Roll or a Risky Success Roll for the spellcaster. If you do so, add +1 DICE to the roll.","glossary":[{"val":"GOETIC","id":"kw_goetic"},{"val":"ACTION","id":"kw_action"},{"val":"+1 DICE","id":"kw_plusdice"}]}],"options":[]},{"id":"up_goetic_greed_universalgreed","name":"Greedy Hearts","source":"core","tags":{"trait":true,"special_category":"goetic"},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph","lore":true},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"One cannot serve both Mammon and God. Extravagant displays of wealth by your enemies only strengthen the servants of Greed."}]},{"tags":{"desc_type":"default"},"content":"At the start of each game, after both sides have deployed, place 1 BLESSING MARKER next to a model with this Goetic Ability for each enemy model that is worth a total of 150 \ud83d\udc51  or more (including the cost of their Battlekit, etc).","glossary":[{"val":"BLESSING MARKER","id":"kw_blessingmarker"}]}],"options":[]},{"id":"up_fruit","name":"Eat of the Fruit","source":"core","tags":{"trait":true},"contextdata":{"keyword_add":{"value":["kw_demonic"]}},"description":[{"tags":{"desc_type":"default"},"content":"The model gains the DEMONIC keyword.","glossary":[{"val":"DEMONIC","id":"kw_demonic"}]}],"options":[]},{"id":"up_gunsblazing","name":"Gunslinger","source":"westfalia","tags":{"trait":true},"contextdata":{"bonus_ability":{"bonus_type":["equipment","weapon","pistol"]},"equipment_add_keyword":{"equip_check":[{"check_type":"tag","value":"pistol"}],"additions":["kw_assault"]}},"description":[{"tags":{"desc_type":"default"},"content":"If armed with two \u201cpistols\u201d, this model can make Ranged Attack ACTIONS with both of them when Making a Ranged Attack. In addition, this model suffers no penalty when using a \u201cpistol\u201d as an Off-Hand weapon. It gives normal \u201cpistols\u201d the character uses the Keyword ASSAULT.","glossary":[{"val":"ACTIONS","id":"kw_action"},{"val":"ASSAULT","id":"kw_assault"}]}],"options":[]},{"id":"up_putrescere_hunger","name":"Feral Hunger","source":"creature_caster","tags":{"trait":true,"special_category":"arcana_putrescere"},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"Those unfortunate enough to witness a Ravenous enchanted by the Arcana Putrescere see the limits of organic possibility ruined, limbs straining and hurled forward through rupture, undying sinew shearing from rotten bone with desperate and frantic speed."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"When a model with this Goetic Ability makes a charge move it counts as having Movement Characteristic of 12\u201d. Do not roll a D6 to determine its Charge Bonus, but in all other regards carry out the Charge normally (i.e. Difficult terrain will slow the model down, it will have to Jump across gaps, and so on). In addition, unless the target of the charge is the closest enemy model, you must take a Risky Success Roll for the model before making the Charge move. If the roll is a Failure, the model cannot move and its Activation ends. If the roll is a Success, it can carry out the Charge as described above."}]}],"options":[]},{"id":"up_putrescere_miasmaofpestilence","name":"Miasma of Pestilence","source":"creature_caster","tags":{"trait":true,"special_category":"arcana_putrescere"},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"The spellcaster belches forth a heat of unholy pestilence from their entropic stomach, boiling the air around them in a convulsion of convection."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Cost 2: "},{"tags":{"desc_type":"default"},"content":"You must take a Cast Spell ACTION with the spellcaster in order for it to cast this spell. If you do so, add -1 DICE to Success Rolls for Ranged Attacks that target a friendly model within 6\u201d of the spellcaster (including the spellcaster themselves) until the end of the Turn.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"-1 DICE","id":"kw_minusdice"}]}]}],"options":[]},{"id":"up_putrescere_motherscall","name":"Mother\'s Call","source":"creature_caster","tags":{"action":true,"special_category":"arcana_putrescere"},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"In a vile mockery of maternal love, the Matagot Hag gurgles cooing commands to her ravenous offspring."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Cost 1: "},{"tags":{"desc_type":"default"},"content":"Once per Turn pick 1 Ravenous that is within 8\u201d of the spellcaster and carry out one of the following Commands with them. Carrying out a Command does not stop the Ravenous from being Activated in the same Turn (before or after the Command was issued). "}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Feast Command: "},{"tags":{"desc_type":"default"},"content":"The Ravenous carries out a Ravenous Infection ACTION. Place an additional INFECTION MARKER next to the target if the Risky Success Roll is a Success or Critical Success. ","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"INFECTION MARKER","id":"kw_infectionmarker"},{"val":"Risky Success","id":"kw_riskyaction"}]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Fight Command: "},{"tags":{"desc_type":"default"},"content":"The Ravenous carries out a Melee Attack."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Move Command: "},{"tags":{"desc_type":"default"},"content":"The Ravenous carries out a Move (it cannot Charge or Retreat)."}]}]}]}],"options":[]},{"id":"up_putrescere_rapturousfeast","name":"Rapturous Feast","source":"creature_caster","tags":{"trait":true,"special_category":"arcana_putrescere"},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"The Great Hunger burns so ruinously within the spellcaster that nearby thralls find their saliva growing thick with anticipatory digestive fluids."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Friendly models that make a Melee Attack while they are within 4\u201d of the spellcaster (including the spellcaster) add the INFECTION MARKERS Keyword to the attack if they have made a charge move earlier in the same Activation.","glossary":[{"val":"INFECTION MARKERS","id":"kw_infectionmarker"}]}]}],"options":[]},{"id":"up_putrescere_vilechurning","name":"Vile Churning","source":"creature_caster","tags":{"trait":true,"special_category":"arcana_putrescere"},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"The spellcaster amplifies their traumatic gastric agony, invoking a cavernous twisting of their stomachs so resonant it bleeds the ears and guts of those nearby alike."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Cost 1-2: "},{"tags":{"desc_type":"default"},"content":"You must take a Cast Spell ACTION with the spellcaster in order for it to cast this spell. If you do so, place 1 BLOOD MARKER next to every model without the ARTIFICIAL or DEMONIC Keywords within 1\u201d of the spellcaster (apart from the spellcaster itself) for every INFECTION MARKER that was paid to cast this spell.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"BLOOD MARKER","id":"kw_bloodmarker"},{"val":"ARTIFICIAL","id":"kw_artificial"},{"val":"DEMONIC","id":"kw_demonic"}]}]}],"options":[]},{"id":"up_putrescere_virulentclot","name":"Virulent Clot","source":"creature_caster","tags":{"trait":true,"special_category":"arcana_putrescere"},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"From their own spittle and bowels, the spellcaster divines a protective scabrous haruspice. Such is the truth within their rotten meat, even the fire that normally overcomes the armies of Beelzebub is turned away by the knowing clot."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Cost 2/4/6: "},{"tags":{"desc_type":"default"},"content":"Once per Turn, you can cast this spell before an Injury Roll is made for the spellcaster. If you do so, add a -1 INJURY MODIFIER to the roll for every 2 INFECTION MARKERS that were paid to cast this spell, and the spellcaster has the NEGATE FIRE Keyword for the roll.","glossary":[{"val":"INJURY MODIFIER","id":"kw_injurymodifier"},{"val":"INFECTION MARKERS","id":"kw_infectionmarker"},{"val":"NEGATE FIRE","id":"kw_negate_kw_fire"}]}]}],"options":[]},{"id":"up_putrescere_vomitus","name":"Vomitus","source":"creature_caster","tags":{"trait":true,"special_category":"arcana_putrescere"},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"With a grating retch, the spellcaster dredges meat and ichor from the depths of their labyrinthine intestines. The following geyser of death and despair melts armour and flesh as if it were wax."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Cost 1-3:"},{"tags":{"desc_type":"default"},"content":"You must take a Cast Spell ACTION with the spellcaster in order for it to cast this spell. If you do so, the spellcaster can make a Ranged Attack. Do not make a Success Roll for the attack. Instead, measure a straight line 1mm wide and up to 8\u201d long from the attacking model to a point on the ground or a model\u2019s base. The line stops if it reaches a terrain piece that is taller than the model making the Attack. Make an Injury Roll for every model (friend or foe) that is touched by the line, apart from the attacking model itself. This attack has the INFECTION MARKERS Keyword, and Injury Rolls for this attack has the +1 INJURY MODIFIER Keyword if 2 INFECTION MARKERS were paid to cast this spell, or the +2 INJURY MODIFIER Keyword if 3 INFECTION MARKERS were paid to cast this spell. ","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"INJURY MODIFIER","id":"kw_injurymodifier"},{"val":"INFECTION MARKERS","id":"kw_infectionmarker"}]}]}],"options":[]},{"id":"up_unendingstarvation","name":"Unending Starvation","source":"core","tags":{"trait":true},"contextdata":{"upgrade_stat":{"upgrades":[{"stat":"movement","value":1}]}},"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"The Great Hunger is not a yearning that can ever be met. Neither relief nor joy comes from consumption, only a deepening of insatiable gluttonous agony."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"A model with this Battlekit adds +1\u201d to their Movement Characteristic, and may target themselves with the Ravenous Infection Ability. In addition, if this model is more than 1\u201d away from an enemy model, its first ACTION each Activation must be a Move, Charge or Dash ACTION, moving the maximum distance possible directly towards the nearest enemy model, and charging them if possible.","glossary":[{"val":"ACTION","id":"kw_action"}]}]}],"options":[]},{"id":"up_jannisaryveteran","name":"Janisary Veteran","source":"core","tags":{"trait":true},"contextdata":{"keyword_mod":{"mods":[{"type":"add","value":"kw_strong"}]},"true_add_to_model":{"list":[{"id":"ab_countercharge","required":[]}]}},"description":[{"tags":{"desc_type":"default"},"content":"You can make the Y\xfczba\u015f\u0131 a Janissary Veteran with the STRONG Keyword and the Janissary Counter-Charge ability at a cost of +10 \ud83d\udc51","glossary":[{"val":"STRONG","id":"kw_strong"}]}],"options":[]}]'),p=JSON.parse('[{"id":"ft_standard","name":"Fireteam","source":"core","tags":{"trait":true},"contextdata":{"is_fireteam":{}},"description":[],"options":[{"ref_id":"ot_fireteammember_a","name":"","description":[],"self_ask":true,"category":"contextobject","option_context":{"is_fireteam":{}},"dyna_only":true,"parent_level":5,"question_name":"getFireteamOptionsFromWarband"},{"ref_id":"ot_fireteammember_b","name":"","description":[],"self_ask":true,"category":"contextobject","option_context":{"is_fireteam":{}},"dyna_only":true,"parent_level":5,"question_name":"getFireteamOptionsFromWarband"}]},{"id":"ft_model","name":"Model Fireteam","source":"core","tags":{"trait":true},"contextdata":{"is_model_fireteam":{}},"description":[],"options":[{"ref_id":"ot_fireteammember_a","name":"","description":[],"category":"contextobject","self_ask":true,"option_context":{"basic_option_default":{}},"dyna_only":true,"parent_level":1,"autoselect":true,"question_name":"getSingleFireteamMember"},{"ref_id":"ot_fireteammember_b","name":"","description":[],"category":"contextobject","self_ask":true,"option_context":{"basic_option_default":{}},"dyna_only":true,"parent_level":1,"question_name":"getFireteamOptionsFromWarbandModel"}]},{"id":"ft_antioch","name":"New Antioch Fireteam","source":"core","tags":{"trait":true},"contextdata":{"is_fireteam":{}},"description":[{"tags":{"desc_type":"paragraph"},"content":"If a model from a Fireteam hits a target that had been hit by an attack made by the other member of their Fireteam earlier in the same Turn, then you can spend 3 BLOOD MARKERS to convert the Injury Roll for the second attack to a Bloodbath Roll, even if the target is not Down.","glossary":[{"val":"FIRETEAM","id":"kw_fireteam"},{"val":"ACTION","id":"kw_action"},{"val":"BLOOD MARKERS","id":"kw_bloodmarker"}]}],"options":[{"ref_id":"ot_fireteammember_a","name":"","description":[],"category":"contextobject","option_context":{"is_fireteam":{}},"self_ask":true,"dyna_only":true,"parent_level":5,"question_name":"getFireteamOptionsFromWarband"},{"ref_id":"ot_fireteammember_b","name":"","description":[],"category":"contextobject","option_context":{"is_fireteam":{}},"self_ask":true,"dyna_only":true,"parent_level":5,"question_name":"getFireteamOptionsFromWarband"}]}]'),f=JSON.parse('[{"id":"eq_shovel","name":"Shovel","source":"core","tags":{"trait":true,"action":true,"weapon":true},"category":"equipment","distance":null,"stats":{"hands_melee":0,"melee":true},"contextdata":{"get_weapon":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Battlefield shovels allow troops to dig in and fight from cover in virtually any battlefield."}],"options":[],"keywords":[],"modifiers":[],"abilities":["ab_shovel"]},{"id":"eq_windamulet","name":"Wind Amulet","source":"core","tags":{"trait":true,"limited":1,"movement":true},"category":"equipment","distance":null,"stats":{},"contextdata":{"activated_stat":{"stat":"movement","value":3},"activated":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"An amulet created by the Jabirean Alchemists, capturing the essence of the Element of Wind within it."}],"options":[],"keywords":[],"abilities":["ab_gustsofwind"]},{"id":"eq_jezzail","name":"Jezzail","source":"core","tags":{"action":true,"weapon":true,"eq_alchemicalammunition":true,"jezzail":true},"category":"ranged","distance":18,"stats":{"hands_ranged":2,"ranged":true},"contextdata":{"get_weapon":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"These long arms are by far the most common weapons carried by the soldiers of the Sultanate of the Great Iron Wall. Their barrels are smoothbore, which limits their accurate range, but this is more than made up for by the fact that this allows them to be loaded with different types of alchemical ammunition made by the Jabirean Alchemists."}],"options":[],"keywords":[],"modifiers":[]},{"id":"eq_alchemicalammunition","name":"Alchemical Ammunition","source":"core","tags":{"trait":true},"category":"equipment","distance":null,"stats":{},"contextdata":{"ammunition_keyword_add":{"value":["kw_plusdice"]},"equipment_add_to":{"equip_check":[{"check_type":"tag","value":"eq_alchemicalammunition"}]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Jabirean Alchemists craft these jezzail bullets from the slivers of the Iron Wall. Each such shot is carved with the Seal of Solomon, guiding it with divine aim to its target."}],"options":[],"keywords":[],"abilities":["ab_guidingpath"]},{"id":"eq_reinforcedarmour","name":"Reinforced Armour","source":"core","tags":{"trait":true,"armour":true},"category":"armour","distance":null,"stats":{},"contextdata":{"upgrade_stat":{"upgrades":[{"stat":"armour","value":-2}]},"injury_flat_mod":{"modifiers":[-2]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Reinforced armour is a master-crafted suit made individually for the most important and elite troops. Each one is richly decorated and often carries the personal device of the warrior who wears it."}],"options":[],"keywords":[],"modifiers":[]},{"id":"eq_engineerbodyarmour","name":"Engineer Body Armour","source":"core","tags":{"trait":true,"armour":true,"model":true},"category":"armour","distance":null,"stats":{},"contextdata":{"upgrade_stat":{"upgrades":[{"stat":"armour","value":-2}]},"injury_flat_mod":{"modifiers":[-2]},"ignore_element":{"element":["kw_shrapnel"]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"New Antioch Combat Engineers are clad in specially designed reinforced armour."}],"options":[],"keywords":[],"abilities":["ab_ballisticboxarmour"]},{"id":"eq_combathelmet","name":"Combat Helmet","source":"core","tags":{"trait":true,"headgear":true},"category":"equipment","distance":null,"stats":{},"contextdata":{"ignore_element":{"element":["kw_shrapnel"]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"The simple combat helmet has proven its value on the battlefield time and again."}],"options":[],"keywords":[],"modifiers":[]},{"id":"eq_trenchpolearm","name":"Trench Polearm","source":"core","tags":{"action":true,"weapon":true,"trait":true},"category":"melee","distance":null,"stats":{"hands_melee":2,"melee":true},"contextdata":{"get_weapon":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Trench pikes, billhooks, spears and other long polearms are excellent defensive weapons, but are cumbersome and heavy."}],"options":[],"keywords":["kw_cumbersome","kw_shieldcombo","kw_block"],"modifiers":[]},{"id":"eq_trenchshield","name":"Trench Shield","source":"core","tags":{"trait":true,"shield":true},"category":"shield","distance":null,"stats":{"hands_melee":1,"hands_ranged":1},"contextdata":{"upgrade_stat":{"upgrades":[{"stat":"armour","value":-1}]},"injury_flat_mod":{"modifiers":[-1]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Shields used in trench warfare are made of steel reinforced with orichalcum to allow them to withstand even high-calibre bullets, or from metal mined from Infernal bedrock and shaped in the armouries of Pandemonium, the capital of Hell."}],"options":[],"keywords":[],"modifiers":[]},{"id":"eq_swordaxe","name":"Sword / Axe","source":"core","tags":{"action":true,"weapon":true},"category":"melee","distance":null,"stats":{"hands_melee":1,"melee":true},"contextdata":{"get_weapon":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Because of the martial traditions of many proud nations and due to the advances in armour technology, swords and axes are extremely popular, especially amongst elite units and officers. They are supremely useful for finishing off downed opponents and causing profusely bleeding wounds."}],"options":[],"keywords":["kw_critical"],"modifiers":[]},{"id":"eq_pistolrevolver","name":"Pistol / Revolver","source":"core","tags":{"action":true,"weapon":true,"pistol":true},"category":"ranged","distance":12,"stats":{"hands_ranged":1,"ranged":true,"melee":true},"contextdata":{"get_weapon":{},"off_hand_functional":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Pistols come in a staggering variety, ranging from revolvers to semi-automatic pistols. Heretic forges produce their own, often highly elaborate sidearms. They see extensive use in close-quarter combat."}],"options":[],"keywords":["kw_pistol"],"modifiers":[]},{"id":"eq_greatswordaxe","name":"Greatsword / Greataxe","source":"core","tags":{"action":true,"weapon":true},"category":"melee","distance":null,"stats":{"hands_melee":2,"melee":true},"contextdata":{"get_weapon":{},"injury_dice_mod":{"modifiers":[1]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Claymores, Zweih\xe4nders and even huge battle axes are used in the trenches when bullets fail to stop quick or well-armoured targets. The strikes from these weapons can easily lop off limbs and heads."}],"options":[],"keywords":["kw_critical","kw_heavy"],"modifiers":[]},{"id":"eq_mamlukgreatsword","name":"Mamluk Greatsword","source":"core","tags":{"action":true,"weapon":true},"category":"melee","distance":null,"stats":{"hands_melee":2,"melee":true},"contextdata":{"get_weapon":{},"injury_dice_mod":{"modifiers":[1]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Claymore, Zweihanders and even huge battle axes are used in the trenches when bullets fail to stop quick or well-armoured targets. The strikes from these weapons can easily lop off limbs and heads."}],"options":[],"keywords":["kw_critical"]},{"id":"eq_siegejezzail","name":"Siege Jezzail","source":"core","tags":{"action":true,"weapon":true,"eq_alchemicalammunition":true,"jezzail":true},"category":"ranged","distance":30,"stats":{"hands_ranged":2,"ranged":true},"contextdata":{"get_weapon":{},"injury_dice_mod":{"modifiers":[1]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Heavier version of the standard jezzail. It is a large weapon with a shot of lead or iron weighing as much as four pounds, designed to take out even the most powerful enemies with a single shot. Azebs armed with these weapons use tripod stakes when firing them, but the mighty Janissaries often use them as their standard service gun."}],"options":[],"keywords":["kw_heavy"]},{"id":"eq_musket","name":"Musket","source":"core","tags":{"action":true,"weapon":true},"category":"ranged","distance":18,"stats":{"hands_ranged":2,"ranged":true},"contextdata":{"get_weapon":{},"injury_dice_mod":{"modifiers":[-1]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"A primitive weapon from a bygone age, the musket is a smooth bore long rifle that shoots lead balls. It still sees widespread use due to its simple construction and low price."}],"options":[],"keywords":["kw_bayonetlug"],"modifiers":[]},{"id":"eq_shotgun","name":"Shotgun","source":"core","tags":{"action":true,"weapon":true},"category":"ranged","distance":12,"stats":{"hands_ranged":2,"ranged":true},"contextdata":{"get_weapon":{},"plus_dice":{"val":[1]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Short-barrelled pump action shotgun loaded with six rounds containing antimony hardened 00 buckshot, the combat shotgun is ideal for short-range engagements, clearing trenches and taking out lightly-armoured infantry. Often featuring stocks made of walnut or other rare wood, it is a custom of the troops to decorate these arms with carvings and inscriptions."}],"options":[],"keywords":["kw_bayonetlug","kw_shieldcombo","kw_shotgun"],"modifiers":[]},{"id":"eq_alaybozan","name":"Alaybozan","source":"core","tags":{"action":true,"weapon":true,"eq_alchemicalammunition":true},"category":"ranged","distance":12,"stats":{"hands_ranged":2,"ranged":true},"contextdata":{"get_weapon":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"This blunderbuss is based on the traditional design of tribal warriors and modernised by the foundries of the Sultanate. It has proven its worth as the preferred weapon of the Sapper Corps, who often fight in close quarters. It shoots a hail of lead bullets and iron shrapnel."}],"options":[],"keywords":["kw_shrapnel","kw_shieldcombo"],"modifiers":[]},{"id":"eq_sniperrifle","name":"Sniper Rifle","source":"core","tags":{"action":true,"weapon":true,"rifle":true},"category":"ranged","distance":48,"stats":{"hands_ranged":2,"ranged":true},"contextdata":{"get_weapon":{},"plus_dice":{"val":[1]}},"description":[{"tags":{"desc_type":"paragraph"},"content":"This weapon rolls attacks with +1 DICE. On a Critical attack roll, this weapon ignores armour. If this model is equipped with a Scope, this weapon ignores the penalty for Long Range.","glossary":[{"val":"+1 DICE","id":"kw_plusdice1"}]}],"lore":[{"tags":{"desc_type":"italic"},"content":"A sniper rifle is a high-precision, long-range rifle, widely used in the trenches to pick off high value targets such as officers, sappers and artillery crews. Expensive and rare, they are commonly given to the best marksmen and sharpshooters of the warband."}],"options":[],"keywords":["kw_riskyaction","kw_critical"],"modifiers":[],"abilities":["ab_bullseye"]},{"id":"eq_grenades","name":"Frag Grenades","source":"core","tags":{"action":true,"weapon":true,"grenade":true},"category":"grenade","distance":8,"stats":{"ranged":true},"contextdata":{"get_weapon":{},"blast_mod":{"modifiers":[2]},"ignore_mod":{"modifiers":["cover","long_range"]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Fragmentation grenades or hand bombs are a staple of trench warfare. Usually referred to as frag grenades, they can kill the enemy underground or behind cover. They can also force the enemy into the open, providing targets for rifle and machine gun fire."}],"options":[],"keywords":["kw_grenade","kw_assault","kw_shrapnel"],"modifiers":[]},{"id":"eq_incendiarygrenades","name":"Incendiary Grenades","source":"core","tags":{"action":true,"weapon":true,"grenade":true},"category":"grenade","distance":8,"stats":{"ranged":true},"contextdata":{"get_weapon":{},"ignore_mod":{"modifiers":["cover","long_range"]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Incendiary grenades can set their target alight with sulphur, phosphorous or flammable gas captured from the Lake of Fire in the Seventh Circle of Hell."}],"options":[],"keywords":["kw_grenade","kw_assault","kw_fire"],"modifiers":[],"abilities":["ab_liquidfire"]},{"id":"eq_machinegun","name":"Machine Gun","source":"core","tags":{"action":true,"weapon":true},"category":"ranged","distance":36,"stats":{"hands_ranged":2,"ranged":true},"contextdata":{"get_weapon":{},"automatic_mod":{"val":[3]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Machine guns are lethal fully-automatic firearms, capable of mowing down entire ranks of infantry from afar. The firing rate depends on the lock assembly used but averages 500 rounds per minute."}],"options":[],"keywords":["kw_heavy","kw_reload"],"modifiers":[]},{"id":"eq_flamethrower","name":"Flamethrower","source":"core","tags":{"action":true,"weapon":true},"category":"ranged","distance":8,"stats":{"hands_ranged":2,"ranged":true},"contextdata":{"get_weapon":{},"ignore_mod":{"modifiers":["armour"]},"injury_dice_mod":{"modifiers":[-1]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"A flamethrower is a terrifying Weapon capable of projecting great streams of fire and flammable liquids at a distance. It is ideal for clearing bunkers, trenches and other fortifications, killing in a most horrific way. Consequently, it is greatly favoured by the Heretic forces."}],"options":[],"keywords":["kw_fire","kw_flamethrower"],"modifiers":[]},{"id":"eq_muradbombard","name":"MURAD Bombard","source":"core","tags":{"action":true,"weapon":true,"brazen_bull":true},"category":"ranged","distance":36,"stats":{"hands_ranged":1,"ranged":true},"contextdata":{"get_weapon":{},"blast_mod":{"modifiers":[3]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Named after the great Sultan who commissioned the first of these weapons to defend the Iron Wall, this mighty bombard is used to disrupt advancing enemy formations. The echo of its blast recites the 99 names of Allah, throwing even the greatest of warriors to ground like chaff."}],"options":[],"keywords":["kw_heavy","kw_scatter"],"abilities":["ab_echoingblast"]},{"id":"eq_flamecannon","name":"Flame Cannon","source":"core","tags":{"action":true,"weapon":true,"brazen_bull":true},"category":"ranged","distance":12,"stats":{"hands_ranged":1,"ranged":true},"contextdata":{"get_weapon":{},"auto_hit":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"A great cannon that shoots a stream of alchemical fire with tremendous force. It has a tendency to overheat and ignite the skin of its artillery crew, but the mighty Brazen Bulls use them as mere handguns. The secret formula used for the fuel of the flame cannons was gleaned from the ruins of lost Constantinople, and is commonly known as Greek fire."}],"options":[],"keywords":["kw_heavy","kw_fire","kw_ignorearmour"],"abilities":["ab_greekfire"]},{"id":"eq_knifedagger","name":"Trench Knife","source":"core","tags":{"action":true,"weapon":true},"category":"melee","distance":null,"stats":{"hands_melee":1,"melee":true},"contextdata":{"get_weapon":{},"minus_dice":{"val":[1]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Virtually all soldiers carry a trench knife, dagger or other kind of blade for close quarter engagements. It may lack the devastating power of a great maul or other heavier melee weapons, but this humble weapon has taken countless lives during the Great War."}],"options":[],"keywords":[],"modifiers":[]},{"id":"eq_bayonet","name":"Bayonet","source":"core","tags":{"action":true,"weapon":true,"bayonet_lug":true},"category":"melee","distance":null,"stats":{"hands_melee":2,"melee":true},"contextdata":{"get_weapon":{},"ignore_count":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Bayonets are blades in the form of spikes or daggers that can be fixed to the tip of a firearm and used in melee combat."}],"options":[],"keywords":["kw_cumbersome","kw_shieldcombo"],"modifiers":[]},{"id":"eq_trenchclub","name":"Trench Club","source":"core","tags":{"action":true,"weapon":true},"category":"melee","distance":null,"stats":{"hands_melee":1,"melee":true},"contextdata":{"get_weapon":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Trench Clubs are one of the most common weapons of the Great War, as meleecombat is frequent and brutal. Usually made of wood with a metal tip from iron, lead or steel, trench clubs often feature spikes and hobnails. Most designs have some form of cord or leather strap at the end to wrap around the user\u2019s wrist."}],"options":[],"keywords":[],"modifiers":[]},{"id":"eq_doublehandedbluntweapon","name":"Great Hammer/Maul","source":"core","tags":{"action":true,"weapon":true},"category":"melee","distance":null,"stats":{"hands_melee":2,"melee":true},"contextdata":{"get_weapon":{},"injury_flat_mod":{"modifiers":[1]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"These are large, cumbersome weapons, often made from sturdy wood with a metal tip of steel, lead or iron of Tartarus. It takes great strength to fight with it for any length of time. They are especially suited for attacking armoured targets."}],"options":[],"keywords":["kw_heavy"],"modifiers":[]},{"id":"eq_halberdgun","name":"Halberd-Gun","source":"core","tags":{"action":true,"weapon":true,"eq_alchemicalammunition":true},"category":"melee","distance":24,"stats":{"hands_melee":2,"ranged":true,"melee":true},"contextdata":{"get_weapon":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"An invention of the House of Wisdom, this weapon acts both as a symbol of high rank and an excellent weapon in combat."}],"options":[],"keywords":["kw_assault","kw_cumbersome","kw_block"],"modifiers":[]},{"id":"eq_titanzulfiqar","name":"Titan Zulfiqar","source":"core","tags":{"action":true,"weapon":true,"brazen_bull":true},"category":"melee","distance":null,"stats":{"hands_melee":1,"melee":true},"contextdata":{"get_weapon":{},"injury_flat_mod":{"modifiers":[2]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"This twin-tongued great sword can weigh up to 300 pounds, only the mighty Brazen Bulls can even lift this monstrous blade, let alone wield it in combat. Its sheer weight and mono-molecule sharpness cuts through even the thickest armour when swung by the superhuman strength of the Takwin monstrosities."}],"options":[],"keywords":["kw_heavy","kw_critical"]},{"id":"eq_assassinsdagger","name":"Assassin\'s Dagger","source":"core","tags":{"action":true,"weapon":true},"category":"melee","distance":null,"stats":{"hands_melee":1,"melee":true},"contextdata":{"get_weapon":{},"injury_flat_mod":{"modifiers":[1]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"The blades of the Assassins are imbued with deadly venom. In chambers deep below the surface, generations of young assassins are raised in the dark, fed a diet of scorpions, frogs, deadly mushrooms and even stranger, more noxious things. Generation by generation their tolerance grows. The corrupted blood of these willing vessels is drawn and smelted into toxic iron. The iron is forged into blades, with deadly spells of slaying layered into each fold of the envenomed metal. Thus the blood of the first generation of Assassins lives on, growing more potent with each generation."}],"options":[],"keywords":["kw_critical"],"abilities":["ab_slashingattack"]},{"id":"eq_standardarmour","name":"Standard Armour","source":"core","tags":{"trait":true,"armour":true},"category":"armour","distance":null,"stats":{},"contextdata":{"upgrade_stat":{"upgrades":[{"stat":"armour","value":-1}]},"injury_flat_mod":{"modifiers":[-1]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"With the advancements in metallurgy and technology, both Faithful and Heretic armies are well-equipped with suits of alloy armour that can withstand an impact from a bullet or turn aside the sharpest of blades. Standard armour is usually massproduced, but highly effective even against high-calibre weapons."}],"options":[],"keywords":[],"modifiers":[]},{"id":"eq_alchemistarmour","name":"Alchemist Armour","source":"core","tags":{"trait":true,"armour":true},"category":"armour","distance":null,"stats":{},"contextdata":{"upgrade_stat":{"upgrades":[{"stat":"armour","value":-2}]},"ignore_element":{"element":["kw_gas","kw_fire"]},"injury_flat_mod":{"modifiers":[-2]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"A suit of armour that protects against almost all harm. An essential tool of Alchemists\u2019 craft, festooned with the Seals of Solomon, it grants mastery over the elements of Creation and shields the wearer from the devices of Hell."}],"options":[],"keywords":[],"abilities":["ab_protectionfromharm"]},{"id":"eq_gasmask","name":"Gas Mask","source":"core","tags":{"trait":true},"category":"equipment","distance":null,"stats":{},"contextdata":{"ignore_element":{"element":["kw_gas"]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Mustard gas, phosgene, chlorine as well as noxious fumes from the bolgias of Hell plague the battlefield. The gas mask allows soldiers to withstand such attacks."}],"options":[],"keywords":[],"modifiers":[]},{"id":"eq_maridshovel","name":"Marid Shovel","source":"core","tags":{"trait":true,"action":true,"weapon":true},"category":"equipment","distance":null,"stats":{"hands_melee":0,"melee":true},"contextdata":{"get_weapon":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"This enormous shovel is made from alchemical bronze which makes it almost indestructible. Brazen Bulls use it for public works (such as digging canals, foundations of buildings and mining) during peacetime, while at war it is used for digging trenches, ditches and bunkers."}],"options":[],"keywords":["kw_heavy"],"abilities":["ab_shovel"]},{"id":"eq_mountaineerkit","name":"Mountaineer Kit","source":"core","tags":{"trait":true},"category":"equipment","distance":null,"stats":{},"contextdata":{},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"This kit includes ropes, carabiners, slings, mountaineering harness and pitons to aid a soldier in overcoming almost any vertical obstacle."}],"options":[],"keywords":[],"modifiers":[],"abilities":["ab_mountaineer"]},{"id":"eq_medikit","name":"Medi-Kit","source":"core","tags":{"action":true,"heal":true},"category":"equipment","distance":null,"stats":{},"contextdata":{},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Battlefield first aid has brought many soldiers back from the brink of death. Blessed ointments can seal fatal wounds completely, while the black blood of demons used by twisted Heretic medics allows mangled troops to return to the fray."}],"options":[],"keywords":[],"modifiers":[],"abilities":["ab_treat"]},{"id":"eq_musicalinstrument","name":"Musical Instrument","source":"core","tags":{"trait":true,"instrument":true},"category":"equipment","distance":null,"stats":{"hands_melee":1,"hands_ranged":1},"contextdata":{},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Horns, drums, trumpets, whistles, bagpipes and many other types of instruments are used extensively in the battles of the Great War. They can bolster the hearts of those facing the horrors of Hell, or they can recite terrifying hymns praising the lords of the Inferno!"}],"options":[],"keywords":["kw_held"],"modifiers":[],"abilities":["ab_fanfare"]},{"id":"eq_angelicinstrument","name":"Angelic Instrument","source":"core","tags":{"trait":true,"instrument":true},"category":"equipment","distance":null,"stats":{"hands_melee":1,"hands_ranged":1},"contextdata":{},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Horns, drums, trumpets, whistles, bagpipes and many other types of angelic instruments are used extensively in the battles of the Great War. They can bolster the hearts of those facing the horrors of Hell, or they can recite terrifying hymns praising the lords of the Inferno!"}],"options":[],"keywords":["kw_held"],"modifiers":[],"abilities":["ab_angelicfanfare"]},{"id":"eq_cloakofalamut","name":"Cloak of Alamut","source":"core","tags":{"trait":true},"category":"equipment","distance":null,"stats":{},"contextdata":{},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Created by the secret arts of the Assassin sect aeons ago, this cloak bends the light so that its wearer looks almost indistinguishable against any surface when they are still. It is this masterwork of Alamut that has led to tales of a fabled Cloak of Invisibility in the legends of the Sultanate."}],"options":[],"keywords":[],"abilities":["ab_blendin"]},{"id":"eq_troopflag","name":"Troop Flag","source":"core","tags":{"trait":true,"flag":true},"category":"equipment","distance":null,"stats":{"hands_melee":1,"hands_ranged":1},"contextdata":{"warband_wide":{},"keyword_add":{"value":["kw_leader"]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Most warbands and units carry banners, flags, standards, pennants or other symbols to rally the troops."}],"options":[],"keywords":["kw_held","kw_leader"],"modifiers":[]},{"id":"eq_redbanner","name":"Red Banner","source":"westfalia","tags":{"trait":true,"flag":true},"category":"equipment","distance":null,"stats":{"hands_melee":1,"hands_ranged":1},"contextdata":{"warband_wide":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"The Red Brigade carries a patched red standard into battle, made from the blood-soaked cloak of St. Ernest. No soldier of the Brigade will ever leave the battle as long as this holy banner is still flying. When the last survivor of the Brigade is sent back to New Antioch, they take this flag with them."}],"options":[],"keywords":["kw_block","kw_held"],"abilities":["ab_bloodofmartyrs"]},{"id":"eq_atonementbell","name":"Atonement Bell","source":"westfalia","tags":{"trait":true},"category":"melee","distance":null,"stats":{"hands_melee":1,"hands_ranged":1},"contextdata":{},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"A Crimson Communicant can channel the sorrow of the Second Meta-Christ through the sound of the bell, causing all to flee in despair."}],"options":[],"keywords":["kw_held"],"abilities":["ab_channelledsorrow"]},{"id":"eq_bloodcloak","name":"Blood Cloak","source":"westfalia","tags":{"trait":true},"category":"equipment","distance":null,"stats":{},"contextdata":{"warband_wide":{},"keyword_mod":{"mods":[{"type":"add","value":"kw_skirmisher"}]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"These cloaks are given to the veteran members of the Brigade in recognition for surviving enemy assaults. They make the outline of the warrior hidden in a blood-red haze, and many an enemy charge has been confounded by the crimson mist."}],"options":[],"keywords":["kw_skirmisher"]},{"id":"eq_binoculars","name":"Binoculars","source":"core","tags":{"trait":true},"category":"equipment","distance":null,"stats":{},"contextdata":{},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"It is quite common for officers to carry finely-crafted battlefield binoculars to survey the land ahead, spot hidden enemy troops and observe any sign of movement."}],"options":[],"keywords":[],"modifiers":[],"abilities":["ab_binoculars"]},{"id":"eq_holyrelic","name":"Holy Relic","source":"core","tags":{"trait":true},"category":"equipment","distance":null,"stats":{},"contextdata":{"blessed_mod":{"modifiers":[1]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Due to the threat to all Creation, the churches, cathedrals and basilicas have emptied their reliquaries and distributed their relics to the frontline troops to aid them in their battle against the damned."}],"options":[],"keywords":[],"modifiers":[]},{"id":"eq_goldenkhanjar","name":"Golden Khanjar","source":"core","tags":{"action":true,"weapon":true},"category":"melee","distance":null,"stats":{"hands_melee":1,"melee":true},"contextdata":{"get_weapon":{},"injury_flat_mod":{"modifiers":[1]},"cleave_mod":{"modifiers":[2]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Placed in the hand of an especially favoured killer by the Old Man of the Mountain himself, these wickedly curved daggers gleam as if they were made of gold, but instead they are crystallised poison, and allow their wielder to attack twice in the same instance of time. Only the Master of Alamut himself knows the secret of making these blades."}],"options":[],"keywords":[],"abilities":[]},{"id":"eq_bowofalamut","name":"Bow of Alamut","source":"core","tags":{"action":true,"weapon":true},"category":"ranged","distance":40,"stats":{"hands_ranged":2,"ranged":true},"contextdata":{"get_weapon":{},"ignore_armour":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"This terrifying double-stringed bow looses its deadly barbs through both time and space. Its arrows can reach impossible distances and pass through armour by flickering through time, leaving behind a temporal slipstream that the Assassin can travel through in an eyeblink."},{"tags":{"desc_type":"italic"},"content":"These bows are some of the greatest treasures of Alamut, and only six are said to exist in the secret armoury of the Old Man of the Mountain. The trees producing the wood for these bows are planted into the skulls of ancient Assassins in the Garden of Alamut, passing their mystic powers on to the wood."}],"options":[],"keywords":["kw_critical","kw_ignorearmour"],"abilities":["ab_temporalslipstream"]},{"id":"eq_hashashinleaf","name":"Hashashin Leaf","source":"core","tags":{"trait":true},"category":"equipment","distance":null,"stats":{},"contextdata":{},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"These leaves from the secret Garden of Alamut enhance the strength of anyone who eats them threefold. Once the effect wears off the subject will suffer from agonising muscle tears and torn ligaments, but many of the Order of Assassins feel that this is a small price to pay for being able to use deadlier weapons."}],"options":[],"keywords":["kw_consumable"],"abilities":["ab_enhancedstrength"]},{"id":"eq_sniperscope","name":"Sniper Scope","source":"core","tags":{"trait":true},"category":"equipment","distance":null,"stats":{},"contextdata":{},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"A Sniper Scope is a type of telescope mounted on a rifle or similar weapon. Some feature night-vision enhancements and superb, adjustable crystal lenses, while those crafted by the foundry-monastery of Saint Sebastian for Sniper Priests have an in-built reliquary instead."}],"options":[],"keywords":[],"abilities":["ab_enhancedaccuracy"]},{"id":"eq_kilij","name":"Kilij","source":"core","tags":{"action":true,"weapon":true},"category":"melee","distance":null,"stats":{"hands_melee":1,"melee":true},"contextdata":{"get_weapon":{},"injury_flat_mod":{"modifiers":[1]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Forged for warriors sworn to the martial ideals of fur\u016bs\u012byah, these curved swords are honed to unsurpassed sharpness.Treated by the Alchemists of the House of Wisdom, they are imbued with the power to cut through even the Infernal Tartarus armour."}],"options":[],"keywords":["kw_critical"],"modifiers":[]},{"id":"eq_rocketpropelledgrenade","name":"Rocket-Propelled Grenade","source":"core","tags":{"action":true,"weapon":true},"category":"special","distance":36,"stats":{"ranged":true},"contextdata":{"get_weapon":{"ignore":true},"ignore_armour":{},"injury_dice_mod":{"modifiers":[1]},"eq_limit":{"count":1,"id":"eq_rocketpropelledgrenade"}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"These shoulder-fired weapons launch a rocket with an explosive warhead. They are a recent invention, and thus expensive and difficult to manufacture."}],"options":[],"keywords":["kw_ignorearmour","kw_consumable","kw_reload"],"abilities":["ab_disposablerocket"]},{"id":"eq_masterworksjezzail","name":"Masterworks Jezzail","source":"core","tags":{"action":true,"weapon":true,"eq_alchemicalammunition":true,"jezzail":true},"category":"ranged","distance":36,"stats":{"hands_ranged":2,"ranged":true},"contextdata":{"get_weapon":{},"plus_dice":{"val":[1]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"It takes a year of effort from one of the Sultan\u2019s own gunsmiths to craft these magnificent longarms. Its bullets are enhanced to seek out new Unbelievers if they penetrate their first target."}],"options":[],"keywords":["kw_critical"],"modifiers":[],"abilities":["ab_enhancedbullets"]},{"id":"eq_damascusarmour","name":"Damascus Armour","source":"core","tags":{"trait":true,"armour":true},"category":"armour","distance":null,"stats":{},"contextdata":{"upgrade_stat":{"upgrades":[{"stat":"armour","value":-2}]},"super_armour":{},"unique":{},"unremovable":{},"add_scars":{"value":1},"injury_flat_mod":{"modifiers":[-2]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"No armour more splendid exists within the Sultanate than this magnificent chain mail, forged from the very Iron Wall itself by the smiths of New Damascus. They are given as a reward to the greatest warriors for their service on the battlefield by the Sultan\u2019s hand alone. Each ring of this armour is inscribed with a verse from the Holy Quran and is thus utterly unbreakable."}],"options":[],"keywords":["kw_impervious"],"modifiers":[],"abilities":["ab_inspiringgift"]},{"id":"eq_knighthood","name":"Knighthood","source":"core","tags":{"trait":true},"category":"special","distance":null,"stats":{},"contextdata":{"warband_wide":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"War is the crucible that bestows honorifics more rapidly than any other endeavour. Those who achieve great fame may be granted ranks such as baron, marquis, bishop or other prestigious titles. Within the taifas of the Iron Sultanate, there are many titles to be had, from chelebi knight to the mighty sheik. Hell too has its own twisted ranks of nobility, where those who commit the vilest deeds are bestowed a rank amongst the Infernal principalities."}],"options":[],"keywords":[],"modifiers":[],"abilities":["ab_famousdeed"]},{"id":"eq_fieldhospital","name":"Field Hospital","source":"core","tags":{"trait":true},"category":"special","distance":null,"stats":{},"contextdata":{"warband_wide":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Field Hospitals have saved many warriors in the immediate aftermath of a bloody battle. Though simpler than the mighty hospices of New Antioch, Athens or New Damascus, they are still highly sought-after by successful warband leaders."}],"options":[],"keywords":[],"modifiers":[],"abilities":["ab_fieldhospital"]},{"id":"eq_sultanategrandcannon","name":"Mobile Sultanate Grand Cannon","source":"core","tags":{"action":true,"weapon":true,"brazen_bull":true},"category":"ranged","distance":48,"stats":{"hands_ranged":1,"ranged":true},"contextdata":{"get_weapon":{},"ignore_armour":{},"stationary":{},"injury_dice_mod":{"modifiers":[2]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Mounted on the Great Iron Wall, these are the main artillery that the Sultanate produces in vast numbers. Normally fixed in place, a variant suited for the massive hands of the Brazen Bulls has been designed so the living field artillery of the Padishah can take on truly heavily armoured enemies and vehicles."}],"options":[],"keywords":["kw_heavy","kw_ignorearmour"],"abilities":["ab_brazenbullgrandcannon","ab_unstoppableobject"]},{"id":"eq_sultanategrandcannondefenders","name":"Sultanate Grand Cannon","source":"core","tags":{"action":true,"weapon":true,"brazen_bull":true},"category":"ranged","distance":48,"stats":{"hands_ranged":1,"ranged":true},"contextdata":{"get_weapon":{},"ignore_armour":{},"stationary":{},"injury_dice_mod":{"modifiers":[2]}},"description":[{"tags":{"desc_type":"paragraph"},"content":"When a Grand Cannon is added to a Defender of the Iron Wall Warband it must either be given to a Brazen Bull that is already part of the Warband, or added to the Armoury on the Warband\u2019s roster sheet as a Grand Cannon gun battery. "},{"tags":{"desc_type":"paragraph"},"content":"A Grand Cannon that is included in the Armoury on a Warband\u2019s roster as a gun battery is represented by a terrain piece that is at least \xbd\u201d high and which is mounted on a 50mm base. It is Impassable terrain."}],"lore":[{"tags":{"desc_type":"italic"},"content":"Mounted on the Great Iron Wall, these are the main artillery that the Sultanate produces in vast numbers. Normally fixed in place, a variant suited for the massive hands of the Brazen Bulls has been designed so the living field artillery of the Padishah can take on truly heavily armoured enemies and vehicles."}],"options":[],"keywords":["kw_heavy","kw_ignorearmour","kw_deployable"],"abilities":["ab_brazenbullgrandcannon","ab_unstoppableobject","ab_deployingthegunbattery","ab_firingagunbattery"]},{"id":"eq_fireshield","name":"Fire Shield","source":"core","tags":{"trait":true,"shield":true},"category":"shield","distance":null,"stats":{"hands_melee":1,"hands_ranged":1},"contextdata":{"upgrade_stat":{"upgrades":[{"stat":"armour","value":-1}]},"injury_flat_mod":{"modifiers":[-1]},"ignore_element":{"element":["kw_fire"]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"An invention of the al-Jazari School of Engineering within the House of Wisdom, this shield is treated with an alchemical formula that makes it highly resistant to fire weapons. It has proven its value in many desperate battles against the flame-wielding Heretics."}],"options":[],"keywords":[],"abilities":["ab_fireshield"]},{"id":"eq_exlixerofalkhidr","name":"Elixer of Al-Khidr","source":"core","tags":{"trait":true},"category":"equipment","distance":null,"stats":{},"contextdata":{"keyword_add":{"value":["kw_tough"]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"This is an extraordinary creation of the House of Wisdom. It is said that within the Sultanate\u2019s gardens lies the hidden Fountain of Life, whose waters are used as an ingredient in this powerful alchemical formula."}],"options":[],"keywords":["kw_consumable"],"abilities":["ab_fountainoflife"]},{"id":"eq_ironcapriote","name":"Iron Capirote","source":"core","tags":{"trait":true,"headgear":true},"category":"equipment","distance":null,"stats":{},"contextdata":{"ignore_element":{"element":["kw_shrapnel"]},"keyword_ignore":{"value":["kw_fear"]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"A conical helmet blessed by the Church and often containing a fragment of a relic. Iron capirotes shield their wearers from the psychological horror of war and allow them to face creatures from the pits of Hell unflinchingly."}],"options":[],"keywords":[],"modifiers":[]},{"id":"eq_molotovcocktail","name":"Molotov Cocktail","source":"core","tags":{"action":true,"weapon":true,"grenade":true},"category":"grenade","distance":6,"stats":{"ranged":true},"contextdata":{"get_weapon":{},"ignore_mod":{"modifiers":["cover","long_range"]},"injury_dice_mod":{"modifiers":[-1]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Developed on the desperate Finnish battle frontier against ice demons, this improvised weapon consists of a glass bottle containing a flammable substance such as gasoline, alcohol or a napalm-like mixture plus a source of ignition."}],"options":[],"keywords":["kw_fire","kw_assault","kw_grenade"],"modifiers":[],"abilities":["ab_liquidfire"]},{"id":"eq_heavyshotgun","name":"Heavy Shotgun","source":"core","tags":{"action":true,"weapon":true},"category":"ranged","distance":12,"stats":{"hands_ranged":2,"ranged":true},"contextdata":{"get_weapon":{},"injury_dice_mod":{"modifiers":[1]},"plus_dice":{"val":[1]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"This massive 8 bore shotgun is used to take down extremely powerful and large opponents at short range. It is known as a \u201cWolf-Killer\u201d in New Antioch as it is the weapon favoured by the soldiery of the Duke to take down the Heretic War Wolf Assault Beasts. Heavy shotguns use tungsten-orichalcum alloy shot which explains their enormous stopping power at short ranges."}],"options":[],"keywords":["kw_shieldcombo","kw_heavy","kw_shotgun"],"modifiers":[],"abilities":["ab_tungstenorichalcumalloyshot"]},{"id":"eq_ironwallkalkan","name":"Iron Wall Kalkan","source":"core","tags":{"trait":true,"shield":true,"brazen_bull":true},"category":"shield","distance":null,"stats":{"hands_melee":1,"hands_ranged":1},"contextdata":{},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"It is rare that even the greatest artillery bombardments manage to dent the Invincible Iron Wall, but sometimes when the most powerful of enemy Sorcerers enchant Heretic artillery ammunition, a sliver of the Wall is splintered. Such shards and slivers of the divine metal are carefully gathered by the Alchemists and incorporated into mighty shields to be used solely by the Brazen Bulls."}],"options":[],"keywords":["kw_cover"],"abilities":["ab_othismos"]},{"id":"eq_bannerofdesertwind","name":"Banner of Desert Wind","source":"core","tags":{"trait":true,"flag":true},"category":"equipment","distance":null,"stats":{"hands_melee":1,"hands_ranged":1},"contextdata":{"warband_wide":{}},"description":[],"lore":[{"tags":{"desc_type":"paragraph"},"content":"The alchemical compounds woven into this banner attract desert winds that make it impossible for flying machines or winged creatures to overcome the Iron Wall."}],"options":[],"keywords":["kw_held","kw_leader"],"abilities":["ab_sandstorm"]},{"id":"eq_explosivecharges","name":"Explosive Charges","source":"core","tags":{"action":true},"category":"equipment","distance":null,"stats":{},"contextdata":{"warband_wide":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Sultanate Sapper Corps specialise in using explosive charges to overcome defended enemy positions such as walls, bunkers, casemates and pillboxes. Experts at timing the fuses of their bombs, many a battle has been turned thanks to a well-timed blast."}],"options":[],"keywords":["kw_consumable"],"abilities":["ab_hiddenexplosives","ab_detonatingtheexplosives"]},{"id":"eq_anqaguard","name":"Anqa Guard","source":"core","tags":{"action":true},"category":"equipment","distance":null,"stats":{},"contextdata":{"warband_wide":{},"stationary":{}},"description":[{"tags":{"desc_type":"paragraph"},"content":"An Anq\u0101 Guard is represented by a terrain piece that is about \xbd\u201d high and which is mounted on a 40mm base. It is Impassable terrain."}],"lore":[{"tags":{"desc_type":"italic"},"content":"Shaped into the likeness of the wondrous anq\u0101 bird, and created by the Imperial School of Military Engineering in association with the House of Wisdom, these movable defensive walls are lightweight and extraordinarily resistant to damage. Their resilience comes from a richly-decorated ceramic layer on their outer surface and a secret compound of ceramic and alchemical steel at its core. Each unit can be carried into battle on a Sapper\u2019s back. With the press of a single button, the guard spreads its wings wide, revealing a face of beautiful yet terrifying countenance."}],"options":[],"keywords":["kw_heavy","kw_deployable"],"abilities":["ab_prebattledeployment","ab_combatdeployment","ab_mobilecover"]},{"id":"eq_automaticpistol","name":"Automatic Pistol","source":"core","tags":{"action":true,"weapon":true,"pistol":true},"category":"ranged","distance":12,"stats":{"hands_ranged":1,"ranged":true,"melee":true},"contextdata":{"get_weapon":{},"off_hand_functional":{},"automatic_mod":{"val":[2]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Automatic pistols are symbols of prestige owing to their rarity and cost. They are excellent weapons when storming trenches or fighting in hand-to-hand combat. They boast a high rate of fire, though they can be hard to control even for the best sharpshooters since they usually lack a stock."}],"options":[],"keywords":["kw_assault","kw_pistol"],"modifiers":[]},{"id":"eq_boltactionrifle","name":"Bolt-Action Rifle","source":"core","tags":{"action":true,"weapon":true,"rifle":true},"category":"ranged","distance":24,"stats":{"hands_ranged":2,"ranged":true},"contextdata":{"get_weapon":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"The workhorse of the Great War. Sturdy, highly reliable and reasonably accurate, it is no surprise that most of the infantry of the Great War carry this battlefield classic."}],"options":[],"keywords":["kw_bayonetlug"],"modifiers":[]},{"id":"eq_semiautomaticrifle","name":"Semi-Automatic Rifle","source":"core","tags":{"action":true,"weapon":true,"rifle":true},"category":"ranged","distance":24,"stats":{"hands_ranged":2,"ranged":true},"contextdata":{"get_weapon":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Semi-automatic rifles are said to be an invention of Marbas, the Devil who holds great wisdom and knowledge in mechanical arts. They are excellent both at long range and in assault, combining accuracy and high rate of fire, though they are prone to jamming."}],"options":[],"keywords":["kw_bayonetlug","kw_assault"],"modifiers":[]},{"id":"eq_automaticrifle","name":"Automatic Rifle","source":"core","tags":{"action":true,"weapon":true,"rifle":true},"category":"ranged","distance":24,"stats":{"hands_ranged":2,"ranged":true},"contextdata":{"get_weapon":{},"automatic_mod":{"val":[2]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"A marvel of modern engineering, only a few prototypes exist. It has a high rate of fire and can be quickly re-loaded."}],"options":[],"keywords":["kw_bayonetlug","kw_assault"],"modifiers":[],"abilities":["ab_focusedfire"]},{"id":"eq_automaticshotgun","name":"Automatic Shotgun","source":"core","tags":{"action":true,"weapon":true},"category":"ranged","distance":12,"stats":{"hands_ranged":2,"ranged":true},"contextdata":{"get_weapon":{},"plus_dice":{"val":[1]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"This shotgun is equipped with an auto-loader, a recent invention by the Prussian engineering corps of K\xf6nigsberg. It is ideal for close quarter combat thanks to its high rate of power and accuracy. The technology has not been perfected, however, and sometimes leads to misfeeds and jams."}],"options":[],"keywords":["kw_bayonetlug","kw_shieldcombo","kw_assault","kw_shotgun"],"modifiers":[]},{"id":"eq_submachinegun","name":"Submachine Gun","source":"core","tags":{"action":true,"weapon":true},"category":"ranged","distance":16,"stats":{"hands_ranged":2,"ranged":true},"contextdata":{"get_weapon":{},"extra_attack":{"value":1}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"The submachine gun (or SMG) is a fully automatic firearm, trading lower penetration power and range for a much higher rate of fire. Ideal for short-range engagements, it is much sought-after by warbands despite its scarcity and high cost."}],"options":[],"keywords":["kw_assault","kw_bayonetlug","kw_shieldcombo"],"modifiers":[],"abilities":["ab_quickbursts"]},{"id":"eq_silenecedpistol","name":"Silenced Pistol","source":"core","tags":{"action":true,"weapon":true,"pistol":true},"category":"ranged","distance":12,"stats":{"hands_ranged":1,"ranged":true,"melee":true},"contextdata":{"get_weapon":{},"off_hand_functional":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"A sophisticated sidearm made of orichalcum or other holy metals, or from Infernal iron taken from the very prisons of Hell to muffle the wails of the damned. It is virtually silent and is excellent for ambushes or for shooting from behind cover."}],"options":[],"keywords":["kw_assault","kw_pistol"],"modifiers":[],"abilities":["ab_gunsilent"]},{"id":"eq_gasgrenades","name":"Gas Grenades","source":"core","tags":{"action":true,"weapon":true,"grenade":true},"category":"grenade","distance":8,"stats":{"ranged":true},"contextdata":{"get_weapon":{},"ignore_mod":{"modifiers":["cover","long_range"]},"injury_dice_mod":{"modifiers":[-1]},"blast_mod":{"modifiers":[3]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Gas grenades are insidious weapons, attacking the lungs and other internal organs with noxious fumes. Devil alchemists of the Fifth Circle are especially clever in creating these fiendish and hated weapons."}],"options":[],"keywords":["kw_grenade","kw_assault","kw_gas","kw_ignorearmour"],"modifiers":[]},{"id":"eq_grenadelauncher","name":"Grenade Launcher","source":"core","tags":{"action":true,"weapon":true},"category":"ranged","distance":36,"stats":{"hands_ranged":2,"ranged":true},"contextdata":{"get_weapon":{},"ignore_mod":{"modifiers":["cover"]},"blast_mod":{"modifiers":[3]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Modifications of great siege rifles designed to lob grenades over long distances."}],"options":[],"keywords":["kw_heavy","kw_shrapnel"],"modifiers":[]},{"id":"eq_gasgrenadelauncher","name":"Gas Grenade Launcher","source":"core","tags":{"action":true,"weapon":true},"category":"ranged","distance":36,"stats":{"hands_ranged":2,"ranged":true},"contextdata":{"get_weapon":{},"ignore_cover":{},"ignore_armour":{},"injury_dice_mod":{"modifiers":[-1]},"blast_mod":{"modifiers":[3]},"ignore_mod":{"modifiers":["cover"]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Modifications of great siege rifles designed to lob grenades over long distances, specially crafted by the servants of Mammon to best preserve loot."}],"options":[],"keywords":["kw_heavy","kw_gas","kw_ignorearmour"],"modifiers":["Ignore Cover","Ignore Armour","-1D to Injuries","Blast 3\\""]},{"id":"eq_satchelcharge","name":"Satchel Charge","source":"core","tags":{"action":true,"weapon":true,"grenade":true},"category":"grenade","distance":6,"stats":{"ranged":true},"contextdata":{"get_weapon":{},"ignore_mod":{"modifiers":["cover"]},"blast_mod":{"modifiers":[3]},"injury_dice_mod":{"modifiers":[1]},"activated":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Battlefield explosives designed to break apart enemy fortifications and to crack even the toughest of armour."}],"options":[],"keywords":["kw_heavy","kw_consumable","kw_grenade","kw_ignorearmour","kw_scatter"],"abilities":["ab_heavyexplosive"]},{"id":"eq_antimaterialrifle","name":"Anti-Materiel Rifle","source":"core","tags":{"action":true,"weapon":true,"rifle":true},"category":"ranged","distance":36,"stats":{"hands_ranged":2,"ranged":true},"contextdata":{"get_weapon":{},"ignore_armour":{},"ignore_mod":{"modifiers":["armour"]},"injury_dice_mod":{"modifiers":[1]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Enormous long rifles designed to take out heavily armoured targets, vehicles and strongpoints. With the powerful armour available to the armies of the Great war, these terrifying weapons are much in demand. A downside is their enormous weight and terrifying recoil, and thus they are most often used by Communicants or Anointed who possess the supernatural strength to wield such weapons."}],"options":[],"keywords":["kw_heavy","kw_critical"],"modifiers":[]},{"id":"eq_heavyflamethrower","name":"Heavy Flamethrower","source":"core","tags":{"action":true,"weapon":true},"category":"ranged","distance":10,"stats":{"hands_ranged":2,"ranged":true},"contextdata":{"get_weapon":{},"ignore_mod":{"modifiers":["armour"]},"automatic_mod":{"val":[2]},"injury_dice_mod":{"modifiers":[-1]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"These massive flamethrowers are normally mounted on armoured vehicles, but those possessing uncanny strength may use them as infantry weapons."}],"options":[],"keywords":["kw_fire","kw_heavy","kw_flamethrower"],"modifiers":[]},{"id":"eq_unarmed","name":"Unarmed","source":"core","tags":{"action":true,"weapon":true,"unarmed":true},"category":"melee","distance":null,"stats":{"melee":true},"contextdata":{"minus_dice":{"val":[1]},"get_weapon":{}},"description":[{"tags":{"desc_type":"paragraph"},"content":"Models suffer -1 DICE when fighting unarmed, both to see if the attack hits and when rolling on the Injury Chart. Note that you can never fight with unarmed as an Off-Hand weapon to get an additional attack in melee. These rules simply cover all instances where the model fights unarmed and has no other Melee Actions in their profile.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"}]}],"lore":[{"tags":{"desc_type":"italic"},"content":"Fighting unarmed in the Great War is nigh-suicidal, but some troops carry no melee weapons or their weapons have been lost in the heat of the battle. In such cases, a warrior is forced to defend themselves with fists, kicks and their bare teeth."}],"options":[],"keywords":[],"modifiers":[]},{"id":"eq_unarmed_nopenalty","name":"Unarmed","source":"core","tags":{"action":true,"weapon":true,"unarmed":true},"category":"melee","distance":null,"stats":{"melee":true},"contextdata":{"get_weapon":{}},"description":[{"tags":{"desc_type":"paragraph"},"content":"Note that you can never fight with unarmed as an Off-Hand weapon to get an additional attack in melee. These rules simply cover all instances where the model fights unarmed and has no other Melee Actions in their profile.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"}]}],"lore":[{"tags":{"desc_type":"italic"},"content":"Fighting unarmed in the Great War is nigh-suicidal, but some troops carry no melee weapons or their weapons have been lost in the heat of the battle. In such cases, a warrior is forced to defend themselves with fists, kicks and their bare teeth."}],"options":[],"keywords":[],"modifiers":[]},{"id":"eq_sacrificialknife","name":"Sacrificial Blade","source":"core","tags":{"action":true,"weapon":true},"category":"melee","distance":null,"stats":{"hands_melee":1,"melee":true},"contextdata":{"get_weapon":{},"injury_flat_mod":{"modifiers":[2]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Terrifying blades blessed by the hand of a greater devil, these knives are used in Heretic rituals to sacrifice captives to the dark powers of Hell. They simply need to touch their opponents to cause indescribable pain, and even the most minor wound often proves fatal from the agony alone. They are risky even to their wielders, as the merest scratch wounds friend and foe alike."}],"options":[],"keywords":["kw_riskyaction"],"modifiers":[]},{"id":"eq_blasphemousstaff","name":"Blasphemous Staff","source":"core","tags":{"action":true,"weapon":true},"category":"melee","distance":null,"stats":{"hands_melee":1,"melee":true},"contextdata":{"get_weapon":{},"choose_bonus_ability":{"restricted":["dash","attack"]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Crafted in mockery of the rod carried by the prophet Aaron, this evil staff unleashes searing hellfire, causing excruciating pain with the slightest touch."}],"options":[],"keywords":["kw_fire","kw_critical"],"abilities":["ab_evilpower"]},{"id":"eq_hellblade","name":"Hellblade","source":"core","tags":{"action":true,"weapon":true},"category":"melee","distance":null,"stats":{"hands_melee":2,"melee":true},"contextdata":{"get_weapon":{},"injury_dice_mod":{"modifiers":[1]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Crafted from iron ore from the mines of Dis in Inferno, this weapon burns with the unquenchable fires of Hell."}],"options":[],"keywords":["kw_fire"]},{"id":"eq_tartarusclaws","name":"Tartarus Claws","source":"core","tags":{"action":true,"weapon":true},"category":"melee","distance":null,"stats":{"hands_melee":2,"melee":true},"contextdata":{"cleave_mod":{"modifiers":[2]},"get_weapon":{},"off_hand_functional":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Made from severed hands of Malebranche, the Tartarus claws are granted by archdevils only to those whose hearts are blackened with the sin of Wrath."}],"options":[],"keywords":["kw_cumbersome","kw_critical"],"abilities":["ab_pairedweapon"]},{"id":"eq_antitankhammer","name":"Anti-Tank Hammer","source":"core","tags":{"action":true,"weapon":true},"category":"melee","distance":null,"stats":{"hands_melee":2,"melee":true},"contextdata":{"get_weapon":{},"injury_dice_mod":{"modifiers":[1]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"A polearm with a directional explosive mounted on its head. It is exceedingly good at taking out armoured targets but puts its user in grave danger."}],"options":[],"keywords":["kw_riskyaction","kw_critical","kw_ignorearmour"],"modifiers":[],"abilities":["ab_dangerous"]},{"id":"eq_scourgewhipflail","name":"Flail / Scourge","source":"core","tags":{"action":true,"weapon":true},"category":"melee","distance":null,"stats":{"hands_melee":1,"melee":true},"contextdata":{"get_weapon":{},"plus_dice":{"val":[1]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"The metal whips of the Church are supremely good at both instilling discipline in the ranks of the faithful and tormenting the heretics. Many devils also enjoy using these weapons due to the excruciating pain they inflict. These weapons are extremely difficult to dodge."}],"options":[],"keywords":[],"modifiers":[],"abilities":["ab_unwieldy"]},{"id":"eq_misericordia","name":"Misericordia","source":"core","tags":{"action":true,"weapon":true},"category":"melee","distance":null,"stats":{"hands_melee":1,"melee":true},"contextdata":{"get_weapon":{},"ignore_armour":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"The misericordia dagger is designed to put enemies out of their misery by finding chinks in the armour: eye slits, neck joints and every other vulnerable seam."}],"options":[],"keywords":[],"modifiers":[],"abilities":["ab_despatch"]},{"id":"eq_heavyballisticshield","name":"Heavy Ballistic Shield","source":"core","tags":{"trait":true,"shield":true},"category":"shield","distance":null,"stats":{"hands_melee":1,"hands_ranged":1},"contextdata":{"keyword_add":{"value":["kw_cover"]},"validate_final_unit_equipment":{"requirements_single":[{"id":"eq_machinearmour","value":true},{"id":"eq_highlandmachinearmour","value":true}]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"These massive shields are made of aramid fibre mesh and orichalcum steel alloy. They are so heavy that they can only be carried by Heavy Mechanized Infantry, and even then, they are too cumbersome to be used in fast-paced melee. They are mainly used for protection during their ponderous advance towards the enemy."}],"options":[],"keywords":["kw_cover","kw_shieldcombo"],"modifiers":[]},{"id":"eq_machinearmour","name":"Machine Armour","source":"core","tags":{"trait":true,"bonus":true,"armour":true},"category":"armour","distance":null,"stats":{},"contextdata":{"upgrade_stat":{"upgrades":[{"stat":"armour","value":-3}]},"bonus_ability":{"action_type":["dash"]},"injury_flat_mod":{"modifiers":[-3]},"validate_final_unit_equipment":{"requirements":[{"tag":"shield","value":false,"exception":[{"id":"eq_heavyballisticshield","value":true}]}]},"model_equipment_restriction":{"required":[{"tag":"shield","res_type":"id","value":"eq_heavyballisticshield"}]},"add_stat_option":{"type":"base","direction":"increase","options":[[{"base":[40]}]]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Combining the rarest of divine metal alloys and the latest technology of New Antioch, machine armour makes its wearer a virtual tank."}],"options":[],"keywords":[],"abilities":["ab_steadfast","ab_bulky"]},{"id":"eq_holyiconshield","name":"Holy Icon Shield","source":"core","tags":{"trait":true,"shield":true},"category":"shield","distance":null,"stats":{"hands_melee":1,"hands_ranged":1},"contextdata":{"upgrade_stat":{"upgrades":[{"stat":"armour","value":-1}]},"injury_flat_mod":{"modifiers":[-1]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"These shields are made from icons that have performed miracles. Mounted on blessed wood, they are harder than any steel and virtually indestructible. Only the most revered fighters in the service of the Church carry one."}],"options":[],"keywords":["kw_impervious"],"modifiers":[]},{"id":"eq_holyiconarmour","name":"Holy Icon Armour","source":"core","tags":{"trait":true,"armour":true},"category":"armour","distance":null,"stats":{},"contextdata":{"upgrade_stat":{"upgrades":[{"stat":"armour","value":-1}]},"injury_flat_mod":{"modifiers":[-1]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"This suit of armour is made of blessed icons and scripture scrolls written with the blood of saints."}],"options":[],"keywords":["kw_impervious"],"modifiers":[]},{"id":"eq_armourpiercingbullets","name":"Armour-Piercing Bullets","source":"core","tags":{"trait":true},"category":"equipment","distance":null,"stats":{},"contextdata":{"equipment_add_to":{"equip_check":[{"check_type":"antikeyword","value":["kw_shrapnel","kw_fire","kw_gas","kw_blast"]}]},"ammunition_keyword_add":{"value":["kw_ignorearmour"]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Advanced armour technology has forced the armouries of the Great War to forge new types of bullets. Expensive and labour-intensive to produce, these hardened tungsten rounds are more effective against battlefield armour."}],"options":[],"keywords":["kw_consumable"],"modifiers":[],"abilities":[]},{"id":"eq_dumdumbullets","name":"Dum-Dum Bullets","source":"core","tags":{"trait":true},"category":"equipment","distance":null,"stats":{},"contextdata":{"equipment_add_to":{"equip_check":[{"check_type":"antikeyword","value":["kw_shrapnel","kw_fire","kw_gas","kw_blast"]}]},"ammunition_keyword_add":{"value":["kw_critical"]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"These hollow-point bullets are far more likely to cause fatal wounds than standard ammunition."}],"options":[],"keywords":["kw_consumable"],"modifiers":[],"abilities":[]},{"id":"eq_incendiaryammunition","name":"Incendiary Ammunition","source":"core","tags":{"trait":true},"category":"equipment","distance":null,"stats":{},"contextdata":{"equipment_add_to":{"equip_check":[{"check_type":"antikeyword","value":["kw_shrapnel","kw_fire","kw_gas","kw_blast"]}]},"ammunition_keyword_add":{"value":["kw_fire"]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Developed by Aym, the great duke of Hell, these bullets set any target they hit on fire."}],"options":[],"keywords":["kw_consumable"],"modifiers":[],"abilities":[]},{"id":"eq_tracerbullets","name":"Tracer Bullets","source":"core","tags":{"trait":true},"category":"equipment","distance":null,"stats":{},"contextdata":{"equipment_add_to":{"equip_check":[{"check_type":"antikeyword","value":["kw_shrapnel","kw_fire","kw_gas","kw_blast"]}]},"ammunition_keyword_add":{"value":["kw_plusdice"]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Tracer bullets allow soldiers to adjust their aim efficiently."}],"options":[],"keywords":["kw_consumable"],"modifiers":[],"abilities":[]},{"id":"eq_martyrdompills","name":"Martyrdom Pills","source":"core","tags":{"trait":true,"enemy_penalty":true},"category":"equipment","distance":null,"stats":{},"contextdata":{"keyword_ignore":{"value":["kw_fear"]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Martyrdom pills are a potent mixture of mind-altering drugs and chemicals that inure a soldier against all pain and injury. However, it takes a tremendous toll on the body."}],"options":[],"keywords":["kw_consumable"],"modifiers":[],"abilities":["ab_inuredtopain"]},{"id":"eq_unholytrinket","name":"Unholy Trinket","source":"core","tags":{"trait":true},"category":"equipment","distance":null,"stats":{},"contextdata":{"activated":{}},"description":[],"lore":[{"tags":{"desc_type":"default"},"content":"Many Heretic Troopers carry a talisman or charm that are sold by soothsayers and imps in the Heretic domains. Such a trinket might be a skull, preserved foetus, horn of a goat, and is often covered in Goetic runes."}],"options":[],"keywords":["kw_consumable"],"modifiers":[],"abilities":["ab_talisman"]},{"id":"eq_unholyrelic","name":"Unholy Relic","source":"core","tags":{"trait":true},"category":"equipment","distance":null,"stats":{},"contextdata":{"keyword_add":{"value":["kw_fear"]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"An artefact bestowed with unholy power. Examples include nephilim heads, desecrated splinters of the True Cross or mummified body parts of fallen saints and bishops."}],"options":[],"keywords":["kw_fear"],"modifiers":[]},{"id":"eq_blessedicon","name":"Blessed Icon","source":"core","tags":{"trait":true},"category":"equipment","distance":null,"stats":{},"contextdata":{"activated":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Small icons of saints, great angels and holy warriors are a common sight amongst the Trench Pilgrims. They are hung on rosaries, belts, or attached to portable shrines carried on the Pilgrims\u2019 backs."}],"options":[],"keywords":["kw_consumable"],"modifiers":[],"abilities":["ab_talisman"]},{"id":"eq_infernalbrandmark","name":"Infernal Brand Mark","source":"core","tags":{"trait":true},"category":"equipment","distance":null,"stats":{},"contextdata":{"ignore_element":{"element":["kw_fire"]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"A Heretic who has made a holy pilgrimage into Hell itself is branded by their patron devil with an ever-burning mark. Mortal fire no longer has the power to harm them."}],"options":[],"keywords":[],"modifiers":[]},{"id":"eq_fieldshrine","name":"Field Shrine","source":"core","tags":{"trait":true},"category":"equipment","distance":null,"stats":{},"contextdata":{"warband_wide":{},"stationary":{}},"description":[{"tags":{"desc_type":"default"},"content":"A Field Shrine is represented by a terrain piece that is at least \xbd\u201d high and which is mounted on a 40mm base. It is Impassable terrain."}],"lore":[{"tags":{"desc_type":"italic"},"content":"Holy reliquaries, blessed artefacts and sacred crosses are often carried to the battlefield to encourage the troops, while the Heretics bring idols of the Golden Calf, tortured captives or other wicked totems to bear."}],"options":[],"keywords":["kw_deployable"],"modifiers":[],"abilities":["ab_shrine","ab_tearitdown"]},{"id":"eq_hellboundsoulcontract","name":"Hellbound Soul Contract","source":"core","tags":{"trait":true},"category":"equipment","distance":null,"stats":{},"contextdata":{},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"An infernal contract signed by a Heretic and the demon who will come to collect the damned soul when death is close. The mortal signatory bursts into Infernal flames when seriously wounded."}],"options":[],"keywords":[],"modifiers":[],"abilities":["ab_contract"]},{"id":"eq_tarnishedarmour","name":"Tarnished Armour","source":"core","tags":{"trait":true,"armour":true},"category":"armour","distance":null,"stats":{},"contextdata":{"ignore_element":{"element":["kw_gas"]},"upgrade_stat":{"upgrades":[{"stat":"armour","value":-2}]},"injury_flat_mod":{"modifiers":[-2]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"This suit of armour gilded with gleaming gold comes with a helmet often with a beautiful, cherub-like face warped or corrupted in some way, such as with inhuman eyes or with the whole face twisted upside-down. Despite its splendour the armour is always tarnished by blood, offal or other kind of corruption. Merely seeing it fills mortals with incredible greed and makes the wearer an immediate target of their wrath as they attempt to tear it from them."}],"options":[],"keywords":[],"modifiers":[],"abilities":["ab_target_of_wrath"]},{"id":"eq_standardofmammon","name":"Standard of Mammon","source":"core","tags":{"trait":true,"flag":true},"category":"equipment","distance":null,"stats":{"hands_melee":1,"hands_ranged":1},"contextdata":{"warband_wide":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"The Battle Standards of Mammon are opulently decorated works of art, icons and banners created in mockery of the virtues of Charity and Temperance. Crafted from the most extravagant materials, each is a unique work of dark genius, often depicting saints performing vile sins or famous acts of Greed. These standards have the power to make anyone kneel before the Prince of Greed."}],"options":[],"keywords":["kw_held","kw_leader"],"abilities":["ab_kneelbeforeme"]},{"id":"eq_goldencalfaltar","name":"Golden Calf Altar","source":"core","tags":{"trait":true},"category":"equipment","distance":null,"stats":{},"contextdata":{"warband_wide":{},"stationary":{}},"description":[{"tags":{"desc_type":"default"},"content":"A Golden Calf Altar, if deployed, is represented by a terrain piece that is about \xbd\u201d high and which is mounted on a 25mm base. It is Impassable terrain."}],"lore":[{"tags":{"desc_type":"italic"},"content":"This portable altar of Mammon creates illusions of immense wealth, taking the form of whatever its target covets most."}],"options":[],"keywords":["kw_deployable","kw_heavy"],"abilities":["ab_illusions","ab_placealtar"]},{"id":"eq_coinhammer","name":"Coin Hammer","source":"core","tags":{"action":true,"weapon":true},"category":"melee","distance":null,"stats":{"hands_melee":2,"melee":true},"contextdata":{"get_weapon":{},"injury_dice_mod":{"modifiers":[1]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"This double-handed hammer bears the rune of Mammon on its head. Its strike burns through even the heaviest armour, leaving a permanent, painful scar in the shape of the rune."}],"options":[],"keywords":["kw_heavy"],"abilities":["ab_runeofmammon"]},{"id":"eq_warcross","name":"War-Cross","source":"core","tags":{"action":true,"weapon":true,"grenade":true},"category":"grenade","distance":8,"stats":{"ranged":true},"contextdata":{"get_weapon":{},"ignore_mod":{"modifiers":["long_range"]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"A warcross (also known as a wurfkreuz in the Holy Roman Empire) is a fourpronged throwing weapon in the shape of a cross. It is engraved with prayers and psalms that guide it on an unerring path."}],"options":[],"keywords":["kw_assault"],"modifiers":[]},{"id":"eq_puntgun","name":"Punt Gun","source":"core","tags":{"action":true,"weapon":true},"category":"ranged","distance":18,"stats":{"hands_ranged":2,"ranged":true},"contextdata":{"get_weapon":{},"plus_dice":{"val":[1]},"injury_dice_mod":{"modifiers":[1]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"A Punt Gun is an enormous shotgun loaded with up to 25 ounces of shot. It can be loaded with a risky amount of powder and square shot, which causes widespread damage and destruction. It is a very popular weapon among Trench Pilgrims who lack access to conventional heavy weapons."}],"options":[],"keywords":["kw_heavy","kw_shrapnel","kw_shotgun"],"abilities":["ab_overcharge"]},{"id":"eq_sacrificiallamb","name":"Sacrificial Lamb","source":"core","tags":{"trait":true},"category":"equipment","distance":null,"stats":{},"contextdata":{"warband_wide":{},"activated":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Before the battle, this lamb is sacrificed to God\u2019s glory, and the Pilgrim then anoints themselves with its blood, averting the wrath of Yahweh while fighting for His cause."}],"options":[],"keywords":["kw_consumable"],"abilities":["ab_anointed"]},{"id":"eq_trenchmortar","name":"Trench Mortar","source":"core","tags":{"action":true,"weapon":true,"anchorite":true},"category":"ranged","distance":48,"stats":{"hands_ranged":2,"ranged":true},"contextdata":{"get_weapon":{},"ignore_mod":{"modifiers":["cover"]},"injury_dice_mod":{"modifiers":[1]},"blast_mod":{"modifiers":[3]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"A trench mortar is a smooth-bore, muzzle-loading weapon with high angles of fire. The shell contains both explosives and deadly Greek fire."}],"options":[],"keywords":["kw_heavy","kw_fire","kw_scatter"],"abilities":["ab_hightrajectory"]},{"id":"eq_autocannon","name":"Auto Cannon","source":"core","tags":{"action":true,"weapon":true},"category":"ranged","distance":48,"stats":{"hands_ranged":2,"ranged":true},"contextdata":{"get_weapon":{},"automatic_mod":{"val":[3]},"injury_dice_mod":{"modifiers":[1]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Autocannons are fully automatic guns that fire large-calibre 0.787 shells. Capable of generating extremely rapid firepower, autocannons overheat quickly if used for sustained fire."}],"options":[],"keywords":["kw_heavy"],"abilities":["ab_fullauto"]},{"id":"eq_gascenser","name":"Gas Censer","source":"core","tags":{"action":true,"weapon":true},"category":"ranged","distance":0,"stats":{"hands_ranged":2,"ranged":true},"contextdata":{"get_weapon":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"This censer is a lethal chemical weapon and an object of veneration to the Pilgrims."}],"options":[],"keywords":["kw_ignorearmour","kw_reload","kw_gas"],"abilities":["ab_cloudofgas"]},{"id":"eq_gasfilter","name":"Gas Filter","source":"core","tags":{"trait":true},"category":"equipment","distance":null,"stats":{},"contextdata":{"ignore_element":{"element":["kw_gas"]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"The Anchorite is installed with a holy incense system that cleanses and purifies the air the monk inside the Anchorite breathes."}],"options":[],"keywords":[],"modifiers":[]},{"id":"eq_holydieselengine","name":"Holy Diesel Engine","source":"core","tags":{"trait":true,"bonus":true},"category":"special","distance":null,"stats":{},"contextdata":{"bonus_ability":{"action_type":["dash"]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"The Anchorite is equipped with an advanced diesel engine with an experimental cooling system."}],"options":[],"keywords":[],"abilities":["ab_advanceddesign"]},{"id":"eq_sacredgeometry","name":"Sacred Geometry","source":"core","tags":{"trait":true},"category":"special","distance":null,"stats":{},"contextdata":{},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"The monk is well-versed in geometries intended to make the viewer see the world through mathematics, granting a better understanding of the divine."}],"options":[],"keywords":[],"abilities":["ab_divineaccuracy"]},{"id":"eq_grandanchorite","name":"Grand Anchorite","source":"core","tags":{"trait":true,"bonus":true},"category":"special","distance":null,"stats":{},"contextdata":{"bonus_ability":{"action_type":["dash","retreat","charge","move"]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Built to an extraordinary size, the Anchorite Shrine is all but impossible to stop or slow down once it starts moving."}],"options":[],"keywords":[],"abilities":["ab_impossibletostop"]},{"id":"eq_pistonlegs","name":"Piston Legs","source":"core","tags":{"trait":true,"attack":true,"action_type":["attack_melee"]},"category":"special","distance":null,"stats":{},"contextdata":{},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"The feet of the Anchorite Shrine are equipped with special piston engines designed to grind its enemies into a shattered ruin of broken bones and burst flesh."}],"options":[],"keywords":[],"abilities":["ab_grindtodust"]},{"id":"eq_hallowedanchorite","name":"Hallowed Anchorite","source":"core","tags":{"trait":true},"category":"special","distance":null,"stats":{},"contextdata":{},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"The Anchorite has been anointed with holy chrism, the oil made of pure myrrh, the ash from burnt icons and fifty-six other sacred ingredients."}],"options":[],"keywords":[],"abilities":["ab_manifoldblessings"]},{"id":"eq_wrathfulcherubface","name":"Wrathful Cherub Face","source":"core","tags":{"trait":true},"category":"special","distance":null,"stats":{},"contextdata":{},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"The Anchorite is decorated with an angelic face that is the very image of the wrath of the Lord. All must cower before the face of the Lord."}],"options":[],"keywords":[],"abilities":["ab_cowerbeforethelord"]},{"id":"eq_supremepontiffcrucifix","name":"Supreme Pontiff \u2019s Crucifix","source":"core","tags":{"trait":true},"category":"equipment","distance":null,"stats":{},"contextdata":{},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"This holy gift has been blessed by the Supreme Pontiff themselves and inspires the wearer to overcome any adversity."}],"options":[],"keywords":[],"abilities":["ab_inspiringrelic"]},{"id":"eq_carnyx","name":"Carnyx","source":"core","tags":{"trait":true,"instrument":true},"category":"equipment","distance":null,"stats":{"hands_melee":1,"hands_ranged":1},"contextdata":{"keyword_add":{"value":["kw_fear"]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Horns, drums, trumpets, whistles, bagpipes and many other types of instruments are used extensively in the battles of the Great War. They can bolster the hearts of those facing the horrors of Hell, or they can recite terrifying hymns praising the lords of the Inferno!"}],"options":[],"keywords":["kw_held"],"modifiers":[],"abilities":["ab_fanfare"]},{"id":"eq_tanksplittersword","name":"Tank-Splitter Sword","source":"core","tags":{"action":true,"weapon":true},"category":"melee","distance":null,"stats":{"hands_melee":2,"melee":true},"contextdata":{"get_weapon":{},"injury_dice_mod":{"modifiers":[1]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"It takes years of gruelling Mensur practice and field drills to acquire the precision and speed required to use the specialist tank-splitter swords of the Gardekorps. Despite their great size (often over 6 feet long), they are remarkably light, and due to the large quantities of orichalcum used in their forging process, they are virtually unbreakable. They are often used to disable tanks and other armoured vehicles, by either slicing their armour open or disabling them with an accurate swing to sever their tracks. Before any battle, they are treated with a special metal-corroding chemical compound which melts armour, making it far deadlier against armoured targets than those who wear none."}],"options":[],"keywords":["kw_critical","kw_cumbersome"],"abilities":["ab_tanksplitter"]},{"id":"eq_bagpipes","name":"Bagpipes","source":"core","tags":{"trait":true,"instrument":true},"category":"equipment","distance":null,"stats":{"hands_melee":1,"hands_ranged":1},"contextdata":{},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Horns, drums, trumpets, whistles, bagpipes and many other types of instruments are used extensively in the battles of the Great War. They can bolster the hearts of those facing the horrors of Hell, or they can recite terrifying hymns praising the lords of the Inferno!"}],"options":[],"keywords":["kw_held"],"modifiers":[],"abilities":["ab_fanfare","ab_albabagpipes"]},{"id":"eq_highlandmachinearmour","name":"Celtic Machine Armour","source":"core","tags":{"trait":true,"armour":true},"category":"armour","distance":null,"stats":{},"contextdata":{"restriction_override":{"overrides":[{"type":"equipment","value":"eq_machinearmour","replace":"eq_highlandmachinearmour"}]},"upgrade_stat":{"upgrades":[{"stat":"armour","value":-3}]},"injury_flat_mod":{"modifiers":[-3]},"validate_final_unit_equipment":{"requirements":[{"tag":"shield","value":false,"exception":[{"id":"eq_heavyballisticshield","value":true}]}]},"model_equipment_restriction":{"required":[{"tag":"shield","res_type":"id","value":"eq_heavyballisticshield"}]},"add_stat_option":{"type":"base","direction":"increase","options":[[{"base":[40]}]]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Combining the rarest of divine metal alloys and the latest technology of New Antioch, machine armour makes its wearer a virtual tank."}],"options":[],"keywords":[],"abilities":["ab_steadfast","ab_celticbulk"]},{"id":"eq_lochaberaxe","name":"Lochaber Axe","source":"core","tags":{"action":true,"weapon":true},"category":"melee","distance":null,"stats":{"hands_melee":2,"melee":true},"contextdata":{"get_weapon":{},"injury_dice_mod":{"modifiers":[2]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Lochaber axes combine the power of the battle axe with the defensive qualities of a polearm. Its wicked spike has stopped many a Heretic in their tracks. D\xf9n \xc8ideann Guard are especially adept at their use.."}],"options":[],"keywords":["kw_critical","kw_cumbersome","kw_heavy","kw_block"]},{"id":"eq_shotel","name":"Shotel","source":"core","tags":{"action":true,"weapon":true},"category":"melee","distance":null,"stats":{"hands_melee":1,"melee":true},"contextdata":{"get_weapon":{},"ignore_shield":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Since the days of ancient Axum, the Shotel has been the weapon of choice for the Ethiopian warrior-elite. Its curved blade is designed to reach around an opponent\u2019s shield and stab them in vital areas, such as the kidneys or lungs."}],"options":[],"keywords":["kw_critical"],"abilities":["ab_bypassshield"]},{"id":"eq_holywateroflalibela","name":"Holy Water of Lalibela","source":"core","tags":{"trait":true,"bonus":true},"category":"equipment","distance":null,"stats":{},"contextdata":{},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Vials of holy water from the rock-hewn churches of Lalibela are carried by the Ethiopian warriors on their campaigns. It has great power over demonic entities and aids in healing."}],"options":[],"keywords":["kw_consumable"],"abilities":["ab_healingwaters"]},{"id":"eq_anfarro","name":"Anfarro (Warrior\'s Crown)","source":"core","tags":{"trait":true,"headgear":true},"category":"equipment","distance":null,"stats":{},"contextdata":{"keyword_ignore":{"value":["kw_fear"]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"An Anfarro is made from a ring of lion\u2019s hair held in a filigree gilt metal coronet studded with blue and red gemstones. It is granted by the Emperor to an aristocratic warrior and lion hunter as a token of honour and bravery."}],"options":[],"keywords":[],"abilities":["ab_tokenofhonour"]},{"id":"eq_tabot","name":"Tabot","source":"core","tags":{"trait":true,"bonus":true},"category":"equipment","distance":null,"stats":{},"contextdata":{},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Made from alabaster, marble, or wood from an acacia tree, these are blessed replicas of the Ark of the Covenant. A priest who accompanies the forces of the King of Kings to New Antioch will take the holy tabot with them, wrapped in silk cloth decorated with gold string. Its miraculous powers reward those who perform virtuous deeds on the battlefield."}],"options":[],"keywords":[],"abilities":["ab_virtuousrewards"]},{"id":"eq_infestedrifle","name":"Infested Rifle","source":"core","tags":{"action":true,"weapon":true,"rifle":true},"category":"ranged","distance":18,"stats":{"hands_ranged":2,"ranged":true},"contextdata":{"get_weapon":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Armour offers little protection against the horrid, tainted bullets of this rifle, polluted by the power of Beelzebub himself. The bullets are semi-sentient, flying through the tiniest chinks in any armour."}],"options":[],"keywords":["kw_bayonetlug","kw_armourpiercing"],"modifiers":[]},{"id":"eq_corruptionbelcher","name":"Corruption Belcher","source":"core","tags":{"action":true,"weapon":true},"category":"ranged","distance":8,"stats":{"hands_ranged":2,"ranged":true},"contextdata":{"get_weapon":{},"auto_hit":{},"ignore_armour":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Corruption belchers spew forth noxious gas and corrosive fumes captured from the Bolgias that divide the putrid swamps of the Eighth Circle of Hell."}],"options":[],"keywords":["kw_gas","kw_ignorearmour","kw_flamethrower"]},{"id":"eq_putridshotgun","name":"Putrid Shotgun","source":"core","tags":{"action":true,"weapon":true},"category":"ranged","distance":12,"stats":{"hands_ranged":2,"ranged":true},"contextdata":{"get_weapon":{},"plus_dice":{"val":[1]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Each a corroded, winged and demon-possessed cartridge filled with infected parasitic larvae, the rounds of putrid shotguns are almost impossible to avoid. This repulsive weapon is nicknamed \u201cblunderpus\u201d by the New Antioch troops."}],"options":[],"keywords":["kw_assault","kw_bayonetlug","kw_shieldcombo","kw_infectionmarker","kw_shotgun"],"modifiers":[]},{"id":"eq_visceracannon","name":"Viscera Cannon","source":"core","tags":{"action":true,"weapon":true},"category":"ranged","distance":24,"stats":{"hands_ranged":2,"ranged":true},"contextdata":{"get_weapon":{},"plus_dice":{"val":[2]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"This heavy firearm is the most loathsome and repulsive of all the weapons in the arsenal of the Cult of the Black Grail \u2013 and that is saying something. A warrior armed with this pride of Beelzebub inserts its tubes into their own abdomen and then shoots their own corrosive fluids and innards at the enemy. It is operated by a hand crank that first builds pressure inside the user until they are at the point of bursting, and then releases the spray of viscera at their foe. The greater the amount of their own flesh the user releases, the more horrific the damage."}],"options":[],"keywords":["kw_heavy"],"abilities":["ab_selfsacrifice"]},{"id":"eq_plagueblade","name":"Plague Blade","source":"core","tags":{"action":true,"weapon":true},"category":"melee","distance":null,"stats":{"hands_melee":1,"melee":true},"contextdata":{"get_weapon":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Carrying the viral strain of Beelzebub himself, these weapons are the terror of all mortals. Even the tiniest nick or scratch usually leads to an agonising death and eternal servitude to the Lord of Flies as a ghastly walking corpse."}],"options":[],"keywords":["kw_infectionmarker"]},{"id":"eq_beelzebubsaxe","name":"Beelzebub\'s Axe","source":"core","tags":{"action":true,"weapon":true},"category":"melee","distance":null,"stats":{"hands_melee":2,"melee":true},"contextdata":{"get_weapon":{},"injury_dice_mod":{"modifiers":[2]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"With blades crafted in the form of a fly spreading its wings, this enormous axe is eternally covered with corruption and filth of Beelzebub."}],"options":[],"keywords":["kw_heavy","kw_infectionmarker"],"modifiers":[]},{"id":"eq_blackgrailshield","name":"Black Grail Shield","source":"core","tags":{"trait":true,"shield":true},"category":"shield","distance":null,"stats":{"hands_melee":1,"hands_ranged":1},"contextdata":{"upgrade_stat":{"upgrades":[{"stat":"armour","value":-1}]},"injury_flat_mod":{"modifiers":[-1]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"This device of the Cult of the Black Grail carries the blessing of the Lord of Flies. It has a will of its own, moving to intercept any bullets or other projectiles that might impede the work of Beelzebub."}],"options":[],"keywords":[],"abilities":["ab_powerofthecultoftheblackgrail"]},{"id":"eq_parasitegrenades","name":"Parasite Grenades","source":"core","tags":{"action":true,"weapon":true,"grenade":true},"category":"grenade","distance":8,"stats":{"ranged":true},"contextdata":{"get_weapon":{},"ignore_mod":{"modifiers":["cover","long_range"]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Gifted from the Lord of the Flies, these grenades are filled with parasitic mind worms whose bites cause fever dreams and terrifying hallucinations. They are used to force the mortals away from the safety of defended bunkers and trenches."}],"options":[],"keywords":["kw_assault","kw_grenade"],"abilities":["ab_terrifyinghallucinations"]},{"id":"eq_compoundeyeshelmet","name":"Compound Eyes Helmet","source":"core","tags":{"trait":true,"headgear":true},"category":"equipment","distance":null,"stats":{},"contextdata":{"ignore_element":{"element":["kw_shrapnel"]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"This ancient helmet fuses with its wearer, linking their nerves to its compound eyes, granting enhanced vision."}],"options":[],"keywords":[],"abilities":["ab_enhancedvision"]},{"id":"eq_graildevotee","name":"Grail Devotee","source":"core","tags":{"trait":true,"bonus":true},"category":"equipment","distance":null,"stats":{},"contextdata":{"override_equipment_limit":{"count":2},"bonus_ability":{"action_type":["attack"]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Given birth by Matagot Hags after devouring living victims whole, these diminutive thralls are driven by an unspeakable thirst for fluids tainted by the Cult of the Black Grail. They attach themselves to the nobles of the Order of the Fly, endlessly grovelling and begging for any secretion or discharge of fluid their master might be able to spare."}],"options":[],"keywords":[],"abilities":["ab_graildevotees","ab_jealousobsession"]},{"id":"eq_brokencrown","name":"Broken Crown","source":"core","tags":{"trait":true},"category":"equipment","distance":null,"stats":{},"contextdata":{},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Made from the twisted and torn remains of their Hegemon\u2019s shattered armour, this crown of barbs and thorns is a constant reminder to the Mourners of their failure."}],"options":[],"keywords":[],"abilities":["ab_locusofdespair"]},{"id":"eq_urnofbitterashes","name":"Urn of Bitter Ashes","source":"core","tags":{"trait":true},"category":"equipment","distance":null,"stats":{},"contextdata":{},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"This black urn contains ashes from the burned body of the fallen Hegemon, which still retain a faint echo of its hateful will. Fragments swirl and churn in the air, and sinister whispers emanate from within."}],"options":[],"keywords":[],"abilities":["ab_sinisterwhispers"]},{"id":"eq_blunderbuss","name":"Blunderbuss","source":"core","tags":{"action":true,"weapon":true},"category":"ranged","distance":10,"stats":{"hands_ranged":2,"ranged":true},"contextdata":{"get_weapon":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"A firearm of a bygone era, loaded with rusty nails, lead shot, grenade shrapnel and shell pieces."}],"options":[],"keywords":["kw_shieldcombo","kw_shrapnel"],"modifiers":[]},{"id":"eq_arquebus","name":"Arquebus","source":"core","tags":{"action":true,"weapon":true,"arquebus":true},"category":"ranged","distance":18,"stats":{"hands_ranged":2,"ranged":true},"contextdata":{"get_weapon":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"A primitive matchlock weapon, simple enough that even a Yoke Fiend is capable of operating it and sturdy enough to be used as a club with which to batter an opponent in a melee."}],"options":[],"keywords":["kw_cumbersome"],"abilities":["ab_batter"]},{"id":"eq_ophidianrifle","name":"Ophidian Rifle","source":"core","tags":{"action":true,"weapon":true,"rifle":true},"category":"ranged","distance":30,"stats":{"hands_ranged":2,"ranged":true},"contextdata":{"get_weapon":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"This wheel-lock hunting rifle is produced in the forges of the demon Sabnock, the great marquis of war. Made of both Infernal and Earthly metals and materials, it exists simultaneously in the twisted dimension of Hell as well as on Earth. A thing that should not be, the shots of this firearm pervert the laws of God, so targets taking cover are easier to hit, and firing over great distances aids the user of this Hell-made rifle instead of hindering their aim."}],"options":[],"keywords":["kw_heavy"],"abilities":["ab_unnaturalinversion"]},{"id":"eq_serpentassaultgun","name":"Serpent Assault Gun","source":"core","tags":{"action":true,"weapon":true},"category":"ranged","distance":36,"stats":{"hands_ranged":2,"ranged":true},"contextdata":{"get_weapon":{},"automatic_mod":{"val":[2]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"This terrifying and enormous hand cannon contains a portal to the foetid swamps and bogs of the Fifth Circle of Hell. Each bullet it fires is enveloped with an awful gas."}],"options":[],"keywords":["kw_heavy","kw_gas","kw_assault"]},{"id":"eq_bowoflethe","name":"Bow of Lethe","source":"core","tags":{"action":true,"weapon":true},"category":"ranged","distance":24,"stats":{"hands_ranged":1,"hands_melee":1,"ranged":true},"contextdata":{"get_weapon":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"This bow is grown by the Hunters of the Left-Hand Path out of their own flesh. It can be tipped with deadly poison made from the blood of the nameless beasts that the Hunters stalk in the wastelands of Hell, or it can shoot one of the iron bolts of Pandemonium, that weigh nine tonnes on Earth."}],"options":[],"keywords":["kw_assault"],"abilities":["ab_specialammunition"]},{"id":"eq_tortureinstrument","name":"Torture Instrument","source":"core","tags":{"action":true,"weapon":true},"category":"melee","distance":0,"stats":{"hands_melee":2,"melee":true},"contextdata":{"get_weapon":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Great scourges made from living spines, red-hot rods, man-catchers, and other tools of torment fashioned by the sadistic smiths of Dis are widely used by the Court\u2019s warbands. Their main function is not to kill, but to cause as much agonising pain as possible. Forged in hellfire and quenched in the black waters of the River Styx, their wounds cause suffering that lasts for days."}],"options":[],"keywords":[],"abilities":["ab_agonisinginjuries"]},{"id":"eq_headtaker","name":"Head Taker","source":"core","tags":{"action":true,"weapon":true},"category":"melee","distance":null,"stats":{"hands_melee":1,"melee":true},"contextdata":{"get_weapon":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Said to contain a tiny sliver of the stone that Cain used to murder Abel, this weapon allows its wielder to identify any point in the body of their enemy that would bring it instant and agonising death. This makes it a superb ambush weapon much favoured by the Hunters of the Left-Hand Path."}],"options":[],"keywords":[],"abilities":["ab_ambushweapon"]},{"id":"eq_malebranchesword","name":"Malebranche Sword","source":"core","tags":{"action":true,"weapon":true},"category":"melee","distance":null,"stats":{"hands_melee":2,"melee":true},"contextdata":{"get_weapon":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"These forked Abyssal swords are terrible weapons as well as symbols of prestige. They are given to demons who have performed great deeds in the service of the Court and were once carried by fallen seraphim in battles against Heaven."}],"options":[],"keywords":["kw_heavy","kw_deadly"],"abilities":[]},{"id":"eq_crownofhellfire","name":"Crown of Hellfire","source":"core","tags":{"trait":true},"category":"equipment","distance":null,"stats":{},"contextdata":{},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"This burning crown is held aloft by the pain-seared hands of an invisible damned soul, whose weeping cries can still be heard. It is a reward that an elite member of the Court can earn through some extraordinary act in the service of the Serpent Head they are pledged to. Of the slave soldiers of the Court, only the Pit Locusts are allowed to wear this symbol of prestige due the fundamental role they played at the start of the Great War."}],"options":[],"keywords":[],"abilities":["ab_searingflames"]},{"id":"eq_infernalironarmour","name":"Infernal Iron Armour","source":"core","tags":{"trait":true,"armour":true},"category":"armour","distance":null,"stats":{},"contextdata":{"upgrade_stat":{"upgrades":[{"stat":"armour","value":-2}]},"injury_flat_mod":{"modifiers":[-2]}},"description":[{"tags":{"desc_type":"paragraph"},"content":"Injuries against this model are rolled with a flat -2 penalty. This penalty applies against injuries that ignore armour."}],"lore":[{"tags":{"desc_type":"italic"},"content":"This armour is forged simultaneously in Hell and on Earth, so that no weapon, whether Infernal or man-made, can overcome its protection."}],"options":[],"keywords":["kw_impervious"]},{"id":"eq_restrainingmuzzle","name":"Restraining Muzzle","source":"core","tags":{"trait":true,"bonus":true},"category":"equipment","distance":null,"stats":{},"contextdata":{},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Court nobles use these cruel, barbed muzzles to bring Yoke Fiends to heel. Each can constrict them with a command word until the pain becomes unbearable."}],"options":[],"keywords":[],"modifiers":[],"abilities":["ab_restrained"]},{"id":"eq_cupoffilth","name":"Cup of Filth","source":"core","tags":{"trait":true,"bonus":true},"category":"equipment","distance":null,"stats":{},"contextdata":{"bonus_ability":{"action_type":["dash"]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Drawn from the river of nauseating corruption vomited by the Lord of the Flies since before time began, this liquid is the source of every illness that Creation has ever known or ever will know."}],"options":[],"keywords":[],"modifiers":[],"abilities":["ab_drinkfromthecup"]},{"id":"eq_holygrenade","name":"Holy Grenade","source":"core","tags":{"action":true,"weapon":true,"grenade":true},"category":"grenade","distance":8,"stats":{"ranged":true},"contextdata":{"get_weapon":{},"blast_mod":{"modifiers":[2]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"The shells of these grenades are forged from the church bells of the original city of Antioch, and imbued with the Lord\u2019s spirit of vengeance against all evil, (such as animals possessed by demons)."}],"options":[],"keywords":["kw_grenade","kw_assault","kw_shrapnel"],"modifiers":[],"abilities":["ab_spiritofvengance"]},{"id":"eq_tormentorchain","name":"Tormentor Chain","source":"core","tags":{"action":true,"weapon":true},"category":"ranged","distance":10,"stats":{"hands_ranged":1,"ranged":true},"contextdata":{"get_weapon":{},"ignore_mod":{"modifiers":["cover","long_range"]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"A barbed chain used to bind the damned in Hell and sometimes granted as a weapon to Heretic warriors who have proven the most adept at dragging prisoners to the Gates of Hell alive. Possessing a will of its own, the chain can traverse great distances to snare some poor unfortunate soul in its barbed embrace."}],"options":[],"keywords":["kw_assault","kw_shrapnel"],"abilities":["ab_draggedforwards","ab_deadlyembrace"]},{"id":"eq_demonicauragrenade","name":"Demonic Aura Grenade","source":"core","tags":{"action":true,"weapon":true,"grenade":true},"category":"grenade","distance":8,"stats":{"ranged":true},"contextdata":{"get_weapon":{},"ignore_mod":{"modifiers":["cover"]},"blast_mod":{"modifiers":[3]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"t is theorised this horrific grenade is based on the same technology as the weapon that destroyed the city of Antioch. Its explosion seems to cause no physical damage, but releases an eerie, bright green light that brings rapid, agonizing death to those caught within its reach. Why the Heretics do not use the grenades in greater numbers remains a mystery."}],"options":[],"keywords":["kw_grenade","kw_scatter","kw_ignorearmour","kw_assault"],"modifiers":[],"abilities":["ab_deadlylight"]},{"id":"eq_themarkofcain","name":"The Mark of Cain","source":"core","tags":{"trait":true},"category":"equipment","distance":null,"stats":{},"contextdata":{},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Cain, the first of murderers, was marked by God, as a ward against those who would kill him. Corrupted copies of this mark are carved into the flesh of those who venture to Hell seeking to learn the art of murder from the greatest killers who reside in the Eternal Fire."}],"options":[],"keywords":[],"abilities":["ab_retribution"]},{"id":"eq_salvagegolem","name":"Salvage Golem","source":"core","tags":{"trait":true},"category":"special","distance":null,"stats":{},"contextdata":{"warband_wide":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Golem servitors, created by the rabbis of the Kabbalistic School of Prague to alleviate the constant strain on supplies, are equipped with sophisticated sensors and metal detectors. Slow, difficult to maintain and methodical, they are not well-suited for combat, but prove invaluable during lulls in battle as they uncover hidden caches of loot."}],"options":[],"keywords":[],"abilities":["ab_helpfulservitor"]},{"id":"eq_smokescreen","name":"Smokescreen","source":"core","tags":{"trait":true},"category":"equipment","distance":null,"stats":{},"contextdata":{"warband_wide":{},"stationary":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"The Engineering Corps of New Antioch are experts in the use of smokescreens to shield their Shock Troops from enemy fire."}],"options":[],"keywords":["kw_consumable"],"abilities":["ab_swathedinsmoke"]},{"id":"eq_locustspitter","name":"Locust Spitter","source":"core","tags":{"action":true,"weapon":true},"category":"ranged","distance":18,"stats":{"hands_ranged":2,"ranged":true},"contextdata":{"get_weapon":{},"injury_dice_mod":{"modifiers":[-1]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"A nest of infected Hell-locusts serves as the fuel tank for this horrific gun. The voracious, razor-sharp iron locusts which dwell within can penetrate even the smallest chink in armour. Guided by the hateful will of the Lord of the Flies, they consume flesh and swarm to their next nearby target in mere seconds."}],"options":[],"keywords":["kw_ignorearmour"],"modifiers":[],"abilities":["ab_devouringswarm"]},{"id":"eq_battlefieldtitle","name":"Battlefield Title","source":"core","tags":{"trait":true},"category":"special","distance":null,"stats":{},"contextdata":{"warband_general_hook":{},"warband_wide":{},"add_onto_warband":{},"add_extra_equipment":{"count":1,"restriction":[]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Glorious deeds on the battlefield may earn the most determined, ruthless and deadly officers a rank within the Holy Orders of the Church, knighthood of the Teutonic Order, or the title of ccuser knight to one of the dukes or princes of Hell. Such a warrior is granted the right to carry the heraldic device of their house upon their wargear, and they enjoy many privileges when it comes to accessing an enhanced allocation of the most precious weapons and armour."}],"options":[{"ref_id":"ot_battlefieldtitle","name":"","description":[],"category":"contextobject","option_context":{"basic_option_default":{}},"dyna_only":true,"self_ask":true,"parent_level":7,"question_name":"getEquipmentRelationshipsForWarband"}],"keywords":[],"modifiers":[],"abilities":["ab_privilegedaccess"]},{"id":"eq_bookofbattleprayers","name":"Book of Battle Prayers","source":"core","tags":{"action":true},"category":"equipment","distance":null,"stats":{"hands_melee":1,"hands_ranged":1},"contextdata":{},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Written by the famous Patriarch of New Antioch, Alexios Cerularius, the remaining 137 copies of this blessed book are entrusted only to Warband leaders of extraordinary ability."}],"options":[],"keywords":["kw_held"],"modifiers":[],"abilities":["ab_continuouslitanyofprayers","ab_speakablessing"]},{"id":"eq_donkeysjawbone","name":"Donkey\'s Jawbone","source":"core","tags":{"action":true,"weapon":true},"category":"melee","distance":null,"stats":{"hands_melee":1,"melee":true},"contextdata":{"get_weapon":{},"injury_dice_mod":{"modifiers":[2]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Blessed by YHWH, this bone club grants its wielder the strength of Samson himself."}],"options":[],"keywords":[],"modifiers":[]},{"id":"eq_executionersaxe","name":"Executioner\'s Axe","source":"core","tags":{"action":true,"weapon":true},"category":"melee","distance":null,"stats":{"hands_melee":2,"melee":true},"contextdata":{"get_weapon":{},"injury_dice_mod":{"modifiers":[2]},"cleave_mod":{"modifiers":[2]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"This axe is wielded by the executioner demons of Hell whose job is to dismember those who brought division on Earth. As the flesh of the damned reforms over time, this grisly task is repeated again and again through eternity."}],"options":[],"keywords":["kw_critical"],"modifiers":[],"abilities":[]},{"id":"eq_armourofcobar","name":"Armour of Cobar","source":"core","tags":{"trait":true,"bonus":true,"armour":true},"category":"armour","distance":null,"stats":{},"contextdata":{"upgrade_stat":{"upgrades":[{"stat":"armour","value":-3}]},"bonus_ability":{"action_type":["dash"]},"injury_flat_mod":{"modifiers":[-3]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"A suit of armour fashioned after the mail worn by Cobar the Betrayer, the first Lord of the Sixty-Six. This black iron armour is forged in the death-factories of Hell from the souls of those who betrayed their friends in life. It rewards those who lead their followers and friends to ruin and death."}],"options":[],"keywords":[],"modifiers":[],"abilities":["ab_leadtodeath","ab_weightofsins"]},{"id":"eq_ducalwingedarmour","name":"Ducal Winged Armour","source":"core","tags":{"trait":true,"bonus":true,"armour":true},"category":"armour","distance":null,"stats":{},"contextdata":{"upgrade_stat":{"upgrades":[{"stat":"armour","value":-3}]},"keyword_add":{"value":["kw_flying"]},"bonus_ability":{"action_type":["dash"]},"injury_flat_mod":{"modifiers":[-3]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Based on the prototype battlefield armour worn by Duke Constantine XI himself and his personal guard, known as the Myrmidons, these extremely rare and powerful suits are granted only to the most decorated soldiers. They feature a MKIII Myrmidon diesel engine and wings, painted and decorated to celebrate the deeds of the warrior who has \u201cearned their wings\u201d."}],"options":[],"keywords":[],"modifiers":[],"abilities":["ab_myrmidonwings","ab_steadfast"]},{"id":"eq_hornofjoshua","name":"Horn of Joshua","source":"core","tags":{"action":true},"category":"equipment","distance":null,"stats":{},"contextdata":{},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Said to be one of the horns that Joshua used to bring down the walls of Jericho. Its blast still has the power to shake the very foundations of the strongest fortifications."}],"options":[],"keywords":[],"modifiers":[],"abilities":["ab_blowthyhorn"]},{"id":"eq_armourofthefly","name":"Armour of the Fly","source":"core","tags":{"trait":true,"armour":true},"category":"armour","distance":null,"stats":{},"contextdata":{"upgrade_stat":{"upgrades":[{"stat":"armour","value":-2}]},"keyword_add":{"value":["kw_flying"]},"ignore_element":{"element":["kw_shrapnel"]},"injury_flat_mod":{"modifiers":[-2]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"This suit of armour, crafted from black metal, embodies the visage of Beelzebub himself. It includes wings that propel its wearer into the skies at astonishing speed, and once it latches onto its opponent, its filth-ridden proboscis will suck the target dry."}],"options":[],"keywords":[],"modifiers":[],"abilities":["ab_insectwings","ab_suckeddry"]},{"id":"eq_resurrectionengine","name":"Resurrection Engine","source":"core","tags":{"trait":true},"category":"special","distance":null,"stats":{},"contextdata":{"warband_wide":{},"activated":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"This miraculous holy clockwork machine grants the ability to bring the dead back to life thanks to the grace of God and the research of the Holy Science Academies of New Antioch."}],"options":[],"keywords":["kw_consumable"],"modifiers":[],"abilities":["ab_holymachine"]},{"id":"eq_greatbannerofnewantioch","name":"Great Banner of New Antioch","source":"core","tags":{"trait":true,"flag":true},"category":"equipment","distance":null,"stats":{"hands_melee":1,"hands_ranged":1},"contextdata":{"warband_wide":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"A famed standard, army\u2019s battle banner, or regimental colour. It may also be the flag of one of the many free companies or forces in the service of the Church. Warband leaders often possess their own battle banner adorned with the awards and ribbons their units have won, carried proudly by a trusted warrior."}],"options":[],"keywords":["kw_held"],"modifiers":[],"abilities":["ab_rallytotheflag"]},{"id":"eq_beelzebubsembrace","name":"Beelzebub\'s Embrace","source":"core","tags":{"action":true},"category":"special","distance":null,"stats":{},"contextdata":{"remove_on_equip":{"removed":[{"category":"ranged","res_type":"all","value":""},{"category":"melee","res_type":"all","value":""},{"category":"armour","res_type":"all","value":""},{"category":"grenade","res_type":"all","value":""},{"category":"shield","res_type":"all","value":""},{"category":"equipment","res_type":"keyword","value":"kw_held"}]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"The final metamorphosis of those most favoured by the Prince of Plague is to assume the many-legged form of their warped master."}],"options":[],"keywords":[],"modifiers":[],"abilities":["ab_manyleggedform"]},{"id":"eq_cruelhelmet","name":"Cruel Helmet","source":"core","tags":{"trait":true,"headgear":true},"category":"equipment","distance":null,"stats":{},"contextdata":{"ignore_element":{"element":["kw_shrapnel"]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"This heavy, cumbersome helmet always includes a gruesome mask. Crafted from the iron of Dis, it retains some of the searing heat of the Inferno, its touch causing skin to blister and peel. Due to its weight, it is almost impossible for its wearer to stand for long periods of time. Praetors and Sorcerers often force these dreadful devices onto their Wretched slaves."}],"options":[],"keywords":["kw_heavy"],"modifiers":[],"abilities":["ab_gruesomeweight"]},{"id":"eq_bestialskincloak","name":"Bestial Skin Cloak","source":"core","tags":{"trait":true,"bonus":true},"category":"equipment","distance":null,"stats":{},"contextdata":{"bonus_ability":{"action_type":["dash","attack_melee"]},"equipment_remove_ability":{"action_id":["ab_oraclebeastcloak"]}},"description":[{"tags":{"desc_type":"paragraph"},"content":"A Hunter of the Left-Hand Path cannot cast the Oracle Beast Cloak Goetic Spell if it has a Bestial Skin Cloak."}],"lore":[{"tags":{"desc_type":"italic"},"content":"The proud nobles of the Court hunt the mighty creatures of the Path of the Beast for sport, much as a trophy hunter might slay a lion or a tiger for the sake of glory or vanity. The ferocious and malignant spirit of the fallen beast still lingers in its skin influencing its wearer to become ever more bestial in combat. The cloak bristles and moves on its own, seeping blood that covers its bearer."}],"options":[],"keywords":[],"modifiers":[],"abilities":["ab_spiritofthebeast"]},{"id":"eq_koraktorthegreattomeofhell","name":"Koraktor, the Great Tome of Hell","source":"core","tags":{"trait":true},"category":"special","distance":null,"stats":{},"contextdata":{"warband_general_hook":{},"add_upgrade":{},"special_category_upgrades":{"upgrades":[{"category":"goetic","count":1}]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Each Sorcerer carries a book copied from the Koraktor, the original tome of Goetic magic, said to have been written by the angel Samael, who is also known as the Venom of God. The reason an angel would have authored such a book is unknown, if the story is even true at all."}],"options":[{"ref_id":"ot_koraktor","name":"","description":[],"category":"contextobject","option_context":{"basic_option_default":{},"requirements":[{"type":"tag","value":"special_category","subvalue":"goetic"}]},"dyna_only":true,"self_ask":true,"parent_level":7,"question_name":"getAllUpgradesOfType"}],"keywords":[],"modifiers":[],"abilities":["ab_goeticpower"]},{"id":"eq_lordshipofthisworld","name":"Lordship of this World","source":"core","tags":{"trait":true},"category":"special","distance":null,"stats":{},"contextdata":{"warband_wide":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"It is written that the powers of evil wield the greatest influence over the material world. The most formidable servants of the Pit, can torment the very earth itself and bend it to do their bidding."}],"options":[],"keywords":[],"modifiers":[],"abilities":["ab_markofthepit"]},{"id":"eq_pieceofsilver","name":"Piece of Silver","source":"core","tags":{"trait":true},"category":"special","distance":null,"stats":{},"contextdata":{"warband_wide":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Said to be a sliver of one of the thirty pieces of silver that Judas Iscariot accepted in return for betraying the Redeemer, there can be no talisman more potent to the servants of Hell."}],"options":[],"keywords":[],"modifiers":[],"abilities":["ab_luckofthedevil"]},{"id":"eq_trenchdog","name":"Trench Dog Ownership","source":"core","tags":{"trait":true},"category":"special","distance":null,"stats":{},"contextdata":{"add_extra_model_item":{"model_purchases":["rel_fc_md_trenchdog"],"exempt":true,"state":"dog"}},"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"You add a "},{"tags":{"desc_type":"modelslim"},"content":"md_trenchdog"},{"tags":{"desc_type":"default"},"content":" to your Warband."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"A Trench Dog is represented by a model that is mounted on a 25mm base."}]}],"lore":[{"tags":{"desc_type":"italic"},"content":"A great many animals serve in the trenches alongside the soldiers. Wardogs are by far the most common, but tame ocelots, barbary apes, small bears, and other unusual pets abound, while the forces of Hell keep hellhounds and other Infernal beasts as pets."}],"options":[],"keywords":["kw_deployable"],"abilities":["ab_thedogsofwar"]},{"id":"eq_trenchdog_guarddog","name":"Trench Dog (Guard Dog) Ownership","source":"core","tags":{"trait":true},"category":"special","distance":null,"stats":{},"contextdata":{"add_extra_model_item":{"model_purchases":["rel_fc_md_trenchdog_guarddog"],"exempt":true,"state":"dog"}},"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"You add a "},{"tags":{"desc_type":"modelslim"},"content":"md_trenchdog_guarddog"},{"tags":{"desc_type":"default"},"content":" to your Warband."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"A Trench Dog is represented by a model that is mounted on a 25mm base."}]}],"lore":[{"tags":{"desc_type":"italic"},"content":"A great many animals serve in the trenches alongside the soldiers. Wardogs are by far the most common, but tame ocelots, barbary apes, small bears, and other unusual pets abound, while the forces of Hell keep Hellhounds and other infernal beasts as pets."},{"tags":{"desc_type":"italic"},"content":"These dogs both warn their masters of impending danger and fight fiercely for their company."}],"options":[],"keywords":["kw_deployable"],"abilities":["ab_thedogsofwar"]},{"id":"eq_trenchdog_mercydog","name":"Trench Dog (Mercy Dog) Ownership","source":"core","tags":{"trait":true},"category":"special","distance":null,"stats":{},"contextdata":{"add_extra_model_item":{"model_purchases":["rel_fc_md_trenchdog_mercydog"],"exempt":true,"state":"dog"}},"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"You add a "},{"tags":{"desc_type":"modelslim"},"content":"md_trenchdog_mercydog"},{"tags":{"desc_type":"default"},"content":" to your Warband."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"A Trench Dog is represented by a model that is mounted on a 25mm base."}]}],"lore":[{"tags":{"desc_type":"italic"},"content":"A great many animals serve in the trenches alongside the soldiers. Wardogs are by far the most common, but tame ocelots, barbary apes, small bears, and other unusual pets abound, while the forces of Hell keep Hellhounds and other infernal beasts as pets."},{"tags":{"desc_type":"italic"},"content":"Mercy dogs carry a Medi-Kit."}],"options":[],"keywords":["kw_deployable"],"abilities":["ab_thedogsofwar"]},{"id":"eq_trenchdog_martyrdomdog","name":"Trench Dog (Martyrdom Dog) Ownership","source":"core","tags":{"trait":true},"category":"special","distance":null,"stats":{},"contextdata":{"add_extra_model_item":{"model_purchases":["rel_fc_md_trenchdog_martyrdomdog"],"exempt":true,"state":"dog"}},"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"You add a "},{"tags":{"desc_type":"modelslim"},"content":"md_trenchdog_martyrdomdog"},{"tags":{"desc_type":"default"},"content":" to your Warband."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"A Trench Dog is represented by a model that is mounted on a 25mm base."}]}],"lore":[{"tags":{"desc_type":"italic"},"content":"A great many animals serve in the trenches alongside the soldiers. Wardogs are by far the most common, but tame ocelots, barbary apes, small bears, and other unusual pets abound, while the forces of Hell keep Hellhounds and other infernal beasts as pets."},{"tags":{"desc_type":"italic"},"content":"Trench Pilgrims often enthusiastically strap their dogs with explosives so they can partake in a glorious martyrdom operation."}],"options":[],"keywords":["kw_deployable"],"abilities":["ab_thedogsofwar"]},{"id":"eq_trenchdog_hellhound","name":"Trench Dog (Hellhound) Ownership","source":"core","tags":{"trait":true},"category":"special","distance":null,"stats":{},"contextdata":{"add_extra_model_item":{"model_purchases":["rel_fc_md_trenchdog_hellhound"],"exempt":true,"state":"dog"}},"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"You add a "},{"tags":{"desc_type":"modelslim"},"content":"md_trenchdog_hellhound"},{"tags":{"desc_type":"default"},"content":" to your Warband."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"A Trench Dog is represented by a model that is mounted on a 25mm base."}]}],"lore":[{"tags":{"desc_type":"italic"},"content":"A great many animals serve in the trenches alongside the soldiers. Wardogs are by far the most common, but tame ocelots, barbary apes, small bears, and other unusual pets abound, while the forces of Hell keep Hellhounds and other infernal beasts as pets."},{"tags":{"desc_type":"italic"},"content":"This horrifying infernal canine is the size of a small pony, and within its tortured belly rage flames of Hell itself. It howls in constant agony and rage in combat."}],"options":[],"keywords":["kw_deployable"],"abilities":["ab_thedogsofwar"]},{"id":"eq_warwolfchainmaw","name":"Chain Maw","source":"core","tags":{"action":true,"weapon":true,"model":true},"category":"melee","distance":null,"stats":{"hands_melee":0,"melee":true},"contextdata":{"get_weapon":{},"injury_dice_mod":{"modifiers":[1]},"plus_dice":{"val":[1]}},"description":[],"lore":[],"options":[],"keywords":["kw_riskyaction","kw_ignorearmour"],"modifiers":[]},{"id":"eq_warwolfshreddingclaws","name":"Shredding Claws","source":"core","tags":{"action":true,"weapon":true,"model":true},"category":"melee","distance":null,"stats":{"hands_melee":2,"melee":true},"contextdata":{"get_weapon":{},"injury_dice_mod":{"modifiers":[1]}},"description":[],"lore":[],"options":[],"keywords":["kw_riskyaction","kw_cumbersome"],"modifiers":[]},{"id":"eq_beastofnomanslandbite","name":"Bite","source":"core","tags":{"action":true,"weapon":true,"model":true},"category":"melee","distance":null,"stats":{"hands_melee":0,"melee":true},"contextdata":{"get_weapon":{},"ignore_armour":{}},"description":[{"tags":{"desc_type":"paragraph"},"content":"The Beast treats its Bite as a melee weapon that grants a +1 DICE bonus to hit (for total of +3D). Additionally, the attack ignores any armour worn by the target and has a +1 DICE bonus to injure. The Bite does not take any hands to wield.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"}]}],"lore":[],"options":[],"keywords":[],"modifiers":["+1D to Hit","+1D to Injuries","Ignore Armour"]},{"id":"eq_beastofnomanslandclaws","name":"Claws","source":"core","tags":{"action":true,"weapon":true,"model":true},"category":"melee","distance":null,"stats":{"hands_melee":2,"melee":true},"contextdata":{"get_weapon":{}},"description":[{"tags":{"desc_type":"paragraph"},"content":"The Beast treats its Claws as a two-handed melee weapon with the Keyword RISKY. The Claws have a +1 DICE bonus to injure. Because the Claws are wielded alongside the Bite, they are treated as an Off-Hand Weapon and suffer penalties accordingly.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"},{"val":"RISKY","id":"kw_riskyaction"}]}],"lore":[],"options":[],"keywords":["kw_riskyaction"],"modifiers":["+1D to Injuries"]},{"id":"eq_artillerywitchinfernalbomb","name":"Infernal Bomb","source":"core","tags":{"action":true,"weapon":true,"model":true},"category":"ranged","distance":36,"stats":{"hands_ranged":1,"ranged":true},"contextdata":{"get_weapon":{},"ignore_mod":{"modifiers":["cover","long_range","elevated_position"]},"blast_mod":{"modifiers":[3]}},"description":[],"lore":[],"options":[],"keywords":["kw_reload","kw_shrapnel","kw_scatter"],"abilities":["ab_duck","ab_infernalstrike","ab_mightyexplosion"]},{"id":"eq_artillerywitchinfernalgasbomb","name":"Infernal Gas Bomb","source":"core","tags":{"action":true,"weapon":true,"model":true},"category":"ranged","distance":36,"stats":{"hands_ranged":1,"ranged":true},"contextdata":{"get_weapon":{},"injury_dice_mod":{"modifiers":[-1]},"blast_mod":{"modifiers":[3]},"ignore_mod":{"modifiers":["cover","long_range","elevated_position"]}},"description":[],"lore":[],"options":[],"keywords":["kw_ignorearmour","kw_gas","kw_reload","kw_scatter"],"abilities":["ab_chokinggas"]},{"id":"eq_sineatertenderizermaul","name":"Tenderizer Maul","source":"core","tags":{"action":true,"weapon":true,"model":true},"category":"melee","distance":null,"stats":{"hands_melee":2,"melee":true},"contextdata":{"get_weapon":{},"injury_flat_mod":{"modifiers":[1]}},"description":[],"lore":[],"options":[],"keywords":["kw_heavy"],"abilities":["ab_swingingblow"]},{"id":"eq_tankpalanquin","name":"Tank Palanquin","source":"core","tags":{"trait":true,"bonus":true,"armour":true},"category":"armour","distance":null,"stats":{},"contextdata":{"bonus_ability":{"action_type":["dash"]},"injury_flat_mod":{"modifiers":[-3]},"keyword_add":{"value":["kw_strong"]},"model_equipment_restriction":{"removed":[{"tag":"shield","res_type":"all","value":""}],"banned":[{"tag":"shield","res_type":"all","value":""}]}},"description":[],"lore":[{"tags":{"desc_type":"paragraph"},"content":"Trench Ghost Heretic Priests sometimes ride into battle standing on top of an armoured platform called a Tank Palanquin. From their lofty vantage point, they rain destruction upon the foe."}],"options":[],"keywords":["kw_strong"],"abilities":["ab_bulkytank","ab_steadfast","ab_deathfromonhigh"]},{"id":"eq_communicantcross","name":"Communicant Cross","source":"core","tags":{"trait":true,"headgear":true,"model":true},"category":"equipment","distance":null,"stats":{},"contextdata":{"ignore_element":{"element":["kw_shrapnel","kw_gas"]},"keyword_ignore":{"value":["kw_fear"]}},"description":[],"lore":[{"tags":{"desc_type":"paragraph"},"content":"A sacred cross is nailed on the face of the Communicant."}],"options":[],"keywords":[],"modifiers":[]},{"id":"eq_martyrdomdevice","name":"Martyrdom Device","source":"core","tags":{"trait":true,"model":true},"category":"equipment","distance":null,"stats":{},"contextdata":{},"description":[],"lore":[],"options":[],"keywords":["kw_consumable"],"abilities":["ab_martyrdom"]},{"id":"eq_catherinewheel","name":"Catherine Wheel","source":"core","tags":{"action":true,"weapon":true,"model":true,"methodius":true},"category":"melee","distance":null,"stats":{"hands_melee":1,"melee":true},"contextdata":{"get_weapon":{},"plus_dice":{"val":[1]}},"description":[],"lore":[],"options":[],"keywords":["kw_heavy","kw_riskyaction","kw_deadly"],"abilities":[]},{"id":"eq_bonebreakermace","name":"Bonebreaker Mace","source":"core","tags":{"action":true,"weapon":true,"model":true},"category":"melee","distance":null,"stats":{"hands_melee":1,"melee":true},"contextdata":{"get_weapon":{},"injury_dice_mod":{"modifiers":[1]}},"description":[],"lore":[],"options":[],"keywords":["kw_riskyaction"],"modifiers":[]},{"id":"eq_gavelofjustice","name":"Gavel of Justice","source":"core","tags":{"action":true,"weapon":true,"model":true},"category":"melee","distance":null,"stats":{"hands_melee":1,"melee":true},"contextdata":{"get_weapon":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"The staff of a Witchburner is both a mark of their office and a weapon imbued with the wrath of God against those who have broken divine law. It dooms the souls of those found guilty to burn in flames for all eternity."}],"options":[],"keywords":["kw_critical"],"abilities":["ab_wrathofgod"]},{"id":"eq_gunturret","name":"Gun Turret","source":"core","tags":{"dontshow":true},"category":"field","distance":24,"stats":{"hands_ranged":2,"ranged":true},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph"},"content":"The Gun Turret can\u2019t be moved. A model that is in base contact with the Gun Turret is considered to be armed with it. Only one model can be armed with the Gun Turret at a time. The model must be able to use Ranged weapons to arm themselves with the Gun Turret. While using the Gun Turret, the model can\u2019t take any other ACTIONS, except Move. If the model moves away from contact with the Gun Turret, or if they\u2019re engaged in melee combat, they\u2019re not armed with the Gun Turret any longer.","glossary":[{"val":"ACTIONS","id":"kw_action"}]},{"tags":{"desc_type":"paragraph"},"content":"The Gun Turret can make three Attack Actions instead of one, as RISKY ACTIONS each. A model armed with it can target separate models with each attack, as long as all targets are within 6\u201d of each other. After taking all three attacks, the Activation of the model is over regardless of any remaining ACTIONS the model might have. If they fail any of the RISKY ACTIONS, the Activation of the model is over and the Gun Turret is jammed.","glossary":[{"val":"RISKY","id":"kw_riskyaction"},{"val":"ACTIONS","id":"kw_action"}]},{"tags":{"desc_type":"paragraph"},"content":"A model can attempt to unjam the Gun Turret with an ACTION, as long as they\u2019re in base contact with it and not engaged in melee combat. If successful, the Gun Turret is no longer jammed.","glossary":[{"val":"ACTION","id":"kw_action"}]},{"tags":{"desc_type":"paragraph"},"content":"After making three attacks, consecutively or not, by the same model or not, the Gun Turret must be reloaded as a RISKY ACTION by a model that is in base contact with it and not engaged in melee combat. If successful, the Gun Turret is reloaded, and the Activation of the model is over regardless of any remaining ACTIONS the model might have. If failed, the Activation of the model is over and the Gun Turret is jammed. Unjamming the Gun Turret, in this case only, will also reload it.","glossary":[{"val":"RISKY ACTION","id":"kw_riskyaction"},{"val":"ACTIONS","id":"kw_action"}]},{"tags":{"desc_type":"paragraph"},"content":"The Gun Turret rolls attacks with +1 DICE. It reduces the injury roll penalty from armor and shields by 1. Thus Reinforced Armor only offers a -1 modifier to injury rolls caused by this weapon. It also adds +1 DICE when rolling on the Injury Chart. The model cannot apply any of their own applicable modifiers, if any, when armed with the Gun Turret.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"}]},{"tags":{"desc_type":"paragraph"},"content":"The model armed with the Gun Turret is considerably exposed to enemy fire. Enemies add +1 DICE when rolling on to hit the model with ranged attacks.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"}]}],"lore":[],"options":[],"keywords":["kw_critical","kw_riskyaction"],"modifiers":["3 Attacks","+1D to Hit","+1D to Injuries"]},{"id":"eq_mortar","name":"Mortar","source":"core","tags":{"dontshow":true},"category":"field","distance":36,"stats":{"hands_ranged":2,"ranged":true},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph"},"content":"The Mortar can\u2019t be moved. A model that is in base contact with the Mortar is considered to be armed with it. Only one model can be armed with the Mortar at a time. The model must be able to use Ranged weapons to arm themselves with the Mortar. While using the Mortar, the model can\u2019t take any other ACTIONS, except Move. If the model moves away from base contact with the Mortar, or if they engage in melee combat with an enemy, it is not using the Mortar any longer. The Mortar can only be used once per turn. The model cannot apply any of their own applicable modifiers, if any, when armed with the Mortar.","glossary":[{"val":"ACTIONS","id":"kw_action"}]},{"tags":{"desc_type":"paragraph"},"content":"Attacking with the Mortar is considered as a RISKY ACTION. Specify a 1x1mm point on the battlefield within 36\u201d of the model that is armed with the Mortar and that they can see the location you want to target, or a 1x1mm point within 6\u201d of any one of your warband models that can see the location you want to target. Next, make a Ranged Attack as a RISKY ACTION with the model armed with the Mortar. If attacking a location from the line of sight of an allied model, make the roll with -1 DICE. If the roll fails (i.e. you roll 6 or less with the two lowest Dice), the model\u2019s Activation is over and the Mortar misfires, landing 3\u201d away from its intended location, multiplied by the number representing the degree of failure (for example, if you rolled 4, the bomb lands 15\u201d away, as 7-4=3, and 5x3=15). The direction is decided by your opponent. Roll on the Injury Chart for each model within the BLAST radius.","glossary":[{"val":"RISKY ACTION","id":"kw_riskyaction"},{"val":"-1 DICE","id":"kw_minusdice"},{"val":"BLAST","id":"kw_blast"}]},{"tags":{"desc_type":"paragraph"},"content":"If the bomb lands exactly on top of any model, roll with 3D6 on the Injury Chart and add the dice together! Other models hit by the projectile roll on the Injury Chart as standard. Any model hit, but not taken Out of Action, by this attack is blown D3\u201d directly away from the point of impact (roll for each model separately), stopping if they hit other models/buildings/objects. This attack has the Keyword SHRAPNEL and therefore causes an additional +1 BLOOD MARKER. Cover, range and higher position do not affect this attack.","glossary":[{"val":"SHRAPNEL","id":"kw_shrapnel"},{"val":"BLOOD MARKER","id":"kw_bloodmarker"}]},{"tags":{"desc_type":"paragraph"},"content":"Roll injuries for models that would benefit from Cover from the perspective of the BLAST point with -1 DICE. The Activation of the model ends immediately after using the Mortar, regardless of any remaining ACTIONS the model might have.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"},{"val":"BLAST","id":"kw_blast"},{"val":"ACTIONS","id":"kw_action"}]}],"lore":[],"options":[],"keywords":["kw_shrapnel","kw_riskyaction","kw_blast"],"modifiers":["Blast 3\\""]},{"id":"eq_thedragon_deadlyteethandclaws","name":"Deadly Teeth and Claws","source":"core","tags":{"action":true,"weapon":true,"model":true},"category":"melee","distance":null,"stats":{"hands_melee":1,"melee":true},"contextdata":{"get_weapon":{},"plus_dice":{"val":[1]},"injury_dice_mod":{"modifiers":[1]}},"description":[],"lore":[],"options":[],"keywords":["kw_ignorearmour"],"modifiers":[]},{"id":"eq_thedragon_firebreath","name":"Fire Breath","source":"core","tags":{"action":true,"weapon":true,"model":true},"category":"ranged","distance":10,"stats":{"hands_ranged":2,"ranged":true},"contextdata":{"get_weapon":{},"auto_hit":{},"blast_mod":{"modifiers":[3]},"plus_dice":{"val":[2]}},"description":[],"lore":[],"options":[],"keywords":["kw_fire","kw_ignorearmour","kw_scatter"],"modifiers":["2 Attacks"]},{"id":"eq_thedragon_tailswipe","name":"Tail Swipe","source":"core","tags":{"action":true,"weapon":true,"model":true},"category":"melee","distance":null,"stats":{"hands_melee":1,"melee":true},"contextdata":{"get_weapon":{},"injury_flat_mod":{"modifiers":[1]}},"description":[{"tags":{"desc_type":"paragraph"},"content":"After you make a Melee Attack with The Dragon, if it is still within 1\\" of any models that are not on its back, make a Melee Attack against each of the models that are not on its back in the order of your choice.","glossary":[{"val":"ACTION","id":"kw_action"}]}],"lore":[],"options":[],"keywords":[],"modifiers":[]},{"id":"eq_saintsreliquary","name":"Saint\'s Reliquary","source":"core","tags":{"trait":true},"category":"equipment","distance":null,"stats":{},"contextdata":{"keyword_mod":{"mods":[{"type":"add","value":"kw_tough"},{"type":"remove","value":"kw_infiltrator"}]}},"description":[{"tags":{"desc_type":"paragraph"},"content":"A model equipped with the Saintly Relic gains the Keyword TOUGH, but loses the Keyword INFILTRATOR (if it has it) and can never have Cover.","glossary":[{"val":"TOUGH","id":"kw_tough"},{"val":"INFILTRATOR","id":"kw_infiltrator"}]}],"lore":[],"options":[],"keywords":[],"modifiers":[]},{"id":"eq_faithfulskull","name":"Faithful Saint\'s Skull","source":"core","tags":{"trait":true},"category":"equipment","distance":null,"stats":{},"contextdata":{"keyword_add":{"value":["kw_infiltrator"]}},"description":[],"lore":[],"options":[],"keywords":["kw_held"],"modifiers":[]},{"id":"eq_hellskull","name":"Screaming Skull","source":"core","tags":{"trait":true,"flag":true},"category":"equipment","distance":null,"stats":{"hands_melee":1,"hands_ranged":1},"contextdata":{"warband_wide":{},"gain_glory":{"value":1}},"description":[{"tags":{"desc_type":"paragraph"},"content":"Add +2 DICE to your Morale Checks while the model is on the Battlefield and is not Down or Out of Action. In addition, you gain 1 \u263c at the end of any game in which the model is on the Battlefield and is not Down or Out of Action","glossary":[{"val":"+2 DICE","id":"kw_plusdice"}]}],"lore":[{"tags":{"desc_type":"italic"},"content":"Most warbands and units carry banners, flags, standards, pennants or other symbols to rally the troops."}],"options":[],"keywords":["kw_held"],"modifiers":[]},{"id":"eq_lockofsamsonshair","name":"Lock of Samson\'s Hair","source":"core","tags":{"trait":true},"category":"equipment","distance":null,"stats":{},"contextdata":{"keyword_mod":{"mods":[{"type":"add","value":"kw_strong"}]}},"description":[{"tags":{"desc_type":"paragraph"},"content":"A model with a Lock of Samson\u2019s Hair gains the STRONG Keyword. In addition add +1 INJURY DICE to rolls for Melee Attacks made by a model with a Lock of Samson\u2019s Hair. ","glossary":[{"val":"STRONG","id":"kw_strong"},{"val":"+1 INJURY DICE","id":"kw_injurydice"}]}],"lore":[],"options":[],"keywords":[],"modifiers":[]},{"id":"eq_vivisector","name":"Vivisector","source":"core","tags":{"action":true,"weapon":true,"trait":true},"category":"melee","distance":null,"stats":{"hands_melee":2,"melee":true},"contextdata":{"get_weapon":{}},"abilities":["ab_painamplifier","ab_inflictpain"],"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"This weapon offers both excellent protection by keeping the targets at bay, and its haft incorporates a trigger that injects a horrifying cocktail of holy ointments, chemical toxins, nerve agents and micro-shards of holy relics into any open wound, causing pain that is unbearable to even supernatural enemies. It can also be used to quickly dissect fallen enemies so their organs can be preserved by the Combat Biologist."}],"options":[],"keywords":["kw_cumbersome","kw_block"],"modifiers":[]},{"id":"eq_graspingmaw","name":"Grasping Maw","source":"creature_caster","tags":{"trait":true},"category":"equipment","distance":null,"stats":{},"contextdata":{},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"For some infected by the Great Hunger, their tongue muscles, buccal fat and even their teeth reach out endlessly for satiation, eventually forming long, searching and snatching tendrils."}],"options":[],"keywords":[],"abilities":["ab_mutation","ab_grasp"]},{"id":"eq_devouringjaws","name":"Devouring Jaws","source":"creature_caster","tags":{"trait":true},"category":"equipment","distance":null,"stats":{},"contextdata":{},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Those blessed with the most advanced strains of the Great Hunger find new mouths tearing open all across their bodies, gnashing blunt teeth into splinters as they crave their own meals"}],"options":[],"keywords":[],"abilities":["ab_masticate","ab_mutation"]},{"id":"eq_blackspotrifle","name":"Black Spot Rifle","source":"core","tags":{"action":true,"weapon":true,"rifle":true},"category":"ranged","distance":24,"stats":{"hands_ranged":2,"ranged":true},"contextdata":{"plus_dice":{"val":[1]},"get_weapon":{}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"A name for the myriad scavenged firearms that have been blessed by the Matagot Hags. Where once they fired bullets, now they hail larval hellflies imbued with the Hag\u2019s maternal pheromones, driving nearby thralls into a feeding frenzy."}],"options":[],"keywords":["kw_bayonetlug","kw_infectionmarker"],"abilities":["ab_freshmeat"]},{"id":"eq_butcherbayonet","name":"Butcher Bayonet","source":"core","tags":{"action":true,"weapon":true,"bayonet_lug":true},"category":"melee","distance":null,"stats":{"hands_melee":2,"melee":true},"contextdata":{"get_weapon":{},"ignore_count":{},"injury_dice_mod":{"modifiers":[1]},"model_equipment_restriction":{"required":[{"res_type":"equipment_keyword","value":"kw_bayonetlug"}]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"These huge cleavers carve jagged chunks out of the soldiers of the Tyrant God, spreading raw meat with visceral, delicious abundance."}],"options":[],"keywords":["kw_cumbersome","kw_shieldcombo"],"abilities":["ab_hackandhew"]},{"id":"eq_pestilentfang","name":"Pestilent Fang","source":"core","tags":{"action":true,"weapon":true},"category":"melee","distance":null,"stats":{"hands_melee":2,"melee":true},"contextdata":{"get_weapon":{},"injury_flat_mod":{"modifiers":[1]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"These crooked, flea-headed mauls are gifts from Beelzebub himself, modelled after the twisted bludgeon of a Lord of Tumours that consumed another and became the first Great Maw."}],"options":[],"keywords":["kw_heavy"],"abilities":["ab_gnashingblow","ab_rottensplinters"]},{"id":"eq_holysmoke","name":"Holy Smoke","source":"core","tags":{"trait":true},"category":"equipment","distance":null,"stats":{},"contextdata":{},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Made of a mixture of frankincense, agarwood, and secret chemicals from the Mendelist Order, this burned incense is inhaled by Prussian Trench Clerics before battle. It is highly addictive but grants great physical and mental resilience."}],"options":[],"keywords":["kw_consumable"],"modifiers":[],"abilities":["ab_holysmoke"]},{"id":"eq_takwinanqabird","name":"Takwin Anqa Bird","source":"core","tags":{"trait":true},"category":"equipment","distance":null,"stats":{},"contextdata":{},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"This Takwin creation is popular with the Sultanate\u2019s nobility. It is used for hunting, and also valued for its ability to recite the Surah with a resonating sound that is painful to hear for the enemies of Allah, and for its hypnotic eyes that confuse and disorient foes."}],"options":[],"keywords":[],"modifiers":[],"abilities":["ab_causeconfusion"]},{"id":"eq_sarcophagusmine","name":"Sarcophagus Mine","source":"core","tags":{"trait":true,"armour":true},"category":"armour","distance":null,"stats":{},"contextdata":{"upgrade_stat":{"upgrades":[{"stat":"armour","value":-3}]},"injury_flat_mod":{"modifiers":[-3]},"blast_mod":{"modifiers":[3]},"model_equipment_restriction":{"removed":[{"category":"equipment","res_type":"all","value":""},{"category":"melee","res_type":"all","value":""},{"category":"ranged","res_type":"all","value":""},{"category":"grenade","res_type":"all","value":""},{"category":"shield","res_type":"all","value":""}],"required":[{"category":"armour","res_type":"id","value":"eq_sarcophagusmine"}]}},"description":[],"lore":[{"tags":{"desc_type":"italic"},"content":"Heretic Troopers can be encased in suits of thick armour that have been filled with explosives, which can be triggered by the Trooper when the enemy draws close."}],"options":[],"keywords":[],"abilities":["ab_walkingbomb","ab_detonationsarcophagus"]}]'),g=JSON.parse('[{"id":"fc_ironsultanate","source":"core","tags":{"url_custom":"iron-sultanate"},"contextdata":{"faction_keyword":{"name":"kw_sultanate"}},"name":"Iron Sultanate","team":"faithful","description":[{"tags":{"desc_type":"paragraph"},"content":"When the Infidels opened the thrice-cursed Gate to Jahannam, unleashing Gog and Magog upon Those Who Believe, it seemed that all was lost and Shay \u0101n would emerge victorious over Dunya. But the Creator of the Universe came to the aid of the Believers, and as had been written, the great Iron Wall of Dhu al-Qarnayn manifested itself in the lands ruled by the Sultan of R\xfbm."},{"tags":{"desc_type":"paragraph"},"content":"A call was sent to Those Who Believe righteously, and over the coming decades, the migration of all Believers, second in importance only to the Hijrah of the Prophet himself, took place across Europa, Asia, and Africa. Millions perished on the road and at sea, for the Heretics and their Shay\u0101n lords swarmed them as locusts swarm fields of ripe sesame, devouring them and raising vile monuments and statues from their limbs and heads, so they could not be buried as is decreed in the Holy texts. Yet once all those who survived the journey had come, the mighty Gates of al-Qarnayn were closed, and the Great Sultanate of the Invincible Iron Wall of the Two Horns that Pierce the Sky was formed."},{"tags":{"desc_type":"paragraph"},"content":"The assaults of the slaves of Jahannam against the Sultanate have never ceased since. Each day, new martyrs are mourned as they defend the Wall and confront the Heretics who have overcome its defences. Within the walls, lost knowledge flourishes, and from mosques of white marble and gold, the muezzin call, summoning the Believers to pray for the Sultan\u2019s army as it struggles to protect the lands within the wall and defend the caravan trails that provide the Sultanate with vital trade goods."},{"tags":{"desc_type":"paragraph"},"content":"The protection of the Iron Wall has had an extensive influence on the Sultanate\u2019s way of war. The conscripted Azebs are experts at feigned flight and skirmish, while the loping Lions of Jabir harass the enemy flanks. All the while, the superb artillery of the Sultan bombards the enemy as they make their tortuous journey across a battlefield littered with traps set by the skilled Sappers. When they reach the ranks of the righteous, the Janissaries, the Sultan\u2019s elite household troops, close in and finish the enemy with a devastating counter-charge led by their iron-willed officers. Dreaded Assassins from Alamut prowl in the winds of time, striking at enemy elites and leaders, while the Alchemists of the House of Wisdom unleash devastating weapons made deadly by their elemental mastery, capable of overcoming the defences of virtually any foe."},{"tags":{"desc_type":"paragraph"},"content":"Beyond the Iron Wall, forces of the Sultan operate in small, mobile companies, each with a particular mission to accomplish. They hunt down apostates that have gone to serve Shay \u0101n, look for relics from the time of the prophets, and seek to recover lost treasures and books of knowledge from the ruins of fallen Caliphates. Though an understanding between the Church and the Sultanate exists, the commanders of these expeditions will tolerate no interference and do not hesitate to crush those who would hinder their mission. Resentment against the Infidels who released Gog and Magog runs deep in the Sultanate, and matters of honour are swiftly resolved with duels to the death. Woe to those who dare to hinder the mission of Those Who Believe."}],"rules":[],"options":[]},{"id":"fc_newantioch","source":"core","tags":{"url_custom":"new-antioch"},"contextdata":{"faction_keyword":{"name":"kw_antioch"}},"name":"The Principality of New Antioch","team":"faithful","description":[{"tags":{"desc_type":"paragraph"},"content":"For over three hundred years, the Principality of New Antioch has stood defiantly as the focal point of the Church and the Faithful at the very edge of the shadow cast by the Gate of Hell. It is the Home of All Our Hopes, a bulwark against Heretic forces and the first defence against the Devil\u2019s might. Should New Antioch fall, all of the Levant will be lost. "},{"tags":{"desc_type":"paragraph"},"content":"War has never left this corner of the world. The ancient city of Antioch was destroyed by a mysterious demonic weapon in the year 1545, but the Faithful never gave up their positions in the ruins. Despite the lethal demonic essence emanating from the crater that was left behind, the garrison held on, even as mighty Constantinople fell to the legions of Kimaris, Marquis of Hell."},{"tags":{"desc_type":"paragraph"},"content":"Before it was destroyed, the ancient city of Antioch was always the first line of defence against the Heretic forces. Thus, it is no wonder that in 1559, the Sword Congress of Vienna decreed the reconstruction and fortification of the city, mandating that all Faithful nations deliver a yearly tithe to New Antioch."},{"tags":{"desc_type":"paragraph"},"content":"This levy is rarely in the form of coin; instead, endless supply trains of foodstuffs, tools, ammunition, weaponry, machinery, skilled workers, and engineers arrive from across Europa and the Mediterranean Sea, as well as the African dominions. Keeping the supply routes open is a constant game of cat and mouse, as Heretic infiltrators and raiders harry the caravans and ships that allow the Principality to exist."},{"tags":{"desc_type":"paragraph"},"content":"New Antioch has grown to be the most vital fortress-city in the world, both the Sword and the Shield of Europa and Africa. Princes of the Church and leaders of the domains who oppose Hell understand that it is better to fight their battles against the Heretics far away from their heartlands. To this day, New Antioch has withstood eight great sieges, and its famed walls, with their seventy-seven mighty towers, have never been breached. This is partly due to hundreds of anchorites, metallic battle shrines with devotees entombed within them, embedded into the walls, keeping a vigilant watch day and night. "},{"tags":{"desc_type":"paragraph"},"content":"Above all, it is the volunteers who rally under the Banner of Christ that ensure the continuous existence of the Principality. The streets of New Antioch resound with hundreds of languages and dialects. Polish-Lithuanian hussars brush shoulders with the last remnants of the Varangian Guard. At the same time, street preachers from \xc9ire exhort the soldiery of Abyssinia to lay down their lives for the cause. One might even witness the solemn procession of Church Engineers, carrying their latest invention to be tested on the front lines. "},{"tags":{"desc_type":"paragraph"},"content":"Factories belch out black smoke as newly constructed tanks roll out of the workshops. Day and night, foundries blaze with the fiery flow of molten metal to keep the artillery battalions, the pride and joy of New Antioch, at full strength. In the city\u2019s techno-laboratories, the Church toils away creating superhuman Communicants empowered by the cloned flesh and blood of the Redeemer. Thousands of workers sacrifice their lives in horrific accidents and crushing overwork each year. Towering monuments honouring their sacrifices stand throughout the city."},{"tags":{"desc_type":"paragraph"},"content":"Despite all these preparations, it is a grim reality that New Antioch could never withstand a full-scale onslaught from the combined Heretic forces. It is only thanks to the ferocious and bloody internal conflict among the devils that the Principality is still standing. The archdevils and princes of Hell constantly bicker and plot against each other. Rarely does one of them gain supremacy long enough to mount a full-scale invasion. The war has spanned centuries, with decades of uneasy lulls between great battles, yet the rulers of Hell are immortal, and to them the war is still in its infancy. They are beings that predate time itself and wish to savour the agony of the mortals who die in the millions. Thus, the Great War rages on, marked by long years of silence, only to be shattered by sudden, ferocious assaults."},{"tags":{"desc_type":"paragraph"},"content":"In recent years, the Duke has dispatched small forces into the tortured landscape of No Man\u2019s Land, the desolate stretch between New Antioch and the Heretic domains. There they seek to gather intelligence, search for artefacts of power, raid Heretic forces, secure strategic strongpoints, and loot the battlefields for the wealth of coin and weaponry lost over the centuries."},{"tags":{"desc_type":"paragraph"},"content":"Granted only a commission from the Duke, these warbands must raise their own funds and muster their own forces. The lure of holy relics, vast riches, and worldwide renown ensures a steady supply of ambitious leaders willing to risk all in the crucible of war. Competition for loot, supplies, artefacts, and information is fierce. These warbands often come to blows, not just with Heretical forces, but also with rival factions and crazed Trench Pilgrims."}],"rules":["rl_newantiochfireteam"],"options":[]},{"id":"fc_trenchpilgrim","source":"core","tags":{"url_custom":"trench-pilgrims"},"contextdata":{"faction_keyword":{"name":"kw_pilgrim"}},"name":"Trench Pilgrims","team":"faithful","description":[{"tags":{},"content":"As the war rages against the minions of Hell, strange visions torment the Faithful across the globe. Men and women touched by Heaven receive glimpses of divine mysteries, and revelations are bestowed upon them by the messengers of God. Sisters of the Holy Orders are marked by stigmata and take up the sword and the cross, as instructed by the angels. Those who have transgressed seek to atone for their sins by taking as many followers of the Devil as possible with them into the afterlife."},{"tags":{},"content":"So they come, the mad and the maimed, the God-touched and the guilt-ridden, all gathering around Prophets and Prophetesses, forming Trench Pilgrim Processions. These disorganised groups follow the prophets of the Lord unto the front lines and fight with unrivalled zeal, throwing themselves against the Heretics. They arm themselves with anything they can get their hands on, from antique muskets to scourges and Molotov cocktails."},{"tags":{},"content":"The Holy See does not officially sanction Pilgrims, but the Church still blesses the crusades of the Faithful. Pilgrim Processions are a common sight on the battlefields, charging across No Man\u2019s Land in suicidal assaults against the Heretics. They are guided by the visions of the Prophets and Prophetesses who lead them, and urged on by the whips of Castigators \u2013 tasked with instilling the fear of God in their troops."},{"tags":{},"content":"Most Pilgrims are men and women with little military training, but when they don the iron capirote of a Trench Pilgrim, their minds are fortified and their resolve is unyielding. With fear stripped away, they charge into battle, undeterred even by demons from the deepest Bolgias of Hell. Those who fall in battle may discover that their mission is not yet at an end. Sometimes the Seventh Meta-Christ will deem a fallen Pilgrim worthy and bring them back as a Martyr-Penitent. These warriors are halfway between Heaven and Earth, able to fight once more and feel no pain from bullet or bayonet thrust."},{"tags":{},"content":"Rarer and more dangerous are the Stigmatic Nuns, holy sisters who manifest wounds to match those of the Third Meta-Christ, whom the Nuns venerate. They excel in close-quarters combat, for each bleeding wound they suffer makes them stronger, not weaker. Their devotion to suffering, as their Lord once did, grants them strength and endurance beyond that of mere mortals. Armed with swords and pistols, they charge across No Man\u2019s Land, heedless of danger, praying to receive wounds for the Redeemer, which will transform them into the very Vengeance of the Lord."},{"tags":{},"content":"Ecclesiastic Prisoners are driven in front of the Trench Pilgrims, captured enemies of the True Faith or volunteer sinners. Each is strapped with a high explosive, which is detonated once they reach enemy lines. They dash across the killing grounds, hoping to survive the blast somehow and escape, or take as many followers of Lucifer with them as they can, depending on their convictions."},{"tags":{},"content":"A War Prophet is often ably supported by a second-in-command called a Castigator, a veteran of war pilgrimages who is entrusted with maintaining discipline and spiritual purity of the Procession."},{"tags":{},"content":"Each Trench Pilgrim of the warband takes a solemn vow to submit themselves to a Castigator\u2019s authority and discipline, be it applied by either word or a lash. As a sign of this duty,Castigators often carry multithonged war scourges as both the symbol of their office and as a tool of chastisement. Consequently, many Pilgrims carry scars and whipmarks as proof of their Castigator\u2019s zeal."},{"tags":{},"content":"Communicants of the Trench Pilgrim processions are not the creations of the carefully- controlled official Mendelist operated Communicants Programme. Instead, they are made in unsanctioned laboratories built by the Pilgrims themselves, where they use shady black market sources of the blood and flesh of the Meta-Christ in order to feed their own volunteers. While most of the willing perish, unable to contain the divine corpuscles within their frail bodies, the successful Communicants are a sight to behold. Huge warriors with superhuman strength, and utter devotion to their cause, with such a clarity of holy vision that they need no eyes to perceive the world."}],"rules":[],"options":[]},{"id":"fc_hereticlegion","source":"core","tags":{"url_custom":"heretic-legion"},"contextdata":{"faction_keyword":{"name":"kw_heretic"}},"name":"Heretic Legion","team":"hell","description":[{"tags":{"desc_type":"paragraph"},"content":"A shroud of darkness blankets the world. Smoke and brimstone spew from the yawning Gates of Inferno, enveloping the lands where people have abandoned God and openly wage war against His Creation. It is a grim reality that a full third of humanity has bent its knee before the idols of Hell. The main satanic military force on Earth are the Heretic Legions, raised from amongst these citizens of the damned."},{"tags":{"desc_type":"paragraph"},"content":"Spies are sent into Hell\u2019s domains under special absolution by the Cardinal Protector. Most are caught, never to be seen again, save for some whose eternally screaming heads are returned to New Antioch, branded with bleeding runes that mock the Holy Trinity."},{"tags":{"desc_type":"paragraph"},"content":"Yet some do make it back to the light, whispering of the horrors they have witnessed: of firstborn cast into the mouths of the burning statues of Baal and human flesh sold by the pound in dreadful markets. They speak of the great idols of the Golden Calf and rapturous men and women who prostrate themselves before them. Inverted pyramids and towers plunge into the depths of these cities, built of iron and black stone. Within these pits stand sacrificial altars where weeping captives are slowly sliced to death over agonising days and weeks with wicked knives made of infernal basalt. Cathedrals to the princes of Hell hang from grand arches of volcanic stone, while the condemned are crucified on hundreds of upside down crosses."},{"tags":{"desc_type":"paragraph"},"content":"Accounts speak of sprawling factories made of mutilated flesh and metal, their forges yielding endless munitions for the ongoing war. Guided by the teachings of Tartarus\u2019 smiths, alchemists toil over colossal weapons and armoured warmachines, wielding the forbidden secrets of their patrons\u2019 metallurgy to forge instruments of death and suffering beyond the grasp of any human engineer. Once proud cities of Earth, where churches have been toppled and entire populations subjugated, are now dedicated towards bringing down the very Throne of Heaven."},{"tags":{"desc_type":"paragraph"},"content":"Amongst the forsaken citizens who endure within the earthly domains of Hell, the greatest status is afforded to the soldiers fighting in the Great War. But joining the elite units of the army of damnation is no easy task. Those who wish to win a place amongst the Heretic Legions must make an unholy pilgrimage to the burning bronze Gates of Hell, where even from leagues away, the infernal heat sears both flesh and spirit until the pain becomes unbearable. In the Valley of Tears, the great road that leads to the Gate, paved with wailing souls and lamentations, is littered with endless mounds of charred bodies. Many are still half-alive, writhing in agony, trapped in a grotesque twilight between life and death, their wickedness deemed insufficient. These discarded souls are doomed to writhe in agony until the Day of Judgement."},{"tags":{"desc_type":"paragraph"},"content":"Those who make it within sight of Hell\u2019s Maw are considered worthy and are initiated into the Legions, taking unbreakable vows that chain them into darkness for all eternity, their bodies branded with the mark of the demon lord that has claimed them. The Armouries of Hell then equip them for battle, and Heretic Priests beckon forth new supplicants as dictated by the whispers of the archdevils. Thus, a new Heretic Legionnaire is born. They hail archdevils as their masters and are thus damned."},{"tags":{"desc_type":"paragraph"},"content":"Yet there are some who push further on: to the very Gate itself and beyond. Their very flesh ignites, never to recover, but those with the blackest souls can enter the Inferno itself. Amongst those, the Anointed are especially revered amongst the Legions. They are the paragons of unhinged brutality \u2013 men and women of colossal vigour and unyielding devotion. Having tread the accursed path to the shores of the Lake of Eternal Flame, where the damned wither and contort in ceaseless torment, the Anointed emerge forever scarred by the embrace of abyssal fires. The blackened and burnt flesh of the Anointed will never heal, but in exchange, they are granted the right to wear heavy Gehenna armoured suits and gain strength to wield weapons that a normal man could barely lift. It is said that glancing into their eyes, one can see the reflection of the very flames of Hell, forever etched in their vision."},{"tags":{"desc_type":"paragraph"},"content":"Though the vast bulk of the Heretic Legions are made of mortal humans, Hell often sends their own abhorrent progeny to reinforce their mortal foot soldiers: nightmarish War Beasts made of captured and possessed creatures, and dreaded Artillery Witches who act as mobile artillery, supporting lightning assaults."}],"rules":[],"options":[]},{"id":"fc_cultoftheblackgrail","source":"core","tags":{"url_custom":"cult-of-the-black-grail"},"contextdata":{"faction_keyword":{"name":"kw_blackgrail"}},"name":"Cult of the Black Grail","team":"hell","description":[{"tags":{"desc_type":"paragraph"},"content":"Typhus, malaria, typhoid, smallpox, yellow fever, pneumonia, trench fever, Markisian disease, and countless others ravage the trenches and battlefields of the Great War. Yet they all pale in comparison to the most dreaded of them all, the Black Grail."},{"tags":{"desc_type":"paragraph"},"content":"Beelzebub, Lord of the Flies, stands apart from the other lords of Hell who work through their mortal followers. When he rises to supremacy in the endless power struggles of the archfiends, the Prince of Decay does not scheme \u2013 he unleashes his deadliest curse."},{"tags":{"desc_type":"paragraph"},"content":"Infused with demonic essence from the bowels of the seventh layer of Hell, Beelzebub\u2019s putrid fortress spews forth a torrent of hell-flies, scorpions, locusts, and other Infernal insects. The Hellgate opens, unleashing a tidal wave of foulness that flows across the land at startling speed, consuming everything in its path and leaving indescribable horror in its wake. For nine days, the swarm rampages unchecked, until it turns upon itself in its own insatiable hunger."},{"tags":{"desc_type":"paragraph"},"content":"The Black Grail is indiscriminate in its hatred of all living things. Its infections seep into any living flesh, twisting it with tumours, boils, and weeping pustules. In its wake, puddles and ponds of melted flesh remain, while endless mouths scream in agony. The Black Grail destroys the body but leaves the mind intact, trapped to endure its torment. The scientist-priests of the Church and the Alchemists of the Sultanate tirelessly search for a way to inoculate their people against this most loathsome of plagues, but to no avail. The only answer lies in the flames. Infected settlements are purged with speciallyconstructed flamethrower tanks, their weapons fuelled with holy anointing oil."},{"tags":{"desc_type":"paragraph"},"content":"If this is not done swiftly, or the countermeasures fail, a fate worse than death awaits. The bodies of men, horses, dogs, insects, and every creature infected by the Black Grail rise once more, driven by a demonic  will. Not alive, not dead, they become vessels of corruption, spreading their master\u2019s plague ever further. They form warbands, seeking to infect any life they encounter. They gather loot and grisly trophies, offering them to the idols of Beelzebub they erect. Thus, the Cult of the Black Grail mocks the devotions of the Faithful and their prayers."},{"tags":{"desc_type":"paragraph"},"content":"At the head of these warbands stand the knights of the Order of the Fly, depraved men and women who embrace the Black Grail and whose devotion Beelzebub finds sufficient. They are granted weapons, armour, and equipment corrupted by the archfiend\u2019s touch in exchange for sacrifices brought to the altars of Beelzebub. The warbands build these wherever they go: grotesque structures of horror, crafted from the remains of their victims, shaped into monstrous flies."},{"tags":{"desc_type":"paragraph"},"content":"To lead his tainted legions of Grail Thralls, Beelzebub needs capable commanders and a devoted clergy to spread the ecstatic blasphemy of his kingdom on Earth. To achieve this, Beelzebub has organised his followers into a strict hierarchy, ensuring his will is done. The Order is divided into military and ecclesiastic wings, with the enthroned Lord of the Flies reigning over all. He is both god and king to his followers, an object of worship and dread, for he holds absolute power over all infected with the Black Grail, and is known to elevate or punish his servants according to his diabolical whims."},{"tags":{"desc_type":"paragraph"},"content":"There are many titles and ranks an ambitious Plague Knight may strive for. Grand masters and mistresses of the Black Grail serve as marshals, each commanding seneschals of Decay, who lead entire field armies in their name. Specialised forces can be led by knight companions of Gluttony or commanders of the Rotten Cross, and are granted special powers to carry out their tasks and duties."},{"tags":{"desc_type":"paragraph"},"content":"Within the ecclesiastic wing of the Order, countless roles exist for those who perform the Cult\u2019s unholy ceremonies and oversee the vast endeavour of dismantling and transporting cathedrals, mosques, synagogues, temples, and other places of worship. These holy structures are taken to Ekron, where they are defiled and remade into blasphemous shrines devoted to the worship of decay. Each member bears a rank and title suited to their task. Plague almoners administer special strains of the Black Grail to those deemed worthy of initiation. Procyonis sacristas guard the Order\u2019s foul relics. Bubonic visitors carry news and communications to Beelzebub himself. Pustulators seek out saints who could be corrupted and swayed to join the Order. Beyond these, endless others toil in rot and ritual."}],"rules":["rl_infectionmarkers","rl_grailmorale","rl_theorderofthefly"],"options":[]},{"id":"fc_courtofthesevenheadedserpent","source":"core","tags":{"url_custom":"court-of-the-seven-headed-serpent"},"contextdata":{"faction_keyword":{"name":"kw_thecourt"},"faction_rule_option":{},"mult-captain":{}},"name":"Court of the Seven-Headed Serpent","team":"hell","description":[{"tags":{"desc_type":"paragraph"},"content":"Jutting from the eternally belching plumes of stinking, corrosive smoke rises the accursed Iron City of Dis. Atop its shrieking, blackened keep sits the Infernal War Council, a gathering of seven of the most wicked, cunning, and diabolical archdevils in existence. Known as the Court of the Seven-Headed Serpent, each Head of the Serpent embodies one of the Seven Deadly Sins. Together, their decrees shape the course of the Great War, overseeing Hell\u2019s relentless campaign against Creation on Earth and commanding all Infernal forces in service of the hierarchy."},{"tags":{"desc_type":"paragraph"},"content":"In the twisted, treacherous, and changing politics of Hell, even the mightiest of devils rarely hold their seat on the great War Council of the Court for long. Towering statues of the Heads of the Serpent, representing Wrath, Envy, Lust, Pride, Sloth, Gluttony, and Greed, are erected by slavering work gangs of Yoke Fiends, only to be torn down and crushed into rubble as new devil lords claw their way to power, trampling their rivals beneath them."},{"tags":{"desc_type":"paragraph"},"content":"The hierarchy of the Court is anything but stable. Countless envious pretenders scheme against the Heads of the Serpent, each vying to seize their place and claim the glory and prestige of such a lofty position. Only Mammon is said to have held an almost unbroken reign of power as the Serpent Head of Greed for the entire Great War. The other positions have seen a bewildering parade of dukes, marquises, margraves, barons and baronesses, paramounts, princes, lords and ladies, earls, and countless other high nobles rise and fall in their eternal machinations for influence and power."},{"tags":{"desc_type":"paragraph"},"content":"This relentless cycle of political ascension followed by utter ruin is mirrored among their mortal followers on Earth. In turn, the strength of a demon waxes and wanes with the number of mortal followers they can corrupt to their cause. The Council operates by majority vote, often decided by the slimmest of margins. It takes little for an ambitious Prince or Princess of Hell to amass enough enemies to be deposed, have their wings torn, and their power stripped away. Cast down, they are forced to claw their way up from the depths once more, their rivals\u2019 jeers stinging like venom. While Beelzebub is the most powerful devil of Gluttony, the Lord of the Flies scorns his rightful place at the Court, waging his war against Creation through his Black Grail. This leaves his seat vacant, causing the lesser fallen angels to squabble for the prize of the Throne of Hunger."},{"tags":{"desc_type":"paragraph"},"content":"At the command of the Court, warbands assemble at the Hellgate, ready to strike out and blight the world. Yoke Fiends muster under the banners of their Praetors and Sorcerers. The shattered forms of the Hell Knights are forced into their suits of armour, emerging from fiery tombs where their bodies lie crushed beneath massive, ever-turning slabs of black basalt while they are not serving in the war effort."},{"tags":{"desc_type":"paragraph"},"content":"Desecrated Saints are brought forth to serve as unholy war altars, their very presence corrupting and perverting the land they traverse. Ahead of the warbands swarm Pit Locusts, the clatter of their wings heralding the Court\u2019s approach, their venomous stings leaving burns that cannot be healed. When deathly omens stain Hell\u2019s burning sky and black stars align, a Hunter of the Left-Hand Path will join a warband as they emerge from the Mouth of Hell."},{"tags":{"desc_type":"paragraph"},"content":"Most warbands march behind the Wretched, mortal slaves of the Court, lashed onward by the merciless whips of the Yoke Fiends. As they march to join the Great War, joyous and triumphant music played by unseen hands echoes through the air, for taking part in one of these hunts is considered a great Warband privilege within Sheol."}],"rules":["rl_noblesofthecourt","rl_goeticpowers","rl_goeticabilities","rl_goeticspells"],"options":[{"ref_id":"ot_courtsins","name":"Seven Deadly Sins","description":[{"tags":{"desc_type":"paragraph"},"content":"Before you recruit any models you must choose which of the Seven Deadly Sins your Warband is dedicated to. You can choose either Wrath, Envy, Lust, Pride, Sloth, Gluttony, or Greed.","glossary":[{"val":"GOETIC","id":"kw_goetic"}]}],"category":"type","type":"text","strictness":"strict","predefined_options":[],"option_context":{"basic_option_default":{}},"data_search":{"searchtype":"complex","searchparam":{"type":"factionrule","request":{"operator":"and","terms":[{"item":"tags","value":"court_sin","equals":true,"strict":true,"istag":true,"tagvalue":""}],"subparams":[]}}}}]}]'),y=JSON.parse('[{"id":"fc_ironsultanate_fv_fidaiofalamut","name":"Fidai of Alamut - The Cabal of Assassins","source":"core","tags":{"url_custom":"fidai-of-alamut-the-cabal-of-assassins"},"contextdata":{"faction_keyword":{"name":"kw_sultanate"}},"base_id":"fc_ironsultanate","description":[{"tags":{"desc_type":"paragraph"},"content":"The pact between the Iron Sultanate and the Assassin fortress of Alamut ensures that the Sultan is served by the exquisitely skilled killers of the Old Man of the Mountain in exchange for the independence of the Assassins\u2019 domain."},{"tags":{"desc_type":"paragraph"},"content":"But though most outsiders know the Assassins through their service to the forces of the Iron Wall, sometimes during the dark of night small, deadly bands move silently into the hellscape of No Man\u2019s Land. In deepest secrecy Rashid al-Din Sinan, the undisputed ruler of Alamut, dispatches his hand-picked disciples on missions of his own, communicating their orders with no spoken words, signs nor written messages, but talking directly to them in their dreams."},{"tags":{"desc_type":"paragraph"},"content":"These warbands are known as Fida\u2019i (which means \u201cSacrifice\u201d), dedicated to completing their mission and returning to Alamut to receive rewards said to match those of Paradise itself. They are led by a Master Assassin, accompanied by two fully-trained members of the Order. A number of trainee acolytes will serve them during the mission, eager to prove their mettle and be initiated into the Order of Assassins."},{"tags":{"desc_type":"paragraph"},"content":"Alamut is also a home to a renegade sect of Isma\u2019ili Dervishes, warrior monks sworn to poverty and a lethal way of fighting. They accompany the Assassins on their secret missions as an act of piety and payment for their shelter, and their whirling dance of death has been the end of many a disbeliever."}],"team":"faithful","cut_rules":[],"rules":["rl_alamutalone","rl_assassinacolytes","rl_dervishes","rl_flockofassassins","rl_masterassassin","rl_killingsquad","rl_artofassassination"],"options":[]},{"id":"fc_ironsultanate_fv_houseofwisdom","name":"House of Wisdom","source":"core","tags":{"url_custom":"house-of-wisdom"},"contextdata":{"faction_keyword":{"name":"kw_sultanate"}},"base_id":"fc_ironsultanate","description":[{"tags":{"desc_type":"paragraph"},"content":"The House of Wisdom is the pre-eminent centre of learning within the Iron Sultanate. Its libraries, workshops, forges, gardens of exotic and wondrous plants, hospitals, observatories and laboratories are unmatched. Within its halls are mechanical marvels and weapons of far-off lands, as well as trophies captured by Sultan\u2019s forces and brought to be examined by the learned scholars of the House of Wisdom. Philosophers and theologians debate in its chambers. Ghanzal and qasida poets compose verses describing the beauty and pain of life. Thus it is no wonder that the House attracts the greatest minds of the age to study in its hallowed halls, from within the Sultanate and far beyond the Iron Wall."},{"tags":{"desc_type":"paragraph"},"content":"In its laboratories, guarded by the faithful Kavasses, the Jabirean Alchemists dissect and study the war beasts of Shaitan so their weaknesses can be laid bare and exploited by the Believers. At such times, their roars of rage and pain echo through the porphyry corridors of the House."},{"tags":{"desc_type":"paragraph"},"content":"To maintain a degree of independence regardless of the royal funding, the House of Wisdom performs many services for the Sultan\u2019s armies. Its best Alchemists work with the Sultanate foundries where the great cannons of the Iron Wall are cast. Takwin creations are provided to bolster the army of Those Who Believe, as are suits of armour and alchemical ammunition. The House of Wisdom also maintains the Sultanate fleet of airships, which both guard the lands of the Believers against enemy air forces and maintain vigil over lands under darkness. They make regular excursions deep into Heretic territory to witness whether the Great Sandstorm still covers the Two Holy Places, and then report the news back to the Sultan."},{"tags":{"desc_type":"paragraph"},"content":"In exchange, the masters of the House of Wisdom have freedom to dispatch their own excursions and expeditions into the lands beyond the wall. There they seek tomes of knowledge, lost in the dark and terrible days when the forces of Jahannam overran much of the Levant, and great cities fell like the blossoms of a jasmine flower in fiery heat. Sometimes they make journeys to capture an especially ferocious beast of the enemy. At other times they seek to capture or kill Heretic alchemists, which they see as an offence to their craft and threat to the entire world."},{"tags":{"desc_type":"paragraph"},"content":"These excursions are exceedingly dangerous and they are not undertaken lightly. Each Alchemist dispatched on such a journey is an irreplaceable loss if they die in the perils of No Man\u2019s Land, and since they operate under their own authority, they cannot expect direct support from the Sultan\u2019s forces. Many noble F\u0101ris cavaliers have taken oaths to protect these scholars in their journeys, as well as the House\u2019s own Kavass bodyguards sworn to fight and die in defence of their masters."}],"team":"faithful","cut_rules":[],"rules":["rl_alchemists","rl_kavass","rl_nobleguardians","rl_prideofjabir","rl_privateventure","rl_secretsofthehouseofwisdom","rl_takwinhomunculus","rl_weaponcollections"],"options":[]},{"id":"fc_ironsultanate_fv_defendersoftheironwall","name":"Defenders of the Iron Wall","source":"core","tags":{"url_custom":"defenders-of-the-iron-wall"},"contextdata":{"faction_keyword":{"name":"kw_sultanate"}},"base_id":"fc_ironsultanate","description":[{"tags":{"desc_type":"paragraph"},"content":"Since assuming the throne in the year 1902, Sultan Malik, affectionately nicknamed the Lion Padishah by his troops, has demonstrated a more aggressive policy in waging the Great War. Though the Iron Wall endures continuous attacks as the forces of Shaitan ceaselessly test the Believer\u2019s defences, the Sultan refuses to engage in a war of mere resistance. The Sultanate has never relinquished its claim to the formerly Muslim lands lost to the Heretics, and as a result, regular troops are now deployed on offensive missions far more frequently than in the past, hardening raw recruits into veterans."},{"tags":{"desc_type":"paragraph"},"content":"The core of any such warband is often formed around the Sultanate Sappers, experts at demolition and mine-setting, and veterans of the bitter battles above and below the Wall. They are superb in the transportation and use of field artillery, erecting defensive positions at a speed that borders on supernatural. Their explosive charges disrupt enemy advances, whittling down attackers long before they reach the lines of Sultanate defenders, who wait to dispatch those remaining with ruthless efficiency."}],"team":"faithful","cut_rules":[],"rules":["rl_farfromthesublimegate","rl_grandcannons","rl_janissaryofficers","rl_marksmanshipoftheironwall","rl_sappercorps","rl_siegejezzailteams","rl_silahdar","rl_sipahi"],"options":[]},{"id":"fc_hereticlegion_fv_hereticnavalraidingparty","name":"Heretic Naval Raiders","source":"core","tags":{"url_custom":"heretic-naval-raiders"},"contextdata":{"faction_keyword":{"name":"kw_heretic"}},"base_id":"fc_hereticlegion","description":[{"tags":{"desc_type":"paragraph"},"content":"The Heretic fleet operates as a semi-autonomous entity under the command of its High Captain and other admirals. The Heretics have their own marine infantry, which often operate in small bands, striking deep behind enemy lines and executing smash-and-grab missions. They are always on the lookout for captives, loot, information, supplies, rare artefacts, and any opportunity to express their cruelty and brutality."}],"team":"hell","cut_rules":[],"rules":["rl_closeassaultweapons","rl_fastaslightning","rl_letsleepingdogslie","rl_lighttroops","rl_unseenadvance"],"options":[]},{"id":"fc_hereticlegion_fv_trenchghosts","name":"Trench Ghosts","source":"core","tags":{"url_custom":"trench-ghosts"},"contextdata":{"faction_keyword":{"name":"kw_heretic"}},"base_id":"fc_hereticlegion","description":[{"tags":{"desc_type":"paragraph"},"content":"Sometimes, when Heretic troopers die upon a hallowed ground or in the presence of an uncorrupted holy relic, they become trapped between planes of existence. Claimed by neither Heaven nor Hell, the Trench Ghosts become undead. They are doomed to fight a war without an end, attacking both the Faithful and Heretic alike, hating all life, and obeying commands that no living can hear."},{"tags":{"desc_type":"paragraph"},"content":"Their greed for worldly wealth and items of power remains undiminished, and their semi-corporeal bodies are exceedingly difficult to destroy. Their faces, covered with gas masks they no longer have any use for, betray nothing of the agony they endure. In close combat, they whisper of the pain of their existence \u2014 an endless doom which will  never give them rest, their broken bodies and shattered minds are forced to endure the horrors of war for all eternity. Few can withstand such terror without breaking."},{"tags":{"desc_type":"paragraph"},"content":"Tales are told of countless Trench Ghost warbands that haunt No Man\u2019s Land, but the most famous are the Ghosts of Tannenberg, the shades of the Heretic force that won the battle of Tannenberg only to pass into the shadow after sacking the Church of Saint Jacob."}],"team":"hell","cut_rules":[],"rules":["rl_barbedwirebanshee","rl_enemiesofall","rl_lostsouls","rl_semicorporeal","rl_slow","rl_undeadhorror","rl_sarcophagusmine","rl_tankpalanquin"],"options":[]},{"id":"fc_hereticlegion_fv_knightsofavarice","name":"Knights of Avarice","source":"core","tags":{"url_custom":"knights-of-avarice"},"contextdata":{"faction_keyword":{"name":"kw_heretic"}},"base_id":"fc_hereticlegion","description":[{"tags":{"desc_type":"paragraph"},"content":"Warbands who follow the Prince of Greed call themselves the Knights of Avarice. Such Heretics display their wealth extravagantly. They are festooned with chains of gold and the finest silk cloaks; their armour is gilded and decorated with precious stones, and the handles of their great coin hammers are crafted of the rarest of wood. Despite the opulent wealth on display, their finery is tarnished by blood and soot that spews from the Hellgate, and the delicate artistic filigree of their golden masks is both terrible and beautiful in equal measure. In combat, they favour hammers and clubs that break bones but leave flesh and blood intact, alongside poison gas and highly accurate rifles. They scorn crude and destructive fire or explosive weapons that could damage any objects of value."},{"tags":{"desc_type":"paragraph"},"content":"Many merchants, traders, and moneylenders within the Faithful nations are followers of Mammon and secretly supply the Knights of Avarice with their wares."}],"team":"hell","cut_rules":[],"rules":["rl_corruptmerchants","rl_gasbombs","rl_goeticwarlocks","rl_infernalrivalry","rl_mammonschosen","rl_preservetheloot","rl_priceofgreed","rl_worshipmammon"],"options":[]},{"id":"fc_trenchpilgrim_fv_processionofthesacredaffliction","name":"Procession of the Sacred Affliction","source":"core","tags":{"url_custom":"procession-of-the-sacred-affliction"},"contextdata":{"faction_keyword":{"name":"kw_pilgrim"}},"base_id":"fc_trenchpilgrim","description":[{"tags":{"desc_type":"paragraph"},"content":"Trench Pilgrims of the Procession of the Sacred Affliction are known for their zeal in close-quarter combat, their armour decorated with icons and shields adorned with the depictions of the Saints, which, despite appearances, can withstand machine gun bullets. The millstones they carry upon their backs are used to tie about the necks of sinners before drowning them in the mud and blood of No Man\u2019s Land. They spurn the use of the iron capirotes, believing firmly that faith alone is enough to withstand the horrors of Hell."}],"team":"faithful","cut_rules":[],"rules":["rl_facethyfears","rl_hammerandanvil","rl_meleefocused","rl_punishingmillstones","rl_reliquaryarmoury","rl_wrathofgod","rl_zealotstrength"],"options":[]},{"id":"fc_trenchpilgrim_fv_cavalcadeofthetenthplague","name":"Cavalcade of the Tenth Plague","source":"core","tags":{"url_custom":"cavalcade-of-the-tenth-plague"},"contextdata":{"faction_keyword":{"name":"kw_pilgrim"}},"base_id":"fc_trenchpilgrim","description":[{"tags":{"desc_type":"paragraph"},"content":"This Trench Pilgrim Procession traditionally sacrifices lambs before battle, anointing themselves in its blood to ward off the wrath of God. They draw holy symbols with the blood upon their bodies, clothing and armour, and then march to battle singing hymns, in the certain belief that the blood of the lamb shields them from any harm."},{"tags":{"desc_type":"paragraph"},"content":"Firm believers in the traditional reading of the holy texts, they reject the new doctrines of the Meta-Christ by the Church. They steal Communicants from other Processions and force them to fight for them in penance for being born from sin."}],"team":"faithful","cut_rules":[],"rules":["rl_bloodofthelamb","rl_dayofhiswrath","rl_favourofthelord","rl_heavenawaits","rl_stolencommunicants","rl_theunclean"],"options":[]},{"id":"fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","name":"War Pilgrimage of Saint Methodius","source":"core","tags":{"url_custom":"war-pilgrimage-of-saint-methodius"},"contextdata":{"faction_keyword":{"name":"kw_pilgrim"}},"base_id":"fc_trenchpilgrim","description":[{"tags":{"desc_type":"paragraph"},"content":"From the night of fire, when poisoned bullets struck and blood flowed, the monastery of Velehrad in Great Moravia fell, and from its ruins emerged a lone monk of the Orthodox Order of Saint Methodius. The rest of the brotherhood perished during a raid by an elite Death Commando squadron, but the sole survivor carried the saint\u2019s books and the flame of Orthodox faith out of the ruins."},{"tags":{"desc_type":"paragraph"},"content":"After this loss, it was believed that the secrets of Anchorite construction had been lost, and the Church had abandoned them in favour of advances in armour technology elsewhere. This was not the case. The monk, Brother Akakios, still knew the craft. Akakios fled to the Theocratia of Hellas and founded a new monastery on the slopes of holy Mount Athos. Monks from neighbouring monastic communities were drawn to join him, along with many lay members. Eventually, they became the foot soldiers of the well-equipped and disciplined War Pilgrimages of Saint Methodius. Thus, Akakios became the first War Prophet of the Order."},{"tags":{"desc_type":"paragraph"},"content":"In their fortified monastery, the learned monks hoard knowledge and dare to alter the sacred designs of Saint Methodius. Their Anchorites Shrine are unmatched, equipped with modifications and adjustments which allow them to carry modern long-range weaponry. No other warband has such abundant access to Anchorites, or such a wide variety of sophisticated weaponry and equipment."},{"tags":{"desc_type":"paragraph"},"content":"Following the ancient Orthodox creed, the pilgrims of Saint Methodius reject many of the teachings and customs of other Pilgrim Processions. They consider the creation of the Communicants a dangerous heresy, and condemn the use of Martyrdom Devices as an affront to God\u2019s commandment against suicide. Bitter schisms and arguments with other sects sometimes erupt into violence. The Church itself accuses the Methodians of clinging to the outdated Eastern Orthodox faith."}],"team":"faithful","cut_rules":[],"rules":["rl_anchoritearmoury","rl_anchoritecloister","rl_chasteorder","rl_communicantheresy","rl_followersofsaintmethodius","rl_mortalsin","rl_treasureinheaven","rl_gunsmithmonks"],"options":[]},{"id":"fc_newantioch_fv_papalstatesinterventionforce","name":"Papal States Intervention Force","source":"core","tags":{"url_custom":"papal-states-intervention-force"},"contextdata":{"faction_keyword":{"name":"kw_antioch"}},"base_id":"fc_newantioch","description":[{"tags":{"desc_type":"paragraph"},"content":"The Papal States, which operate under the command of the Supreme Pontiff of Rome (rather than the Duke of New Antioch), are sometimes dispatched to the front lines to perform a specific duty, such as hunting down and eliminating dangerous Heretic leaders, or recovering artefacts of great spiritual importance."},{"tags":{"desc_type":"paragraph"},"content":"These warbands are typically relatively small but have access to extremely elite soldiers and specialist equipment. They are led by utterly devoted warrior-monks and priests handpicked by the Pope."}],"team":"faithful","cut_rules":[],"rules":["rl_specialistforce","rl_swissguard","rl_supremeblessing","rl_farfromhome","rl_lector"],"options":[]},{"id":"fc_newantioch_fc_eirerangers","name":"Eire Rangers","source":"core","tags":{"url_custom":"eire-rangers"},"contextdata":{"faction_keyword":{"name":"kw_antioch"}},"base_id":"fc_newantioch","description":[{"tags":{"desc_type":"paragraph"},"content":"The Emerald Isle, \xc9ire, an ancient stronghold of the Church and a famed centre of learning, is home to the \xc9ire Rangers. The island has long endured devastating raids by the Heretic navy. It has suffered famine, been ravaged by the Black Grail, and survived a full-scale invasion aimed at destroying the famed House of Manuscripts. After a hundred years of brutal conflict, its warriors have become masters of skirmish warfare and guerrilla resistance. Their suffering has made them bitter, unrelenting enemies."},{"tags":{"desc_type":"paragraph"},"content":"Elite Fianna warrior-hunters are especially adept at guerrilla tactics. They uphold the ancient tradition of roving warriors living off the land. While seen as troublemakers, they are a welcome asset to any warband. They adorn themselves with grisly trophies in the manner of their pagan ancestors, carrying skulls of the vanquished, much to the irritation of the Church."},{"tags":{"desc_type":"paragraph"},"content":"\xc9ire has few resources for heavy armour or intricate automatic weapons, but they more than make up for this with their skilled light infantry and knowledge of the lay of the land. When the Poet-King Tadhg O\u2019Connor dispatches his famed Rangers to aid the Principality of New Antioch, in lieu of the yearly tithe of Vienna, the duke is more than happy to accept these fierce warriors."},{"tags":{"desc_type":"paragraph"},"content":"A rare latent berserker trait runs in a few warrior bloodlines of \xc9ire. It can manifest with the chemical communion of the blood of the Meta-Christ. Such fighters enter a state of battle-rage, where no bullet or blade seems to cause them any harm."}],"team":"faithful","cut_rules":[],"rules":["rl_annointedammunition","rl_berserker","rl_carnyx","rl_fianna","rl_followersofsaintpatrick","rl_hitandruntactics","rl_lightinfantry","rl_looseformation","rl_stronginfaith"],"options":[]},{"id":"fc_newantioch_fc_stortruppenofthefreestateofprussia","name":"Sto\xdftruppen of the Free State of Prussia","source":"core","tags":{"url_custom":"stosstruppen-of-the-free-state-of-prussia"},"contextdata":{"faction_keyword":{"name":"kw_antioch"}},"base_id":"fc_newantioch","description":[{"tags":{"desc_type":"paragraph"},"content":"When the need to take out an enemy strongpoint or assault an especially powerful defensive line of trenches or redoubts arises, the Duke of Antioch often calls upon the famed Stosstruppen forces of the Free State of Prussia. These elite units operate in deep forward positions, often carrying secret orders or specific missions from the Princes of the Church or New Antioch High Command."},{"tags":{"desc_type":"paragraph"},"content":"The Free State Shock Troopers are selected and trained specifically to perform lightning assaults, master the firearms of close assault, and operate in Fireteams that are perfectly synchronised in their combined arms tactics."},{"tags":{"desc_type":"paragraph"},"content":"Admittance to this elite group is strictly by merit. All members must be decorated athletes, under 25 years of age, unmarried, and must have demonstrated a high level of aggression on the battlefield. Of all the soldiers serving Prussia, Stosstruppen have by far the highest casualty rate."},{"tags":{"desc_type":"paragraph"},"content":"When inducted into the ranks, all swear an oath at the K\xf6nigsberg Cathedral:"},{"tags":{"desc_type":"paragraph"},"content":"\u201cEverything which the enemy least expects will succeed the best.\u201d"}],"team":"faithful","cut_rules":["rl_newantiochfireteam"],"rules":["rl_expertfireteams","rl_feldkaplane","rl_forwardpositions","rl_lightlyarmoured","rl_lightmelee","rl_mastersofthegrenade","rl_rapidassault","rl_specialisedequipment","rl_troopselection"],"options":[]},{"id":"fc_newantioch_fv_kingdomofalbaassaultdetatchment","name":"Kingdom of Alba Assault Detatchment","source":"core","tags":{"url_custom":"kingdom-of-alba-assault-detatchment"},"contextdata":{"faction_keyword":{"name":"kw_antioch"}},"base_id":"fc_newantioch","description":[{"tags":{"desc_type":"paragraph"},"content":"Hailing from the Scottish Highlands where the Church is strong, these men and women come to New Antioch in search of both glory, forgiveness of their sins, as well as dreams of acquiring valuable loot to send back to their homeland, but above all to get their hands on some Devil-worshippers up-close and in personal combat!"},{"tags":{"desc_type":"paragraph"},"content":"The Heretic submarine fleet harries the shores of the Kingdom constantly, impoverishing their lands and carrying off their young in chains to be sacrificed on the dark altars of the archdevils. Thus, the hatred of the Highlanders towards Hell\u2019s forces runs deep and bitter. The fleet of England and its famed Moving Fortress are reserved for guarding their own shores exclusively, causing friction and resentment among their northern neighbours, whose coastal defences are far less comprehensive."},{"tags":{"desc_type":"paragraph"},"content":"As is the tradition in Alba, these warbands favour close quarters combat and fierce charges over defence and long-range attacks. They wield Lochaber axes and their famous claymores with great skill. To deal with the rugged terrain of their homeland, the Crown of Alba produces a highly mobile version of machine armour."}],"team":"faithful","cut_rules":[],"rules":["rl_bagpipes","rl_brave","rl_celticmachinearmour","rl_claymoresmiths","rl_coldsteel","rl_dumdumammunition","rl_highlandstrength","rl_lightlyarmoured","rl_meleefocused_alba","rl_rampantcharge","rl_strainedsupply"],"options":[]},{"id":"fc_newantioch_fv_expeditionaryforcedofabyssinia","name":"Expeditionary Forces of Abyssinia","source":"core","tags":{"url_custom":"expeditionary-forces-of-abyssinia"},"contextdata":{"faction_keyword":{"name":"kw_antioch"}},"base_id":"fc_newantioch","description":[{"tags":{"desc_type":"paragraph"},"content":"The Expeditionary Forces of Abyssinia represent the forces of the Solomonic Throne of Ethiopia. While the warriors of Africa also defend their homeland against the Legions of Mammon, they still faithfully send reinforcements to New Antioch once every seven years."},{"tags":{"desc_type":"paragraph"},"content":"Most Ethiopian army regulars hail from Oromo and Amhara, the heartlands of the Solomonic Empire. They typically wear a traditional white shamma robe that doubles as both body and head covering, along with kammish shirt-tunics instead of uniforms. Many warriors go to battle barefoot, being well accustomed to walking unshod over rough terrain."},{"tags":{"desc_type":"paragraph"},"content":"Their training emphasises short-range marksmanship, which decimates the enemy ranks and allows the elite Chewa to finish the fight in close combat. In close quarters they wield many weapons, though swords are the most common tools of war, especially the sickle-like shotel swords designed to overcome shields. The Ethiopian fighters favour a half-moon formation to outflank and envelop an enemy, with devastating short-range fire from the flanks forcing the foe out of their positions. All the while the Holy Warriors, soldiers dedicated to warrior-saints and martyrs, treat the wounded. They are among the few Faithful capable of countering even the power of the Black Grail, if they get to the victim early enough."}],"team":"faithful","cut_rules":[],"rules":["rl_abyssianhealers","rl_chewa","rl_chieftanpanoply","rl_faithofethiopia","rl_holywarriors","rl_shortrangemarksmanship","rl_vanguardforces","rl_weaponsofmobilewarfare"],"options":[]},{"id":"fc_cultoftheblackgrail_fv_dirgeofthegreathegemon","name":"Dirge of the Great Hegemon","source":"core","tags":{"url_custom":"dirge-of-the-great-hegemon"},"contextdata":{"faction_keyword":{"name":"kw_blackgrail"}},"base_id":"fc_cultoftheblackgrail","description":[{"tags":{"desc_type":"paragraph"},"content":"In the annals of the Great War two mighty Hegemons of the Cult of the Black Grail have risen: Yersinia Rex, Emperor of Pestilence, and Febris, the Rotting Bride of Beelzebub. Each was eventually destroyed, but at an unimaginable cost to the forces of the Great-Tyrant YHWH whom the Lord of the Flies seeks to overthrow. Even the great Paladin Engelier, the Sword of Heaven, died when confronting the might of a Hegemon."},{"tags":{"desc_type":"paragraph"},"content":"With the ascension of a Hegemon, the hideous power of the Cult of the Black Grail is exalted. Beelzebub grows sleek and fat, and like a magnanimous king, bestows blessings and gifts upon his most favoured children. Beelzebub\u2019s insidious grip over his Grail Thralls greatly increases. They move with more grace and the exalted blessings of the Grail opens their ruined minds, allowing them to truly witness the rotting glory of the Lord of the Flies and enabling them to understand more complex weaponry. In turn, the nobles that make up the ranks of the Order of the Fly are given kingly gifts from their mighty liege."},{"tags":{"desc_type":"paragraph"},"content":"Full of the ascendant power of the Cult of the Black Grail, how miserable they become when their Hegemon lord falls in battle. Each Hegemon is unique, thus when slain it can never be re-created. The ecstasy of the Plague Knights in the service of their dread ruler sinks into the deepest despair from which there is no escape. Their strain of the Cult of the Black Grail is shunned by others of their kind, and they are no longer welcome at Ekron, the city of Beelzebub. They are cast out from the Order of the Fly for their failure. The Hegemon\u2019s strain of disease continues to spread and create Thralls, but they are born into a world bereft of their sires, leaving them hopeless and desolate."},{"tags":{"desc_type":"paragraph"},"content":"The eyes of the Plague Knights continuously weep cold black blood as they cry for their lost dark paradise that will never be again. The tantalising dream of a great flood of pestilence that cleanses the Earth is lost forever. Their mournful wails echo and reverberate through No Man\u2019s Land, a cry of sorrow deeper than any mortal can feel, and agonising rage of black hatred that no mortal comprehends. They compose mournful paeans to their lost Hegemon - beautiful yet disturbing songs that promise nothing but neverending death."},{"tags":{"desc_type":"paragraph"},"content":"Such shattered remains of the once-mighty legions of the Hegemon take their vengeance on any opponent regardless of their allegiance, even throwing themselves at other Cult of the Black Grail warbands in futile acts of regret, trying to feel pain that would at least momentarily dull their aching feeling of loss. But no such hope exists in their eternal damnation."},{"tags":{"desc_type":"paragraph"},"content":"These bands made up of the strains of fallen Hegemons\u2019 once-mighty legions form everlasting funeral processions for their dead masters. Echoing cries and dirges accompany their solemn steps, taking them from nowhere to nowhere. Their eyes are forever stained by the foul tears of the Cult of the Black Grail, and their skin turns black and sloughs off, hanging in tatters like funereal garb. They seek lost artefacts and broken shards of armour and weapons of their lost liege, fashioning disturbing and rusted jewellery from these remains where the Hegemon\u2019s power still lingers beyond the grave. Few things that haunt No Man\u2019s Land are more dangerous - or more ghastly - than these corruption-ridden echoes of the dark past, for these profane funeral processions will last until time itself is no more."}],"team":"hell","cut_rules":["rl_theorderofthefly"],"rules":["rl_theexecutor","rl_thefallen","rl_thelost","rl_thebereaved","rl_dishonoured","rl_hegemonslastblessing","rl_hegemonswill"],"options":[]},{"id":"fc_newantioch_fv_redbrigade","name":"The Red Brigade","source":"westfalia","tags":{"url_custom":"the-red-brigade"},"contextdata":{"faction_keyword":{"name":"kw_antioch"}},"base_id":"fc_newantioch","description":[{"tags":{"desc_type":"paragraph"},"content":"The Red Brigade is made of volunteers who have lost someone close to them in the battles of the Great War. The unit was founded by St. Ernest, the sole survivor of the second battle of Acre; where he lost his brother Wilhelm to the forces of the Heresiarch Berenguer."},{"tags":{"desc_type":"paragraph"},"content":"It is said that when his brother fell in comabt Ernest donned the blood-stained helmet of Wilhelm and returned to the fray to kill Heretics until there were no more left to slay. As silence finally fell over the battlefield, Ernest was the sole survivor of either side. Seeing this as an ordained miracle by the Almighty, he gathered the rest of his brother\'s bloodied armour and returned to the Principality of New Antioch. There he began recruiting volunteers for his vendetta. As a gifted orator driven by the anguish of his loss, Ernest soon gathered a following of many bereaved soldiers like himself. Thus the first Red Brigade was formed and Ernest led his unofficial warband into the No Man\'s Land on a hunt for Heretics, through ambush and deep strikes at the vulnerable enemy supply lines. His bloodsoaked warriors soon began to resemble their leader in appearance which earned the unit its name."},{"tags":{"desc_type":"paragraph"},"content":"Their skill and cunning on the battleifled caught the attention of the thrine of New Antioch and the Red Brigade was recognised as an official unit in the ducal armed forces. Since those times the Red Brigade has been used as the personal special operations force by the Duke of New Antioch. These driven soldiers undertake the most dangerous missions where unsustainable casualties would make it impossible to use the regular units. To join the Red Brigade a soldier has to volunteer, bringing to the recruiting officer a piece of kit tarnished by the blood of fallen comrades as proof of their right to serve as a \'Blood Pledge\', as the soldiers of the Brigade are known."},{"tags":{"desc_type":"paragraph"},"content":"As a unit under the direct command of the Duke, the Red Brigade is granted many privileges while garrisoned within the city, in addition to arms and provisions from the city\'s stores. Their barracks are located at the ducal palace, and before the Red Brigade leaves for a mission they dine at the table of the Duke and his closest officers, in a lavish banquet known as the Feat of the Dead Men."},{"tags":{"desc_type":"paragraph"},"content":"Due to their propensity for hunting high-value targets, the Red Brigade is supplied with warhounds from the kennels of the Duke. These loyal beasts give solace and companionship to the troopers and have been trained to provide the soldiers with grenades in the heat of battle when the Red Brigade strive to take heavily defended enemy stringpoints and trenches. Malinois, wolfhounds and mastiffs are especially popular and much-loved by the soldiery of the unit."},{"tags":{"desc_type":"paragraph"},"content":"The Red Brigade are a grim and silent unit, haunted by their losses and long patrols in enemy territory. Often yearning to be reunited with their lost ones; they are willing to accept missions where death is almost certain. This self-destructive attitude chafes many members of the clergy, who do not condone the existence of the unit; as suicide is a mortal sin. However, the Brigade has proven itself to be so useful to the Duke that the red-armoured troops have seen continuous service for decades."},{"tags":{"desc_type":"paragraph"},"content":"After each fray it is the task of the Quartermaster of the Brigade to gather the arms and red armour of the fallen and redistribute it so new recruits will have a real, tangible link to the fallen. But when faced with a battle where the commander of the Brigade sees there is no hope of survival, it is customary to dispatch one of their soldiers back to New Antioch in order to notify the Duke of the unit\'s demise. This messenger is chosen by drawing lots and the selected soldier takes the dogtags of the entire unit back to the Home of All Our Hopes, to be hung from the walls of the Chapel of Remembrance; there to join the thousands that have given their lives for the Brigade before."},{"tags":{"desc_type":"paragraph"},"content":"The last member of the Brigade then asks for a personal audience with the ruling duke or duchess. The traditional greeting in such circumstances by the survivor is as follows:"},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"\\"The Red Brigade has fallen\\""}]},{"tags":{"desc_type":"paragraph"},"content":"To which the ruler of New Antioch solemnly answers:"},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italic"},"content":"\\"And the Red Bridage will rise anew\\""}]},{"tags":{"desc_type":"paragraph"},"content":"And thus the recruitment of the new Red Brigade commences and the cycle of violence, revenge, and blood begins once more."}],"team":"faithful","cut_rules":[],"rules":["rl_displeasureofthechurch","rl_furyofsainternest","rl_gloryhounds","rl_noretreat","rl_rememberthefallen","rl_wearandtear"],"options":[]},{"id":"fc_cultoftheblackgrail_fv_thegreathunger","name":"The Great Hunger","source":"creature_caster","tags":{"url_custom":"the-great-hunger"},"contextdata":{"faction_keyword":{"name":"kw_blackgrail"}},"base_id":"fc_cultoftheblackgrail","description":[{"tags":{"desc_type":"paragraph"},"content":"The Great Hunger is not merely a disease, nor is it an army - it is a lingering wound upon the world, a festering malignancy left in the wake of Beelzebub\u2019s war against Creation. It is a strain of the Black Grail Virus that is not wielded as a tool of conquest by the Order of the Fly, but rather as a means of ensuring that the corruption endures, even in defeat. Where the armies of the Grail seek to march upon the living, the Hunger seeks only to consume and multiply."},{"tags":{"desc_type":"paragraph"},"content":"The forces of the Black Grail taint the land itself. Where their influence takes root, all organic matter becomes a vector for further corruption, twisting and reshaping itself into a form pleasing to Beelzebub. Unlike the immediate, aggressive infections seen in the frontlines of battle, The Great Hunger is subtle, taking hold in the ruined remains of abandoned towns, charnel grounds, and forgotten battlefields. It does not seek to conquer - instead it waits. It endures. Even if a region is reclaimed from the Grail\u2019s influence, the Hunger can lurk beneath the surface for weeks, months, or even years, waiting for the moment when the corruption is no longer expected, no longer feared. It is then, when it is almost forgotten, that The Great Hunger will reemerge, consuming everything, even itself, until nothing is left - nothing but a dormant remnant waiting to rise and feast again."}],"team":"hell","cut_rules":["rl_theorderofthefly"],"rules":["rl_arcanaputrescere","rl_butcherknights","rl_cradleoffilth","rl_dessicatedhusks","rl_greathunger_equipmentrestrictions","rl_spawnofgluttony","rl_ravenousinfection"],"options":[]}]'),_=JSON.parse('[{"id":"rl_flockofassassins","source":"core","tags":{},"contextdata":{},"name":"Flock of Assassins","description":[{"tags":{"desc_type":"default"},"content":"A Fida\u2019i of Alamut Warband can include 0-2 Sultanate Assassins and 1 Master Assassin."}],"options":[]},{"id":"rl_masterassassin","source":"core","tags":{},"contextdata":{},"name":"Master Assassin","description":[{"tags":{"desc_type":"default"},"content":"A Fida\u2019i of Alamut Warband must include 1 Master Assassin. The Master Assassin uses the Sultanate Assassin Warband Entry, except that it has the TOUGH Keyword and has a cost of 95 \ud83d\udc51 .","glossary":[{"val":"TOUGH","id":"kw_tough"}]}],"options":[]},{"id":"rl_assassinacolytes","source":"core","tags":{},"contextdata":{},"name":"Assassin Acolytes","description":[{"tags":{"desc_type":"default"},"content":"Up to three Azeb models in a Fida\u2019i of Alamut Warband can be given the INFILTRATOR Keyword at a cost of +10 \ud83d\udc51  each.","glossary":[{"val":"INFILTRATOR","id":"kw_infiltrator"}]}],"options":[]},{"id":"rl_alamutalone","source":"core","tags":{},"contextdata":{},"name":"Alamut Alone","description":[{"tags":{"desc_type":"default"},"content":"A Fida\u2019i of Alamut Warband cannot include a Y\xfczba\u015f\u0131, a Jabirean Alchemist, any Janissaries, Lions of Jabir or Brazen Bulls."}],"options":[]},{"id":"rl_killingsquad","source":"core","tags":{},"contextdata":{"add_to_warband":{},"add_fireteam_warband":{"type":"ft_standard","count":1}},"name":"Killing Squad","description":[{"tags":{"desc_type":"default"},"content":"A Fida\u2019i of Alamut Warband can include 1 Fireteam, consisting of any 2 models from the Warband. Both of the models in the Fireteam are given the FIRETEAM Keyword at no additional cost in \ud83d\udc51 .","glossary":[{"val":"FIRETEAM","id":"kw_fireteam"}]}],"options":[]},{"id":"rl_dervishes","source":"core","tags":{},"contextdata":{},"name":"Dervishes","description":[{"tags":{"desc_type":"default"},"content":"A Fida\u2019i of Alamut Warband can include 0-4 Dervishes. The Dervishes use the Janissaries Warband Entry, but cannot wear Reinforced Armour and replace the STRONG Keyword with the IGNORE OFF-HAND WEAPON Keyword and the Whirling Dervish ability.","glossary":[{"val":"STRONG","id":"kw_strong"},{"val":"IGNORE OFF-HAND WEAPON","id":"kw_ignoremodifier"}]}],"options":[]},{"id":"rl_artofassassination","source":"core","tags":{},"contextdata":{"special_category_upgrades":{"upgrades":[{"category":"art_of_assassination","count":1}]},"faction_add_upgrades":{"list":[{"model_key":"rl_artofassassination","models_id":["md_sultanateassassin","md_sultanateassassin_mv_masterassassin"]}]}},"name":"Art of Assassination","description":[{"tags":{"desc_type":"default"},"content":"Each Sultanate Assassin and Master Assassin in a Fida\u2019i of Alamut Warband can have one of the following abilities at the additional cost in \ud83d\udc51  indicated below. You cannot give the same ability to more than one model (i.e. every Assassin that has an ability must have a different one)."}],"options":[]},{"id":"rl_alchemists","source":"core","tags":{},"contextdata":{},"name":"Alchemists","description":[{"tags":{"desc_type":"default"},"content":"A House of Wisdom Warband must include 1-2 Jabirean Alchemists. In addition, Alchemist Armour in a House of Wisdom Warband has the Limit: 2 stipulation instead of Limit: 1.","glossary":[{"val":"Limit","id":"kw_limit"}]}],"options":[]},{"id":"rl_prideofjabir","source":"core","tags":{},"contextdata":{},"name":"Pride of Jabir","description":[{"tags":{"desc_type":"default"},"content":"A House of Wisdom Warband can include 0-3 Lions of Jabir."}],"options":[]},{"id":"rl_privateventure","source":"core","tags":{},"contextdata":{},"name":"Private Venture","description":[{"tags":{"desc_type":"default"},"content":"A House of Wisdom Warband cannot include a Y\xfczba\u015f\u0131, Janissaries, or Sultanate Assassins."}],"options":[]},{"id":"rl_takwinhomunculus","source":"core","tags":{},"contextdata":{"true_add_to_model":{"list":[{"id":"ab_chosenhomunculus","required":[{"category":"id","value":["md_jabireanalchemist"]}]}]}},"name":"Takwin Homunculus","description":[{"tags":{"desc_type":"default"},"content":"A House of Wisdom Warband can include one Takwin Homunculus for each Jabirean Alchemist in the Warband. Each Takwin Homunculus must be associated with a Jabirean Alchemist when it is added to the Warband. An Alchemist can only have a single Takwin Homunculus associated with it and vice versa. If a Takwin Homunculus\u2019 associated Alchemist is killed during the Campaign, it cannot be deployed during a game, its Battlekit cannot be changed, and no Alchemical Formulas can be applied to it. If you add a new Jabirean Alchemist to your Warband and it has any unassociated Takwin Homunculi, you must associate one of them with the new Alchemist."}],"options":[]},{"id":"rl_nobleguardians","source":"core","tags":{},"contextdata":{},"name":"Noble Guardians","description":[{"tags":{"desc_type":"default"},"content":"A House of Wisdom can include 0-2 F\u0101ris. The F\u0101ris use the Janissary Warband Entry, but have the ELITE Keyword at no additional cost in ducats.","glossary":[{"val":"ELITE","id":"kw_elite"}]}],"options":[]},{"id":"rl_kavass","source":"core","tags":{},"contextdata":{},"name":"Kavass","description":[{"tags":{"desc_type":"default"},"content":"Kavasses are sworn guardians of the House of Wisdom. You can change the Melee Characteristic of up to 3 Azebs in a House of Wisdom Warband from -1 DICE to +0 DICE at a cost of +5 \ud83d\udc51  each. However, these Azebs lose the Light Skirmisher ability.","glossary":[{"val":"SKIRMISHER","id":"kw_skirmisher"},{"val":"+1 DICE","id":"kw_plusdice"}]}],"options":[]},{"id":"rl_secretsofthehouseofwisdom","source":"core","tags":{},"contextdata":{"special_category_upgrades":{"upgrades":[{"category":"secrets_of_the_house_of_wisdom","count":1}]},"faction_add_upgrades":{"list":[{"model_key":"rl_secretsofthehouseofwisdom","models_id":["md_jabireanalchemist"]}]}},"name":"Secrets of the House of Wisdom","description":[{"tags":{"desc_type":"default"},"content":"Each Jabirean Alchemist in a House of Wisdom Warband can have one of following abilities at the cost indicated below. You cannot give the same ability to more than one model (i.e. every Jabirean Alchemist that has an ability must have a different one)."}],"options":[]},{"id":"rl_weaponcollections","source":"core","tags":{},"contextdata":{"add_to_warband":{},"faction_choose_equipment":{"limit_override":1,"additions":[{"list":"fc_trenchpilgrim","count":1,"strict_id":true,"option_id":0,"restriction":[{"all":"all"}]},{"list":"fc_newantioch","count":1,"strict_id":true,"option_id":1,"restriction":[{"all":"all"}]}]}},"name":"Weapon Collections","description":[{"tags":{"desc_type":"default"},"content":"When you create your starting Warband, you can purchase 1 piece of Battlekit from the New Antioch Armoury, and 1 piece of Battlekit from the Trench Pilgrims Armoury. Any stipulations that apply to it are followed (so there is little point in taking Battlekit that can only be used by models from the other Warbands). You can repurchase the Battlekit later during the campaign if it is lost for any reason."}],"options":[{"ref_id":"ot_trenchpilgrim","name":"Trench Pilgrim Items","description":[],"category":"type","type":"text","strictness":"strict","hide":true,"predefined_options":[],"option_context":{"basic_option_default":{}},"data_search":{"searchtype":"complex","searchparam":{"type":"factionequipmentrelationship","request":{"operator":"and","terms":[{"item":"faction_id","value":"fc_trenchpilgrim","equals":true,"strict":true},{"item":"faction_id","value":"fc_ironsultanate","equals":false,"strict":true},{"item":"tags","value":"exploration_only","equals":false,"strict":true,"istag":true,"tagvalue":true}],"subparams":[]}}}},{"ref_id":"ot_newantioch","name":"New Antioch Items","description":[],"category":"type","type":"text","hide":true,"strictness":"strict","predefined_options":[],"option_context":{"basic_option_default":{}},"data_search":{"searchtype":"complex","searchparam":{"type":"factionequipmentrelationship","request":{"operator":"and","terms":[{"item":"faction_id","value":"fc_newantioch","equals":true,"strict":true},{"item":"faction_id","value":"fc_ironsultanate","equals":false,"strict":true},{"item":"tags","value":"exploration_only","equals":false,"strict":true,"istag":true,"tagvalue":true}],"subparams":[]}}}}]},{"id":"rl_silahdar","source":"core","tags":{},"contextdata":{},"name":"Silahdar","description":[{"tags":{"desc_type":"default"},"content":"The commanders of the Iron Wall\u2019s units come from the personal bodyguards of the Sultan known as Silahdar. A Defenders of the Iron Wall Warband must include 1 Silahdar. The Silahdar uses the Y\xfczba\u015f\u0131 Warband Entry, except that it replaces the Mubarizun ability with the STRONG Keyword, and they can have an Alaybozan from the Iron Sultanate Armoury, and an Anq\u0101 Guard and Explosive Charges from the Defenders of the Iron Wall Armoury, at the indicated cost in \ud83d\udc51  for each piece of Battlekit that is taken.","glossary":[{"val":"STRONG","id":"kw_strong"}]}],"options":[]},{"id":"rl_farfromthesublimegate","source":"core","tags":{},"contextdata":{},"name":"Far from the Sublime Gate","description":[{"tags":{"desc_type":"default"},"content":"A Defenders of the Iron Wall Warband cannot include any Lions of Jabir, Y\xfczba\u015f\u0131 or Assassins, and models in the Warband cannot have a Cloak of Alamut or Wind Amulet."}],"options":[]},{"id":"rl_grandcannons","source":"core","tags":{},"contextdata":{},"name":"Grand Cannons","description":[{"tags":{"desc_type":"default"},"content":"A Defenders of the Iron Wall Warband can include 0-2 Sultanate Grand Cannons at a cost of 60 \ud83d\udc51  each. When a Grand Cannon is added to a Defender of the Iron Wall Warband it must either be given to a Brazen Bull that is already part of the Warband, or added to the Armoury on the Warband\u2019s roster sheet as a Grand Cannon gun battery. No more than 1 Grand Cannon can be given to a Brazen Bull model, and a Warband cannot have more than 2 Grand Cannons in total. The rules for using the Grand Cannon during a game can be found in the Defenders of the Iron Wall Warband Battlekit section."}],"options":[]},{"id":"rl_sipahi","source":"core","tags":{},"contextdata":{},"name":"Sipahi","description":[{"tags":{"desc_type":"default"},"content":"Sipahi Automaton Cavalry often serves as infantry in the Iron Wall\u2019s units to reinforce areas under severe pressure. A Defenders of the Iron Wall Warband can include up to 1 Sipahi Automaton Cavalry at a cost of 110 \ud83d\udc51. They use the Mercenary Entry for a Mamluk Faris but you cannot change their Battlekit in any way. Note that this does not stop you from recruiting a Mamluk Faris as a Mercenary as well."}],"options":[]},{"id":"rl_janissaryofficers","source":"core","tags":{},"contextdata":{},"name":"Janissary Officers","description":[{"tags":{"desc_type":"default"},"content":"A Defenders of the Iron Wall Warband can have 0-2 Janissaries, which have the ELITE Keyword at no additional cost in \ud83d\udc51.","glossary":[{"val":"ELITE","id":"kw_elite"}]}],"options":[]},{"id":"rl_sappercorps","source":"core","tags":{},"contextdata":{},"name":"Sapper Corps","description":[{"tags":{"desc_type":"default"},"content":"The standard divisions assigned to the Iron Wall have doublestrength Sapper detachments. A Defenders of the Iron Wall Warband can have 0-4 Sultanate Sappers."}],"options":[]},{"id":"rl_siegejezzailteams","source":"core","tags":{},"contextdata":{"add_to_warband":{},"add_to_model":{"id":"rl_siegejezzailteams"}},"name":"Siege Jezzail Teams","description":[{"tags":{"desc_type":"default"},"content":"The Defenders of the Iron Wall are trained to use Siege Jezzails in pairs. Add +1 DICE to the Success Roll for a Ranged Attack made with a Siege Jezzail if there is a friendly model within 1\\" of the model making the attack.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"}]}],"options":[]},{"id":"rl_marksmanshipoftheironwall","source":"core","tags":{},"contextdata":{"add_to_model":{"id":"rl_marksmanshipoftheironwall"}},"name":"Marksmanship of the Iron Wall","description":[{"tags":{"desc_type":"default"},"content":"All the members of the Warband practise marksmanship from the dizzying heights of the Iron Wall against targets on the ground below. Add +2 DICE instead of +1 DICE to the Success Roll for a Ranged Attack made by models in a Defenders of the Iron Wall Warband when they have the Elevated Position modifier.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"},{"val":"+2 DICE","id":"kw_plusdice"}]}],"options":[]},{"id":"rl_newantiochfireteam","source":"core","tags":{},"contextdata":{"add_fireteam_warband":{"type":"ft_antioch","count":2}},"name":"New Antioch Fireteams","description":[{"tags":{"desc_type":"paragraph"},"content":"A New Antioch Warband can include up to 2 Fireteams. Each Fireteam consists of any two models from the Warband. All of the models in the Fireteams are given the FIRETEAM Keyword at no additional cost in \ud83d\udc51. Fireteams in a New Antioch Warband have the Concentrated Attack ability:","glossary":[{"val":"FIRETEAM","id":"kw_fireteam"}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"sub-ability"},"content":"FIRETEAM","subcontent":[{"tags":{"desc_type":"default"},"content":"Models that are part of the same Fireteam can be Activated simultaneously. They can take their ACTIONS in any order you wish, and you can switch between the two models freely. However, if the Activation of either member of the Fireteam ends (due to a failed Risky Success Roll for example), it immediately ends for the other model that is in the Fireteam too.","glossary":[{"val":"Risky Success","id":"kw_riskyaction"},{"val":"ACTIONS","id":"kw_action"}]}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"sub-ability"},"content":"Concentrated Attack","subcontent":[{"tags":{"desc_type":"default"},"content":"If a model from a Fireteam hits a target that had been hit by an attack made by the other member of their Fireteam earlier in the same joint Activation, then you can spend 3 BLOOD MARKERS to convert the Injury Roll for the second attack to a Bloodbath Roll, even if the target is not Down.","glossary":[{"val":"FIRETEAM","id":"kw_fireteam"},{"val":"ACTION","id":"kw_action"},{"val":"BLOOD MARKERS","id":"kw_bloodmarker"}]}]}]}],"options":[]},{"id":"rl_fastaslightning","source":"core","tags":{"bonus":true},"contextdata":{"add_to_model":{"id":"rl_fastaslightning"},"bonus_ability":{"action_type":["dash"]}},"name":"Fast as Lightning","description":[{"tags":{"desc_type":"default"},"content":"Add +1 DICE to the Risky Success Roll for models from a Heretic Naval Raiders Warband that are taking a Dash ACTION.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"},{"val":"ACTION","id":"kw_action"},{"val":"Risky Success","id":"kw_riskyaction"}]}],"options":[]},{"id":"rl_closeassaultweapons","source":"core","tags":{},"contextdata":{},"name":"Close Assault Weapons","description":[{"tags":{"desc_type":"default"},"content":"Submachine Guns cost 25 \ud83d\udc51  for a Heretic Naval Raiders Warband."}],"options":[]},{"id":"rl_lighttroops","source":"core","tags":{},"contextdata":{},"name":"Light Troops","description":[{"tags":{"desc_type":"default"},"content":"A Heretic Naval Raiders Warband cannot have more than two Anointed models or more than 1 Artillery Witch (even if the Warband has a value of 1,000 \ud83d\udc51  or more)."}],"options":[]},{"id":"rl_letsleepingdogslie","source":"core","tags":{},"contextdata":{},"name":"Let Sleeping Dogs Lie","description":[{"tags":{"desc_type":"default"},"content":"This Warband cannot include a War Wolf."}],"options":[]},{"id":"rl_unseenadvance","source":"core","tags":{},"contextdata":{"faction_add_upgrades":{"list":[{"model_key":"rl_unseenadvance","filters":[{"type":"keyword","value":"kw_elite","truth":false}]}]}},"name":"Unseen Advance","description":[{"tags":{"desc_type":"default"},"content":"Up to three models without the ELITE Keyword in a Heretic Naval Raiders Warband can be given the INFILTRATOR Keyword at a cost of +10 \ud83d\udc51  each.","glossary":[{"val":"ELITE","id":"kw_elite"},{"val":"INFILTRATOR","id":"kw_infiltrator"}]}],"options":[]},{"id":"rl_semicorporeal","source":"core","tags":{},"contextdata":{"add_to_model":{"id":"rl_semicorporeal"}},"name":"Semi-Corporeal","description":[{"tags":{"desc_type":"default"},"content":"Add -1 INJURY DICE for Injury Rolls caused by Ranged Attacks that hit a model from a Trench Ghost Warband.","glossary":[{"val":"-1 INJURY DICE","id":"kw_injurydice"}]}],"options":[]},{"id":"rl_spectral","source":"core","tags":{},"contextdata":{"add_to_model":{"id":"rl_spectral"}},"name":"Spectral","description":[{"tags":{"desc_type":"default"},"content":"Models in a Trench Ghost Warband ignore the penalty for moving through Difficult Terrain (other terrain affects them normally)."}],"options":[]},{"id":"rl_undeadhorror","source":"core","tags":{},"contextdata":{"add_to_model":{"id":"rl_undeadhorror"},"keyword_add":{"value":["kw_fear"]},"keyword_ignore":{"value":["kw_gas","kw_difficultterrain"]}},"name":"Undead Horror","description":[{"tags":{"desc_type":"default"},"content":"Models in this Warband have the FEAR, NEGATE DIFFICULT TERRAIN, and NEGATE GAS Keywords.","glossary":[{"val":"FEAR","id":"kw_fear"},{"val":"NEGATE GAS","id":"kw_negate_kw_gas"},{"val":"NEGATE DIFFICULT TERRAIN","id":"kw_negate_kw_difficultterrain"}]}],"options":[]},{"id":"rl_enemiesofall","source":"core","tags":{},"contextdata":{},"name":"Enemies of All","description":[{"tags":{"desc_type":"default"},"content":"A Trench Ghost Warband cannot include Mercenaries."}],"options":[]},{"id":"rl_lostsouls","source":"core","tags":{},"contextdata":{},"name":"Lost Souls","description":[{"tags":{"desc_type":"default"},"content":"A Trench Ghost Warband cannot include models with the ARTIFICIAL Keyword, and models in a Trench Ghost Warband cannot have Hellbound Soul Contracts or Infernal Brands. The Warband can include Anointed Heavy Infantry, but they do not have their Infernal Brand and still cost 95 \ud83d\udc51.","glossary":[{"val":"ARTIFICIAL","id":"kw_artificial"}]}],"options":[]},{"id":"rl_slow","source":"core","tags":{},"contextdata":{"add_to_model":{"id":"rl_slow"}},"name":"Slow and Creeping","description":[{"tags":{"desc_type":"default"},"content":"Treat a Trench Ghost model as having a Movement Characteristic of 3\u201d/Infantry when it takes a Dash ACTION. In addition, add -1 DICE to the Success Roll for an attack made by a Trench Ghost model on an enemy model that is making a Retreat.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"},{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"rl_sarcophagusmine","source":"core","tags":{},"contextdata":{"faction_add_upgrades":{"list":[{"model_key":"rl_sarcophagusmine","models_id":["md_heretictrooper"]}]}},"name":"Sarcophagus Mine","description":[{"tags":{"desc_type":"default"},"content":"Heretic Troopers can be encased in suits of thick armour that have been filled with explosives, which can be triggered by the Trooper when the enemy draws close."}],"options":[]},{"id":"rl_barbedwirebanshee","source":"core","tags":{},"contextdata":{},"name":"Barbed Wire Banshee","description":[{"tags":{"desc_type":"default"},"content":"A Trench Ghost Warband can include a Barbed Wire Banshee instead of a Chorister. The Barbed Wire Banshee has the same Profile and Cost as a Chorister, but instead of the Unholy Hymns Ability add +1 INJURY DICE to rolls for enemy models that are within 8\\" of a Barbed Wire Banshee."}],"options":[]},{"id":"rl_tankpalanquin","source":"core","tags":{},"contextdata":{},"name":"Tank Palanquin","description":[{"tags":{"desc_type":"paragraph"},"content":"At the cost of 60 ducats, the Heretic Priest of the warband can ride a ghostly Tank Palanquin. "},{"tags":{"desc_type":"equipment"},"content":"eq_tankpalanquin"}],"options":[]},{"id":"rl_worshipmammon","source":"core","tags":{},"contextdata":{},"name":"Worship Mammon","description":[{"tags":{"desc_type":"default"},"content":"The Patron of a Knights of Avarice Warband is always Mammon."}],"options":[]},{"id":"rl_mammonschosen","source":"core","tags":{},"contextdata":{"add_to_warband":{},"validate_final_unit":{"requirements":[{"type":"ducats","value":80,"subvalue":"minimum"}],"exception":[{"type":"id","value":"md_wretched"}]}},"name":"Mammon\'s Chosen","description":[{"tags":{"desc_type":"default"},"content":"A Knights of Avarice Warband cannot include a model if the cost of the model and its Battlekit is less than 80 \ud83d\udc51, unless the model is a Wretched."}],"options":[]},{"id":"rl_corruptmerchants","source":"core","tags":{},"contextdata":{"add_to_warband":{},"faction_choose_equipment":{"additions":[{"list":"fc_ironsultanate","count":1,"option_id":0,"restriction":[{"all":"all"}]},{"list":"fc_newantioch","count":1,"option_id":1,"restriction":[{"all":"all"}]}]}},"name":"Corrupt Merchants","description":[{"tags":{"desc_type":"default"},"content":"When you create your starting Warband, you can purchase 1 piece of Battlekit from the New Antioch Armoury, and 1 piece of Battlekit from the Iron Sultanate Armoury. Any stipulations that apply to it must still be followed (so there is little point in taking the Assassin\u2019s Dagger, for example, as it can only be used by Assassins). You can repurchase the Battlekit later during the campaign if it is lost for any reason."}],"options":[{"ref_id":"ot_ironsultanate","name":"Iron Sultanate Items","description":[],"category":"type","type":"text","strictness":"strict","hide":true,"predefined_options":[],"option_context":{"basic_option_default":{}},"data_search":{"searchtype":"complex","searchparam":{"type":"factionequipmentrelationship","request":{"operator":"and","terms":[{"item":"faction_id","value":"fc_ironsultanate","equals":true,"strict":true},{"item":"faction_id","value":"fc_hereticlegion","equals":false,"strict":true},{"item":"tags","value":"exploration_only","equals":false,"strict":true,"istag":true,"tagvalue":true}],"subparams":[]}}}},{"ref_id":"ot_newantioch","name":"New Antioch Items","description":[],"category":"type","type":"text","hide":true,"strictness":"strict","predefined_options":[],"option_context":{"basic_option_default":{}},"data_search":{"searchtype":"complex","searchparam":{"type":"factionequipmentrelationship","request":{"operator":"and","terms":[{"item":"faction_id","value":"fc_newantioch","equals":true,"strict":true},{"item":"faction_id","value":"fc_hereticlegion","equals":false,"strict":true},{"item":"tags","value":"exploration_only","equals":false,"strict":true,"istag":true,"tagvalue":true}],"subparams":[]}}}}]},{"id":"rl_preservetheloot","source":"core","tags":{},"contextdata":{"faction_extra_eq_restriction":{},"faction_eq_restriction":{"removed":[{"res_type":"keyword","value":"kw_fire"},{"res_type":"keyword","value":"kw_shrapnel"}]}},"name":"Preserve the Loot","description":[{"tags":{"desc_type":"default"},"content":"Models in a Knights of Avarice Warband cannot have Battlekit that has, or would give another piece of Battlekit, the FIRE and/or SHRAPNEL Keywords. Grenade Launchers can be taken, but replace the SHRAPNEL Keyword with the -1 INJURY DICE, GAS, and IGNORE ARMOUR Keywords.","glossary":[{"val":"-1 INJURY DICE","id":"kw_injurydice"},{"val":"IGNORE ARMOUR","id":"kw_ignorearmour"},{"val":"FIRE","id":"kw_fire"},{"val":"GAS","id":"kw_gas"},{"val":"SHRAPNEL","id":"kw_shrapnel"}]}],"options":[]},{"id":"rl_infernalrivalry","source":"core","tags":{},"contextdata":{},"name":"Infernal Rivalry","description":[{"tags":{"desc_type":"default"},"content":"Mammon is a rival of Beleth, who is the Patron of Death Commandos. A Knights of Avarice Warband cannot include Death Commandos."}],"options":[]},{"id":"rl_gasbombs","source":"core","tags":{},"contextdata":{},"name":"Gas Bombs","description":[{"tags":{"desc_type":"default"},"content":"Artillery Witches in a Knights of Avarice Warband replace their Infernal Bombs with Gas Bombs."}],"options":[]},{"id":"rl_goeticwarlocks","source":"core","tags":{},"contextdata":{},"name":"Goetic Warlocks","description":[{"tags":{"desc_type":"default"},"content":"Goetic Warlocks are creations of Mammon. A Knights of Avarice Warband can include up to 2 Goetic Warlocks as Mercenaries. In addition, the first Goetic Warlock to be recruited in a Knights of Avarice Warband costs 110 \ud83d\udc51 instead of its normal cost in \u263c"}],"options":[]},{"id":"rl_priceofgreed","source":"core","tags":{},"contextdata":{"add_to_warband":{}},"name":"Price of Greed","description":[{"tags":{"desc_type":"default"},"content":"A Heretic Priest in a Knights of Avarice Warband has the Price of Greed ACTION instead of the Puppet Master ACTION.","glossary":[{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"rl_facethyfears","source":"core","tags":{},"contextdata":{},"name":"Face Thy Fears","description":[{"tags":{"desc_type":"default"},"content":"Models in a Procession of the Sacred Affliction Warband cannot have Iron Capirotes. Ecclesiastic Prisoners in a Procession of the Sacred Affliction Warband do not have Iron Capirotes, but their cost remains the same."}],"options":[]},{"id":"rl_reliquaryarmoury","source":"core","tags":{},"contextdata":{},"name":"Reliquary Armoury","description":[{"tags":{"desc_type":"default"},"content":"Holy Icon Shields cost 20 \ud83d\udc51  for a Procession of the Sacred Affliction Warband and do not have the ELITE only stipulation. In addition, your Arsenal may include Holy Icon Armour for 30 \ud83d\udc51.","glossary":[{"val":"ELITE","id":"kw_elite"}]}],"options":[]},{"id":"rl_punishingmillstones","source":"core","tags":{},"contextdata":{"add_to_model":{"id":"rl_punishingmillstones","removed":[{"category":"id","value":"md_ecclesiasticprisoner_sacredaffliction"}]}},"name":"Punishing Millstones","description":[{"tags":{"desc_type":"default"},"content":"Add +1 INJURY DICE for Melee Attacks made by models from a Procession of the Sacred Affliction if the target is Down. This special rule does not apply to attacks made by Ecclesiastic Prisoners","glossary":[{"val":"+1 INJURY DICE","id":"kw_injurydice"},{"val":"Down","id":"gl_down"}]}],"options":[]},{"id":"rl_meleefocused","source":"core","tags":{},"contextdata":{},"name":"Melee-Focused","description":[{"tags":{"desc_type":"default"},"content":"Models in a Procession of the Sacred Affliction Warband cannot have any Machine Guns, and Punt Guns have the Limit: 1 stipulation."}],"options":[]},{"id":"rl_zealotstrength","source":"core","tags":{},"contextdata":{"faction_add_upgrades":{"list":[{"model_key":"rl_zealotstrength","models_id":["md_trenchpilgrim","md_trenchpilgrim_martyr"]}]},"faction_remove_upgrades":{"upgrades":["rel_md_up_zealotstrength_pilgrimbase"]}},"name":"Zealot Strength","description":[{"tags":{"desc_type":"default"},"content":"Up to three Trench Pilgrims and/or Martyr-Penitents in a Procession of the Sacred Affliction Warband, can have Zealot Strength instead of only one."}],"options":[]},{"id":"rl_hammerandanvil","source":"core","tags":{},"contextdata":{},"name":"Hammer and Anvil","description":[{"tags":{"desc_type":"default"},"content":"Anti-Tank Hammers taken for a Procession of the Sacred Affliction Warband do not have the ELITE only stipulation.","glossary":[{"val":"ELITE","id":"kw_elite"}]}],"options":[]},{"id":"rl_wrathofgod","source":"core","tags":{},"contextdata":{"faction_add_upgrades":{"list":[{"model_key":"rl_wrathofgod","models_id":["md_trenchpilgrim","md_castigator","md_trenchpilgrim_martyr"]}]}},"name":"Wrath of God","description":[{"tags":{"desc_type":"default"},"content":"Up to 1 Castigator, or Trench Pilgrim, or Martyr Penitent can have the Wrath of God special rule at a cost of 15 \ud83d\udc51. BLOOD MARKERS are never placed next to a model with the Wrath of God special rule, and it has the NEGATE FEAR Keyword. It cannot be Broken on the Wheel by an Anchorite Shrine. A model with the Wrath of God special rule cannot have Ranged Weapons or Armour (it can have a Shield). In addition, change the base size of the model to 32mm.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"},{"val":"NEGATE FEAR","id":"kw_negate_kw_fear"}]}],"options":[]},{"id":"rl_bloodofthelamb","source":"core","tags":{},"contextdata":{"true_add_to_model":{"list":[{"id":"ab_castigatortough","required":[{"category":"id","value":["md_castigator"]}]}]}},"name":"Blood of the Lamb","description":[{"tags":{"desc_type":"default"},"content":"Castigators in a Cavalcade of the Tenth Plague Warband have the TOUGH Keyword at no additional cost in \ud83d\udc51, and any model (except Ecclesiastic Prisoners who are not worthy) in the warband can purchase a Sacrificial Lamb (see below).","glossary":[{"val":"TOUGH","id":"kw_tough"}]}],"options":[]},{"id":"rl_heavenawaits","source":"core","tags":{},"contextdata":{"faction_remove_upgrades":{"upgrades":["rel_md_up_resurrection"]}},"name":"Heaven Awaits","description":[{"tags":{"desc_type":"default"},"content":"The Cavalcade rejects the doctrine of the Meta-Christ. Trench Pilgrims in a Cavalcade of the Tenth Plague Warband cannot be resurrected as Martyr-Penitents."}],"options":[]},{"id":"rl_theunclean","source":"core","tags":{},"contextdata":{},"name":"The Unclean","description":[{"tags":{"desc_type":"default"},"content":"The Cavalcade detests using the unclean Ecclesiastic Prisoners. A Cavalcade of the Tenth Plague Warband can only have 0-2 Ecclesiastic Prisoners."}],"options":[]},{"id":"rl_dayofhiswrath","source":"core","tags":{},"contextdata":{},"name":"Day of His Wrath","description":[{"tags":{"desc_type":"default"},"content":"The War Prophet of this Warband replaces their Laying on Hands ACTION with the Day of his Wrath ACTION.","glossary":[{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"rl_stolencommunicants","source":"core","tags":{},"contextdata":{},"name":"Stolen Communicants","description":[{"tags":{"desc_type":"default"},"content":"Communicants cost 3 \u263c to recruit for a Cavalcade of the Tenth Plague Warband (they do not cost any \ud83d\udc51)."}],"options":[]},{"id":"rl_favourofthelord","source":"core","tags":{},"contextdata":{"add_to_warband":{}},"name":"Favour of the Lord","description":[{"tags":{"desc_type":"default"},"content":"At the start of each Turn, you can place 1 BLESSING MARKER next to a model from this Warband.","glossary":[{"val":"BLESSING MARKER","id":"kw_blessingmarker"}]}],"options":[]},{"id":"rl_anchoritecloister","source":"core","tags":{},"contextdata":{},"name":"Anchorite Cloister","description":[{"tags":{"desc_type":"default"},"content":"A War Pilgrimage of Saint Methodius Warband may include up to two Anchorite Shrines."}],"options":[]},{"id":"rl_anchoritearmoury","source":"core","tags":{},"contextdata":{},"name":"Anchorite Armoury","description":[{"tags":{"desc_type":"paragraph"},"content":"Anchorite Shrines in a War Pilgrimage of Saint Methodius Warband have a Ranged Characteristic of +0 DICE instead of -1 DICE, and can have Anchorite Ranged Weapons and Anchorite Battlekit from the War Pilgrimage of Saint Methodius Armoury.","glossary":[{"val":"+0 DICE","id":"kw_plusdice"}]},{"tags":{"desc_type":"paragraph"},"content":"When you recruit an Anchorite Shrine, you can replace its Catherine Wheel with one of the Anchorite-Only Ranged Weapons. Due to its immense size, all these weapons are counted as being 1-Handed weapons when they are used by an Anchorite Shrine."},{"tags":{"desc_type":"paragraph"},"content":"An Anchorite Shrine can have up to 2 of the Anchorite-Only pieces of Battlekit. Once equipped, the Battlekit cannot be removed or lost from the Anchorite Shrine for any reason."}],"options":[]},{"id":"rl_mortalsin","source":"core","tags":{},"contextdata":{},"name":"Mortal Sin","description":[{"tags":{"desc_type":"default"},"content":"Ecclesiastic Prisoners in a War Pilgrimage of Saint Methodius Warband cannot have a Martyrdom Device, and models in a War Pilgrimage of Saint Methodius Warband cannot be Broken on the Wheel of an Anchorite Shrine."}],"options":[]},{"id":"rl_communicantheresy","source":"core","tags":{},"contextdata":{},"name":"Communicant Heresy","description":[{"tags":{"desc_type":"default"},"content":"The Pilgrims of Saint Methodius oppose the creation of Communicants. Ammo Monks, Communicants and Communicant Anti-Tank Hunters cannot be included in a War Pilgrimage of Saint Methodius Warband."}],"options":[]},{"id":"rl_treasureinheaven","source":"core","tags":{},"contextdata":{"faction_remove_upgrades":{"upgrades":["rel_md_up_resurrection"]}},"name":"Treasure in Heaven","description":[{"tags":{"desc_type":"default"},"content":"Trench Pilgrims in a War Pilgrimage of Saint Methodius Warband cannot be resurrected as Martyr Penitents."}],"options":[]},{"id":"rl_chasteorder","source":"core","tags":{},"contextdata":{},"name":"Chaste Order","description":[{"tags":{"desc_type":"default"},"content":"While they revere the holy stigmata of the Nuns of the order, the fathers of the monastery shun the ecstatic revelry of many Trench Pilgrims and insist on modest dress. All Stigmatic Nuns in a War Pilgrimage of Saint Methodius Warband must have Standard Armour, and cannot be used in a battle if they are not wearing Standard Armour. Additionally, the Warband cannot include more than 3 Stigmatic Nuns."}],"options":[]},{"id":"rl_gunsmithmonks","source":"core","tags":{},"contextdata":{},"name":"Gunsmith Monks","description":[{"tags":{"desc_type":"default"},"content":"The warband can buy Machine Guns (LIMIT: 2) at a cost of 50 ducats each, an Automatic Rifle (LIMIT: 1) for 40 ducats and a Submachine Gun (LIMIT: 1) for 30 ducats.","glossary":[{"val":"LIMIT","id":"kw_limit"}]}],"options":[]},{"id":"rl_onlytherighteous","source":"core","tags":{},"contextdata":{},"name":"Only the Righteous","description":[{"tags":{"desc_type":"default"},"content":"Any model with the PILGRIM Keyword in a Cavalcade of the Tenth Plague Warband (including an Anchorite Shrine) can have a Sacrifical Lamb at a cost of 5 \ud83d\udc51  each, except for Ecclesiastic Prisoners","glossary":[{"val":"PILGRIM","id":"kw_pilgrim"}]}],"options":[]},{"id":"rl_followersofsaintmethodius","source":"core","tags":{},"contextdata":{},"name":"Followers of St.Methodius","description":[{"tags":{"desc_type":"default"},"content":"The Patron of a War Pilgrimage of Saint Methodius Warband is always a Learned Saint."}],"options":[]},{"id":"rl_specialistforce","source":"core","tags":{},"contextdata":{"get_warband_ducats":{"mod":-200},"get_warband_glory":{"mod":11}},"name":"Specialist Force","description":[{"tags":{"desc_type":"default"},"content":"You have 500 \ud83d\udc51  and 11 \u263c to recruit a Papal State Intervention Force Warband for a campaign (\u25b6 see Starting a Warband). A Papal States Intervention Force gains 4 \u263c each time it calls for Reinforcements. In a campaign, their Threshold Value is reduced by 200 \ud83d\udc51 . When recruiting models as a latecomer for a campaign, or for a one-off game, after agreeing upon the size of the game, reduce the amount of \ud83d\udc51  a Papal States Intervention Force Warband has to spend by 200 \ud83d\udc51 , and increase the amount of \u263c they have to spend by 11 \u263c."}],"options":[]},{"id":"rl_swissguard","source":"core","tags":{},"contextdata":{"faction_add_upgrades":{"list":[{"show":false,"model_key":"rl_swissguard_lieu","models_id":["md_lieutenant"],"filters":[]},{"model_key":"rl_swissguard","models_id":["md_yeoman","md_yeoman_survivor","md_shocktrooper","md_mechanisedheavyinfantry","md_trenchcleric_lector","md_sniperpriest","md_combatengineer","md_combatmedic"],"filters":[]}]}},"name":"Swiss Guard","description":[{"tags":{"desc_type":"default"},"content":"The Lieutenant and up to 4 models in a Papal States Intervention Force Warband can have the NEGATE FEAR Keyword at no additional cost in \ud83d\udc51.","glossary":[{"val":"NEGATE FEAR","id":"kw_negate_kw_fear"}]}],"options":[]},{"id":"rl_supremeblessing","source":"core","tags":{},"contextdata":{"add_armoury_item":{"free_purchases":["rel_fc_papalstates_eq_supremepontiffcrucifix"]}},"name":"Supreme Blessing","description":[{"tags":{"desc_type":"default"},"content":"When you recruit a Papal States Intervention Force Warband, you must give the Supreme Pontiff \u2019s Crucifix to one model in the Warband. The Supreme Pontiff \u2019s Crucifix taken when the Warband is created is free and does not cost any \u263c (if it is lost then the replacement must be paid for normally)."},{"tags":{"desc_type":"equipment"},"content":"eq_supremepontiffcrucifix"}],"options":[]},{"id":"rl_farfromhome","source":"core","tags":{},"contextdata":{"faction_remove_upgrades":{"upgrades":["rel_md_yeoman_infiltrator"]},"remove_from_model":{"id":["md_yeoman","md_yeoman_survivor"],"abilities":["ab_trenchmole"]}},"name":"Far from Home","description":[{"tags":{"desc_type":"default"},"content":"A Papal States Intervention Force Warband cannot include Trench Moles."}],"options":[]},{"id":"rl_lector","source":"core","tags":{},"contextdata":{},"name":"Lector","description":[{"tags":{"desc_type":"default"},"content":"A Papal States Intervention Force Warband must include 1 Trench Cleric, but does not have to include a Lieutenant. A Trench Cleric in a Papal States Intervention Force Warband has the LEADER Keyword and the following additional ability.","glossary":[{"val":"LEADER","id":"kw_leader"}]}],"options":[]},{"id":"rl_fianna","source":"core","tags":{},"contextdata":{"faction_add_upgrades":{"list":[{"model_key":"rl_fianna","models_id":["md_shocktrooper"]}]}},"name":"Fianna","description":[{"tags":{"desc_type":"default"},"content":"The Fianna are famed warrior-hunters. Shock Troopers in an \xc9ire Rangers Warband can have the INFILTRATOR and SKIRMISHER Keywords for +10 \ud83d\udc51  per model.","glossary":[{"val":"SKIRMISHER","id":"kw_skirmisher"},{"val":"INFILTRATOR","id":"kw_infiltrator"}]}],"options":[]},{"id":"rl_carnyx","source":"core","tags":{},"contextdata":{},"name":"Carnyx","description":[{"tags":{"desc_type":"default"},"content":"One Musical Instrument in an \xc9ire Rangers Warband can be a Carnyx, and have the FEAR Keyword at no additional cost in \ud83d\udc51","glossary":[{"val":"FEAR","id":"kw_fear"}]}],"options":[]},{"id":"rl_hitandruntactics","source":"core","tags":{},"contextdata":{"add_to_model":{"id":"rl_hitandruntactics"}},"name":"Hit-and-Run Tactics","description":[{"tags":{"desc_type":"default"},"content":"Add -1 DICE to the roll for a Melee Attack that targets a model from an \xc9ire Rangers Warband that is making a Retreat.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"}]}],"options":[]},{"id":"rl_berserker","source":"core","tags":{},"contextdata":{"faction_add_upgrades":{"list":[{"model_key":"rl_berserker","models_id":["md_lieutenant_eire","md_shocktrooper"]}]}},"name":"Berserker","description":[{"tags":{"desc_type":"default"},"content":"The Lieutenant or one of the Fianna in an \xc9ire Rangers Warband can be upgraded to a Berserker for +15 \ud83d\udc51. A Berserker cannot have Armour (they can have Shields). In addition, a Berserker has the NEGATE FEAR Keyword, and BLOOD MARKERS are never placed on them under any circumstances.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"},{"val":"NEGATE FEAR","id":"kw_negate_kw_fear"}]}],"options":[]},{"id":"rl_stronginfaith","source":"core","tags":{},"contextdata":{},"name":"Strong in Faith","description":[{"tags":{"desc_type":"default"},"content":"\xc9ire is a bastion of the Church, with many famed warrior-priests who travel to war. An \xc9ire Rangers Warband can include 0-2 Trench Clerics. In addition, Trench Clerics in an \xc9ire Rangers Warband replace the Onward Christian Soldiers ability with the \\"Arise and Be Healed!\\" and \\"Away Serpents!\\" abilities."}],"options":[]},{"id":"rl_looseformation","source":"core","tags":{},"contextdata":{},"name":"Loose Formation","description":[{"tags":{"desc_type":"paragraph"},"content":"The Lieutenant in an \xc9ire Rangers Warband replaces their Hold Your Fire! ability with the SKIRMISHER Keyword at no change to their cost in \ud83d\udc51.","glossary":[{"val":"SKIRMISHER","id":"kw_skirmisher"}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"FIRETEAM: ","subcontent":[{"tags":{"desc_type":"default"},"content":"This model is part of a FIRETEAM made up of two models. All models that are part of the same FIRETEAM can be activated at the same time without the opponent getting their turn in between and can take their ACTIONS in any order they wish, switching between the two models. Note that if the Activation of either member of the FIRETEAM forcefully ends (due to a failed RISKY ACTION for example), it ends both Activations. Allies cannot be part of a FIRETEAM.","glossary":[{"val":"FIRETEAM","id":"kw_fireteam"}]}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Concentrated Attack: ","subcontent":[{"tags":{"desc_type":"default"},"content":"If a model in the FIRETEAM makes any kind of Attack ACTION (ranged or melee) against an opponent, where the other member of their FIRETEAM has already hit it with an attack ACTION during the same activation, the cost of a Bloodbath is reduced to three BLOOD MARKERS against this opponent, whether the model is standing or Down.","glossary":[{"val":"FIRETEAM","id":"kw_fireteam"},{"val":"ACTION","id":"kw_action"},{"val":"BLOOD MARKERS","id":"kw_bloodmarker"}]}]}]}],"options":[]},{"id":"rl_followersofsaintpatrick","source":"core","tags":{},"contextdata":{},"name":"Followers of Saint Patrick","description":[{"tags":{"desc_type":"default"},"content":"The Patron of an \xc9ire Rangers Warband is always a Learned Saint."}],"options":[]},{"id":"rl_lightinfantry","source":"core","tags":{},"contextdata":{},"name":"Light Infantry","description":[{"tags":{"desc_type":"paragraph"},"content":"The following restrictions apply to an \xc9ire Rangers Warband:"},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"It can only include 1 Mechanized Heavy Infantry model but can have up to 4 Combat Engineers and the Limit on Satchel Charges is changed to 4."},{"tags":{"desc_type":"default"},"content":"It cannot include more than 3 models that have a Great Sword/Axe. In addition, Mechanized Heavy Infantry models cannot have a Great Sword/Axe."},{"tags":{"desc_type":"default"},"content":"With the exception of Great Swords/Axes, only the Mechanized Heavy Infantry model can have Ranged Weapons and Melee Weapons with the HEAVY Keyword. Combat Engineers can have Satchel Charges."},{"tags":{"desc_type":"default"},"content":"Only Mechanized Heavy Infantry can have Reinforced Armour or Machine Armour."}]}],"options":[]},{"id":"rl_expertfireteams","source":"core","tags":{},"contextdata":{"add_fireteam_warband":{"type":"ft_antioch","count":3}},"name":"Expert Fireteams","description":[{"tags":{"desc_type":"paragraph"},"content":"A Stosstruppen of the Free State of Prussia Warband can include up to 3 Fireteams instead of only 2.","glossary":[{"val":"FIRETEAM","id":"kw_fireteam"}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"FIRETEAM: ","subcontent":[{"tags":{"desc_type":"default"},"content":"This model is part of a FIRETEAM made up of two models. All models that are part of the same FIRETEAM can be activated at the same time without the opponent getting their turn in between and can take their ACTIONS in any order they wish, switching between the two models. Note that if the Activation of either member of the FIRETEAM forcefully ends (due to a failed RISKY ACTION for example), it ends both Activations. Allies cannot be part of a FIRETEAM.","glossary":[{"val":"FIRETEAM","id":"kw_fireteam"}]}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Concentrated Attack: ","subcontent":[{"tags":{"desc_type":"default"},"content":"If a model in the FIRETEAM makes any kind of Attack ACTION (ranged or melee) against an opponent, where the other member of their FIRETEAM has already hit it with an attack ACTION during the same activation, the cost of a Bloodbath is reduced to three BLOOD MARKERS against this opponent, whether the model is standing or Down.","glossary":[{"val":"FIRETEAM","id":"kw_fireteam"},{"val":"ACTION","id":"kw_action"},{"val":"BLOOD MARKERS","id":"kw_bloodmarker"}]}]}]}],"options":[]},{"id":"rl_mastersofthegrenade","source":"core","tags":{},"contextdata":{"add_to_model":{"id":"rl_mastersofthegrenade"},"equipment_modifier":{"equipment_type":[{"res_type":"category","value":"grenade"}],"modifier_type":[{"type":"range","value":4}]}},"name":"Masters of the Grenade","description":[{"tags":{"desc_type":"default"},"content":"Add 4\\" to the Range of all Grenades used by models from a Stosstruppen of the Free State of Prussia Warband.","glossary":[{"val":"Grenades","id":"kw_grenade"}]}],"options":[]},{"id":"rl_feldkaplane","source":"core","tags":{},"contextdata":{},"name":"Feldkaplane","description":[{"tags":{"desc_type":"default"},"content":"Trench Clerics in a Stosstruppen of the Free State of Prussia Warband can have 1 dose of Holy Smoke."}],"options":[]},{"id":"rl_forwardpositions","source":"core","tags":{},"contextdata":{"faction_add_upgrades":{"list":[{"model_key":"rl_forwardpositions","models_id":["md_shocktrooper"]}]}},"name":"Forward Positions","description":[{"tags":{"desc_type":"default"},"content":"Up to 2 Shock Troopers in a Stosstruppen of the Free State of Prussia Warband can have the INFILTRATOR Keyword at a cost of +10 \ud83d\udc51  each.","glossary":[{"val":"INFILTRATOR","id":"kw_infiltrator"}]}],"options":[]},{"id":"rl_rapidassault","source":"core","tags":{},"contextdata":{"faction_add_upgrades":{"list":[{"model_key":"rl_rapidassault","models_id":["md_shocktrooper","md_lieutenant"]}]}},"name":"Athleticism","description":[{"tags":{"desc_type":"default"},"content":"The Lieutenant and Shock Troopers in a Stosstruppen of the Free State of Prussia Warband can have the Rapid Assault ability at a cost of +5 \ud83d\udc51  each. Add +1 DICE to the Risky Success Roll when a model with the Rapid Assault ability takes a Dash ACTION.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"},{"val":"ACTIONS","id":"kw_action"}]}],"options":[]},{"id":"rl_specialisedequipment","source":"core","tags":{},"contextdata":{},"name":"Specialised Equipment","description":[{"tags":{"desc_type":"default"},"content":"Submachine Guns in a Stosstruppen of the Free State of Prussia Warband have a Limit of 4, and Automatic Shotguns and Automatic Pistols do not have the ELITE only stipulation. However, Machine Guns in a Stosstruppen of the Free State of Prussia Warband have a Limit of 1, and models cannot have Grenade Launchers or Martyrdom Pills.","glossary":[{"val":"ELITE","id":"kw_elite"},{"val":"Limit","id":"kw_limit"}]}],"options":[]},{"id":"rl_annointedammunition","source":"core","tags":{},"contextdata":{},"name":"Annointed Ammunition","description":[{"tags":{"desc_type":"default"},"content":"Models in an Eire Ranger Warband can have Armour-Piercing Bullets at a cost of 5 \ud83d\udc51  each. The Armour-Piercing Bullets have the LIMIT: 2 stipulation.","glossary":[{"val":"LIMIT","id":"kw_limit"}]}],"options":[]},{"id":"rl_troopselection","source":"core","tags":{},"contextdata":{"faction_remove_upgrades":{"upgrades":["rel_md_yeoman_infiltrator"]},"remove_from_model":{"id":["md_yeoman","md_yeoman_survivor"],"abilities":["ab_trenchmole"]}},"name":"Troop Selection","description":[{"tags":{"desc_type":"default"},"content":"A Stosstruppen of the Free State of Prussia Warband must include 2-8 Shock Troopers and cannot include Trench Moles. In addition, it cannot have more than 1 Sniper Priest or 1 Mechanized Heavy Infantry model."}],"options":[]},{"id":"rl_lightlyarmoured","source":"core","tags":{},"contextdata":{},"name":"Lightly Armoured","description":[{"tags":{"desc_type":"default"},"content":"Only the Lieutenant and Mechanized Heavy Infantry models in a this Warband can have Reinforced Armour or Machine Armour."}],"options":[]},{"id":"rl_lightmelee","source":"core","tags":{},"contextdata":{"remove_from_model":{"id":["md_shocktrooper"],"abilities":["ab_assaultdrill"]}},"name":"Light Melee","description":[{"tags":{"desc_type":"default"},"content":"Shock Troopers in a Stosstruppen of the Free State of Prussia Warband do not have the Assault Drill ability. They still cost 45 \ud83d\udc51."}],"options":[]},{"id":"rl_rampantcharge","source":"core","tags":{},"contextdata":{"add_to_model":{"id":"rl_rampantcharge"},"add_ignore_mods":{"modifiers":["defended_obstacle"]}},"name":"Rampant Charge","description":[{"tags":{"desc_type":"default"},"content":"Models in a Kingdom of Alba Assault Detachment Warband have the IGNORE DEFENDED OBSTACLE Keyword."}],"options":[]},{"id":"rl_meleefocused_alba","source":"core","tags":{},"contextdata":{},"name":"Melee Focused","description":[{"tags":{"desc_type":"default"},"content":"Mechanized Heavy Infantry in a Kingdom of Alba Assault Detachment Warband have a Melee Characteristic of +1 DICE and a Ranged Characteristic of +0 DICE.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"},{"val":"+0 DICE","id":"kw_plusdice"}]}],"options":[]},{"id":"rl_celticmachinearmour","source":"core","tags":{},"contextdata":{"add_to_model":{"id":"rl_celticmachinearmour","required":[{"category":"id","value":["md_mechanisedheavyinfantry_alba","md_lieutenant"]}]},"faction_add_upgrades":{"list":[{"model_key":"rl_celticmachinearmour","models_id":["md_mechanisedheavyinfantry_alba"]}]}},"name":"Celtic Machine Armour","description":[{"tags":{"desc_type":"default"},"content":"Models in a Kingdom of Alba Assault Detachment Warband with Machine Armour have a Charge Bonus of D6\\" (it is not reduced to D3\\" by Machine Armour)."}],"options":[]},{"id":"rl_highlandstrength","source":"core","tags":{},"contextdata":{},"name":"Highland Strength","description":[{"tags":{"desc_type":"default"},"content":"The Lieutenant and any Shock Troopers in a Kingdom of Alba Assault Detachment Warband have the STRONG Keyword at no additional cost in \ud83d\udc51.","glossary":[{"val":"STRONG","id":"kw_strong"}]}],"options":[]},{"id":"rl_strainedsupply","source":"core","tags":{},"contextdata":{},"name":"Strained Supply","description":[{"tags":{"desc_type":"default"},"content":"Automatic Shotguns, Grenade Launchers, Machine Guns, Sniper Rifles, and Submachine Guns in a Kingdom of Alba Detatchment Warband have a LIMIT of 1.","glossary":[{"val":"LIMIT","id":"kw_limit"}]}],"options":[]},{"id":"rl_bagpipes","source":"core","tags":{},"contextdata":{},"name":"Bagpipes","description":[{"tags":{"desc_type":"default"},"content":"One Musical Instrument in a Kingdom of Alba Assault Detachment Warband can be a set of Bagpipes at no additional cost in \ud83d\udc51. Friendly models within 8\\" of a model that has a set of Bagpipes have the NEGATE FEAR Keyword.","glossary":[{"val":"NEGATE FEAR","id":"kw_negate_kw_fear"}]}],"options":[]},{"id":"rl_brave","source":"core","tags":{},"contextdata":{"add_to_warband":{}},"name":"Brave","description":[{"tags":{"desc_type":"default"},"content":"Add +1 DICE to the Success Rolls for a Morale Check for a Kingdom of Alba Assault Detachment Warband.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"}]}],"options":[]},{"id":"rl_claymoresmiths","source":"core","tags":{},"contextdata":{},"name":"Claymore Smiths","description":[{"tags":{"desc_type":"default"},"content":"Great Swords/Axes cost 7 \ud83d\udc51  instead of 12 for models from a Kingdom of Alba Assault Detachment Warband."}],"options":[]},{"id":"rl_coldsteel","source":"core","tags":{},"contextdata":{"purchase_modifier_equipment":{"mod":[{"cost":0,"discount":0.5,"requirements":[{"category":"melee"},{"limit":1,"req_mod":">"}]}]}},"name":"Cold Steel","description":[{"tags":{"desc_type":"default"},"content":"Halve the cost of a Melee Weapon the first time that is purchased for a Kingdom of Alba Assault Detachment Warband. For example, the first Sword/Axe would purchased for a Warband would cost 2 \ud83d\udc51  while any further Swords/Axes would cost 4 \ud83d\udc51  each."}],"options":[]},{"id":"rl_dumdumammunition","source":"core","tags":{},"contextdata":{},"name":"Dum-Dum Ammunition","description":[{"tags":{"desc_type":"default"},"content":"Models in a Kingdom of Alba Assault Detachment Warband can have Dum-Dum Bullets at a cost of 5 \ud83d\udc51  each. The Dum-Dum Bullets have the Limit: 3 stipulation."}],"options":[]},{"id":"rl_chewa","source":"core","tags":{},"contextdata":{"faction_add_upgrades":{"list":[{"model_key":"rl_chewa","models_id":["md_shocktrooper"],"filters":[{"type":"keyword","value":"kw_elite","truth":true}]}]}},"name":"Warrior Nobles","description":[{"tags":{"desc_type":"default"},"content":"The Chewa are a traditional warrior-elite. Shock Troopers and models with the ELITE Keyword in an Expeditionary Forces of Abyssinia Warband can have the Chewa ability for +5 \ud83d\udc51  each."}],"options":[]},{"id":"rl_faithofethiopia","source":"core","tags":{},"contextdata":{},"name":"Faith of Ethiopia","description":[{"tags":{"desc_type":"default"},"content":"The sect of the Sniper Priests does not operate in the Solomonic Dynasty. An Expeditionary Forces of Abyssinia Warband cannot include Sniper Priests."}],"options":[]},{"id":"rl_vanguardforces","source":"core","tags":{},"contextdata":{"faction_add_upgrades":{"list":[{"model_key":"rl_flankingforces","models_id":["md_yeoman","md_yeoman_survivor"]}]},"faction_remove_upgrades":{"upgrades":["rel_md_yeoman_infiltrator"]},"remove_from_model":{"id":["md_yeoman","md_yeoman_survivor"],"abilities":["ab_trenchmole"]}},"name":"Vanguard Forces","description":[{"tags":{"desc_type":"default"},"content":"An Expeditionary Forces of Abyssinia Warband cannot include Trench Moles. Instead, up to 4 Yeomen in an Expeditionary Forces of Abyssinia Warband can have the Flanking ability for +5 \ud83d\udc51  each. When a model with this ability is deployed for the first time in a game, it can be deployed normally in its own deployment zone or in contact with any edge of the battlefield and at least 8\\" away from any enemy models. Models with this ability are deployed before models with the INFILTRATOR Keyword, but after all other models. If a scenario has a special rule that says that models with the INFILTRATOR Keyword must deploy normally, then models with this ability must also deploy normally.","glossary":[{"val":"INFILTRATORS","id":"kw_infiltrator"}]}],"options":[]},{"id":"rl_chieftanpanoply","source":"core","tags":{},"contextdata":{"faction_remove_upgrades":{"upgrades":["rel_md_mechanisedheavyinfantry_machinearmour"]}},"name":"Chieftan Panoply","description":[{"tags":{"desc_type":"default"},"content":"Mechanized Heavy Infantry in an Expeditionary Forces of Abyssinia Warband cannot have Machine Armour."}],"options":[]},{"id":"rl_shortrangemarksmanship","source":"core","tags":{},"contextdata":{"add_to_model":{"id":"rl_shortrangemarksmanship","required":[{"category":"id","value":["md_yeoman","md_yeoman_survivor","md_lieutenant"]}]}},"name":"Short-Range Marksmanship","description":[{"tags":{"desc_type":"default"},"content":"Add +1 DICE to the Success Rolls for Ranged Attacks made at Short Range by the Lieutenant and any Yeomen in an Expeditionary Forces of Abyssinia Warband, unless the attacking Weapon is a Grenade or has the HEAVY Keyword.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"},{"val":"Grenade","id":"kw_grenade"},{"val":"HEAVY","id":"kw_heavy"}]}],"options":[]},{"id":"rl_abyssianhealers","source":"core","tags":{},"contextdata":{},"name":"Abyssian Healers","description":[{"tags":{"desc_type":"default"},"content":"An Expeditionary Forces of Abyssinia Warband can include 0-2 Combat Medics and Misericordia have the Limit: 2 stipulation instead of Limit: 1."}],"options":[]},{"id":"rl_holywarriors","source":"core","tags":{},"contextdata":{},"name":"Holy Warriors","description":[{"tags":{"desc_type":"default"},"content":"An Expeditionary Forces of Abyssinia Warband can include 0-1 Trench Cleric and 0-2 Holy Warriors. Use the Trench Clerics Warband Entry for Holy Warriors. In addition to the normal rules for a Trench Cleric, a Holy Warrior has the \\"Arise and Be Healed!\\" and \\"Blessed Psalm\\" abilities."}],"options":[]},{"id":"rl_weaponsofmobilewarfare","source":"core","tags":{},"contextdata":{"warband_equipment_limit":{"ignore":[{"type":"id","value":"eq_satchelcharge"}],"maximum":[{"category":"ranged","res_type":"keyword","value":"kw_heavy","limit":3}]}},"name":"Weapons of Mobile Warfare","description":[{"tags":{"desc_type":"default"},"content":"An Expeditionary Forces of Abyssinia Warband can have a maximum of 3 Ranged Weapons with the HEAVY Keyword, not counting Satchel Charges.","glossary":[{"val":"HEAVY","id":"kw_heavy"}]}],"options":[]},{"id":"rl_infectionmarkers","source":"core","tags":{},"contextdata":{},"name":"Infection Markers","description":[{"tags":{"desc_type":"paragraph"},"content":"Some Cult of the Black Grail Weapons have the INFECTION MARKERS Keyword. These Weapons cause INFECTION MARKERS (instead of BLOOD MARKERS) to be placed next to the target.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"},{"val":"INFECTION MARKERS","id":"kw_infectionmarker"}]},{"tags":{"desc_type":"paragraph"},"content":"An INFECTION MARKER works in a similar way to a BLOOD MARKER, except that they grow and multiply over time if left untreated.","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"},{"val":"INFECTION MARKER","id":"kw_infectionmarker"}]},{"tags":{"desc_type":"paragraph"},"content":"INFECTION MARKERS are placed next to a model in the same way as a BLOOD MARKER. A model may have up to six INFECTION MARKERS and up to six BLOOD MARKERS at the same time. We recommend you use different coloured dice (the more disgusting the better!) to represent INFECTION MARKERS.","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"},{"val":"INFECTION MARKERS","id":"kw_infectionmarker"}]},{"tags":{"desc_type":"paragraph"},"content":"An INFECTION MARKER can be used in the same way as a BLOOD MARKER; for example, it can be spent to modify Success Rolls and Injury Rolls, and/ or to convert an Injury Roll to a Bloodbath Roll. Additionally, you can combine BLOOD MARKERS and INFECTION MARKERS to affect the same roll or to cause a Bloodbath.","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"},{"val":"INFECTION MARKER","id":"kw_infectionmarker"}]},{"tags":{"desc_type":"paragraph"},"content":"Rules that allow a BLOOD MARKER to be removed from a model cannot be used to remove an INFECTION MARKER unless specifically noted otherwise.","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"},{"val":"INFECTION MARKER","id":"kw_infectionmarker"}]},{"tags":{"desc_type":"paragraph"},"content":"If there are one or more INFECTION MARKERS next to a model when the model is Activated, place 1 more INFECTION MARKER next to the model before it carries out any Actions.","glossary":[{"val":"INFECTION MARKER","id":"kw_infectionmarker"}]}],"options":[]},{"id":"rl_theorderofthefly","source":"core","tags":{},"contextdata":{},"name":"The Order of the Fly","description":[{"tags":{"desc_type":"paragraph"},"content":"When your warband is created, you must choose whether it will be led by a Lord of Tumours or a Plague Knight."},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Lord of Tumours: "},{"tags":{"desc_type":"default"},"content":"Your warband must include a Lord of Tumours when it is created. Your warband may include up to one Lord of Tumours and up to two Plague Knights."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Plague Knight: "},{"tags":{"desc_type":"default"},"content":"Your warband must include a Plague Knight when it is created and may include up to three. ","glossary":[{"val":"ACTION","id":"kw_action"}]}]}]}]}],"options":[]},{"id":"rl_grailmorale","source":"core","tags":{},"contextdata":{},"name":"Morale","description":[{"tags":{"desc_type":"default"},"content":"Fighting against the Cult of the Black Grail is a terrifying prospect. Your opponent must add -1 DICE to all Morale Checks unless their Warband is of either the Court of the Seven-Headed Serpent or the Cult of the Black Grail.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"}]}],"options":[]},{"id":"rl_theexecutor","source":"core","tags":{},"contextdata":{},"name":"The Executor","description":[{"tags":{"desc_type":"default"},"content":"A Dirge of the Great Hegemon Warband must include 1 Executor. The Executor uses the Plague Knight Warband Entry, except that it has a Ranged Characteristic of +1 DICE and the TOUGH Keyword, and has a cost of 80 \ud83d\udc51. The Warband can still include 0-2 Plague Knights.","glossary":[{"val":"TOUGH","id":"kw_tough"},{"val":"+1 DICE","id":"kw_plusdice"}]}],"options":[]},{"id":"rl_thefallen","source":"core","tags":{},"contextdata":{},"name":"The Fallen","description":[{"tags":{"desc_type":"default"},"content":"A Dirge of the Great Hegemon Warband cannot include a Lord of Tumours or an Amalgam."}],"options":[]},{"id":"rl_thelost","source":"core","tags":{},"contextdata":{},"name":"The Lost","description":[{"tags":{"desc_type":"default"},"content":"A Dirge of the Great Hegemon Warband Warband can only include 0-2 Hounds of the Cult of the Black Grail and can only include 0-2 Heralds of Beelzebub."}],"options":[]},{"id":"rl_thebereaved","source":"core","tags":{},"contextdata":{},"name":"The Bereaved","description":[{"tags":{"desc_type":"default"},"content":"The Grail Thralls or Fly Thralls in a Dirge of the Great Hegemon Warband are called the Bereaved. They have a Ranged Characteristic of +0 DICE and a cost of 30 \ud83d\udc51, and can have Ranged Weapons, Grenades,a Musical Instrument or a Troop Flag from the Cult of the Black Grail Armoury.","glossary":[{"val":"+0 DICE","id":"kw_plusdice"}]}],"options":[]},{"id":"rl_dishonoured","source":"core","tags":{},"contextdata":{},"name":"Dishonoured","description":[{"tags":{"desc_type":"default"},"content":"Models in a Dirge of the Great Hegemon Warband cannot have Beelzebub\u2019s Axe or a Black Grail Shield."}],"options":[]},{"id":"rl_hegemonslastblessing","source":"core","tags":{},"contextdata":{},"name":"Hegemon\'s Last Blessing","description":[{"tags":{"desc_type":"default"},"content":"Putrid Shotguns in this Warband have a Limit of 3, and Viscera Cannon have a Limit of 3 and do not have the ELITE only stipulation.","glossary":[{"val":"Limit","id":"kw_limit"},{"val":"ELITE","id":"kw_elite"}]}],"options":[]},{"id":"rl_hegemonswill","source":"core","tags":{},"contextdata":{"add_to_model":{"id":"rl_hegemonswill","required":[{"category":"id","value":["md_plagueknight_executor","md_plagueknight"]}]}},"name":"Hegemon\'s Will","description":[{"tags":{"desc_type":"paragraph"},"content":"Using the remnants of the lingering power of a fallen Hegemon, a Plague Knight of the Warband can directly command a nearby Bereaved. An Executor or Plague Knight in a Dirge of the Great Hegemon Warband can take a Command Bereaved ACTION. If it does so, you can remove any number of INFECTION MARKERS from enemy models. For each INFECTION MARKER you remove, you can then carry out one of the following Commands with a Bereaved (Grail Thrall or Fly Thrall) that is within 18\\" of the model taking the Command Bereaved ACTION. A Bereaved cannot be given more than 1 Command each Turn, but carrying out a Command does not stop it from also being Activated in the same Turn (before or after the Command was issued).","glossary":[{"val":"INFECTION MARKER","id":"kw_infectionmarker"},{"val":"ACTION","id":"kw_action"}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Move Command: "},{"tags":{"desc_type":"default"},"content":"The Bereaved carries out a Move (it cannot Charge or Retreat)."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Shoot Command: "},{"tags":{"desc_type":"default"},"content":"The Bereaved carries out a Ranged Attack."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Charge Command: "},{"tags":{"desc_type":"default"},"content":"The Bereaved carries out a charge move."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Fight Command: "},{"tags":{"desc_type":"default"},"content":"The Bereaved carries out a Melee Attack."}]}]}]}],"options":[]},{"id":"rl_deadlysin_wrath","source":"core","tags":{"court_sin":true},"contextdata":{"faction_add_upgrades":{"list":[{"model_key":"rl_sin_wrath","filters":[{"type":"keyword","value":"kw_elite","truth":true}]}]},"remove_from_model":{"abilities":["ab_goetics_praetor"],"id":["md_praetor"]},"true_add_to_model":{"list":[{"id":"ab_demonicaura_wrath","required":[{"category":"id","value":["md_desecratedsaint"]}]},{"id":"ab_goetics_praetor_wrath","required":[{"category":"id","value":["md_praetor"]}]}]}},"name":"Wrath","description":[{"tags":{"desc_type":"paragraph"},"content":"Desecrated Saints gain the Aura of Wrath ability. Your warband gains the GOETIC powers Charge of Hatred, Lesser Mark of Cain, and Blind Rage. In addition, your Praetor can only take one GOETIC power or spell.","glossary":[{"val":"GOETIC","id":"kw_goetic"}]}],"options":[]},{"id":"rl_deadlysin_envy","source":"core","tags":{"court_sin":true},"contextdata":{"faction_add_upgrades":{"list":[{"model_key":"rl_sin_envy_all","filters":[{"type":"keyword","value":"kw_elite","truth":true}]},{"model_key":"rl_sin_envy_captains","models_id":["md_sorcerer","md_praetor"]}]},"true_add_to_model":{"list":[{"id":"ab_demonicaura_envy","required":[{"category":"id","value":["md_desecratedsaint"]}]}]}},"name":"Envy","description":[{"tags":{"desc_type":"paragraph"},"content":"Desecrated Saints gain the Aura of Envy ability. Your warband gains the GOETIC powers Envious Eyes, Coveted Position, and Whats Yours is Mine.","glossary":[{"val":"GOETIC","id":"kw_goetic"}]}],"options":[]},{"id":"rl_deadlysin_lust","source":"core","tags":{"court_sin":true},"contextdata":{"faction_add_upgrades":{"list":[{"model_key":"rl_sin_lust_all","filters":[{"type":"keyword","value":"kw_elite","truth":true}]},{"model_key":"rl_sin_lust_captains","models_id":["md_sorcerer","md_praetor"]}]},"true_add_to_model":{"list":[{"id":"ab_demonicaura_lust","required":[{"category":"id","value":["md_desecratedsaint"]}]}]}},"name":"Lust","description":[{"tags":{"desc_type":"paragraph"},"content":"Desecrated Saints gain the Aura of Lust ability. Your warband gains the GOETIC powers Forbidden Pleasures, Exquisite Pain, and Call of Flesh.","glossary":[{"val":"GOETIC","id":"kw_goetic"}]}],"options":[]},{"id":"rl_deadlysin_pride","source":"core","tags":{"court_sin":true},"contextdata":{"faction_add_upgrades":{"list":[{"model_key":"rl_sin_pride_all","filters":[{"type":"keyword","value":"kw_elite","truth":true}]},{"model_key":"rl_sin_pride_captains","models_id":["md_sorcerer","md_praetor"]}]},"true_add_to_model":{"list":[{"id":"ab_demonicaura_pride","required":[{"category":"id","value":["md_desecratedsaint"]}]}]}},"name":"Pride","description":[{"tags":{"desc_type":"paragraph"},"content":"Desecrated Saints gain the Aura of Pride ability. Your warband gains the GOETIC powers Proud Defiance, Too Proud to Fall, and Light of Samael.","glossary":[{"val":"GOETIC","id":"kw_goetic"}]}],"options":[]},{"id":"rl_deadlysin_sloth","source":"core","tags":{"court_sin":true},"contextdata":{"faction_add_upgrades":{"list":[{"model_key":"rl_sin_sloth_all","filters":[{"type":"keyword","value":"kw_elite","truth":true}]}]},"true_add_to_model":{"list":[{"id":"ab_demonicaura_sloth","required":[{"category":"id","value":["md_desecratedsaint"]}]}]}},"name":"Sloth","description":[{"tags":{"desc_type":"paragraph"},"content":"Desecrated Saints gain the Aura of Sloth ability. Your warband gains the GOETIC powers Morphean Mind, Charm of Acedia, and Daemonium Meridianum.","glossary":[{"val":"GOETIC","id":"kw_goetic"}]}],"options":[]},{"id":"rl_deadlysin_gluttony","source":"core","tags":{"court_sin":true},"contextdata":{"faction_add_upgrades":{"list":[{"model_key":"rl_sin_gluttony_all","filters":[{"type":"keyword","value":"kw_elite","truth":true}]},{"model_key":"rl_sin_gluttony_captains","models_id":["md_sorcerer","md_praetor"]}]},"true_add_to_model":{"list":[{"id":"ab_demonicaura_gluttony","required":[{"category":"id","value":["md_desecratedsaint"]}]}]}},"name":"Gluttony","description":[{"tags":{"desc_type":"paragraph"},"content":"Desecrated Saints gain the Aura of Famine ability. Your warband gains the GOETIC powers Belly of the Beast, Uncaring Gluttony, and Eater of the Flesh.","glossary":[{"val":"GOETIC","id":"kw_goetic"}]}],"options":[]},{"id":"rl_deadlysin_greed","source":"core","tags":{"court_sin":true},"contextdata":{"faction_add_upgrades":{"list":[{"model_key":"rl_sin_greed_all","filters":[{"type":"keyword","value":"kw_elite","truth":true}]}]},"add_patron":{"list":["pt_mammon"]},"true_add_to_model":{"list":[{"id":"ab_demonicaura_greed","required":[{"category":"id","value":["md_desecratedsaint"]}]}]}},"name":"Greed","description":[{"tags":{"desc_type":"paragraph"},"content":"Desecrated Saints gain the Aura of Greed ability. Your warband gains the GOETIC powers Body of Gold, Black Heart, and Universal Greed. In addition, warbands of the sin of Greed can take Mammon as their patron.","glossary":[{"val":"GOETIC","id":"kw_goetic"}]}],"options":[]},{"id":"rl_noblesofthecourt","source":"core","tags":{},"contextdata":{},"name":"Nobles of the Court","description":[{"tags":{"desc_type":"default"},"content":"Your warband must include a Praetor OR a Sorcerer as your leader when it is created. If you select a Praetor as your leader you may include up to one Sorcerer in your warband and vice versa."}],"options":[]},{"id":"rl_goeticpowers","source":"core","tags":{},"contextdata":{},"name":"Goetic Powers","description":[{"tags":{"desc_type":"default"},"content":"ELITE models in a Court of the Seven-Headed Serpent Warband can have Goetic Powers. The number of Goetic Powers a model can have is shown on their Warband Entry. All of the Goetic Powers that are available are described in the Goetic Powers List below, or directly after the Warband Entry for a model that uses them. Goetic Powers are divided into Goetic Abilities and Goetic Spells.","glossary":[{"val":"ELITE","id":"kw_elite"}]}],"options":[]},{"id":"rl_goeticabilities","source":"core","tags":{},"contextdata":{},"name":"Goetic Abilities","description":[{"tags":{"desc_type":"default"},"content":"Goetic Abilities are used in the same way as an Ability from the model\u2019s Warband Entry."}],"options":[]},{"id":"rl_goeticspells","source":"core","tags":{},"contextdata":{"faction_add_upgrades":{"list":[{"model_key":"rl_goeticpowersandspells_inferno","models_id":["md_sorcerer"]},{"model_key":"rl_goeticpowersandspells_slavemaster","filters":[{"type":"keyword","value":"kw_elite","truth":true}]}]}},"name":"Goetic Powers and Spells","description":[{"tags":{"desc_type":"paragraph"},"content":"Goetic spells must be cast in order for them to be used. The description for the Spell will say how and when it can be cast. In addition, Goetic Spells have a cost that must be paid in BLOOD MARKERS to cast the spell (the cost is included in the title of the spell). Note that you do not have to take a Success Roll for a model in order to cast a spell.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"}]},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"A model cannot cast the same spell more than once per Activation."},{"tags":{"desc_type":"default"},"content":"To cast a Goetic Spell, you must remove a number of BLOOD MARKERS from models equal to the spell\u2019s cost. You can remove the BLOOD MARKERS from any models (friend or foe) that do not have the BLACK GRAIL or DEMONIC Keywords. The models can be anywhere on the battlefield and do not have to be in the spell caster\u2019s Line of Sight, and the spell cost can be paid by removing BLOOD MARKERS from more than one model if you wish.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"},{"val":"BLACK GRAIL","id":"kw_blackgrail"},{"val":"DEMONIC","id":"kw_demonic"}]},{"tags":{"desc_type":"default"},"content":"If the cost of a Goetic Spell is a range of numbers, you must choose how many BLOOD MARKERS you will pay before the spell is cast. For example, if a Goetic Spell had (Cost 1-3), you must pay a cost of 1, 2 or 3 BLOOD MARKERS before you cast the spell.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"}]},{"tags":{"desc_type":"default"},"content":"Some Goetic Spells can only be cast if a model takes a Cast Spell ACTION. When it does so, you must pay the spell cost as described above, and you can then cast the spell with the model. You can use the Cast Spell ACTION more than once per Activation, as long as you do not cast the same spell more than once.","glossary":[{"val":"ACTION","id":"kw_action"}]},{"tags":{"desc_type":"default"},"content":"Note that you do not have to take a Success Roll for a model in order to cast a spell."},{"tags":{"desc_type":"default"},"content":"A model that is casting a spell is called the spellcaster."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"sub-ability"},"content":"Seven Deadly Sins","subcontent":[{"tags":{"desc_type":"default"},"content":"Many of the warriors of the Court have access to a selection of devastating Spells and other Powers as detailed in the list below which can be purchased at the indicated cost when the model is initially purchased. Depending on the type of model and which Deadly Sin the warband is dedicated to, the selection available to you may vary. All such limitations are clearly marked below."}]}]}],"options":[]},{"id":"rl_wearandtear","source":"westfailia","tags":{},"contextdata":{},"name":"Wear and Tear","description":[{"tags":{"desc_type":"default"},"content":"A Red Brigade Warband starts each game with 1 BLOOD MARKER for each 200 ducats of the total Cost of the Warband (including Battlekit, upgrades that are paid for in ducats, and any discounts they receive to their Cost). The opposing player distributes the BLOOD MARKERS between the models in the Red Brigade Warband after deployment, but cannot give a model 2 BLOOD MARKERS unless all other models in the Warband have at least 1 BLOOD MARKER each.","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"}]}],"options":[]},{"id":"rl_noretreat","source":"westfailia","tags":{},"contextdata":{"add_to_model":{"id":"rl_noretreat"}},"name":"No Retreat","description":[{"tags":{"desc_type":"default"},"content":"A model in a Red Brigade Warband cannot take a Retreat ACTION unless a special rule forces them to do so.","glossary":[{"val":"ACTION","id":"kw_action"}]}],"options":[]},{"id":"rl_gloryhounds","source":"westfailia","tags":{},"contextdata":{"faction_remove_upgrades":{"upgrades":["rel_md_up_trenchdog_fireteam"]},"faction_add_upgrades":{"list":[{"model_key":"rl_trenchdogs","models_id":["md_trenchdog","md_trenchdog_guarddog","md_trenchdog_mercydog","md_trenchdog_attackdog"]}]},"remove_from_model":{"id":["md_trenchdog_mercydog"],"abilities":["ab_mercydog"]},"true_add_to_model":{"list":[{"id":"ab_brigadedog","required":[{"category":"id","value":["md_trenchdog","md_trenchdog_guarddog","md_trenchdog_mercydog","md_trenchdog_attackdog"]}]},{"id":"ab_mercydogbrigade","required":[{"category":"id","value":["md_trenchdog_mercydog"]}]}]},"add_to_model":{"id":"rl_gloryhounds","required":[{"category":"id","value":["md_trenchdog","md_trenchdog_guarddog","md_trenchdog_mercydog","md_trenchdog_attackdog"]}]}},"name":"Glory Hounds","description":[{"tags":{"desc_type":"default"},"content":"Soldiers of New Antioch love heroic stories and improbable tall tales. A Red Brigade Warband can include Trench Dogs of the Red Brigade. In addition, any Trench Dogs purchased as Glory Items in a Campaign are treated as being Trench Dogs of the Red Brigade at no additional cost in Glory. However, the number of Trench Dogs (including Trench Dogs purchased as Glory Items in a Campaign) in a Red Brigade Warband cannot exceed the number of other models in the Warband. If this happens due to models being killed in action during a campaign, you cannot include any more Trench Dogs until this condition is met once more. In addition, the \xf6rst two Glorious Deeds each battle performed by a Trench Dog that is part of a Red Brigade Warband earns 2 Glory instead of 1 Glory."}],"options":[]},{"id":"rl_rememberthefallen","source":"westfailia","tags":{},"contextdata":{"extra_step":{"stage":3,"id":"stage_rememberthefallen"}},"name":"Remember the Fallen","description":[{"tags":{"desc_type":"default"},"content":"A Red Brigade Warband can skip both the Reinforcement and Exploration Steps in the Campaign Phase in order to recover all the Battlekit of their models (excluding Mercenaries) who were killed in action in the previous battle. Do not remove the Battlekit from models who died in the previous battle from your Warband Roster, instead add it to your armoury. This allows you to take Battlekit that would normally only be purchasable for speci\xf6c Warband Entries and give it to remaining models that are eligible to equip Battlekit of that type. For example, you can recover a suit of Machine Armour from a fallen Mechanized Heavy Infantry and give it to a surviving Yeoman, but you could not give it to a Combat Engineer because you cannot remove their Engineer Body Armour. If recovering a piece of Battlekit would cause you to exceed that Battlekit\u2019s Limit Stipulation, you must sell it in the next Quartermaster Step."}],"options":[]},{"id":"rl_furyofsainternest","source":"westfailia","tags":{},"contextdata":{"faction_add_upgrades":{"list":[{"model_key":"rl_furyofsainternest","models_id":["md_lieutenant"]}]}},"name":"Fury of Saint Ernest","description":[{"tags":{"desc_type":"default"},"content":"It is the tradition of Brigade officers to practice the two-pistol fighting style of Saint Earnest. The Lieutenant in a Red Brigade Warband can have the Gunslinger Skill at a cost of 5 ducats. In addition, models in a Red Brigade Warband can have Molotov Cocktails at a cost of 5 ducats each and cannot have a Troop Flag."}],"options":[]},{"id":"rl_displeasureofthechurch","source":"westfailia","tags":{},"contextdata":{},"name":"Displeasure of the Church","description":[{"tags":{"desc_type":"default"},"content":" Only few members of the clergy are willing to serve in the Red Brigade. A Red Brigade Warband can include either up to 1 Trench Cleric and up to 1 Sniper Priest, or up to 2 Sniper Priests and no Trench Clerics."}],"options":[]},{"id":"rl_butcherknights","source":"creature_caster","tags":{},"contextdata":{},"name":"Butcher Knights","description":[{"tags":{"desc_type":"paragraph"},"content":"Plague Knights in a Great Hunger Warband have the Ravenous Infection Ability (see below) at no additional cost in \ud83d\udc51, and can only be given one of the following Plague Knight Ranks instead of the ones listed in the Black Grail Special Rule:"},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Butcher King (10 \ud83d\udc51): "},{"tags":{"desc_type":"default"},"content":"At the end of a battle, if this Plague Knight is not Out of Action and it has taken at least one enemy model Out of Action with a Melee Attack, gain 1\u263c","glossary":[{"val":"ACTION","id":"kw_action"}]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Knight Companion of the Feast: "},{"tags":{"desc_type":"default"},"content":" Add +1 DICE to Risky Success Roll for a Ravenous Infection ACTION (see below) if the model taking the ACTION is this Plague Knight or is a friendly model within 3\u201d of this Plague Knight.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"+1 DICE","id":"kw_plusdice"}]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Knight of the Twin Cleavers: "},{"tags":{"desc_type":"default"},"content":"This Plague Knight has the IGNORE OFF-HAND Keyword, and its Melee Attacks have the SHRAPNEL Keyword.","glossary":[{"val":"IGNORE OFF-HAND","id":"kw_ignoremodifier"},{"val":"SHRAPNEL","id":"kw_shrapnel"}]}]}]}]}],"options":[]},{"id":"rl_cradleoffilth","source":"creature_caster","tags":{},"contextdata":{},"name":"Cradle of Filth","description":[{"tags":{"desc_type":"default"},"content":"The Grail Thralls or Fly Thralls in a Great Hunger Warband are called The Ravenous. They have a Melee Characteristic of +0 DICE, their Melee Attacks gain the CRITICAL Keyword, they have the Ravenous Infection Ability, a cost of 35 \ud83d\udc51 each and can have the Grasping Maw and Unending Starvation Battlekit from the Great Hunger Armoury.","glossary":[{"val":"+0 DICE","id":"kw_plusdice"},{"val":"CRITICAL","id":"kw_critical"}]}],"options":[]},{"id":"rl_ravenousinfection","source":"creature_caster","tags":{},"contextdata":{},"name":"Ravenous Infection","description":[{"tags":{"desc_type":"default"},"content":"A Plague Knight, Ravenous, or Cradle Thrall (see above) can take a Ravenous Infection ACTION. If they do so, take a Risky Success Roll for the model. If the roll is a Failure, the model\u2019s Activation ends immediately. If the roll is a Success or a Critical Success, you can place 1 INFECTION MARKER next to any other model within 1\u201d of the model taking the Ravenous Infection ACTION. Then, the model taking the Ravenous Infection ACTION\u2019s Activation ends immediately.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"Risky Success","id":"kw_riskyaction"},{"val":"INFECTION MARKER","id":"kw_infectionmarker"}]}],"options":[]},{"id":"rl_dessicatedhusks","source":"creature_caster","tags":{},"contextdata":{},"name":"Desiccated Husks","description":[{"tags":{"desc_type":"default"},"content":"A Great Hunger Warband can include 0-2 Desiccated Husks. Desiccated Husks use the Corpse Guard Warband Entry, but replace the Bodyguard Ability with a Melee Characteristic of +2 DICE and their Melee Attacks gain the CRITICAL Keyword at no additional cost in \ud83d\udc51.","glossary":[{"val":"+2 DICE","id":"kw_plusdice"},{"val":"CRITICAL","id":"kw_critical"}]}],"options":[]},{"id":"rl_greathunger_equipmentrestrictions","source":"creature_caster","tags":{},"contextdata":{},"name":"Excruciating Hunger","description":[{"tags":{"desc_type":"paragraph"},"content":"Models in a Great Hunger Warband cannot have Beelzebub\u2019s Axe, Black Grail Shields, Bolt-Action Rifles, Blunderbusses, Compound Eyes Helmets, Corruption Belchers, Gas Grenades, Infested Rifles, Machine Guns, Musical Instruments, Muskets, Pistols, Troop Standards or Viscera Cannons. In addition, Grail Hounds in a Great Hunger Warband can have the Grasping Maw Battlekit from the Great Hunger Armoury. "}],"options":[]},{"id":"rl_spawnofgluttony","source":"creature_caster","tags":{},"contextdata":{},"name":"Spawn of Gluttony","description":[{"tags":{"desc_type":"default"},"content":"A Great Hunger Warband must include either 1 Matagot Hag or 1 Lord of Tumours (but not both), and can include 0-2 Plague Knights. It cannot include Corpse Guard, Heralds of Beelzebub or an Amalgam. In addition, Plague Knights must be mounted on 32mm or 40mm bases, and the Ravenous must be mounted on 25mm or 32mm bases.","glossary":[]}],"options":[]},{"id":"rl_arcanaputrescere","source":"creature_caster","tags":{},"contextdata":{"faction_add_upgrades":{"list":[{"model_key":"rl_arcanaputrescere","models_id":["md_lordoftumors"]}]},"true_add_to_model":{"list":[{"id":"ab_arcanaputrescere_one","required":[{"category":"id","value":["md_lordoftumors"]}]}]}},"name":"Arcana Putrescere","description":[{"tags":{"desc_type":"paragraph"},"content":"Some models in a Great Hunger Warband can have Arcana Putrescere Powers. A Matagot Hag can have up to 3 Arcana Putrescere Powers, a Lord of Tumours can have 1 Arcana Putrescere Power, and Gregori Gula can have 1 Arcana Putrescere Power each. All of the Arcana Putrescere Powers that are available are described in the Arcana Putrescere Powers List below","glossary":[{"val":"Putrescere","id":"kw_putrescere"}]},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Arcana Putrescere Powers are divided into Arcana Purtrescere Abilities and Arcana Putrescere Spells."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Arcana Abilities:"}]},{"tags":{"desc_type":"paragraph"},"content":"Arcana Putrescere Abilities are used in the same way as an Ability from the model\u2019s Warband Entry."},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Arcana Putrescere Spells"}]},{"tags":{"desc_type":"paragraph"},"content":"Arcana Putrescere Spells must be cast in order for them to be used. The description description for the Spell will say how and when it can be cast. In addition, Arcana Putrescere Spells have a cost that must be paid in INFECTION MARKERS to cast the Spell (the cost is included in the title of the spell). Note that you do not have to take a Success Roll for a model in order to cast a spell.","glossary":[{"val":"INFECTION MARKERS","id":"kw_infectionmarker"}]},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"To pay the cost of an Arcana Putrescere Spell, you must remove a number of INFECTION MARKERS from models within 12\u201d of the Spellcaster equal to the spell\u2019s Cost. You can remove the INFECTION MARKERS from any models (friend or foe) that do not have the ARTIFICIAL Keyword. The models can be anywhere on the battlefield and do not have to be in the spellcaster\u2019s Line of Sight, and the spell cost can be paid by removing INFECTION MARKERS from more than one model if you wish.","glossary":[{"val":"INFECTION MARKERS","id":"kw_infectionmarker"},{"val":"ARTIFICIAL","id":"kw_artificial"}]},{"tags":{"desc_type":"default"},"content":"If the cost of an Arcana Putrescere Spell\u2019s Cost is a range of numbers, you must choose how many INFECTION MARKERS you will pay before the spell is cast. For example, if an Arcana Putrescere Spell had (Cost 1-3), you must pay a cost of 1, 2 or 3 INFECTION MARKERS before you cast the spell.","glossary":[{"val":"INFECTION MARKERS","id":"kw_infectionmarker"}]},{"tags":{"desc_type":"default"},"content":"Some Arcana Putrescere Spells can only be cast if a model takes a Cast Spell ACTION. When it does so, you must pay the spell cost as described above, and you can then take the Cast Spell ACTION with the model. Note that a model cannot take more than one Cast Spell ACTION per Activation (as it cannot use an ACTION more than once per Activation).","glossary":[{"val":"ACTION","id":"kw_action"}]},{"tags":{"desc_type":"default"},"content":"A model that is casting a spell is called the spellcaster.","glossary":[{"val":"INFECTION MARKERS","id":"kw_infectionmarker"}]}]}],"options":[]}]'),b=JSON.parse('[{"id":"rel_md_up_azebskirmisher","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["md_azeb","md_azeb_mv_acolyte"],"upgrade_id":"up_skirmisher","cost":5,"cost_type":0,"restricted_upgrades":[],"warband_limit":0,"required_upgrades":[]},{"id":"rel_md_up_infiltrator10","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["md_azeb_mv_acolyte"],"upgrade_id":"up_infiltrator","cost":10,"cost_type":0,"restricted_upgrades":[],"warband_limit":3,"required_upgrades":[]},{"id":"rel_md_up_meleeboost5","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["md_azeb_mv_kavass"],"upgrade_id":"up_meleemight","cost":5,"cost_type":0,"restricted_upgrades":["up_skirmisher"],"warband_limit":3,"required_upgrades":[]},{"id":"rel_md_up_skirmisher_wisdom","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["md_azeb_mv_kavass"],"upgrade_id":"up_skirmisher","cost":5,"cost_type":0,"restricted_upgrades":["up_meleemight"],"warband_limit":0,"required_upgrades":[]},{"id":"rel_md_up_fierceandbrave5","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["md_lionofjabir"],"upgrade_id":"up_fierceandbrave","cost":5,"cost_type":0,"restricted_upgrades":[],"warband_limit":0,"required_upgrades":[]},{"id":"rel_factionrule_artofassassination_hallucinogendisguise","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_artofassassination"],"upgrade_id":"up_hallucinogendisguise","cost":20,"cost_type":0,"restricted_upgrades":["up_secretpaths","up_mirageoftime","up_thunderboltofalamut"],"warband_limit":1,"required_upgrades":[]},{"id":"rel_factionrule_artofassassination_thunderboltofalamut","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_artofassassination"],"upgrade_id":"up_thunderboltofalamut","cost":20,"cost_type":0,"restricted_upgrades":["up_secretpaths","up_mirageoftime","up_hallucinogendisguise"],"warband_limit":1,"required_upgrades":[]},{"id":"rel_factionrule_artofassassination_mirageoftime","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_artofassassination"],"upgrade_id":"up_mirageoftime","cost":15,"cost_type":0,"restricted_upgrades":["up_secretpaths","up_thunderboltofalamut","up_hallucinogendisguise"],"warband_limit":1,"required_upgrades":[]},{"id":"rel_factionrule_artofassassination_secretpaths","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_artofassassination"],"upgrade_id":"up_secretpaths","cost":10,"cost_type":0,"restricted_upgrades":["up_mirageoftime","up_thunderboltofalamut","up_hallucinogendisguise"],"warband_limit":1,"required_upgrades":[]},{"id":"rel_md_up_alchemicalformulae_wings","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["md_takwincreation"],"upgrade_id":"up_alchemicalformulae_wings","cost":30,"cost_type":0,"restricted_upgrades":["rel_md_up_alchemicalformulae_humanhands","rel_md_up_alchemicalformulae_massive_size"],"warband_limit":0,"required_upgrades":[]},{"id":"rel_md_up_alchemicalformulae_elementalresistance","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["md_takwincreation","md_takwincreation_golem"],"upgrade_id":"up_alchemicalformulae_elementalresistance","cost":40,"cost_type":0,"restricted_upgrades":[],"warband_limit":0,"required_upgrades":[]},{"id":"rel_md_up_alchemicalformulae_massive_size","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["md_takwincreation","md_takwincreation_golem"],"upgrade_id":"up_alchemicalformulae_massive_size","cost":30,"cost_type":0,"restricted_upgrades":["rel_md_up_alchemicalformulae_wings"],"warband_limit":0,"required_upgrades":[]},{"id":"rel_md_up_alchemicalformulae_enslavedmind","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["md_takwincreation","md_takwincreation_golem"],"upgrade_id":"up_alchemicalformulae_enslavedmind","cost":10,"cost_type":0,"restricted_upgrades":[],"warband_limit":0,"required_upgrades":[]},{"id":"rel_md_up_alchemicalformulae_humanhands","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["md_takwincreation"],"upgrade_id":"up_alchemicalformulae_humanhands","cost":10,"cost_type":0,"restricted_upgrades":["rel_md_up_alchemicalformulae_wings"],"warband_limit":0,"required_upgrades":[]},{"id":"rel_md_up_alchemicalformulae_inhumanstrength","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["md_takwincreation","md_takwincreation_golem"],"upgrade_id":"up_alchemicalformulae_inhumanstrength","cost":15,"cost_type":0,"restricted_upgrades":[],"warband_limit":0,"required_upgrades":[]},{"id":"rel_md_up_alchemicalformulae_terrifyingappearance","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["md_takwincreation","md_takwincreation_golem"],"upgrade_id":"up_alchemicalformulae_terrifyingappearance","cost":10,"cost_type":0,"restricted_upgrades":[],"warband_limit":0,"required_upgrades":[]},{"id":"rel_md_up_alchemicalformulae_additionalarm","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["md_takwincreation","md_takwincreation_golem"],"upgrade_id":"up_alchemicalformulae_additionalarm","cost":15,"cost_type":0,"restricted_upgrades":[],"warband_limit":0,"required_upgrades":[]},{"id":"rel_md_up_alchemicalformulae_twoheads","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["md_takwincreation","md_takwincreation_golem"],"upgrade_id":"up_alchemicalformulae_twoheads","cost":5,"cost_type":0,"restricted_upgrades":[],"warband_limit":0,"required_upgrades":[]},{"id":"rel_md_up_alchemicalformulae_hypnoticeyes","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["md_takwincreation","md_takwincreation_golem"],"upgrade_id":"up_alchemicalformulae_hypnoticeyes","cost":15,"cost_type":0,"restricted_upgrades":["up_alchemicalformulae_hawkeyes"],"warband_limit":0,"required_upgrades":[]},{"id":"rel_md_up_alchemicalformulae_hawkeyes","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["md_takwincreation","md_takwincreation_golem"],"upgrade_id":"up_alchemicalformulae_hawkeyes","cost":10,"cost_type":0,"restricted_upgrades":["up_alchemicalformulae_hypnoticeyes"],"warband_limit":0,"required_upgrades":[]},{"id":"rel_md_up_alchemicalformulae_startlingspeed","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["md_takwincreation","md_takwincreation_golem"],"upgrade_id":"up_alchemicalformulae_startlingspeed","cost":10,"cost_type":0,"restricted_upgrades":[],"warband_limit":0,"required_upgrades":[]},{"id":"rel_md_up_alchemicalformulae_sealofsolomon","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["md_takwincreation","md_takwincreation_golem"],"upgrade_id":"up_alchemicalformulae_sealofsolomon","cost":10,"cost_type":0,"restricted_upgrades":[],"warband_limit":0,"required_upgrades":[]},{"id":"rel_md_up_alchemicalformulae_gargantuansize","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["md_takwincreation","md_takwincreation_golem"],"upgrade_id":"up_alchemicalformulae_gargantuansize","cost":20,"cost_type":0,"restricted_upgrades":["up_alchemicalformulae_wings"],"warband_limit":0,"required_upgrades":["up_alchemicalformulae_humanhands","up_alchemicalformulae_massive_size","up_alchemicalformulae_inhumanstrength"]},{"id":"rel_md_up_alchemicalformulae_regenerativetissue","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["md_takwincreation","md_takwincreation_golem"],"upgrade_id":"up_alchemicalformulae_regenerativetissue","cost":25,"cost_type":0,"restricted_upgrades":[],"warband_limit":0,"required_upgrades":[]},{"id":"rel_factionrule_secrets_up_secrets_medicine","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_secretsofthehouseofwisdom"],"upgrade_id":"up_secrets_medicine","cost":15,"cost_type":0,"restricted_upgrades":["up_secrets_cartographyandgeography","up_secrets_secretsoftakwin","up_secrets_chemistryandalchemy","up_secrets_philosophypoetrytheology"],"warband_limit":1,"required_upgrades":[]},{"id":"rel_factionrule_secrets_up_secrets_cartographyandgeography","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_secretsofthehouseofwisdom"],"upgrade_id":"up_secrets_cartographyandgeography","cost":20,"cost_type":0,"restricted_upgrades":["up_secrets_medicine","up_secrets_secretsoftakwin","up_secrets_chemistryandalchemy","up_secrets_philosophypoetrytheology"],"warband_limit":1,"required_upgrades":[]},{"id":"rel_factionrule_secrets_up_secrets_secretsoftakwin","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_secretsofthehouseofwisdom"],"upgrade_id":"up_secrets_secretsoftakwin","cost":20,"cost_type":0,"restricted_upgrades":["up_secrets_medicine","up_secrets_cartographyandgeography","up_secrets_chemistryandalchemy","up_secrets_philosophypoetrytheology"],"warband_limit":1,"required_upgrades":[]},{"id":"rel_factionrule_secrets_up_secrets_chemistryandalchemy","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_secretsofthehouseofwisdom"],"upgrade_id":"up_secrets_chemistryandalchemy","cost":25,"cost_type":0,"restricted_upgrades":["up_secrets_medicine","up_secrets_cartographyandgeography","up_secrets_secretsoftakwin","up_secrets_philosophypoetrytheology"],"warband_limit":1,"required_upgrades":[]},{"id":"rel_factionrule_secrets_up_secrets_philosophypoetrytheology","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_secretsofthehouseofwisdom"],"upgrade_id":"up_secrets_philosophypoetrytheology","cost":20,"cost_type":0,"restricted_upgrades":["up_secrets_medicine","up_secrets_cartographyandgeography","up_secrets_secretsoftakwin","up_secrets_chemistryandalchemy"],"warband_limit":1,"required_upgrades":[]},{"id":"rel_md_up_gunsblazing","source":"westfalia","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_furyofsainternest"],"upgrade_id":"up_gunsblazing","cost":5,"cost_type":0,"restricted_upgrades":[],"warband_limit":0,"required_upgrades":[]},{"id":"rel_md_up_trenchdog_fireteam","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["md_trenchdog","md_trenchdog_guarddog","md_trenchdog_mercydog","md_trenchdog_martyrdomdog","md_trenchdog_hellhound","md_trenchdog_attackdog"],"upgrade_id":"up_trenchdog_fireteam","cost":1,"cost_type":1,"restricted_upgrades":[],"warband_limit":0,"required_upgrades":[]},{"id":"rel_md_up_trenchdog_fireteam_brigade","source":"westfalia","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_trenchdogs"],"upgrade_id":"up_trenchdog_fireteam","cost":5,"cost_type":0,"restricted_upgrades":[],"warband_limit":2,"required_upgrades":[]},{"id":"rel_md_up_heretictrooper_hereticlegionnaire","source":"core","tags":{},"name":"","contextdata":{"faction_upgrade_count_special":{"match":[{"type":"model","value":"md_heretictrooper","modifier":"half"}]}},"options":[],"model_id_set":["md_heretictrooper"],"upgrade_id":"up_heretictrooper_hereticlegionnaire","cost":10,"cost_type":0,"restricted_upgrades":[],"warband_limit":1,"required_upgrades":[]},{"id":"rel_factionrule_unseenadvance_infiltrator","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_unseenadvance"],"upgrade_id":"up_infiltrator","cost":10,"cost_type":0,"restricted_upgrades":[],"warband_limit":3,"required_upgrades":[]},{"id":"rel_md_up_zealotstrength_castigator","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["md_castigator"],"upgrade_id":"up_zealotstrength","cost":5,"cost_type":0,"restricted_upgrades":[],"warband_limit":0,"required_upgrades":[]},{"id":"rel_md_up_resurrection","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["md_trenchpilgrim"],"upgrade_id":"up_resurrection","cost":45,"cost_type":0,"restricted_upgrades":[],"warband_limit":0,"required_upgrades":[]},{"id":"rel_md_up_zealotstrength_pilgrimbase","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["md_trenchpilgrim"],"upgrade_id":"up_zealotstrength","cost":5,"cost_type":0,"restricted_upgrades":[],"warband_limit":1,"required_upgrades":[]},{"id":"rel_md_up_zealotstrength_pilgrimsacredaffliction","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_zealotstrength"],"upgrade_id":"up_zealotstrength","cost":5,"cost_type":0,"restricted_upgrades":[],"warband_limit":3,"required_upgrades":[]},{"id":"rel_md_rl_wrathofgod","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_wrathofgod"],"upgrade_id":"up_wrathofgod","cost":15,"cost_type":0,"restricted_upgrades":[],"warband_limit":1,"required_upgrades":[]},{"id":"rel_md_yeoman_infiltrator","source":"core","tags":{},"name":"","contextdata":{"faction_upgrade_count_special":{"warband_limit":[{"size":1000,"value":3}]}},"options":[],"model_id_set":["md_yeoman","md_yeoman_survivor"],"upgrade_id":"up_infiltrator","cost":10,"cost_type":0,"restricted_upgrades":[],"warband_limit":2,"required_upgrades":[]},{"id":"rel_md_yeoman_vanguard","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_flankingforces"],"upgrade_id":"up_vanguard","cost":5,"cost_type":0,"restricted_upgrades":[],"warband_limit":4,"required_upgrades":[]},{"id":"rel_md_mechanisedheavyinfantry_machinearmour","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["md_mechanisedheavyinfantry"],"upgrade_id":"up_machinearmour","cost":10,"cost_type":0,"restricted_upgrades":[],"warband_limit":0,"required_upgrades":[]},{"id":"rel_md_mechanisedheavyinfantry_highlandmachinearmour","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_celticmachinearmour"],"upgrade_id":"up_highlandmachinearmour","cost":10,"cost_type":0,"restricted_upgrades":[],"warband_limit":0,"required_upgrades":[]},{"id":"rel_factionrule_swissguard","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_swissguard"],"upgrade_id":"up_swissguard","cost":0,"cost_type":0,"restricted_upgrades":[],"warband_limit":4,"required_upgrades":[]},{"id":"rel_factionrule_swissguard_lieutenant","source":"core","tags":{},"name":"Swiss Guard (Lieutenant)","contextdata":{},"options":[],"model_id_set":["rl_swissguard_lieu"],"upgrade_id":"up_swissguard","cost":0,"cost_type":0,"restricted_upgrades":[],"warband_limit":0,"required_upgrades":[]},{"id":"rel_factionrule_fianna","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_fianna"],"upgrade_id":"up_fianna","cost":10,"cost_type":0,"restricted_upgrades":[],"warband_limit":0,"required_upgrades":[]},{"id":"rel_factionrule_berserker","source":"core","tags":{},"name":"","contextdata":{"override_required_upgrade":{"filters":[{"type":"id","value":"md_lieutenant_eire"}]}},"options":[],"model_id_set":["rl_berserker"],"upgrade_id":"up_berserker","cost":15,"cost_type":0,"restricted_upgrades":[],"warband_limit":1,"required_upgrades":["up_fianna"]},{"id":"rel_factionrule_forwardpositions","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_forwardpositions"],"upgrade_id":"up_infiltrator","cost":10,"cost_type":0,"restricted_upgrades":[],"warband_limit":2,"required_upgrades":[]},{"id":"rel_factionrule_rapidassault","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_rapidassault"],"upgrade_id":"up_rapidassault","cost":5,"cost_type":0,"restricted_upgrades":[],"warband_limit":0,"required_upgrades":[]},{"id":"rel_factionrule_chewa","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_chewa"],"upgrade_id":"up_chewa","cost":5,"cost_type":0,"restricted_upgrades":[],"warband_limit":0,"required_upgrades":[]},{"id":"rel_md_plagueknight_up_plagueknightcompanionofthefly_base","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["md_plagueknight","md_plagueknight_executor"],"upgrade_id":"up_plagueknightcompanionofthefly_base","cost":5,"cost_type":0,"restricted_upgrades":["up_plagueknightrottencross","up_plagueknightalmoner","rel_md_plagueknight_up_plagueknightrankofbutcher"],"warband_limit":0,"required_upgrades":[]},{"id":"rel_md_plagueknight_up_plagueknightrottencross","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["md_plagueknight","md_plagueknight_executor"],"upgrade_id":"up_plagueknightrottencross","cost":5,"cost_type":0,"restricted_upgrades":["up_plagueknightcompanionofthefly_base","up_plagueknightalmoner","rel_md_plagueknight_up_plagueknightrankofbutcher"],"warband_limit":1,"required_upgrades":[]},{"id":"rel_md_plagueknight_up_plagueknightalmoner","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["md_plagueknight","md_plagueknight_executor"],"upgrade_id":"up_plagueknightalmoner","cost":10,"cost_type":0,"restricted_upgrades":["up_plagueknightcompanionofthefly_base","up_plagueknightrottencross","rel_md_plagueknight_up_plagueknightrankofbutcher"],"warband_limit":0,"required_upgrades":[]},{"id":"rel_md_plagueknight_up_plagueknightrankofbutcher_old","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":[],"upgrade_id":"up_plagueknightrankofbutcher","cost":5,"cost_type":0,"restricted_upgrades":["up_plagueknightrankofthefeast","up_plagueknightrankofferocity"],"warband_limit":0,"required_upgrades":[]},{"id":"rel_md_plagueknight_up_plagueknightrankofbutcher","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["md_plagueknight_butcherknight"],"upgrade_id":"up_plagueknightrankbutcherking","cost":10,"cost_type":0,"restricted_upgrades":["up_plagueknightrankofthefeast","up_plagueknightrankofferocity"],"warband_limit":0,"required_upgrades":[]},{"id":"rel_md_plagueknight_up_plagueknightrankofthefeast","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["md_plagueknight_butcherknight"],"upgrade_id":"up_plagueknightrankofthefeast","cost":5,"cost_type":0,"restricted_upgrades":["up_plagueknightrankbutcherking","up_plagueknightrankofferocity"],"warband_limit":0,"required_upgrades":[]},{"id":"rel_md_plagueknight_up_plagueknightrankofferocity","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["md_plagueknight_butcherknight"],"upgrade_id":"up_plagueknightrankofferocity","cost":5,"cost_type":0,"restricted_upgrades":["up_plagueknightrankbutcherking","up_plagueknightrankofthefeast"],"warband_limit":0,"required_upgrades":[]},{"id":"rel_md_houndsoftheblackgrail_up_infectioushound","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["md_houndsoftheblackgrail","md_houndsoftheblackgrail_prowler"],"upgrade_id":"up_infectioushound","cost":5,"cost_type":0,"restricted_upgrades":[],"warband_limit":0,"required_upgrades":[]},{"id":"rel_md_heraldofbeelzebub_up_maddeningbuzz","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["md_heraldofbeelzebub"],"upgrade_id":"up_maddeningbuzz","cost":10,"cost_type":0,"restricted_upgrades":[],"warband_limit":1,"required_upgrades":[]},{"id":"rel_rl_goeticpowersandspells_up_goetic_burninginferno","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_goeticpowersandspells_inferno"],"upgrade_id":"up_goetic_burninginferno","cost":15,"cost_type":0,"restricted_upgrades":[],"warband_limit":0,"required_upgrades":[]},{"id":"rel_rl_goeticpowersandspells_up_goetic_slavemaster","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_goeticpowersandspells_slavemaster"],"upgrade_id":"up_goetic_slavemaster","cost":10,"cost_type":0,"restricted_upgrades":[],"warband_limit":0,"required_upgrades":[]},{"id":"rel_rl_sin_wrath_up_goetic_wrath_chargeofhatred","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_sin_wrath"],"upgrade_id":"up_goetic_wrath_chargeofhatred","cost":10,"cost_type":0,"restricted_upgrades":[],"warband_limit":3,"required_upgrades":[]},{"id":"rel_rl_sin_wrath_up_goetic_wrath_lessermarkofcain","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_sin_wrath"],"upgrade_id":"up_goetic_wrath_lessermarkofcain","cost":20,"cost_type":0,"restricted_upgrades":[],"warband_limit":1,"required_upgrades":[]},{"id":"rel_rl_sin_wrath_up_goetic_wrath_blindrage","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_sin_wrath"],"upgrade_id":"up_goetic_wrath_blindrage","cost":10,"cost_type":0,"restricted_upgrades":[],"warband_limit":3,"required_upgrades":[]},{"id":"rel_rl_sin_envy_all_up_goetic_envy_whatisyoursismine","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_sin_envy_all"],"upgrade_id":"up_goetic_envy_whatisyoursismine","cost":10,"cost_type":0,"restricted_upgrades":[],"warband_limit":0,"required_upgrades":[]},{"id":"rel_rl_sin_envy_captains_up_goetic_envy_enviouseyes","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_sin_envy_captains"],"upgrade_id":"up_goetic_envy_enviouseyes","cost":5,"cost_type":0,"restricted_upgrades":[],"warband_limit":0,"required_upgrades":[]},{"id":"rel_rl_sin_envy_captains_up_goetic_envy_covetedposition","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_sin_envy_captains"],"upgrade_id":"up_goetic_envy_covetedposition","cost":10,"cost_type":0,"restricted_upgrades":[],"warband_limit":0,"required_upgrades":[]},{"id":"rel_rl_sin_lust_captains_up_goetic_lust_forbiddenpleasures","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_sin_lust_captains"],"upgrade_id":"up_goetic_lust_forbiddenpleasures","cost":10,"cost_type":0,"restricted_upgrades":[],"warband_limit":0,"required_upgrades":[]},{"id":"rel_rl_sin_lust_captains_up_goetic_lust_callofflesh","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_sin_lust_captains"],"upgrade_id":"up_goetic_lust_callofflesh","cost":15,"cost_type":0,"restricted_upgrades":[],"warband_limit":0,"required_upgrades":[]},{"id":"rel_rl_sin_lust_all_up_goetic_lust_exquisitepain","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_sin_lust_all"],"upgrade_id":"up_goetic_lust_exquisitepain","cost":15,"cost_type":0,"restricted_upgrades":[],"warband_limit":0,"required_upgrades":[]},{"id":"rel_rl_sin_pride_all_up_goetic_pride_prouddefiance","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_sin_pride_all"],"upgrade_id":"up_goetic_pride_prouddefiance","cost":15,"cost_type":0,"restricted_upgrades":[],"warband_limit":0,"required_upgrades":[]},{"id":"rel_rl_sin_pride_captains_up_goetic_pride_tooproudtofall","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_sin_pride_captains"],"upgrade_id":"up_goetic_pride_tooproudtofall","cost":10,"cost_type":0,"restricted_upgrades":[],"warband_limit":0,"required_upgrades":[]},{"id":"rel_rl_sin_pride_captains_up_goetic_pride_lightofsamael","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_sin_pride_captains"],"upgrade_id":"up_goetic_pride_lightofsamael","cost":15,"cost_type":0,"restricted_upgrades":[],"warband_limit":0,"required_upgrades":[]},{"id":"rel_rl_sin_sloth_all_up_goetic_sloth_morpheanmind","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_sin_sloth_all"],"upgrade_id":"up_goetic_sloth_morpheanmind","cost":15,"cost_type":0,"restricted_upgrades":[],"warband_limit":2,"required_upgrades":[]},{"id":"rel_rl_sin_sloth_all_up_goetic_sloth_charmofacedia","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_sin_sloth_all"],"upgrade_id":"up_goetic_sloth_charmofacedia","cost":15,"cost_type":0,"restricted_upgrades":[],"warband_limit":0,"required_upgrades":[]},{"id":"rel_rl_sin_sloth_all_up_goetic_sloth_daemoniummeridianum","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_sin_sloth_all"],"upgrade_id":"up_goetic_sloth_daemoniummeridianum","cost":20,"cost_type":0,"restricted_upgrades":[],"warband_limit":1,"required_upgrades":[]},{"id":"rel_rl_sin_gluttony_all_up_goetic_gluttony_bellyofthebeast","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_sin_gluttony_all"],"upgrade_id":"up_goetic_gluttony_bellyofthebeast","cost":5,"cost_type":0,"restricted_upgrades":[],"warband_limit":0,"required_upgrades":[]},{"id":"rel_rl_sin_gluttony_all_up_goetic_gluttony_uncaringgluttony","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_sin_gluttony_all"],"upgrade_id":"up_goetic_gluttony_uncaringgluttony","cost":10,"cost_type":0,"restricted_upgrades":[],"warband_limit":1,"required_upgrades":[]},{"id":"rel_rl_sin_gluttony_captains_up_goetic_gluttony_eateroftheflesh","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_sin_gluttony_captains"],"upgrade_id":"up_goetic_gluttony_eateroftheflesh","cost":10,"cost_type":0,"restricted_upgrades":[],"warband_limit":1,"required_upgrades":[]},{"id":"rel_rl_sin_greed_all_up_goetic_greed_bodyofgold","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_sin_greed_all"],"upgrade_id":"up_goetic_greed_bodyofgold","cost":15,"cost_type":0,"restricted_upgrades":[],"warband_limit":1,"required_upgrades":[]},{"id":"rel_rl_sin_greed_all_up_goetic_greed_blackheart","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_sin_greed_all"],"upgrade_id":"up_goetic_greed_blackheart","cost":5,"cost_type":0,"restricted_upgrades":[],"warband_limit":2,"required_upgrades":[]},{"id":"rel_rl_sin_greed_all_up_goetic_greed_universalgreed","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_sin_greed_all"],"upgrade_id":"up_goetic_greed_universalgreed","cost":15,"cost_type":0,"restricted_upgrades":[],"warband_limit":1,"required_upgrades":[]},{"id":"rel_up_putrescere_hunger","source":"creature_caster","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_arcanaputrescere","md_matagothag","md_gergorigula"],"upgrade_id":"up_putrescere_hunger","cost":20,"cost_type":0,"restricted_upgrades":[],"warband_limit":3,"required_upgrades":[]},{"id":"rel_up_putrescere_miasmaofpestilence","source":"creature_caster","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_arcanaputrescere","md_matagothag","md_gergorigula"],"upgrade_id":"up_putrescere_miasmaofpestilence","cost":20,"cost_type":0,"restricted_upgrades":[],"warband_limit":1,"required_upgrades":[]},{"id":"rel_up_putrescere_motherscall","source":"creature_caster","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["md_matagothag"],"upgrade_id":"up_putrescere_motherscall","cost":10,"cost_type":0,"restricted_upgrades":[],"warband_limit":0,"required_upgrades":[]},{"id":"rel_up_putrescere_rapturousfeast","source":"creature_caster","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_arcanaputrescere","md_matagothag","md_gergorigula"],"upgrade_id":"up_putrescere_rapturousfeast","cost":15,"cost_type":0,"restricted_upgrades":[],"warband_limit":1,"required_upgrades":[]},{"id":"rel_up_putrescere_virulentclot","source":"creature_caster","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_arcanaputrescere","md_matagothag","md_gergorigula"],"upgrade_id":"up_putrescere_virulentclot","cost":30,"cost_type":0,"restricted_upgrades":[],"warband_limit":1,"required_upgrades":[]},{"id":"rel_up_putrescere_vomitus","source":"creature_caster","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_arcanaputrescere","md_matagothag","md_gergorigula"],"upgrade_id":"up_putrescere_vomitus","cost":40,"cost_type":0,"restricted_upgrades":[],"warband_limit":1,"required_upgrades":[]},{"id":"rel_up_putrescere_vilechurning","source":"creature_caster","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["rl_arcanaputrescere","md_matagothag","md_gergorigula"],"upgrade_id":"up_putrescere_vilechurning","cost":20,"cost_type":0,"restricted_upgrades":[],"warband_limit":2,"required_upgrades":[]},{"id":"rel_up_unendingstarvation","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["md_lordoftumours","md_plagueknight_butcherknight","md_grailthrall_cradle_hunger","md_grailthrall_flythrall_cradle_hunger","md_grailthrall_hunger","md_grailthrall_flythrall_hunger"],"upgrade_id":"up_unendingstarvation","cost":5,"cost_type":0,"restricted_upgrades":[],"warband_limit":0,"required_upgrades":[]},{"id":"rel_md_yuzbasicaptain_jannisaryveteran","source":"core","tags":{},"name":"","contextdata":{},"options":[],"model_id_set":["md_yuzbasicaptain"],"upgrade_id":"up_jannisaryveteran","cost":10,"cost_type":0,"restricted_upgrades":[],"warband_limit":0,"required_upgrades":[]}]'),v=JSON.parse('[{"id":"rel_unarmed","source":"core","tags":{},"name":"Unarmed","contextdata":{},"options":[],"model_id":[],"mandatory_equipment":["eq_unarmed"],"removable":false},{"id":"rel_unarmed_nopenalty","source":"core","tags":{},"name":"Unarmed","contextdata":{},"options":[],"model_id":[],"mandatory_equipment":["eq_unarmed_nopenalty"],"removable":false},{"id":"rel_md_eq_sultanatesapper","source":"core","tags":{},"name":"Sultanate Sapper Equipment","contextdata":{},"options":[],"model_id":["md_sultanatesapper"],"mandatory_equipment":["eq_shovel"],"removable":false},{"id":"rel_md_eq_mercydog","source":"core","tags":{},"name":"Mercy Equipment","contextdata":{},"options":[],"model_id":["md_trenchdog_mercydog"],"mandatory_equipment":["eq_medikit"],"removable":false},{"id":"rel_md_eq_crimsoncommunicant","source":"core","tags":{},"name":"Crimson Communicant Equipment","contextdata":{},"options":[],"model_id":["md_crimsoncommunicant"],"mandatory_equipment":["eq_atonementbell"],"removable":false},{"id":"rel_md_eq_mamlukfarisbase","source":"core","tags":{},"name":"Mamluk Faris Equipment","contextdata":{},"options":[{"ref_id":"ot_mamlukequipmentpackages","name":"Mamluk Faris Loadouts","description":[],"category":"type","type":"text","strictness":"strict","predefined_options":[],"option_context":{"basic_option_default":{}},"data_search":{"searchtype":"complex","searchparam":{"type":"modelequipmentrelationship","request":{"operator":"or","terms":[{"item":"id","value":"rel_md_eq_mamlukpackage_1","equals":true,"strict":true},{"item":"id","value":"rel_md_eq_mamlukpackage_2","equals":true,"strict":true},{"item":"id","value":"rel_md_eq_mamlukpackage_3","equals":true,"strict":true}],"subparams":[]}}}}],"model_id":["md_mamlukfaris","md_mamlukfaris_mv_sipahi"],"mandatory_equipment":["eq_jezzail","eq_alchemicalammunition","eq_reinforcedarmour","eq_combathelmet"],"removable":false},{"id":"rel_md_eq_mamlukpackage_1","source":"core","tags":{},"name":"Polearm and Shield","contextdata":{},"options":[],"model_id":[],"mandatory_equipment":["eq_trenchpolearm","eq_trenchshield"],"removable":false},{"id":"rel_md_eq_mamlukpackage_2","source":"core","tags":{},"name":"Sword and Pistol","contextdata":{},"options":[],"model_id":[],"mandatory_equipment":["eq_swordaxe","eq_pistolrevolver"],"removable":false},{"id":"rel_md_eq_mamlukpackage_3","source":"core","tags":{},"name":"Two-Handed Sword","contextdata":{},"options":[],"model_id":[],"mandatory_equipment":["eq_mamlukgreatsword"],"removable":false},{"id":"rel_md_eq_scriptureguardian","source":"core","tags":{},"name":"Scripture Guardian Equipment","contextdata":{},"options":[],"model_id":["md_scriptureguardian"],"mandatory_equipment":["eq_combathelmet","eq_reinforcedarmour"],"removable":false},{"id":"rel_md_eq_annointedheavyinfantry","source":"core","tags":{},"name":"Annointed Heavy Infantry Equipment","contextdata":{},"options":[],"model_id":["md_annointedheavyinfantry"],"mandatory_equipment":["eq_infernalbrandmark","eq_reinforcedarmour"],"removable":false},{"id":"rel_md_eq_annointedheavyinfantry_trenchghost","source":"core","tags":{},"name":"Annointed Heavy Infantry Equipment","contextdata":{},"options":[],"model_id":["md_annointedheavyinfantry_trenchghost"],"mandatory_equipment":["eq_reinforcedarmour"],"removable":false},{"id":"rel_md_eq_warwolfassaultbeast","source":"core","tags":{},"name":"War Wolf Assault Beast Equipment","contextdata":{},"options":[],"model_id":["md_warwolfassaultbeast"],"mandatory_equipment":["eq_warwolfchainmaw","eq_warwolfshreddingclaws"],"removable":false},{"id":"rel_md_eq_artillerywtich","source":"core","tags":{},"name":"Artillery Witch Equipment","contextdata":{},"options":[],"model_id":["md_artillerywitch"],"mandatory_equipment":["eq_artillerywitchinfernalbomb"],"removable":false},{"id":"rel_md_eq_artillerywtich_mammon","source":"core","tags":{},"name":"Artillery Witches of Mammon Equipment","contextdata":{},"options":[],"model_id":["md_artillerywitch_gaswitch"],"mandatory_equipment":["eq_artillerywitchinfernalgasbomb"],"removable":false},{"id":"rel_md_eq_sineater","source":"core","tags":{},"name":"Sin Eater Equipment","contextdata":{},"options":[],"model_id":["md_sineater"],"mandatory_equipment":["eq_sineatertenderizermaul","eq_reinforcedarmour","eq_combathelmet"],"removable":false},{"id":"rel_md_eq_geoticwarlock","source":"core","tags":{},"name":"Goetic Warlock Equipment","contextdata":{},"options":[],"model_id":["md_goeticwarlock","md_goeticwarlock_mv_knightsofavarice"],"mandatory_equipment":["eq_swordaxe","eq_reinforcedarmour","eq_swordaxe"],"removable":false},{"id":"rel_md_eq_communicant","source":"core","tags":{},"name":"Communicant Equipment","contextdata":{},"options":[],"model_id":["md_communicant"],"mandatory_equipment":["eq_communicantcross"],"removable":false},{"id":"rel_md_eq_ecclesiasticprisoner","source":"core","tags":{},"name":"Ecclesiastic Prisoner Equipment","contextdata":{},"options":[],"model_id":["md_ecclesiasticprisoner"],"mandatory_equipment":["eq_ironcapriote"],"removable":false},{"id":"rel_md_eq_anchoriteshrine","source":"core","tags":{},"name":"Anchorite Shrine Equipment","contextdata":{},"options":[],"model_id":["md_anchoriteshrine"],"mandatory_equipment":["eq_catherinewheel","eq_bonebreakermace"],"removable":false},{"id":"rel_md_eq_anchoriteshrine_saintmethodius","source":"core","tags":{},"name":"Anchorite Shrine Equipment","contextdata":{},"options":[],"model_id":["md_anchoriteshrine_saintmethodius"],"mandatory_equipment":["eq_combathelmet","eq_bonebreakermace"],"removable":false},{"id":"rel_md_eq_sarcophagusmine","source":"core","tags":{},"name":"Sarcophagus Mine","contextdata":{},"options":[],"model_id":[],"mandatory_equipment":["eq_sarcophagusmine"],"removable":false},{"id":"rel_md_eq_anchoriteshrine_saintmethodius_wheel","source":"core","tags":{"methodius":true},"name":"Anchorite Shrine Equipment","contextdata":{},"options":[],"model_id":["md_anchoriteshrine_saintmethodius"],"mandatory_equipment":["eq_catherinewheel"],"removable":true,"salevalue":0,"saletype":1},{"id":"rel_md_eq_combatmedic","source":"core","tags":{},"name":"Combat Medic Equipment","contextdata":{},"options":[],"model_id":["md_combatmedic","md_combatmedic_mv_pilgrim"],"mandatory_equipment":["eq_gasmask","eq_standardarmour","eq_medikit","eq_misericordia"],"removable":false},{"id":"rel_md_eq_witchburner","source":"core","tags":{},"name":"Witchburner Equipment","contextdata":{},"options":[],"model_id":["md_witchburner"],"mandatory_equipment":["eq_combathelmet","eq_reinforcedarmour","eq_gavelofjustice"],"removable":false},{"id":"rel_md_eq_communicantantitankhunter","source":"core","tags":{},"name":"Communicant Anti-Tank Hunter Equipment","contextdata":{},"options":[],"model_id":["md_communicantantitankhunter"],"mandatory_equipment":["eq_trenchclub","eq_trenchclub","eq_combathelmet","eq_antimaterialrifle"],"removable":false},{"id":"rel_md_eq_mendelistammomonk","source":"core","tags":{},"name":"Mendelist Ammo Monk Equipment","contextdata":{},"options":[],"model_id":["md_mendelistammomonk"],"mandatory_equipment":["eq_gasmask"],"removable":false},{"id":"rel_md_eq_observer","source":"core","tags":{},"name":"Observer Equipment","contextdata":{},"options":[],"model_id":["md_observer"],"mandatory_equipment":["eq_standardarmour","eq_gasmask","eq_combathelmet","eq_trenchpolearm","eq_medikit"],"removable":false},{"id":"rel_md_eq_combatbiologist","source":"core","tags":{},"name":"Combat Biologist Equipment","contextdata":{},"options":[],"model_id":["md_combatbiologist"],"mandatory_equipment":["eq_standardarmour","eq_gasgrenades","eq_vivisector"],"removable":false},{"id":"rel_md_eq_yeoman","source":"core","tags":{},"name":"Yeoman Equipment","contextdata":{},"options":[],"model_id":["md_yeoman"],"mandatory_equipment":["eq_boltactionrifle"],"removable":true,"salevalue":5,"saletype":0},{"id":"rel_md_eq_combatengineer","source":"core","tags":{},"name":"Combat Engineer Equipment","contextdata":{},"options":[],"model_id":["md_combatengineer"],"mandatory_equipment":["eq_engineerbodyarmour","eq_shovel"],"removable":false},{"id":"rel_md_eq_mechanisedheavyinfantry_base","source":"core","tags":{},"name":"Mechanized Heavy Infantry Equipment","contextdata":{},"options":[],"model_id":["md_mechanisedheavyinfantry","md_mechanisedheavyinfantry_abyssianna","md_mechanisedheavyinfantry_alba"],"mandatory_equipment":["eq_reinforcedarmour"],"removable":false},{"id":"rel_md_eq_mechanisedheavyinfantry_advanced","source":"core","tags":{},"name":"Upgraded Mechanized Heavy Infantry Equipment","contextdata":{},"options":[],"model_id":[],"mandatory_equipment":["eq_machinearmour"],"removable":false},{"id":"rel_md_eq_mechanisedheavyinfantry_highland","source":"core","tags":{},"name":"Upgraded Celtic Mechanized Infantry Equipment","contextdata":{},"options":[],"model_id":[],"mandatory_equipment":["eq_highlandmachinearmour"],"removable":false},{"id":"rel_md_eq_beastofnomansland","source":"core","tags":{},"name":"Beast of No Man\'s Land Equipment","contextdata":{},"options":[],"model_id":["md_beastofnomansland"],"mandatory_equipment":["eq_beastofnomanslandclaws","eq_beastofnomanslandbite"],"removable":false},{"id":"rel_md_eq_thedragon","source":"core","tags":{},"name":"The Dragon\'s Equipment","contextdata":{},"options":[],"model_id":["md_thedragon"],"mandatory_equipment":["eq_thedragon_deadlyteethandclaws","eq_thedragon_firebreath","eq_thedragon_tailswipe"],"removable":false},{"id":"rel_md_eq_hunterofthelefthandpath","source":"core","tags":{},"name":"Hunter of the Left-Hand Path Equipment","contextdata":{},"options":[],"model_id":["md_hunterofthelefthandpath"],"mandatory_equipment":["eq_bowoflethe"],"removable":false},{"id":"rel_md_eq_hellknight","source":"core","tags":{},"name":"Hell Knight Equipment","contextdata":{},"options":[],"model_id":["md_hellknight"],"mandatory_equipment":["eq_infernalironarmour"],"removable":false},{"id":"rel_md_eq_pitlocust","source":"core","tags":{},"name":"Pit Locust Equipment","contextdata":{},"options":[],"model_id":["md_pitlocust"],"mandatory_equipment":["eq_reinforcedarmour"],"removable":false},{"id":"rel_md_trenchdog_martyrdomdog","source":"core","tags":{},"name":"Martyrdom Dog Equipment","contextdata":{},"options":[],"model_id":["md_trenchdog_martyrdomdog"],"mandatory_equipment":["eq_martyrdomdevice"],"removable":false}]'),w=JSON.parse('[{"id":"rel_fc_md_yuzbasicaptain","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_ironsultanate"],"model_id":"md_yuzbasicaptain","captain":true,"mercenary":false,"cost":70,"cost_type":0,"restricted_models":[],"warband_minimum":1,"warband_maximum":1},{"id":"rel_fc_md_sultanateassassin_mv_masterassassin","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_ironsultanate_fv_fidaiofalamut"],"model_id":"md_sultanateassassin_mv_masterassassin","captain":true,"mercenary":false,"cost":95,"cost_type":0,"restricted_models":[],"warband_minimum":1,"warband_maximum":1},{"id":"rel_fc_md_jabireanalchemist","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_defendersoftheironwall"],"model_id":"md_jabireanalchemist","captain":false,"mercenary":false,"cost":55,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_sultanateassassin_base","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_ironsultanate"],"model_id":"md_sultanateassassin","captain":false,"mercenary":false,"cost":85,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_sultanateassassin_fidai","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_ironsultanate_fv_fidaiofalamut"],"model_id":"md_sultanateassassin","captain":false,"mercenary":false,"cost":85,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":2},{"id":"rel_fc_md_azeb","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_ironsultanate","fc_ironsultanate_fv_defendersoftheironwall"],"model_id":"md_azeb","captain":false,"mercenary":false,"cost":25,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":-1},{"id":"rel_fc_md_azeb_explore","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":[],"model_id":"md_azeb","captain":false,"mercenary":false,"cost":25,"cost_type":0,"restricted_models":[],"warband_minimum":1,"warband_maximum":1},{"id":"rel_fc_md_assassinacolyte","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_ironsultanate_fv_fidaiofalamut"],"model_id":"md_azeb_mv_acolyte","captain":false,"mercenary":false,"cost":25,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":-1},{"id":"rel_fc_md_sultanatesapper","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_ironsultanate_fv_fidaiofalamut","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom"],"model_id":"md_sultanatesapper","captain":false,"mercenary":false,"cost":50,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":2},{"id":"rel_fc_md_sultanatesapper_defenders","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_ironsultanate_fv_defendersoftheironwall"],"model_id":"md_sultanatesapper","captain":false,"mercenary":false,"cost":50,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":4},{"id":"rel_fc_md_lionofjabir","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_ironsultanate"],"model_id":"md_lionofjabir","captain":false,"mercenary":false,"cost":60,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":2},{"id":"rel_fc_md_janissaries","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_ironsultanate"],"model_id":"md_janissaries","captain":false,"mercenary":false,"cost":55,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":6},{"id":"rel_fc_md_brazenbull","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_defendersoftheironwall"],"model_id":"md_brazenbull","captain":false,"mercenary":false,"cost":100,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_janissaries_mv_dervish","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_ironsultanate_fv_fidaiofalamut"],"model_id":"md_janissaries_mv_dervish","captain":false,"mercenary":false,"cost":55,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":4},{"id":"rel_fc_md_mamlukfaris","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce","fc_ironsultanate_fv_fidaiofalamut","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_defendersoftheironwall"],"model_id":"md_mamlukfaris","captain":false,"mercenary":true,"cost":4,"cost_type":1,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_jabireanalchemist_captain","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_ironsultanate_fv_houseofwisdom"],"model_id":"md_jabireanalchemist","captain":true,"mercenary":false,"cost":55,"cost_type":0,"restricted_models":[],"warband_minimum":1,"warband_maximum":1},{"id":"rel_fc_md_lionofjabir_wisdom","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_ironsultanate_fv_houseofwisdom"],"model_id":"md_lionofjabir","captain":false,"mercenary":false,"cost":60,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":3},{"id":"rel_fc_md_janissaries_mv_faris","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_ironsultanate_fv_houseofwisdom"],"model_id":"md_janissaries_mv_faris","captain":false,"mercenary":false,"cost":55,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":2},{"id":"rel_fc_md_kavass","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_ironsultanate_fv_houseofwisdom"],"model_id":"md_azeb_mv_kavass","captain":false,"mercenary":false,"cost":25,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":-1},{"id":"rel_fc_md_takwincreation","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{},"faction_model_count_special":{"match":[{"type":"model","value":"md_jabireanalchemist"}]}},"options":[],"faction_id":["fc_ironsultanate_fv_houseofwisdom"],"model_id":"md_takwincreation","captain":false,"mercenary":false,"cost":40,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":2},{"id":"rel_fc_md_takwincreation_golem","source":"core","tags":{},"name":"","contextdata":{},"options":[],"faction_id":[],"model_id":"md_takwincreation_golem","captain":false,"mercenary":false,"cost":40,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":-1},{"id":"rel_fc_md_yuzbasicaptain_mv_silahdar","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_ironsultanate_fv_defendersoftheironwall"],"model_id":"md_yuzbasicaptain_mv_silahdar","captain":true,"mercenary":false,"cost":70,"cost_type":0,"restricted_models":[],"warband_minimum":1,"warband_maximum":1},{"id":"rel_fc_md_mamlukfaris_mv_sipahi","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_ironsultanate_fv_defendersoftheironwall"],"model_id":"md_mamlukfaris_mv_sipahi","captain":false,"mercenary":false,"cost":110,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_janissaries_mv_officer","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_ironsultanate_fv_defendersoftheironwall"],"model_id":"md_janissaries_mv_officer","captain":false,"mercenary":false,"cost":55,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":2},{"id":"rel_fc_md_scriptureguardian","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_courtofthesevenheadedserpent","fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_thegreathunger","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion","fc_hereticlegion_fv_hereticnavalraidingparty","fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce","fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction","fc_ironsultanate_fv_fidaiofalamut","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_defendersoftheironwall"],"model_id":"md_scriptureguardian","captain":false,"mercenary":true,"cost":7,"cost_type":1,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_trenchdog","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":[],"model_id":"md_trenchdog","captain":false,"mercenary":true,"cost":1,"cost_type":1,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_trenchdog_guarddog","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":[],"model_id":"md_trenchdog_guarddog","captain":false,"mercenary":true,"cost":2,"cost_type":1,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_trenchdog_mercydog","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":[],"model_id":"md_trenchdog_mercydog","captain":false,"mercenary":true,"cost":2,"cost_type":1,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_trenchdog_martyrdomdog","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":[],"model_id":"md_trenchdog_martyrdomdog","captain":false,"mercenary":true,"cost":2,"cost_type":1,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_trenchdog_hellhound","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":[],"model_id":"md_trenchdog_hellhound","captain":false,"mercenary":true,"cost":2,"cost_type":1,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_hereticpriest","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_hereticlegion","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty"],"model_id":"md_hereticpriest","captain":true,"mercenary":false,"cost":80,"cost_type":0,"restricted_models":[],"warband_minimum":1,"warband_maximum":1},{"id":"rel_fc_md_hereticpriest_mammon","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_hereticlegion_fv_knightsofavarice"],"model_id":"md_hereticpriest_mammonpriest","captain":true,"mercenary":false,"cost":80,"cost_type":0,"restricted_models":[],"warband_minimum":1,"warband_maximum":1},{"id":"rel_fc_md_deathcommando","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_hereticlegion","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty"],"model_id":"md_deathcommando","captain":false,"mercenary":false,"cost":90,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_heretichorister","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion","fc_hereticlegion_fv_hereticnavalraidingparty"],"model_id":"md_heretichorister","captain":false,"mercenary":false,"cost":65,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_heretichorister_trenchghosts","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{},"faction_model_count_group":{"filter":[{"id":["md_heretichorister","md_heretichorister_barbedwirebanshee"]}],"number":1}},"options":[],"faction_id":["fc_hereticlegion_fv_trenchghosts"],"model_id":"md_heretichorister","captain":false,"mercenary":false,"cost":65,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_barbedwirebanshee_trenchghost","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{},"faction_model_count_group":{"filter":[{"id":["md_heretichorister","md_heretichorister_barbedwirebanshee"]}],"number":1}},"options":[],"faction_id":["fc_hereticlegion_fv_trenchghosts"],"model_id":"md_heretichorister_barbedwirebanshee","captain":false,"mercenary":false,"cost":65,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_heretictrooper","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty"],"model_id":"md_heretictrooper","captain":false,"mercenary":false,"cost":30,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":-1},{"id":"rel_fc_md_annointedheavyinfantry","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion"],"model_id":"md_annointedheavyinfantry","captain":false,"mercenary":false,"cost":95,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":5},{"id":"rel_fc_md_annointedheavyinfantry_trenchghost","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_hereticlegion_fv_trenchghosts"],"model_id":"md_annointedheavyinfantry_trenchghost","captain":false,"mercenary":false,"cost":95,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":5},{"id":"rel_fc_md_annointedheavyinfantry_navalraidingparty","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_hereticlegion_fv_hereticnavalraidingparty"],"model_id":"md_annointedheavyinfantry","captain":false,"mercenary":false,"cost":95,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":2},{"id":"rel_fc_md_warwolfassaultbeast","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion"],"model_id":"md_warwolfassaultbeast","captain":false,"mercenary":false,"cost":145,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_artillerywitch","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{},"faction_model_count_special":{"warband_limit":[{"worth":1000,"exclude":["md_artillerywitch"],"value":2}]}},"options":[],"faction_id":["fc_hereticlegion"],"model_id":"md_artillerywitch","captain":false,"mercenary":false,"cost":100,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_artillerywitch_mammon","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{},"faction_model_count_special":{"warband_limit":[{"size":1000,"value":2}]}},"options":[],"faction_id":["fc_hereticlegion_fv_knightsofavarice"],"model_id":"md_artillerywitch_gaswitch","captain":false,"mercenary":false,"cost":100,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_artillerywitch_navalraidingparty","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_hereticlegion_fv_hereticnavalraidingparty"],"model_id":"md_artillerywitch","captain":false,"mercenary":false,"cost":100,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_wretched","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion","fc_hereticlegion_fv_hereticnavalraidingparty","fc_hereticlegion_fv_trenchghosts"],"model_id":"md_wretched","captain":false,"mercenary":false,"cost":25,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":-1},{"id":"rel_fc_md_wretched_explore","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":[],"model_id":"md_wretched","captain":false,"mercenary":false,"cost":25,"cost_type":0,"restricted_models":[],"warband_minimum":1,"warband_maximum":1},{"id":"rel_fc_md_sineater","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_courtofthesevenheadedserpent","fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_thegreathunger","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion","fc_hereticlegion_fv_hereticnavalraidingparty"],"model_id":"md_sineater","captain":false,"mercenary":true,"cost":6,"cost_type":1,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_goeticwarlock","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_courtofthesevenheadedserpent","fc_hereticlegion","fc_hereticlegion_fv_hereticnavalraidingparty","fc_hereticlegion_fv_knightsofavarice"],"model_id":"md_goeticwarlock","captain":false,"mercenary":true,"cost":4,"cost_type":1,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_goeticwarlock_mammon","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_hereticlegion_fv_knightsofavarice"],"model_id":"md_goeticwarlock_mv_knightsofavarice","captain":false,"mercenary":false,"cost":110,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_warprophet","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_processionofthesacredaffliction"],"model_id":"md_warprophet","captain":true,"mercenary":false,"cost":80,"cost_type":0,"restricted_models":[],"warband_minimum":1,"warband_maximum":1},{"id":"rel_fc_md_warprophet_tenthplague","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_trenchpilgrim_fv_cavalcadeofthetenthplague"],"model_id":"md_warprophet_tenthplague","captain":true,"mercenary":false,"cost":80,"cost_type":0,"restricted_models":[],"warband_minimum":1,"warband_maximum":1},{"id":"rel_fc_md_castigator","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction"],"model_id":"md_castigator","captain":false,"mercenary":false,"cost":50,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_communicant","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_trenchpilgrim","fc_trenchpilgrim_fv_processionofthesacredaffliction"],"model_id":"md_communicant","captain":false,"mercenary":false,"cost":100,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_communicant_tenthplague","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_trenchpilgrim_fv_cavalcadeofthetenthplague"],"model_id":"md_communicant","captain":false,"mercenary":false,"cost":3,"cost_type":1,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_trenchpilgrim","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction"],"model_id":"md_trenchpilgrim","captain":false,"mercenary":false,"cost":30,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":-1},{"id":"rel_fc_md_ecclesiasticprisoner","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius"],"model_id":"md_ecclesiasticprisoner","captain":false,"mercenary":false,"cost":20,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":-1},{"id":"rel_fc_md_ecclesiasticprisoner_explore","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":[],"model_id":"md_ecclesiasticprisoner","captain":false,"mercenary":false,"cost":20,"cost_type":0,"restricted_models":[],"warband_minimum":1,"warband_maximum":1},{"id":"rel_fc_md_ecclesiasticprisoner_tenthplague","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_trenchpilgrim_fv_cavalcadeofthetenthplague"],"model_id":"md_ecclesiasticprisoner","captain":false,"mercenary":false,"cost":20,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":2},{"id":"rel_fc_md_ecclesiasticprisoner_sacredaffliction","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_trenchpilgrim_fv_processionofthesacredaffliction"],"model_id":"md_ecclesiasticprisoner_sacredaffliction","captain":false,"mercenary":false,"cost":20,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":-1},{"id":"rel_fc_md_stigmaticnun","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_trenchpilgrim","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction"],"model_id":"md_stigmaticnun","captain":false,"mercenary":false,"cost":50,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":4},{"id":"rel_fc_md_stigmaticnun_saintmethodius","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_trenchpilgrim_fv_warpilgimageofsaintmethodius"],"model_id":"md_stigmaticnun_saintmethodius","captain":false,"mercenary":false,"cost":50,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":3},{"id":"rel_fc_md_anchoriteshrine","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_trenchpilgrim","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction"],"model_id":"md_anchoriteshrine","captain":false,"mercenary":false,"cost":140,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_anchoriteshrine_saintmethodius","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_trenchpilgrim_fv_warpilgimageofsaintmethodius"],"model_id":"md_anchoriteshrine_saintmethodius","captain":false,"mercenary":false,"cost":140,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":2},{"id":"rel_fc_md_combatmedic_mv_pilgrim","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction"],"model_id":"md_combatmedic_mv_pilgrim","captain":false,"mercenary":true,"cost":2,"cost_type":1,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_witchburner","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce","fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction"],"model_id":"md_witchburner","captain":false,"mercenary":true,"cost":5,"cost_type":1,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_communicantantitankhunter","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce","fc_trenchpilgrim","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction"],"model_id":"md_communicantantitankhunter","captain":false,"mercenary":true,"cost":5,"cost_type":1,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_mendelistammomonk","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce","fc_trenchpilgrim","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction"],"model_id":"md_mendelistammomonk","captain":false,"mercenary":true,"cost":2,"cost_type":1,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_observer","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce","fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction"],"model_id":"md_observer","captain":false,"mercenary":true,"cost":3,"cost_type":1,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_combatbiologist","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce","fc_ironsultanate","fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate_fv_fidaiofalamut","fc_ironsultanate_fv_houseofwisdom"],"model_id":"md_combatbiologist","captain":false,"mercenary":true,"cost":3,"cost_type":1,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_lieutenant","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fc_stortruppenofthefreestateofprussia"],"model_id":"md_lieutenant","captain":true,"mercenary":false,"cost":70,"cost_type":0,"restricted_models":[],"warband_minimum":1,"warband_maximum":1},{"id":"rel_fc_md_lieutenant_alba","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_newantioch_fv_kingdomofalbaassaultdetatchment"],"model_id":"md_lieutenant_alba","captain":true,"mercenary":false,"cost":70,"cost_type":0,"restricted_models":[],"warband_minimum":1,"warband_maximum":1},{"id":"rel_fc_md_lieutenant_papalstates","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_newantioch_fv_papalstatesinterventionforce"],"model_id":"md_lieutenant","captain":false,"mercenary":false,"cost":70,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_lieutenant_eire","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_newantioch_fc_eirerangers"],"model_id":"md_lieutenant_eire","captain":true,"mercenary":false,"cost":70,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_trenchcleric","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_newantioch","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fv_expeditionaryforcedofabyssinia"],"model_id":"md_trenchcleric","captain":false,"mercenary":false,"cost":60,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_trenchcleric_redbrigade","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{},"faction_model_count_group":{"filter":[{"id":["md_trenchcleric","md_sniperpriest"]}],"number":2}},"options":[],"faction_id":["fc_newantioch_fv_redbrigade"],"model_id":"md_trenchcleric","captain":false,"mercenary":false,"cost":60,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_trenchcleric_ethiopia","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_newantioch_fv_expeditionaryforcedofabyssinia"],"model_id":"md_trenchcleric_ethiopia","captain":false,"mercenary":false,"cost":60,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":2},{"id":"rel_fc_md_trenchcleric_eire","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_newantioch_fc_eirerangers"],"model_id":"md_trenchcleric_erie","captain":false,"mercenary":false,"cost":60,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":2},{"id":"rel_fc_md_trenchcleric_lector","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_newantioch_fv_papalstatesinterventionforce"],"model_id":"md_trenchcleric_lector","captain":true,"mercenary":false,"cost":60,"cost_type":0,"restricted_models":[],"warband_minimum":1,"warband_maximum":1},{"id":"rel_fc_md_sniperpriest","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_newantioch","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce","fc_newantioch_fv_papalstatesinterventionforce"],"model_id":"md_sniperpriest","captain":false,"mercenary":false,"cost":50,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":2},{"id":"rel_fc_md_sniperpriest_red_brigade","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{},"faction_model_count_group":{"filter":[{"id":["md_trenchcleric","md_sniperpriest"]}],"number":2}},"options":[],"faction_id":["fc_newantioch_fv_redbrigade"],"model_id":"md_sniperpriest","captain":false,"mercenary":false,"cost":50,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":2},{"id":"rel_fc_md_sniperpriest_prussia","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_newantioch_fc_stortruppenofthefreestateofprussia"],"model_id":"md_sniperpriest","captain":false,"mercenary":false,"cost":50,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_yeoman","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce","fc_newantioch_fc_stortruppenofthefreestateofprussia"],"model_id":"md_yeoman","captain":false,"mercenary":false,"cost":30,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":-1},{"id":"rel_fc_md_yeoman_survivor","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":[],"model_id":"md_yeoman_survivor","captain":false,"mercenary":false,"cost":30,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":-1},{"id":"rel_fc_md_shocktrooper","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce"],"model_id":"md_shocktrooper","captain":false,"mercenary":false,"cost":45,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":5},{"id":"rel_fc_md_shocktrooper_alba","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_newantioch_fv_kingdomofalbaassaultdetatchment"],"model_id":"md_shocktrooper_alba","captain":false,"mercenary":false,"cost":45,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":5},{"id":"rel_fc_md_shocktrooper_prussia","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_newantioch_fc_stortruppenofthefreestateofprussia"],"model_id":"md_shocktrooper","captain":false,"mercenary":false,"cost":45,"cost_type":0,"restricted_models":[],"warband_minimum":2,"warband_maximum":8},{"id":"rel_fc_md_combatengineer","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fv_papalstatesinterventionforce","fc_newantioch_fc_stortruppenofthefreestateofprussia"],"model_id":"md_combatengineer","captain":false,"mercenary":false,"cost":80,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":2},{"id":"rel_fc_md_combatengineer_eire","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_newantioch_fc_eirerangers"],"model_id":"md_combatengineer","captain":false,"mercenary":false,"cost":80,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":4},{"id":"rel_fc_md_mechanisedheavyinfantry","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_papalstatesinterventionforce"],"model_id":"md_mechanisedheavyinfantry","captain":false,"mercenary":false,"cost":85,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":3},{"id":"rel_fc_md_mechanisedheavyinfantry_abyssianna","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_newantioch_fv_expeditionaryforcedofabyssinia"],"model_id":"md_mechanisedheavyinfantry_abyssianna","captain":false,"mercenary":false,"cost":85,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":3},{"id":"rel_fc_md_mechanisedheavyinfantry_eire","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_newantioch_fc_eirerangers","fc_newantioch_fc_stortruppenofthefreestateofprussia"],"model_id":"md_mechanisedheavyinfantry","captain":false,"mercenary":false,"cost":85,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_mechanisedheavyinfantry_alba","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_newantioch_fv_kingdomofalbaassaultdetatchment"],"model_id":"md_mechanisedheavyinfantry_alba","captain":false,"mercenary":false,"cost":85,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":3},{"id":"rel_fc_md_combatmedic","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce","fc_newantioch_fc_stortruppenofthefreestateofprussia"],"model_id":"md_combatmedic","captain":false,"mercenary":false,"cost":65,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_combatmedic_ethiopia","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_newantioch_fv_expeditionaryforcedofabyssinia"],"model_id":"md_combatmedic","captain":false,"mercenary":false,"cost":65,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":2},{"id":"rel_fc_md_gergorigula","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_cultoftheblackgrail_fv_thegreathunger"],"model_id":"md_gergorigula","captain":false,"mercenary":false,"cost":145,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":2},{"id":"rel_fc_md_lordoftumors","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{},"faction_model_count_group":{"filter":[{"id":["md_lordoftumors","md_plagueknight"]}],"number":3}},"options":[],"faction_id":["fc_cultoftheblackgrail"],"model_id":"md_lordoftumors","captain":true,"mercenary":false,"cost":130,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_lordoftumors_hunger","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{},"faction_model_count_group":{"filter":[{"id":["md_lordoftumors","md_matagothag"]}],"number":1}},"options":[],"faction_id":["fc_cultoftheblackgrail_fv_thegreathunger"],"model_id":"md_lordoftumors","captain":true,"mercenary":false,"cost":130,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_matagothag_hunger","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{},"faction_model_count_group":{"filter":[{"id":["md_lordoftumors","md_matagothag"]}],"number":1}},"options":[],"faction_id":["fc_cultoftheblackgrail_fv_thegreathunger"],"model_id":"md_matagothag","captain":true,"mercenary":false,"cost":135,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_plagueknight_leader","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{},"faction_model_count_group":{"filter":[{"id":["md_lordoftumors","md_plagueknight"]}],"number":3}},"options":[],"faction_id":["fc_cultoftheblackgrail"],"model_id":"md_plagueknight","captain":true,"mercenary":false,"cost":60,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_plagueknight","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{},"faction_model_count_group":{"filter":[{"id":["md_lordoftumors","md_plagueknight"]}],"number":3}},"options":[],"faction_id":["fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon"],"model_id":"md_plagueknight","captain":false,"mercenary":false,"cost":60,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":2},{"id":"rel_fc_md_plagueknightbutcher","source":"creature_caster","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_cultoftheblackgrail_fv_thegreathunger"],"model_id":"md_plagueknight_butcherknight","captain":false,"mercenary":false,"cost":60,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":2},{"id":"rel_fc_md_corpseguard","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon"],"model_id":"md_corpseguard","captain":false,"mercenary":false,"cost":55,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":3},{"id":"rel_fc_md_corpseguard_hunger","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_cultoftheblackgrail_fv_thegreathunger"],"model_id":"md_corpseguard_husk","captain":false,"mercenary":false,"cost":55,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":2},{"id":"rel_fc_md_houndsoftheblackgrail","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_cultoftheblackgrail"],"model_id":"md_houndsoftheblackgrail","captain":false,"mercenary":false,"cost":55,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":3},{"id":"rel_fc_md_houndsoftheblackgrail_prowler","source":"creature_caster","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_cultoftheblackgrail_fv_thegreathunger"],"model_id":"md_houndsoftheblackgrail_prowler","captain":false,"mercenary":false,"cost":55,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":3},{"id":"rel_fc_md_houndsoftheblackgrail_wailers","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_cultoftheblackgrail_fv_dirgeofthegreathegemon"],"model_id":"md_houndsoftheblackgrail","captain":false,"mercenary":false,"cost":55,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":2},{"id":"rel_fc_md_grailthrall","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_cultoftheblackgrail"],"model_id":"md_grailthrall","captain":false,"mercenary":false,"cost":25,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":-1},{"id":"rel_fc_md_grailthrall_hunger","source":"creature_caster","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_cultoftheblackgrail_fv_thegreathunger"],"model_id":"md_grailthrall_hunger","captain":false,"mercenary":false,"cost":35,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":-1},{"id":"rel_fc_md_grailthrall_hunger_glory","source":"creature_caster","tags":{},"name":"","contextdata":{"option_search_viable":{},"faction_model_count_group":{"filter":[{"id":["md_grailthrall_cradle_hunger","md_grailthrall_flythrall_cradle_hunger"]}],"number":3}},"options":[],"faction_id":["fc_cultoftheblackgrail_fv_thegreathunger"],"model_id":"md_grailthrall_cradle_hunger","captain":false,"mercenary":false,"cost":2,"cost_type":1,"restricted_models":[],"warband_minimum":0,"warband_maximum":-1},{"id":"rel_fc_md_grailthrall_explore","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":[],"model_id":"md_grailthrall","captain":false,"mercenary":false,"cost":25,"cost_type":0,"restricted_models":[],"warband_minimum":1,"warband_maximum":1},{"id":"rel_fc_md_grailthrall_bereaved","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_cultoftheblackgrail_fv_dirgeofthegreathegemon"],"model_id":"md_grailthrall_bereaved","captain":false,"mercenary":false,"cost":30,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":-1},{"id":"rel_fc_md_grailthrall_flythrall","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_cultoftheblackgrail"],"model_id":"md_grailthrall_flythrall","captain":false,"mercenary":false,"cost":25,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":-1},{"id":"rel_fc_md_grailthrall_flythrall_hunger","source":"creature_caster","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_cultoftheblackgrail_fv_thegreathunger"],"model_id":"md_grailthrall_flythrall_hunger","captain":false,"mercenary":false,"cost":35,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":-1},{"id":"rel_fc_md_grailthrall_flythrall_hunger_glory","source":"creature_caster","tags":{},"name":"","contextdata":{"option_search_viable":{},"faction_model_count_group":{"filter":[{"id":["md_grailthrall_cradle_hunger","md_grailthrall_flythrall_cradle_hunger"]}],"number":3}},"options":[],"faction_id":["fc_cultoftheblackgrail_fv_thegreathunger"],"model_id":"md_grailthrall_flythrall_cradle_hunger","captain":false,"mercenary":false,"cost":2,"cost_type":1,"restricted_models":[],"warband_minimum":0,"warband_maximum":-1},{"id":"rel_fc_md_grailthrall_flybereaved","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_cultoftheblackgrail_fv_dirgeofthegreathegemon"],"model_id":"md_grailthrall_flybereaved","captain":false,"mercenary":false,"cost":30,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":-1},{"id":"rel_fc_md_heraldofbeelzebub","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_cultoftheblackgrail"],"model_id":"md_heraldofbeelzebub","captain":false,"mercenary":false,"cost":50,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":4},{"id":"rel_fc_md_heraldofbeelzebub_weeper","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_cultoftheblackgrail_fv_dirgeofthegreathegemon"],"model_id":"md_heraldofbeelzebub","captain":false,"mercenary":false,"cost":50,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":2},{"id":"rel_fc_md_amalgam","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_cultoftheblackgrail"],"model_id":"md_amalgam","captain":false,"mercenary":false,"cost":140,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_plagueknight_captain_dirge","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_cultoftheblackgrail_fv_dirgeofthegreathegemon"],"model_id":"md_plagueknight_executor","captain":true,"mercenary":false,"cost":80,"cost_type":0,"restricted_models":[],"warband_minimum":1,"warband_maximum":1},{"id":"rel_fc_md_praetor_captain","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_courtofthesevenheadedserpent"],"model_id":"md_praetor","captain":true,"mercenary":false,"cost":115,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_sorcerer_captain","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_courtofthesevenheadedserpent"],"model_id":"md_sorcerer","captain":true,"mercenary":false,"cost":75,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_hunterofthelefthandpath","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_courtofthesevenheadedserpent"],"model_id":"md_hunterofthelefthandpath","captain":false,"mercenary":false,"cost":110,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_hellknight","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_courtofthesevenheadedserpent"],"model_id":"md_hellknight","captain":false,"mercenary":false,"cost":100,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":3},{"id":"rel_fc_md_yokefiend","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_courtofthesevenheadedserpent"],"model_id":"md_yokefiend","captain":false,"mercenary":false,"cost":30,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":-1},{"id":"rel_fc_md_wretched_court","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{},"faction_model_count_special":{"exceed":[{"type":"keyword","value":"kw_demonic"}]}},"options":[],"faction_id":["fc_courtofthesevenheadedserpent"],"model_id":"md_wretched_court","captain":false,"mercenary":false,"cost":20,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":0},{"id":"rel_fc_md_wretched_court_explore","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":[],"model_id":"md_wretched_court","captain":false,"mercenary":false,"cost":20,"cost_type":0,"restricted_models":[],"warband_minimum":1,"warband_maximum":1},{"id":"rel_fc_md_pitlocust","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_courtofthesevenheadedserpent"],"model_id":"md_pitlocust","captain":false,"mercenary":false,"cost":90,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":3},{"id":"rel_fc_md_desecratedsaint","source":"core","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_courtofthesevenheadedserpent"],"model_id":"md_desecratedsaint","captain":false,"mercenary":false,"cost":140,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_trenchdog_redbrigade","source":"westfalia","tags":{},"name":"","contextdata":{"option_search_viable":{},"faction_model_count_group":{"filter":[{"tag":"dog"}],"exceed":[{"type":"tag","value":"dog","subvalue":false}]}},"options":[],"faction_id":["fc_newantioch_fv_redbrigade"],"model_id":"md_trenchdog","captain":false,"mercenary":false,"cost":35,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":-1},{"id":"rel_fc_md_trenchdog_guarddog_redbrigade","source":"westfalia","tags":{},"name":"","contextdata":{"option_search_viable":{},"faction_model_count_group":{"filter":[{"tag":"dog"}],"exceed":[{"type":"tag","value":"dog","subvalue":false}],"cap":1}},"options":[],"faction_id":["fc_newantioch_fv_redbrigade"],"model_id":"md_trenchdog_guarddog","captain":false,"mercenary":false,"cost":40,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":1},{"id":"rel_fc_md_trenchdog_mercydog_redbrigade","source":"westfalia","tags":{},"name":"","contextdata":{"option_search_viable":{},"faction_model_count_group":{"filter":[{"tag":"dog"}],"exceed":[{"type":"tag","value":"dog","subvalue":false}],"cap":2}},"options":[],"faction_id":["fc_newantioch_fv_redbrigade"],"model_id":"md_trenchdog_mercydog","captain":false,"mercenary":false,"cost":40,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":2},{"id":"rel_fc_md_trenchdog_attackdog_redbrigade","source":"westfalia","tags":{},"name":"","contextdata":{"option_search_viable":{},"faction_model_count_group":{"filter":[{"tag":"dog"}],"exceed":[{"type":"tag","value":"dog","subvalue":false}]}},"options":[],"faction_id":["fc_newantioch_fv_redbrigade"],"model_id":"md_trenchdog_attackdog","captain":false,"mercenary":false,"cost":40,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":-1},{"id":"rel_fc_md_crimsoncommunicant","source":"westfalia","tags":{},"name":"","contextdata":{"option_search_viable":{}},"options":[],"faction_id":["fc_newantioch_fv_redbrigade"],"model_id":"md_crimsoncommunicant","captain":false,"mercenary":false,"cost":75,"cost_type":0,"restricted_models":[],"warband_minimum":0,"warband_maximum":1}]'),x=JSON.parse('[{"id":"rel_fc_eq_jezzail","source":"core","tags":{},"name":"Jezzail","contextdata":{},"faction_id":["fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_jezzail","cost":7,"costtype":0,"limit":0},{"id":"rel_fc_eq_siegejezzail","source":"core","tags":{},"name":"Siege Jezzail","contextdata":{},"faction_id":["fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_siegejezzail","cost":30,"costtype":0,"limit":0},{"id":"rel_fc_eq_musket","source":"core","tags":{},"name":"Musket","contextdata":{},"faction_id":["fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon","fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction","fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_musket","cost":5,"costtype":0,"limit":0},{"id":"rel_fc_eq_infestedrifle","source":"core","tags":{},"name":"Infested Rifle","contextdata":{},"faction_id":["fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon"],"equipment_id":"eq_infestedrifle","cost":15,"costtype":0,"limit":0},{"id":"rel_fc_eq_corruptionbelcher","source":"core","tags":{},"name":"Corruption Belcher","contextdata":{},"faction_id":["fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon"],"equipment_id":"eq_corruptionbelcher","cost":30,"costtype":0,"limit":2},{"id":"rel_fc_eq_pistolrevolver","source":"core","tags":{},"name":"Pistol","contextdata":{},"faction_id":["fc_courtofthesevenheadedserpent","fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon","fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce","fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction","fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty","fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_pistolrevolver","cost":6,"costtype":0,"limit":0},{"id":"rel_fc_eq_shotgun","source":"core","tags":{},"name":"Shotgun","contextdata":{},"faction_id":["fc_courtofthesevenheadedserpent","fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_thegreathunger","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon","fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty","fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut","fc_trenchpilgrim","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce"],"equipment_id":"eq_shotgun","cost":10,"costtype":0,"limit":0},{"id":"rel_fc_eq_putridshotgun","source":"core","tags":{},"name":"Putrid Shotgun","contextdata":{},"faction_id":["fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_thegreathunger"],"equipment_id":"eq_putridshotgun","cost":20,"costtype":0,"limit":2},{"id":"rel_fc_eq_putridshotgun_dirge","source":"core","tags":{},"name":"Putrid Shotgun","contextdata":{},"faction_id":["fc_cultoftheblackgrail_fv_dirgeofthegreathegemon"],"equipment_id":"eq_putridshotgun","cost":20,"costtype":0,"limit":3},{"id":"rel_fc_eq_alaybozan","source":"core","tags":{},"name":"Alaybozan","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_sultanatesapper"}]}},"faction_id":["fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_alaybozan","cost":9,"costtype":0,"limit":0},{"id":"rel_fc_eq_sniperrifle","source":"core","tags":{},"name":"Sniper Rifle","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_janissaries"},{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_sniperrifle","cost":35,"costtype":0,"limit":2},{"id":"rel_fc_eq_plagueblade","source":"core","tags":{},"name":"Plague Blade","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_thegreathunger"],"equipment_id":"eq_plagueblade","cost":7,"costtype":0,"limit":3},{"id":"rel_fc_eq_brokencrown","source":"core","tags":{},"name":"Broken Crown","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_cultoftheblackgrail_fv_dirgeofthegreathegemon"],"equipment_id":"eq_brokencrown","cost":25,"costtype":0,"limit":1},{"id":"rel_fc_eq_urnofbitterashes","source":"core","tags":{},"name":"Broken Crown","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_cultoftheblackgrail_fv_dirgeofthegreathegemon"],"equipment_id":"eq_urnofbitterashes","cost":40,"costtype":0,"limit":1},{"id":"rel_fc_eq_ophidianrifle","source":"core","tags":{},"name":"Ophidian Rifle","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_courtofthesevenheadedserpent"],"equipment_id":"eq_ophidianrifle","cost":25,"costtype":0,"limit":3},{"id":"rel_fc_eq_blunderbuss","source":"core","tags":{},"name":"Blunderbuss","contextdata":{},"faction_id":["fc_courtofthesevenheadedserpent","fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon","fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction"],"equipment_id":"eq_blunderbuss","cost":5,"costtype":0,"limit":0},{"id":"rel_fc_eq_arquebus","source":"core","tags":{},"name":"Arquebus","contextdata":{},"faction_id":["fc_courtofthesevenheadedserpent"],"equipment_id":"eq_arquebus","cost":8,"costtype":0,"limit":0},{"id":"rel_fc_eq_plagueblade_dirge","source":"core","tags":{},"name":"Plague Blade","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_cultoftheblackgrail_fv_dirgeofthegreathegemon"],"equipment_id":"eq_plagueblade","cost":7,"costtype":0,"limit":3},{"id":"rel_fc_eq_beelzebubsaxe","source":"core","tags":{},"name":"Beelzebub\'s Axe","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_cultoftheblackgrail"],"equipment_id":"eq_beelzebubsaxe","cost":30,"costtype":0,"limit":1},{"id":"rel_fc_eq_sniperrifle_antioch","source":"core","tags":{},"name":"Sniper Rifle","contextdata":{},"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce"],"equipment_id":"eq_sniperrifle","cost":35,"costtype":0,"limit":3},{"id":"rel_fc_eq_sniperrifle_alba","source":"core","tags":{},"name":"Sniper Rifle","contextdata":{},"faction_id":["fc_newantioch_fv_kingdomofalbaassaultdetatchment"],"equipment_id":"eq_sniperrifle","cost":35,"costtype":0,"limit":1},{"id":"rel_fc_eq_sniperrifle_glory","source":"core","tags":{},"name":"Sniper Rifle","contextdata":{},"faction_id":["fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction"],"equipment_id":"eq_sniperrifle","cost":2,"costtype":1,"limit":0},{"id":"rel_fc_eq_grenades","source":"core","tags":{},"name":"Grenades","contextdata":{},"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce","fc_hereticlegion","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty","fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_grenades","cost":7,"costtype":0,"limit":0},{"id":"rel_fc_eq_grenades_brigadedog","source":"core","tags":{},"name":"Grenades","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_trenchdog"},{"res_type":"id","value":"md_trenchdog_guarddog"},{"res_type":"id","value":"md_trenchdog_mercydog"},{"res_type":"id","value":"md_trenchdog_attackdog"}]}},"faction_id":["fc_newantioch_fv_redbrigade"],"equipment_id":"eq_grenades","cost":5,"costtype":0,"limit":0},{"id":"rel_fc_eq_incendiarygrenades","source":"core","tags":{},"name":"Incendiary Grenades","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_jabireanalchemist"}]}},"faction_id":["fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom"],"equipment_id":"eq_incendiarygrenades","cost":15,"costtype":0,"limit":0},{"id":"rel_fc_eq_machinegun_one","source":"core","tags":{},"name":"Machine Gun","contextdata":{},"faction_id":["fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty","fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_machinegun","cost":50,"costtype":0,"limit":1},{"id":"rel_fc_eq_machinegun_grail","source":"core","tags":{},"name":"Machine Gun","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_amalgam"}]}},"faction_id":["fc_cultoftheblackgrail"],"equipment_id":"eq_machinegun","cost":50,"costtype":0,"limit":1},{"id":"rel_fc_eq_machinegun_saintmethodius","source":"core","tags":{},"name":"Machine Gun","contextdata":{},"faction_id":["fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_papalstatesinterventionforce"],"equipment_id":"eq_machinegun","cost":50,"costtype":0,"limit":2},{"id":"rel_fc_eq_machinegun_eire","source":"core","tags":{},"name":"Machine Gun","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_mechanisedheavyinfantry"}]}},"faction_id":["fc_newantioch_fc_eirerangers"],"equipment_id":"eq_machinegun","cost":50,"costtype":0,"limit":2},{"id":"rel_fc_eq_sarcophagusmine","source":"core","tags":{},"name":"Sarcophagus Mine","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_heretictrooper"}]},"stash_equipment":{}},"faction_id":["fc_hereticlegion_fv_trenchghosts"],"equipment_id":"eq_sarcophagusmine","cost":30,"costtype":0,"limit":2},{"id":"rel_fc_eq_machinegun_glory","source":"core","tags":{},"name":"Machine Gun","contextdata":{},"faction_id":["fc_trenchpilgrim","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius"],"equipment_id":"eq_machinegun","cost":2,"costtype":1,"limit":0},{"id":"rel_fc_eq_flamethrower","source":"core","tags":{},"name":"Flamethrower","contextdata":{},"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce","fc_hereticlegion","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty","fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_flamethrower","cost":30,"costtype":0,"limit":3},{"id":"rel_fc_eq_flamethrower_pilgrim","source":"core","tags":{},"name":"Flamethrower","contextdata":{},"faction_id":["fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction"],"equipment_id":"eq_flamethrower","cost":30,"costtype":0,"limit":2},{"id":"rel_fc_eq_flamethrower_unlimited","source":"core","tags":{},"name":"Flamethrower","contextdata":{},"faction_id":[],"equipment_id":"eq_flamethrower","cost":30,"costtype":0,"limit":0},{"id":"rel_fc_eq_flamethrower_court","source":"core","tags":{},"name":"Flamethrower","contextdata":{},"faction_id":["fc_courtofthesevenheadedserpent"],"equipment_id":"eq_flamethrower","cost":30,"costtype":0,"limit":2},{"id":"rel_fc_eq_muradbombard","source":"core","tags":{},"name":"MURAD Bombard","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_brazenbull"}]}},"faction_id":["fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom"],"equipment_id":"eq_muradbombard","cost":50,"costtype":0,"limit":1},{"id":"rel_fc_eq_flamecannon","source":"core","tags":{},"name":"Flame Cannon","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_brazenbull"}]}},"faction_id":["fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom"],"equipment_id":"eq_flamecannon","cost":60,"costtype":0,"limit":1},{"id":"rel_fc_eq_knifedagger","source":"core","tags":{},"name":"Knife","contextdata":{},"faction_id":["fc_courtofthesevenheadedserpent","fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_thegreathunger","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon","fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce","fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction","fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty","fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_knifedagger","cost":1,"costtype":0,"limit":0},{"id":"rel_fc_eq_bayonet","source":"core","tags":{},"name":"Bayonet","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"equipment_keyword","value":"kw_bayonetlug"}]}},"faction_id":["fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_thegreathunger","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon","fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce","fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction","fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty","fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_bayonet","cost":2,"costtype":0,"limit":0},{"id":"rel_fc_eq_trenchclub","source":"core","tags":{},"name":"Trench Club","contextdata":{},"faction_id":["fc_courtofthesevenheadedserpent","fc_cultoftheblackgrail_fv_thegreathunger","fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon","fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce","fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction","fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty","fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_trenchclub","cost":3,"costtype":0,"limit":0},{"id":"rel_fc_eq_swordaxe","source":"core","tags":{},"name":"Sword/Axe","contextdata":{},"faction_id":["fc_courtofthesevenheadedserpent","fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_thegreathunger","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon","fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce","fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction","fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty","fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_swordaxe","cost":4,"costtype":0,"limit":0},{"id":"rel_fc_eq_trenchpolearm","source":"core","tags":{},"name":"Polearm","contextdata":{},"faction_id":["fc_courtofthesevenheadedserpent","fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce","fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction","fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty","fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_trenchpolearm","cost":7,"costtype":0,"limit":0},{"id":"rel_fc_eq_trenchpolearm_grail","source":"core","tags":{},"name":"Polearm","contextdata":{},"faction_id":["fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_thegreathunger","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon"],"equipment_id":"eq_trenchpolearm","cost":7,"costtype":0,"limit":0},{"id":"rel_fc_eq_tortureinstrument","source":"core","tags":{},"name":"Torture Instrument","contextdata":{},"faction_id":["fc_courtofthesevenheadedserpent"],"equipment_id":"eq_tortureinstrument","cost":8,"costtype":0,"limit":0},{"id":"rel_fc_eq_headtaker","source":"core","tags":{},"name":"Head Taker","contextdata":{},"faction_id":["fc_courtofthesevenheadedserpent"],"equipment_id":"eq_headtaker","cost":15,"costtype":0,"limit":2},{"id":"rel_fc_eq_doublehandedbluntweapon","source":"core","tags":{},"name":"Great-Hammer/Maul","contextdata":{},"faction_id":["fc_courtofthesevenheadedserpent","fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_thegreathunger","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon","fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fv_papalstatesinterventionforce","fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction","fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty","fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_doublehandedbluntweapon","cost":10,"costtype":0,"limit":0},{"id":"rel_fc_eq_doublehandedbluntweapon_eire","source":"core","tags":{},"name":"Great-Hammer/Maul","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_mechanisedheavyinfantry"}]}},"faction_id":["fc_newantioch_fc_eirerangers"],"equipment_id":"eq_doublehandedbluntweapon","cost":10,"costtype":0,"limit":0},{"id":"rel_fc_eq_greatswordaxe","source":"core","tags":{},"name":"Great-Sword/Axe","contextdata":{},"faction_id":["fc_courtofthesevenheadedserpent","fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_thegreathunger","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon","fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fv_papalstatesinterventionforce","fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction","fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty","fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_greatswordaxe","cost":12,"costtype":0,"limit":0},{"id":"rel_fc_eq_greatswordaxe_alba","source":"core","tags":{},"name":"Great-Sword/Axe","contextdata":{},"faction_id":["fc_newantioch_fv_kingdomofalbaassaultdetatchment"],"equipment_id":"eq_greatswordaxe","cost":7,"costtype":0,"limit":0},{"id":"rel_fc_eq_greatswordaxe_eire","source":"core","tags":{},"name":"Great-Sword/Axe","contextdata":{"faction_eq_restriction":{"banned":[{"res_type":"id","value":"md_mechanisedheavyinfantry"}]}},"faction_id":["fc_newantioch_fc_eirerangers"],"equipment_id":"eq_greatswordaxe","cost":12,"costtype":0,"limit":3},{"id":"rel_fc_eq_halberdgun","source":"core","tags":{},"name":"Halberd-Gun","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_halberdgun","cost":20,"costtype":0,"limit":0},{"id":"rel_fc_eq_titanzulfiqar","source":"core","tags":{},"name":"Titan Zulfiqar","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_brazenbull"}]}},"faction_id":["fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate"],"equipment_id":"eq_titanzulfiqar","cost":30,"costtype":0,"limit":0},{"id":"rel_fc_eq_assassinsdagger","source":"core","tags":{},"name":"Assassins Dagger","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_sultanateassassin"}]}},"faction_id":["fc_ironsultanate","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_assassinsdagger","cost":15,"costtype":0,"limit":0},{"id":"rel_fc_eq_standardarmour","source":"core","tags":{},"name":"Standard Armour","contextdata":{},"faction_id":["fc_courtofthesevenheadedserpent","fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_thegreathunger","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon","fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce","fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction","fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty","fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_standardarmour","cost":15,"costtype":0,"limit":0},{"id":"rel_fc_eq_reinforcedarmour_sultanate","source":"core","tags":{},"name":"Reinforced Armour","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_janissaries"},{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_reinforcedarmour","cost":40,"costtype":0,"limit":0},{"id":"rel_fc_eq_reinforcedarmour_antioch","source":"core","tags":{},"name":"Reinforced Armour","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_mechanisedheavyinfantry"},{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_papalstatesinterventionforce"],"equipment_id":"eq_reinforcedarmour","cost":40,"costtype":0,"limit":0},{"id":"rel_fc_eq_reinforcedarmour_prussia","source":"core","tags":{},"name":"Reinforced Armour","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_mechanisedheavyinfantry"},{"res_type":"id","value":"md_lieutenant"}]}},"faction_id":["fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia"],"equipment_id":"eq_reinforcedarmour","cost":40,"costtype":0,"limit":0},{"id":"rel_fc_eq_machinearmour","source":"core","tags":{},"name":"Machine Armour","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_papalstatesinterventionforce"],"equipment_id":"eq_machinearmour","cost":50,"costtype":0,"limit":1},{"id":"rel_fc_eq_tanksplittersword","source":"core","tags":{},"name":"Tank-Splitter Sword","contextdata":{},"faction_id":["fc_newantioch_fc_stortruppenofthefreestateofprussia"],"equipment_id":"eq_tanksplittersword","cost":15,"costtype":0,"limit":2},{"id":"rel_fc_eq_holysmoke","source":"core","tags":{},"name":"Holy Smoke","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_trenchcleric"}]}},"faction_id":["fc_newantioch_fc_stortruppenofthefreestateofprussia"],"equipment_id":"eq_holysmoke","cost":15,"costtype":0,"limit":2},{"id":"rel_fc_eq_machinearmour_prussia","source":"core","tags":{},"name":"Machine Armour","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_lieutenant"}]}},"faction_id":["fc_newantioch_fc_stortruppenofthefreestateofprussia"],"equipment_id":"eq_machinearmour","cost":50,"costtype":0,"limit":1},{"id":"rel_fc_eq_machinearmour_alba","source":"core","tags":{},"name":"Highland Machine Armour","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_lieutenant"}]}},"faction_id":["fc_newantioch_fv_kingdomofalbaassaultdetatchment"],"equipment_id":"eq_highlandmachinearmour","cost":50,"costtype":0,"limit":1},{"id":"rel_fc_eq_alchemistarmour","source":"core","tags":{},"name":"Alchemist Armour","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_alchemistarmour","cost":50,"costtype":0,"limit":1},{"id":"rel_fc_eq_alchemistarmour_how","source":"core","tags":{},"name":"Alchemist Armour","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_ironsultanate_fv_houseofwisdom"],"equipment_id":"eq_alchemistarmour","cost":50,"costtype":0,"limit":2},{"id":"rel_fc_eq_heavyballisticshield","source":"core","tags":{},"name":"Heavy Ballistic Shield","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"equipment","value":"eq_machinearmour"}]}},"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce"],"equipment_id":"eq_heavyballisticshield","cost":15,"costtype":0,"limit":0},{"id":"rel_fc_eq_trenchshield","source":"core","tags":{},"name":"Trench Shield","contextdata":{},"faction_id":["fc_courtofthesevenheadedserpent","fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_thegreathunger","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon","fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce","fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction","fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty","fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_trenchshield","cost":10,"costtype":0,"limit":0},{"id":"rel_fc_eq_combathelmet","source":"core","tags":{},"name":"Combat Helmet","contextdata":{},"faction_id":["fc_courtofthesevenheadedserpent","fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_thegreathunger","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon","fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce","fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty","fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_combathelmet","cost":5,"costtype":0,"limit":0},{"id":"rel_fc_eq_gasmask","source":"core","tags":{},"name":"Gas Mask","contextdata":{},"faction_id":["fc_courtofthesevenheadedserpent","fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce","fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction","fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty","fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_gasmask","cost":5,"costtype":0,"limit":0},{"id":"rel_fc_eq_shovel","source":"core","tags":{},"name":"Shovel","contextdata":{},"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce","fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty","fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_shovel","cost":5,"costtype":0,"limit":0},{"id":"rel_fc_eq_shovel_court","source":"core","tags":{},"name":"Shovel","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_yokefiend"},{"res_type":"id","value":"md_wretched_court"}]}},"faction_id":["fc_courtofthesevenheadedserpent"],"equipment_id":"eq_shovel","cost":5,"costtype":0,"limit":0},{"id":"rel_fc_eq_maridshovel","source":"core","tags":{},"name":"Marid Shovel","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_brazenbull"}]}},"faction_id":["fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom"],"equipment_id":"eq_maridshovel","cost":15,"costtype":0,"limit":0},{"id":"rel_fc_eq_mountaineerkit","source":"core","tags":{},"name":"Mountaineer Kit","contextdata":{},"faction_id":["fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty","fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_mountaineerkit","cost":3,"costtype":0,"limit":2},{"id":"rel_fc_eq_mountaineerkit_antioch","source":"core","tags":{},"name":"Mountaineer Kit","contextdata":{},"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce"],"equipment_id":"eq_mountaineerkit","cost":3,"costtype":0,"limit":4},{"id":"rel_fc_eq_mountaineerkit_pilgrim","source":"core","tags":{},"name":"Mountaineer Kit","contextdata":{},"faction_id":["fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction"],"equipment_id":"eq_mountaineerkit","cost":3,"costtype":0,"limit":1},{"id":"rel_fc_eq_medikit","source":"core","tags":{},"name":"Medi-Kit","contextdata":{},"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce","fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction","fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_medikit","cost":5,"costtype":0,"limit":0},{"id":"rel_fc_eq_alchemicalammunition","source":"core","tags":{},"name":"Alchemical Ammunition","contextdata":{},"faction_id":["fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_alchemicalammunition","cost":3,"costtype":0,"limit":0},{"id":"rel_fc_eq_musicalinstrument_nonelite","source":"core","tags":{},"name":"Musical Instrument","contextdata":{"faction_eq_restriction":{"banned":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":[],"equipment_id":"eq_musicalinstrument","cost":15,"costtype":0,"limit":1},{"id":"rel_fc_eq_cloakofalamut","source":"core","tags":{},"name":"Cloak of Alamut","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_cloakofalamut","cost":25,"costtype":0,"limit":1},{"id":"rel_fc_eq_blackgrailshield","source":"core","tags":{},"name":"Black Grail Shield","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_cultoftheblackgrail"],"equipment_id":"eq_blackgrailshield","cost":20,"costtype":0,"limit":0},{"id":"rel_fc_eq_windamulet","source":"core","tags":{},"name":"Wind Amulet","contextdata":{},"faction_id":["fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_windamulet","cost":10,"costtype":0,"limit":2},{"id":"rel_fc_eq_takwinanqabird","source":"core","tags":{},"name":"Takwin Anqa Bird","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut","fc_ironsultanate_fv_defendersoftheironwall"],"equipment_id":"eq_takwinanqabird","cost":2,"costtype":1,"limit":1},{"id":"rel_fc_eq_troopflag","source":"core","tags":{},"name":"Troop Flag","contextdata":{},"faction_id":["fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon","fc_courtofthesevenheadedserpent","fc_newantioch","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce","fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction","fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty","fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_troopflag","cost":1,"costtype":1,"limit":1},{"id":"rel_fc_eq_troopflag_grail","source":"core","tags":{},"name":"Troop Flag","contextdata":{},"faction_id":[],"equipment_id":"eq_troopflag","cost":10,"costtype":0,"limit":1},{"id":"rel_fc_eq_binoculars","source":"core","tags":{},"name":"Binoculars","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce","fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_binoculars","cost":10,"costtype":0,"limit":0},{"id":"rel_fc_eq_holyrelic","source":"core","tags":{},"name":"Holy Relic","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction","fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_holyrelic","cost":2,"costtype":1,"limit":0},{"id":"rel_fc_eq_goldenkhanjar","source":"core","tags":{},"name":"Golden Khanjar","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_sultanateassassin"}]}},"faction_id":["fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_goldenkhanjar","cost":20,"costtype":0,"limit":2},{"id":"rel_fc_eq_bowofalamut","source":"core","tags":{},"name":"Bow of Alamut","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_sultanateassassin"}]}},"faction_id":["fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_bowofalamut","cost":50,"costtype":0,"limit":1},{"id":"rel_fc_eq_hashashinleaf","source":"core","tags":{},"name":"Hashashin Leaf","contextdata":{},"faction_id":["fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_hashashinleaf","cost":5,"costtype":0,"limit":4},{"id":"rel_fc_eq_sniperscope","source":"core","tags":{"exploration_only":true},"name":"Sniper Scope","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"equipment_tag","value":"rifle"}]}},"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce","fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty","fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_sniperscope","cost":2,"costtype":1,"limit":2},{"id":"rel_fc_eq_kilij","source":"core","tags":{"exploration_only":true},"name":"Kilij","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_kilij","cost":2,"costtype":1,"limit":2},{"id":"rel_fc_eq_rocketpropelledgrenade_sultanate","source":"core","tags":{"exploration_only":true},"name":"Rocket-Propelled Grenade","contextdata":{},"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce","fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_rocketpropelledgrenade","cost":2,"costtype":1,"limit":2},{"id":"rel_fc_eq_salvagegolem","source":"core","tags":{"exploration_only":true},"name":"Salvage Golem","contextdata":{},"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce"],"equipment_id":"eq_salvagegolem","cost":4,"costtype":1,"limit":1},{"id":"rel_fc_eq_rocketpropelledgrenade_one","source":"core","tags":{"exploration_only":true},"name":"Rocket-Propelled Grenade","contextdata":{},"faction_id":["fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction","fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty","fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon","fc_cultoftheblackgrail_fv_thegreathunger","fc_courtofthesevenheadedserpent"],"equipment_id":"eq_rocketpropelledgrenade","cost":2,"costtype":1,"limit":1},{"id":"rel_fc_eq_armourpiercingbullets","source":"core","tags":{},"name":"Armour Piercing Bullets","contextdata":{},"faction_id":["fc_newantioch_fc_eirerangers"],"equipment_id":"eq_armourpiercingbullets","cost":5,"costtype":0,"limit":2},{"id":"rel_fc_eq_masterworksjezzail","source":"core","tags":{"exploration_only":true},"name":"Masterworks Jezzail","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_masterworksjezzail","cost":4,"costtype":1,"limit":1},{"id":"rel_fc_eq_damascusarmour","source":"core","tags":{"exploration_only":true},"name":"Damascus Armour","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_damascusarmour","cost":5,"costtype":1,"limit":1},{"id":"rel_fc_eq_knighthood","source":"core","tags":{"exploration_only":true},"name":"Knighthood","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_courtofthesevenheadedserpent","fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_thegreathunger","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon","fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce","fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty","fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_knighthood","cost":4,"costtype":1,"limit":1},{"id":"rel_fc_eq_smokescreen","source":"core","tags":{"exploration_only":true},"name":"Smokescreen","contextdata":{},"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce"],"equipment_id":"eq_smokescreen","cost":5,"costtype":1,"limit":1},{"id":"rel_fc_eq_fieldhospital","source":"core","tags":{"exploration_only":true},"name":"Field Hospital","contextdata":{},"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce","fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom"],"equipment_id":"eq_fieldhospital","cost":10,"costtype":1,"limit":1},{"id":"rel_fc_eq_resurrectionengine","source":"core","tags":{"exploration_only":true},"name":"Resurrection Engine","contextdata":{},"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce"],"equipment_id":"eq_resurrectionengine","cost":11,"costtype":1,"limit":1},{"id":"rel_fc_eq_sultanategrandcannon","source":"core","tags":{"exploration_only":true},"name":"Sultanate Grand Cannon","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_brazenbull"}]}},"faction_id":["fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom"],"equipment_id":"eq_sultanategrandcannon","cost":10,"costtype":1,"limit":1},{"id":"rel_fc_eq_exlixerofalkhidr","source":"core","tags":{},"name":"Elixer of Alkhidr","contextdata":{"faction_eq_restriction":{"banned":[{"res_type":"keyword","value":"kw_artificial"}]}},"faction_id":["fc_ironsultanate_fv_houseofwisdom"],"equipment_id":"eq_exlixerofalkhidr","cost":10,"costtype":0,"limit":1},{"id":"rel_fc_eq_fireshield","source":"core","tags":{},"name":"Fire Shield","contextdata":{},"faction_id":["fc_ironsultanate_fv_houseofwisdom"],"equipment_id":"eq_fireshield","cost":20,"costtype":0,"limit":2},{"id":"rel_fc_eq_ironcapriote","source":"core","tags":{},"name":"Iron Capirote","contextdata":{},"faction_id":["fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague"],"equipment_id":"eq_ironcapriote","cost":7,"costtype":0,"limit":0},{"id":"rel_fc_eq_molotovcocktail","source":"core","tags":{},"name":"Molotov Cocktail","contextdata":{},"faction_id":["fc_newantioch_fv_redbrigade","fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction"],"equipment_id":"eq_molotovcocktail","cost":5,"costtype":0,"limit":0},{"id":"rel_fc_eq_heavyshotgun","source":"core","tags":{},"name":"Heavy Shotgun","contextdata":{},"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fv_papalstatesinterventionforce"],"equipment_id":"eq_heavyshotgun","cost":20,"costtype":0,"limit":2},{"id":"rel_fc_eq_heavyshotgun_erie","source":"core","tags":{},"name":"Heavy Shotgun","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_mechanisedheavyinfantry"}]}},"faction_id":["fc_newantioch_fc_eirerangers"],"equipment_id":"eq_heavyshotgun","cost":20,"costtype":0,"limit":2},{"id":"rel_fc_eq_ironwallkalkan","source":"core","tags":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_brazenbull"}]}},"name":"Iron Wall Kalkan","contextdata":{},"faction_id":["fc_ironsultanate_fv_defendersoftheironwall"],"equipment_id":"eq_ironwallkalkan","cost":30,"costtype":0,"limit":1},{"id":"rel_fc_eq_bannerofdesertwind","source":"core","tags":{},"name":"Banner of Desert Wind","contextdata":{},"faction_id":["fc_ironsultanate_fv_defendersoftheironwall"],"equipment_id":"eq_bannerofdesertwind","cost":30,"costtype":0,"limit":1},{"id":"rel_fc_eq_sultanategrandcannon_defenders","source":"core","tags":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_brazenbull"}]}},"name":"Sultanate Grand Cannon","contextdata":{},"faction_id":["fc_ironsultanate_fv_defendersoftheironwall"],"equipment_id":"eq_sultanategrandcannondefenders","cost":60,"costtype":0,"limit":2},{"id":"rel_fc_eq_explosivecharges","source":"core","tags":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_sultanatesapper"}]}},"name":"Explosive Charges","contextdata":{},"faction_id":["fc_ironsultanate_fv_defendersoftheironwall"],"equipment_id":"eq_explosivecharges","cost":35,"costtype":0,"limit":1},{"id":"rel_fc_eq_anqaguard","source":"core","tags":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_sultanatesapper"}]}},"name":"Anqa Guard","contextdata":{},"faction_id":["fc_ironsultanate_fv_defendersoftheironwall"],"equipment_id":"eq_anqaguard","cost":10,"costtype":0,"limit":0},{"id":"rel_fc_eq_boltactionrifle","source":"core","tags":{},"name":"Bolt-Action Rifle","contextdata":{},"faction_id":["fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon","fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce","fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction","fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty"],"equipment_id":"eq_boltactionrifle","cost":10,"costtype":0,"limit":0},{"id":"rel_fc_eq_semiautomaticrifle","source":"core","tags":{},"name":"Semi-Automatic Rifle","contextdata":{},"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce","fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction","fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty"],"equipment_id":"eq_semiautomaticrifle","cost":15,"costtype":0,"limit":0},{"id":"rel_fc_eq_automaticpistol","source":"core","tags":{},"name":"Automatic Pistol","contextdata":{},"faction_id":["fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction"],"equipment_id":"eq_automaticpistol","cost":20,"costtype":0,"limit":2},{"id":"rel_fc_eq_automaticpistol_antioch","source":"core","tags":{},"name":"Automatic Pistol","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce"],"equipment_id":"eq_automaticpistol","cost":20,"costtype":0,"limit":3},{"id":"rel_fc_eq_automaticpistol_prussia","source":"core","tags":{},"name":"Automatic Pistol","contextdata":{},"faction_id":["fc_newantioch_fc_stortruppenofthefreestateofprussia"],"equipment_id":"eq_automaticpistol","cost":20,"costtype":0,"limit":3},{"id":"rel_fc_eq_silenecedpistol","source":"core","tags":{},"name":"Silenced Pistol","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty"],"equipment_id":"eq_silenecedpistol","cost":15,"costtype":0,"limit":0},{"id":"rel_fc_eq_automaticrifle","source":"core","tags":{},"name":"Automatic Rifle","contextdata":{},"faction_id":["fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty"],"equipment_id":"eq_automaticrifle","cost":2,"costtype":1,"limit":2},{"id":"rel_fc_eq_automaticrifle_saintmethodius","source":"core","tags":{},"name":"Automatic Rifle","contextdata":{},"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius"],"equipment_id":"eq_automaticrifle","cost":40,"costtype":0,"limit":1},{"id":"rel_fc_eq_gasgrenades","source":"core","tags":{},"name":"Gas Grenades","contextdata":{},"faction_id":["fc_courtofthesevenheadedserpent","fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon","fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty"],"equipment_id":"eq_gasgrenades","cost":10,"costtype":0,"limit":0},{"id":"rel_fc_eq_parasitegrenades","source":"core","tags":{},"name":"Parasite Grenades","contextdata":{},"faction_id":["fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon","fc_cultoftheblackgrail_fv_thegreathunger"],"equipment_id":"eq_parasitegrenades","cost":15,"costtype":0,"limit":0},{"id":"rel_fc_eq_incendiarygrenades_unrestricted","source":"core","tags":{},"name":"Indenciary Grenades","contextdata":{},"faction_id":["fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction","fc_hereticlegion","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty"],"equipment_id":"eq_incendiarygrenades","cost":15,"costtype":0,"limit":0},{"id":"rel_fc_eq_incendiarygrenades_antioch","source":"core","tags":{},"name":"Indenciary Grenades","contextdata":{},"faction_id":["fc_courtofthesevenheadedserpent","fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce"],"equipment_id":"eq_incendiarygrenades","cost":15,"costtype":0,"limit":2},{"id":"rel_fc_eq_serpentassaultgun","source":"core","tags":{},"name":"Serpent Assault Gun","contextdata":{},"faction_id":["fc_courtofthesevenheadedserpent"],"equipment_id":"eq_serpentassaultgun","cost":50,"costtype":0,"limit":2},{"id":"rel_fc_eq_submachinegun","source":"core","tags":{},"name":"Submachine Gun","contextdata":{},"faction_id":["fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction","fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_trenchghosts"],"equipment_id":"eq_submachinegun","cost":2,"costtype":1,"limit":0},{"id":"rel_fc_eq_submachinegun_antioch","source":"core","tags":{},"name":"Submachine Gun","contextdata":{},"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce"],"equipment_id":"eq_submachinegun","cost":30,"costtype":0,"limit":2},{"id":"rel_fc_eq_submachinegun_alba","source":"core","tags":{},"name":"Submachine Gun","contextdata":{},"faction_id":["fc_newantioch_fv_kingdomofalbaassaultdetatchment"],"equipment_id":"eq_submachinegun","cost":30,"costtype":0,"limit":1},{"id":"rel_fc_eq_submachinegun_prussia","source":"core","tags":{},"name":"Submachine Gun","contextdata":{},"faction_id":["fc_newantioch_fc_stortruppenofthefreestateofprussia"],"equipment_id":"eq_submachinegun","cost":30,"costtype":0,"limit":4},{"id":"rel_fc_eq_submachinegun_saintmethodius","source":"core","tags":{},"name":"Submachine Gun","contextdata":{},"faction_id":["fc_trenchpilgrim_fv_warpilgimageofsaintmethodius"],"equipment_id":"eq_submachinegun","cost":30,"costtype":0,"limit":1},{"id":"rel_fc_eq_automaticshotgun","source":"core","tags":{},"name":"Automatic Shotgun","contextdata":{},"faction_id":["fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty"],"equipment_id":"eq_automaticshotgun","cost":15,"costtype":0,"limit":0},{"id":"rel_fc_eq_automaticshotgun_antioch","source":"core","tags":{},"name":"Automatic Shotgun","contextdata":{},"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce"],"equipment_id":"eq_automaticshotgun","cost":15,"costtype":0,"limit":2},{"id":"rel_fc_eq_automaticshotgun_alba","source":"core","tags":{},"name":"Automatic Shotgun","contextdata":{},"faction_id":["fc_newantioch_fv_kingdomofalbaassaultdetatchment"],"equipment_id":"eq_automaticshotgun","cost":15,"costtype":0,"limit":1},{"id":"rel_fc_eq_grenadelauncher","source":"core","tags":{},"name":"Grenade Launcher","contextdata":{},"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_papalstatesinterventionforce","fc_hereticlegion","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty"],"equipment_id":"eq_grenadelauncher","cost":30,"costtype":0,"limit":2},{"id":"rel_fc_eq_grenadelauncher_alba","source":"core","tags":{},"name":"Grenade Launcher","contextdata":{},"faction_id":["fc_newantioch_fv_kingdomofalbaassaultdetatchment"],"equipment_id":"eq_grenadelauncher","cost":30,"costtype":0,"limit":1},{"id":"rel_fc_eq_grenadelauncher_eire","source":"core","tags":{},"name":"Grenade Launcher","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_mechanisedheavyinfantry"}]}},"faction_id":["fc_newantioch_fc_eirerangers"],"equipment_id":"eq_grenadelauncher","cost":30,"costtype":0,"limit":2},{"id":"rel_fc_eq_gasgrenadelauncher","source":"core","tags":{},"name":"Gas Grenade Launcher","contextdata":{},"faction_id":["fc_hereticlegion_fv_knightsofavarice"],"equipment_id":"eq_gasgrenadelauncher","cost":30,"costtype":0,"limit":2},{"id":"rel_fc_eq_heavyflamethrower","source":"core","tags":{},"name":"Heavy Flamethrower","contextdata":{},"faction_id":["fc_hereticlegion","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty"],"equipment_id":"eq_heavyflamethrower","cost":55,"costtype":0,"limit":2},{"id":"rel_fc_eq_heavyflamethrower_court","source":"core","tags":{},"name":"Heavy Flamethrower","contextdata":{},"faction_id":["fc_courtofthesevenheadedserpent"],"equipment_id":"eq_heavyflamethrower","cost":55,"costtype":0,"limit":1},{"id":"rel_fc_eq_heavyflamethrower_antioch","source":"core","tags":{},"name":"Heavy Flamethrower","contextdata":{},"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fv_papalstatesinterventionforce"],"equipment_id":"eq_heavyflamethrower","cost":55,"costtype":0,"limit":1},{"id":"rel_fc_eq_heavyflamethrower_erie","source":"core","tags":{},"name":"Heavy Flamethrower","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_mechanisedheavyinfantry"}]}},"faction_id":["fc_newantioch_fc_eirerangers"],"equipment_id":"eq_heavyflamethrower","cost":55,"costtype":0,"limit":1},{"id":"rel_fc_eq_satchelcharge","source":"core","tags":{},"name":"Satchel Charge","contextdata":{},"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fv_papalstatesinterventionforce"],"equipment_id":"eq_satchelcharge","cost":15,"costtype":0,"limit":3},{"id":"rel_fc_eq_satchelcharge_eire","source":"core","tags":{},"name":"Satchel Charge","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_mechanisedheavyinfantry"},{"res_type":"id","value":"md_combatengineer"}]}},"faction_id":["fc_newantioch_fc_eirerangers"],"equipment_id":"eq_satchelcharge","cost":15,"costtype":0,"limit":4},{"id":"rel_fc_eq_antimaterialrifle","source":"core","tags":{},"name":"Anti Material Rifle","contextdata":{},"faction_id":["fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty"],"equipment_id":"eq_antimaterialrifle","cost":3,"costtype":1,"limit":1},{"id":"rel_fc_eq_sacrificialknife","source":"core","tags":{},"name":"Sacrificial Blade","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty"],"equipment_id":"eq_sacrificialknife","cost":23,"costtype":0,"limit":2},{"id":"rel_fc_eq_visceracannon","source":"core","tags":{},"name":"Viscera Cannon","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_cultoftheblackgrail"],"equipment_id":"eq_visceracannon","cost":50,"costtype":0,"limit":2},{"id":"rel_fc_eq_visceracannon_dirge","source":"core","tags":{},"name":"Viscera Cannon","contextdata":{},"faction_id":["fc_cultoftheblackgrail_fv_dirgeofthegreathegemon"],"equipment_id":"eq_visceracannon","cost":50,"costtype":0,"limit":3},{"id":"rel_fc_eq_hellblade","source":"core","tags":{},"name":"Hellblade","contextdata":{},"faction_id":["fc_hereticlegion","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty"],"equipment_id":"eq_hellblade","cost":1,"costtype":1,"limit":2},{"id":"rel_fc_eq_hellblade_court","source":"core","tags":{},"name":"Hellblade","contextdata":{},"faction_id":["fc_courtofthesevenheadedserpent"],"equipment_id":"eq_hellblade","cost":15,"costtype":0,"limit":3},{"id":"rel_fc_eq_malebranchesword","source":"core","tags":{},"name":"Malebranche Sword","contextdata":{},"faction_id":["fc_courtofthesevenheadedserpent"],"equipment_id":"eq_malebranchesword","cost":50,"costtype":0,"limit":1},{"id":"rel_fc_eq_tartarusclaws","source":"core","tags":{},"name":"Tartarus Claws","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_deathcommando"}]}},"faction_id":["fc_hereticlegion","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty"],"equipment_id":"eq_tartarusclaws","cost":15,"costtype":0,"limit":0},{"id":"rel_fc_eq_blasphemousstaff","source":"core","tags":{},"name":"Blasphemous Staff","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_hereticlegion","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty"],"equipment_id":"eq_blasphemousstaff","cost":2,"costtype":1,"limit":0},{"id":"rel_fc_eq_reinforcedarmour_heretic","source":"core","tags":{},"name":"Reinforced Armour","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_annointedheavyinfantry"},{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty"],"equipment_id":"eq_reinforcedarmour","cost":40,"costtype":0,"limit":0},{"id":"rel_fc_eq_compoundeyeshelmet","source":"core","tags":{},"name":"Compound Eyes Helmet","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_heraldofbeelzebub"},{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon"],"equipment_id":"eq_compoundeyeshelmet","cost":10,"costtype":0,"limit":3},{"id":"rel_fc_eq_graildevotee","source":"core","tags":{},"name":"Grail Devotee","contextdata":{"equipment_self_limit":{"maximum":[{"res_type":"self_rel","value":"","limit":1}]},"faction_equipment_count_group":{"filter":[{"id":["rel_fc_eq_graildevotee","rel_fc_eq_graildevotee_glory"]}],"number":4},"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_heraldofbeelzebub"},{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_thegreathunger","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon"],"equipment_id":"eq_graildevotee","cost":15,"costtype":0,"limit":2},{"id":"rel_fc_eq_graildevotee_glory","source":"core","tags":{},"name":"Grail Devotee","contextdata":{"equipment_self_limit":{"maximum":[{"res_type":"self_rel","value":"","limit":1}]},"faction_equipment_count_group":{"filter":[{"id":["rel_fc_eq_graildevotee_glory","rel_fc_eq_graildevotee_glory"]}],"number":4},"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_heraldofbeelzebub"},{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_thegreathunger","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon"],"equipment_id":"eq_graildevotee","cost":2,"costtype":1,"limit":2},{"id":"rel_fc_eq_reinforcedarmour_elite","source":"core","tags":{},"name":"Reinforced Armour","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_courtofthesevenheadedserpent","fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_thegreathunger","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon","fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction"],"equipment_id":"eq_reinforcedarmour","cost":40,"costtype":0,"limit":0},{"id":"rel_fc_eq_hellboundsoulcontract","source":"core","tags":{},"name":"Hellbound Soul Contract","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_heretictrooper"}]}},"faction_id":["fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_hereticnavalraidingparty"],"equipment_id":"eq_hellboundsoulcontract","cost":5,"costtype":0,"limit":3},{"id":"rel_fc_eq_unholytrinket","source":"core","tags":{},"name":"Unholy Trinket","contextdata":{},"faction_id":["fc_courtofthesevenheadedserpent","fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_thegreathunger","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon","fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty"],"equipment_id":"eq_unholytrinket","cost":15,"costtype":0,"limit":0},{"id":"rel_fc_eq_unholyrelic","source":"core","tags":{},"name":"Unholy Relic","contextdata":{},"faction_id":["fc_courtofthesevenheadedserpent","fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty"],"equipment_id":"eq_unholyrelic","cost":15,"costtype":0,"limit":0},{"id":"rel_fc_eq_unholyrelic_grail","source":"core","tags":{},"name":"Unholy Relic","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":[],"equipment_id":"eq_unholyrelic","cost":15,"costtype":0,"limit":0},{"id":"rel_fc_eq_incendiaryammunition","source":"core","tags":{},"name":"Incendiary Ammunition","contextdata":{},"faction_id":["fc_courtofthesevenheadedserpent","fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction","fc_hereticlegion","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty"],"equipment_id":"eq_incendiaryammunition","cost":15,"costtype":0,"limit":1},{"id":"rel_fc_eq_infernalbrandmark","source":"core","tags":{},"name":"Infernal Brand Mark","contextdata":{},"faction_id":["fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_hereticnavalraidingparty"],"equipment_id":"eq_infernalbrandmark","cost":5,"costtype":0,"limit":0},{"id":"rel_fc_eq_musicalinstrument","source":"core","tags":{},"name":"Musical Instrument","contextdata":{},"faction_id":["fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut","fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction","fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fv_papalstatesinterventionforce","fc_courtofthesevenheadedserpent","fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon","fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty"],"equipment_id":"eq_musicalinstrument","cost":15,"costtype":0,"limit":1},{"id":"rel_fc_eq_tormentorchain","source":"core","tags":{"exploration_only":true},"name":"Tormentor Chain","contextdata":{},"faction_id":["fc_hereticlegion","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty"],"equipment_id":"eq_tormentorchain","cost":3,"costtype":1,"limit":2},{"id":"rel_fc_eq_demonicauragrenade","source":"core","tags":{"exploration_only":true},"name":"Demonic Aura Grenade","contextdata":{},"faction_id":["fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty"],"equipment_id":"eq_demonicauragrenade","cost":3,"costtype":1,"limit":1},{"id":"rel_fc_eq_themarkofcain","source":"core","tags":{"exploration_only":true},"name":"Mark of Cain","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty"],"equipment_id":"eq_themarkofcain","cost":4,"costtype":1,"limit":1},{"id":"rel_fc_eq_battlefieldtitle","source":"core","tags":{"exploration_only":true},"name":"Battlefield Title","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_courtofthesevenheadedserpent","fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce","fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty"],"equipment_id":"eq_battlefieldtitle","cost":5,"costtype":1,"limit":1},{"id":"rel_fc_eq_bookofbattleprayers","source":"core","tags":{"exploration_only":true},"name":"Book of Battle Prayers","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce"],"equipment_id":"eq_bookofbattleprayers","cost":7,"costtype":1,"limit":1},{"id":"rel_fc_eq_ducalwingedarmour","source":"core","tags":{"exploration_only":true},"name":"Ducal Winged Armour","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"equipment","value":"eq_knighthood"},{"res_type":"equipment","value":"eq_battlefieldtitle"}]}},"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce"],"equipment_id":"eq_ducalwingedarmour","cost":8,"costtype":1,"limit":1},{"id":"rel_fc_eq_greatbannerofnewantioch","source":"core","tags":{"exploration_only":true},"name":"Great Banner of New Antioch","contextdata":{},"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce"],"equipment_id":"eq_greatbannerofnewantioch","cost":12,"costtype":1,"limit":1},{"id":"rel_fc_eq_executionersaxe","source":"core","tags":{"exploration_only":true},"name":"Executioner\'s Axe","contextdata":{},"faction_id":["fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty"],"equipment_id":"eq_executionersaxe","cost":6,"costtype":1,"limit":1},{"id":"rel_fc_eq_armourofcobar","source":"core","tags":{"exploration_only":true},"name":"Armour of Cobar","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_trenchghosts","fc_hereticlegion_fv_hereticnavalraidingparty"],"equipment_id":"eq_armourofcobar","cost":8,"costtype":1,"limit":1},{"id":"rel_fc_eq_submachinegun_navalraidingparty","source":"core","tags":{},"name":"Submachine Gun","contextdata":{},"faction_id":["fc_hereticlegion_fv_hereticnavalraidingparty"],"equipment_id":"eq_submachinegun","cost":25,"costtype":0,"limit":0},{"id":"rel_fc_eq_tankpalanquin","source":"core","tags":{},"name":"Tank Palanquin","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_hereticpriest"}]}},"faction_id":["fc_hereticlegion_fv_trenchghosts"],"equipment_id":"eq_tankpalanquin","cost":60,"costtype":0,"limit":1},{"id":"rel_fc_eq_tarnishedarmour","source":"core","tags":{},"name":"Tarnished Armour","contextdata":{},"faction_id":["fc_hereticlegion_fv_knightsofavarice"],"equipment_id":"eq_tarnishedarmour","cost":25,"costtype":0,"limit":1},{"id":"rel_fc_eq_standardofmammon","source":"core","tags":{},"name":"Standard of Mammon","contextdata":{},"faction_id":["fc_hereticlegion_fv_knightsofavarice"],"equipment_id":"eq_standardofmammon","cost":25,"costtype":0,"limit":1},{"id":"rel_fc_eq_goldencalfaltar","source":"core","tags":{},"name":"Golden Calf Altar","contextdata":{},"faction_id":["fc_hereticlegion_fv_knightsofavarice"],"equipment_id":"eq_goldencalfaltar","cost":20,"costtype":0,"limit":3},{"id":"rel_fc_eq_coinhammer","source":"core","tags":{},"name":"Coin Hammer","contextdata":{},"faction_id":["fc_hereticlegion_fv_knightsofavarice"],"equipment_id":"eq_coinhammer","cost":20,"costtype":0,"limit":2},{"id":"rel_fc_eq_warcross","source":"core","tags":{},"name":"War Cross","contextdata":{},"faction_id":["fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction"],"equipment_id":"eq_warcross","cost":5,"costtype":0,"limit":0},{"id":"rel_fc_eq_puntgun","source":"core","tags":{},"name":"Punt Gun","contextdata":{},"faction_id":["fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague"],"equipment_id":"eq_puntgun","cost":20,"costtype":0,"limit":2},{"id":"rel_fc_eq_puntgun_sacredaffliction","source":"core","tags":{},"name":"Punt Gun","contextdata":{},"faction_id":["fc_trenchpilgrim_fv_processionofthesacredaffliction"],"equipment_id":"eq_puntgun","cost":20,"costtype":0,"limit":1},{"id":"rel_fc_eq_scourgewhipflail","source":"core","tags":{},"name":"Scourge / Whip / Flail","contextdata":{},"faction_id":["fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction"],"equipment_id":"eq_scourgewhipflail","cost":5,"costtype":0,"limit":0},{"id":"rel_fc_eq_antitankhammer","source":"core","tags":{},"name":"Anti-Tank Hammer","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague"],"equipment_id":"eq_antitankhammer","cost":35,"costtype":0,"limit":3},{"id":"rel_fc_eq_antitankhammer_sacredaffliction","source":"core","tags":{},"name":"Anti-Tank Hammer","contextdata":{},"faction_id":["fc_trenchpilgrim_fv_processionofthesacredaffliction"],"equipment_id":"eq_antitankhammer","cost":35,"costtype":0,"limit":3},{"id":"rel_fc_eq_misericordia","source":"core","tags":{},"name":"Misericordia","contextdata":{},"faction_id":["fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction"],"equipment_id":"eq_misericordia","cost":15,"costtype":0,"limit":1},{"id":"rel_fc_eq_holyiconshield","source":"core","tags":{},"name":"Holy-Icon Shield","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague"],"equipment_id":"eq_holyiconshield","cost":2,"costtype":1,"limit":0},{"id":"rel_fc_eq_holyiconshield_sacredaffliction","source":"core","tags":{},"name":"Holy-Icon Shield","contextdata":{},"faction_id":["fc_trenchpilgrim_fv_processionofthesacredaffliction"],"equipment_id":"eq_holyiconshield","cost":20,"costtype":0,"limit":0},{"id":"rel_fc_eq_holyiconarmour_sacredaffliction","source":"core","tags":{},"name":"Holy-Icon Armour","contextdata":{},"faction_id":["fc_trenchpilgrim_fv_processionofthesacredaffliction"],"equipment_id":"eq_holyiconarmour","cost":30,"costtype":0,"limit":0},{"id":"rel_fc_eq_blessedicon","source":"core","tags":{},"name":"Blessed Icon","contextdata":{},"faction_id":["fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction"],"equipment_id":"eq_blessedicon","cost":15,"costtype":0,"limit":0},{"id":"rel_fc_eq_fieldshrine","source":"core","tags":{},"name":"Field Shrine","contextdata":{},"faction_id":["fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_thegreathunger","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon","fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce","fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction"],"equipment_id":"eq_fieldshrine","cost":2,"costtype":1,"limit":0},{"id":"rel_fc_eq_martyrdompills","source":"core","tags":{},"name":"Martyrdom Pills","contextdata":{},"faction_id":["fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction"],"equipment_id":"eq_martyrdompills","cost":20,"costtype":0,"limit":3},{"id":"rel_fc_eq_martyrdompills_antioch","source":"core","tags":{},"name":"Martyrdom Pills","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce"],"equipment_id":"eq_martyrdompills","cost":1,"costtype":1,"limit":2},{"id":"rel_fc_eq_holygrenade","source":"core","tags":{"exploration_only":true},"name":"Holy Grenade","contextdata":{},"faction_id":["fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction"],"equipment_id":"eq_holygrenade","cost":2,"costtype":1,"limit":3},{"id":"rel_fc_eq_donkeysjawbone","source":"core","tags":{"exploration_only":true},"name":"Donkey\'s Jawbone","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction"],"equipment_id":"eq_donkeysjawbone","cost":4,"costtype":1,"limit":1},{"id":"rel_fc_eq_hornofjoshua","source":"core","tags":{"exploration_only":true},"name":"Horn of Joshua","contextdata":{},"faction_id":["fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction"],"equipment_id":"eq_hornofjoshua","cost":9,"costtype":1,"limit":1},{"id":"rel_fc_eq_trenchdog","source":"core","tags":{"exploration_only":true},"name":"Trench Dog","contextdata":{"faction_equipment_count_group":{"filter":[{"id":["rel_fc_eq_trenchdog","rel_fc_eq_trenchdog_guarddog","rel_fc_eq_trenchdog_mercydog","rel_fc_eq_trenchdog_martyrdomdog","rel_fc_eq_trenchdog_hellhound"]}],"number":1}},"faction_id":["fc_newantioch_fv_redbrigade","fc_courtofthesevenheadedserpent","fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_thegreathunger","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon","fc_newantioch","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce","fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction","fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_hereticnavalraidingparty","fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_trenchdog","cost":1,"costtype":1,"limit":1},{"id":"rel_fc_eq_trenchdog_guarddog","source":"core","tags":{"exploration_only":true},"name":"Trench Dog (Guard Dog)","contextdata":{"faction_equipment_count_group":{"filter":[{"id":["rel_fc_eq_trenchdog","rel_fc_eq_trenchdog_guarddog","rel_fc_eq_trenchdog_mercydog","rel_fc_eq_trenchdog_martyrdomdog","rel_fc_eq_trenchdog_hellhound"]}],"number":1}},"faction_id":["fc_newantioch_fv_redbrigade","fc_newantioch","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce","fc_trenchpilgrim","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction","fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_hereticnavalraidingparty","fc_ironsultanate_fv_defendersoftheironwall","fc_ironsultanate","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_fidaiofalamut"],"equipment_id":"eq_trenchdog_guarddog","cost":2,"costtype":1,"limit":1},{"id":"rel_fc_eq_trenchdog_mercydog","source":"core","tags":{"exploration_only":true},"name":"Trench Dog (Mercy Dog)","contextdata":{"faction_equipment_count_group":{"filter":[{"id":["rel_fc_eq_trenchdog","rel_fc_eq_trenchdog_guarddog","rel_fc_eq_trenchdog_mercydog","rel_fc_eq_trenchdog_martyrdomdog","rel_fc_eq_trenchdog_hellhound"]}],"number":1}},"faction_id":["fc_newantioch_fv_redbrigade","fc_newantioch","fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch_fv_papalstatesinterventionforce"],"equipment_id":"eq_trenchdog_mercydog","cost":2,"costtype":1,"limit":1},{"id":"rel_fc_eq_trenchdog_martyrdomdog","source":"core","tags":{"exploration_only":true},"name":"Trench Dog (Martyrdom Dog)","contextdata":{"faction_equipment_count_group":{"filter":[{"id":["rel_fc_eq_trenchdog","rel_fc_eq_trenchdog_guarddog","rel_fc_eq_trenchdog_mercydog","rel_fc_eq_trenchdog_martyrdomdog","rel_fc_eq_trenchdog_hellhound"]}],"number":1}},"faction_id":["fc_trenchpilgrim","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction"],"equipment_id":"eq_trenchdog_martyrdomdog","cost":2,"costtype":1,"limit":1},{"id":"rel_fc_eq_trenchdog_hellhound","source":"core","tags":{"exploration_only":true},"name":"Trench Dog (Hellhound)","contextdata":{"faction_equipment_count_group":{"filter":[{"id":["rel_fc_eq_trenchdog","rel_fc_eq_trenchdog_guarddog","rel_fc_eq_trenchdog_mercydog","rel_fc_eq_trenchdog_martyrdomdog","rel_fc_eq_trenchdog_hellhound"]}],"number":1}},"faction_id":["fc_courtofthesevenheadedserpent","fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_thegreathunger","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon","fc_hereticlegion","fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion_fv_hereticnavalraidingparty"],"equipment_id":"eq_trenchdog_hellhound","cost":2,"costtype":1,"limit":1},{"id":"rel_fc_eq_martyrdomdevice","source":"core","tags":{},"name":"Martyrdom Device","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_ecclesiasticprisoner"}]}},"faction_id":["fc_trenchpilgrim","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction"],"equipment_id":"eq_martyrdomdevice","cost":35,"costtype":0,"limit":4},{"id":"rel_fc_eq_sacrificiallamb","source":"core","tags":{},"name":"Sacrificial Lamb","contextdata":{},"faction_id":["fc_trenchpilgrim_fv_cavalcadeofthetenthplague"],"equipment_id":"eq_sacrificiallamb","cost":5,"costtype":0,"limit":0},{"id":"rel_fc_methodius_eq_catherinewheel","source":"core","tags":{"methodius":true},"name":"Catherine Wheel","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_anchoriteshrine_saintmethodius"}]}},"faction_id":["fc_trenchpilgrim_fv_warpilgimageofsaintmethodius"],"equipment_id":"eq_catherinewheel","cost":0,"costtype":0,"limit":0},{"id":"rel_fc_methodius_eq_heavyflamethrower","source":"core","tags":{"methodius":true},"name":"Heavy Flamethrower","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_anchoriteshrine_saintmethodius"}]},"override_stats":{"stats":{"hands_ranged":1}}},"faction_id":["fc_trenchpilgrim_fv_warpilgimageofsaintmethodius"],"equipment_id":"eq_heavyflamethrower","cost":45,"costtype":0,"limit":0},{"id":"rel_fc_methodius_eq_antimaterialrifle","source":"core","tags":{"methodius":true},"name":"Anti-Materiel Rifle","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_anchoriteshrine_saintmethodius"}]},"override_stats":{"stats":{"hands_ranged":1}}},"faction_id":["fc_trenchpilgrim_fv_warpilgimageofsaintmethodius"],"equipment_id":"eq_antimaterialrifle","cost":40,"costtype":0,"limit":0},{"id":"rel_fc_methodius_eq_puntgun","source":"core","tags":{"methodius":true},"name":"Punt Gun","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_anchoriteshrine_saintmethodius"}]},"override_stats":{"stats":{"hands_ranged":1}}},"faction_id":["fc_trenchpilgrim_fv_warpilgimageofsaintmethodius"],"equipment_id":"eq_puntgun","cost":10,"costtype":0,"limit":0},{"id":"rel_fc_methodius_eq_trenchmortar","source":"core","tags":{"methodius":true},"name":"Trench Mortar","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_anchoriteshrine_saintmethodius"}]},"override_stats":{"stats":{"hands_ranged":1}}},"faction_id":["fc_trenchpilgrim_fv_warpilgimageofsaintmethodius"],"equipment_id":"eq_trenchmortar","cost":40,"costtype":0,"limit":0},{"id":"rel_fc_methodius_eq_autocannon","source":"core","tags":{"methodius":true},"name":"Autocannon","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_anchoriteshrine_saintmethodius"}]},"override_stats":{"stats":{"hands_ranged":1}}},"faction_id":["fc_trenchpilgrim_fv_warpilgimageofsaintmethodius"],"equipment_id":"eq_autocannon","cost":55,"costtype":0,"limit":0},{"id":"rel_fc_methodius_eq_gascenser","source":"core","tags":{"methodius":true},"name":"Gas Censer","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_anchoriteshrine_saintmethodius"}]},"override_stats":{"stats":{"hands_ranged":1}}},"faction_id":["fc_trenchpilgrim_fv_warpilgimageofsaintmethodius"],"equipment_id":"eq_gascenser","cost":50,"costtype":0,"limit":0},{"id":"rel_fc_methodius_eq_gasfilter","source":"core","tags":{"methodius":true},"name":"Gas Filter","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_anchoriteshrine_saintmethodius"}]}},"faction_id":["fc_trenchpilgrim_fv_warpilgimageofsaintmethodius"],"equipment_id":"eq_gasfilter","cost":5,"costtype":0,"limit":0},{"id":"rel_fc_methodius_eq_holydieselengine","source":"core","tags":{"methodius":true},"name":"Holy Diesel Engine","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_anchoriteshrine_saintmethodius"}]}},"faction_id":["fc_trenchpilgrim_fv_warpilgimageofsaintmethodius"],"equipment_id":"eq_holydieselengine","cost":10,"costtype":0,"limit":0},{"id":"rel_fc_methodius_eq_sacredgeometry","source":"core","tags":{"methodius":true},"name":"Sacred Geometry","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_anchoriteshrine_saintmethodius"}]}},"faction_id":["fc_trenchpilgrim_fv_warpilgimageofsaintmethodius"],"equipment_id":"eq_sacredgeometry","cost":10,"costtype":0,"limit":1},{"id":"rel_fc_methodius_eq_grandanchorite","source":"core","tags":{"methodius":true},"name":"Grand Anchorite","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_anchoriteshrine_saintmethodius"}]}},"faction_id":["fc_trenchpilgrim_fv_warpilgimageofsaintmethodius"],"equipment_id":"eq_grandanchorite","cost":15,"costtype":0,"limit":1},{"id":"rel_fc_methodius_eq_pistonlegs","source":"core","tags":{"methodius":true},"name":"Piston Legs","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_anchoriteshrine_saintmethodius"}]}},"faction_id":["fc_trenchpilgrim_fv_warpilgimageofsaintmethodius"],"equipment_id":"eq_pistonlegs","cost":10,"costtype":0,"limit":0},{"id":"rel_fc_methodius_eq_hallowedanchorite","source":"core","tags":{"methodius":true},"name":"Hallowed Anchorite","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_anchoriteshrine_saintmethodius"}]}},"faction_id":["fc_trenchpilgrim_fv_warpilgimageofsaintmethodius"],"equipment_id":"eq_hallowedanchorite","cost":10,"costtype":0,"limit":1},{"id":"rel_fc_methodius_eq_wrathfulcherubface","source":"core","tags":{"methodius":true},"name":"Wrathful Cherub Face","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_anchoriteshrine_saintmethodius"}]}},"faction_id":["fc_trenchpilgrim_fv_warpilgimageofsaintmethodius"],"equipment_id":"eq_wrathfulcherubface","cost":20,"costtype":0,"limit":0},{"id":"rel_fc_papalstates_eq_supremepontiffcrucifix","source":"core","tags":{},"name":"Supreme Pontiff Crucifix","contextdata":{},"faction_id":["fc_newantioch_fv_papalstatesinterventionforce"],"equipment_id":"eq_supremepontiffcrucifix","cost":3,"costtype":1,"limit":1},{"id":"rel_fc_eq_carnyx","source":"core","tags":{},"name":"Carnyx","contextdata":{},"faction_id":["fc_newantioch_fc_eirerangers"],"equipment_id":"eq_carnyx","cost":15,"costtype":0,"limit":1},{"id":"rel_fc_eq_musicalinstrument_bagpipes","source":"core","tags":{},"name":"Musical Instrument","contextdata":{},"faction_id":["fc_newantioch_fv_kingdomofalbaassaultdetatchment"],"equipment_id":"eq_bagpipes","cost":15,"costtype":0,"limit":1},{"id":"rel_fc_eq_lochaberaxe","source":"core","tags":{},"name":"Lochaber Axe","contextdata":{},"faction_id":["fc_newantioch_fv_kingdomofalbaassaultdetatchment"],"equipment_id":"eq_lochaberaxe","cost":20,"costtype":0,"limit":0},{"id":"rel_fc_eq_dumdumbullets","source":"core","tags":{},"name":"Dum-Dum Bullets","contextdata":{},"faction_id":["fc_newantioch_fv_kingdomofalbaassaultdetatchment"],"equipment_id":"eq_dumdumbullets","cost":5,"costtype":0,"limit":3},{"id":"rel_fc_eq_shotel","source":"core","tags":{},"name":"Shotel","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"upgrade","value":"up_chewa"},{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_newantioch_fv_expeditionaryforcedofabyssinia"],"equipment_id":"eq_shotel","cost":5,"costtype":0,"limit":0},{"id":"rel_fc_eq_holywateroflalibela","source":"core","tags":{},"name":"Holy Water of Lalibela","contextdata":{},"faction_id":["fc_newantioch_fv_expeditionaryforcedofabyssinia"],"equipment_id":"eq_holywateroflalibela","cost":3,"costtype":0,"limit":5},{"id":"rel_fc_eq_anfarro","source":"core","tags":{},"name":"Anfarro (Warrior\'s Crown)","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"upgrade","value":"up_chewa"},{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_newantioch_fv_expeditionaryforcedofabyssinia"],"equipment_id":"eq_anfarro","cost":10,"costtype":0,"limit":6},{"id":"rel_fc_eq_tabot","source":"core","tags":{},"name":"Tabot","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_trenchcleric_ethiopia"}]}},"faction_id":["fc_newantioch_fv_expeditionaryforcedofabyssinia"],"equipment_id":"eq_tabot","cost":4,"costtype":1,"limit":1},{"id":"rel_fc_eq_cupoffilth","source":"core","tags":{"exploration_only":true},"name":"Cup of Filth","contextdata":{},"faction_id":["fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_thegreathunger","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon"],"equipment_id":"eq_cupoffilth","cost":4,"costtype":1,"limit":1},{"id":"rel_fc_eq_locustspitter","source":"core","tags":{"exploration_only":true},"name":"Locust Spitter","contextdata":{},"faction_id":["fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon","fc_cultoftheblackgrail_fv_thegreathunger"],"equipment_id":"eq_locustspitter","cost":6,"costtype":1,"limit":1},{"id":"rel_fc_eq_armourofthefly","source":"core","tags":{"exploration_only":true},"name":"Armour of the Fly","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_thegreathunger","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon"],"equipment_id":"eq_armourofthefly","cost":7,"costtype":1,"limit":1},{"id":"rel_fc_eq_beelzebubsembrace","source":"core","tags":{"exploration_only":true},"name":"Beelzebub\'s Embrace","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_thegreathunger","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon"],"equipment_id":"eq_beelzebubsembrace","cost":12,"costtype":1,"limit":1},{"id":"rel_fc_eq_crownofhellfire","source":"core","tags":{},"name":"Crown of Hellfire","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"},{"res_type":"id","value":"md_pitlocust"}]}},"faction_id":["fc_courtofthesevenheadedserpent"],"equipment_id":"eq_crownofhellfire","cost":15,"costtype":0,"limit":0},{"id":"rel_fc_eq_restrainingmuzzle","source":"core","tags":{},"name":"Restraining Muzzle","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_yokefiend"}]}},"faction_id":["fc_courtofthesevenheadedserpent"],"equipment_id":"eq_restrainingmuzzle","cost":10,"costtype":0,"limit":3},{"id":"rel_fc_eq_restrainingmuzzle_glory","source":"core","tags":{},"name":"Restraining Muzzle","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_yokefiend"}]}},"faction_id":["fc_courtofthesevenheadedserpent"],"equipment_id":"eq_restrainingmuzzle","cost":1,"costtype":1,"limit":3},{"id":"rel_fc_eq_cruelhelmet","source":"core","tags":{"exploration_only":true},"name":"Cruel Helmet","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_wretched_court"}]}},"faction_id":["fc_courtofthesevenheadedserpent"],"equipment_id":"eq_cruelhelmet","cost":2,"costtype":1,"limit":2},{"id":"rel_fc_eq_bestialskincloak","source":"core","tags":{"exploration_only":true},"name":"Beastial Skin Cloak","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_courtofthesevenheadedserpent"],"equipment_id":"eq_bestialskincloak","cost":6,"costtype":1,"limit":1},{"id":"rel_fc_eq_koraktorthegreattomeofhell","source":"core","tags":{"exploration_only":true},"name":"Koraktor, The Great Tome of Hell","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_sorcerer"}]}},"faction_id":["fc_courtofthesevenheadedserpent"],"equipment_id":"eq_koraktorthegreattomeofhell","cost":8,"costtype":1,"limit":1},{"id":"rel_fc_eq_lordshipofthisworld","source":"core","tags":{"exploration_only":true},"name":"Lordship of this World","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"id","value":"md_sorcerer"},{"res_type":"id","value":"md_praetor"}]}},"faction_id":["fc_courtofthesevenheadedserpent"],"equipment_id":"eq_lordshipofthisworld","cost":9,"costtype":1,"limit":1},{"id":"rel_fc_eq_pieceofsilver","source":"core","tags":{"exploration_only":true},"name":"Piece of Silver","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_courtofthesevenheadedserpent"],"equipment_id":"eq_pieceofsilver","cost":12,"costtype":1,"limit":1},{"id":"rel_fc_eq_redbanner","source":"westfalia","tags":{},"name":"Red Banner","contextdata":{},"faction_id":["fc_newantioch_fv_redbrigade"],"equipment_id":"eq_redbanner","cost":2,"costtype":1,"limit":1},{"id":"rel_fc_eq_bloodcloak","source":"westfalia","tags":{},"name":"Blood Cloak","contextdata":{},"faction_id":["fc_newantioch_fv_redbrigade"],"equipment_id":"eq_bloodcloak","cost":5,"costtype":0,"limit":4},{"id":"rel_fc_eq_saintsreliquary","source":"core","tags":{},"name":"Saints Reliquary","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":[],"equipment_id":"eq_saintsreliquary","cost":0,"costtype":1,"limit":1},{"id":"rel_fc_eq_faithfulskull","source":"core","tags":{},"name":"Saint\'s Skull of the Faithful","contextdata":{},"faction_id":[],"equipment_id":"eq_faithfulskull","cost":0,"costtype":1,"limit":1},{"id":"rel_fc_eq_hellskull","source":"core","tags":{},"name":"Saint\'s Skull of Hell","contextdata":{},"faction_id":[],"equipment_id":"eq_hellskull","cost":0,"costtype":1,"limit":1},{"id":"rel_fc_eq_samsonshair","source":"core","tags":{},"name":"Lock of Samson\'s Hair","contextdata":{},"faction_id":[],"equipment_id":"eq_lockofsamsonshair","cost":0,"costtype":1,"limit":1},{"id":"rel_fc_eq_blackspotrifle","source":"creature_caster","tags":{},"name":"Black Spot Rifle","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}]}},"faction_id":["fc_cultoftheblackgrail_fv_thegreathunger"],"equipment_id":"eq_blackspotrifle","cost":25,"costtype":0,"limit":2},{"id":"rel_fc_eq_butcherbayonet","source":"creature_caster","tags":{},"name":"Butcher Bayonet","contextdata":{"faction_eq_restriction":{"permitted":[{"res_type":"keyword","value":"kw_elite"}],"required":[{"res_type":"equipment_keyword","value":"kw_bayonetlug"}]}},"faction_id":["fc_cultoftheblackgrail_fv_thegreathunger"],"equipment_id":"eq_butcherbayonet","cost":15,"costtype":0,"limit":2},{"id":"rel_fc_eq_devouringjaws","source":"creature_caster","tags":{},"name":"Devouring Jaws","contextdata":{},"faction_id":["fc_cultoftheblackgrail_fv_thegreathunger"],"equipment_id":"eq_devouringjaws","cost":2,"costtype":1,"limit":2},{"id":"rel_fc_eq_graspingmaw","source":"creature_caster","tags":{},"name":"Grasping Maw","contextdata":{},"faction_id":["fc_cultoftheblackgrail_fv_thegreathunger"],"equipment_id":"eq_graspingmaw","cost":15,"costtype":0,"limit":0},{"id":"rel_fc_eq_pestilentfang","source":"creature_caster","tags":{},"name":"Pestilent Fang","contextdata":{},"faction_id":["fc_cultoftheblackgrail_fv_thegreathunger"],"equipment_id":"eq_pestilentfang","cost":15,"costtype":0,"limit":2}]'),k=JSON.parse('[{"id":"sc_claimnomansland","source":"core","tags":{"desc_type":"paragraph","url_custom":"claim-no-mans-land"},"name":"Claim No Man\'s Land","img_link":"73528","description":[{"tags":{"desc_type":"default"},"content":"Battle for control over a stretch of land and drive away your foes."}],"forces":{"even_match":true,"description":[{"tags":{"desc_type":"paragraph"},"content":"No special restrictions apply to the models the players can include in their Forces in this scenario."}]},"battlefield":{"field_size":[{"tags":{"desc_type":"paragraph"},"content":"The players roll-off and the winner sets up the terrain for the game. This scenario uses the No Man\u2019s Land battlefield archetype."}],"extra_features":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Objective Markers"}]},{"tags":{"desc_type":"paragraph"},"content":"The Markers shown on the map represent important objectives. When you set up the terrain pieces for this scenario, you must place the first five terrain pieces so that they are covering the locations where the Objective Markers will be set up. In addition, you must use Ruined Building terrain pieces if you have them available. The Objective Markers are set up after all of the terrain. Place each Objective Marker anywhere on the terrain piece that covers its starting position; the whole of the terrain piece is treated as the Objective for this scenario , and cannot be destroyed or removed for any reason."},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Controlling Objectives"}]},{"tags":{"desc_type":"paragraph"},"content":"A player controls an Objective terrain piece if there are more friendly models on, in, or within 1\\" of the terrain piece than there are enemy models. If one player has any models on the terrain piece and their opponent does not, then the player with models on the terrain piece controls it even if their opponent has more models within 1\\" of the Objective."}]},"infiltrators":{"allowed":0,"description":[{"tags":{"desc_type":"paragraph"},"content":"Infiltrators must deploy normally (they cannot use their special deployment rules)."}]},"deployment":{"staggered":false,"description":[{"tags":{"desc_type":"paragraph"},"content":"The players roll-off. The winner of the roll-off chooses which Deployment Zone will be theirs. The other Deployment Zone is their opponent\u2019s. The players then alternate deploying their models one at a time, starting with the player who has more models in their Warband (roll-off if both players have the same number of models). Models must be set up wholly within their own Deployment Zone. If a player runs out of models to set up, the other player sets up all their remaining models, one after another until they have none left. Once the players have set up their models, deployment ends and the game begins."}]},"battle_length":{"min":4,"max":4,"description":[{"tags":{"desc_type":"paragraph"},"content":"This scenario lasts four Turns."}]},"victory_conditions":{"description":[{"tags":{"desc_type":"paragraph"},"content":"A player wins this scenario immediately if there are no enemy models on the battlefield, or if the opposing Warband flees (typically due to failing a Morale Check). Otherwise, the player with more Victory Points at the end of the game is the winner."},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"At the end of each Turn, each player scores 2 VPs for each Objective they control."},{"tags":{"desc_type":"default"},"content":"At the end of the game each player scores 1 VP for each Glorious Deed they completed."}]}]},"glorious_deeds":{"description":[],"deeds":["gd_sniper","gd_lordofwar","gd_castthemdown","gd_bloodletting","gd_holdyourground","gd_suicidalbravery","gd_resistandbite"],"optional_deeds":[]},"special_rules":[]},{"id":"sc_relichunt","source":"core","tags":{"desc_type":"paragraph","url_custom":"relic-hunt"},"name":"Relic Hunt","img_link":"73535","description":[{"tags":{"desc_type":"paragraph"},"content":"Find and secure sacred relics for the glory of your Patron."}],"forces":{"even_match":true,"description":[{"tags":{"desc_type":"paragraph"},"content":"No special restrictions apply to the models the players can include in their Forces in this scenario."}]},"battlefield":{"field_size":[{"tags":{"desc_type":"paragraph"},"content":"The players roll-off and the winner sets up the terrain for the game. This scenario uses the No Man\u2019s Land battlefield archetype."}],"extra_features":[]},"infiltrators":{"allowed":0,"description":[{"tags":{"desc_type":"paragraph"},"content":"Infiltrators must deploy normally (they cannot use their special deployment rules)."}]},"deployment":{"staggered":true,"description":[{"tags":{"desc_type":"paragraph"},"content":"The players roll-off. The winner of the roll-off chooses which Deployment Zone will be theirs. The other Deployment Zone is their opponent\u2019s. The players then alternate deploying their models one at a time, starting with the player who has more models in their Warband (roll-off if both players have the same number of models). Each player may deploy a maximum of six models. Models mounted on bases 40mm or larger count as 2 models for this purpose. Any models that cannot be deployed are available as reinforcements. Models must be set up wholly within their own Deployment Zone. If a player runs out of models to set up, the other player sets up all their remaining models, one after another, until they have none left. Once the players have set up their models, deployment ends, and the game begins."}]},"battle_length":{"min":4,"max":4,"description":[{"tags":{"desc_type":"paragraph"},"content":"The battle lasts for four turns."}]},"victory_conditions":{"description":[{"tags":{"desc_type":"paragraph"},"content":"A player wins this scenario immediately if there are no enemy models on the battlefield after any reinforcements have been deployed. Otherwise, the player with more Victory Points at the end of the game wins."},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"During turns 1 to 3 each player scores 1 VP for each Reliquary claimed by a model from their Warband, up to a maximum of 4 VPs per turn (they can claim more Reliquaries to deny the enemy the chance of claiming them)."},{"tags":{"desc_type":"default"},"content":"During turn 4 each player scores 2 VPs for each Reliquary that is claimed by a model from their Warband."},{"tags":{"desc_type":"default"},"content":"At the end of the game each player scores 1 VP for each Glorious Deed they completed."}]}]},"glorious_deeds":{"description":[],"deeds":["gd_sniper","gd_castthemdown","gd_bloodsacrifice","gd_resistandbite","gd_relichunter","gd_protecttherelic"],"optional_deeds":[]},"special_rules":["sr_tothedeath","sr_reliquarymarkers","sr_reinforcement"]},{"id":"sc_huntforheroes","source":"core","tags":{"desc_type":"paragraph","url_custom":"hunt-for-heroes"},"name":"Hunt for Heroes","img_link":"73534","description":[{"tags":{"desc_type":"default"},"content":"Hunt down the enemy leaders while protecting your own."}],"forces":{"even_match":true,"description":[{"tags":{"desc_type":"paragraph"},"content":"In this scenario, both players must include as many ELITE models from their Warband as possible.","glossary":[{"val":"ELITE","id":"kw_elite"}]}]},"battlefield":{"field_size":[{"tags":{"desc_type":"paragraph"},"content":"The players roll-off and the winner sets up the terrain for the game. This scenario uses the No Man\u2019s Land battlefield archetype."}],"extra_features":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Objective Markers"}]},{"tags":{"desc_type":"paragraph"},"content":"The Markers shown on the map with a white cross represent important objectives. When you set up the terrain pieces for this scenario, you must place the first four terrain pieces so that they are covering the locations where the Objective Markers will be set up. In addition, you must use Ruined Building terrain pieces if you have them available. The Objective Markers are set up after all of the terrain. Place the Objective Marker anywhere on the terrain piece that covers its starting position; the whole of the terrain piece is treated as the Objective for this scenario. A player controls an Objective terrain piece if there are more friendly models on, in, or within 1\\" of the terrain piece than there are enemy models."},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Defence Works Markers"}]},{"tags":{"desc_type":"paragraph"},"content":"The Markers shown on the map that have a G or an M represent defence works that have built-in weaponry - \u201cG\u201d has a Gun Battery, and \u201cM\u201d has a Machine Gun Emplacement. After you have set up any Objective terrain pieces, you must place the next four terrain pieces so that they are on top of where a Defence Works Marker will be set up. In addition, you must use Ruined Building terrain pieces if you have them available."},{"tags":{"desc_type":"paragraph"},"content":"The Defence Works Markers are set up after all of the terrain. Place the Marker anywhere on the terrain piece that covers its starting position. Defence Work Markers have the following special rules:"},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Gun Battery Marker: "},{"tags":{"desc_type":"default"},"content":"A Gun Battery Marker is treated as if it were a Sultanate Grand Cannon stationary gun battery that can be used by any model."},{"tags":{"desc_type":"equipmentslim"},"content":"eq_sultanategrandcannon"}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Machine Gun Emplacement Marker: "},{"tags":{"desc_type":"default"},"content":"A model that is within 1\\" of a Machine Gun Emplacement can make a Ranged Attack as if it were armed with a Machine Gun from the standard Battlekit List. A Machine Gun Emplacement cannot be used if the Marker is within 1\\" of an enemy model. Each Machine Gun Emplacement can be used once per Turn."},{"tags":{"desc_type":"equipmentslim"},"content":"eq_machinegun"}]}]}]},"infiltrators":{"allowed":1,"description":[{"tags":{"desc_type":"paragraph"},"content":"Infiltrators can deploy normally or by using their special deployment rules. However, if they deploy using their special deployment rules, they cannot deploy within 8\\" of an Objective."}]},"deployment":{"staggered":false,"description":[{"tags":{"desc_type":"paragraph"},"content":"The players roll-off. The winner of the roll-off chooses which Deployment Zone will be theirs. The other Deployment Zone is their opponent\u2019s. The players then alternate deploying their models one at a time, starting with the player who has more models in their Warband (roll-off if both players have the same number of models). Models must be set up wholly within their own Deployment Zone. If a player runs out of models to set up, the other player sets up all their remaining models, one after another, until they have none left. Once the players have set up their models, deployment ends, and the game begins."},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Marks and Assets"}]},{"tags":{"desc_type":"paragraph"},"content":"After the deployment, each player must secretly write down up to three enemy models with the ELITE Keyword as Marks, and one friendly model that has the ELITE Keyword as an Asset. Taking out enemy Marks and keeping the friendly Asset alive will score additional Victory Points at the end of the game.","glossary":[{"val":"ELITE","id":"kw_elite"}]}]},"battle_length":{"min":5,"max":5,"description":[{"tags":{"desc_type":"paragraph"},"content":"This scenario lasts five Turns."}]},"victory_conditions":{"description":[{"tags":{"desc_type":"paragraph"},"content":"A player wins this scenario immediately if there are no enemy models on the battlefield or if the opposing Warband flees (typically due to failing a Morale Check). Otherwise, the player with more Victory Points at the end of the game is the winner."},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"At the end of each Turn, each player scores 1 VP for each Objective that is within 1\\" of one or more of their models and 1 VP for each Objective they control."},{"tags":{"desc_type":"default"},"content":"*At the end of the game each player scores:","subcontent":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"1 VP for each Glorious Deed they completed."},{"tags":{"desc_type":"default"},"content":"2 VPs for each enemy Mark that was taken Out of Action."},{"tags":{"desc_type":"default"},"content":"3 VPs if the friendly Asset was not taken Out of Action."}]}]}]}]},"glorious_deeds":{"description":[],"deeds":["gd_killtheirleaders","gd_deathfromabove","gd_highriskhighreward","gd_sharpshooter","gd_dangerousfall"],"optional_deeds":[]},"special_rules":["sr_unforseeneventsheroes"]},{"id":"sc_trenchwarfare","source":"core","tags":{"desc_type":"paragraph","url_custom":"trench-warfare"},"name":"Trench Warfare","img_link":"73526","description":[{"tags":{"desc_type":"paragraph"},"content":"Assault the trenches to win glory for yourself or mount a defence against an enemy attack."}],"forces":{"even_match":false,"description":[{"tags":{"desc_type":"paragraph"},"content":"Before picking their Forces, the players must decide who is the attacker and who is the defender in this scenario. In a campaign, the player with the most models in their Warband (ignoring their Threshold Values or Field Strength) is the attacker, and their opponent is the defender. If both players have the same number of models, and in one-off games, the players roll-off and the winner must decide who will be the attacker and who will be the defender. The defender must halve the number of \ud83d\udc51  they can spend on their Warband in this scenario."}]},"battlefield":{"field_size":[{"tags":{"desc_type":"paragraph"},"content":"The players roll-off and the winner sets up the terrain for the game. This scenario uses the No Man\u2019s Land battlefield archetype. When setting up the terrain for this scenario, do not set up any terrain in either Deployment Zone."}],"extra_features":[]},"infiltrators":{"allowed":2,"description":[{"tags":{"desc_type":"paragraph"},"content":"Infiltrators can deploy normally or by using their special deployment rules. Attacking models that use special deployment rules must deploy within 12\\" of their Deployment Zone."}]},"deployment":{"staggered":false,"description":[{"tags":{"desc_type":"paragraph"},"content":"The players roll-off. The winner of the roll-off chooses which Deployment Zone will be theirs. The other Deployment Zone is their opponent\u2019s. Before deploying any models, the defender must set up their trench lines and Mine Markers as described below. The players then alternate deploying their models one at a time, starting with the attacker. Models must be set up wholly within their own Deployment Zone. If a player runs out of models to set up, the other player sets up all their remaining models, one after another, until they have none left. Once the players have set up their models, deployment ends, and the game begins."},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Defending Trench Lines"}]},{"tags":{"desc_type":"paragraph"},"content":"The defender must set up three Trench sections that are at least 8\\" long at the locations shown on the map. They can add additional Trench sections of any size."},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Mine Markers"}]},{"tags":{"desc_type":"paragraph"},"content":"After the defender sets up their Trenches, they can set up 12 Mine Markers within the Mine Placement Area. After setting the Mine Markers up, the defender must secretly write down which 4 of the Mine Markers are duds. All of the other Mine Markers are live and have the MINED Keyword and the following special rule.","glossary":[{"val":"MINED","id":"kw_mined"}]},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Slaughter Mines: "},{"tags":{"desc_type":"default"},"content":"As soon as a model moves within 3\u201d of a Mine Marker, temporarily halt its move. The defender must then reveal if the Mine Marker is a dud. If it is, nothing happens. If it is a live mine, it detonates in the same way as if the model had moved into contact with a Marker with the MINED Keyword. The Mine Marker is removed, and the moving model can then continue its move as long as it wasn\u2019t taken Down or Out of Action. Models with the FLYING Keyword only trigger a Mine Marker if they finish a move in contact with it (they can fly across it without setting it off ).","glossary":[{"val":"FLYING","id":"kw_flying"},{"val":"MINED","id":"kw_mined"}]}]}]}]},"battle_length":{"min":4,"max":5,"description":[{"tags":{"desc_type":"paragraph"},"content":"At the end of the fourth Turn, the attacker rolls a D6. On a 1 or 2, the game ends immediately. On a 3 or more, the game will end at the end of the fifth Turn."}]},"victory_conditions":{"description":[{"tags":{"desc_type":"paragraph"},"content":"A player wins this scenario immediately if there are no enemy models on the battlefield or if the opposing Warband flees (typically due to failing a Morale Check). Otherwise, the player with more Victory Points at the end of the game is the winner."},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"At the end of each Turn, the defender scores 1 VP for each Trench section that is at least 6\\" long and has one or more defending models in it. If there are no attacking models in the Trench section, the defender scores 2 VPs instead of 1."},{"tags":{"desc_type":"default"},"content":"At the end of each Turn, the attacker scores 2 VPs for each trench section that is at least 6\\" long and has one or more attacking models in it. If there are no defending models in the trench section, the attacker scores 3 VPs instead of 2."},{"tags":{"desc_type":"default"},"content":"At the end of the game each player scores 1 VP for each Glorious Deed they completed."}]}]},"glorious_deeds":{"description":[],"deeds":["gd_survivetotellthetale","gd_intothetrenches","gd_headshot","gd_goodhunting","gd_victoryordeath","gd_holdyourground"],"optional_deeds":[]},"special_rules":[]},{"id":"sc_greatwar","source":"core","tags":{"desc_type":"paragraph","url_custom":"great-war"},"name":"Great War","img_link":"73533","description":[{"tags":{"desc_type":"paragraph"},"content":"The order for general assault has been given. The skirmishes are over. It is time to wipe out your hated enemy once and for all. The Great War begins."}],"forces":{"even_match":true,"description":[{"tags":{"desc_type":"paragraph"},"content":"No special restrictions apply to the models the players can include in their Forces in this scenario."}]},"battlefield":{"field_size":[{"tags":{"desc_type":"paragraph"},"content":"The players roll-off and the winner sets up the terrain for the game. This scenario can use any battlefield archetype (the player setting up the terrain decides which one to use)."}],"extra_features":[]},"infiltrators":{"allowed":1,"description":[{"tags":{"desc_type":"paragraph"},"content":"Infiltrators can deploy normally or by using their special deployment rules."}]},"deployment":{"staggered":false,"description":[{"tags":{"desc_type":"paragraph"},"content":"The players roll-off. The winner of the roll-off chooses which Deployment Zone will be theirs. The other Deployment Zone is their opponent\u2019s. The players then alternate deploying their models one at a time, starting with the player who has more models in their Warband (roll-off if both players have the same number of models). Models must be set up wholly within their own Deployment Zone. If a player runs out of models to set up, the other player sets up all their remaining models, one after another, until they have none left. Once the players have set up their models, deployment ends, and the game begins."}]},"battle_length":{"min":5,"max":5,"description":[{"tags":{"desc_type":"paragraph"},"content":"The battle lasts for five turns."}]},"victory_conditions":{"description":[{"tags":{"desc_type":"paragraph"},"content":"A player wins this scenario immediately if there are no enemy models on the battlefield. Otherwise, the player with more Victory Points at the end of the game is the winner."},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Victory Points"}]},{"tags":{"desc_type":"paragraph"},"content":"Each player scores VPs for enemy models that were taken Out of Action equal to the model\u2019s Cost, divided by 10 if it has a Cost in \ud83d\udc51, or by 3 if it has a Cost in \u263c (rounding fractions up). Include the model\u2019s Battlekit, Glory Items, and any other upgrades in its Cost. If a model has items worth both \ud83d\udc51  and \u263c, work out each separately. For example, a model that had a total Cost of 100 \ud83d\udc51  and 6 \u263c would be worth 100/10 = 10 VPS, plus 6/3 = 2VPs, for a total of 12VPs."}]},"glorious_deeds":{"description":[{"tags":{"desc_type":"paragraph"},"content":"There are no Glorious Deeds in this scenario, just victory or death!"}],"deeds":[],"optional_deeds":[]},"special_rules":["sr_tothedeath"]},{"id":"sc_supplyraid","source":"core","tags":{"desc_type":"paragraph","url_custom":"supply-raid"},"name":"Supply Raid","img_link":"73536","description":[{"tags":{"desc_type":"paragraph"},"content":"Raid enemy supplies or defend your caches from an assault."}],"forces":{"even_match":false,"description":[{"tags":{"desc_type":"paragraph"},"content":"Before picking their Forces, the players must decide who is the attacker and who is the defender in this scenario. The player with the most models in their Warband (ignoring their Threshold Values or Field Strength) is the attacker in this scenario, and their opponent is the defender. If both players have the same number of models, they roll-off and the winner can decide who will be the attacker and who will be the defender."}]},"battlefield":{"field_size":[{"tags":{"desc_type":"paragraph"},"content":"The players roll-off and the winner sets up the terrain for the game. This scenario uses the No Man\u2019s Land or Decimated Ruins battlefield archetype (the player setting up the terrain decides)."}],"extra_features":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Supply Cache Markers"}]},{"tags":{"desc_type":"paragraph"},"content":"After the terrain has been set up, the players must set up 6 Supply Cache Markers. The players alternate setting up the Markers, one at a time, starting with the defender. Supply Cache Markers must be set up more than 6\u201d from the edge of the battlefield, more than 6\u201d away from any other Markers and more than 1\u201d from Impassable terrain. Only one Marker can be placed in the defender\u2019s Deployment Zone, and none can be placed within 12\\" of the attacker\u2019s Deployment Zone."},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Destroying Supply Caches: "},{"tags":{"desc_type":"default"},"content":"A player can choose a Supply Cache Marker as the target for a Ranged Attack with the HEAVY keyword, or a Melee Attack of any type. If the attack is a Success or a Critical Success, the Supply Cache Marker is destroyed (remove it from the battlefield).","glossary":[{"val":"HEAVY","id":"kw_heavy"}]}]}]}]},"infiltrators":{"allowed":1,"description":[{"tags":{"desc_type":"paragraph"},"content":"Infiltrators can deploy normally or by using their special deployment rules."}]},"deployment":{"staggered":true,"description":[{"tags":{"desc_type":"paragraph"},"content":"The players roll-off. The winner of the roll-off chooses which Deployment Zone will be theirs. The other Deployment Zone is their opponent\u2019s. Before deploying any models, the players must set up 6 Supply Cache Markers as described above. The players then alternate deploying their models one at a time, starting with the player who has more models in their Warband (roll-off if both players have the same number of models). The defender may deploy a maximum of 6 models. The attacker may deploy a maximum of 6+D3 models. Any models that cannot be deployed are available as reinforcements. Models must be set up wholly within their own Deployment Zone. If a player runs out of models to set up, the other player sets up all their remaining models, one after another, until they have none left. Once the players have set up their models, deployment ends, and the game begins."}]},"battle_length":{"min":4,"max":4,"description":[{"tags":{"desc_type":"paragraph"},"content":"This scenario lasts four Turns."}]},"victory_conditions":{"description":[{"tags":{"desc_type":"paragraph"},"content":"A player wins this scenario immediately if there are no enemy models on the battlefield after any reinforcements have been deployed or if the opposing Warband flees (typically due to failing a Morale Check). Otherwise, the player with more Victory Points at the end of the game is the winner."},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"At the end of the game the attacker scores 1 VP for each Supply Cache Marker that has been destroyed."},{"tags":{"desc_type":"default"},"content":"At the end of the game the defender scores 2 VPs for each Supply Cache Marker that has not been destroyed."},{"tags":{"desc_type":"default"},"content":"At the end of the game each player scores 1 VP for each enemy model taken Out of Action and 1 VP for each Glorious Deed they completed."}]}]},"glorious_deeds":{"description":[],"deeds":["gd_daringraid","gd_rampage","gd_holdyourground","gd_stopthemintheirtracks","gd_victoryordeath","gd_savethesupplies"],"optional_deeds":[]},"special_rules":["sr_reinforcement"]},{"id":"sc_armouredtrain","source":"core","tags":{"desc_type":"paragraph","url_custom":"armoured-train"},"name":"Armoured Train","img_link":"73527","description":[{"tags":{"desc_type":"paragraph"},"content":"A derailed armoured train, laden with loot and ammunition, is being fought over by the two warbands."}],"forces":{"even_match":true,"description":[{"tags":{"desc_type":"paragraph"},"content":"If this game is being played as part of a campaign, both players have a Field Strength of 15 models."}]},"battlefield":{"field_size":[{"tags":{"desc_type":"paragraph"},"content":"The players roll-off and the winner sets up the terrain for the game. This scenario uses the No Man\u2019s Land battlefield archetype and requires a Battlefield that is 48\\" by 48\\"."}],"standard_terrain":true,"extra_features":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"The Train"}]},{"tags":{"desc_type":"paragraph"},"content":"When you set up the terrain for this battle, you must first set up the wagons from an armoured train. The wagons are located on a raised embankment that has a bridge in the middle."},{"tags":{"desc_type":"paragraph"},"content":"The dimensions of the Wagons are shown on the map. Each Wagon has ladders on both sides that allow models to Climb up the sides without having to take a Risky Success Roll and doors at the centre of each side that can be unlocked to reach the supplies inside. The top of each Wagon is flat and treated as open terrain."},{"tags":{"desc_type":"paragraph"},"content":"Two of the wagons are located on raised embankments that measure 12\\" by 19\\". The sides of the embankments are roughly 5\\" high and are difficult terrain. The central wagon is located on a bridge that joins the two embankments together. Models can move under the bridge from the sides and onto the bridge from each end, where it connects to the raised embankments."},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Gun Battery Markers"}]},{"tags":{"desc_type":"paragraph"},"content":"After setting up the weapons, place a Gun Battery Marker on the top of the central wagon, as shown on the map. It has the following special rule:"},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Gun Battery Marker: "},{"tags":{"desc_type":"default"},"content":"A Gun Battery Marker is treated as if it were a Sultanate Grand Cannon stationary gun battery that can be used by any model."},{"tags":{"desc_type":"equipmentslim"},"content":"eq_sultanategrandcannon"}]}]}]},"infiltrators":{"allowed":0,"description":[{"tags":{"desc_type":"paragraph"},"content":"Infiltrators must deploy normally (they cannot use their special deployment rules)."}]},"deployment":{"staggered":false,"description":[{"tags":{"desc_type":"paragraph"},"content":"The players roll-off. The winner of the roll-off chooses which Deployment Zone will be theirs. The other Deployment Zone is their opponent\u2019s. The players then alternate deploying their models one at a time, starting with the player who has more models in their Warband (roll-off if both players have the same number of models). Models must be set up wholly within their own Deployment Zone. If a player runs out of models to set up, the other player sets up all their remaining models, one after another, until they have none left. Once the players have set up their models, deployment ends, and the game begins."}]},"battle_length":{"min":5,"max":5,"description":[{"tags":{"desc_type":"paragraph"},"content":"This scenario lasts five Turns."}]},"victory_conditions":{"description":[{"tags":{"desc_type":"paragraph"},"content":"A player wins this scenario immediately if there are no enemy models on  battlefield or if the opposing Warband flees (typically due to failing a Morale Check). Otherwise, the player with more Victory Points at the end of the game is the winner."},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"At the end of the game each player scores:","subcontent":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"1 VP for each Glorious Deed they completed."},{"tags":{"desc_type":"default"},"content":"1 VP for each crate a friendly model drew supplies from."},{"tags":{"desc_type":"default"},"content":"2 VPs for each crate a friendly model destroyed."},{"tags":{"desc_type":"default"},"content":"3 VPs for each crate that a friendly model escaped with."}]}]}]}]},"glorious_deeds":{"description":[],"deeds":["gd_nostoneleftunturned","gd_supplyrun","gd_kingofthehill_train","gd_overtheenemyline","gd_meatgrinder"],"optional_deeds":[]},"special_rules":["sr_trainwagons"]},{"id":"sc_frombelow","source":"core","tags":{"desc_type":"paragraph","url_custom":"from-below"},"name":"From Below","img_link":"73532","description":[{"tags":{"desc_type":"paragraph"},"content":"Conquer a pock-marked battlefield, but be careful not to rouse the beast that slumbers beneath."}],"forces":{"even_match":true,"description":[{"tags":{"desc_type":"paragraph"},"content":"No special restrictions apply to the models the players can include in their Forces in this scenario."}]},"battlefield":{"field_size":[{"tags":{"desc_type":"paragraph"},"content":"The players roll-off and the winner sets up the terrain for the game. This scenario can use any battlefield archetype (the player setting up the terrain decides which one to use)."}],"standard_terrain":true,"extra_features":[{"tags":{"desc_type":"paragraph"},"content":"Ichor Pit Markers","subcontent":[{"tags":{"desc_type":"bold"},"content":"The 3 central Markers inside circles shown on the map represent Ichor Pits. Place the Ichor Pit Markers at the locations shown on the map before setting up any terrain. Terrain pieces cannot be set up within 1\\" of an Ichor Pit Marker."}]},{"tags":{"desc_type":"paragraph"},"content":""},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Artillery Shell Markers"}]},{"tags":{"desc_type":"paragraph"},"content":"The 4 remaining Markers shown on the map represent Artillery Shells. After setting up any terrain, place the Artillery Shell Markers at the locations shown on the map."}]},"infiltrators":{"allowed":2,"description":[{"tags":{"desc_type":"paragraph"},"content":"Infiltrators can deploy normally or by using their special deployment rules. However, if they deploy using their special deployment rules, they cannot deploy within 6\\" of a Marker."}]},"deployment":{"staggered":false,"description":[{"tags":{"desc_type":"paragraph"},"content":"The players roll-off. The winner of the roll-off chooses which Deployment Zone will be theirs. The other Deployment Zone is their opponent\u2019s. The players then alternate deploying their models one at a time, starting with the player who has more models in their Warband (roll-off if both players have the same number of models). In this scenario, the players can only deploy half the models from their Force (rounding fractions up). Any remaining models are not used and are placed to one side. Models must be set up wholly within their own Deployment Zone. If a player runs out of models to set up, the other player sets up all their remaining models, one after another, until they have none left. Once the players have set up their models, deployment ends, and the game begins."}]},"battle_length":{"min":4,"max":5,"description":[{"tags":{"desc_type":"paragraph"},"content":"The game ends if the Beast awakens. In addition, at the end of the fourth Turn, the attacker rolls a D6. On a 1 or 2, the game ends immediately. On a 3 or more, the game will end at the end of the fifth Turn, provided the Beast fails to awaken before then."}]},"victory_conditions":{"description":[{"tags":{"desc_type":"paragraph"},"content":"A player wins this scenario immediately if there are no enemy models on the battlefield, or if the opposing Warband flees (typically due to failing a Morale Check). The game ends immediately in a draw if the Beast awakens. Otherwise, the player with more Victory Points at the end of the game is the winner."},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"At the end of the game each player scores 1 VP for each Ichor Vial that they extracted and 1 VP for each Glorious Deed they completed during the game."}]}]}]},"glorious_deeds":{"description":[],"deeds":["gd_bloodlust","gd_forscience","gd_ichorfrenzy","gd_risktaker","gd_sadisticwretch","gd_vialthief"],"optional_deeds":[]},"special_rules":["sr_ichorpitmarkers","sr_artilleryshellmarkers","sr_thebeast"]},{"id":"sc_fieldsofglory","source":"core","tags":{"desc_type":"paragraph","url_custom":"fields-of-glory"},"name":"Fields of Glory","img_link":"73531","description":[{"tags":{"desc_type":"paragraph"},"content":"Show your might and bravery. Fight to the glorious death and let your legend live on."}],"forces":{"even_match":true,"description":[{"tags":{"desc_type":"paragraph"},"content":"No special restrictions apply to the models the players can include in their Forces in this scenario."}]},"battlefield":{"field_size":[{"tags":{"desc_type":"paragraph"},"content":"The players roll-off and the winner sets up the terrain for the game. This scenario uses the Trench Lines battlefield archetype."}],"standard_terrain":true,"extra_features":[]},"infiltrators":{"allowed":1,"description":[{"tags":{"desc_type":"paragraph"},"content":"Infiltrators can deploy normally or by using their special deployment rules."}]},"deployment":{"staggered":false,"description":[{"tags":{"desc_type":"paragraph"},"content":"The players roll-off. The winner of the roll-off chooses which Deployment Zone will be theirs. The other Deployment Zone is their opponent\u2019s. The players then alternate deploying their models one at a time, starting with the player who has more models in their Warband (roll-off if both players have the same number of models). Models must be set up wholly within their own Deployment Zone. If a player runs out of models to set up, the other player sets up all their remaining models, one after another, until they have none left. Once the players have set up their models, deployment ends, and the game begins."}]},"battle_length":{"min":4,"max":4,"description":[{"tags":{"desc_type":"paragraph"},"content":"This scenario lasts four Turns."}]},"victory_conditions":{"description":[{"tags":{"desc_type":"paragraph"},"content":"A player wins this scenario immediately if there are no enemy models on the battlefield, or if the opposing Warband flees (typically due to failing a Morale Check). Otherwise, the player with more Victory Points at the end of the game is the winner."},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"At the end of the game each player scores:","subcontent":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"1 VP for each Glorious Deed they completed."},{"tags":{"desc_type":"default"},"content":"1 extra VP for each of the following Glorious Deeds they completed: Elite Hunter, Personal Revenge, and Risk It All."},{"tags":{"desc_type":"default"},"content":"2 extra VPs if they completed the Trench Raider Glorious Deed."}]}]}]}]}]},"glorious_deeds":{"description":[],"deeds":["gd_deathfromabove","gd_elitehunter","gd_noescape","gd_personalrevenge","gd_reaper","gd_riskitall","gd_therealkiller","gd_trenchraider"],"optional_deeds":[]},"special_rules":[]},{"id":"sc_dontbreathe","source":"core","tags":{"desc_type":"paragraph","url_custom":"dont-breathe"},"name":"Don\'t Breathe","img_link":"73529","description":[{"tags":{"desc_type":"paragraph"},"content":"Beware of poison gas as you assault enemy bunkers or drive back the attackers with the power of mustard gas!"}],"forces":{"even_match":false,"description":[{"tags":{"desc_type":"paragraph"},"content":"Before picking their Forces, the players must decide who is the attacker and who is the defender in this scenario. The player with the most models in their Warband (ignoring their Threshold Values or Field Strength) is the attacker in this scenario and their opponent is the defender. If both players have the same number of models, they roll-off and the winner decides who will be the attacker and who will be the defender."}]},"battlefield":{"field_size":[{"tags":{"desc_type":"paragraph"},"content":"The players roll-off and the winner sets up the terrain for the game. This scenario uses the No Man\u2019s Land battlefield archetype and requires a battlefield that is 48\\" by 48\\". When setting up the terrain for this scenario, do not set up any terrain in either Deployment Zone."}],"standard_terrain":true,"extra_features":[]},"infiltrators":{"allowed":2,"description":[{"tags":{"desc_type":"paragraph"},"content":"Infiltrators can deploy normally or by using their special deployment rules. Attacking models that deploy using their special deployment rules cannot deploy within 8\\" of a Bunker Marker."}]},"deployment":{"staggered":false,"description":[{"tags":{"desc_type":"paragraph"},"content":"The players roll-off. The winner of the roll-off chooses which Deployment Zone will be theirs. The other Deployment Zone is their opponent\u2019s. Before any models are deployed, the defender must set up their trench lines, Bunkers, and Gas Mine Markers as described below. The players then alternate deploying their models one at a time, starting with the attacker. The players alternate deploying their models one at a time, starting with the attacker. The defender may deploy a maximum of 6 models. The attacker may deploy a maximum of 6+D3 models. Any models that cannot be deployed are available as reinforcements (see below). Models must be set up wholly within their own Deployment Zone. If a player runs out of models to set up, the other player sets up all their remaining models, one after another, until they have none left. Once the players have set up their models, deployment ends, and the game begins."},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Defending Trench Lines"}]},{"tags":{"desc_type":"paragraph"},"content":"The defender must set up six Trench sections that are at least 8\\" long at the locations shown on the map. They can add additional Trench sections of any size if they wish to, but all must be set up wholly within their Deployment Zone and more than 3\\" from the centre of where any of the Bunker Markers will be placed."},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Bunker Markers"}]},{"tags":{"desc_type":"paragraph"},"content":"The Bunker Markers represent heavily armoured entrenchments. After the Defender has set up their Trenches, they must set up four terrain pieces on top of where a Bunker Marker will be set up. They must use Intact Building terrain pieces if available (if they run out of Buildings, they can use whatever terrain pieces they wish). Place each Bunker Marker anywhere on the terrain piece that covers its starting position; the whole of the terrain piece is treated as the Bunker in this scenario."},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Gas Mine Markers"}]},{"tags":{"desc_type":"paragraph"},"content":"After the defender sets up their Trenches, they can set up 12 Gas Mine Markers. At least 8 of the Gas Mine Markers must be placed wholly within the Gas Mine Placement Area. Up to 4 can be placed wholly within the defender\u2019s Deployment Zone. After setting the Gas Mine Markers up, the defender must secretly write down which 4 of the Gas Mine Markers are duds. All of the other Gas Mine Markers are live and have the MINED Keyword and the following special rules.","glossary":[{"val":"MINED","id":"kw_mined"}]},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Choking Mines: "},{"tags":{"desc_type":"default"},"content":"As soon as a model moves within 3\u201d of a Gas Mine Marker, temporarily halt its move. The defender must then reveal if the Gas Mine Marker is a dud. If it is, nothing happens. If it is a live mine, it detonates in the same way as if the model had moved into contact with a Marker with the MINED Keyword. The Gas Mine Marker is then removed and replaced with a Gas Cloud Marker. The moving model can then carry on with its move as long as it wasn\u2019t taken Down or Out of Action. Models with the FLYING Keyword only trigger a Gas Mine Marker if they finish a move in contact with it (they can fly across it without setting it off ).","glossary":[{"val":"MINED","id":"kw_mined"},{"val":"FLYING","id":"kw_flying"}]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Gas Cloud Markers: "},{"tags":{"desc_type":"default"},"content":"Place 1 BLOOD MARKER next to each model that is within 6\\" of the centre of a Gas Cloud Marker when it is set up. In addition, place 1 BLOOD MARKER next to a model that is within 6\\" of the centre of a Gas Cloud Marker when the model is Activated.","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"}]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Detonating Gas Cloud Markers: "},{"tags":{"desc_type":"default"},"content":"A model can choose a Gas Cloud Marker as the target for an attack with a weapon that has the BLAST or FIRE Keyword. If the attack is a Success or a Critical Success, the Gas Cloud Marker explodes. A Gas Cloud Marker will also explode if it is caught in the radius of an attack with the BLAST Keyword.","glossary":[{"val":"BLAST","id":"kw_blast"},{"val":"FIRE","id":"kw_fire"}]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Gas Cloud Explosions: "},{"tags":{"desc_type":"default"},"content":"When a Gas Cloud Marker explodes, make an Injury Roll for each model within 3\\" of the Marker as if they had been hit by a weapon with the +2 INJURY DICE and FIRE Keywords. If the model is not taken Out of Action by the Injury Roll, it is blown away D3\\" in a straight line directly away from the centre of the Marker. The model stops if it is blown into another model, Impassable terrain, or terrain it cannot cross without having to Climb. The Gas Cloud Marker is then removed from the battlefield.","glossary":[{"val":"+2 INJURY DICE","id":"kw_plusdice"},{"val":"FIRE","id":"kw_fire"}]}]}]}]},"battle_length":{"min":5,"max":6,"description":[{"tags":{"desc_type":"paragraph"},"content":"At the end of the fifth Turn, the attacker rolls a D6. On a 1 or 2, the game ends immediately. On a 3 or more, the game will end at the end of the sixth Turn."}]},"victory_conditions":{"description":[{"tags":{"desc_type":"paragraph"},"content":"A player wins this scenario immediately if there are no enemy models on the battlefield, or if the opposing Warband flees (typically due to failing a Morale Check). Otherwise, the player with more Victory Points at the end of the game is the winner."},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"At the end of each Turn, the defender scores 1 VP for each Trench section that is at least 8\\" long and has one or more defending models in it. If there are no attacking models in the Trench section, the defender scores 2 VPs instead of 1."},{"tags":{"desc_type":"default"},"content":"At the end of each Turn, the attacker scores:","subcontent":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"2 VPs for each trench section that is at least 6\\" long and has one or more of your models in it. If no defending models are in the trench section, the attacker scores 3 VPs instead of 2."},{"tags":{"desc_type":"default"},"content":"2 VPs for each Bunker that was destroyed by a Demo Charge that Turn."}]}]},{"tags":{"desc_type":"default"},"content":"At the end of the game each player scores 1 VP for each Glorious Deed they completed and 4 VP for each Bunker they control. A player controls a Bunker if there are more friendly models within 1\\" of it than there are enemy models."}]}]}]},"glorious_deeds":{"description":[],"deeds":["gd_burningsight","gd_combustive","gd_deepbreaths","gd_ironlungs","gd_poisonousrage"],"optional_deeds":[]},"special_rules":["sr_reinforcement","sr_destroyingbunkers"]},{"id":"sc_thehighground","source":"core","tags":{"desc_type":"paragraph","url_custom":"the-high-ground"},"name":"The High Ground","img_link":"73537","description":[{"tags":{"desc_type":"paragraph"},"content":"Capture the high ground at all costs. Every casualty is worth it to claim this crucial tactical location."}],"forces":{"even_match":true,"description":[{"tags":{"desc_type":"paragraph"},"content":"No special restrictions apply to the models the players can include in their Forces in this scenario."}]},"battlefield":{"field_size":[{"tags":{"desc_type":"paragraph"},"content":"The players roll-off and the winner sets up the terrain for the game. This scenario uses the No Man\u2019s Land or Decimated Ruins battlefield archetype (the player setting up the terrain decides which one to use) and requires a battlefield that is at least 36\\" by 36\\"."}],"standard_terrain":true,"extra_features":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Objective Markers"}]},{"tags":{"desc_type":"paragraph"},"content":"The Markers shown on the map show high ground that the Warbands have been ordered to capture. When you set up the terrain pieces for this scenario, you must place the first five terrain pieces so that they are covering the locations where the Objective Markers will be set up, and at least 3\u201d away from each other. In addition, you must use terrain pieces that are at least 6\u201d tall. The terrain piece covering the central Objective Marker must be the tallest terrain piece available. The Objective Markers are set up after all of the terrain. Place each Objective Marker anywhere on the terrain piece that covers its starting position; the whole of the terrain piece is treated as the Objective for this scenario, and cannot be destroyed or removed for any reason."},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Controlling Objectives"}]},{"tags":{"desc_type":"paragraph"},"content":"A player controls an Objective terrain piece if there are more friendly models on, in, or within 1\\" of the terrain piece than there are enemy models. If one player has any models on the terrain piece and their opponent does not, then the player with models on the terrain piece controls it even if their opponent has more models within 1\\" of the Objective."}]},"infiltrators":{"allowed":2,"description":[{"tags":{"desc_type":"paragraph"},"content":"Infiltrators can deploy normally or by using their special deployment rules. However, if they deploy using their special deployment rules, they cannot deploy within 3\\" of an Objective."}]},"deployment":{"staggered":false,"description":[{"tags":{"desc_type":"paragraph"},"content":"The players roll-off. The winner of the roll-off chooses which Deployment Zone will be theirs. The other Deployment Zone is their opponent\u2019s. The players then alternate deploying their models one at a time, starting with the player who has more models in their Warband (roll-off if both players have the same number of models). Models must be set up wholly within their own Deployment Zone. If a player runs out of models to set up, the other player sets up all their remaining models, one after another, until they have none left. Once the players have set up their models, deployment ends, and the game begins."}]},"battle_length":{"min":5,"max":5,"description":[{"tags":{"desc_type":"paragraph"},"content":"This scenario lasts five Turns."}]},"victory_conditions":{"description":[{"tags":{"desc_type":"paragraph"},"content":"A player wins this scenario immediately if there are no enemy models on the battlefield, or if the opposing Warband flees (typically due to failing a Morale Check). Otherwise, the player with more Victory Points at the end of the game is the winner."},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Each player scores 1 VP each time a friendly model takes an enemy model Out of Action with a Melee Attack that has the Diving Charge modifier."},{"tags":{"desc_type":"default"},"content":"At the end of each Turn, each player scores 2 VPs for each Objective they control."},{"tags":{"desc_type":"default"},"content":"At the end of the game each player scores:","subcontent":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"1 VP for each Glorious Deed they completed."},{"tags":{"desc_type":"default"},"content":"3 VPs if they control the opponent\u2019s Top Priority Objective."},{"tags":{"desc_type":"default"},"content":"3 VPs if they control their Top Priority Objective."}]}]}]}]}]},"glorious_deeds":{"description":[],"deeds":["gd_kingofthehill","gd_victoryordeath","gd_deathfromabove","gd_downwithyou","gd_backtothemud"],"optional_deeds":[]},"special_rules":["sr_toppriorityobjective"]},{"id":"sc_dragonhunt","source":"core","tags":{"desc_type":"paragraph","url_custom":"dragon-hunt"},"name":"Dragon Hunt","img_link":"73530","description":[{"tags":{"desc_type":"paragraph"},"content":"For the glory of your Patron, hunt and defeat a monstrous creature, be it a possessed tank or a hellish beast."}],"forces":{"even_match":true,"description":[{"tags":{"desc_type":"paragraph"},"content":"The players will additionally need a Dragon model and 6 Peasant models. The rules and Warband Entries for these models can be found below."}]},"battlefield":{"field_size":[{"tags":{"desc_type":"paragraph"},"content":"The players roll-off and the winner sets up the Dragon, the terrain and the Peasants for the game. This scenario uses the No Man\u2019s Land or Trench Lines battlefield archetype (the player setting up the terrain decides which one to use)."}],"standard_terrain":true,"extra_features":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"The Dragon & The Peasants"}]},{"tags":{"desc_type":"paragraph"},"content":"The Dragon model is set up before setting up the terrain for this battle and the 6 Peasant models are set up after the terrain has been set up. Deploy the Dragon so that it covers the midpoint of the battlefield. Deploy the Peasants anywhere on the battlefield that is more than 8\\" from the Dragon, and more than 6\\" from any other Peasant or either side\u2019s Deployment Zone."}]},"infiltrators":{"allowed":2,"description":[{"tags":{"desc_type":"paragraph"},"content":"Infiltrators can deploy normally or by using their special deployment rules. However, if they deploy using their special deployment rules, they cannot deploy within 8\\" of the Dragon or 1\\" of a Peasant."}]},"deployment":{"staggered":false,"description":[{"tags":{"desc_type":"paragraph"},"content":"The players roll-off. The winner of the roll-off chooses which Deployment Zone will be theirs. The other Deployment Zone is their opponent\u2019s. The players then alternate deploying their models one at a time, starting with the player who has more models in their Warband (roll-off if both players have the same number of models). Models must be set up wholly within their own Deployment Zone. If a player runs out of models, the other player sets up all their remaining models, one after another, until they have none left. Once the players have set up their models, deployment ends, and the game begins."}]},"battle_length":{"min":4,"max":5,"description":[{"tags":{"desc_type":"paragraph"},"content":"At the end of the fourth Turn, the attacker rolls a D6. On a 1 or 2, the game ends immediately. On a 3 or more, the game will end at the end of the fifth Turn."}]},"victory_conditions":{"description":[{"tags":{"desc_type":"paragraph"},"content":"A player wins this scenario immediately if there are no enemy models on the battlefield or if the opposing Warband flees (typically due to failing a Morale Check). The game ends immediately in a draw if The Dragon leaves the battlefield. Otherwise, the player with more Victory Points at the end of the game is the winner."},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"2 VPs if an attack made by a friendly model takes a Peasant Out of Action."},{"tags":{"desc_type":"default"},"content":"3 VPs if an attack made by a friendly model takes the Dragon Down (including when its Undying or Defiant abilities change the result to a Down result)."},{"tags":{"desc_type":"default"},"content":"6 VPs if an attack made by a friendly model takes the Dragon Out of Action (unless its Undying or Defiant abilities change the result to a Down result)."},{"tags":{"desc_type":"default"},"content":"At the end of the game each player scores 1 VP for each Glorious Deed they completed."}]}]}]},"glorious_deeds":{"description":[{"tags":{"desc_type":"paragraph"},"content":"Players score one Glory Point for every model that completes any of the following Glorious Deeds. Glory Points for these can only be gained once \u2013 whichever player completes them first gets the Glory Points!"}],"deeds":["gd_dragonslayer","gd_genocidal","gd_opportunist","gd_offmyback","gd_firewithfire"],"optional_deeds":[]},"special_rules":["sr_neutralmodels","sr_thedragon","sr_thepeasants"]}]'),C=JSON.parse('[{"id":"gd_sniper","source":"core","id_num_code":0,"tags":{},"contextdata":{},"name":"Sniper","description":[{"tags":{},"content":"A friendly model takes an enemy ELITE model Out of Action with a Ranged Weapon Attack that has the Long Range and Cover modifiers.","glossary":[{"val":"ELITE","id":"kw_elite"},{"val":"Cover","id":"gl_cover"}]}]},{"id":"gd_lordofwar","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Lord of War","description":[{"tags":{},"content":"A friendly model takes two enemy models Out of Action with Melee Attacks in a single Turn."}]},{"id":"gd_bloodletting","source":"core","tags":{"random_gen_group":3},"contextdata":{},"id_num_code":1,"name":"Bloodletting","description":[{"tags":{},"content":"An attack made by a friendly model results in the sixth BLOOD MARKER being placed beside an enemy model.","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"}]}]},{"id":"gd_holdyourground","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Hold Your Ground","description":[{"tags":{},"content":"A Warband is the first to pass a Morale Check in this game. You receive a Victory Point for achieving this Glorious Deed. In a campaign game you can award 1 Experience Point to 1 ELITE model from the Warband that has the LEADER Keyword if you have one available, and you receive Glory Points and an extra D6 for your Promotion Pool as you would normally.","glossary":[{"val":"ELITE","id":"kw_elite"},{"val":"LEADER","id":"kw_leader"}]}]},{"id":"gd_suicidalbravery","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Suicidal Bravery","description":[{"tags":{},"content":"A friendly model successfully charges two models with the same charge move."}]},{"id":"gd_resistandbite","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Resist and Bite","description":[{"tags":{},"content":"A friendly model that began its Activation Down takes an enemy model Out of Action in the same Activation."}]},{"id":"gd_reaper","source":"core","tags":{"random_gen_group":3},"contextdata":{},"id_num_code":2,"name":"Reaper","description":[{"tags":{},"content":"A friendly model takes three enemy models Out of Action."}]},{"id":"gd_sharpshooter","source":"core","tags":{"random_gen_group":3},"contextdata":{},"id_num_code":3,"name":"Sharpshooter","description":[{"tags":{},"content":"A friendly model takes an enemy model Out of Action with a Ranged Weapon Attack that has the Long Range and Cover modifiers. Attacks with the BLAST Keyword or that automatically hit without requiring a Success Roll cannot complete this Glorious Deed.","glossary":[{"val":"Cover","id":"gl_cover"},{"val":"ELITE","id":"kw_elite"},{"val":"BLAST","id":"kw_blast"}]}]},{"id":"gd_feignedretreat","source":"core","tags":{"random_gen_group":3},"contextdata":{},"id_num_code":4,"name":"Feigned Retreat","description":[{"tags":{},"content":"A friendly model takes a Retreat ACTION and then hits an enemy model it was within 1\\" of at the start of the Activation with a ranged attack later in the same Activation.","glossary":[{"val":"ACTION","id":"kw_action"}]}]},{"id":"gd_fickleluck","source":"core","tags":{"random_gen_group":3},"contextdata":{},"id_num_code":5,"name":"Fickle Luck","description":[{"tags":{},"content":"A Warband spends 2 or more BLOOD MARKERS to penalise a Success Roll for an enemy model.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"}]}]},{"id":"gd_headhunter","source":"core","tags":{"random_gen_group":3},"contextdata":{},"id_num_code":6,"name":"Head Hunter","description":[{"tags":{},"content":"A friendly model takes two enemy models Out of Action with Ranged Attacks during the game."}]},{"id":"gd_riskitall","source":"core","tags":{"random_gen_group":1},"contextdata":{},"id_num_code":1,"name":"Risk It All","description":[{"tags":{},"content":"A friendly model takes two Risky Success Rolls in the same Activation, and both are a Success or Critical Success.","glossary":[{"val":"Risky Success","id":"kw_riskyaction"}]}]},{"id":"gd_dangerousfall","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Dangerous Fall","description":[{"tags":{},"content":"A friendly model causes an enemy model to Fall into a crater."}]},{"id":"gd_livedangerously","source":"core","tags":{"random_gen_group":1},"contextdata":{},"id_num_code":2,"name":"Live Dangerously","description":[{"tags":{},"content":"A friendly model takes two Retreat ACTIONS during the game.","glossary":[{"val":"ACTIONS","id":"kw_action"}]}]},{"id":"gd_killerinstinct","source":"core","tags":{"random_gen_group":1},"contextdata":{},"id_num_code":3,"name":"Killer Instinct","description":[{"tags":{},"content":"A friendly model takes two enemy models Out of Action with Melee Attacks during the game."}]},{"id":"gd_noescape","source":"core","tags":{"random_gen_group":1},"contextdata":{},"id_num_code":4,"name":"No Escape","description":[{"tags":{},"content":"A friendly model successfully charges an enemy model that it did not have a Line of Sight to at the start of its activation."}]},{"id":"gd_castthemdown","source":"core","tags":{"random_gen_group":1},"contextdata":{},"id_num_code":5,"name":"Cast Them Down","description":[{"tags":{},"content":"A friendly model causes an enemy model to Fall from a height of at least 3\\" (e.g. by taking the enemy model Down near a ledge, or by forcing it off a ledge in some way)."}]},{"id":"gd_showofmercy","source":"core","tags":{"random_gen_group":1},"contextdata":{},"id_num_code":6,"name":"Show of Mercy","description":[{"tags":{},"content":"A friendly model takes a Retreat ACTION when it is within 1\\" of an enemy model that is Down.","glossary":[{"val":"ACTION","id":"kw_action"}]}]},{"id":"gd_victorious","source":"core","tags":{"random_gen_group":2},"contextdata":{},"id_num_code":1,"name":"Victorious","description":[{"tags":{},"content":"Win the game. "}]},{"id":"gd_bloodsacrifice","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Blood Sacrifice","description":[{"tags":{},"content":"A friendly model causes three enemy models to be taken Out of Action during the game."}]},{"id":"gd_sadisticwretch","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Sadistic Wretch","description":[{"tags":{},"content":"A friendly model causes an enemy model to be taken Out of Action by causing it to move into an Ichor Pit."}]},{"id":"gd_vialthief","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Vial Theif","description":[{"tags":{},"content":"A friendly model steals an Ichor Vial from an enemy model and then manages to extract it."}]},{"id":"gd_resistandbite","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Resist and Bite","description":[{"tags":{},"content":"Take out an enemy with a model that is Down.","glossary":[{"val":"Down","id":"gl_down"}]}]},{"id":"gd_relichunter","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Relic Hunter","description":[{"tags":{},"content":"A friendly model claims two different Reliquaries during the game."}]},{"id":"gd_protecttherelic","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Protect the Relic","description":[{"tags":{},"content":"A friendly model causes an enemy model that is within 1\\" of a Reliquary Marker to be taken Out of Action"}]},{"id":"gd_therealkiller","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"The Real Killer","description":[{"tags":{},"content":"A friendly model takes an enemy model that is on Dangerous or Difficult terrain Out of Action."}]},{"id":"gd_killtheirleaders","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Kill Their Leaders","description":[{"tags":{},"content":"Take all of the enemy Marks Out of Action. To claim this deed, the player must first reveal which enemy models were their Marks. The model that took the last Mark Out of Action is credited with completing this Glorious Deed.","glossary":[{"val":"ELITES","id":"kw_elite"}]}]},{"id":"gd_deathfromabove","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Death From Above","description":[{"tags":{},"content":"A friendly model takes an enemy model Out of Action with a Melee Attack with the Diving Charge modifier."}]},{"id":"gd_downwithyou","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Down With You","description":[{"tags":{},"content":"A friendly model that is on an Objective takes an enemy model that is on a different, taller, Objective Out of Action with a Ranged Attack."}]},{"id":"gd_backtothemud","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Back To The Mud","description":[{"tags":{},"content":"A friendly model causes an enemy model that is on an Objective to Fall and the Fall results in it being taken Out of Action."}]},{"id":"gd_kingofthehill","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"King of the Hill","description":[{"tags":{},"content":"A model has been on all five Objectives."}]},{"id":"gd_highriskhighreward","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"High Risk, High Reward","description":[{"tags":{},"content":"An Asset takes an enemy Mark Out of Action. To claim this deed, the player must first reveal that their model was an Asset and that the enemy model was a Mark.","glossary":[{"val":"ELITES","id":"kw_elite"}]}]},{"id":"gd_elitehunter","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Elite Hunter","description":[{"tags":{},"content":"A friendly model takes two enemy models with the ELITE Keyword Out of Action.","glossary":[{"val":"ELITE","id":"kw_elite"}]}]},{"id":"gd_survivetotellthetale","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Survive to Tell the Tale","description":[{"tags":{},"content":"A friendly model that has two Injury Rolls made for it that are caused by mine explosions and is not taken Out of Action by either of the explosions."}]},{"id":"gd_intothetrenches","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Into the Trenches","description":[{"tags":{},"content":"A friendly model successfully charges an enemy model in a trench section and then takes the enemy model Out of Action with a melee attack."}]},{"id":"gd_trenchraider","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Trench Raider","description":[{"tags":{},"content":"A Warband captures a Trench section that is at least 6\\" long and is wholly within 8\\" of the enemy Deployment Zone. A Warband captures a trench section if there are 1 or more friendly models in the Trench and no enemy models are within 1\\" of it."}]},{"id":"gd_burningsight","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Burning Sight","description":[{"tags":{},"content":"A friendly model causes a Gas Cloud Marker that is more than 14\\" away from it to explode, and the explosion takes one or more enemy models Out of Action."}]},{"id":"gd_combustive","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Combustive","description":[{"tags":{},"content":"A friendly model causes a Gas Cloud Marker to explode, and the explosion takes two or more enemy models Out of Action."}]},{"id":"gd_deepbreaths","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Deep Breaths","description":[{"tags":{},"content":"A friendly model causes an enemy model to be taken Out of Action by causing it to move within 6\u201d of the centre of a Gas Cloud Marker."}]},{"id":"gd_ironlungs","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Iron Lungs","description":[{"tags":{},"content":"A Warband controls a Bunker that is within 6\\" of the centre of a Gas Cloud Marker at the end of two consecutive Turns. A Warband controls a Bunker if there are more friendly models within 1\\" of it than there are enemy models."}]},{"id":"gd_poisonousrage","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Poisonous Rage","description":[{"tags":{},"content":"A friendly model that is within 6\\" of the centre of a Gas Cloud makes a Melee Attack that takes an enemy model Out of Action."}]},{"id":"gd_headshot","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Headshot","description":[{"tags":{},"content":"A friendly model that retreated earlier in its Activation takes one of the enemy models it retreated from Out of Action.","glossary":[{"val":"ACTION","id":"kw_action"}]}]},{"id":"gd_bloodlust","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Bloodlust","description":[{"tags":{},"content":"A friendly model that has been poisoned uses a Bloodbath Roll to take an enemy model that has been poisoned Out of Action. You can convert an Injury Roll into a Bloodbath Roll by spending BLOOD MARKERS.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"}]}]},{"id":"gd_forscience","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"For Science","description":[{"tags":{},"content":"A friendly model extracts 3 Ichor Vials."}]},{"id":"gd_ichorfrenzy","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Ichor Frenzy","description":[{"tags":{},"content":"A friendly model extracts an Ichor Vial when it is wholly within the enemy Deployment Zone."}]},{"id":"gd_goodhunting","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Good Hunting","description":[{"tags":{},"content":"A friendly model takes an enemy model Out of Action with a Ranged Attack that has the Long Range modifier."}]},{"id":"gd_throwthemback","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Throw Them Back","description":[{"tags":{},"content":"As a Defender, take an enemy in a trench Out of Action when there were no defenders in the trench before you activated the model that takes the enemy out."}]},{"id":"gd_victoryordeath","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Throw Them Back","description":[{"tags":{},"content":"A Warband wins the game. This Glorious Deed is only used in campaign games and is determined after the result of the game has been decided. You do not receieve any Victory Points for acheiving this Glorious Deed, but you can award 1 Experience Point to 1 ELITE model from the Warband that has the LEADER Keyword if you have one available, and you receive Glory Points and an extra D6 for your Promotion Pool as you would normally.","glossary":[{"val":"ELITE","id":"kw_elite"},{"val":"LEADER","id":"kw_leader"}]}]},{"id":"gd_daringraid","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Daring Raid","description":[{"tags":{},"content":"The Attacker completes this Glorious Deed if a friendly model destroys a Supply Cache Marker."}]},{"id":"gd_rampage","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Rampage","description":[{"tags":{},"content":"The Attacker completes this Glorious Deed if a friendly model destroys a second Supply Cache Marker."}]},{"id":"gd_stopthemintheirtracks","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Stop Them!","description":[{"tags":{},"content":"The Defender completes this Glorious Deed if a friendly model takes an enemy Out of Action if the enemy is fully or partially within their own Deployment Zone."}]},{"id":"gd_savethesupplies","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Save the Supplies","description":[{"tags":{},"content":"The Defender completes this Glorious Deed if there are four or more Supply Cache Markers that have not been destroyed at the end of the game."}]},{"id":"gd_nostoneleftunturned","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"No Stone Left Unturned","description":[{"tags":{},"content":"A friendly model unlocks two different wagons."}]},{"id":"gd_notonmywatch","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Not on My Watch","description":[{"tags":{},"content":"Take out an enemy operating the Gun Turret with a ranged attack at Long Range."}]},{"id":"gd_supplyrun","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Supply Run","description":[{"tags":{},"content":"Two friendly models escape with a crate. The model that escaped with the second crate is credited with completing this Glorious Deed."}]},{"id":"gd_meatgrinder","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Meat Grinder","description":[{"tags":{},"content":"A friendly model takes 3 enemy models Out of Action during the game using Ranged Attacks made with the Gun Battery."}]},{"id":"gd_kingofthehill_train","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"King of the Hill","description":[{"tags":{},"content":"A friendly model ends 3 consecutive Turns on top of an embankment or the bridge and within 3\\" of a wagon.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"}]}]},{"id":"gd_overtheenemyline","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Over the Enemy Line","description":[{"tags":{},"content":"A friendly model escapes with a crate when it is wholly within the enemy Deployment Zone."}]},{"id":"gd_theshoreisours","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"The Shore is Ours","description":[{"tags":{},"content":"As the Attacker, win the game by taking control of the Main Structure Objective Building for two full consecutive turns. Your last activated model to have entered the Main Structure (and that was not taken Out of Action) gains the Glory Point."}]},{"id":"gd_theheadofthesnake","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"The Head of the Snake","description":[{"tags":{},"content":"As the Defender, take half of the Attacker\u2019s ELITE models Out of Action (rounded down) with the same model.","glossary":[{"val":"ELITE","id":"kw_elite"}]}]},{"id":"gd_battlefieldlegend","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Battlefield Legend","description":[{"tags":{},"content":"Take at least two enemy models Out of Action with the same model during the battle with any ACTIONS the model has, without suffering any BLOOD MARKER. If the model suffers a BLOOD MARKER but reduces it back to zero, the count resets and the model is now eligible to score this deed again if they meet the necessary requirements stated above.","glossary":[{"val":"ACTIONS","id":"kw_action"},{"val":"BLOOD MARKER","id":"kw_bloodmarker"}]}]},{"id":"gd_bloodcloud","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Blood Cloud","description":[{"tags":{},"content":"Take at least three enemy models Out of Action with one of your models using a weapon with the Keyword BLAST.","glossary":[{"val":"BLAST","id":"kw_blast"}]}]},{"id":"gd_coldbloodedkiller","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Cold-Blooded Killer","description":[{"tags":{},"content":"Use 2+ BLOOD MARKERS on a Melee Attack of one of your models to take an enemy ELITE model Out of Action in a single Activation.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"},{"val":"ELITE","id":"kw_elite"}]}]},{"id":"gd_ghostofshores","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Ghost of Shores","description":[{"tags":{},"content":"Take an enemy ELITE model Out of Action with one of your models with the Keywords INFILTRATOR or SKIRMISHER.","glossary":[{"val":"ELITE","id":"kw_elite"},{"val":"INFILTRATOR","id":"kw_infiltrator"},{"val":"SKIRMISHER","id":"kw_skirmisher"}]}]},{"id":"gd_ratcatcher","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Rat Catcher","description":[{"tags":{},"content":"Disperse a Swarm of Rats that has taken another model Out of Action, with a model armed with a weapon with the Keyword FIRE.","glossary":[{"val":"FIRE","id":"kw_fire"}]}]},{"id":"gd_personalrevenge","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Personal Revenge","description":[{"tags":{},"content":"A friendly model uses a Bloodbath Roll to take an enemy model Out of Action if the enemy model had taken a friendly model Out of Action earlier in the game."}]},{"id":"gd_bloodybeast","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Bloody Beast","description":[{"tags":{},"content":"Take the Beast Out of Action with a model that has at least 2+ BLOOD MARKERS at the start of its Activation.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"}]}]},{"id":"gd_dragonslayer","source":"core","tags":{},"id_num_code":0,"contextdata":{"override_points":{"value":2}},"name":"Dragon Slayer","description":[{"tags":{},"content":"A friendly model on top of the Dragon takes the Dragon Out of Action with a Melee Attack (unless its Undying or Defiant abilities change the result to a Down result). You receive 2 \u263c for completing this Glorious Deed."}]},{"id":"gd_genocidal","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Genocidal","description":[{"tags":{},"content":"A model takes 3 Peasants Out of Action."}]},{"id":"gd_opportunist","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Opportunist","description":[{"tags":{},"content":"A model is within 3\\" of a Peasant when the Peasant is trampled by the Dragon."}]},{"id":"gd_offmyback","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Off My Back","description":[{"tags":{},"content":"A friendly model takes a model that is on top of the Dragon Down, and the model then Falls off the Dragon."}]},{"id":"gd_firewithfire","source":"core","id_num_code":0,"tags":{},"contextdata":{},"name":"Fire With Fire","description":[{"tags":{},"content":"An attack made by a friendly model that has the FIRE, GAS and/or SHRAPNEL Keyword causes 2 BLOOD MARKERS to be placed next to the Dragon.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"},{"val":"FIRE","id":"kw_fire"},{"val":"GAS","id":"kw_gas"},{"val":"SHRAPNEL","id":"kw_shrapnel"}]}]},{"id":"gd_battlefieldvivisection","source":"core","tags":{},"id_num_code":0,"contextdata":{},"name":"Battlefield Vivisection","description":[{"tags":{},"content":"You complete this Glorious Deed if 3 or more enemy models are taken Out of Action while they are within 1\u201d of a friendly Combat Biologist."}]}]'),j=JSON.parse('[{"id":"sr_unforseeneventsheroes","source":"core","tags":{},"contextdata":{},"name":"Unforseen Events","description":[{"tags":{"desc_type":"default"},"content":"At the start of each Turn after the first, one of the players must roll a D6. On a roll of 1-4 nothing happens, but on a 5 or 6, an Unforeseen Event takes place (do not roll again to see if any further Unforeseen Events take place). Roll D3 and look up the roll on the table below to see what happens."},{"tags":{"desc_type":"headed_table"},"content":"","subcontent":[{"tags":{"desc_type":"table_headrow"},"content":"","subcontent":[{"tags":{"desc_type":"table_headitem"},"content":"D3"},{"tags":{"desc_type":"table_headitem"},"content":"Unforseen Event"}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item"},"content":"1"},{"tags":{"desc_type":"table_item"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Rising Fog: "},{"tags":{"desc_type":"bold"},"content":"Heavy fog covers the entire combat zone, drastically limiting visibility for all models. During this Turn and the next Turn, all Ranged Weapons have their Range halved (short range will be half the reduced Range)."}]}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item"},"content":"2"},{"tags":{"desc_type":"table_item"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Rain, Mud, and Guts: "},{"tags":{"desc_type":"bold"},"content":"The clouds roar and wail as a sudden downpour strikes the battlefield, leaving the ground muddy and bloody, and battlekit heavy and wet. During this Turn and the next Turn, add -2 DICE to rolls for Melee Attacks.","glossary":[{"val":"-2 DICE","id":"kw_minusdice"}]}]}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item"},"content":"3"},{"tags":{"desc_type":"table_item"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Deep Craters: "},{"tags":{"desc_type":"bold"},"content":"A sudden and violent earthquake hits the area, sending tremors through the earth as the land splits and caves in, forming deep craters all over the warzone. The players roll-off. Starting with the winner, they take it in turn to each placing Crater Markers, one at a time, until 6 new markers have been placed. The Crater Markers cannot be placed within a Deployment Zone or within 2\\" of a terrain piece or a model. Open terrain within 2\\" of the centre of the Crater Marker is considered to be a pit that has sheer sides and is D3+3\\" deep (roll separately for each Marker when it is placed). Models can Jump Down or Fall into the pit, and will need to Climb in order to leave it. Crater Markers can be represented by a suitable terrain piece that is up to 4\\" across, if any are available."}]}]}]}],"options":[]},{"id":"sr_trenches","source":"core","tags":{},"contextdata":{},"name":"Trenches","description":[{"tags":{"desc_type":"default"},"content":"The Defender places three 8\u201d-long Trench sections in their Deployment Zone. They can be placed as the Defender wishes and can be continuous, but each section always counts separately for Victory Points (see below)."}],"options":[]},{"id":"sr_mines","source":"core","tags":{},"contextdata":{},"name":"Mines","description":[{"tags":{"desc_type":"paragraph"},"content":"The Defender then places 12 mine markers on the battlefield, four which will be duds \u2013 the defender marks the duds on the side of the marker that is hidden from view (face down). The Defender can place the mines anywhere within the battlefield up to 12\u201d away from their own Deployment Zone as shown, though not inside their own deployment zone."},{"tags":{"desc_type":"paragraph"},"content":"When any model comes within 2\u201d of the centre of a mine counter (players can measure this distance beforehand), flip the counter over to see if it is a dud or not. If the mine is a dud, discard it immediately. If the mine is not a dud, every model within 3\u201d must immediately roll on the Injury Chart to see what happens as a result of the exploding mine. The mines have the Keyword SHRAPNEL, so the models hit by the mine blast suffer an additional BLOOD MARKER unless they have protection against this. Afterwards, remove the mine marker. It is possible to trigger more than one mine at the time.","glossary":[{"val":"SHRAPNEL","id":"kw_shrapnel"},{"val":"BLOOD MARKER","id":"kw_bloodmarker"}]},{"tags":{"desc_type":"paragraph"},"content":"Some models, such as New Antioch Combat Engineers can remove a mine counter by moving in base contact with it and passing a RISKY ACTION as indicated in their warband entry. Note that when a model attempts this, the mine does not explode until the result of the roll is determined.","glossary":[{"val":"RISKY ACTION","id":"kw_riskyaction"}]}],"options":[]},{"id":"sr_morale","source":"core","tags":{},"contextdata":{},"name":"Morale","description":[{"tags":{"desc_type":"default"},"content":"This is a fight to the finish, so a failed Morale Test will not end the battle. Instead, any warband that fails their Morale Test will be shaken instead. It is possible for both warbands to be shaken."}],"options":[]},{"id":"sr_gunturret","source":"core","tags":{},"contextdata":{},"name":"Gun Turret","description":[{"tags":{"desc_type":"equipment"},"content":"eq_gunturret"}],"options":[]},{"id":"sr_mortar","source":"core","tags":{},"contextdata":{},"name":"Mortar","description":[{"tags":{"desc_type":"equipment"},"content":"eq_mortar"}],"options":[]},{"id":"sr_trainwagons","source":"core","tags":{},"contextdata":{},"name":"Train Wagons","description":[{"tags":{"desc_type":"paragraph"},"content":"The train was carrying supply crates containing precious weapons, materials, and holy relics. The supply crates are spread between the three wagons, which can be reached through the doors on the sides of the wagons. However, the doors on the sides of each wagon start the game locked.  Train Wagons cannot be destroyed or removed for any reason."},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Unlock Wagon"}]},{"tags":{"desc_type":"paragraph"},"content":"A model within 1\\" of a locked door can take an Unlock Wagon ACTION. If it does so, take a Success Roll for the model. If the roll is a Failure, nothing happens (another model can try to unlock the door later in the same turn). The door is unlocked and opened if the roll is a Success or Critical Success, revealing D3 Supply Crates inside. Place a Supply Crate Marker beside the wagon to show how many Supply Crates are inside it. If the door on the other side is unlocked, it can be used to reach any Supply Crates that remain inside, but does not generate any more of them.","glossary":[{"val":"ACTION","id":"kw_action"}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Open Crate"}]},{"tags":{"desc_type":"paragraph"},"content":"A model within 1\\" of an unlocked door on a wagon with any Supply Crate Markers still beside it, or within 1\\" of a Supply Crate Marker that has been carried by another model and dropped, can take an Open Crate ACTION. If it does so, choose one of the following three options for the model (you do not have to make a Success Roll):","glossary":[{"val":"ACTION","id":"kw_action"}]},{"tags":{"desc_type":"headless_table"},"content":"","subcontent":[{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item"},"content":"Carry Crate"},{"tags":{"desc_type":"table_item"},"content":"","subcontent":[{"tags":{"desc_type":"paragraph"},"content":"The model can carry the crate. Put the Supply Crate Markers in contact with the model\u2019s base to show it is carrying it. The only thing a model carrying a crate can do is take Move or Retreat ACTIONS - it cannot do anything else while it has the crate.","glossary":[{"val":"ACTIONS","id":"kw_action"}]},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"paragraph"},"content":"At the end of its Activation, you can say that a model that is carrying a crate will either drop it or hand it to a friendly model that is within 1\\", or choose to Destroy or Draw Supplies from the crate as described below. When a model drops the crate, place it within 1\\" of the model and not in contact with any other models. When a model hands the crate on, place the Supply Crate Marker in contact with the other model\u2019s base."},{"tags":{"desc_type":"paragraph"},"content":"If a model carrying a crate is taken Down or Out of Action, or is chosen as the target of a Melee Attack, it immediately drops the crate as described above."},{"tags":{"desc_type":"paragraph"},"content":"If a model carrying a crate finishes its Activation in contact with any edge of the battlefield, it can escape with the crate; remove the model and the Supply Crate Marker from the battlefield. The model is still considered part of the Warband for the purposes of Morale Checks."}]}]}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item"},"content":"Destroy Crate"},{"tags":{"desc_type":"table_item"},"content":"Take a Success Roll for the model. If the roll is a Failure, nothing happens. If the roll is a Success or a Critical Success, the Supply Crate Marker is destroyed (remove it from the battlefield)."}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item"},"content":"Draw Supplies"},{"tags":{"desc_type":"table_item"},"content":"Take a Success Roll for the model. If the roll is a failure, nothing happens. If the roll is a Success or a Critical Success, place a BLESSING MARKER next to the model and the crate is emptied (remove it from the battlefield).","glossary":[{"val":"BLESSING MARKER","id":"kw_blessingmarker"}]}]}]}],"options":[]},{"id":"sr_supplycrates","source":"core","tags":{},"contextdata":{},"name":"Supply Crates","description":[{"tags":{"desc_type":"paragraph"},"content":"During the game, any model that ends its move in contact with a marker can Claim it, without the need for a roll, as long as they\u2019re not engaged in melee combat. The model has then Claimed a crate. A model can end a Claim without the need for a roll at the start of the model\u2019s Activation, dropping the crate within 1\u201d of the model, in a direction of the model\u2019s choice. The same model cannot make a new Claim during that Activation. A model can only Claim one crate at a time and must immediately choose one of the three following options:"},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Extract Supplies: "},{"tags":{"desc_type":"default"},"content":"The model picks up the crate to start extracting it, without the need for a roll. The crates are HEAVY and must be held with all hands a model may have. Any weapons a model might be carrying, or is integrated with, will be rendered unusable while the model is extracting the crate. As long as a model is extracting the crate, it cannot Attack, cannot Dash and any other method of movement (teleportation, Puppet Master etc.) cannot be used to move the model due to the mystical effect of the holy relics inside, other than their standard Move.","glossary":[{"val":"HEAVY","id":"kw_heavy"}]}]},{"tags":{"desc_type":"paragraph"},"content":"At the end of its Activation, the model can pass the crate it is extracting to any friendly model within 1\u201d range, as long as neither model is in melee combat with an enemy model. The model receiving the crate is considered to have ended their Activation this turn, if it has not yet done so. A model extracting a crate can drop it without the need for a roll or be forced to drop it if engaged in melee combat, dropping the crate within 1\u201d of the model in a direction of the model owner\u2019s choice."},{"tags":{"desc_type":"paragraph"},"content":"A model can also change its choice to Destroy Supplies (see below) without the need for a roll at any point. If a model extracting a crate moves into contact with any table edge, it has escaped with the crate successfully and does not return to the table, in which case remove the Objective Marker representing the extracted supplies from the table and the model that extracted it."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Destroy Supplies: "},{"tags":{"desc_type":"default"},"content":"The model that has Claimed a crate, or that is extracting it, can attack it as an ACTION. If successful, the crate is destroyed, in which case remove the Objective Marker representing the destroyed supplies from the table.","glossary":[{"val":"ACTION","id":"kw_action"}]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Use Supplies: "},{"tags":{"desc_type":"default"},"content":"As an ACTION, a model that has Claimed a crate can attempt to open it and use the relics inside. If successful, gain a BLESSING MARKER, in which case remove the Objective Marker representing the used crate from the table.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"BLESSING MARKER","id":"kw_blessingmarker"}]}]}]}]},{"tags":{"desc_type":"paragraph"},"content":"An enemy model cannot attack a crate that has been Claimed, or that is being extracted by another model, but they can attack the model normally. "},{"tags":{"desc_type":"paragraph"},"content":"If the model that has Claimed a crate, or is extracting it, is taken Out of Action, the crate is immediately dropped within 3\u201d of the fallen model, in a direction of the enemy\u2019s choice. If it lands in contact with another model, the model can immediately Claim it, except if they\u2019re engaged in melee combat with an enemy model, in which case the crate must be dropped again in a different direction. "},{"tags":{"desc_type":"paragraph"},"content":"If the game ends while a model has a Claimed crate, or is in the process of extracting it, they have failed to either extract it, destroy it or use it, and so it does not count towards the final VPs calculation."}],"options":[]},{"id":"sr_unforseenevents","source":"core","tags":{},"contextdata":{},"name":"Unforseen Events","description":[{"tags":{"desc_type":"paragraph"},"content":"These rules represent the treacherous and often unforeseeable tides of war that can suddenly shift the battle unexpectedly. Starting on the second turn of combat, roll 1D6. On a roll of 1-3, a random event occurs, otherwise the game continues until the start of the next turn, when another roll will be required. These events will always occur at the start of the combat turn, before any model Activation (unless stated otherwise).Upon the occurrence of a random event, roll another 1D6 for the Unforeseen Events chart below to see what exactly happens and follow the directions. No more than one random encounter will ever take place in a single game, so after a random encounter is rolled, a player no longer needs to roll at the start of a combat turn. The entries below refer to the corresponding number rolled and its respective effects:"},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"1. Rising Fog"}]},{"tags":{"desc_type":"paragraph"},"content":"Heavy fog covers the entire combat zone, drastically limiting visibility for all models. All Ranged Attacks have their total range halved, according to the weapon\u2019s profile and respective modifiers that may have been applied (such as scopes etc.) The fog lasts for two turns before it dissipates."},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"2. Striding Mercenary"}]},{"tags":{"desc_type":"paragraph"},"content":"A Mercenary appears on the ridge overlooking the shore. Witnessing the unfolding carnage, they decide to seize the opportunity and offer their services to the warband with the most Glory Points currently accumulated (if both warbands have the same number of points, roll-off 1D6 to see whom they offer their help to. On a roll of 1-3, the Attacker wins, and a roll of 4-6, the Defender wins the roll-off ). The Mercenary will offer their services to the warband for a single turn, even if they have already hired their maximum number of Mercenary models for 1 Glory Point. "},{"tags":{"desc_type":"paragraph"},"content":"You can choose any of the Mercenary units available to your warband and immediately deploy them at least 6\u201d away from any other model in the battlefield, but not within the opponent\u2019s Deployment Zone. You can also deny the Mercenary\u2019s services if you don\u2019t have the required amount of points to pay them."},{"tags":{"desc_type":"paragraph"},"content":"At the end of the turn, the warband that they aided must pay them their required amount of Glory Points before they leave the battlefield. If the warband cannot (or will not) meet the Mercenary\u2019s standard, they leave, but not before taking out their frustration on a random member of the warband (only choose among members of the warband who haven\u2019t been taken Out of Action yet). Roll directly on the Injury Chart for this member, according to the Mercenary\u2019s profile statistics for the attack (the opponent chooses which attack was used), applying any applicable modifiers."},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"3. Unearthed Relics"}]},{"tags":{"desc_type":"paragraph"},"content":"Relics are suddenly unearthed in the battlefield. Each player places two Objective Markers to represent the relics, for a total of four, each at least 6\u201d away from any Deployment Zone, at least 6\u201d away from each other and at least 6\u201d away from any model. The relics cannot be placed on impassable terrain or surrounded by it. A model that comes into base contact with the relic claims it. The model\u2019s owner decides if it is a holy or unholy relic, according to the restriction of their faction\u2019s warband. The model either gains +1 BLESSING MARKER (for a holy relic) or starts radiating a malignant aura and causes FEAR (for an unholy relic).","glossary":[{"val":"BLESSING MARKER","id":"kw_blessingmarker"},{"val":"FEAR","id":"kw_fear"}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"4. The Beast of No Man\u2019s Land"}]},{"tags":{"desc_type":"paragraph"},"content":"The scent of blood soaking the ground and the incessant sound of gunfire has brought the attention of a prowling beast. Rumours have been spreading about this fiend. Some say it is a stray War Beast, a hell-spawn abomination that escaped captivity before it could be made into a War Wolf. Others claim it is something much older, something that scarred the earth and fed upon its inhabitants long before the start of the war. Whatever it is, the creature knows no bounds and sees neither friend nor foe, only meat. "},{"tags":{"desc_type":"paragraph"},"content":"The Beast must be placed within 6\u201d of a side of the board that is not a Deployment Zone and at least 6\u201d away from a Deployment Zone. The players roll-off to determine on which side of the board the creature will appear. The winning player chooses the board side and the losing player places the creature where they deem fit, according to the parameters above."},{"tags":{"desc_type":"paragraph"},"content":"Note that the Beast cannot be initially placed anywhere within 12\u201d of a warband model."},{"tags":{"desc_type":"paragraph"},"content":"At the end of each of a model\u2019s Activation, the player must roll 1D6. On a roll of 1-4, the Beast is Activated subsequently, before the opponent activates one of their own models. The same player then acts out the Beast\u2019s actions, as described in its profile. If by the end of the turn the Beast hasn\u2019t been activated, it is before the start of the next turn. The Beast can only be Activated once per turn. Below is the Beast\u2019s profile and special rules:"},{"tags":{"desc_type":"model"},"content":"md_beastofnomansland"},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"5. Rat Frenzy"}]},{"tags":{"desc_type":"paragraph"},"content":"Rats have infested the trenches ever since the start of the war. Troops wake up to the skittering of their little paws, the grinding of their teeth gnawing and tearing at the dead, and even swarming upon the living when the rotten flesh runs low and dry from the bones of the fallen. The sounds of gunfight, the bombs detonating upon the ground, the spreading of smoke and ash, and the disturbance of the troops storming the shore has stirred the rats\u2019 nest and the pests now scurry out of their holes in a ravenous frenzy, feeding on anything that stands in their way."},{"tags":{"desc_type":"paragraph"},"content":"Use two templates of 80mm to represent the Swarms of Rats. Use two Swarm of Rats\u2019 models if you have them. The players roll-off to place each Swarm of Rats on the board. The Swarms must be placed within 8\u201d of any piece of terrain, including terrain within Deployment Zones, but cannot be placed over Impassable terrain or surrounded by it, and cannot be placed directly on top of another model or in base contact with them. The Swarms must be placed at least 3\u201d away from any warband model. "},{"tags":{"desc_type":"paragraph"},"content":"The Swarms are considered Dangerous Terrain, with +1 DICE to injure. A model can Move through, start its Move or end its movement on a Swarm. If a model comes into base contact with a Swarm, they\u2019re considered to be standing on Dangerous Terrain.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"}]},{"tags":{"desc_type":"paragraph"},"content":"If a model armed with a weapon, or that has an ability with the Keyword FIRE or BLAST, and that is not knocked Down, comes into base contact with a Swarm, it can attempt a RISKY ACTION to disperse the Swarm without triggering the Dangerous terrain effect.","glossary":[{"val":"FIRE","id":"kw_fire"},{"val":"BLAST","id":"kw_blast"},{"val":"RISKY ACTION","id":"kw_riskyaction"}]},{"tags":{"desc_type":"paragraph"},"content":"If successful, remove the Swarm from the game board and the Activation of the model is over regardless of any remaining ACTIONS the model might have.","glossary":[{"val":"ACTIONS","id":"kw_action"}]},{"tags":{"desc_type":"paragraph"},"content":"Each Swarm moves 2D6\u201d at the start of each combat turn, before the Activation of any model. They will always move toward the nearest model that is knocked Down or toward the nearest model that is not engaged in melee combat and that is at least 6\u201d away from any other model. The Swarms cannot move toward a model that causes FEAR. The Swarm must have line of sight to the model that is either knocked Down or singled out in order to move toward them. If neither condition is met, the Swarm does not move on that turn.","glossary":[{"val":"FEAR","id":"kw_fear"}]},{"tags":{"desc_type":"paragraph"},"content":"The Swarms cannot be engaged in any form of combat. The Swarms will stay for D3 turns after which the rats will scurry back to their holes and disappear."},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"6. Long Lost Stash"}]},{"tags":{"desc_type":"paragraph"},"content":"The constant bombardment over the shore uncovers long lost stashes, containing several weapons and items, the spoils of war. Each player places one Objective Marker to represent these stashes to a total of two, each at least 8\u201d away from any Deployment Zone, at least 8\u201d away from each other and at least 6\u201d away from any model. The stashes cannot be placed on impassable terrain or surrounded by it. "},{"tags":{"desc_type":"paragraph"},"content":"A model that comes into base contact with the stash claims it. The model\u2019s owner rolls 1D6 for a chance to get one of the following items:"},{"tags":{"desc_type":"headless_table"},"content":"","subcontent":[{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item"},"content":"1"},{"tags":{"desc_type":"table_item"},"content":"","subcontent":[{"tags":{"desc_type":"equipmentslim"},"content":"eq_trenchshield"}]}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item"},"content":"2"},{"tags":{"desc_type":"table_item"},"content":"","subcontent":[{"tags":{"desc_type":"equipmentslim"},"content":"eq_standardarmour"}]}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item"},"content":"3"},{"tags":{"desc_type":"table_item"},"content":"","subcontent":[{"tags":{"desc_type":"equipmentslim"},"content":"eq_grenades"}]}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item"},"content":"4"},{"tags":{"desc_type":"table_item"},"content":"","subcontent":[{"tags":{"desc_type":"equipmentslim"},"content":"eq_medikit"}]}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item"},"content":"5"},{"tags":{"desc_type":"table_item"},"content":"","subcontent":[{"tags":{"desc_type":"equipmentslim"},"content":"eq_armourpiercingbullets"}]}]},{"tags":{"desc_type":"table_row"},"content":"","subcontent":[{"tags":{"desc_type":"table_item"},"content":"6"},{"tags":{"desc_type":"table_item"},"content":"","subcontent":[{"tags":{"desc_type":"equipmentslim"},"content":"eq_grenadelauncher"}]}]}]},{"tags":{"desc_type":"paragraph"},"content":"The model that claims the stash may immediately equip the item they have looted for the duration of this game."}],"options":[]},{"id":"sr_thedragon","source":"core","tags":{},"contextdata":{},"name":"The Dragon","description":[{"tags":{"desc_type":"paragraph"},"content":"The Dragon is represented by a model on a base between 120mm and 300mm. Ideally, it should be large enough and shaped in such a way that two models on 60mm bases (or four models on 25mm bases) could stand on it at once. It can be a Larval Beast, a Possessed Tank, an actual Dragon, or any other large imposing monster."},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"The Dragon\'s Prey"}]},{"tags":{"desc_type":"paragraph"},"content":"When a player Activates the Dragon, they must first choose its prey. They then take 1 Move ACTION and 1 Shoot or 1 Fight ACTION with the Dragon. If the Dragon is not within 1\\" of its prey at the start of its Activation, it will move as described below and then attack. If the Dragon is within 1\\" of its prey at the start of its Activation, it will attack before it moves. If the attack takes the prey Out of Action, choose new prey and then move the Dragon as described below.","glossary":[{"val":"ACTION","id":"kw_action"}]},{"tags":{"desc_type":"paragraph"},"content":"The Dragon\u2019s prey is determined by using the following list of priorities:"},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"If a model attacked the Dragon this Turn or in the last Turn, and the model is not on the Dragon\u2019s back, then it becomes the Dragon\u2019s prey. If several models are eligible, the closest eligible model to the Dragon becomes its prey. If two or more eligible models are equally close to the Dragon, the player can choose which model is its prey."},{"tags":{"desc_type":"default"},"content":"If the Dragon was not attacked in this Turn or the last Turn, or if it was attacked and the attacking models have been taken Out of Action, then the Peasant closest to the Dragon becomes its prey. If two or more Peasants are equally close to the Dragon, the player can choose which model is its prey."},{"tags":{"desc_type":"default"},"content":"If no Peasants are left on the battlefield, and the Dragon was not attacked in this Turn or the last Turn, then it has no prey and will instead attempt to leave the battlefield."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Attacking With The Dragon"}]},{"tags":{"desc_type":"paragraph"},"content":"When the Dragon attacks, it will target its prey if it can do so. Otherwise, it will target the nearest model that it can attack. If two or more potential targets are equally close to the Dragon, the player can choose which model it attacks. The Dragon will make a Melee Attack with its Teeth and Claws if it is within 1\\" of its target. If it is not within 1\\" of the target but is within 10\\" of it, it will make a Ranged Attack with its Fire Breath. If it is not within 10\\" of its target, it does not attack."},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Moving The Dragon"}]},{"tags":{"desc_type":"paragraph"},"content":"The player must move the Dragon towards its prey so that it finishes either in base contact with it or if that is impossible, as close to its prey as possible. If the Dragon has no prey, move it so that it finishes the move as close as possible to the nearest edge of the battlefield. If it reaches the edge of the battlefield, it leaves and is removed from the battlefield. Note that the Dragon\u2019s Siege Weapon ability allows it to move across terrain, and its Crush ability allows it to move over models when trying to reach its prey."},{"tags":{"desc_type":"model"},"content":"md_thedragon"}],"options":[]},{"id":"sr_thepeasants","source":"core","tags":{},"contextdata":{},"name":"The Peasants","description":[{"tags":{"desc_type":"paragraph"},"content":"The Peasants are represented by suitably bedraggled and oppressed-looking models. The only thing an Activated Peasant model can do is take a Move or Retreat ACTION. When a player moves a Peasant model, they must do so so that it finishes the move as close as possible to the nearest edge of the battlefield. A Peasant will never enter Dangerous terrain, Climb, Jump, or Jump Down. If you are ever required to take a Success Roll for a Peasant, add -3 DICE to their roll.","glossary":[{"val":"-3 DICE","id":"kw_minusdice"},{"val":"ACTION","id":"kw_action"}]},{"tags":{"desc_type":"paragraph"},"content":"If a Peasant reaches the edge of the battlefield, they leave and are removed from the battlefield."},{"tags":{"desc_type":"model"},"content":"md_thepeasant"}],"options":[]},{"id":"sr_neutralmodels","source":"core","tags":{},"contextdata":{},"name":"Neutral Models","description":[{"tags":{"desc_type":"paragraph"},"content":"The Dragon and the Peasants are neutral models. Neutral models are treated as enemy models by both sides."},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Neutral Model Activation Rolls"}]},{"tags":{"desc_type":"paragraph"},"content":"When a player finishes an Activation with one of their models, they must take a Neutral Model Activation Roll by rolling a D6. If they roll a 1-4, they can Activate a Peasant of their choice, and on a 5-6, they can Activate The Dragon or a Peasant of their choice. A player cannot Activate a model that has already been Activated (by either player). Once the Dragon and all of the Peasants have been Activated during a Turn, the players stop making Neutral Model Activation Rolls until the following turn. When a player Activates a neutral model, they must carry out an Activation with it using the rules for the Dragon and the Peasants below. If a player runs out of models from their own Warband to Activate and there are still neutral models remaining to Activate, they must still make Neutral Model Activation Rolls. Note that once the Dragon has been Activated, there is no longer any need to make the Neutral Model Activation Rolls; the players can just pick a Peasant that has yet to be Activated and Activate them. In the unlikely event that the Dragon remains to be Activated after both players have finished Activating models from their Warband, just roll-off and the winner Activates the Dragon."}],"options":[]},{"id":"sr_tothedeath","source":"core","tags":{},"contextdata":{},"name":"To The Death!","description":[{"tags":{"desc_type":"paragraph"},"content":"Neither side takes Morale Checks during this game, and neither player can choose to flee with their Warband."}],"options":[]},{"id":"sr_reliquarymarkers","source":"core","tags":{},"contextdata":{},"name":"Reliquary Markers","description":[{"tags":{"desc_type":"paragraph"},"content":"The Markers shown on the map represent Reliquaries. Set up the Markers at the locations shown on the map. At the end of Turn 1, remove Reliquaries 1 and 2, and at the end of turn 2, remove Reliquaries 3 and 4."},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Claim Reliquary: "},{"tags":{"desc_type":"default"},"content":"A model that is within 1\\" of a Reliquary, can take a Claim Reliquary ACTION. If it does so, take a Success Roll for the model. If the roll is a Failure, nothing happens. If the roll is a Success or Critical Success, the Reliquary is claimed by the model. A Reliquary that has been claimed cannot be claimed again for the rest of the Turn (it can then be claimed again by either side in subsequent Turns). Note that after a model claims a Reliquary, it remains claimed by their side for the rest of the Turn even if the model is subsequently taken Down or Out of Action.","glossary":[{"val":"ACTION","id":"kw_action"}]}]}]}],"options":[]},{"id":"sr_reinforcement","source":"core","tags":{},"contextdata":{},"name":"Reinforcements","description":[{"tags":{"desc_type":"paragraph"},"content":"At the start of each Turn, the players roll-off. The winner rolls a D3 to see how many reinforcement models each of the players can deploy. The players then alternate deploying reinforcement models, one at a time, starting with the player that won the roll-off. Reinforcement models must be deployed touching the edge of the battlefield, wholly within their Deployment Zone, and more than 8\\" from the closest enemy model. If a player runs out of reinforcement models, the opposing player can set up any remaining reinforcements they have available up to the limit set for the Turn. Players must set up reinforcements if they have any available and are allowed to do so (you can\u2019t choose to hold them back)."}],"options":[]},{"id":"sr_ichorpitmarkers","source":"core","tags":{},"contextdata":{},"name":"Ichor Pit Markers","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italics"},"content":"The entire battlefield was unknowingly built atop the back of a slumbering Larval Beast Lord. The unending barrage of shelling and gunfire has torn open wounds the size of pits across the monster\u2019s back, each one filled with toxic ichor. This rare substance can corrode metal, flesh, and bone, carries unnamed diseases, and brims with properties not yet understood. Despite the immense risk of harvesting it and awakening the beast, the prize is simply too great to pass up."}]},{"tags":{"desc_type":"paragraph"},"content":"Open ground and terrain within 2\u201d of the centre of the Ichor Pit Marker is treated as being Difficult and Dangerous terrain, in addition to any other terrain rules it may have.","glossary":[{"val":"INJURY MODIFIER","id":"kw_injurymodifier"},{"val":"BLOOD MARKERS","id":"kw_bloodmarker"}]},{"tags":{"desc_type":"paragraph"},"content":"Each Ichor Pit contains enough Ichor to fill 6 Ichor Vials (see below). We recommend you keep track of how many vials have been filled from a pit by putting a D6 on top of the marker. An Ichor Pit with no Ichor left is no longer Dangerous Terrain."},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Ichor Vials"}]},{"tags":{"desc_type":"paragraph"},"content":"Each model in this scenario has 3 empty Ichor Vials (even if they are not usually allowed to take Battlekit or Equipment). Each player must keep track of how many empty and filled Ichor Vials the models in their Warband are carrying. If a model is taken Out of Action, place a Vials Marker at their location and record how many empty or filled Ichor Vials it represents. All models in this scenario can take the following ACTIONS (no Success Rolls are necessary):","glossary":[{"val":"ACTIONS","id":"kw_action"}]},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Fill Vial: "},{"tags":{"desc_type":"default"},"content":"A model with an empty Ichor Vial that is in contact with the centre of an Ichor Pit Marker can take a Fill Vial ACTION. If it does so, it fills 1 empty Ichor Vial with Ichor.","glossary":[{"val":"ACTION","id":"kw_action"}]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Trade Vials"},{"tags":{"desc_type":"default"},"content":"A model that is in contact with a friendly model can take a Trade Vials ACTION. If it does so, you can swap any number of empty or filled Ichor Vials between the two models.","glossary":[{"val":"ACTION","id":"kw_action"}]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Steal Vials"},{"tags":{"desc_type":"default"},"content":"A model that is in contact with a Vials Marker or an enemy model that is Down can take a Steals Vials ACTION. If it does so, you can take any number of empty or filled Ichor Vials from the Vials Marker or enemy model.","glossary":[{"val":"ACTION","id":"kw_action"}]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Extract Vials"},{"tags":{"desc_type":"default"},"content":"A model that is in contact with the longest edge of the battlefield in a Deployment Zone can take an Extract Vials ACTION. If it does so, you can extract any number of filled Ichor Vials from the model and replace them with empty Ichor Vials.","glossary":[{"val":"ACTION","id":"kw_action"}]}]}]}],"options":[]},{"id":"sr_artilleryshellmarkers","source":"core","tags":{},"contextdata":{},"name":"Artillery Shells Markers","description":[{"tags":{"desc_type":"paragraph"},"content":"A player can choose an Artillery Shells Marker as the target for an attack. If the attack is a Success or a Critical Success, the Artillery Shells Marker explodes. An Artillery Shells Marker will also explode if it is caught in the radius of an attack with the BLAST Keyword. When an Artillery Shells Marker explodes, the players must first determine if the Beast awakens. If the Beast does not awaken, all models within 3\\" of it are hit in the same way as if they had been hit by an Infernal Bomb from the Heretic Legions Faction List . Then the Artillery Shells Marker is replaced with an Ichor Pit Marker and the players must set up Hell Ticks as described below.","glossary":[{"val":"BLAST","id":"kw_blast"}]},{"tags":{"desc_type":"equipmentslim"},"content":"eq_artillerywitchinfernalbomb"}],"options":[]},{"id":"sr_thebeast","source":"core","tags":{},"contextdata":{},"name":"The Beast","description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italics"},"content":"I saw a great beast rise up from beneath, having seven amalgamated heads with ten mouths, and in each mouth, a thousand teeth and a hundred tongues, and upon its body were carved marks of blasphemy and the sigils of the end."}]},{"tags":{"desc_type":"paragraph"},"content":"Explosions caused by the piles of artillery shells may awaken the Beast. If the Beast awakens, all models that remain on the battlefield are taken Out of Action and the game ends."},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"First Explosion: "},{"tags":{"desc_type":"default"},"content":"The Beast twitches, causing a minor tremor across the battlefield. Roll a D6 for each model that is not Down. On a roll of 6 the model is taken Down."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Second Explosion: "},{"tags":{"desc_type":"default"},"content":"Roll a D6. On a roll of 4-6, the Beast awakens."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Third Explosion: "},{"tags":{"desc_type":"default"},"content":"Roll a D6. On a roll of 3-6, the Beast awakens."}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Fourth Explosion: "},{"tags":{"desc_type":"default"},"content":"The Beast awakens."}]}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Call of the Beast"}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"italics"},"content":"Starting with the first explosion of a pile of artillery shells, the Larval Beast\u2019s wail of torment echoes through the valley, summoning the parasites buried within its own flesh to the surface. These bloated, bloodthirsty Hell Ticks claw and tear their way out of the creature\u2019s body, swarming across the battlefield, ready to feast upon any living being they can sink their fangs into."}]},{"tags":{"desc_type":"paragraph"},"content":"If the Beast does not awaken after an explosion, the players roll-off and the winner can set up D3 Hell Tick models within 8\\" of the centre of the Ichor Pit Marker created by the explosion and more than 1\\" away from any other models. Hell Ticks are neutral models (see below). Each Hell Ticks can be represented by a small and suitably insect-like model. If no suitable models are available, represent them with Markers."},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Neutral Model Activation Rolls"}]},{"tags":{"desc_type":"paragraph"},"content":"Hell Ticks are neutral models. Neutral models are treated as enemy models by both sides. In addition, when a player finishes an Activation with one of their models, they must take a Neutral Model Activation Roll by rolling a D6. If they roll a 1-4, they can Activate a Hell Tick of their choice. They cannot Activate a Hell Tick that has already been Activated (by either player). Once the Hell Ticks have been Activated during a Turn, stop making Neutral Model Activation Rolls until the following turn."},{"tags":{"desc_type":"paragraph"},"content":"When a player Activates a Hell Tick, they must carry out an Activation with it using the rules below."},{"tags":{"desc_type":"paragraph"},"content":"If a player runs out of models from their own Warband to Activate and there are still Hell Ticks remaining to Activate, they must still make Neutral Model Activation Rolls. In the event that any Hell Ticks remain to be Activated after both players have finished Activating models from their Warband, just roll-off for each one, the winner must Activate the model."},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Hell Tick Actions"}]},{"tags":{"desc_type":"paragraph"},"content":"When a player Activates a Hell Tick, they must first choose its prey (see below). They must then take 1 Move ACTION and 1 Dash ACTION or 1 Fight ACTION with the Hell Tick. If the Hell","glossary":[{"val":"ACTION","id":"kw_action"}]},{"tags":{"desc_type":"paragraph"},"content":"Tick is not within 1\\" of its prey, it will move as described below and then Fight if it is within 1\\" of its prey or Dash if it is not. If the Hell Tick starts within 1\\" of its prey, it will attack before it moves. If the attack takes the prey Out of Action, choose new prey and then move the Hell Tick as described below."},{"tags":{"desc_type":"paragraph"},"content":"The Hell Tick\u2019s chosen prey is determined by using the following list of priorities:"},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"If there are any models within 20\\" of the Hell Tick that have BLOOD MARKERS, then it will choose the model with the most BLOOD MARKERS as its prey. If two or more models have the same number of BLOOD MARKERS, it will choose the closest as its prey. If two or more models are equally close, the player can choose which model is its prey.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"}]},{"tags":{"desc_type":"default"},"content":"If there are no models within 20\\" of the Hell Tick that have BLOOD MARKERS, then it will choose the closest as its prey. If two or more models are equally close, the player can choose which model is its prey.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"}]},{"tags":{"desc_type":"default"},"content":"Ignore other Hell Tick models when working out a Hell Tick\u2019s chosen prey."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Moving The Hell Tick"}]},{"tags":{"desc_type":"paragraph"},"content":"A player must move a Hell Tick towards its prey so that it finishes either in contact with it, or if that is impossible, as close to its prey as possible."},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Attacking With The Hell Tick"}]},{"tags":{"desc_type":"paragraph"},"content":"When the Hell Tick attacks, it will target its prey if it can do so. Otherwise, it will target the nearest model it can attack. If two or more potential targets are equally close to the Hell Tick, the player can choose which model it attacks. When a Hell Tick attacks, it makes a Melee Attack using its Mandibles ability."},{"tags":{"desc_type":"model"},"content":"md_helltick"}],"options":[]},{"id":"sr_destroyingbunkers","source":"core","tags":{},"contextdata":{},"name":"Destroying Bunkers","description":[{"tags":{"desc_type":"paragraph"},"content":"Models on the attacking side with the ELITE Keyword have Demo Charges even if they are not usually allowed to take Battlekit or Equipment. A model that has Demo Charges can take the following ACTIONS (no Success Rolls are necessary):","glossary":[{"val":"ELITE","id":"kw_elite"},{"val":"ACTIONS","id":"kw_action"}]},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Place Demo Charge: "},{"tags":{"desc_type":"default"},"content":"A model that has Demo Charges and is in contact with a Bunker can take an ACTION to place the Demo Charge on the Bunker. Once it does so, it no longer has the Demo Charge but can now use the Detonate Demo Charge ACTION.","glossary":[{"val":"ACTION","id":"kw_action"}]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Detonate Demo Charge: "},{"tags":{"desc_type":"default"},"content":"A model that has set Demo Charges can take an ACTION to detonate the Demo Charge. It can take the ACTION at any time during the game, and can wait one or more Turns before it does so if desired (this gives the model a chance to move away so it does not get caught in the explosion). When it finally takes the ACTION, make an Injury Roll with the IGNORE ARMOUR Keyword for every model within 3\\" of the Bunker. The Bunker Marker is then removed, and the terrain piece it was on is no longer considered a Bunker. Note that if a model that has placed a Demo Charge is taken Out of Action, it will not be possible to detonate the Demo Charge.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"IGNORE ARMOUR","id":"kw_ignorearmour"}]}]}]}],"options":[]},{"id":"sr_toppriorityobjective","source":"core","tags":{},"contextdata":{},"name":"Top Priority Objective","description":[{"tags":{"desc_type":"paragraph"},"content":"After deployment, each player must secretly write down which one of the five Objectives is their top priority. Capturing it will earn the player additional VPs at the end of the game."}],"options":[]}]'),S=JSON.parse('[{"id":"so_nomansland","source":"core","tags":{"weight":50},"name":"No Man\'s Land","id_num_code":1,"battlefield":{"field_size":[],"standard_terrain":true,"extra_features":[{"tags":{"desc_type":"subsubheading"},"content":"No Man\'s Land Terrain Pieces"},{"tags":{"desc_type":"paragraph"},"content":"The players roll-off, and the winner sets up the terrain for the game. The terrain pieces for a game taking place in No Man\'s Land must be chosen from the following list:"},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Trenches"},{"tags":{"desc_type":"default"},"content":"Ruined Buildings"},{"tags":{"desc_type":"default"},"content":"Ruined Corners"},{"tags":{"desc_type":"default"},"content":"Hills"},{"tags":{"desc_type":"default"},"content":"Areas of Dangerous Terrain (barbed wire, swampy ground, etc)"},{"tags":{"desc_type":"default"},"content":"Area of Difficult Terrain (craters, rubble, fallen trees, etc)"},{"tags":{"desc_type":"default"},"content":"Landmarks (statues, shrines, altars, etc)"}]},{"tags":{"desc_type":"subsubheading"},"content":"Number of Terrain Pieces"},{"tags":{"desc_type":"paragraph"},"content":"We recommend that you use at least 2 pieces of each terrain type if you can. Count pieces that are more than 8\\" across or more than 8\\" long as being 2 pieces of terrain towards this number rather than only 1. However, this is only a guideline, and you can use any number of terrain pieces in a No Man\'s Land scenario, from there being almost no terrain at all, to there being as much terrain as can be fitted onto the Battlefield (without breaking any of the following restrictions on how terrain pieces can be placed, of course!)"},{"tags":{"desc_type":"subsubheading"},"content":"Terrain Setup"},{"tags":{"desc_type":"paragraph"},"content":"The terrain pieces must be set up in such a way that each piece of terrain is at least 6\\" away from any other pieces of terrain. Trenches can only be set up if they are wholly within one of the Deployment Zones shown on the map for the scenario that is being played."}]},"special_rules":[],"banned_deployments":[],"description":[{"tags":{"desc_type":"paragraph"},"content":"No Man\'s Land is the area that lies between the trench systems of the Great War. It is a stark and deadly place, criss-crossed with fire from machine-guns and artillery, and with only occasional ruined buildings, craters, fallen trees, wrecked tanks or cannons, and pockmarked shrines to provide cover. This makes it a dangerous place to enter in daylight, so most Scenarios that take place in No Man\'s Land will be night-time raids where the cover of darkness can be used to provide some measure of protection against enemy gunfire."}]},{"id":"so_decimatedruins","source":"core","tags":{"weight":33},"name":"Decimated Ruins","id_num_code":2,"battlefield":{"field_size":[],"standard_terrain":true,"extra_features":[{"tags":{"desc_type":"subsubheading"},"content":"Decimated Ruins Terrain Pieces"},{"tags":{"desc_type":"paragraph"},"content":"The players roll-off, and the winner sets up the terrain for the game. The terrain pieces for a game taking place in Decimated Ruins must be chosen from the following list:"},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Ruined Buildings"},{"tags":{"desc_type":"default"},"content":"Ruined Corners"},{"tags":{"desc_type":"default"},"content":"Areas of Dangerous Terrain (barbed wire, swampy ground, etc)"},{"tags":{"desc_type":"default"},"content":"Area of Difficult Terrain (craters, rubble, fallen trees, etc)"},{"tags":{"desc_type":"default"},"content":"Landmarks (statues, shrines, altars, etc)"}]},{"tags":{"desc_type":"subsubheading"},"content":"Number of Terrain Pieces"},{"tags":{"desc_type":"paragraph"},"content":"You will need at least 6 ruined buildings and at least 2 pieces of each other sort of terrain. Count pieces that are more than 8\\" across or more than 8\\" long as being 2 pieces of terrain towards this number rather than only 1."},{"tags":{"desc_type":"subsubheading"},"content":"Terrain Setup"},{"tags":{"desc_type":"paragraph"},"content":"Any ruins that are going to be used for the game must be set up first. The first ruined building or corner can be set up anywhere on the Battlefield. Each subsequent ruined building or corner must be placed between 3\\" and 9\\" away from any other ruined building or corner. After all of the ruins have been set up, any other terrain can be added to the Battlefield. Terrain apart from ruins can be set up anywhere on the Battlefield that is at least 3\\" away from any other terrain pieces."}]},"special_rules":[],"banned_deployments":[],"description":[{"tags":{"desc_type":"paragraph"},"content":"Battles are frequently fought to capture cities, towns and villages located between, or just behind, the trench lines of the opposing Warbands. The constant warfare quickly reduces once-proud buildings to ruins, amongst which Warbands fight each other in brutal short-ranged engagements. Tactical and strategic success can be measured by who takes control of the ruined buildings, piles of rubble and wrecked vehicles that litter the shattered landscape."}]},{"id":"so_trenchlines","source":"core","tags":{"weight":16},"name":"Trench Lines","id_num_code":3,"battlefield":{"field_size":[],"standard_terrain":true,"extra_features":[{"tags":{"desc_type":"subsubheading"},"content":"Trench Lines Terrain Pieces"},{"tags":{"desc_type":"paragraph"},"content":"The players roll-off (\u25b6 see Rolling-Off ) , and the winner sets up the terrain for the game. The terrain pieces for a game taking place in No Man\'s Land must be chosen from the following list:"},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Trenches"},{"tags":{"desc_type":"default"},"content":"Ruined Corners"},{"tags":{"desc_type":"default"},"content":"Areas of Dangerous Terrain (barbed wire, swampy ground, etc)"},{"tags":{"desc_type":"default"},"content":"Area of Difficult Terrain (craters, rubble, fallen trees, etc)"},{"tags":{"desc_type":"default"},"content":"Landmarks (statues, shrines, altars, etc)"}]},{"tags":{"desc_type":"subsubheading"},"content":"Number of Terrain Pieces"},{"tags":{"desc_type":"paragraph"},"content":"You will need enough Trenches to reach from one edge of the battlefield to the opposite edge. In addition to the trenches, you will need 2 pieces of each other sort of terrain. Count pieces that are more than 8\\" across or more than 8\\" long as being 2 pieces of terrain towards this number rather than only 1."},{"tags":{"desc_type":"subsubheading"},"content":"Terrain Setup"},{"tags":{"desc_type":"paragraph"},"content":"Any trenches that are going to be used for the game must be set up first. The first trench must be set up so that it enters from one edge of the Battlefield, and subsequent trenches must connect with an existing trench. Once all of the trenches have been set up they must extend from the edge of the Battlefield, from where the first trench was placed, to the opposite edge of the Battlefield, so that a model could enter on one edge and exit off the other without ever having to leave a trench. After all of the trenches have been set up, any other terrain can be set up anywhere on the battlefield that is at least 1\\" from any trenches and 3\\" away from any other Terrain Pieces."}]},"special_rules":[],"banned_deployments":[],"description":[{"tags":{"desc_type":"paragraph"},"content":"Behind No Man\'s Land lies a system of interconnected Trench Lines, often several miles thick. Trench Lines are made up of interlinked trenches that are deep enough to shield most warriors from enemy fire. Because of this combat usually takes place in the trenches themselves, though sometimes a brave warrior will risk clambering out of a trench and running across open ground in order to outflank a strong enemy position."}]}]'),I=JSON.parse('[{"id":"sd_standarddeployment","source":"core","tags":{},"id_num_code":1,"name":"Standard Deployment","img_link":"217721","deployment":{"description":[{"tags":{"desc_type":"default"},"content":"The players roll-off. The winner of the roll-off chooses which Deployment Zone will be theirs. The other Deployment Zone is their opponent\'s. The players then alternate deploying their models one at a time, starting with the player who has more models in their Warband (roll-off if both players have the same number of models). Models must be set up wholly within their own Deployment Zone."}]},"battle_length":{"min":5,"max":6,"description":[{"tags":{"desc_type":"default"},"content":"Roll a D6 at the end of the fifth Turn. On a 1 or 2, the game ends immediately. On a 3 or more, the game will end at the end of the sixth Turn."}]},"special_rules":[],"description":[],"infiltrators":{"allowed":1,"description":[{"tags":{"desc_type":"paragraph"},"content":"Infiltrators can deploy normally or by using their special deployment rules."}]}},{"id":"sd_flankattack","source":"core","tags":{},"id_num_code":2,"name":"Flank Attack","img_link":"217725","deployment":{"description":[{"tags":{"desc_type":"default"},"content":"The players roll-off. The winner of the roll-off chooses which Deployment Zone will be theirs. The other Deployment Zone is their opponent\'s. The players then alternate deploying their models one at a time, starting with the player who has more models in their Warband (roll-off if both players have the same number of models). Models must be set up wholly within their own Deployment Zone."}]},"battle_length":{"min":5,"max":6,"description":[{"tags":{"desc_type":"default"},"content":"Roll a D6 at the end of the fifth Turn. On a 1 or 2, the game ends immediately. On a 3 or more, the game will end at the end of the sixth Turn."}]},"special_rules":[],"description":[],"infiltrators":{"allowed":1,"description":[{"tags":{"desc_type":"paragraph"},"content":"Infiltrators can deploy normally or by using their special deployment rules."}]}},{"id":"sd_tunnels","source":"core","tags":{},"name":"Tunnels","id_num_code":3,"img_link":"217727","deployment":{"description":[{"tags":{"desc_type":"paragraph"},"content":"The players roll-off. The winner of the roll-off chooses which Deployment Zone will be theirs. The other Deployment Zone is their opponent\'s. The winner must then set up a Tunnel Marker in the loser\'s half of the battlefield and more than 6\\" from the loser\'s Deployment Zone. The loser must then set up a Tunnel Marker in the winner\'s half of the battlefield and more than 6\\" from the winner\'s Deployment Zone."},{"tags":{"desc_type":"paragraph"},"content":"The players must then split their Warbands into two groups with an equal number of models. If a player has an odd number of models in their Warband, the extra model must go in the first group. The first group is the starting group, and the second group is their reinforcements."},{"tags":{"desc_type":"paragraph"},"content":"The players then alternate deploying their models in their starting group one at a time, starting with the player who has more models in their Warband (roll-off if both players have the same number of models). Models must be set up wholly within their own Deployment Zone. Infiltrators can deploy normally or by using their special deployment rules, but must be set up more than 8\\" from the opposing player\'s Tunnel Marker."},{"tags":{"desc_type":"paragraph"},"content":"Starting from the first Turn, the players can Activate the models from their reinforcements group, as well as the models that were deployed at the start of the battle (the reinforcements and previously deployed models can be Activated in any order). When they Activate a reinforcement, they must deploy it within 6\\" of their Tunnel Marker and more than 1\\" from any enemy models, even if it is an Infiltrator. The player can then carry out the rest of the model\'s Activation normally except that the model cannot Dash. Both players can choose to hold back reinforcements if they wish to, but any that are not deployed by the end of the third Turn are treated as having been taken Out of Action (the tunnels have collapsed!)."}]},"battle_length":{"min":5,"max":6,"description":[{"tags":{"desc_type":"default"},"content":"Roll a D6 at the end of the fifth Turn. On a 1 or 2, the game ends immediately. On a 3 or more, the game will end at the end of the sixth Turn."}]},"special_rules":[],"description":[],"infiltrators":{"allowed":2,"description":[{"tags":{"desc_type":"paragraph"},"content":"Infiltrators can deploy normally or by using their special deployment rules, but must be set up more than 8\\" from the opposing player\'s Tunnel Marker."}]}},{"id":"sd_fogofwar","source":"core","tags":{},"id_num_code":4,"name":"Fog of War","img_link":"217729","deployment":{"description":[{"tags":{"desc_type":"paragraph"},"content":"The players roll-off. The winner of the roll-off chooses whether the West or East Deployment Zone will be theirs. The players must then split their Warbands into two groups of models. The first group is the starting group, and the second group is their reinforcements. There must be more models in the starting group, and any models mounted on bases of 40mm or larger must be part of the starting group."},{"tags":{"desc_type":"paragraph"},"content":"The players then alternate deploying their models in their starting group one at a time, starting with the player who has more models in their Warband (roll-off if both players have the same number of models). Models must be set up wholly within their own Deployment Zone. Infiltrators that are part of the starting group can deploy normally or by using their special deployment rules."},{"tags":{"desc_type":"paragraph"},"content":"In the first Turn, the players must Activate the models from their reinforcements group, as well as the models that were deployed at the start of the battle (the reinforcements and previously deployed models can be Activated in any order). When they Activate a reinforcement, they must roll a D6 and refer to the Deployment Zone chart below to see where the model is deployed. The model must be deployed wholly within the Deployment Zone and in contact with the edge of the battlefield, and more than 1\\" away from any enemy models, even if it is an Infiltrator. The player can then carry out the rest of the model\'s Activation normally. Note that both players must Activate all of the models in their reinforcement group and they cannot choose to hold any back."},{"tags":{"desc_type":"alert"},"content":"If you are playing a game with the Breakthrough Victory Condition, then reinforcements cannot be set up within 12\\" of their extraction point."}]},"battle_length":{"min":5,"max":6,"description":[{"tags":{"desc_type":"default"},"content":"Roll a D6 at the end of the fifth Turn. On a 1 or 2, the game ends immediately. On a 3 or more, the game will end at the end of the sixth Turn."}]},"special_rules":[],"description":[],"infiltrators":{"allowed":1,"description":[{"tags":{"desc_type":"paragraph"},"content":"Infiltrators can deploy normally or by using their special deployment rules."}]}},{"id":"sd_chanceencounter","source":"core","tags":{},"name":"Chance Encounter","img_link":"217733","id_num_code":5,"deployment":{"description":[{"tags":{"desc_type":"paragraph"},"content":"The players roll-off. The winner of the roll-off chooses which Deployment Zone will be theirs. The other Deployment Zone is their opponent\'s. The players must then split their Warbands into two groups with an equal number of models. If a player has an odd number of models in their Warband, the extra model must go in the second group. The first group is the player\'s Turn 1 reinforcements, and the second group is their Turn 2 reinforcements. Infiltrators must deploy normally (they cannot use their special deployment rules)."},{"tags":{"desc_type":"paragraph"},"content":"In the first Turn, the players can only Activate the models from their Turn 1 reinforcements group. When they Activate a model, they must deploy it wholly within their Deployment Zone, in contact with the edge of the battlefield, and more than 1\\" from any enemy models, even if it is an Infiltrator. The player can then carry out the rest of the model\'s Activation normally. Note that both players must Activate all of the models in their reinforcement group and they cannot choose to hold any back. In the second Turn the players must Activate models from their Turn 2 reinforcements group in the same way, and they can also Activate the models they deployed during Turn 1 (the reinforcements and previously deployed models can be Activated in any order)."}]},"battle_length":{"min":6,"max":6,"description":[{"tags":{"desc_type":"default"},"content":"The game ends at the end of the sixth Turn."}]},"special_rules":[],"description":[],"infiltrators":{"allowed":0,"description":[{"tags":{"desc_type":"paragraph"},"content":"Infiltrators must deploy normally (they cannot use their special deployment rules)."}]}},{"id":"sd_longdistancebattle","source":"core","tags":{},"name":"Long-Distance Battle","img_link":"217734","id_num_code":6,"deployment":{"description":[{"tags":{"desc_type":"default"},"content":"The players roll-off. The winner of the roll-off chooses which Deployment Zone will be theirs. The other Deployment Zone is their opponent\'s. The players then alternate deploying their models one at a time, starting with the player who has more models in their Warband (roll-off if both players have the same number of models). Models must be set up wholly within their own Deployment Zone."}]},"battle_length":{"min":6,"max":6,"description":[{"tags":{"desc_type":"default"},"content":"The game ends at the end of the sixth Turn."}]},"special_rules":[],"description":[],"infiltrators":{"allowed":1,"description":[{"tags":{"desc_type":"paragraph"},"content":"Infiltrators can deploy normally or by using their special deployment rules."}]}}]'),A=JSON.parse('[{"id":"sv_attritionalbattle","source":"core","tags":{},"forces":{"even_match":true,"description":[]},"id_num_code":1,"banned_deployments":[],"name":"Attritional Battle","victory_conditions":{"description":[{"tags":{"desc_type":"paragraph"},"content":"A player wins this scenario immediately if the opposing Warband flees. Otherwise, the player with the most Victory Points at the end of the game is the winner."},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Each player scores VPs for enemy models that were taken Out of Action equal to the model\'s Cost, divided by 10 if it has a Cost in \ud83d\udc51, or by 3 if it has a Cost in \u263c (rounding fractions up). Include the model\'s Battlekit, Glory Items, and any other upgrades in its Cost. If a model has items worth both \ud83d\udc51 and \u263c, work out each separately. For example, a model that had a total Cost of 100 \ud83d\udc51 and 6 \u263c would be worth 100/10 = 10 VPS, plus 6/3 = 2VPs, for a total of 12VPs."},{"tags":{"desc_type":"default"},"content":"At the end of the game each player scores 10 VP for each Glorious Deed they completed."}]}]}},{"id":"sv_breakthrough","source":"core","tags":{},"name":"Breakthrough","id_num_code":2,"forces":{"even_match":true,"description":[]},"banned_deployments":[],"victory_conditions":{"description":[{"tags":{"desc_type":"paragraph"},"content":"Each side has an extraction point. They are directly opposite each other, on the edge of the battlefield at the centre of the opponent\'s Deployment Zone. If a model finishes a move in contact with its extraction point, it is immediately removed from the battlefield. Models are also immediately extracted if they move into contact with an enemy model that is within 1\\" of their extraction point. Note that you cannot choose for a model to not be extracted."},{"tags":{"desc_type":"paragraph"},"content":"A player wins this scenario immediately if the opposing Warband flees. Otherwise, the player with more Victory Points at the end of the game is the winner."},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Each player scores VPs for friendly models that were extracted equal to the model\'s Cost, divided by 10 if it has a Cost in \ud83d\udc51, or by 3 if it has a Cost in \u263c (rounding fractions up). Include the model\'s Battlekit, Glory Items, and any other upgrades in its Cost. If a model has items worth both \ud83d\udc51 and \u263c, work out each separately. For example, a model that had a total Cost of 100 \ud83d\udc51 and 6 \u263c would be worth 100/10 = 10 VPS, plus 6/3 = 2VPs, for a total of 12VPs."},{"tags":{"desc_type":"default"},"content":"At the end of the game each player scores 10 VP for each Glorious Deed they completed."}]}]}},{"id":"sv_overthetop","source":"core","tags":{},"id_num_code":3,"name":"Over the top","forces":{"even_match":true,"description":[]},"banned_deployments":["sd_chanceencounter"],"victory_conditions":{"description":[{"tags":{"desc_type":"paragraph"},"content":"Before deploying any models, each player must set up 4 Trench sections that are at least 8\\" long in their Deployment Zone."},{"tags":{"desc_type":"paragraph"},"content":"A player wins this scenario immediately if the opposing Warband flees. Otherwise, the player with the most Victory Points at the end of the game is the winner."},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"At the end of the game each player scores:"}]},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"1 VP for each Trench section in their own Deployment Zone that has at least 1 friendly model in it and no enemy models in it."},{"tags":{"desc_type":"default"},"content":"2 VPs for each Trench section in the enemy Deployment Zone that has at least 1 friendly model in it and no enemy models in it."},{"tags":{"desc_type":"default"},"content":"1 VP for each Glorious Deed they completed."}]}]}},{"id":"sv_retrieve","source":"core","tags":{},"id_num_code":4,"name":"Retrieve","forces":{"even_match":true,"description":[]},"banned_deployments":[],"victory_conditions":{"description":[{"tags":{"desc_type":"paragraph"},"content":"Place a Relic Marker at the midpoint of the battlefield. In addition, everywhere within 6\\" of the centre of the battlefield is covered by a dense unearthly fog. Models wholly within the fog are treated as being in cover, and movement within the fog is treated as if it were being made across difficult terrain. Infiltrators cannot use their special rules to set up within 12\\" of the Relic Marker."},{"tags":{"desc_type":"paragraph"},"content":"A model within 1\\" of the Relic Markers takes a Pick Up Relic ACTION (you do not have to make a Success Roll). Put the Relic Marker in contact with the model\'s base to show it is carrying it. The only thing a model carrying the Relic can do is take Move or Retreat ACTIONS; it cannot do anything else or be moved in any other way (e.g. with teleportation, Puppet Master, Tormentor Chain, etc.). At the end of its Activation, you can say that a model that is carrying the relic can either keep it or hand it to a friendly model that is within 1\\". When a model hands the relic on, place the Marker in contact with the other model\'s base. A model that is handed the relic is treated as having been Activated, even if it has not yet been Activated this turn.","glossary":[{"val":"ACTION","id":"kw_action"}]},{"tags":{"desc_type":"paragraph"},"content":"If a model carrying the relic is taken Down or Out of Action, or is chosen as the target of a Melee Attack, it immediately drops the relic. When a model drops the relic, place it within 1\\" of the model and not in contact with any other models."},{"tags":{"desc_type":"paragraph"},"content":"If the model carrying the relic moves into contact with a battlefield edge, it escapes with the Objective Marker and the controlling player immediately wins the Battle."},{"tags":{"desc_type":"paragraph"},"content":"A player wins this scenario immediately if the opposing Warband flees or if a friendly model carrying the relic finishes a move in contact with the edge of the battlefield. Otherwise, the player with the most Victory Points at the end of the game is the winner."},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"At the end of the game each player scores:"}]},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"10 VPs if a friendly model has the Relic Marker."},{"tags":{"desc_type":"default"},"content":" 1 VP for each Glorious Deed they completed."}]}]}},{"id":"sv_sabotage","source":"core","tags":{},"id_num_code":5,"name":"Sabotage","forces":{"even_match":false,"description":[]},"banned_deployments":[],"victory_conditions":{"description":[{"tags":{"desc_type":"paragraph"},"content":"After the terrain has been set up, the players must set up 6 Objective Markers. The players roll-off, and then alternate setting up the Markers, one at a time, starting with the winner of the roll-off. Objective Markers must be set up more than 6\\" from the edge of the battlefield or a Deployment Zone, and more than 6\\" away from any other Markers. If this makes it impossible to set up all of the Markers, discard any that cannot be set up. The players then roll-off again. The winner is the attacker and the loser is the defender. All of the attacking models apart from Infiltrators that deploy using their special rules have Demo Charges and can take the following ACTIONS (no Success Rolls are necessary):","glossary":[{"val":"ACTION","id":"kw_action"}]},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Place Demo Charge ACTION: "},{"tags":{"desc_type":"default"},"content":"A model that has Demo Charges and is in contact with an Objective Marker can take an ACTION to place the Demo Charge on the Marker. Once it does so, it no longer has the Demo Charge but can now use the Detonate Demo Charge ACTION.","glossary":[{"val":"ACTION","id":"kw_action"}]}]},{"tags":{"desc_type":"default"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"Detonate Demo Charge ACTION: "},{"tags":{"desc_type":"default"},"content":"A model that has set Demo Charges can take an ACTION to detonate the Demo Charge. It can take the ACTION at any time during the game, and can wait one or more Turns before it does so if desired (this gives the model a chance to move away so it does not get caught in the explosion). When it finally takes the ACTION, make an Injury Roll with the IGNORE ARMOUR Keyword for every model within 3\\" of the Marker. The Marker is then removed. Note that if a model that has placed a Demo Charge is taken Out of Action, it will not be possible to detonate the Demo Charge.","glossary":[{"val":"ACTION","id":"kw_action"}]}]}]},{"tags":{"desc_type":"paragraph"},"content":"A player wins this scenario immediately if the opposing Warband flees. Otherwise, the player with the most Victory Points at the end of the game is the winner."},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"At the end of the game the attacker scores:"}]},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"5 VP for each Objective Marker that has been removed."},{"tags":{"desc_type":"default"},"content":"1 VP for each Glorious Deed they completed."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"At the end of the game the defenders scores:"}]},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"5 VP for each Objective Marker that has not been removed."},{"tags":{"desc_type":"default"},"content":"1 VP for each Glorious Deed they completed."}]}]}},{"id":"sv_takeandhold","source":"core","tags":{},"id_num_code":6,"name":"Take and Hold","forces":{"even_match":true,"description":[]},"banned_deployments":[],"victory_conditions":{"description":[{"tags":{"desc_type":"paragraph"},"content":"After the terrain has been set up, the players must set up 6 Objective Markers. The players roll-off, and then alternate setting up the Markers, one at a time, starting with the winner of the roll-off. Objective Markers must be set up more than 6\\" from the edge of the battlefield or a Deployment Zone, and more than 6\\" away from any other Markers. If this makes it impossible to use all of the Markers, discard any that cannot be set up."},{"tags":{"desc_type":"paragraph"},"content":"A player wins this scenario immediately if the opposing Warband flees. Otherwise, the player with the most Victory Points at the end of the game is the winner."},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"At the end of the third Turn each player scores:"}]},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"3 VP for each Objective Marker they control. A player controls an Objective Marker if there are more friendly models within 1\\" of it than there are enemy models."}]},{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"bold"},"content":"At the end of the game each player scores:"}]},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"5 VP for each Objective Marker they control. A player controls an Objective Marker if there are more friendly models within 1\\" of it than there are enemy models."},{"tags":{"desc_type":"default"},"content":"1 VP for each Glorious Deed they completed."}]}]}}]'),N=JSON.parse('[{"id":"el_moonshinestash","name":"Moonshine Stash","source":"core","tags":{"exploration_table":"et_commonlocations"},"contextdata":{"location_rule_option":{}},"description":[{"tags":{"desc_type":"default"},"content":"You find a hidden stash of strong distilled alcohol, its origin uncertain and unsafe. Choose one of the following options:"}],"location_value":4,"options":[{"ref_id":"ot_moonshinestash","name":"","tags":{"base_loc":true},"description":[],"category":"type","type":"text","single":true,"strictness":"strict","predefined_options":[],"option_context":{"basic_option_default":{}},"data_search":{"searchtype":"complex","searchparam":{"type":"explorationlocation","request":{"operator":"and","terms":[{"item":"tags","value":"location_option","equals":true,"strict":true,"istag":true,"tagvalue":"el_moonshinestash"}],"subparams":[]}}}}]},{"id":"el_moonshinestash_distribute","name":"Distribute","source":"core","tags":{"location_option":"el_moonshinestash"},"contextdata":{"add_as_modifier":{},"validate_location":{"allowed":[{"type":"faction","value":["fc_trenchpilgrim","fc_newantioch"]}]},"activated":{}},"description":[{"tags":{"desc_type":"paragraph"},"content":"From: Moonshine Stash"},{"tags":{"desc_type":"paragraph"},"content":"Add +2 DICE to Morale Checks in your next game.","glossary":[{"val":"+2 DICE","id":"kw_plusdice"}]}],"options":[]},{"id":"el_moonshinestash_destroy","name":"Destroy","source":"core","tags":{"location_option":"el_moonshinestash"},"contextdata":{"validate_location":{"allowed":[{"type":"faction","value":["fc_ironsultanate","fc_trenchpilgrim","fc_newantioch"]}]},"add_as_modifier":{},"warband_general_hook":{},"warband_wide":{},"location_ban_selected":{},"warband_attatch":{"restriction":[{"rest_type":"elite","value":true}]},"gain_experience":{"gains":1}},"description":[{"tags":{"desc_type":"paragraph"},"content":"From: Moonshine Stash"},{"tags":{"desc_type":"paragraph"},"content":"Up to two models in your Warband with the ELITE Keyword earn +1 Experience Point each. If this entitles the model to an Advancement Roll, make the roll immediately.","glossary":[{"val":"ELITE","id":"kw_elite"}]},{"tags":{"desc_type":"paragraph"},"content":"On selection, a model will immediately gain +1 experience."}],"options":[{"ref_id":"ot_moonshinestash_a","name":"","description":[],"category":"contextobject","self_ask":true,"option_context":{"basic_option_default":{}},"dyna_only":true,"parent_level":100,"hide":true,"single":true,"question_name":"getMemberOptionsFromWarband"},{"ref_id":"ot_moonshinestash_b","name":"","description":[],"category":"contextobject","self_ask":true,"option_context":{"basic_option_default":{}},"dyna_only":true,"parent_level":100,"hide":true,"single":true,"question_name":"getMemberOptionsFromWarband"}]},{"id":"el_moonshinestash_sell","name":"Sell","source":"core","tags":{"location_option":"el_moonshinestash"},"contextdata":{"gain_ducats":{"count":30}},"description":[{"tags":{"desc_type":"default"},"content":"Add 30 \ud83d\udc51 to your Strongbox."}],"options":[]},{"id":"el_heavyweaponscache","name":"Heavy Weapons Cache","source":"core","tags":{"exploration_table":"et_commonlocations"},"contextdata":{"location_rule_option":{}},"description":[{"tags":{"desc_type":"default"},"content":"You find a hidden weapons cache. Choose one of the following options:"}],"location_value":5,"options":[{"ref_id":"ot_heavyweaponscache","name":"","description":[],"category":"type","type":"text","tags":{"base_loc":true},"single":true,"strictness":"strict","predefined_options":[],"option_context":{"basic_option_default":{}},"data_search":{"searchtype":"complex","searchparam":{"type":"explorationlocation","request":{"operator":"and","terms":[{"item":"tags","value":"location_option","equals":true,"strict":true,"istag":true,"tagvalue":"el_heavyweaponscache"}],"subparams":[]}}}}]},{"id":"el_heavyweaponscache_surplus","name":"Surplus","source":"core","tags":{"location_option":"el_heavyweaponscache"},"contextdata":{"consumable":{"gain_new_item":{"count":1,"obey_restriction":true,"obey_faction":true,"limitations":{"category":["ranged","melee","grenade","armour","shield","equipment"],"keyword":["kw_heavy"]}}}},"description":[{"tags":{"desc_type":"default"},"content":"Choose one piece of Battlekit with the HEAVY Keyword from your Warband\u2019s Armoury Tables and add it to your Arsenal.","glossary":[{"val":"HEAVY","id":"kw_heavy"}]}],"options":[]},{"id":"el_heavyweaponscache_specialise","name":"Specialise","source":"core","tags":{"location_option":"el_heavyweaponscache"},"contextdata":{"location_rule_option":{},"consumable":{"single_exploration_glory_item_free":{"cost":5}}},"description":[{"tags":{"desc_type":"default"},"content":"Choose one Glory Item with a Cost of up to 5 \u263c, and add it to your Arsenal"}],"options":[]},{"id":"el_trenchshrine","name":"Trench Shrine","source":"core","tags":{"exploration_table":"et_commonlocations"},"contextdata":{"location_rule_option":{}},"description":[{"tags":{"desc_type":"default"},"content":"You find a crude shrine erected by the soldiers of the Great War. Some are made from artillery shells or melted cannons, while a flag of the Sultanate can be used to indicate a place of prayer. Choose one of the following options:"}],"location_value":6,"options":[{"ref_id":"ot_trenchshrine","name":"","description":[],"category":"type","type":"text","single":true,"strictness":"strict","tags":{"base_loc":true},"predefined_options":[],"option_context":{"basic_option_default":{}},"data_search":{"searchtype":"complex","searchparam":{"type":"explorationlocation","request":{"operator":"and","terms":[{"item":"tags","value":"location_option","equals":true,"strict":true,"istag":true,"tagvalue":"el_trenchshrine"}],"subparams":[]}}}}]},{"id":"el_trenchshrine_standard","name":"Standard","source":"core","tags":{"location_option":"el_trenchshrine"},"contextdata":{"gain_all_from_list_find":{"obey_faction":true,"obey_restriction":true,"id":["eq_troopflag"]}},"description":[{"tags":{"desc_type":"default"},"content":"Add a "},{"tags":{"desc_type":"equipmentslim"},"content":"eq_troopflag"},{"tags":{"desc_type":"default"},"content":" to your Warband\u2019s Arsenal."}],"options":[]},{"id":"el_trenchshrine_standard_grail","name":"Standard","source":"core","tags":{"defunct":true},"contextdata":{"validate_location":{"allowed":[{"type":"faction","value":["fc_cultoftheblackgrail"]}]},"gain_all_from_list":{"obey_faction":true,"obey_restriction":true,"id":["rel_fc_eq_troopflag_grail"]}},"description":[{"tags":{"desc_type":"default"},"content":"Add a "},{"tags":{"desc_type":"equipmentslim"},"content":"eq_troopflag"},{"tags":{"desc_type":"default"},"content":" to your Warband\u2019s roster for free. You cannot exceed your Warband\u2019s LIMIT on Troop Flags in this way.","glossary":[{"val":"LIMIT","id":"kw_limit"}]}],"options":[]},{"id":"el_trenchshrine_shrine","name":"Shrine","source":"core","tags":{"location_option":"el_trenchshrine"},"contextdata":{"gain_all_from_list":{"count":1,"id":["rel_fc_eq_fieldshrine"]}},"description":[{"tags":{"desc_type":"default"},"content":"Add a "},{"tags":{"desc_type":"equipmentslim"},"content":"eq_fieldshrine"},{"tags":{"desc_type":"default"},"content":" to your Warband\u2019s Arsenal."}],"options":[]},{"id":"el_trenchshrine_return","name":"Return","source":"core","tags":{"location_option":"el_trenchshrine"},"contextdata":{"gain_glory":{"count":2}},"description":[{"tags":{"desc_type":"default"},"content":"Your Warband gains +2 \u263c."}],"options":[]},{"id":"el_ruinedhouse","name":"Ruined House","source":"core","tags":{"exploration_table":"et_commonlocations"},"contextdata":{"location_rule_option":{}},"description":[{"tags":{"desc_type":"default"},"content":"This house has been obliterated by heavy weaponry, its inhabitants ripped apart. Choose one of the following options:"}],"location_value":8,"options":[{"ref_id":"ot_ruinedhouse","name":"","tags":{"base_loc":true},"description":[],"category":"type","type":"text","single":true,"strictness":"strict","predefined_options":[],"option_context":{"basic_option_default":{}},"data_search":{"searchtype":"complex","searchparam":{"type":"explorationlocation","request":{"operator":"and","terms":[{"item":"tags","value":"location_option","equals":true,"strict":true,"istag":true,"tagvalue":"el_ruinedhouse"}],"subparams":[]}}}}]},{"id":"el_ruinedhouse_rummage","name":"Rummage","source":"core","tags":{"location_option":"el_ruinedhouse"},"contextdata":{"location_rule_option":{},"consumable":{"spend_money":{"type":0,"count":30,"obey_restriction":true,"obey_faction":true}}},"description":[{"tags":{"desc_type":"default"},"content":"Choose one or more pieces of Equipment from your Warband\u2019s Armoury Tables that are worth a total of up to 30 \ud83d\udc51 , and add them to your Arsenal."}],"options":[]},{"id":"el_ruinedhouse_relic","name":"Relic","source":"core","tags":{"location_option":"el_ruinedhouse"},"contextdata":{"location_rule_option":{},"consumable":{"single_exploration_glory_item_free":{"cost":7}}},"description":[{"tags":{"desc_type":"default"},"content":"Choose one Glory Item worth up to 7 \u263c and add it to your Arsenal."}],"options":[]},{"id":"el_survivor","name":"Survivor","source":"core","tags":{"exploration_table":"et_commonlocations"},"contextdata":{"location_rule_option":{},"exploration_option":{}},"description":[{"tags":{"desc_type":"default"},"content":"You find a soldier staggering in No Man\u2019s Land; a deserter, perhaps, or a squaddie whose comrades were wiped out by one of the horrors roaming the battlefields of the Great War. It is time to put them to work. Add the model listed below for your Faction to your Warband."}],"location_value":9,"options":[{"ref_id":"ot_survivor","name":"","description":[],"category":"type","type":"text","tags":{"hide_info":true},"single":true,"strictness":"strict","predefined_options":[],"option_context":{"basic_option_default":{}},"data_search":{"searchtype":"complex","searchparam":{"type":"explorationlocation","request":{"operator":"and","terms":[{"item":"tags","value":"location_option","equals":true,"strict":true,"istag":true,"tagvalue":"el_survivor"}],"subparams":[]}}}}]},{"id":"el_survivor_yeoman","name":"Survivor Yeoman","source":"core","tags":{"location_option":"el_survivor"},"contextdata":{"validate_location":{"allowed":[{"type":"faction","value":["fc_newantioch"]}]},"gain_new_model_from_list":{"count":1,"id":["rel_fc_md_yeoman_survivor"]}},"description":[{"tags":{"desc_type":"modelslim"},"content":"md_yeoman_survivor"},{"tags":{"desc_type":"default"},"content":", except they do not have a Ranged weapon."}],"options":[]},{"id":"el_survivor_trenchpilgrims","name":"Ecclesiastic Prisoner","source":"core","tags":{"location_option":"el_survivor"},"contextdata":{"validate_location":{"allowed":[{"type":"faction","value":["fc_trenchpilgrim"]}]},"gain_new_model_from_list":{"count":1,"id":["rel_fc_md_ecclesiasticprisoner_explore"]}},"description":[{"tags":{"desc_type":"modelslim"},"content":"md_ecclesiasticprisoner"}],"options":[]},{"id":"el_survivor_ironsultanate","name":"Azeb","source":"core","tags":{"location_option":"el_survivor"},"contextdata":{"validate_location":{"allowed":[{"type":"faction","value":["fc_ironsultanate"]}]},"gain_new_model_from_list":{"count":1,"id":["rel_fc_md_azeb_explore"]}},"description":[{"tags":{"desc_type":"modelslim"},"content":"md_azeb"}],"options":[]},{"id":"el_survivor_hereticlegion","name":"Heretic Wretched","source":"core","tags":{"location_option":"el_survivor"},"contextdata":{"validate_location":{"allowed":[{"type":"faction","value":["fc_hereticlegion"]}]},"gain_new_model_from_list":{"count":1,"id":["rel_fc_md_wretched_explore"]}},"description":[{"tags":{"desc_type":"modelslim"},"content":"md_wretched"}],"options":[]},{"id":"el_survivor_court","name":"Court Wretched","source":"core","tags":{"location_option":"el_survivor"},"contextdata":{"validate_location":{"allowed":[{"type":"faction","value":["fc_courtofthesevenheadedserpent"]}]},"gain_new_model_from_list":{"count":1,"id":["rel_fc_md_wretched_court_explore"]}},"description":[{"tags":{"desc_type":"modelslim"},"content":"md_wretched_court"}],"options":[]},{"id":"el_survivor_blackgrail","name":"Grail Thrall","source":"core","tags":{"location_option":"el_survivor"},"contextdata":{"validate_location":{"allowed":[{"type":"faction","value":["fc_cultoftheblackgrail"]}]},"gain_new_model_from_list":{"count":1,"id":["rel_fc_md_grailthrall_explore"]}},"description":[{"tags":{"desc_type":"modelslim"},"content":"md_grailthrall"}],"options":[]},{"id":"el_fallensoldier","name":"Fallen Soldier","source":"core","tags":{"exploration_table":"et_commonlocations"},"contextdata":{"location_rule_option":{},"consumable":{"gain_new_item_from_list":{"count":1,"obey_faction":true,"required":false,"id":["eq_medikit","eq_mountaineerkit","eq_shovel"]},"gain_new_item":{"count":1,"obey_restriction":true,"obey_faction":true,"limitations":{"category":["ranged"],"cost":[{"type":0,"value":15,"subval":"max"}]}}},"gain_all_from_list_find":{"id":["eq_combathelmet","eq_standardarmour"]}},"description":[{"tags":{"desc_type":"default"},"content":"You find the body of a fallen soldier. Choose one Ranged Weapon from your Warband\u2019s Armoury Tables worth up to 15 \ud83d\udc51 , and add it to your Arsenal along with a "},{"tags":{"desc_type":"equipmentslim"},"content":"eq_combathelmet"},{"tags":{"desc_type":"default"},"content":" and suit of"},{"tags":{"desc_type":"equipmentslim"},"content":"eq_standardarmour"},{"tags":{"desc_type":"default"},"content":". Then roll a D6. On a 4+, you can add one of the following to your Arsenal: a "},{"tags":{"desc_type":"equipmentslim"},"content":"eq_medikit"},{"tags":{"desc_type":"default"},"content":", a "},{"tags":{"desc_type":"equipmentslim"},"content":"eq_mountaineerkit"},{"tags":{"desc_type":"default"},"content":", or a "},{"tags":{"desc_type":"equipmentslim"},"content":"eq_shovel"},{"tags":{"desc_type":"default"},"content":"."}],"location_value":10,"options":[]},{"id":"el_trenchmerchant","name":"Trench Merchant","source":"core","tags":{"exploration_table":"et_commonlocations"},"contextdata":{"location_rule_option":{}},"description":[{"tags":{"desc_type":"default"},"content":"You establish contact with a Trench Merchant. Choose one of the following options:"}],"location_value":11,"options":[{"ref_id":"ot_trenchmerchant","name":"","description":[],"single":true,"category":"type","type":"text","tags":{"base_loc":true},"strictness":"strict","predefined_options":[],"option_context":{"basic_option_default":{}},"data_search":{"searchtype":"complex","searchparam":{"type":"explorationlocation","request":{"operator":"and","terms":[{"item":"tags","value":"location_option","equals":true,"strict":true,"istag":true,"tagvalue":"el_trenchmerchant"}],"subparams":[]}}}}]},{"id":"el_trenchmerchant_report","name":"Report","source":"core","tags":{"location_option":"el_trenchmerchant"},"contextdata":{"gain_glory":{"count":2}},"description":[{"tags":{"desc_type":"default"},"content":"Your Warband gains 2 \u263c."}],"options":[]},{"id":"el_trenchmerchant_trade","name":"Trade","source":"core","tags":{"location_option":"el_trenchmerchant"},"contextdata":{"add_location_modifier":{"id":["el_trenchmerchant_trade_mod"]},"set_exploration_purchase_cap":{"cost":5}},"description":[{"tags":{"desc_type":"default"},"content":"From now on, in the Quartermaster Step, you can purchase Glory Items costing 5 \u263c or less."}],"options":[]},{"id":"el_trenchmerchant_trade_mod","name":"Trench Merchant Trade","source":"core","tags":{"modifier":true},"contextdata":{"set_exploration_purchase_cap":{"cost":5}},"description":[{"tags":{"desc_type":"default"},"content":"From now on, in the Quartermaster Step, you can purchase Glory Items costing 5 \u263c or less."}],"options":[]},{"id":"el_mapanddocumentbag","name":"Map and Document Bag","source":"core","tags":{"exploration_table":"et_commonlocations"},"contextdata":{"location_rule_option":{},"get_exploration_skills":{"add_skill":["es_reroll"]}},"description":[{"tags":{"desc_type":"default"},"content":"Marked with carefully concealed signs, you find a hidden satchel containing maps and intelligence. Your Warband gains the "},{"tags":{"desc_type":"skillslim"},"content":"es_reroll"},{"tags":{"desc_type":"default"},"content":" Exploration Skill."}],"location_value":14,"options":[]},{"id":"el_snipersnest","name":"Sniper\'s Lair","source":"core","tags":{"exploration_table":"et_commonlocations"},"contextdata":{"location_rule_option":{}},"description":[{"tags":{"desc_type":"default"},"content":"You find the well-camouflaged position of a sniper. Add the Battlekit listed below for your Faction to your Arsenal. If there are any items you are not allowed to add to your Arsenal for any reason, add their Cost in \ud83d\udc51  to your Strongbox instead.","glossary":[{"val":"LIMIT","id":"kw_limit"}]}],"location_value":16,"options":[{"ref_id":"ot_snipersnest","name":"","description":[],"category":"type","tags":{"hide_info":true,"base_loc":true},"type":"text","single":true,"strictness":"strict","predefined_options":[],"option_context":{"basic_option_default":{}},"data_search":{"searchtype":"complex","searchparam":{"type":"explorationlocation","request":{"operator":"and","terms":[{"item":"tags","value":"location_option","equals":true,"strict":true,"istag":true,"tagvalue":"el_snipersnest"}],"subparams":[]}}}}]},{"id":"el_snipersnest_antioch","name":"New Antioch","source":"core","tags":{"location_option":"el_snipersnest"},"contextdata":{"validate_location":{"allowed":[{"type":"faction","value":["fc_newantioch"]}]},"consumable":{"gain_new_item_from_list":{"count":1,"obey_faction":true,"obey_restriction":true,"alternate_value":true,"id":["eq_sniperrifle","eq_sniperscope"]}}},"description":[{"tags":{"desc_type":"equipmentslim"},"content":"eq_sniperrifle"},{"tags":{"desc_type":"default"},"content":" or "},{"tags":{"desc_type":"equipmentslim"},"content":"eq_sniperscope"},{"tags":{"desc_type":"default"},"content":"."}],"options":[]},{"id":"el_snipersnest_pilgrim","name":"Trench Pilgrims","source":"core","tags":{"location_option":"el_snipersnest"},"contextdata":{"validate_location":{"allowed":[{"type":"faction","value":["fc_trenchpilgrim"]}]},"gain_all_from_list":{"obey_faction":true,"obey_restriction":true,"alternate_value":true,"id":["rel_fc_eq_sniperrifle_glory"]}},"description":[{"tags":{"desc_type":"equipmentslim"},"content":"eq_sniperrifle"},{"tags":{"desc_type":"default"},"content":"."}],"options":[]},{"id":"el_snipersnest_ironsultanate","name":"Iron Sultanate","source":"core","tags":{"location_option":"el_snipersnest"},"contextdata":{"validate_location":{"allowed":[{"type":"faction","value":["fc_ironsultanate"]}]},"gain_all_from_list":{"obey_faction":true,"obey_restriction":true,"alternate_value":true,"id":["rel_fc_eq_siegejezzail","rel_fc_eq_alchemicalammunition","rel_fc_eq_cloakofalamut"]}},"description":[{"tags":{"desc_type":"equipmentslim"},"content":"eq_siegejezzail"},{"tags":{"desc_type":"default"},"content":", "},{"tags":{"desc_type":"equipmentslim"},"content":"eq_alchemicalammunition"},{"tags":{"desc_type":"default"},"content":", and a "},{"tags":{"desc_type":"equipmentslim"},"content":"eq_cloakofalamut"}],"options":[]},{"id":"el_snipersnest_hereticlegion","name":"Heretic Legions","source":"core","tags":{"location_option":"el_snipersnest"},"contextdata":{"validate_location":{"allowed":[{"type":"faction","value":["fc_hereticlegion"]}]},"gain_all_from_list":{"obey_faction":true,"obey_restriction":true,"alternate_value":true,"id":["rel_fc_eq_automaticrifle"]}},"description":[{"tags":{"desc_type":"equipmentslim"},"content":"eq_automaticrifle"}],"options":[]},{"id":"el_snipersnest_blackgrail","name":"Black Grail","source":"core","tags":{"location_option":"el_snipersnest"},"contextdata":{"validate_location":{"allowed":[{"type":"faction","value":["fc_cultoftheblackgrail"]}]},"gain_all_from_list":{"obey_faction":true,"obey_restriction":true,"alternate_value":true,"id":["rel_fc_eq_fieldshrine","rel_fc_eq_corruptionbelcher"]}},"description":[{"tags":{"desc_type":"equipmentslim"},"content":"eq_corruptionbelcher"},{"tags":{"desc_type":"default"},"content":" and "},{"tags":{"desc_type":"equipmentslim"},"content":"eq_fieldshrine"}],"options":[]},{"id":"el_snipersnest_court","name":"The Court","source":"core","tags":{"location_option":"el_snipersnest"},"contextdata":{"validate_location":{"allowed":[{"type":"faction","value":["fc_courtofthesevenheadedserpent"]}]},"gain_all_from_list":{"obey_faction":true,"obey_restriction":true,"alternate_value":true,"id":["rel_fc_eq_ophidianrifle"]}},"description":[{"tags":{"desc_type":"equipmentslim"},"content":"eq_ophidianrifle"}],"options":[]},{"id":"el_fallenknight","name":"Fallen Knight","source":"core","tags":{"exploration_table":"et_commonlocations"},"contextdata":{"location_rule_option":{}},"description":[{"tags":{"desc_type":"default"},"content":"You find a fallen hero of past ages. Perhaps a baron from New Antioch, a great Faris of the Sultanate, or a Plague Knight of Beelzebub. Choose one of the following options:"}],"location_value":18,"options":[{"ref_id":"ot_fallenknight","name":"","description":[],"category":"type","tags":{"base_loc":true},"type":"text","single":true,"strictness":"strict","predefined_options":[],"option_context":{"basic_option_default":{}},"data_search":{"searchtype":"complex","searchparam":{"type":"explorationlocation","request":{"operator":"and","terms":[{"item":"tags","value":"location_option","equals":true,"strict":true,"istag":true,"tagvalue":"el_fallenknight"}],"subparams":[]}}}}]},{"id":"el_fallenknight_loot","name":"Loot","source":"core","tags":{"location_option":"el_fallenknight"},"contextdata":{"consumable":{"gain_new_item_from_list":{"count":1,"id":["eq_swordaxe","eq_trenchpolearm"]}},"gain_all_from_list_find":{"id":["eq_combathelmet","eq_trenchshield","eq_reinforcedarmour"]}},"description":[{"tags":{"desc_type":"default"},"content":"Add a suit of "},{"tags":{"desc_type":"equipmentslim"},"content":"eq_reinforcedarmour"},{"tags":{"desc_type":"default"},"content":", a "},{"tags":{"desc_type":"equipmentslim"},"content":"eq_trenchshield"},{"tags":{"desc_type":"default"},"content":", a "},{"tags":{"desc_type":"equipmentslim"},"content":"eq_combathelmet"},{"tags":{"desc_type":"default"},"content":", and either a "},{"tags":{"desc_type":"equipmentslim"},"content":"eq_swordaxe"},{"tags":{"desc_type":"default"},"content":" or "},{"tags":{"desc_type":"equipmentslim"},"content":"eq_trenchpolearm"},{"tags":{"desc_type":"default"},"content":" to your Warband\u2019s Arsenal."}],"options":[]},{"id":"el_fallenknight_memorialise","name":"Memorialise","source":"core","tags":{"location_option":"el_fallenknight"},"contextdata":{"gain_glory":{"count":2}},"description":[{"tags":{"desc_type":"default"},"content":"Your Warband gains 2 \u263c."}],"options":[]},{"id":"el_warbandstrongbox","name":"Warband Strongbox","source":"core","tags":{"exploration_table":"et_commonlocations"},"contextdata":{"location_rule_option":{}},"description":[{"tags":{"desc_type":"default"},"content":"You find the hidden strongbox of a Warband lost in the Great War. Choose one of the following options:"}],"location_value":20,"options":[{"ref_id":"ot_warbandstrongbox","name":"","single":true,"description":[],"category":"type","type":"text","strictness":"strict","predefined_options":[],"tags":{"base_loc":true},"option_context":{"basic_option_default":{}},"data_search":{"searchtype":"complex","searchparam":{"type":"explorationlocation","request":{"operator":"and","terms":[{"item":"tags","value":"location_option","equals":true,"strict":true,"istag":true,"tagvalue":"el_warbandstrongbox"}],"subparams":[]}}}}]},{"id":"el_warbandstrongbox_trove","name":"Trove","source":"core","tags":{"location_option":"el_warbandstrongbox"},"contextdata":{"location_rule_option":{},"consumable":{"spend_money":{"type":0,"count":120,"obey_restriction":true,"obey_faction":true}}},"description":[{"tags":{"desc_type":"default"},"content":"Choose one or more pieces of Battlekit from your Warband\u2019s Armoury Tables that are worth a total of up to 120 \ud83d\udc51 , and add them to your Arsenal."}],"options":[]},{"id":"el_warbandstrongbox_panoply","name":"Panoply","source":"core","tags":{"location_option":"el_warbandstrongbox"},"contextdata":{"location_rule_option":{},"consumable":{"spend_money":{"type":1,"count":9,"discount":1,"discount_limit":[{"res_type":"category","value":["melee","grenade","ranged"]}],"obey_restriction":true,"obey_faction":true,"count_cost":false}}},"description":[{"tags":{"desc_type":"default"},"content":" Choose one or more Glory Items worth a total of up to 9 \u263c, and add them to your Arsenal. In addition, when you are choosing the items, reduce the Cost of any Weapons by 1 \u263c to a minimum of 1 \u263c ."}],"options":[]},{"id":"el_angelicinstrument","name":"Angelic Instrument","source":"core","tags":{"exploration_table":"et_rarelocations"},"contextdata":{"gain_replaced_item":{"treat_as":"eq_musicalinstrument","auto_replace":true,"id":"eq_angelicinstrument"},"location_rule_option":{}},"description":[{"tags":{"desc_type":"default"},"content":"Exploring the battlefield you discover an otherworldly instrument alongside the shattered remains of a lesser angel \u2014 fallen or divine. Add an "},{"tags":{"desc_type":"equipmentslim"},"content":"eq_angelicinstrument"},{"tags":{"desc_type":"default"},"content":" to your Warband\u2019s Arsenal. It counts as a Musical Instrument except its Effect has a range of 8\\" instead of 4\\". If your Warband already has a Musical Instrument, you can replace it with the Angelic Instrument, but you do not get any \ud83d\udc51  for the instrument that was thrown away."}],"location_value":5,"options":[]},{"id":"el_abandonedpropheticradiostation","name":"Abandoned Prophetic Radio Station","source":"core","tags":{"exploration_table":"et_rarelocations"},"contextdata":{"location_rule_option":{},"get_exploration_skills":{"add_skill":["es_extradice"]}},"description":[{"tags":{"desc_type":"default"},"content":"You find a hastily-abandoned Synod of Strategic Prophecy station, with scribbled predictions and prophecies scattered amongst the disarray. Your Warband gains the "},{"tags":{"desc_type":"skillslim"},"content":"es_extradice"},{"tags":{"desc_type":"default"},"content":" Exploration Skill."}],"location_value":9,"options":[]},{"id":"el_potofmanna","name":"Pot of Manna","source":"core","tags":{"exploration_table":"et_rarelocations"},"contextdata":{"location_rule_option":{},"add_to_warband":{},"add_location_modifier":{"id":["el_potofmanna_mod"]}},"description":[{"tags":{"desc_type":"default"},"content":"You find a cup blessed by God that provides endless nourishment. Add 10 \ud83d\udc51  to the amount of loot you receive each Exploration Step (including this one)."}],"location_value":11,"options":[]},{"id":"el_potofmanna_mod","name":"Pot of Manna","source":"core","tags":{"modifier":true},"contextdata":{"location_rule_option":{}},"description":[{"tags":{"desc_type":"default"},"content":"Add 10 \ud83d\udc51  to the amount of loot you receive each Exploration Step (including this one)."}],"options":[]},{"id":"el_ransackedalchemistworkshop","name":"Ransacked Alchemical Workshop","source":"core","tags":{"exploration_table":"et_rarelocations","unforced":true},"contextdata":{"add_location_modifier":{"id":["el_ransackedalchemistworkshop_mod"]}},"description":[{"tags":{"desc_type":"default"},"content":"Amidst the rubble, you find a few intact life-giving potions. Add Curative Fluids to your Warband\u2019s Arsenal. Once, in any future Quartermaster Step, you can use the Curative Fluids to remove 1 Battle Scar (but not the effects of any Trauma) from a model in your Warband. Remove the Curative Fluids from your Warband Roster after they are used."}],"location_value":12,"options":[]},{"id":"el_ransackedalchemistworkshop_mod","name":"Curative Fluids","source":"core","tags":{"modifier":true},"contextdata":{"scar_heal":{"count":1},"warband_general_hook":{},"warband_wide":{},"warband_attatch":{}},"description":[{"tags":{"desc_type":"default"},"content":"Once, in any future Quartermaster Step, you can use the Curative Fluids to remove 1 Battle Scar (but not the effects of any Trauma) from a model in your Warband. Remove the Curative Fluids from your Warband Roster after they are used"}],"options":[{"ref_id":"ot_ransackedalchemistworkshop_a","name":"","description":[],"category":"contextobject","self_ask":true,"option_context":{"basic_option_default":{}},"dyna_only":true,"parent_level":3,"hide":true,"single":true,"question_name":"getMemberOptionsFromWarband"}]},{"id":"el_blackmarket","name":"Black Market","source":"core","tags":{"exploration_table":"et_rarelocations"},"contextdata":{"location_rule_option":{},"add_location_modifier":{"id":["el_blackmarket_mod"]},"set_exploration_purchase_cap":{"cost":8}},"description":[{"tags":{"desc_type":"default"},"content":"You discover a major underground trading post in No Man\u2019s Land. From now on, in the Quartermaster Step, you can purchase Glory Items costing 8 \u263c or less."}],"location_value":15,"options":[]},{"id":"el_blackmarket_mod","name":"Black Network Contact","source":"core","tags":{"modifier":true},"contextdata":{"set_exploration_purchase_cap":{"cost":8}},"description":[{"tags":{"desc_type":"default"},"content":"From now on, in the Quartermaster Step, you can purchase Glory Items costing 8 \u263c or less."}],"options":[]},{"id":"el_bookofgolems","name":"Book of Golems","source":"core","tags":{"exploration_table":"et_rarelocations"},"contextdata":{"location_rule_option":{},"gain_new_model_from_list":{"count":1,"id":["rel_fc_md_takwincreation_golem"]}},"description":[{"tags":{"desc_type":"default"},"content":"You find a Rabbinic manual on creating Golems. Studying it allows you to create a "},{"tags":{"desc_type":"modelslim"},"content":"md_takwincreation_golem"},{"tags":{"desc_type":"default"},"content":". Add Takwin Homunculus from The House of Wisdom Variant Warband in the Iron Sultanate Faction List to your Warband. It has the Human Hands Alchemical Formula, plus Alchemical Formulas worth a total of up to 50 \ud83d\udc51  for free (you do not have to pay for the Formulas that you choose). The Golem has the GOLEM Keyword, and replaces the SULTANATE Keyword with your Faction\'s Keyword. You can purchase Battlekit for it in the Quartermaster Step, using your own Armoury Tables instead of the ones in the Iron Sultanate Faction List. The model is treated as an Ally that can never be Promoted or receive additional Alchemical Formulas.","glossary":[{"val":"SULTANATE","id":"kw_sultanat"},{"val":"GOLEM","id":"kw_golem"}]}],"location_value":17,"options":[]},{"id":"el_ruinedchurchmasjidsynagogue","name":"Ruined Church/Masjid/Synagogue","source":"core","tags":{"exploration_table":"et_rarelocations"},"contextdata":{"location_rule_option":{}},"description":[{"tags":{"desc_type":"default"},"content":"You find a great shrine, temple or other religious building of faith. Upon its altar rests an object of great power waiting for you. Choose one of the following options:"}],"location_value":19,"options":[{"ref_id":"ot_ruinedchurchmasjidsynagogue","name":"","description":[],"category":"type","type":"text","single":true,"strictness":"strict","tags":{"base_loc":true},"predefined_options":[],"option_context":{"basic_option_default":{}},"data_search":{"searchtype":"complex","searchparam":{"type":"explorationlocation","request":{"operator":"and","terms":[{"item":"tags","value":"location_option","equals":true,"strict":true,"istag":true,"tagvalue":"el_ruinedchurchmasjidsynagogue"}],"subparams":[]}}}}]},{"id":"el_ruinedchurchmasjidsynagogue_report","name":"Report","source":"core","tags":{"location_option":"el_ruinedchurchmasjidsynagogue"},"contextdata":{"gain_glory":{"count":4}},"description":[{"tags":{"desc_type":"default"},"content":"Your Warband gains +4 \u263c."}],"options":[]},{"id":"el_ruinedchurchmasjidsynagogue_purchase","name":"Purchase","source":"core","tags":{"location_option":"el_ruinedchurchmasjidsynagogue"},"contextdata":{"location_rule_option":{},"consumable":{"single_exploration_glory_item_free":{"cost":10}}},"description":[{"tags":{"desc_type":"default"},"content":"Choose one Glory Item worth up to 10 \u263c, and add it to your Arsenal."}],"options":[]},{"id":"el_stashofdrugsanderotica","name":"Stash of Drugs & Erotica","source":"core","tags":{"exploration_table":"et_rarelocations"},"contextdata":{"location_rule_option":{}},"description":[{"tags":{"desc_type":"paragraph"},"content":"You find a motherlode of forbidden objects and chemicals, highly sought after and in demand. Choose one of the following options:"},{"tags":{"desc_type":"paragraph"},"content":"Trench Pilgrims must select the Confiscate option."}],"location_value":21,"options":[{"ref_id":"ot_stashofdrugsanderotica","name":"","single":true,"description":[],"category":"type","type":"text","tags":{"base_loc":true},"strictness":"strict","predefined_options":[],"option_context":{"basic_option_default":{}},"data_search":{"searchtype":"complex","searchparam":{"type":"explorationlocation","request":{"operator":"and","terms":[{"item":"tags","value":"location_option","equals":true,"strict":true,"istag":true,"tagvalue":"el_stashofdrugsanderotica"}],"subparams":[]}}}}]},{"id":"el_stashofdrugsanderotica_confiscate","name":"Confiscate","source":"core","tags":{"location_option":"el_stashofdrugsanderotica"},"contextdata":{"validate_location":{"allowed":[{"type":"faction","value":["fc_trenchpilgrim","fc_newantioch","fc_courtofthesevenheadedserpent","fc_cultoftheblackgrail","fc_hereticlegion","fc_ironsultanate"]}]},"gain_glory":{"count":4}},"description":[{"tags":{"desc_type":"default"},"content":"Your Warband gains +4 \u263c."}],"options":[]},{"id":"el_stashofdrugsanderotica_sell","name":"Sell","source":"core","tags":{"location_option":"el_stashofdrugsanderotica"},"contextdata":{"validate_location":{"allowed":[{"type":"faction","value":["fc_newantioch","fc_courtofthesevenheadedserpent","fc_cultoftheblackgrail","fc_hereticlegion","fc_ironsultanate"]}]},"location_rule_option":{},"gain_ducats":{"count":120}},"description":[{"tags":{"desc_type":"default"},"content":"Your Warband gains 120 \ud83d\udc51 ."}],"options":[]},{"id":"el_stashofdrugsanderotica_indulge","name":"Indulge in Drugs & Erotica","source":"core","tags":{"location_option":"el_stashofdrugsanderotica"},"contextdata":{"add_as_modifier":{},"validate_location":{"allowed":[{"type":"faction","value":["fc_newantioch","fc_courtofthesevenheadedserpent","fc_cultoftheblackgrail","fc_hereticlegion","fc_ironsultanate"]}]}},"description":[{"tags":{"desc_type":"default"},"content":"Add +1 DICE to Morale Checks for your Warband for the rest of the campaign.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"}]}],"options":[]},{"id":"el_saintsreliquary","name":"Saint\'s Reliquary","source":"core","tags":{"exploration_table":"et_rarelocations"},"contextdata":{"location_rule_option":{},"gain_all_from_list":{"id":["rel_fc_eq_saintsreliquary"]}},"description":[{"tags":{"desc_type":"default"},"content":"You discover the well-hidden reliquary of a fallen saint. Add a "},{"tags":{"desc_type":"equipmentslim"},"content":"eq_saintsreliquary"},{"tags":{"desc_type":"default"},"content":" to your Warband\u2019s Arsenal. It is a piece of Equipment that can be given to any model that has the ELITE Keyword. A model that has a Saintly Relic gains the TOUGH Keyword, but loses the INFILTRATOR Keyword if it has it, and the opposing player can ignore the Cover and Defended Obstacle modifiers for attacks that target the model.","glossary":[{"val":"TOUGH","id":"kw_tough"},{"val":"ELITE","id":"kw_elite"},{"val":"INFILTRATOR","id":"kw_infiltrator"}]}],"location_value":23,"options":[]},{"id":"el_highrankingcaptain","name":"High-Ranking Captive","source":"core","tags":{"exploration_table":"et_rarelocations"},"contextdata":{"location_rule_option":{}},"description":[{"tags":{"desc_type":"default"},"content":"You capture a high-ranking enemy \u2013 an officer of New Antioch, a Sultanate sheik, a shard of a fallen Black Grail Hegemon, a Pilgrim Prophet, a Mammonite merchant, or some other important personage. Choose one of the following options"}],"location_value":25,"options":[{"ref_id":"ot_highrankingcaptain","name":"","description":[],"single":true,"category":"type","tags":{"base_loc":true},"type":"text","hide":true,"strictness":"strict","predefined_options":[],"option_context":{"basic_option_default":{}},"data_search":{"searchtype":"complex","searchparam":{"type":"explorationlocation","request":{"operator":"and","terms":[{"item":"tags","value":"location_option","equals":true,"strict":true,"istag":true,"tagvalue":"el_highrankingcaptain"}],"subparams":[]}}}}]},{"id":"el_highrankingcaptain_execute","name":"Execute","source":"core","tags":{"location_option":"el_highrankingcaptain"},"contextdata":{"gain_glory":{"count":4}},"description":[{"tags":{"desc_type":"default"},"content":"Your Warband gains +4 \u263c"}],"options":[]},{"id":"el_highrankingcaptain_ransom","name":"Ransom","source":"core","tags":{"location_option":"el_highrankingcaptain"},"contextdata":{"gain_ducats":{"count":100}},"description":[{"tags":{"desc_type":"default"},"content":"Your Warband gains 100 \ud83d\udc51 ."}],"options":[]},{"id":"el_highrankingcaptain_indenture","name":"Indenture","source":"core","tags":{"location_option":"el_highrankingcaptain"},"contextdata":{"location_rule_option":{},"get_exploration_skills":{"add_skill":["es_setdice"]}},"description":[{"tags":{"desc_type":"default"},"content":"You keep the captive as a guide. Your Warband gains the "},{"tags":{"desc_type":"skillslim"},"content":"es_setdice"},{"tags":{"desc_type":"default"},"content":" Exploration Skill."}],"options":[]},{"id":"el_highrankingcaptain_imprison","name":"Imprison","source":"core","tags":{"location_option":"el_highrankingcaptain"},"contextdata":{"location_rule_option":{},"consumable":{"single_exploration_glory_item_free":{"cost":8}}},"description":[{"tags":{"desc_type":"default"},"content":"Choose one Glory Item with a Cost of up to 8 \u263c, and add it to your Arsenal."}],"options":[]},{"id":"el_abandonedressurectionmachine","name":"Abandoned Ressurection Machine","source":"core","tags":{"exploration_table":"et_rarelocations","unforced":true},"contextdata":{"add_location_modifier":{"id":["el_abandonedressurectionmachine_mod"]}},"description":[{"tags":{"desc_type":"default"},"content":"You find remnants of machines that were once used as part of the Meta-Christ Programme. Most of them are broken, torn apart by some immense force, but one of them works and can be dismantled. Add a Salvaged Resurrection Machine to your Warband\u2019s Arsenal. In any future Quartermaster Step, you can use the Salvaged Resurrection Machine to remove 1 Battle Scar and its corresponding Trauma from a model in your Warband. Remove the Salvaged Resurrection Machine from your Warband Roster after it is used."}],"location_value":32,"options":[]},{"id":"el_abandonedressurectionmachine_mod","name":"Salvaged Resurrection Machine","source":"core","tags":{"modifier":true},"contextdata":{"actviated":{},"scar_heal_selected":{},"warband_general_hook":{},"warband_wide":{},"warband_attatch":{}},"description":[{"tags":{"desc_type":"default"},"content":"In any future Quartermaster Step, you can use the Salvaged Resurrection Machine to remove 1 Battle Scar and its corresponding Trauma from a model in your Warband. Remove the Salvaged Resurrection Machine from your Warband Roster after it is used."}],"options":[{"ref_id":"ot_abandonedressurectionmachine_a","name":"","tags":{"unrequired_selection":true},"description":[],"category":"contextobject","self_ask":true,"option_context":{"basic_option_default":{}},"dyna_only":true,"parent_level":3,"hide":true,"single":true,"question_name":"getInjuryOptionsFromWarband"}]},{"id":"el_battlefieldofcorpses","name":"Battlefield of Corpses","source":"core","tags":{"exploration_table":"et_legendarylocations"},"contextdata":{"location_rule_option":{},"consumable":{"spend_money":{"type":0,"count":100,"limit":2,"obey_faction":true,"include_self":true}}},"description":[{"tags":{"desc_type":"default"},"content":"You come across a scene of terrible slaughter. The remains of humans from various nations and Hellish creatures, fallen in battles over the past 800 years, lie torn and scattered across the horizon, while the trenches that criss-cross this scene are filled with blood. Choose up to 2 pieces of Battlekit from your Warband\u2019s Armoury Tables worth up to 100 \ud83d\udc51  in total, and add them to your Arsenal."}],"location_value":6,"options":[]},{"id":"el_esotericlibrary","name":"Esoteric Library","source":"core","tags":{"exploration_table":"et_legendarylocations"},"contextdata":{"location_rule_option":{}},"description":[{"tags":{"desc_type":"default"},"content":"You find a concealed collection of works on Goetic Magic, blood sacrifice rites, and grimoires on the summoning of demons. Choose one of the following options:"}],"location_value":8,"options":[{"ref_id":"ot_esotericlibrary","name":"","description":[],"single":true,"category":"type","type":"text","tags":{"base_loc":true},"strictness":"strict","predefined_options":[],"option_context":{"basic_option_default":{}},"data_search":{"searchtype":"complex","searchparam":{"type":"explorationlocation","request":{"operator":"and","terms":[{"item":"tags","value":"location_option","equals":true,"strict":true,"istag":true,"tagvalue":"el_esotericlibrary"}],"subparams":[]}}}}]},{"id":"el_esotericlibrary_sell","name":"Sell","source":"core","tags":{"location_option":"el_esotericlibrary"},"contextdata":{"gain_ducats":{"dice":6,"mod":10}},"description":[{"tags":{"desc_type":"default"},"content":"Your Warband gains 6D6 x 10 \ud83d\udc51 ."}],"options":[]},{"id":"el_esotericlibrary_burn","name":"Burn","source":"core","tags":{"location_option":"el_esotericlibrary"},"contextdata":{"validate_location":{"allowed":[{"type":"faction","value":["fc_trenchpilgrim","fc_newantioch","fc_ironsultanate"]}]},"gain_glory":{"count":3,"dice3":1}},"description":[{"tags":{"desc_type":"default"},"content":"Your Warband gains 3+D3 \u263c."}],"options":[]},{"id":"el_esotericlibrary_study","name":"Study Esoteric Library","source":"core","tags":{"location_option":"el_esotericlibrary"},"contextdata":{"add_as_modifier":{},"validate_location":{"allowed":[{"type":"faction","value":["fc_courtofthesevenheadedserpent","fc_hereticlegion"]}]},"add_to_warband":{}},"description":[{"tags":{"desc_type":"default"},"content":"At the start of each game, after deployment, you can pick 1 model (friend or foe). Place 1 BLOOD MARKER next to the model that you pick.","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"}]}],"options":[]},{"id":"el_esotericlibrary_plague","name":"Plague Esoteric Library","source":"core","tags":{"location_option":"el_esotericlibrary"},"contextdata":{"add_as_modifier":{},"validate_location":{"allowed":[{"type":"faction","value":["fc_cultoftheblackgrail"]}]},"add_to_warband":{}},"description":[{"tags":{"desc_type":"default"},"content":"A Black Grail Warband may unleash a Plague from the books. At the start of each game, after deployment, you can place 1 INFECTION MARKER next to 1 model of your choice (friend or foe).","glossary":[{"val":"INFECTION MARKER","id":"kw_infectionmarker"}]}],"options":[]},{"id":"el_hiddenpassages","name":"Hidden Passages","source":"core","tags":{"exploration_table":"et_legendarylocations"},"contextdata":{"location_rule_option":{},"get_exploration_skills":{"add_skill":["es_duplicate"]}},"description":[{"tags":{"desc_type":"default"},"content":"You uncover a hidden entrance to a vast underground network, perhaps dug by the Heretics to infiltrate the Great Iron Wall, or by refugees living in No Man\u2019s Land. This allows you to explore the area you are in far more efficiently. Your Warband gains the "},{"tags":{"desc_type":"skillslim"},"content":"es_duplicate"},{"tags":{"desc_type":"default"},"content":" Exploration Skill."}],"location_value":10,"options":[]},{"id":"el_jabireanalchemicalbooks","name":"Jabierean Alchemical Books","source":"core","tags":{"exploration_table":"et_legendarylocations"},"contextdata":{"location_rule_option":{}},"description":[{"tags":{"desc_type":"default"},"content":"You find one of the fabled books of the Jabirean Corpus, filled with the most wondrous secrets of the nature of the universe. Choose one of the following options:"}],"location_value":12,"options":[{"ref_id":"ot_jabireanalchemicalbooks","name":"","description":[],"category":"type","single":true,"tags":{"base_loc":true},"type":"text","hide":true,"strictness":"strict","predefined_options":[],"option_context":{"basic_option_default":{}},"data_search":{"searchtype":"complex","searchparam":{"type":"explorationlocation","request":{"operator":"and","terms":[{"item":"tags","value":"location_option","equals":true,"strict":true,"istag":true,"tagvalue":"el_jabireanalchemicalbooks"}],"subparams":[]}}}}]},{"id":"el_jabireanalchemicalbooks_sellducats","name":"Sell for Ducats","source":"core","tags":{"location_option":"el_jabireanalchemicalbooks"},"contextdata":{"gain_ducats":{"count":150}},"description":[{"tags":{"desc_type":"default"},"content":"Your Warband gains 150 \ud83d\udc51."}],"options":[]},{"id":"el_jabireanalchemicalbooks_sellglory","name":"Sell for Glory","source":"core","tags":{"location_option":"el_jabireanalchemicalbooks"},"contextdata":{"gain_glory":{"count":5}},"description":[{"tags":{"desc_type":"default"},"content":"Your Warband gains 5 \u263c."}],"options":[]},{"id":"el_jabireanalchemicalbooks_keep","name":"Keep Alchemical Books","source":"core","tags":{"location_option":"el_jabireanalchemicalbooks"},"contextdata":{"add_as_modifier":{},"location_rule_option":{},"faction_choose_equipment":{"ids":["rel_fc_eq_fireshield"]}},"description":[{"tags":{"desc_type":"default"},"content":"From now on,in your Quartermaster Step, you can purchase "},{"tags":{"desc_type":"equipmentslim"},"content":"eq_fireshield"},{"tags":{"desc_type":"default"},"content":" from the House of Wisdom Armoury Tables & Battlekit section."}],"options":[]},{"id":"el_jabireanalchemicalbooks_study","name":"Study Alchemical Books","source":"core","tags":{"location_option":"el_jabireanalchemicalbooks"},"contextdata":{"add_location_modifier":{"id":["el_jabireanalchemicalbooks_study_mod"]},"validate_location":{"allowed":[{"type":"faction","value":["fc_ironsultanate_fv_houseofwisdom"]}]}},"description":[{"tags":{"desc_type":"default"},"content":"Alchemical Formulae now cost your Warband 5 \ud83d\udc51  less than they used to, to a minimum Cost of 5 \ud83d\udc51 ."}],"options":[]},{"id":"el_jabireanalchemicalbooks_study_mod","name":"Study Alchemical Books","source":"core","tags":{"modifier":true},"contextdata":{"purchase_modifier_upgrade":{"mod":[{"cost":-5,"requirements":[{"tag":"takwin"}],"min":5}]}},"description":[{"tags":{"desc_type":"default"},"content":"Alchemical Formulae now cost your Warband 5 \ud83d\udc51  less than they used to, to a minimum Cost of 5 \ud83d\udc51 ."}],"options":[]},{"id":"el_blacknetworkcontact","name":"Black Network Contact","source":"core","tags":{"exploration_table":"et_legendarylocations"},"contextdata":{"location_rule_option":{},"set_exploration_purchase_cap":{"cost":12},"add_location_modifier":{"id":["el_blacknetworkcontact_mod"]}},"description":[{"tags":{"desc_type":"default"},"content":"You make contact with one of the legendary Merchant Princes of the Black Network. From now on, in the Quartermaster Step, you can purchase Glory Items costing 12 \u263c or less."}],"location_value":14,"options":[]},{"id":"el_blacknetworkcontact_mod","name":"Black Network Contact","source":"core","tags":{"modifier":true},"contextdata":{"set_exploration_purchase_cap":{"cost":12}},"description":[{"tags":{"desc_type":"default"},"content":"You make contact with one of the legendary Merchant Princes of the Black Network. From now on, in the Quartermaster Step, you can purchase Glory Items costing 12 \u263c or less."}],"options":[]},{"id":"el_treasureoftheholies","name":"Treasure of the Holies","source":"core","tags":{"exploration_table":"et_legendarylocations"},"contextdata":{"location_rule_option":{},"gain_victory":{"dice3":1},"consumable":{"post_save":true,"single_exploration_glory_item_free":{"cost":999999},"relaxed_requirement":true}},"description":[{"tags":{"desc_type":"default"},"content":"You find a legendary feretory, be it the Tabernacle of the Hebrews, an altar to the Morning Star himself, a shrine founded by Saint Peter or a place where the Prophet visited. On its altar lies a treasure chest containing an object of great power waiting for you. You score D3 Campaign Victory Points and can add one Glory Item to your Arsenal for free. If you prefer you can take the treasure chest with you and choose the Glory Item in any future Quartermaster Step."}],"location_value":16,"options":[]},{"id":"el_skullofasaint","name":"Skull of a Saint","source":"core","tags":{"exploration_table":"et_legendarylocations"},"contextdata":{"location_rule_option":{}},"description":[{"tags":{"desc_type":"default"},"content":"You find the skull of a saint martyred in ages past. The power of communion lingers in its holy remains. Choose one of the following options:"}],"location_value":18,"options":[{"ref_id":"ot_skullofasaint","name":"","description":[],"single":true,"category":"type","type":"text","tags":{"base_loc":true},"strictness":"strict","predefined_options":[],"option_context":{"basic_option_default":{}},"data_search":{"searchtype":"complex","searchparam":{"type":"explorationlocation","request":{"operator":"and","terms":[{"item":"tags","value":"location_option","equals":true,"strict":true,"istag":true,"tagvalue":"el_skullofasaint"}],"subparams":[]}}}}]},{"id":"el_skullofasaint_faithful","name":"Faithful Skull","source":"core","tags":{"location_option":"el_skullofasaint"},"contextdata":{"validate_location":{"allowed":[{"type":"faction","value":["fc_ironsultanate","fc_newantioch","fc_trenchpilgrim"]}]},"gain_all_from_list":{"id":["rel_fc_eq_faithfulskull"]}},"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"A saint guides your troops before battle. Add a  "},{"tags":{"desc_type":"equipmentslim"},"content":"eq_faithfulskull"},{"tags":{"desc_type":"default"},"content":" to your Warband\u2019s Arsenal. It is a piece of Equipment with the HELD Keyword and can be given to any model. A model with the Skull Relic gains the INFILTRATORS Keyword"}]}],"options":[]},{"id":"el_skullofasaint_hell","name":"Hell Skull","source":"core","tags":{"location_option":"el_skullofasaint"},"contextdata":{"validate_location":{"allowed":[{"type":"faction","value":["fc_courtofthesevenheadedserpent","fc_cultoftheblackgrail","fc_hereticlegion"]}]},"gain_all_from_list":{"id":["rel_fc_eq_hellskull"]}},"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"The skull screams as you mount it on a pole to mock God and paint it with blasphemous names. Add a  "},{"tags":{"desc_type":"equipmentslim"},"content":"eq_hellskull"},{"tags":{"desc_type":"default"},"content":" to your Warband\u2019s Arsenal. It is a piece of Equipment with the HELD Keyword and can be given to any model. Add +2 DICE to your Morale Checks while the model is on the Battlefield and is not Down or Out of Action. In addition, you gain 1 \u263c at the end of any game in which the model is on the Battlefield and is not Down or Out of Action"}]}],"options":[]},{"id":"el_lockofsamsonshair","name":"Lock of Samson\'s Hair","source":"core","tags":{"exploration_table":"et_legendarylocations"},"contextdata":{"location_rule_option":{},"gain_all_from_list":{"id":["rel_fc_eq_samsonshair"]}},"description":[{"tags":{"desc_type":"paragraph"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"You discover a lock of the legendary Samson\u2019s hair, imbued with the essence of the strongest warrior to ever live. Add a "},{"tags":{"desc_type":"equipmentslim"},"content":"eq_lockofsamsonshair"},{"tags":{"desc_type":"default"},"content":" to your Warband\u2019s Arsenal. It is a piece of Equipment that can be given to any model. A model with a Lock of Samson\u2019s Hair gains the STRONG Keyword. In addition add +1 INJURY DICE to rolls for Melee Attacks made by a model with a Lock of Samson\u2019s Hair. "}]}],"location_value":20,"options":[]},{"id":"el_patronsvisit","name":"Patron\'s Visit","source":"core","tags":{"exploration_table":"et_legendarylocations","unforced":true},"contextdata":{"glory_victory_exchange":{"max":10}},"description":[{"tags":{"desc_type":"default"},"content":"Your Patron or their representative makes a surprise visit to your Warband. If you wish, you can immediately exchange up to 10 \u263c for an equal number of Campaign Victory Points."}],"location_value":23,"options":[]},{"id":"el_sampleofholydna","name":"Sample of Holy DNA","source":"core","tags":{"exploration_table":"et_legendarylocations","unforced":true},"contextdata":{"add_location_modifier":{"id":["el_sampleofholydna_mod"]}},"description":[{"tags":{"desc_type":"default"},"content":"You find a sample of Holy DNA. Pick 1 model in your Warband and note on your Warband Roster that they have been treated with Holy DNA. From then on, when you Activate the model, before you carry out any ACTIONS you can remove 1 BLOOD MARKER or INFECTION MARKER from the model and replace it with a BLESSING MARKER.","glossary":[{"val":"INFECTION MARKER","id":"kw_infectionmarker"},{"val":"BLOOD MARKER","id":"kw_bloodmarker"},{"val":"BLESSING MARKER","id":"kw_blessingmarker"}]}],"location_value":26,"options":[]},{"id":"el_sampleofholydna_mod","name":"Sample of Holy DNA","source":"core","tags":{"modifier":true},"contextdata":{"warband_general_hook":{},"warband_wide":{},"warband_attatch":{"apply_to_attatch":{"true_add_to_model":{"list":[{"id":"ab_holydna"}]}}}},"description":[{"tags":{"desc_type":"default"},"content":"When you Activate the model, before you carry out any ACTIONS you can remove 1 BLOOD MARKER or INFECTION MARKER from the model and replace it with a BLESSING MARKER.","glossary":[{"val":"INFECTION MARKER","id":"kw_infectionmarker"},{"val":"BLOOD MARKER","id":"kw_bloodmarker"},{"val":"BLESSING MARKER","id":"kw_blessingmarker"}]}],"options":[{"ref_id":"ot_sampleofholydna_a","name":"","description":[],"category":"contextobject","self_ask":true,"option_context":{"basic_option_default":{}},"dyna_only":true,"parent_level":3,"hide":true,"single":true,"question_name":"getMemberOptionsFromWarband"}]},{"id":"el_golgothatektites","name":"Golgotha Tektites","source":"core","tags":{"exploration_table":"et_legendarylocations"},"contextdata":{"location_rule_option":{}},"description":[{"tags":{"desc_type":"default"},"content":"Golgotha Tektites are used to forge the armour of the mighty Paladins. "}],"location_value":30,"options":[{"ref_id":"ot_golgothatektites","name":"","description":[],"single":true,"category":"type","type":"text","tags":{"base_loc":true},"strictness":"strict","predefined_options":[],"option_context":{"basic_option_default":{}},"data_search":{"searchtype":"complex","searchparam":{"type":"explorationlocation","request":{"operator":"and","terms":[{"item":"tags","value":"location_option","equals":true,"strict":true,"istag":true,"tagvalue":"el_golgothatektites"}],"subparams":[]}}}}]},{"id":"el_golgothatektites_apply","name":"Apply Golgotha Tektites","source":"core","tags":{"location_option":"el_golgothatektites"},"contextdata":{"warband_general_hook":{},"warband_wide":{},"add_as_modifier":{},"warband_attatch":{"restriction_eq":[{"rest_type":"category","value":"armour"}],"apply_to_attatch":{"true_add_to_model":{"list":[{"id":"ab_golgothatektites"}]}}}},"description":[{"tags":{"desc_type":"paragraph"},"content":"Pick up to two suits of your Warband\u2019s Armour and note on your Warband Roster that they have been treated with Golgotha Tektites. Suits of Armour treated with Golgotha Tektites gain the NEGATE FIRE, NEGATE GAS, and NEGATE SHRAPNEL Keywords unless they have them already. ","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"},{"val":"GAS","id":"kw_gas"},{"val":"FIRE","id":"kw_fire"},{"val":"SHRAPNEL","id":"kw_shrapnel"}]}],"options":[{"ref_id":"ot_golgothatektites_apply_a","name":"","description":[],"category":"contextobject","self_ask":true,"option_context":{"basic_option_default":{}},"dyna_only":true,"parent_level":3,"hide":true,"single":true,"question_name":"getEquipmentOptionsFromWarband"},{"ref_id":"ot_golgothatektites_apply_b","name":"","description":[],"category":"contextobject","self_ask":true,"option_context":{"basic_option_default":{}},"dyna_only":true,"parent_level":3,"hide":true,"single":true,"question_name":"getEquipmentOptionsFromWarband"}]},{"id":"el_golgothatektites_turnin","name":"Turn In","source":"core","tags":{"location_option":"el_golgothatektites"},"contextdata":{"validate_location":{"allowed":[{"type":"faction","value":["fc_newantioch"]}]},"gain_glory":{"count":15}},"description":[{"tags":{"desc_type":"paragraph"},"content":"You can hand the Golgotha Tektites over to the Church instead of treating suits of Armour with them. If you do so, you gain +15 \u263c"}],"options":[]},{"id":"el_fruitfromthetreeofgoodandevilknowledge","name":"Fruit from the Tree of Good and Evil Knowledge","source":"core","tags":{"exploration_table":"et_legendarylocations"},"contextdata":{"add_location_modifier":{"id":["el_fruitfromthetreeofgoodandevilknowledge_mod"]}},"description":[{"tags":{"desc_type":"default"},"content":"Amongst the bones of giant humans unearthed by the ravages of war you discover a golden-hued fruit wrapped in spun cloth. Pick 1 model in your Warband. The model you pick eats the fruit you discovered. They gain the DEMONIC Keyword and you can give them one Skill of your choice. You can choose a Skill from any of the Skill Tables, or any Patron Skill (it does not have to be one from your own Patron), or any Exploration Skill.","glossary":[{"val":"DEMONIC","id":"kw_demonic"}]}],"location_value":36,"options":[]},{"id":"el_fruitfromthetreeofgoodandevilknowledge_mod","name":"Fruit from the Tree of Good and Evil Knowledge","source":"core","tags":{"modifier":true},"contextdata":{"warband_general_hook":{},"warband_wide":{},"give_skill":{"id":["sk_fruitfromthetreeofgoodandevil"]},"warband_attatch":{}},"description":[{"tags":{"desc_type":"default"},"content":"Amongst the bones of giant humans unearthed by the ravages of war you discover a golden-hued fruit wrapped in spun cloth. Pick 1 model in your Warband. The model you pick eats the fruit you discovered. They gain the DEMONIC Keyword and you can give them one Skill of your choice. You can choose a Skill from any of the Skill Tables, or any Patron Skill (it does not have to be one from your own Patron), or any Exploration Skill","glossary":[{"val":"DEMONIC","id":"kw_demonic"}]}],"options":[{"ref_id":"ot_fruitfromthetreeofgoodandevilknowledge_a","name":"","description":[],"category":"contextobject","self_ask":true,"option_context":{"basic_option_default":{}},"dyna_only":true,"parent_level":3,"hide":true,"single":true,"question_name":"getMemberOptionsFromWarband"}]}]'),E=JSON.parse('[{"id":"et_commonlocations","name":"Common Locations","source":"core","tags":{"url_custom":"common-locations"},"rarity":1,"contextdata":{}},{"id":"et_rarelocations","name":"Rare Locations","source":"core","tags":{"url_custom":"rare-locations"},"rarity":5,"contextdata":{}},{"id":"et_legendarylocations","name":"Legendary Locations","source":"core","tags":{"url_custom":"legendary-locations"},"rarity":10,"contextdata":{}}]'),T=JSON.parse('[{"id":"es_reroll","name":"Reroll","source":"core","tags":{},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Re-roll up to 1 extra Exploration Dice.","glossary":[{"val":"Exploration Dice","id":"gl_explorationdice"}]}],"options":[],"skill_group":["sg_exploration"]},{"id":"es_extradice","name":"Extra Dice","source":"core","tags":{},"contextdata":{"grab_exploration_dice":{"mod_count":1}},"description":[{"tags":{"desc_type":"default"},"content":"Roll 1 extra Exploration Die.","glossary":[{"val":"Exploration Dice","id":"gl_explorationdice"}]}],"options":[],"skill_group":["sg_exploration"]},{"id":"es_duplicate","name":"Duplicate","source":"core","tags":{},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"After you make an Exploration Roll, select one of the Exploration Dice and add an extra Exploration Dice with an identical result to your roll.","glossary":[{"val":"Exploration Dice","id":"gl_explorationdice"}]}],"options":[],"skill_group":["sg_exploration"]},{"id":"es_setdice","name":"Set Dice","source":"core","tags":{},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"After you make an Exploration Roll, select one of the Exploration Dice and change the result on the dice to the result of your choice."}],"options":[],"skill_group":["sg_exploration"]},{"id":"es_seek","name":"Seek","source":"core","tags":{},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add 1 to your Exploration Roll"}],"options":[],"skill_group":["sg_exploration"]},{"id":"es_circleback","name":"Circle Back","source":"core","tags":{},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Subtract 1 from your Exploration Roll"}],"options":[],"skill_group":["sg_exploration"]},{"id":"es_lucky","name":"Lucky","source":"core","tags":{},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"After you make an Exploration Roll, select one of the Exploration Dice, and then roll an extra Exploration Dice. You can either keep the dice that you picked, or to replace it with extra dice that you rolled."}],"options":[],"skill_group":["sg_exploration"]},{"id":"sk_patronskill","name":"Patron Skill","source":"core","tags":{"patron":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Pick one of the Skills offered by your patron."}],"options":[],"table_val":2,"skill_group":["sg_meleeandstrength","sg_ranged","sg_stealthandspeed","sg_wildcard"]},{"id":"sk_patronskill_end","name":"Patron Skill","source":"core","tags":{"patron":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Pick one of the Skills offered by your patron."}],"options":[],"table_val":12,"skill_group":["sg_meleeandstrength","sg_ranged","sg_stealthandspeed","sg_wildcard"]},{"id":"sk_standfirm","name":"Stand Firm","source":"core","tags":{"trait":true},"contextdata":{"activated":{}},"description":[{"tags":{"desc_type":"default"},"content":"The first time a model with this Skill suffers a Down result on the Injury table, it is treated as a Minor Hit result instead.","glossary":[{"val":"Down","id":"gl_down"}]}],"options":[],"table_val":3,"skill_group":["sg_meleeandstrength"]},{"id":"sk_parry","name":"Parry","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add -1 DICE to Success Rolls for Melee Attacks that target a model with this Skill.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"}]}],"options":[],"table_val":4,"skill_group":["sg_meleeandstrength"]},{"id":"sk_closequartercombat","name":"Close Quarter Combat","source":"core","tags":{"trait":true},"contextdata":{"enhance_action":{"category":["melee"],"tag":["melee"]}},"description":[{"tags":{"desc_type":"default"},"content":"Add +1 DICE and +1 INJURY DICE to rolls for Melee Attacks made by a model with this Skill if it is in contact with a terrain piece.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"},{"val":"+1 INJURY DICE","id":"kw_injurydice"}]}],"options":[],"table_val":5,"skill_group":["sg_meleeandstrength"]},{"id":"sk_relentlesscharge","name":"Relentless Charge","source":"core","tags":{"trait":true},"contextdata":{"enhance_action":{"category":["melee"],"tag":["melee"]}},"description":[{"tags":{"desc_type":"default"},"content":"Add +1 DICE to rolls for Melee Attacks made by a model with this Skill if it successfully charged earlier in the same Activation.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"}]}],"options":[],"table_val":6,"skill_group":["sg_meleeandstrength"]},{"id":"sk_meleeproficiency","name":"Melee Proficiency","source":"core","tags":{"trait":true},"contextdata":{"upgrade_stat":{"upgrades":[{"stat":"melee","value":1}]}},"description":[{"tags":{"desc_type":"default"},"content":"Add +1 DICE to the Melee Characteristic of a model with this Skill.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"}]}],"options":[],"table_val":7,"skill_group":["sg_meleeandstrength"]},{"id":"sk_strengthofsamson","name":"Strength of Samson","source":"core","tags":{"trait":true},"contextdata":{"enhance_action":{"category":["melee"],"tag":["melee"]},"keyword_mod":{"mods":[{"type":"add","value":"kw_strong"}]}},"description":[{"tags":{"desc_type":"default"},"content":"Add +1 INJURY DICE to rolls for Melee Attacks using a Melee Weapon made by a model with this Skill. In addition, a model with this Skill has the STRONG keyword.","glossary":[{"val":"STRONG","id":"kw_strong"},{"val":"+1 INJURY DICE","id":"kw_plusdice"}]}],"options":[],"table_val":8,"skill_group":["sg_meleeandstrength"]},{"id":"sk_hardasnails","name":"Hard as Nails","source":"core","tags":{"trait":true},"contextdata":{"activated":{}},"description":[{"tags":{"desc_type":"default"},"content":"The first time a model with this Skill suffers a Down result on the Injury table, it is treated as a No Effect result instead.","glossary":[{"val":"Down","id":"gl_down"}]}],"options":[],"table_val":9,"skill_group":["sg_meleeandstrength"]},{"id":"sk_champion","name":"Champion","source":"core","tags":{"trait":true},"contextdata":{"equipment_add_keyword":{"equip_check":[{"check_type":"category","value":"melee"}],"special_additions":[{"base":"kw_cleave","value":2}]}},"description":[{"tags":{"desc_type":"default"},"content":"Melee Weapons that do not have the CLEAVE Keyword which are used by a model with this Skill gain the CLEAVE 2 Keyword. In addition, add -1 DICE to the Success Roll for the second Melee Attack made with each Melee Weapon that gains the CLEAVE Keyword.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"},{"val":"CLEAVE","id":"kw_cleave"}]}],"options":[],"table_val":11,"skill_group":["sg_meleeandstrength"]},{"id":"sk_surgicalstrike","name":"Surgical Strike","source":"core","tags":{"trait":true},"contextdata":{"enhance_action":{"category":["melee"],"tag":["melee"]}},"description":[{"tags":{"desc_type":"default"},"content":"Once per Activation, before you make an Injury Roll for a Melee Attack made by a model with this Skill, you can say that the roll has the IGNORE ARMOUR Keyword.","glossary":[{"val":"IGNORE ARMOUR","id":"kw_ignorearmour"}]}],"options":[],"table_val":10,"skill_group":["sg_meleeandstrength"]},{"id":"sk_swordofallah","name":"Sword of Allah","source":"core","tags":{},"contextdata":{"skill_option":{}},"description":[{"tags":{"desc_type":"default"},"content":"You can choose 1 Skill from the Melee & Strength Skills Table for a model that has the Sword of Allah Skill."}],"options":[{"ref_id":"ot_swordofallah","name":"","description":[],"category":"type","type":"text","strictness":"strict","single":true,"predefined_options":[],"option_context":{"basic_option_default":{}},"data_search":{"searchtype":"complex","searchparam":{"type":"skill","request":{"operator":"and","terms":[{"item":"skill_group","value":"sg_meleeandstrength","equals":true,"strict":true},{"item":"tags","value":"patron","equals":false,"strict":true,"istag":true,"tagvalue":""}],"subparams":[]}}}}],"skill_group":["pt_sublimegate"]},{"id":"sk_exoticwares","name":"Imported Wares","source":"core","tags":{},"contextdata":{"model_add_equipment":{"additions":[{"count":1,"option_id":0,"restriction":[{"category":"melee"},{"category":"ranged"},{"category":"grenade"},{"category":"armour"}]}]}},"description":[{"tags":{"desc_type":"default"},"content":"You can purchase 1 Weapon or 1 suit of Armour from the New Antioch Armoury for a model with this Skill in the following Quartermaster Step. Choose the Weapon or suit of Armour and write down your choice on your Warband Roster. If this item is lost for any reason during the campaign, you can repurchase it."}],"options":[{"ref_id":"ot_newantioch","name":"","description":[],"category":"type","type":"text","hide":true,"strictness":"strict","predefined_options":[],"option_context":{"basic_option_default":{}},"data_search":{"searchtype":"complex","searchparam":{"type":"factionequipmentrelationship","request":{"operator":"and","terms":[{"item":"faction_id","value":"fc_newantioch","equals":true,"strict":true},{"item":"faction_id","value":"fc_ironsultanate","equals":false,"strict":true}],"subparams":[]}}}}],"skill_group":["pt_sublimegate"]},{"id":"sk_janissarytraining","name":"Janisary Training","source":"core","tags":{"trait":true},"contextdata":{"enhance_action":{"category":["melee"],"tag":["melee"]},"add_ignore_mods":{"modifiers":["off-hand_weapon"]}},"description":[{"tags":{"desc_type":"default"},"content":"If the first ACTION a model with this Skill makes during their Activation is a Charge, add +1 DICE to Melee Attacks made by the model for the rest of the Activation. Additionally, a model with this Skill has the IGNORE OFF-HAND WEAPON Keyword.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"+1 DICE","id":"kw_plusdice"},{"val":"IGNORE OFF-HAND WEAPON","id":"kw_ignoremodifier"}]}],"options":[],"skill_group":["pt_sublimegate"]},{"id":"sk_gures","name":"G\xfcre\u015f","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add +1 DICE and +1 INJURY DICE to Melee Attacks made by a model with this Skill if the target model is Down. In addition, you can ignore the -1 DICE modifier to Success Rolls for a model that is Down if the model has this Skill.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"},{"val":"+1 INJURY DICE","id":"kw_injurydice"},{"val":"-1 DICE","id":"kw_minusdice"},{"val":"Down","id":"gl_down"}]}],"options":[],"skill_group":["pt_sublimegate"]},{"id":"sk_rightfullyguided","name":"Rightfully Guided","source":"core","tags":{"trait":true},"contextdata":{"activated":{}},"description":[{"tags":{"desc_type":"default"},"content":"At the start of the game, after deployment, you can pick 1 ACTION apart from Charge, Shoot or Fight that requires that an enemy model is chosen as the target of the ACTION or is picked to be affected by the ACTION. For the rest of the game, the model with this Skill cannot be chosen as the target of that ACTION and cannot be picked to be affected by that ACTION.","glossary":[{"val":"ACTION","id":"kw_action"}]}],"options":[],"skill_group":["pt_sublimegate"]},{"id":"sk_sultanfavour","name":"Sultan\'s Favour","source":"core","tags":{"trait":true},"contextdata":{"warband_general_hook":{},"warband_wide":{},"unique_skill":{},"add_onto_warband":{},"model_limit_increase":{"count":1,"restriction":[{"res_type":"keyword","val":"kw_ELITE"}]}},"description":[{"tags":{"desc_type":"default"},"content":"A Warband that includes a model with this Skill can increase any limits on the number of models it can include by 1, as long as the model does not have the ELITE Keyword, is not mounted on a 50mm or larger base, and is not a Mercenary. For example, if the Warband Entry for a model in the Warband had a limit of 0-2, the limit would be increased to 0-3. If the model with this Skill is killed or otherwise removed from the Warband, models in excess of the normal limits can be kept, but new models cannot be added to the Warband in excess of the normal limits. A Warband can only have 1 model with this Skill.","glossary":[{"val":"ELITE","id":"kw_elite"}]}],"options":[{"ref_id":"ot_sultansfavour","name":"","description":[],"self_ask":true,"category":"contextobject","option_context":{"basic_option_default":{},"filter":{"restriction":[{"res_type":"keyword","val":"kw_elite","subvalue":false},{"res_type":"stat","val":"base","subvalue":50,"direction":"increase"}]}},"dyna_only":true,"parent_level":7,"question_name":"getModelRelationshipsForWarband"}],"skill_group":["pt_sublimegate"]},{"id":"sk_sixthsense","name":"Sixth Sense","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"If a model with this Skill suffers a Down result on the Injury table, it is treated as a Minor Hit result instead if the model does not have any BLOOD MARKERS. If the model also has the TOUGH Keyword, once per game it can use the Keyword to change an Out of Action result to a Down result, and then use this Skill to change the Down result to No Effect.","glossary":[{"val":"Down","id":"gl_down"},{"val":"Minor Hit","id":"gl_minorhit"},{"val":"TOUGH","id":"kw_tough"},{"val":"BLOOD MARKERS","id":"kw_bloodmarker"}]}],"options":[],"table_val":3,"skill_group":["sg_stealthandspeed"]},{"id":"sk_assassinate","name":"Assassinate","source":"core","tags":{"trait":true,"bonus":true},"contextdata":{"bonus_ability":{"bonus_type":["hit_roll"]}},"description":[{"tags":{"desc_type":"default"},"content":"Add +1 DICE to rolls for attacks made by a model with this Skill if the target has not yet been Activated this Turn.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"}]}],"options":[],"table_val":4,"skill_group":["sg_stealthandspeed"]},{"id":"sk_shadowwalker","name":"Shadow Walker","source":"core","tags":{"trait":true,"enemy_penalty":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add -2 DICE to rolls for Ranged Attacks that target a model with this Skill at Long Range instead of -1 DICE.","glossary":[{"val":"-2 DICE","id":"kw_minusdice"},{"val":"-1 DICE","id":"kw_minusdice"}]}],"options":[],"table_val":5,"skill_group":["sg_stealthandspeed"]},{"id":"sk_athletic","name":"Athletic","source":"core","tags":{"trait":true,"bonus":true},"contextdata":{"bonus_ability":{"action_type":["climb","jump","diving_charge"]}},"description":[{"tags":{"desc_type":"default"},"content":"Add +1 DICE to Risky Success rolls for a model with this Skill when it Climbs, Jumps or makes a Diving Charge, and add -1 INJURY DICE to Injury Rolls if it Falls.","glossary":[{"val":"-1 INJURY DICE","id":"kw_minusdice"},{"val":"+1 DICE","id":"kw_plusdice"},{"val":"Risky Success","id":"kw_riskyaction"}]}],"options":[],"table_val":6,"skill_group":["sg_stealthandspeed"]},{"id":"sk_sprinter","name":"Sprinter","source":"core","tags":{"trait":true,"bonus":true},"contextdata":{"bonus_ability":{"action_type":["dash"]}},"description":[{"tags":{"desc_type":"default"},"content":"Add +1 DICE to the Risky Success Roll for a model with this Skill that is taking a Dash ACTION.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"},{"val":"ACTIONS","id":"kw_action"},{"val":"Risky Success","id":"kw_riskyaction"}]}],"options":[],"table_val":7,"skill_group":["sg_stealthandspeed"]},{"id":"sk_disengage","name":"Disengage","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Enemy models cannot make a Melee Attack on a model with this Skill when it Retreats."}],"options":[],"table_val":8,"skill_group":["sg_stealthandspeed"]},{"id":"sk_incoming","name":"Incoming","source":"core","tags":{"trait":true,"bonus":true},"contextdata":{"bonus_ability":{"action_type":["charge"]}},"description":[{"tags":{"desc_type":"default"},"content":"When you roll the Charge Bonus for a model with this Skill, roll 1 extra D6 and use the single highest dice to determine the bonus."}],"options":[],"table_val":9,"skill_group":["sg_stealthandspeed"]},{"id":"sk_nimble","name":"Nimble","source":"core","tags":{"trait":true,"bonus":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Do not halve the Movement Characteristic of a model with this Skill when it stands up."}],"options":[],"table_val":10,"skill_group":["sg_stealthandspeed"]},{"id":"sk_dodge","name":"Dodge","source":"core","tags":{"trait":true,"enemy_penalty":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add -1 DICE to rolls for Ranged Attacks that target a model with this Skill.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"}]}],"options":[],"table_val":11,"skill_group":["sg_stealthandspeed"]},{"id":"sk_hunter","name":"Hunter","source":"core","tags":{"trait":true,"bonus":true},"contextdata":{"bonus_ability":{"action_type":["attack_range"]}},"description":[{"tags":{"desc_type":"default"},"content":"Ranged Attacks made by a model with this Skill have the IGNORE COVER Keyword.","glossary":[{"val":"IGNORE","id":"kw_ignoremodifier"}]}],"options":[],"table_val":3,"skill_group":["sg_ranged"]},{"id":"sk_gunslinger","name":"Gunslinger","source":"core","tags":{"trait":true,"bonus":true},"contextdata":{"bonus_ability":{"bonus_type":["equipment","weapon","pistol"]},"equipment_add_keyword":{"equip_check":[{"check_type":"tag","value":"pistol"}],"additions":["kw_assault"],"special_additions":[{"base":"kw_ignoremodifier","value":"OFF-HAND WEAPON"}]}},"description":[{"tags":{"desc_type":"paragraph"},"content":"The following rules apply to a model with this Skill if it is armed with Ranged Weapons with the PISTOL Keyword.","glossary":[{"val":"PISTOL","id":"kw_pistol"}]},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"If it is equipped with 2 Weapons with the PISTOL Keyword, it can take a Shoot ACTION with one and then immediately take a Shoot ACTION with the other.","glossary":[{"val":"PISTOL","id":"kw_pistol"}]},{"tags":{"desc_type":"default"},"content":"Add the ASSAULT and IGNORE OFF-HAND WEAPON Keywords to any weapons that have the PISTOL Keyword (unless they have them already).","glossary":[{"val":"PISTOL","id":"kw_pistol"},{"val":"IGNORE","id":"kw_ignoremodifier"},{"val":"ASSAULT","id":"kw_assault"}]}]}],"options":[],"table_val":4,"skill_group":["sg_ranged"]},{"id":"sk_farshot","name":"Far Shot","source":"core","tags":{"trait":true,"bonus":true,"modifier":true},"contextdata":{"equipment_modifier":{"equipment_type":[{"res_type":"tag","value":"pistol"},{"res_type":"tag","value":"rifle"},{"res_type":"tag","value":"jezzail"},{"res_type":"tag","value":"arquebus"}],"modifier_type":[{"type":"range","value":6}]}},"description":[{"tags":{"desc_type":"paragraph"},"content":"Add 6\\" to the Range of the following Weapons when they are used by a model that has this Skill:"},{"tags":{"desc_type":"list"},"content":"","subcontent":[{"tags":{"desc_type":"default"},"content":"Any Weapon with the PISTOL Keyword.","glossary":[{"val":"PISTOL","id":"kw_pistol"}]},{"tags":{"desc_type":"default"},"content":"Any Weapon which has the word \u201cRifle\u201d as part of its name (i.e. a Bolt Action Rifle, Assault Rifle etc)."},{"tags":{"desc_type":"default"},"content":"Any Weapon which has either the word \u201cJezzail\u201d or \u201cArquebus\u201d as part of its name."}]}],"options":[],"table_val":5,"skill_group":["sg_ranged"]},{"id":"sk_sharpeyes","name":"Sharp Eyes","source":"core","tags":{"trait":true,"bonus":true},"contextdata":{"bonus_ability":{"bonus_type":["equipment","weapon","ranged"]}},"description":[{"tags":{"desc_type":"default"},"content":"Ranged Attacks made by a model with this Skill have the IGNORE LONG RANGE Keyword.","glossary":[{"val":"IGNORE","id":"kw_ignoremodifier"}]}],"options":[],"table_val":6,"skill_group":["sg_ranged"]},{"id":"sk_rangedproficiency","name":"Ranged Proficiency","source":"core","tags":{"trait":true},"contextdata":{"upgrade_stat":{"upgrades":[{"stat":"ranged","value":1}]}},"description":[{"tags":{"desc_type":"default"},"content":"Add +1 DICE to the Ranged Characteristic of a model with this Skill.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"}]}],"options":[],"table_val":7,"skill_group":["sg_ranged"]},{"id":"sk_snipersnest","name":"Sniper\'s Nest","source":"core","tags":{"trait":true,"bonus":true},"contextdata":{"bonus_ability":{"bonus_type":["equipment","weapon","ranged"]}},"description":[{"tags":{"desc_type":"default"},"content":"Add +2 DICE to rolls for Ranged Attacks made with the Elevated Position modifier by a model with this Skill instead of +1 DICE.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"},{"val":"+2 DICE","id":"kw_plusdice"}]}],"options":[],"table_val":8,"skill_group":["sg_ranged"]},{"id":"sk_pointblank","name":"Point Blank","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"When a model with this Skill makes a Melee Attack, it can use a Ranged Weapon and its Ranged Attack Characteristic instead of a Melee Weapon and its Melee Attack Characteristic. It must still be within 1\u201d of the target model to make the attack. It can also use the Ranged Weapon to make a Ranged Attack during the same Activation if it has the ASSAULT Keyword.","glossary":[{"val":"ASSAULT","id":"kw_assault"}]}],"options":[],"table_val":9,"skill_group":["sg_ranged"]},{"id":"sk_hipshot","name":"Hip Shot","source":"core","tags":{"trait":true,"bonus":true,"modifier":true},"contextdata":{"equipment_add_keyword":{"equip_check":[{"check_type":"category","value":"ranged"},{"check_type":"category","value":"grenade"}],"additions":["kw_assault"]}},"description":[{"tags":{"desc_type":"default"},"content":"Ranged Weapons used by a model with this Skill count as having the ASSAULT Keyword unless they already have it.","glossary":[{"val":"ASSAULT","id":"kw_assault"}]}],"options":[],"table_val":10,"skill_group":["sg_ranged"]},{"id":"sk_headshot","name":"Head Shot","source":"core","tags":{"trait":true,"bonus":true},"contextdata":{"bonus_ability":{"bonus_type":["equipment","weapon","ranged"]}},"description":[{"tags":{"desc_type":"default"},"content":"Ranged Attacks made by a model with this Skill have the IGNORE ARMOUR Keyword if the attack was a Critical Success.","glossary":[{"val":"IGNORE ARMOUR","id":"kw_ignorearmour"}]}],"options":[],"table_val":11,"skill_group":["sg_ranged"]},{"id":"sk_warluck","name":"War Luck","source":"core","tags":{"trait":true},"contextdata":{"add_scars":{"value":1}},"description":[{"tags":{"desc_type":"default"},"content":"A model with this Skill can suffer 1 extra Battle Scar before they are Unfit for Duty.","glossary":[{"val":"Scars","id":"gl_scar"}]}],"options":[],"table_val":3,"skill_group":["sg_wildcard"]},{"id":"sk_tisbutascratch","name":"\'Tis but a Scratch","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"You can re-roll the result on the Trauma Chart for a model with this Skill."}],"options":[],"table_val":4,"skill_group":["sg_wildcard"]},{"id":"sk_badcompany","name":"Bad Company","source":"core","tags":{"trait":true,"faction":true},"contextdata":{"get_elite_count_cap":{"modify_value":1}},"description":[{"tags":{"desc_type":"default"},"content":"A model with this Skill does not count towards the number of ELITE models that are in your Warband at the start of the Promotion step.","glossary":[{"val":"ELITE","id":"kw_elite"}]}],"options":[],"table_val":5,"skill_group":["sg_wildcard"]},{"id":"sk_scavenger","name":"Scavenger","source":"core","tags":{"trait":true,"faction":true},"contextdata":{"get_exploration_skills":{"add_skill":["es_extradice"]}},"description":[{"tags":{"desc_type":"default"},"content":"A model with this Skill has the Extra Dice Exploration Skill.","glossary":[{"val":"Exploration","id":"gl_explorationdice"}]}],"options":[],"table_val":6,"skill_group":["sg_wildcard"]},{"id":"sk_skillandexpertise","name":"Skill & Expertise","source":"core","tags":{"trait":true,"bonus":true},"contextdata":{"custom_add_to_action":{"restriction":[{"type":"action","value":"attack"}]}},"description":[{"tags":{"desc_type":"default"},"content":"When you give a model this Skill, choose 1 ACTION on that model\'s Warband Entry, or 1 Common ACTION apart from Fight or Shoot ACTIONS, and write it on your Warband Roster. Add +1 DICE to rolls made as part of the chosen ACTION when they are taken by this model.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"},{"val":"ACTION","id":"kw_action"}]}],"options":[],"table_val":7,"skill_group":["sg_wildcard"]},{"id":"sk_showoff","name":"Show Off","source":"core","tags":{"trait":true},"contextdata":{"get_promotion_dice":{"value":1}},"description":[{"tags":{"desc_type":"default"},"content":"Add 1 dice to the Promotion Pool in the Promotion step for each model in your Warband with this Skill."}],"options":[],"table_val":8,"skill_group":["sg_wildcard"]},{"id":"sk_friendsinhighplaces","name":"Friends In High Places","source":"core","tags":{"trait":true,"faction":true},"contextdata":{"get_exploration_skills":{"add_skill":["es_reroll"]}},"description":[{"tags":{"desc_type":"default"},"content":"A model with this Skill has the Re-roll Dice Exploration Skill ","glossary":[{"val":"Exploration","id":"gl_explorationdice"}]}],"options":[],"table_val":9,"skill_group":["sg_wildcard"]},{"id":"sk_gloryhound","name":"Glory Hound","source":"core","tags":{"trait":true},"contextdata":{"gain_glory":{"value":1}},"description":[{"tags":{"desc_type":"default"},"content":"At the end of each game, your Warband receives 1 extra \u263c for each model with this Skill that is on the battlefield."}],"options":[],"table_val":10,"skill_group":["sg_wildcard"]},{"id":"sk_warstories","name":"War Stories","source":"core","tags":{"trait":true},"contextdata":{"gain_experience":{"self":false,"others":true,"value":1},"unique_skill":{}},"description":[{"tags":{"desc_type":"default"},"content":"When you are recording the Experience Points earned by the models in your Warband in the Campaign Phase, you can give each model with the ELITE Keyword that does not also have this Skill +1 extra Experience Point. You can\u2019t pick the model with the Skill itself. A Warband can only have one model with this Skill.","glossary":[{"val":"ELITE","id":"kw_elite"}]}],"options":[],"table_val":11,"skill_group":["sg_wildcard"]},{"id":"sk_firearmprocurement","name":"Firearm Procurement","source":"core","tags":{"trait":true},"contextdata":{"warband_wide":{},"add_onto_warband":{},"unique_skill":{},"purchase_modifier_equipment":{"mod":[{"cost":-5,"requirements":[{"category":"ranged"},{"cost":20,"costtype":0,"req_mod":">="}]}]}},"description":[{"tags":{"desc_type":"default"},"content":"he cost of any Ranged Weapon or Grenade worth 20 \ud83d\udc51  or more is reduced by 5 \ud83d\udc51  if a model with this Skill is part of the Warband when it is purchased. A Warband can have only one model with this Skill."}],"options":[],"skill_group":["pt_temporallord"]},{"id":"sk_mendelistchemicals","name":"Mendelist Chemicals","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"The opposing player cannot spend BLOOD MARKERS next to a model with this skill to add +1 INJURY DICE (they can use the BLOOD MARKERS to convert the roll to a Bloodbath Roll normally).","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"},{"val":"+1 INJURY DICE","id":"kw_plusdice"}]}],"options":[],"skill_group":["pt_temporallord"]},{"id":"sk_armourandequipmentprocurement","name":"Armour & Equipment Procurement","source":"core","tags":{"trait":true},"contextdata":{"warband_wide":{},"add_onto_warband":{},"unique_skill":{},"purchase_modifier_equipment":{"mod":[{"cost":-5,"requirements":[{"category":"armour"},{"cost":15,"costtype":0,"req_mod":">="}]},{"cost":-5,"requirements":[{"category":"shield"},{"cost":15,"costtype":0,"req_mod":">="}]},{"cost":-5,"requirements":[{"category":"equipment"},{"cost":15,"costtype":0,"req_mod":">="}]}]}},"description":[{"tags":{"desc_type":"default"},"content":"The cost of any Armour, Shields or Equipment worth 15 \ud83d\udc51  or more is reduced by 5 \ud83d\udc51  if a model with this Skill is part of the Warband when it is purchased. A Warband can have only one model with this Skill."}],"options":[],"skill_group":["pt_temporallord"]},{"id":"sk_meleeweaponprocurement","name":"Melee Weapon Procurement","source":"core","tags":{"trait":true},"contextdata":{"warband_wide":{},"add_onto_warband":{},"unique_skill":{},"purchase_modifier_equipment":{"mod":[{"cost":-5,"requirements":[{"category":"melee"},{"cost":10,"costtype":0,"req_mod":">="}]}]}},"description":[{"tags":{"desc_type":"default"},"content":" The cost of any Melee Weapon worth 10 \ud83d\udc51  or more is reduced by 5 \ud83d\udc51  if the model with this Skill is part of the Warband when it is purchased. A Warband can have only one model with this Skill."}],"options":[],"skill_group":["pt_temporallord"]},{"id":"sk_sniperschool","name":"Sniper School","source":"core","tags":{"trait":true,"bonus":true},"contextdata":{"bonus_ability":{"action_type":["attack_range"]}},"description":[{"tags":{"desc_type":"default"},"content":"Ranged Attacks made by a model with this Skill need 1 less BLOOD MARKER to convert an Injury Roll roll to a Bloodbath Roll","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"}]}],"options":[],"skill_group":["pt_temporallord"]},{"id":"sk_specialassaulttraining","name":"Special Assault Training","source":"core","tags":{"trait":true,"bonus":true},"contextdata":{"bonus_ability":{"action_type":["attack_melee"]}},"description":[{"tags":{"desc_type":"default"},"content":"Melee Attacks made by a model with this Skill need 1 less BLOOD MARKER to convert an Injury Roll roll to a Bloodbath Roll.","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"}]}],"options":[],"skill_group":["pt_temporallord"]},{"id":"sk_blessingsofawarriorsaint","name":"Blessings of the Warrior Saint","source":"core","tags":{"trait":true},"contextdata":{"blessed_add_keyword":{"blessed":["D3"]}},"description":[{"tags":{"desc_type":"default"},"content":"A model with this Skill gains the BLESSED D3 Keyword.","glossary":[{"val":"BLESSED","id":"kw_blessed"}]}],"options":[],"skill_group":["pt_warriorsaint"]},{"id":"sk_endurethesuffering","name":"Endure the Suffering","source":"core","tags":{"trait":true},"contextdata":{"add_scars":{"value":1}},"description":[{"tags":{"desc_type":"default"},"content":"A model with this Skill can suffer 1 extra Battle Scar before they are unfit for duty.","glossary":[{"val":"Scar","id":"gl_scar"}]}],"options":[],"skill_group":["pt_warriorsaint"]},{"id":"sk_dragonslayer","name":"Dragonslayer","source":"core","tags":{"trait":true,"bonus":true},"contextdata":{"bonus_ability":{"action_type":["attack_melee"]}},"description":[{"tags":{"desc_type":"default"},"content":"When you make an Injury Roll for a Melee Attack made by a model with this Skill, you can change the roll of one the D6s used for the Injury Roll to a 6."}],"options":[],"skill_group":["pt_warriorsaint"]},{"id":"sk_davidandgoliath","name":"David and Goliath","source":"core","tags":{"trait":true,"bonus":true},"contextdata":{"bonus_ability":{"action_type":["attack_melee"]}},"description":[{"tags":{"desc_type":"default"},"content":"Add +1 DICE for a Melee Attack made by a model with this Skill if the target is mounted on a 40mm or larger base.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"}]}],"options":[],"skill_group":["pt_warriorsaint"]},{"id":"sk_onyourknees","name":"On Your Knees","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Enemy models that are Down are not allowed to stand up if a model with this Skill is within 1\\" of them (even if the model with this Skill is also Down)","glossary":[{"val":"Down","id":"gl_down"}]}],"options":[],"skill_group":["pt_warriorsaint"]},{"id":"sk_warriorsprayer","name":"Warrior\'s Prayer","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A model with this Skill can take a Warrior\u2019s Prayer ACTION. If it does so, take a Risky Success Roll for the model. If the roll is a Failure, nothing happens and the model\u2019s Activation ends. If the roll is a Success or Critical Success, the model has the FEAR Keyword until the end of the Turn, and you can remove up to 1 BLOOD MARKER from the model.","glossary":[{"val":"Risky Success","id":"kw_riskyaction"},{"val":"ACTION","id":"kw_action"},{"val":"FEAR","id":"kw_fear"},{"val":"BLOOD MARKER","id":"kw_bloodmarker"}]}],"options":[],"skill_group":["pt_warriorsaint"]},{"id":"sk_knowledgeofscience","name":"Knowledge of Science","source":"core","tags":{"trait":true},"contextdata":{"warband_general_hook":{"getEquipmentRelationshipsForWarband":{"glory":false}},"warband_wide":{},"unique_skill":{},"add_onto_warband":{},"add_extra_equipment":{"count":1,"restriction":[]}},"description":[{"tags":{"desc_type":"default"},"content":"The limit of one item of Battlekit (excluding Glory Items) is increased by 1 if a model with this Skill is part of the Warband. Choose the Battlekit the bonus will apply to and write down your choice on your roster. A Warband can have only one model with this Skill.","glossary":[{"val":"LIMIT","id":"kw_limit"}]}],"options":[{"ref_id":"ot_knowledgeofscience","name":"","description":[],"self_ask":true,"category":"contextobject","option_context":{"basic_option_default":{}},"dyna_only":true,"parent_level":7,"question_name":"getEquipmentRelationshipsForWarband"}],"skill_group":["pt_learnedsaint"]},{"id":"sk_favouredbygod","name":"Favoured By God","source":"core","tags":{"trait":true},"contextdata":{"gain_glory":{"value":1}},"description":[{"tags":{"desc_type":"default"},"content":"At the end of each game, your Warband gains 1 additional \u263c for each model with this Skill on the battlefield."}],"options":[],"skill_group":["pt_learnedsaint"]},{"id":"sk_penniesfromheaven","name":"Pennies From Heaven","source":"core","tags":{"trait":true},"contextdata":{"gain_ducats":{"dice_value":5}},"description":[{"tags":{"desc_type":"default"},"content":"At the end of each game, your Warband gains D6x5 additional \ud83d\udc51 for each model with this Skill that is on the Battlefield."}],"options":[],"skill_group":["pt_learnedsaint"]},{"id":"sk_organisationalskills","name":"Logistical Skills","source":"core","tags":{"trait":true},"contextdata":{"warband_general_hook":{},"warband_wide":{},"unique_skill":{},"add_onto_warband":{},"model_limit_increase":{"count":1,"restriction":[{"res_type":"keyword","val":"kw_ELITE"},{"res_type":"stat","val":"mercenary","subvalue":true}]}},"description":[{"tags":{"desc_type":"default"},"content":"A Warband that includes a model with this Skill can increase any Limits on the number of models it can include by 1, as long as the model does not have the ELITE Keyword, is not mounted on a 50mm or larger base, and is not a Mercenary. For example, if the Warband Entry for a model in the Warband had a limit of 0-2, the limit would be increased to 0-3. If the model with this Skill is killed or otherwise removed from the Warband, models in excess of the normal limits can be kept, but new models cannot be added to the Warband in excess of the normal limits. A Warband can only have 1 model with this Skill.","glossary":[{"val":"ELITE","id":"kw_elite"}]}],"options":[{"ref_id":"ot_organisationalskills","name":"","description":[],"self_ask":true,"category":"contextobject","option_context":{"basic_option_default":{},"filter":{"restriction":[{"res_type":"keyword","val":"kw_elite","subvalue":false},{"res_type":"stat","val":"base","subvalue":50,"direction":"increase"}]}},"dyna_only":true,"parent_level":7,"question_name":"getModelRelationshipsForWarband"}],"skill_group":["pt_learnedsaint"]},{"id":"sk_healingarts","name":"Healing Arts","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"You can re-roll the result on the Elites Trauma Chart for a model with this Skill."}],"options":[],"skill_group":["pt_learnedsaint"]},{"id":"sk_walkwithgod","name":"Walk with God","source":"core","tags":{"trait":true},"contextdata":{"skill_option":{}},"description":[{"tags":{"desc_type":"default"},"content":"Pick one Skill from any Skill Table available to the model, including any Exploration Skill, and give it to this model."}],"options":[{"ref_id":"ot_walkwithgod","name":"","description":[],"category":"type","type":"text","single":true,"strictness":"strict","predefined_options":[],"option_context":{"basic_option_default":{}},"data_search":{"searchtype":"complex","searchparam":{"type":"skill","request":{"operator":"and","terms":[{"item":"tags","value":"patron","equals":false,"strict":true,"istag":true,"tagvalue":""}],"subparams":[{"operator":"or","terms":[{"item":"skill_group","value":"sg_meleeandstrength","equals":true,"strict":true},{"item":"skill_group","value":"sg_exploration","equals":true,"strict":true},{"item":"skill_group","value":"sg_ranged","equals":true,"strict":true},{"item":"skill_group","value":"sg_stealthandspeed","equals":true,"strict":true},{"item":"skill_group","value":"sg_wildcard","equals":true,"strict":true}],"subparams":[]}]}}}}],"skill_group":["pt_learnedsaint"]},{"id":"sk_blessedmurder","name":"Blessed Murder","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"If a Melee Attack made by a model with this Skill takes an enemy model Out of Action, place 1 BLESSING MARKER next to the model with this Skill.","glossary":[{"val":"BLESSING MARKER","id":"kw_blessingmarker"}]}],"options":[],"skill_group":["pt_infernalnoble"]},{"id":"sk_sadistic","name":"Sadistic","source":"core","tags":{"trait":true,"bonus":true},"contextdata":{"bonus_ability":{"bonus_type":["hit_roll","injury_roll"]}},"description":[{"tags":{"desc_type":"default"},"content":" Add +1 DICE and +1 INJURY DICE to Melee Attacks made by a model with this Skill if the target model is Down.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"},{"val":"+1 INJURY DICE","id":"kw_injurydice"},{"val":"Down","id":"gl_down"}]}],"options":[],"skill_group":["pt_infernalnoble"]},{"id":"sk_hellfire","name":"Hellfire","source":"core","tags":{"action":true,"attack":true,"attack_ranged":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A model with this Skill can take a Hellfire ACTION. If it does so, take a Risky Success Roll for the model. If the roll is a Failure, nothing happens and the model\u2019s Activation ends. If the roll is a Success or Critical Success, pick a friendly model that is within 18\\" of the model carrying out the Hellfire ACTION and in their line of sight. Then draw a straight line 1mm wide between the closest points of the bases of the two models, and make an Injury Roll with the FIRE Keyword for each model (friend or foe) that is crossed or reached by the line, including the friendly model that you picked but not including the model taking the Hellfire ACTION","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"Risky Success","id":"kw_riskyaction"},{"val":"FIRE","id":"kw_fire"}]}],"options":[],"skill_group":["pt_infernalnoble"]},{"id":"sk_30piecesofsilver","name":"30 Pieces of Silver","source":"core","tags":{"trait":true},"contextdata":{"gain_ducats":{"dice_value":5}},"description":[{"tags":{"desc_type":"default"},"content":"At the end of each game, your Warband gains D6x5 \ud83d\udc51  for each model with this Skill that is on the Battlefield."}],"options":[],"skill_group":["pt_infernalnoble"]},{"id":"sk_bloodsacrifice","name":"Blood Sacrifice","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A model with this Skill can take a Blood Sacrifice ACTION. If it does so, take a Success Roll for the model. On a Success or Critical Success, you can remove 1 BLOOD MARKER from the model and place it next to any other model that is within 6\\" of the model taking the Blood Sacrifice ACTION, in their line of sight, and which does not have the ARTIFICIAL, BLACK GRAIL or DEMONIC Keywords.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"BLOOD MARKER","id":"kw_bloodmarker"},{"val":"ARTIFICIAL","id":"kw_artificial"},{"val":"BLACK GRAIL","id":"kw_blackgrail"},{"val":"DEMONIC","id":"kw_demonic"}]}],"options":[],"skill_group":["pt_infernalnoble"]},{"id":"sk_lashofacheron","name":"Lash of Acheron","source":"core","tags":{"action":true,"attack":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A model with this Skill can take a Lash of Acheron ACTION. If it does so, take a Risky Success Roll for the model. If the roll is a Failure, nothing happens and the model\u2019s Activation ends. If the roll is a Success or Critical Success, you can make an Injury Roll with the IGNORE ARMOUR Keyword for 1 enemy model that is within 6\\" of the model taking the Lash of Acheron ACTION and in their line of sight","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"Risky Success","id":"kw_riskyaction"},{"val":"IGNORE ARMOUR","id":"kw_ignorearmour"}]}],"options":[],"skill_group":["pt_infernalnoble"]},{"id":"sk_cockroachvitality","name":"Cockroach Vitality","source":"core","tags":{"trait":true,"bonus":true},"contextdata":{"bonus_ability":{"action_type":["attack"]}},"description":[{"tags":{"desc_type":"default"},"content":"The opposing player cannot spend BLOOD MARKERS next to a model with this Skill to add +1 INJURY DICE for a Melee or Ranged Attack.","glossary":[{"val":"BLOOD MARKERS","id":"kw_bloodmarker"},{"val":"+1 INJURY DICE","id":"kw_injurydice"}]}],"options":[],"skill_group":["pt_orderofthefly"]},{"id":"sk_eyesofthefly","name":"Eyes of the Fly","source":"core","tags":{"trait":true,"bonus":true},"contextdata":{"add_ignore_mods":{"modifiers":["cover","long_range"]},"bonus_ability":{"action_type":["attack_range"]}},"description":[{"tags":{"desc_type":"default"},"content":"A model with this Skill has the IGNORE COVER and IGNORE LONG RANGE Keywords.","glossary":[{"val":"IGNORE COVER","id":"kw_ignoremodifier"},{"val":"IGNORE LONG RANGE","id":"kw_ignoremodifier"}]}],"options":[],"skill_group":["pt_orderofthefly"]},{"id":"sk_wingsofthefly","name":"Wings of the Fly","source":"core","tags":{"trait":true},"contextdata":{"keyword_add":{"value":["kw_flying"]}},"description":[{"tags":{"desc_type":"default"},"content":"A model with this Skill gains the FLYING Keyword if it doesn\'t already have it."}],"options":[],"skill_group":["pt_orderofthefly"]},{"id":"sk_grailplague","name":"Grail Plague","source":"core","tags":{"trait":true},"contextdata":{"warband_wide":{}},"description":[{"tags":{"desc_type":"default"},"content":"At the start of each game, after deployment, for each model with this Skill that is on the battlefield, you can place 1 INFECTION MARKER next to an enemy model that does not have the BLACK GRAIL Keyword.","glossary":[{"val":"BLACK GRAIL","id":"kw_blackgrail"},{"val":"INFECTION MARKER","id":"kw_infectionmarker"}]}],"options":[],"skill_group":["pt_orderofthefly"]},{"id":"sk_deceitofbeelzebub","name":"Deceit of Beelzebub","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A model with this Skill can take a Deceit of Beelzebub ACTION. If it does so, take a Risky Success Roll for the model. If the roll is a Failure, nothing happens and the model\u2019s Activation ends. If the roll is a Success or Critical Success, pick an enemy model within 8\\" of the model taking the Deceit of Beelzebub ACTION, and then swap the position of the two models. You must place each model so that the centre of its base is at the location that was previously occupied by the centre of the base of the model they are swapping positions with. If this is impossible for any reason (e.g. because Impassable terrain or another model gets in the way), the two models remain in their original locations.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"Risky Success","id":"kw_riskyaction"}]}],"options":[],"skill_group":["pt_orderofthefly"]},{"id":"sk_knightofthefly","name":"Knight of the Fly","source":"core","tags":{"trait":true,"enemy_penalty":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add -1 DICE to rolls for Ranged Attacks that target a model with this Skill.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"}]}],"options":[],"skill_group":["pt_orderofthefly"]},{"id":"sk_moneycanbuyanything","name":"Money Can Buy Anything","source":"core","tags":{"trait":true},"contextdata":{"warband_general_hook":{"getEquipmentRelationshipsForWarband":{"exploration":false}},"warband_wide":{},"unique_skill":{},"add_onto_warband":{},"add_extra_equipment":{"count":1,"restriction":[]}},"description":[{"tags":{"desc_type":"default"},"content":" The limit of one item of Battlekit (excluding Glory Items) is increased by 1 if a model with this Skill is part of the Warband. Choose the Battlekit the bonus will apply to and write down your choice on your roster. A Warband can have only one model w ith this Skill.","glossary":[{"val":"LIMIT","id":"kw_limit"}]}],"options":[{"ref_id":"ot_moneycanbuyanything","name":"","description":[],"self_ask":true,"category":"contextobject","option_context":{"basic_option_default":{}},"dyna_only":true,"parent_level":7,"question_name":"getEquipmentRelationshipsForWarband"}],"skill_group":["pt_mammon"]},{"id":"sk_unsecuredloan","name":"Unsecured Loan","source":"core","tags":{"trait":true},"contextdata":{"gain_ducats":{"value":100}},"description":[{"tags":{"desc_type":"default"},"content":"You can add 100 \ud83d\udc51  to your Strongbox when you take this Skill for a model in your Warband. The \ud83d\udc51  are only gained once, when the Skill is chosen."}],"options":[],"skill_group":["pt_mammon"]},{"id":"sk_crookeddice","name":"Crooked Dice","source":"core","tags":{"trait":true},"contextdata":{"activated":{}},"description":[{"tags":{"desc_type":"default"},"content":"Once per game, you can re-roll all of the dice used for a Success Roll for a model with this Skill, or you can re-roll all of the dice used for an Injury Roll for an attack made by a model with this Skill."}],"options":[],"skill_group":["pt_mammon"]},{"id":"sk_plutocracy","name":"Plutocracy","source":"core","tags":{"trait":true},"contextdata":{"add_fireteam_model":{"type":"ft_model","count":1,"restriction":[{"rest_type":"elite","value":false}]}},"description":[{"tags":{"desc_type":"default"},"content":"When you take this Skill for a model, it can immediately form a FIRETEAM with 1 other model from your Warband that does not have the ELITE Keyword. Both of the models gain the FIRETEAM Keyword. In addition, if the two models take a simultaneous Activation, then you can treat all Risky Success Rolls they take during the Activation as normal Success Rolls.","glossary":[{"val":"FIRETEAM","id":"kw_fireteam"},{"val":"ACTION","id":"kw_action"},{"val":"ELITE","id":"kw_elite"},{"val":"Risky Success","id":"kw_riskyaction"}]}],"options":[],"skill_group":["pt_mammon"]},{"id":"sk_eternaldebt","name":"Eternal Debt","source":"core","tags":{"trait":true},"contextdata":{"warband_wide":{}},"description":[{"tags":{"desc_type":"default"},"content":"The Wretched of this Warband are never lost as casualties, for their heads (kept as surety by Mammon) are used to regrow the lost bodies. All Wretched models in a Warband that includes a model with this Skill will automatically make a full recovery after the battle if they are taken Out of Action."}],"options":[],"skill_group":["pt_mammon"]},{"id":"sk_aureateskin","name":"Aureate Skin","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"The model with this Skill is granted the splendid (yet tarnished) golden skin of their Patron, and their blood turns into molten gold. Each time you place a BLOOD MARKER next to a model with this Skill, add 5 \ud83d\udc51 to your treasury.","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"}]}],"options":[],"skill_group":["pt_mammon"]},{"id":"sk_infectthemind","name":"Infect the Mind","source":"core","tags":{"trait":true},"contextdata":{"warband_wide":{}},"description":[{"tags":{"desc_type":"default"},"content":"At the start of each game, after deployment, for each model with this Skill that is on the battlefield, you can pick an enemy model and move it 6\\" in the same way as if it were carrying out a Move ACTION (it cannot Charge).","glossary":[{"val":"ACTION","id":"kw_action"}]}],"options":[],"skill_group":["pt_antipopeofavignon"]},{"id":"sk_eyeofbeelzebub","name":"Eye of Beelzebub","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"The overwhelming mental pressure of this emissary of Beelzebub overwhelms any mind. A model with this Skill can take an Eyes of Beelzebub ACTION. If it does so, take a Success Roll for the model. If the roll is a Failure, nothing happens. If the roll is a Success or Critical Success, pick an enemy model that is within 24\\" of the model taking the Eye of Beelzebub ACTION, in Cover, and which is not within 1\\" of any models from your Warband. Your opponent must then move that model 1\\", so that it is still in the line of sight of the model taking the ACTION but is no longer in Cover, and so that it is more than 1\\" away from any models from your Warband. If this is impossible for any reason, the enemy model is not moved.","glossary":[{"val":"ACTION","id":"kw_action"}]}],"options":[],"skill_group":["pt_antipopeofavignon"]},{"id":"sk_silveredtongue","name":"Silvered Tongue","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A model with this Skill can take a Silvered Tongue ACTION. If it does so, take a Success Roll for the model. If the roll is a Failure, nothing happens. If the roll is a Success or Critical Success, pick an enemy model that is within 1\\" of the model taking the Silvered Tongue ACTION. The model you pick must make a Melee Attack against itself. If the enemy model has more than 1 Melee Weapon, you can choose which one it uses. The enemy model will only attack itself once, even if it is capable of attacking several times.","glossary":[{"val":"ACTION","id":"kw_action"}]}],"options":[],"skill_group":["pt_antipopeofavignon"]},{"id":"sk_swinehybrid","name":"Swine Hybrid","source":"core","tags":{"trait":true},"contextdata":{"upgrade_stat":{"upgrades":[{"stat":"movement","value":2}]}},"description":[{"tags":{"desc_type":"default"},"content":"Add 2\\" to the Movement Characteristic of a model with this Skill."}],"options":[],"skill_group":["pt_antipopeofavignon"]},{"id":"sk_beelzebubswisdom","name":"Beelzebub\'s Wisdom","source":"core","tags":{"trait":true,"enemy_penalty":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Infested with the Black Grail, the head of this warrior is distended and liquid matter oozes out of its many trepanned holes; it is such a disgusting sight that enemy warriors often hesitate to draw close to the foul creature. If a model with this Skill is chosen by an enemy model as the target of a charge, the enemy model does not receive a Charge Bonus and must make the charge using only its Movement Characteristic."}],"options":[],"skill_group":["pt_antipopeofavignon"]},{"id":"sk_feastondisease","name":"Feast on Disease","source":"core","tags":{"trait":true,"bonus":true},"contextdata":{"bonus_ability":{"action_type":["attack"]}},"description":[{"tags":{"desc_type":"default"},"content":"If the target of a Melee Attack made by a model with this Skill has 1 or more INFECTION MARKERS, then it costs 1 less BLOOD MARKER or INFECTION MARKER to convert an Injury Roll into a Bloodbath Roll.","glossary":[{"val":"BLOOD MARKER","id":"kw_bloodmarker"},{"val":"INFECTION MARKER","id":"kw_infectionmarker"}]}],"options":[],"skill_group":["pt_antipopeofavignon"]},{"id":"sk_fruitfromthetreeofgoodandevil","name":"Fruit from the Tree of Good and Evil","source":"core","tags":{"trait":true},"contextdata":{"keyword_add":{"value":["kw_demonic"]},"skill_option":{}},"description":[{"tags":{"desc_type":"default"},"content":"Any model eating this fruit will immediately gain any Skill of your choice normally available to your Warband/this model (including any Exploration Skill). In addition the model will gain the Keyword DEMONIC.","glossary":[{"val":"DEMONIC","id":"kw_demonic"}]}],"options":[{"ref_id":"ot_walkwithgod","name":"","description":[],"category":"type","type":"text","single":true,"strictness":"strict","predefined_options":[],"option_context":{"basic_option_default":{}},"data_search":{"searchtype":"complex","searchparam":{"type":"skill","request":{"operator":"and","terms":[{"item":"tags","value":"patron","equals":false,"strict":true,"istag":true,"tagvalue":""}],"subparams":[{"operator":"or","terms":[{"item":"skill_group","value":"sg_meleeandstrength","equals":true,"strict":true},{"item":"skill_group","value":"sg_exploration","equals":true,"strict":true},{"item":"skill_group","value":"sg_ranged","equals":true,"strict":true},{"item":"skill_group","value":"sg_stealthandspeed","equals":true,"strict":true},{"item":"skill_group","value":"sg_wildcard","equals":true,"strict":true}],"subparams":[]}]}}}}],"skill_group":[]},{"id":"sk_admonishmentofarius","name":"Admonishment of Arius","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"A model with this Skill can take an Admonishment of Arius ACTION. If it does so, take a Risky Success Roll for the model. If the roll is a Failure, nothing happens and the model\u2019s Activation ends. If the roll is a Success or Critical Success, the model has the FEAR Keyword until the end of the Turn, and you can place up to 1 BLOOD MARKER on an enemy model within 1\u201d of the model taking the Admonishment of Arius ACTION.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"Risky","id":"kw_riskyaction"},{"val":"FEAR","id":"kw_fear"},{"val":"BLOOD MARKER","id":"kw_bloodmarker"}]}],"options":[],"skill_group":["pt_saintnicholas"]},{"id":"sk_calmthestorm","name":"Calm the Storm","source":"core","tags":{"trait":true,"bonus":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Models in your Warband add +2 DICE to the Risky Success Rolls taken for Activating within or moving into Dangerous terrain that is at least partially made up of water (including swamps or marshes) whilst a model with this Skill is on the battlefield. You must agree with your opponent what Terrain pieces would be affected by this Skill at the start of the game.","glossary":[{"val":"+2 DICE","id":"kw_plusdice"},{"val":"Risky","id":"kw_riskyaction"}]}],"options":[],"skill_group":["pt_saintnicholas"]},{"id":"sk_charitabledonation","name":"Charitable Donation","source":"core","tags":{"trait":true},"contextdata":{"gain_ducats":{"value":100}},"description":[{"tags":{"desc_type":"default"},"content":"You can add 100 ducats to your Strongbox when you take this Skill for a model in your Warband. The ducats are only gained once, when the Skill is chosen."}],"options":[],"skill_group":["pt_saintnicholas"]},{"id":"sk_feastday","name":"Feast Day","source":"core","tags":{"trait":true,"bonus":true},"contextdata":{"keyword_ignore":{"value":["kw_consumable"]},"unique_skill":{}},"description":[{"tags":{"desc_type":"default"},"content":"A model with this Skill ignores the Effect of the CONSUMABLE Keyword on any Battlekit that it has. A Warband can only have one model with this Skill.","glossary":[{"val":"CONSUMABLE","id":"kw_consumable"}]}],"options":[],"skill_group":["pt_saintnicholas"]},{"id":"sk_generousoffer","name":"Generous Offer","source":"core","tags":{"trait":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"At the end of a game in which a model with this Skill was included in your Warband but not taken Out of Action, you may make your opponent a Generous Offer. If you do so, choose one model in your Warband that was taken Out of Action during the game. If the chosen model was a Troop, they automatically count as rolling a 3+ for their Survival Roll in the following Trauma Step. If the chosen model had the ELITE Keyword, they make a Full Recovery and do not roll on the Trauma Table in the following Trauma Step. Then, your opponent may do the same, but chooses a model in their Warband that was taken Out of Action instead.","glossary":[{"val":"ELITE","id":"kw_elite"}]}],"options":[],"skill_group":["pt_saintnicholas"]},{"id":"sk_saintlyprotection","name":"Saintly Protection","source":"core","tags":{"action":true},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Once per game, a model with this Skill can take a Saintly Protection ACTION. If it does so, take a Risky Success Roll for the model. If the roll is a Failure, nothing happens and the model\u2019s Activation ends. If the roll is a Success or Critical Success, remove 1 BLOOD MARKER from up to 3 other friendly models within 6\u201d of the model taking the Saintly Protection ACTION.","glossary":[{"val":"ACTION","id":"kw_action"},{"val":"Risky","id":"kw_riskyaction"},{"val":"BLOOD MARKER","id":"kw_bloodmarker"}]}],"options":[],"skill_group":["pt_saintnicholas"]}]'),D=JSON.parse('[{"id":"in_dead","name":"Dead","source":"core","tags":{},"contextdata":{"kill_character":{}},"description":[{"tags":{"desc_type":"default"},"content":"The wound proved to be fatal. Remove the model and its Battlekit from your Warband Roster."}],"table_val":[11],"options":[]},{"id":"in_captured","name":"Captured","source":"core","tags":{},"contextdata":{"capture_character":{},"strip_equipment":{}},"description":[{"tags":{"desc_type":"default"},"content":"The enemy captures the model. Before continuing the Trauma Step, you and your opponent from the game can negotiate a ransom price in \ud83d\udc51  for the release of the model. If the ransom is not paid, the captured model is executed \u2013 remove them from your Warband Roster. If the ransom is paid, transfer the \ud83d\udc51  from your Strongbox to your opponent\u2019s, and treat this result as a Full Recovery. Continue with the Trauma Step after resolving the outcome of the ransom."}],"table_val":[12],"options":[]},{"id":"in_severenervedamage","name":"Severe Nerve Damage","source":"core","tags":{"bonus":true},"contextdata":{"bonus_ability":{"action_type":["action"]}},"description":[{"tags":{"desc_type":"default"},"content":"All Success Rolls you take for this model are treated as being Risky Success Rolls, unless they are Risky Success Rolls already, in which case there is no additional penalty.","glossary":[{"val":"Risky Success","id":"kw_riskyaction"}]}],"table_val":[13],"options":[]},{"id":"in_handwound","name":"Hand Wound","source":"core","tags":{"bonus":true},"contextdata":{"bonus_ability":{"action_type":["attack_melee"]}},"description":[{"tags":{"desc_type":"default"},"content":"Randomly determine which hand has been injured. Add -1 DICE to rolls for attacks made for this model with a Melee Weapon that is held (or jointly held) by the injured hand.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"}]}],"table_val":[14],"options":[]},{"id":"in_lostaneye","name":"Lost An Eye","source":"core","tags":{},"contextdata":{"upgrade_stat":{"upgrades":[{"stat":"ranged","value":-1}]},"ignore_scar":{"requirements":[{"type":"id","value":"md_sniperpriest"}]},"auto_retire":{"id":"in_lostaneye","count":2}},"description":[{"tags":{"desc_type":"default"},"content":"Add -1 DICE to rolls for Ranged Attacks made for this model. If this model receives this injury for a second time, they are blinded and you must remove them from your Warband Roster instead of re-rolling the result. Treat this injury as a Full Recovery if it is inflicted on a Sniper Priest.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"}]}],"table_val":[15],"options":[]},{"id":"in_chestwound","name":"Chest Wound","source":"core","tags":{},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Add +1 INJURY DICE to Injury Rolls for attacks that target this model.","glossary":[{"val":"+1 INJURY DICE","id":"kw_injurydice"}]}],"table_val":[16],"options":[]},{"id":"in_insomniac","name":"Insomniac","source":"core","tags":{},"contextdata":{"keyword_mod":{"mods":[{"type":"remove","value":"kw_infiltrator"}]}},"description":[{"tags":{"desc_type":"default"},"content":"This model must always be the first model you deploy in any game it takes part in, and loses the INFILTRATOR Keyword if it has it.","glossary":[{"val":"INFILTRATOR","id":"kw_infiltrator"}]}],"table_val":[21],"options":[]},{"id":"in_headwound","name":"Head Wound","source":"core","tags":{},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"This model can no longer gain Experience Points. You can assign Promotion Dice to this model as if it were a Troop in the Promotions and Experience Step. If one of its assigned Promotion Dice rolls a \u201c6\u201d, it regains the ability to gain Experience Points, although the Battle Scar remains."}],"table_val":[22],"options":[]},{"id":"in_shellshocked","name":"Shell Shocked","source":"core","tags":{},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Roll a D6 the first time this model is deployed during a game. On a 1-2, add -1 DICE to rolls for this model for the rest of the game.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"}]}],"table_val":[23],"options":[]},{"id":"in_darkmemory","name":"Dark Memory","source":"core","tags":{},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"Write down the name of the Warband from the game where this injury was received. Add -1 DICE to rolls for Melee Attacks made by this model if the target is a model from the Warband you have written down.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"}]}],"table_val":[24],"options":[{"ref_id":"ot_darkmemory","name":"Feared Warband","description":[],"category":"type","type":"text","strictness":"strict","predefined_options":[],"option_context":{"basic_option_default":{}},"data_search":{"searchtype":"file","searchparam":{"type":"faction"}}}]},{"id":"in_paranoid","name":"Paranoid","source":"core","tags":{},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"This model cannot be deployed within 8\\" of a friendly model. Friendly models can be deployed within 8\\" of this model after it has been deployed."}],"table_val":[25],"options":[]},{"id":"in_lostarm","name":"Lost Arm","source":"core","tags":{},"contextdata":{"add_arms":{"ranged":-1,"melee":-1}},"description":[{"tags":{"desc_type":"default"},"content":"This model cannot use Battlekit that requires 2 hands, and can only use one piece of Battlekit that requires 1 hand."}],"table_val":[26],"options":[]},{"id":"in_legwound","name":"Leg Wound","source":"core","tags":{"bonus":true},"contextdata":{"bonus_ability":{"action_type":["dash"]},"upgrade_stat":{"upgrades":[{"stat":"movement","value":-2}]}},"description":[{"tags":{"desc_type":"default"},"content":"Subtract 2\\" from this model\u2019s Movement Characteristic. In addition, add -1 DICE to the Risky Success Roll for this model when it takes a Dash ACTION.","glossary":[{"val":"-1 DICE","id":"kw_minusdice"},{"val":"Risky Success","id":"kw_riskyaction"},{"val":"ACTION","id":"kw_action"}]}],"table_val":[31],"options":[]},{"id":"in_expensivetreatment","name":"Expensive Treatment","source":"core","tags":{},"contextdata":{"on_deploy":{"warband":[{"ducats":-10}]}},"description":[{"tags":{"desc_type":"default"},"content":"The model\u2019s wounds require constant treatment. Before you can deploy this model, you must deduct 10 \ud83d\udc51  from your Warband\u2019s Strongbox. This payment does not count towards your Warband\u2019s Threshold Value."}],"table_val":[32],"options":[]},{"id":"in_possessed","name":"Possessed","source":"core","tags":{},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"When this model is Activated, if it is more than 1\u201d from any enemy models the first ACTION that it takes must take a Dash ACTION, even if another rule states that it cannot take a Dash ACTION. In addition, the first 3\u201d of this move must be in a straight line directly away from its starting position, if it is possible for it to do so. If the model is Down at the start of the Activation, it will stand up if it can do so and must then attempt to move 3\u201d in a straight line away from its starting position.","glossary":[{"val":"ACTION","id":"kw_action"}]}],"table_val":[33],"options":[]},{"id":"in_muscledamage","name":"Muscle Damage","source":"core","tags":{},"contextdata":{"model_equipment_restriction":{"removed":[{"res_type":"keyword","value":"kw_heavy"}]}},"description":[{"tags":{"desc_type":"default"},"content":"This model cannot have Battlekit that has the HEAVY Keyword. Any that it has when the Injury is suffered is lost.","glossary":[{"val":"HEAVY","id":"kw_heavy"}]}],"table_val":[34],"options":[]},{"id":"in_minorwound","name":"Minor Wound","source":"core","tags":{},"contextdata":{},"description":[{"tags":{"desc_type":"default"},"content":"This model cannot be used in the next game."}],"table_val":[35],"options":[]},{"id":"in_robbed","name":"Robbed","source":"core","tags":{},"contextdata":{"ignore_scar":{},"strip_equipment":{}},"description":[{"tags":{"desc_type":"default"},"content":"All of the model\u2019s Battlekit is lost, unless it is Battlekit that cannot be lost or removed during a campaign. It does not receive an Injury or a Battle Scar"}],"table_val":[36],"options":[]},{"id":"in_fullrecovery","name":"Full Recovery","source":"core","tags":{},"contextdata":{"ignore_scar":{}},"description":[{"tags":{"desc_type":"default"},"content":"The model has survived the battle with no ill effects. It does not receive an Injury or a Battle Scar."}],"table_val":[41,63],"options":[]},{"id":"in_hardened","name":"Hardened","source":"core","tags":{},"contextdata":{"ignore_scar":{},"keyword_ignore":{"value":["kw_fear"]}},"description":[{"tags":{"desc_type":"default"},"content":"This model gains the NEGATE FEAR Keyword. It does not receive an Injury or a Battle Scar.","glossary":[{"val":"NEGATE FEAR","id":"kw_negate_kw_fear"}]}],"table_val":[64],"options":[]},{"id":"in_bitterlessons","name":"Bitter Lessons","source":"core","tags":{},"contextdata":{"ignore_scar":{},"on_pick":{"experience":{"dice":3}}},"description":[{"tags":{"desc_type":"default"},"content":"This model gains D3 extra Experience Points. It does not receive an Injury or a Battle Scar."}],"table_val":[65],"options":[]},{"id":"in_facialscar","name":"Prominent Scar","source":"core","tags":{},"contextdata":{"ignore_scar":{}},"description":[{"tags":{"desc_type":"default"},"content":"Write down the name of the Warband from the game where this injury was received. Add +1 DICE to rolls for Melee Attacks made by this model if the target is a model from the Warband you have written down. It does not receive an Injury or a Battle Scar.","glossary":[{"val":"+1 DICE","id":"kw_plusdice"},{"val":"ACTIONS","id":"kw_action"}]}],"table_val":[66],"options":[{"ref_id":"ot_facialscar","name":"Chosen Keyword","description":[],"category":"type","type":"text","strictness":"strict","predefined_options":[],"option_context":{"basic_option_default":{}},"data_search":{"searchtype":"complex","searchparam":{"type":"keyword","request":{"operator":"and","terms":[{"item":"tags","value":"category","equals":true,"strict":true,"istag":true,"tagvalue":"faction"}],"subparams":[]}}}}]}]');const R={ver_default:{glossarydata:n,tabledata:o,imagedata:i,keyworddata:r,gameruledata:s,campaignruledata:l,errataruledata:c,abilitydata:d,modeldata:u,modelvariantdata:h,upgradedata:m,modelupgraderelationship:b,fireteamdata:p,equipmentdata:f,modelequipmentrelationship:v,factiondata:g,factionvariantdata:y,factionruledata:_,factionmodelrelationship:w,factionequipmentrelationship:x,scenario:k,gloriousdeeds:C,scenariorule:j,scenarioobjectives:S,scenariodeployments:I,scenariovictories:A,explorationlocation:N,skilldata:T,skillgroup:JSON.parse('[{"id":"sg_meleeandstrength","name":"Melee and Strength Skills","source":"core","tags":{"category":"model"},"contextdata":{}},{"id":"sg_exploration","name":"Exploration Skills","source":"core","tags":{"category":"exploration"},"contextdata":{}},{"id":"sg_ranged","name":"Ranged Skills","source":"core","tags":{"category":"model"},"contextdata":{}},{"id":"sg_stealthandspeed","name":"Stealth & Speed Skills","source":"core","tags":{"category":"model"},"contextdata":{}},{"id":"sg_wildcard","name":"Wildcard Skills","source":"core","tags":{"category":"model"},"contextdata":{}}]'),injurydata:D,patrondata:JSON.parse('[{"id":"pt_sublimegate","name":"Sublime Gate","source":"core","tags":{"url_custom":"sublime-gate"},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph"},"content":"Your Patron is one of the high-ranking nobles of the Sultanate such as an emir, pasha, vizier or even the Sultan himself. Such Patrons bestow martial prowess, access to exotic weapons, armour, superior training and of course, the favour of the Sultan."}]},{"id":"pt_temporallord","name":"Temporal Lord","source":"core","tags":{"url_custom":"temporal-lord"},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph"},"content":"Your Patron is a powerful noble, perhaps a merchant prince, a high-ranking military officer, a minister, or even the mighty Duke of New Antioch himself. Such Patrons can help your warband\u2019s specialist training and procurement of expensive weapons."}]},{"id":"pt_warriorsaint","name":"Warrior Saint","source":"core","tags":{"url_custom":"warrior-saint"},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph"},"content":"Your Patron is a mighty saint of soldiers and warriors such as Saint George the Dragonslayer, Saint John the Warrior, Saint Jeanne d\u2019Arc, or even Saint Michael the Taxiarch himself. Such Patrons offer great power in personal combat and divine protection on the battlefield."}]},{"id":"pt_learnedsaint","name":"Learned Saint","source":"core","tags":{"url_custom":"learned-saint"},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph"},"content":"Your Patron is a great teacher, such as Saint Patrick, Saint Thomas Aquinas or Saint Methodius. Such Patrons illuminate the paths of planning, science, strategy and organisational skills."}]},{"id":"pt_infernalnoble","name":"Infernal Noble","source":"core","tags":{"url_custom":"infernal-noble"},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph"},"content":"Your Patron is one of the Fallen, a mighty devil noble such as Baal, Balam, Zepar, Astaroth or Gusion. Such Patrons bestow magical powers, reward evil deeds and enhance the power of sins."}]},{"id":"pt_orderofthefly","name":"The Order of the Fly","source":"core","tags":{"url_custom":"the-order-of-the-fly"},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph"},"content":"Your Patron is a powerful infernal noble of the Order of the Fly, such as Enlil, Prince Vassago or even Beelzebub the Lord of the Flies himself. Through you, these putrid and mighty devils unleash a tidal wave of corruption upon the mortal world."}]},{"id":"pt_mammon","name":"Mammon","source":"core","tags":{"url_custom":"mammon"},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph"},"content":"Your Patron is Mammon, the Prince of Greed, the Treasurer of Hell, and the King of Fools. He appears as a golden-skinned king on an opulent throne, with black scorch marks tarnishing his splendour. He is the most popular Patron amongst mortals."}]},{"id":"pt_antipopeofavignon","name":"Anti-Pope of Avignon","source":"core","tags":{"url_custom":"anti-pope-of-avignon"},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph"},"content":"Your Patron is the Antipope of Avignon, the high priest of the Cult of the Black Grail. Whereas most strains of the Black Grail infect the body, the variant spread by Missionaries of Beelzebub targets the mind above all. This is why Apostles of the Fly are disturbingly effective at winning new converts to their cause despite the obvious ruin that follows devotion to the Lord of the Flies."}]},{"id":"pt_saintnicholas","name":"Saint Nicholas","source":"core","tags":{"url_custom":"saint-nicholas"},"contextdata":{},"description":[{"tags":{"desc_type":"paragraph"},"content":"Your Patron is Saint Nicholas of Myra, patron saint of sailors and renowned figure of generosity and charity. As a Patron, Saint Nicholas\u2019s legendary charitable nature extends outwards, offering your warband alms, helping them to cross stormy seas, allowing them to revel in the feast of his name and even offer your opponent an unexpected kindness. However, said opponents should not forget that Saint Nicholas was not beyond admonishing the heretic, with his very hand if needed."}]}]'),patronrelationship:JSON.parse('[{"id":"pt_sublimegate","faction_id":["fc_ironsultanate","fc_ironsultanate_fv_fidaiofalamut","fc_ironsultanate_fv_houseofwisdom","fc_ironsultanate_fv_defendersoftheironwall"]},{"id":"pt_infernalnoble","faction_id":["fc_courtofthesevenheadedserpent","fc_hereticlegion","fc_hereticlegion_fv_hereticnavalraidingparty","fc_hereticlegion_fv_trenchghosts"]},{"id":"pt_mammon","faction_id":["fc_hereticlegion_fv_knightsofavarice","fc_hereticlegion","fc_hereticlegion_fv_hereticnavalraidingparty","fc_hereticlegion_fv_trenchghosts"]},{"id":"pt_learnedsaint","faction_id":["fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch_fc_eirerangers","fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_papalstatesinterventionforce","fc_trenchpilgrim","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction","fc_trenchpilgrim_fv_warpilgimageofsaintmethodius"]},{"id":"pt_warriorsaint","faction_id":["fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_papalstatesinterventionforce","fc_trenchpilgrim","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction"]},{"id":"pt_temporallord","faction_id":["fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_papalstatesinterventionforce"]},{"id":"pt_orderofthefly","faction_id":["fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon","fc_cultoftheblackgrail_fv_thegreathunger"]},{"id":"pt_antipopeofavignon","faction_id":["fc_cultoftheblackgrail","fc_cultoftheblackgrail_fv_dirgeofthegreathegemon","fc_cultoftheblackgrail_fv_thegreathunger"]},{"id":"pt_saintnicholas","faction_id":["fc_newantioch_fv_expeditionaryforcedofabyssinia","fc_newantioch_fv_kingdomofalbaassaultdetatchment","fc_newantioch_fc_stortruppenofthefreestateofprussia","fc_newantioch","fc_newantioch_fv_redbrigade","fc_newantioch_fv_papalstatesinterventionforce","fc_trenchpilgrim","fc_trenchpilgrim_fv_cavalcadeofthetenthplague","fc_trenchpilgrim_fv_processionofthesacredaffliction"]}]'),explorationtable:E,testdynamicdata:JSON.parse('[{"id":"td_testitem","source":"core","tags":{"category":"default"},"name":"Test Dynamic","contextdata":{"option_search_viable":{"test":"check"}},"teststaticlist":["ts_testitem_a","ts_testitem_b"],"teststaticbaselist":["tb_testitem_c","tb_testitem_b","tb_testitem_a"]}]'),teststaticdata:JSON.parse('[{"id":"ts_testitem_a","source":"core","tags":{"category":"default"},"name":"TestA","teststatic":1,"contextdata":{"option_search_viable":{}},"options":[{"ref_id":"ot_testitemset_a","name":"TestOptionSet","description":[],"category":"type","type":"text","strictness":"strict","predefined_options":["Preset_A"],"option_context":{"basic_option_default":{}},"data_search":{"searchtype":"file","searchparam":{"type":"glossary","data":[]}}},{"ref_id":"ot_testitemset_b","name":"TestOptionSet","description":[],"category":"contextobject","parent_level":3,"question_name":"optionSearchEvent","question":{"classes":["TestBasicFeature"],"questions":[{"tagq":{"category":"default"},"propertyq":{"teststatic":1}}]}}]},{"id":"ts_testitem_b","source":"core","tags":{"category":"default"},"name":"TestB","teststatic":2,"contextdata":{"option_search_viable":{}},"options":[{"ref_id":"ot_testitemset_b","name":"TestOptionSet","description":[],"category":"contextobject","parent_level":3,"question_name":"optionSearchEvent","question":{"classes":["TestStaticInContextFeature"],"questions":[{"tagq":{"category":"default"}}]}}]},{"id":"el_testselect","name":"Test Select","source":"core","tags":{"exploration_table":"et_commonlocations"},"contextdata":{"location_rule_option":{}},"description":[{"tags":{"desc_type":"default"},"content":"Test."}],"location_value":4,"options":[{"ref_id":"ot_testselect","name":"","description":[],"category":"type","type":"text","strictness":"strict","predefined_options":[],"option_context":{"basic_option_default":{}},"data_search":{"searchtype":"complex","searchparam":{"type":"explorationlocation","request":{"operator":"and","terms":[{"item":"tags","value":"location_option","equals":true,"strict":true,"istag":true,"tagvalue":"el_testselect"}],"subparams":[]}}}}]},{"id":"el_testselect_optionA","name":"Option A","source":"core","tags":{"location_option":"el_testselect"},"contextdata":{"consumable":{}},"description":[{"tags":{"desc_type":"default"},"content":"Test","glossary":[]}],"options":[]},{"id":"el_testselect_optionB","name":"Option B","source":"core","tags":{"location_option":"el_testselect"},"contextdata":{"location_rule_option":{}},"description":[{"tags":{"desc_type":"default"},"content":"Test."}],"location_value":4,"options":[{"ref_id":"ot_testselect_optionB","name":"","description":[],"category":"type","type":"text","strictness":"strict","predefined_options":[],"option_context":{"basic_option_default":{}},"data_search":{"searchtype":"complex","searchparam":{"type":"explorationlocation","request":{"operator":"and","terms":[{"item":"tags","value":"location_option","equals":true,"strict":true,"istag":true,"tagvalue":"el_testselect_optionB"}],"subparams":[]}}}}]},{"id":"el_testselect_optionB_suboptionA","name":"Option B SubOption A","source":"core","tags":{"location_option":"el_testselect_optionB"},"contextdata":{"consumable":{}},"description":[{"tags":{"desc_type":"default"},"content":"Test","glossary":[]}],"options":[]},{"id":"el_testselect_optionB_suboptionB","name":"Option B SubOption B","source":"core","tags":{"location_option":"el_testselect_optionB"},"contextdata":{"consumable":{}},"description":[{"tags":{"desc_type":"default"},"content":"Test","glossary":[]}],"options":[]}]'),testbasicdata:JSON.parse('[{"id":"tb_testitem_a","source":"core","tags":{"category":"default"},"name":"TestBasicA","teststatic":1,"contextdata":{"option_search_viable":{},"test_run":{"value":7}}},{"id":"tb_testitem_b","source":"core","tags":{"category":"default"},"name":"TestBasicB","teststatic":2,"contextdata":{"option_search_viable":{},"test_run":{"value":2}}},{"id":"tb_testitem_c","source":"core","tags":{"category":"default"},"name":"TestBasicC","teststatic":1,"contextdata":{"option_search_viable":{},"test_run":{"value":5}}}]')}};class M{static GetDataType(e,t,a){let n;switch(n=void 0!=a?R[a]:R.ver_default,e){case"glossary":return n.glossarydata.concat(t);case"table":return n.tabledata.concat(t);case"images":return n.imagedata.concat(t);case"keyword":return n.keyworddata.concat(t);case"gamerule":return n.gameruledata.concat(t);case"campaignrule":return n.campaignruledata.concat(t);case"errata":return n.errataruledata.concat(t);case"ability":return n.abilitydata.concat(t);case"model":return n.modeldata.concat(t);case"modelvariant":return n.modelvariantdata.concat(t);case"upgrade":return n.upgradedata.concat(t);case"modelupgraderelationship":return n.modelupgraderelationship.concat(t);case"equipment":return n.equipmentdata.concat(t);case"modelequipmentrelationship":return n.modelequipmentrelationship.concat(t);case"faction":return n.factiondata.concat(t);case"factionvariant":return n.factionvariantdata.concat(t);case"fireteam":return n.fireteamdata.concat(t);case"factionrule":return n.factionruledata.concat(t);case"factionmodelrelationship":return n.factionmodelrelationship.concat(t);case"factionequipmentrelationship":return n.factionequipmentrelationship.concat(t);case"scenario":return n.scenario.concat(t);case"gloriousdeed":return n.gloriousdeeds.concat(t);case"scenariorule":return n.scenariorule.concat(t);case"scenarioobjective":return n.scenarioobjectives.concat(t);case"scenariodeployment":return n.scenariodeployments.concat(t);case"scenariovictories":return n.scenariovictories.concat(t);case"explorationlocation":return n.explorationlocation.concat(t);case"skill":return n.skilldata.concat(t);case"skillgroup":return n.skillgroup.concat(t);case"patron":return n.patrondata.concat(t);case"patronrelationship":return n.patronrelationship.concat(t);case"explorationtable":return n.explorationtable.concat(t);case"injury":return n.injurydata.concat(t);case"testdynamicfeature":return n.testdynamicdata.concat(t);case"teststaticfeature":return n.teststaticdata.concat(t);case"testbasicfeature":return n.testbasicdata.concat(t);default:return t}}static GetResponse(e,t,a){switch(e.version=a,t){case"id":return M.GetSingleEntry(e);case"file":return M.GetFullDataEntry(e);case"keyvalues":return M.GetAllOfKeyInData(e);case"complex":return M.ComplexSearch(e);case"tags":return M.GetAllTagsInData(e);default:return[]}}static GetSingleEntry(e){const t=M.GetDataType(e.type,e.data,e.version);let a=0;for(a=0;a<t.length;a++)if(t[a].id==e.id)return JSON.parse(JSON.stringify(t[a]));return{}}static GetFullDataEntry(e){const t=M.GetDataType(e.type,e.data,e.version);return JSON.parse(JSON.stringify(t))}static GetAllOfKeyInData(e){const t=M.GetDataType(e.type,e.data,e.version),a=[];let n=0;for(n=0;n<t.length;n++){const o=t[n],i=e.id;a.includes(o[i])||a.push(JSON.parse(JSON.stringify(o[i])))}return a}static GetAllTagsInData(e){const t=M.GetDataType(e.type,e.data,e.version),a=[];let n=0;for(n=0;n<t.length;n++)Object.entries(t[n].tags).forEach((e=>{let[t]=e;a.includes(t)||a.push(t)}));return a}static ComplexSearch(e){const t=M.GetDataType(e.type,e.data,e.version),a=[];let n=0;for(n=0;n<t.length;n++)M.ValidateComplexSearch(e.request,t[n])&&a.push(JSON.parse(JSON.stringify(t[n])));return a}static ValidateComplexSearch(e,t){let a=!1,n=0;for(n=0;n<e.terms.length;n++){const o=M.ValidateBySearch(e.terms[n],t);if("and"==e.operator){if(0==o)return!1;a=!0}else o&&(a=!0)}for(n=0;n<e.subparams.length;n++){const o=M.ValidateComplexSearch(e.subparams[n],t);if("and"==e.operator){if(0==o)return!1;a=!0}else o&&(a=!0)}return a}static ValidateBySearch(e,t){if(!e.istag){const a=e.item;let n=!1;return e.isrange?void 0!=t[a]&&"number"===typeof t[a]&&(n=t[a]>=e.value[0]&&t[a]<=e.value[1]):e.strict?void 0!=t[a]&&(n=Array.isArray(t[a])?t[a].includes(e.value.toString().toLowerCase()):t[a].toString().toLowerCase()==e.value.toString().toLowerCase()):void 0!=t[a]&&(n=t[a].toString().toLowerCase().includes(e.value.toString().toLowerCase())),e.equals?n:!n}{const a=e.item;if(void 0!=t[a])return t[a][e.value]?""===e.tagvalue?!0===e.equals:e.strict?Array.isArray(t[a][e.value])?e.equals===t[a][e.value].toString().toLowerCase().includes(e.tagvalue.toString().toLowerCase()):e.equals===(e.tagvalue.toString().toLowerCase()===t[a][e.value].toString().toLowerCase()):e.equals===t[a][e.value].toString().toLowerCase().includes(e.tagvalue.toString().toLowerCase()):!1===e.equals}}}class O{static MakeRequest(e){e.searchparam.data=function(e){const t=[];let a=[];const n=localStorage.getItem("contentpackstorage_sitename");try{a=JSON.parse(n||"")}catch(i){}let o=0;for(o=0;o<a.length;o++)if(a[o].IsActive){let n=0;for(n=0;n<a[o].Files.length;n++)if(a[o].Files[n].type==e.searchparam.type){let e=0;for(e=0;e<a[o].Files[n].data.length;e++)t.push(a[o].Files[n].data[e])}}return t}(e);try{return M.GetResponse(e.searchparam,e.searchtype,"ver_default")}catch(t){return[]}}}},5949:function(e,t,a){"use strict";a.d(t,{_:function(){return o}});var n=a(4211);class o{static CreateAdvancedDescriptionItem(e,t){const a=new n.b(e,t);return a.LoadData(),a}}},5035:function(e,t,a){"use strict";a.d(t,{AbilityFactory:function(){return r}});var n=a(363),o=a(4852),i=a(247);class r{static async CreateAbility(e,t){let a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const n=o.t.getInstance();if(0==n.CheckID("ability",e.id)&&!a)return n.AbilityCache[e.id];const r=new i.Ability(e,t);return n.AddToCache("ability",r),await r.ReloadOptions(),r}static async CreateNewAbility(e,t){const a=o.t.getInstance();if(0==a.CheckID("ability",e))return a.AbilityCache[e];const i=n.D.MakeRequest({searchtype:"id",searchparam:{type:"ability",id:e}});return await r.CreateAbility(i,t)}}},5204:function(e,t,a){"use strict";a.d(t,{BookRuleFactory:function(){return r}});var n=a(363),o=a(4852),i=a(7520);class r{static CreateBookRule(e,t){const a=o.t.getInstance();if(0==a.CheckID("gamerule",e.id))return a.GameRulesCache[e.id];const n=new i.g(e,t);return a.AddToCache("gamerule",n),n}static CreateNewBookRule(e,t){const a=o.t.getInstance();if(0==a.CheckID("gamerule",e))return a.GameRulesCache[e];const i=n.D.MakeRequest({searchtype:"id",searchparam:{type:"gamerule",id:e}});return r.CreateBookRule(i,t)}}},7880:function(e,t,a){"use strict";a.r(t),a.d(t,{EquipmentFactory:function(){return d}});var n=a(363),o=a(4852),i=a(7551),r=a(2573);class s extends r.u{constructor(e,t){super(e,t),this.EquipmentItems=[],this.Removable=void 0,this.SaleValue=void 0,this.SaleType=void 0,this.Removable=e.removable,e.salevalue?this.SaleValue=e.salevalue:this.SaleValue=0,e.saletype?this.SaleType=e.saletype:this.SaleType=0}async BuildEquipment(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];for(let a=0;a<e.length;a++){const n=await d.CreateNewEquipment(e[a],this,t);this.EquipmentItems.push(n)}}async BuildOptionEquipment(){for(let e=0;e<this.MyOptions.length;e++)for(let t=0;t<this.MyOptions[e].Selections.length;t++)this.MyOptions[e].Selections[t].value.id&&(this.MyOptions[e].Selections[t].value=await d.CreateModelEquipment(this.MyOptions[e].Selections[t].value,this))}getUniqueEquipment(){const e=[],t=[];for(let a=0;a<this.EquipmentItems.length;a++)t.includes(this.EquipmentItems[a].ID)||(t.push(this.EquipmentItems[a].ID),e.push(this.EquipmentItems[a]));return e}async ReloadOptions(){for(let e=0;e<this.MyOptions.length;e++)this.MyOptions[e].Selections=await this.MyOptions[e].FindChoices();this.BuildOptionEquipment()}}var l=a(7873),c=a(6184);class d{static async CreateEquipment(e,t){let a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const n=o.t.getInstance();if(0==n.CheckID("equipment",e.id)&&!a)return n.EquipmentCache[e.id];const r=new i.Equipment(e,t);return a||n.AddToCache("equipment",r),await r.BuildFactionEquipment(e.id),e.abilities&&await r.BuildAbilities(e.abilities),r}static async GetAllEquipment(){let e=[];e=arguments.length>0&&void 0!==arguments[0]&&arguments[0]?n.D.MakeRequest({searchtype:"file",searchparam:{type:"equipment"}}):n.D.MakeRequest({searchtype:"complex",searchparam:{type:"equipment",request:{operator:"and",terms:[{item:"tags",value:"model",equals:!1,strict:!0,istag:!0,tagvalue:!0},{item:"tags",value:"dontshow",equals:!1,strict:!0,istag:!0,tagvalue:!0}],subparams:[]}}}),e.sort((0,c.Ah)(["name","id"]));const t=[];for(let a=0;a<e.length;a++){const n=await d.CreateEquipment(e[a],null);null!=n&&t.push(n)}return t}static async CreateNewEquipment(e,t){let a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const i=o.t.getInstance();if(0==i.CheckID("equipment",e)&&!a)return i.EquipmentCache[e];const r=n.D.MakeRequest({searchtype:"id",searchparam:{type:"equipment",id:e}});try{return await d.CreateEquipment(r,t,a)}catch(s){return await d.CreateEquipment(r,t,a)}}static async CreateModelEquipment(e,t){let a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const n=o.t.getInstance();if(0==n.CheckID("modelequipment",e.id)&&!a)return n.ModelEquipmentCache[e.id];const i=new s(e,t);return a||n.AddToCache("modelequipment",i),await i.BuildEquipment(e.mandatory_equipment,a),await i.ReloadOptions(),await i.BuildOptionEquipment(),i}static async CreateNewModelEquipment(e,t){let a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const i=o.t.getInstance();if(0==i.CheckID("modelequipment",e)&&!a)return i.ModelEquipmentCache[e];const r=n.D.MakeRequest({searchtype:"id",searchparam:{type:"modelequipmentrelationship",id:e}});return await d.CreateModelEquipment(r,t,a)}static async GetAllFactionEquipment(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1?arguments[1]:void 0,a=arguments.length>2?arguments[2]:void 0;const o=n.D.MakeRequest({searchtype:"file",searchparam:{type:"factionequipmentrelationship"}});o.sort((0,c.Ah)(["name","id"]));const i=[];for(let n=0;n<o.length;n++){if(!(0,c.Pn)(o[n].faction_id,t,a))continue;const r=await d.CreateFactionEquipment(o[n],null,e);null!=r&&i.push(r)}return i}static async CreateFactionEquipment(e,t){let a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const n=o.t.getInstance();if(0==n.CheckID("factionequipment",e.id)&&!a)return n.FactionEquipmentCache[e.id];const i=new l.FactionEquipmentRelationship(e,t);return a||n.AddToCache("factionequipment",i),await i.MakeItem(e.equipment_id,a),await i.GetFactions(e.faction_id),await i.RunEquipmentRestriction(),i}static async CreateNewFactionEquipment(e,t){let a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const i=o.t.getInstance();if(0==i.CheckID("factionequipment",e)&&!a)return i.FactionEquipmentCache[e];const r=n.D.MakeRequest({searchtype:"id",searchparam:{type:"factionequipmentrelationship",id:e}});if(void 0==r.id)return null;return await d.CreateFactionEquipment(r,t,a)}}},6298:function(e,t,a){"use strict";a.r(t),a.d(t,{ExplorationFactory:function(){return s}});var n=a(363),o=a(4852),i=a(595),r=a(3588);class s{static async CreateExplorationTable(e,t){let a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const n=o.t.getInstance();if(0==n.CheckID("explorationtable",e.id)&&!a)return n.ExplorationTableCache[e.id];const r=new i.C(e,t);return a||n.AddToCache("explorationtable",r),await r.BuildTableLocations(e.id,a),r}static async CreateNewExplorationTable(e,t){let a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const i=o.t.getInstance();if(0==i.CheckID("explorationtable",e)&&!a)return i.ExplorationTableCache[e];const r=n.D.MakeRequest({searchtype:"id",searchparam:{type:"explorationtable",id:e}});return await s.CreateExplorationTable(r,t,a)}static async CreateExplorationLocation(e,t){let a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const n=o.t.getInstance();if(0==n.CheckID("explorationlocation",e.id)&&!a)return n.ExplorationLocationCache[e.id];const i=new r.ExplorationLocation(e,t);return a||n.AddToCache("explorationlocation",i),await i.ReloadOptions(),await i.RunOptionsParse(),await i.RunRestrictions(),i}static async GetAllTables(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const a=n.D.MakeRequest({searchtype:"file",searchparam:{type:"explorationtable"}}),o=[];for(let n=0;n<a.length;n++){const i=await s.CreateExplorationTable(a[n],e,t);null!=i&&o.push(i)}return o}static async CreateNewExplorationLocation(e,t){let a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const i=o.t.getInstance();if(0==i.CheckID("explorationlocation",e)&&!a)return i.ExplorationLocationCache[e];const r=n.D.MakeRequest({searchtype:"id",searchparam:{type:"explorationlocation",id:e}});return await s.CreateExplorationLocation(r,t,a)}}},1444:function(e,t,a){"use strict";a.d(t,{FactionFactory:function(){return m}});var n=a(363),o=a(4852),i=a(6184),r=a(7880),s=a(2573),l=a(6647),c=a(7479),d=a(8314);class u extends s.u{constructor(e,t){super(e,t),this.Team=void 0,this.Description=void 0,this.Rules=[],this.Variant=void 0,this.Models=[],this.EquipmentItems=[],this.Description=(0,i.vD)(e.description,this),this.Team=e.team,e.variant_name?this.Variant=e.variant_name:this.Variant="base"}async GrabSpecialPackages(e,t,a){const n=[];for(let o=0;o<this.Rules.length;o++){const i=await this.Rules[o].GrabContextPackages(e,t,a);for(let e=0;e<i.length;e++)i[e].callpath.push("Faction"),n.push(i[e])}return n}async BuildFactionModels(e){const t=n.D.MakeRequest({searchtype:"complex",searchparam:{type:"factionmodelrelationship",request:{operator:"and",terms:[{item:"faction_id",value:e,equals:!0,strict:!0}],subparams:[]}}});t.sort((0,i.Ah)(["name","id"]));for(let a=0;a<t.length;a++)this.Models.push(await c.ModelFactory.CreateFactionModel(t[a],null))}async BuildRules(e){for(let t=0;t<e.length;t++){const a=await l.RuleFactory.CreateNewRule(e[t],this);this.Rules.push(a)}}async BuildFactionEquipment(e){const t=n.D.MakeRequest({searchtype:"complex",searchparam:{type:"factionequipmentrelationship",request:{operator:"and",terms:[{item:"faction_id",value:e,equals:!0,strict:!0}],subparams:[]}}});t.sort((0,i.Ah)(["name","id"]));for(let a=0;a<t.length;a++)this.EquipmentItems.push(await r.EquipmentFactory.CreateFactionEquipment(t[a],this))}GetLoreHTML(){return(0,d.Ee)(this,this.Description)}}var h=a(5187);class m{static async CreateFactionCollection(e,t){const a=o.t.getInstance();if(0==a.CheckID("factioncollection",e.id))return a.FactionCollectionCache[e.id];const n=new h.X(e,t);return a.AddToCache("factioncollection",n),await n.ConstructFactions(),n}static async CreateNewFactionCollection(e,t){const a=o.t.getInstance();if(0==a.CheckID("factioncollection",e))return a.FactionCollectionCache[e];const i=n.D.MakeRequest({searchtype:"id",searchparam:{type:"faction",id:e}});return await m.CreateFactionCollection(i,t)}static async CreateFaction(e,t){const a=o.t.getInstance();if(0==a.CheckID("faction",e.id))return null==a.FactionCache[e.id].MyContext&&(a.FactionCache[e.id].MyContext=t),a.FactionCache[e.id];const n=new u(e,t);return a.AddToCache("faction",n),await n.BuildFactionModels(e.id),await n.BuildFactionEquipment(e.id),await n.BuildRules(e.rules),await n.ReloadOptions(),n}static async CreateNewFaction(e,t){const a=o.t.getInstance();if(0==a.CheckID("faction",e))return null==a.FactionCache[e].MyContext&&(a.FactionCache[e].MyContext=t),a.FactionCache[e];const i=n.D.MakeRequest({searchtype:"id",searchparam:{type:"faction",id:e}});if(void 0==i.id)return await m.CreateNewVariantFaction(e,t);return await m.CreateFaction(i,t)}static async CreateVariantFaction(e,t,a){const n=o.t.getInstance();if(0==n.CheckID("faction",t.id))return n.FactionCache[t.id];const i=h.X.MergeFactions(e,t),r=new u(i,a);return n.AddToCache("faction",r),r.ContextKeys.VariantFactionBase={faction_base_id:e.id},await r.BuildFactionModels(i.id),await r.BuildFactionEquipment(i.id),await r.BuildRules(i.rules),await r.ReloadOptions(),r}static async CreateNewVariantFaction(e,t){const a=o.t.getInstance();if(0==a.CheckID("faction",e))return a.FactionCache[e];const i=n.D.MakeRequest({searchtype:"id",searchparam:{type:"factionvariant",id:e}}),r=n.D.MakeRequest({searchtype:"id",searchparam:{type:"faction",id:i.base_id}});return await m.CreateVariantFaction(r,i,t)}}},207:function(e,t,a){"use strict";a.r(t),a.d(t,{GloriousDeedFactory:function(){return l}});var n=a(363),o=a(4852),i=a(6184),r=a(5961);class s extends r.x{constructor(e,t){super(e,t),this.Description=void 0,this.GeneratedCode=void 0,this.Description=(0,i.vD)(e.description,this),this.GeneratedCode=e.id_num_code}}class l{static CreateGloriousDeed(e,t){const a=o.t.getInstance();if(0==a.CheckID("gloriousdeed",e.id))return a.GloriousDeedCache[e.id];const n=new s(e,t);return a.AddToCache("gloriousdeed",n),n}static CreateNewGloriousDeed(e,t){const a=o.t.getInstance();if(0==a.CheckID("gloriousdeed",e))return a.GloriousDeedCache[e];const i=n.D.MakeRequest({searchtype:"id",searchparam:{type:"gloriousdeed",id:e}});return l.CreateGloriousDeed(i,t)}}},7796:function(e,t,a){"use strict";a.d(t,{GlossaryRuleFactory:function(){return l}});var n=a(363),o=a(5867),i=a(6184);class r extends o.p{constructor(e){super(e),this.Description=void 0,this.Description=(0,i.vD)(e.description,this)}destructor(){let e=0;for(e=0;e<this.Description.length;e++)delete this.Description[e]}}var s=a(4852);class l{static CreateGlossaryRule(e){const t=s.t.getInstance();if(0==t.CheckID("glossary",e.id))return t.GlossaryCache[e.id];const a=new r(e);return t.AddToCache("glossary",a),a}static CreateNewGlossaryRule(e){const t=s.t.getInstance();if(0==t.CheckID("glossary",e))return t.GlossaryCache[e];try{const t=n.D.MakeRequest({searchtype:"id",searchparam:{type:"glossary",id:e}});return l.CreateGlossaryRule(t)}catch(a){return null}}}},7120:function(e,t,a){"use strict";a.r(t),a.d(t,{InjuryFactory:function(){return r}});var n=a(363),o=a(4852),i=a(6422);class r{static async CreateInjury(e,t){let a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const n=o.t.getInstance();if(0==n.CheckID("injury",e.id)&&!a)return n.InjuryCache[e.id];const r=new i.C(e,t);return n.AddToCache("injury",r),await r.ReloadOptions(),r}static async GetAllInjury(){const e=n.D.MakeRequest({searchtype:"file",searchparam:{type:"injury"}}),t=[];for(let a=0;a<e.length;a++){const n=await r.CreateInjury(e[a],null);null!=n&&t.push(n)}return t}static async CreateNewInjury(e,t){let a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const i=o.t.getInstance();if(0==i.CheckID("injury",e)&&!a)return i.InjuryCache[e];const s=n.D.MakeRequest({searchtype:"id",searchparam:{type:"injury",id:e}});return await r.CreateInjury(s,t,a)}}},9353:function(e,t,a){"use strict";a.r(t),a.d(t,{KeywordFactory:function(){return l}});var n=a(363),o=a(4852),i=a(6184),r=a(5961);class s extends r.x{constructor(e,t){super(e,t),this.Description=void 0,this.Description=(0,i.vD)(e.description,this)}destructor(){let e=0;for(e=0;e<this.Description.length;e++)delete this.Description[e]}}class l{static CreateKeyword(e,t){let a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const n=o.t.getInstance();if(0==n.CheckID("keyword",e.id)&&!a)return n.KeywordCache[e.id];const i=new s(e,t);return n.AddToCache("keyword",i),i}static CreateNewKeyword(e,t){let a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const i=o.t.getInstance();if(0==i.CheckID("keyword",e)&&!a)return i.KeywordCache[e];const r=n.D.MakeRequest({searchtype:"id",searchparam:{type:"keyword",id:e}});return l.CreateKeyword(r,t)}}},7479:function(e,t,a){"use strict";a.r(t),a.d(t,{ModelFactory:function(){return _}});var n=a(363),o=a(4852),i=a(5035),r=a(9353),s=a(6184),l=a(5961),c=a(3600),d=a(7401),u=a(7880),h=a(6264);class m extends l.x{constructor(e,t){super(e,t),this.Description=void 0,this.Lore=void 0,this.Team=void 0,this.Stats=void 0,this.KeyWord=[],this.Abilities=[],this.Variant=void 0,this.BaseModel=null,this.UpgradeList=[],this.EquipmentList=[],this.RestrictedEquipment=null,this.LimitedEquipment=null,this.StatChoices=null,this.Models=[],this.Description=(0,s.vD)(e.description,this),this.Lore=(0,s.vD)(e.lore,this),this.Team=e.team,this.Stats=e.stats,e.variant_name?this.Variant=e.variant_name:this.Variant="base"}async BuildFactionModels(e){const t=n.D.MakeRequest({searchtype:"complex",searchparam:{type:"factionmodelrelationship",request:{operator:"and",terms:[{item:"model_id",value:e,equals:!0,strict:!0}],subparams:[]}}});t.sort((0,s.Ah)(["name","id"]));for(let a=0;a<t.length;a++)this.Models.push(await _.CreateFactionModel(t[a],null))}async RunStatOptions(){const e=new h.J;await e.runEvent("getModelStatOptions",this,[],[],null).then((e=>{this.StatChoices=e}))}async RunEquipmentRestriction(){const e=new h.J;await e.runEvent("getEquipmentRestriction",this,[],[],null).then((e=>{this.RestrictedEquipment=e}))}async RunEquipmentLimit(){const e=new h.J;await e.runEvent("getEquipmentLimit",this,[],[],null).then((e=>{this.LimitedEquipment=e}))}async GetPresentableStatistics(){const e=await this.GetStatsInfluencedByEquipmentProvided();if(null==this.StatChoices){const t=new h.J,a=await t.runEvent("getModelStatOptions",this,[],[],null);return(0,c.n8)(e,a)}return(0,c.n8)(e,this.StatChoices)}async GetStatsInfluencedByEquipmentProvided(){let e=(0,c.A6)(this.Stats,{});const t=new h.J;for(let a=0;a<this.EquipmentList.length;a++)for(let n=0;n<this.EquipmentList[a].EquipmentItems.length;n++){const o=this.EquipmentList[a].EquipmentItems[n];e=await t.runEvent("updateModelStats",o,[],e,null)}return e}BuildKeywords(e){for(let t=0;t<e.length;t++){const a=r.KeywordFactory.CreateNewKeyword(e[t],this);this.KeyWord.push(a)}}async BuildAbilities(e){for(let t=0;t<e.length;t++){const a=await i.AbilityFactory.CreateNewAbility(e[t],this);this.Abilities.push(a)}}async BuildModelUpgrades(e){const t=n.D.MakeRequest({searchtype:"complex",searchparam:{type:"modelupgraderelationship",request:{operator:"and",terms:[{item:"model_id_set",value:e,equals:!0,strict:!0}],subparams:[]}}});t.sort((0,s.Ah)(["upgrade_id"]));for(let a=0;a<t.length;a++)this.UpgradeList.push(await d.UpgradeFactory.CreateModelUpgrade(t[a],this))}async BuildModelEquipment(e){const t=n.D.MakeRequest({searchtype:"complex",searchparam:{type:"modelequipmentrelationship",request:{operator:"and",terms:[{item:"model_id",value:e,equals:!0,strict:!0}],subparams:[]}}});t.sort((0,s.Ah)(["name","id"]));for(let a=0;a<t.length;a++)this.EquipmentList.push(await u.EquipmentFactory.CreateModelEquipment(t[a],this))}GetSplitUpgrades(){const e={},t=this.UpgradeList;for(let a=0;a<t.length;a++){const n=t[a].GetSpecialCategory();e[n]?e[n].push(t[a]):e[n]=[t[a]]}return e}getName(){return this.Name&&""!==this.Name.trim()?this.Name:"Unnamed Model"}getUniqueEquipment(){const e=[],t=[];for(let a=0;a<this.EquipmentList.length;a++)t.includes(this.EquipmentList[a].ID)||(t.push(this.EquipmentList[a].ID),e.push(this.EquipmentList[a]));return e}hasAbilities(){return this.Abilities.length>0}hasDescription(){return this.Description.length>0}hasKeywords(){return this.KeyWord.length>0}getKeywords(){return this.KeyWord}getKeywordIDs(){const e=[];for(let t=0;t<this.KeyWord.length;t++)e.push(this.KeyWord[t].ID);return e}hasUpgrades(){return this.UpgradeList.length>0}getUprgades(){return this.UpgradeList}hasLore(){return!!this.Lore}GetSlug(){return this.ID}async getBaseSizeString(){const e=await this.GetPresentableStatistics(),t=[];if(void 0!=e.base)for(let n=0;n<(null===(a=e.base)||void 0===a?void 0:a.length);n++){var a;const o=[];for(let t=0;t<e.base[n].length;t++)o.push(e.base[n][t].toString());t.push(o.join("x")+"mm")}return t.join(" / ")}GetBaseVariantName(){return null==this.BaseModel?this.GetTrueName():this.BaseModel.GetTrueName()}isVariant(){return"base"!=this.Variant}}var p=a(2995),f=a(2573),g=a(1444);class y extends f.u{IsMercenary(){var e;return 1==this.Mercenary||null!==(e=this.Model.Stats.mercenary)&&void 0!==e&&e}constructor(e,t){super(e,t),this.Model=void 0,this.Captain=void 0,this.Mercenary=void 0,this.Cost=void 0,this.CostType=void 0,this.Restricted_Models=void 0,this.Minimum=void 0,this.Maximum=void 0,this.Factions=[],this.Captain=e.captain,this.Mercenary=e.mercenary,this.Cost=e.cost,this.CostType=e.cost_type,this.Restricted_Models=e.restricted_models,this.Minimum=e.warband_minimum,this.Maximum=e.warband_maximum}async BuildModel(e){this.Model=await _.CreateNewModel(e,null)}GetPresentationName(){return void 0!=this.Model?this.Model.GetTrueName():"name_unidentified"}GetTrueName(){return this.Model.Name?this.Model.Name+(1==this.Captain?" (Leader)":""):""}async GetFactions(e){for(let t=0;t<e.length;t++)this.Factions.push(await g.FactionFactory.CreateNewFaction(e[t],null))}async BuildOptionModel(){for(let e=0;e<this.MyOptions.length;e++)for(let t=0;t<this.MyOptions[e].Selections.length;t++)this.MyOptions[e].Selections[t].value=await _.CreateNewModel(this.MyOptions[e].Selections[t].value,this)}async ReloadOptions(){for(let e=0;e<this.MyOptions.length;e++)this.MyOptions[e].Selections=await this.MyOptions[e].FindChoices();this.BuildOptionModel()}getName(){return this.Model.getName()}getCostString(){return!this.Cost||this.Cost<=0?"Unnamed Model":this.Cost+" "+(0,s.Ie)(this.CostType)}getCostType(){return this.CostType}getAvailabilityString(){return-1==this.Maximum?"Unlimited":this.Maximum==this.Minimum?this.Minimum.toString():this.Minimum.toString()+"-"+this.Maximum.toString()}hasAbilities(){return this.Model.hasAbilities()}hasDescription(){return this.Model.hasDescription()}hasKeywords(){return this.Model.hasKeywords()}getKeywords(){return this.Model.getKeywords()}hasUpgrades(){return this.Model.hasUpgrades()}async getUpgrades(e){return await this.getContextuallyAvailableUpgrades(e)}async getContextuallyAvailableUpgrades(e){const t=[],a=[];for(let n=0;n<this.Model.UpgradeList.length;n++)a.push(this.Model.UpgradeList[n]);if(1!=this.Mercenary){const n=new h.J,o=await n.runEvent("getContextuallyAddedUpgrades",e,[],a,this.Model);for(let e=0;e<o.length;e++)t.push(o[e])}else for(let n=0;n<a.length;n++)t.push(a[n]);return t}async GetSplitUpgrades(e){const t={},a=await this.getContextuallyAvailableUpgrades(e);for(let n=0;n<a.length;n++){const e=a[n].GetSpecialCategory();t[e]?t[e].push(a[n]):t[e]=[a[n]]}return t}async getContextuallyAvailableAbilities(e){const t=[],a=[];for(let n=0;n<this.Model.Abilities.length;n++)a.push(this.Model.Abilities[n]);if(1!=this.Mercenary){const n=new h.J,o=await n.runEvent("getContextuallyAddedAbilities",e,[],a,this.Model);for(let e=0;e<o.length;e++)t.push(o[e])}else for(let n=0;n<a.length;n++)t.push(a[n]);return t}hasLore(){return this.Model.hasLore()}async getBaseSizeString(){return await this.Model.getBaseSizeString()}GetSlug(){return this.Model.GetSlug()}}class _{static async CreateModelCollection(e,t){const a=o.t.getInstance();if(0==a.CheckID("modelcollection",e.id))return a.ModelCollectionCache[e.id];const n=new p.u(e,t);return a.AddToCache("modelcollection",n),await n.ConstructModels(),n}static async CreateNewModelCollection(e,t){const a=o.t.getInstance();if(0==a.CheckID("modelcollection",e))return a.ModelCollectionCache[e];const i=n.D.MakeRequest({searchtype:"id",searchparam:{type:"model",id:e}});return await _.CreateModelCollection(i,t)}static async CreateModel(e,t){const a=o.t.getInstance();if(0==a.CheckID("model",e.id))return null==a.ModelCache[e.id].MyContext&&(a.ModelCache[e.id].MyContext=t),a.ModelCache[e.id];const n=new m(e,t);return a.AddToCache("model",n),await n.RunEquipmentRestriction(),await n.RunEquipmentLimit(),await n.RunStatOptions(),await n.BuildKeywords(e.keywords),await n.BuildAbilities(e.abilities),await n.BuildModelUpgrades(e.id),await n.BuildModelEquipment(e.id),await n.BuildFactionModels(e.id),n}static async GetAllModels(){let e=[];e=arguments.length>0&&void 0!==arguments[0]&&arguments[0]?n.D.MakeRequest({searchtype:"file",searchparam:{type:"model"}}):n.D.MakeRequest({searchtype:"complex",searchparam:{type:"model",request:{operator:"and",terms:[{item:"tags",value:"dontshow",equals:!1,strict:!0,istag:!0,tagvalue:!0}],subparams:[]}}}),e.sort((0,s.Ah)(["name","id"]));const t=[];for(let n=0;n<e.length;n++){const a=await _.CreateModelCollection(e[n],null);null!=a&&t.push(a)}const a=[];for(let n=0;n<t.length;n++)for(let e=0;e<t[n].SubModelsList.length;e++)a.push(t[n].SubModelsList[e].model);return a}static async CreateNewModel(e,t){const a=o.t.getInstance();if(0==a.CheckID("model",e))return null==a.ModelCache[e].MyContext&&(a.ModelCache[e].MyContext=t),a.ModelCache[e];const i=n.D.MakeRequest({searchtype:"id",searchparam:{type:"model",id:e}});if(null==i||void 0==i||void 0==i.id)return await _.CreateNewVariantModel(e,t);return await _.CreateModel(i,t)}static async CreateVariantModel(e,t,a){const n=o.t.getInstance();if(0==n.CheckID("model",t.id))return n.ModelCache[t.id];const i=p.u.MergeModels(e,t),r=new m(i,a);"Base"!=t.variant_name&&(r.Tags.held_variant_name=t.variant_name),n.AddToCache("model",r);const s=await _.CreateModel(e,a);return r.BaseModel=s,await r.BuildKeywords(i.keywords),await r.BuildAbilities(i.abilities),await r.BuildModelUpgrades(i.id),await r.BuildModelEquipment(i.id),await r.BuildFactionModels(i.id),r}static async CreateNewVariantModel(e,t){const a=o.t.getInstance();if(0==a.CheckID("model",e))return a.ModelCache[e];const i=n.D.MakeRequest({searchtype:"id",searchparam:{type:"modelvariant",id:e}}),r=n.D.MakeRequest({searchtype:"id",searchparam:{type:"model",id:i.base_id}});return await _.CreateVariantModel(r,i,t)}static async GetAllFactionModel(e,t){const a=n.D.MakeRequest({searchtype:"file",searchparam:{type:"factionmodelrelationship"}});a.sort((0,s.Ah)(["name","id"]));const o=[];for(let n=0;n<a.length;n++){if(!(0,s.Pn)(a[n].faction_id,e,t))continue;const i=await _.CreateFactionModel(a[n],null);null!=i&&o.push(i)}return o}static async CreateFactionModel(e,t){const a=o.t.getInstance();if(0==a.CheckID("factionmodel",e.id))return a.FactionModelCache[e.id];const n=new y(e,t);return a.AddToCache("factionmodel",n),await n.BuildModel(e.model_id),await n.BuildOptionModel(),await n.GetFactions(e.faction_id),n}static async CreateNewFactionModel(e,t){const a=o.t.getInstance();if(0==a.CheckID("factionmodel",e))return a.FactionModelCache[e];const i=n.D.MakeRequest({searchtype:"id",searchparam:{type:"factionmodelrelationship",id:e}});return await _.CreateFactionModel(i,t)}}},6647:function(e,t,a){"use strict";a.d(t,{RuleFactory:function(){return r}});var n=a(363),o=a(4852),i=a(2833);class r{static async CreateRule(e,t){const a=o.t.getInstance();if(0==a.CheckID("rule",e.id))return a.RuleCache[e.id];const n=new i.Rule(e,t);return a.AddToCache("rule",n),await n.ReloadOptions(),await n.RunUpgradeOptions(),await n.RunOptionsParse(),n}static async CreateNewRule(e,t){const a=o.t.getInstance();if(0==a.CheckID("rule",e))return a.RuleCache[e];const i=n.D.MakeRequest({searchtype:"id",searchparam:{type:"factionrule",id:e}});return await r.CreateRule(i,t)}static async CreateNewScenarioRule(e,t){const a=o.t.getInstance();if(0==a.CheckID("rule",e))return a.RuleCache[e];const i=n.D.MakeRequest({searchtype:"id",searchparam:{type:"scenariorule",id:e}});return await r.CreateRule(i,t)}}},6435:function(e,t,a){"use strict";a.d(t,{ScenarioFactory:function(){return s}});var n=a(363),o=a(4852),i=a(9001),r=a(6184);class s{static async CreateScenario(e,t){const a=o.t.getInstance();if(0==a.CheckID("scenario",e.id))return a.ScenarioCache[e.id];const n=new i.N(e,t);return a.AddToCache("scenario",n),await n.BuildRules(e.special_rules),n}static async CreateNewScenario(e,t){const a=o.t.getInstance();if(0==a.CheckID("scenario",e))return a.ScenarioCache[e];const i=n.D.MakeRequest({searchtype:"id",searchparam:{type:"scenario",id:e}});return await s.CreateScenario(i,t)}static async GetAllScenarios(){const e=n.D.MakeRequest({searchtype:"file",searchparam:{type:"scenario"}});e.sort((0,r.Ah)(["name","id"]));const t=[];for(let a=0;a<e.length;a++){const n=await s.CreateScenario(e[a],null);null!=n&&t.push(n)}return t}}},6498:function(e,t,a){"use strict";a.r(t),a.d(t,{SkillFactory:function(){return l}});var n=a(363),o=a(4852),i=a(7308),r=a(5593),s=a(709);class l{static async CreateSkill(e,t){let a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const n=o.t.getInstance();if(0==n.CheckID("skill",e.id)&&!a)return n.SkillCache[e.id];const r=new i.Skill(e,t);return a||n.AddToCache("skill",r),await r.ReloadOptions(),await r.RunOptionsParse(),r}static async CreateNewSkill(e,t){let a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const i=o.t.getInstance();if(0==i.CheckID("skill",e)&&!a)return i.SkillCache[e];const r=n.D.MakeRequest({searchtype:"id",searchparam:{type:"skill",id:e}});return await l.CreateSkill(r,t,a)}static async GetBaseSkills(){const e=n.D.MakeRequest({searchtype:"file",searchparam:{type:"skillgroup"}}),t=[];for(let a=0;a<e.length;a++){const n=await l.CreateSkillGroup(e[a],null);null!=n&&t.push(n)}return t}static async CreateSkillGroup(e,t){const a=o.t.getInstance();if(0==a.CheckID("skillgroup",e.id))return a.SkillGroupCache[e.id];const n=new r.Z(e,t);return a.AddToCache("skillgroup",n),await n.BuildGroupSkills(e.id),n}static async CreateNewSkillGroup(e,t){const a=o.t.getInstance();if(0==a.CheckID("skillgroup",e))return a.SkillGroupCache[e];const i=n.D.MakeRequest({searchtype:"id",searchparam:{type:"skillgroup",id:e}});return await l.CreateSkillGroup(i,t)}static async CreatePatron(e,t){const a=o.t.getInstance();if(0==a.CheckID("patron",e.id))return a.PatronCache[e.id];const n=new s.V(e,t);return a.AddToCache("patron",n),await n.BuildPatronSkills(e.id),await n.BuildFactionList(e.id),n}static async CreateNewPatron(e,t){const a=o.t.getInstance();if(0==a.CheckID("patron",e))return a.PatronCache[e];const i=n.D.MakeRequest({searchtype:"id",searchparam:{type:"patron",id:e}});return await l.CreatePatron(i,t)}}},7401:function(e,t,a){"use strict";a.r(t),a.d(t,{UpgradeFactory:function(){return d}});var n=a(363),o=a(4852),i=a(9909),r=a(2573),s=a(6184),l=a(6264);class c extends r.u{constructor(e,t){super(e,t),this.UpgradeObject=void 0,this.Cost=void 0,this.CostType=void 0,this.WarbandLimit=void 0,this.Retrictions=void 0,this.RequiredUpgrades=void 0,this.Cost=e.cost,this.CostType=e.cost_type,this.WarbandLimit=e.warband_limit,this.Retrictions=e.restricted_upgrades,this.RequiredUpgrades=e.required_upgrades}async BuildUpgrade(e){this.UpgradeObject=await d.CreateNewUpgrade(e,null)}async GetRestrictions(){const e=[];for(let a=0;a<this.RequiredUpgrades.length;a++){const t=await d.CreateNewUpgrade(this.RequiredUpgrades[a],null);e.push("Requires "+t.Name)}const t=new l.J;return(await t.runEvent("getUpgradeRestrictionsPresentation",this,[],e,null)).join(",")}GetSpecialCategory(){return this.UpgradeObject.Tags.special_category?this.UpgradeObject.Tags.special_category.toString():"upgrades"}GetCostString(){return this.Cost>0?this.Cost+" "+(0,s.Ie)(this.CostType):""}GetLimitString(){return 0!=this.WarbandLimit?"Limit: "+this.WarbandLimit.toString():""}}class d{static async CreateUpgrade(e,t){let a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const n=o.t.getInstance();if(0==n.CheckID("upgrade",e.id)&&!a)return n.UpgradeCache[e.id];const r=new i.Upgrade(e,t);return a||n.AddToCache("upgrade",r),await r.ReloadOptions(),r}static async CreateNewUpgrade(e,t){let a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const i=o.t.getInstance();if(0==i.CheckID("upgrade",e)&&!a)return i.UpgradeCache[e];const r=n.D.MakeRequest({searchtype:"id",searchparam:{type:"upgrade",id:e}});return await d.CreateUpgrade(r,t,a)}static async CreateModelUpgrade(e,t){const a=o.t.getInstance();if(0==a.CheckID("modelupgrade",e.id))return a.ModelUpgradeCache[e.id];const n=await new c(e,t);return a.AddToCache("modelupgrade",n),await n.BuildUpgrade(e.upgrade_id),n}static async CreateNewModelUpgrade(e,t){const a=o.t.getInstance();if(0==a.CheckID("modelupgrade",e))return a.ModelUpgradeCache[e];const i=n.D.MakeRequest({searchtype:"id",searchparam:{type:"modelupgraderelationship",id:e}});return await d.CreateModelUpgrade(i,t)}static async GetAllModelUpgrade(){const e=n.D.MakeRequest({searchtype:"file",searchparam:{type:"modelupgraderelationship"}});e.sort((0,s.Ah)(["name","id"]));const t=[];for(let a=0;a<e.length;a++){const n=await d.CreateModelUpgrade(e[a],null);null!=n&&t.push(n)}return t}}},9914:function(e,t,a){"use strict";a.d(t,{e:function(){return l}});var n=a(6178),o=a(4475),i=a(3016),r=a(108);const s=e=>new Promise((t=>setTimeout(t,e)));class l{static async BuildUserPublic(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const a=o.y.getInstance();if(a.publicObjectCache[e.id]&&0==t)return a.publicObjectCache[e.id];const i=new n.A(e);return a.publicObjectCache[e.id]=i,await i.BuildWarbands(e),i}static async CreatePublicUserByID(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const a=o.y.getInstance();let n;if(a.CheckPublicCache(e)&&0==t&&(n=a.publicDataCache[e]),a.CheckPublicCallCache(e)&&0==t){const t=1e3;let o=0;for(;!a.CheckPublicCache(e)&&o<t;)await s(100),o+=1;n=a.publicDataCache[e]}if(!a.CheckPublicCache(e)||1==t){a.AddPublicCallCache(e);const t=await fetch(`${r.a.URL}/wp-json/synod/v1/user-public/${e}`);if(t){const o=await t.json();n=o,a.AddPublicCache(e,o)}}if(void 0!=n)try{return await l.BuildUserPublic(n,t)}catch(i){console.log(i)}return null}static async GetPublicUserBasicByID(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const a=o.y.getInstance();let n;if(a.CheckPublicCache(e)&&0==t&&(n=a.publicDataCache[e]),a.CheckPublicCallCache(e)&&0==t){const t=1e3;let o=0;for(;!a.CheckPublicCache(e)&&o<t;)await s(100),o+=1;n=a.publicDataCache[e]}if(!a.CheckPublicCache(e)||1==t){a.AddPublicCallCache(e);const t=await fetch(`${r.a.URL}/wp-json/synod/v1/user-public/${e}`);if(t){const o=await t.json();n=o,a.AddPublicCache(e,o)}}if(void 0!=n)try{return n}catch(i){console.log(i)}return null}static async BuildUserPrivate(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const a=o.y.getInstance();if(a.userObjectCache[e.id]&&0==t){const t=1e3;let n=0;for(;a.CheckCallCache(e.id)&&n<t;)await s(100),n+=1;return a.userObjectCache[e.id]}const n=new i.X(e);return a.userObjectCache[e.id]=n,await n.GenerateWarbands(e),delete a.callUserDataCache[e.id],n}static async CreatePrivateUserByID(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const a=o.y.getInstance();let n;if(a.CheckCache(e)&&0==t&&(n=a.userDataCache[e]),a.CheckCallCache(e)&&0==t){const t=1e3;let o=0;for(;!a.CheckCache(e)&&o<t;)await s(100),o+=1;n=a.userDataCache[e]}if(!a.CheckCache(e)||1==t){a.AddCallCache(e);const t=localStorage.getItem("jwtToken"),o=await fetch(`${r.a.URL}/wp-json/synod/v1/user-full/${e}`,{headers:{Authorization:`Bearer ${t}`}});if(o&&200==o.status){const t=await o.json();n=t,a.AddCache(e,t)}}if(void 0!=n){return await l.BuildUserPrivate(n,t)}return null}}},3834:function(e,t,a){"use strict";a.d(t,{x:function(){return u}});var n=a(4475),o=a(1832),i=a(108),r=a(520),s=a(8314);class l{constructor(e){var t,a;this._id=0,this._title="",this._html="",this._dateTs=0,this._author=void 0,this._id=e.announcement_id,this._title=e.announcement_title,this._html=null!==(t=e.announcement_content)&&void 0!==t?t:"",this._dateTs=null!==(a=e.announcement_date)&&void 0!==a?a:0}async BuildUser(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];const a=await u.CreateCampaignUser(e.announcement_author,t);this._author=a}async RehydrateUser(){await this._author.RehydrateUser()}get Id(){return this._id}get Title(){return this._title}get Html(){return this._html}get MarkupHtml(){return(0,s.lh)(this._html)}get Date(){return new Date(1e3*this._dateTs)}get DateStr(){return new Intl.DateTimeFormat("de-DE",{day:"2-digit",month:"2-digit",year:"numeric"}).format(this.Date)}get Author(){return this._author}}var c=a(9914);class d{constructor(e,t,a,n,o,i,r,s){this._id=void 0,this._nickname=void 0,this._isPremium=void 0,this._avatarUrls=void 0,this._avatarSourceTitle=void 0,this._avatarSourceUrl=void 0,this._avatarId=0,this._userObject=null,this._userBasic=null,this.SelfData=void 0,this.SelfData=e,this._id=null!==t&&void 0!==t?t:0,this._nickname=a,this._isPremium=n,this._avatarUrls=o,this._avatarSourceTitle=i,this._avatarSourceUrl=r,this._avatarId=null!==s&&void 0!==s?s:0}async BuildSelfUser(){if(!(arguments.length>0&&void 0!==arguments[0])||arguments[0]){const e=await c.e.CreatePublicUserByID(this.Id);this._userObject=e}else{const e=await c.e.GetPublicUserBasicByID(this.Id);this._userBasic=e}}async RehydrateUser(){if(null==this._userObject&&null!=this._userBasic){const e=await c.e.BuildUserPublic(this._userBasic);this._userObject=e}}get Id(){return this._id}get Nickname(){return this._nickname}get Name(){return this._nickname}get IsPremium(){return this._isPremium}get AvatarUrls(){return this._avatarUrls}get AvatarSourceTitle(){return this._avatarSourceTitle}get AvatarSourceUrl(){return this._avatarSourceUrl}get AvatarId(){return this._avatarId}get UserPublic(){return this._userObject}get UserPublicBasic(){return this._userBasic}get ProfileUrl(){return window.location.origin+"/profile/"+this.Id}GetSupporterStatus(){return this.IsPremium?"Supporter":"Free Member"}}class u{static async CreateCampaign(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];const a=new o.H(e);return await a.BuildWarbands(e,t),await a.BuildPlayers(e,t),await a.BuildAnnouncements(e,t),await a.BuildGames(e,t),a.isHydrated=!!t,a}static async CreateCampaignUser(e){var t,a,o,i;let r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];const s=e.id?e.id:e.user_id?e.user_id:-1,l=n.y.getInstance();if(l.CheckCampaignUserCache(s))return l.campaignUserCache[s];const c=new d(e,s,e.nickname,!!e.is_premium,null===(t=e.profile_picture)||void 0===t?void 0:t.urls,null===(a=e.profile_picture)||void 0===a?void 0:a.source_title,null===(o=e.profile_picture)||void 0===o?void 0:o.source_url,null===(i=e.profile_picture)||void 0===i?void 0:i.image_id);return l.AddCampaignUserCache(s,c),await c.BuildSelfUser(r),c}static async CreateCampaignAnnouncement(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(null==e)return null;const a=n.y.getInstance();if(a.CheckCampaignAnnouncementCache(e.announcement_id))return a.campaignAnnouncementCache[e.announcement_id];const o=new l(e);return a.AddCampaignAnnouncementCache(e.announcement_id,o),await o.BuildUser(e,t),o}static async CreateCampaignWarband(e,t){let a=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];const o=n.y.getInstance();if(o.CheckCampaignWarbandCache(e.warband_id))return o.campaignWarbandCache[e.warband_id];const i=new r.G(e,t);return o.AddCampaignWarbandCache(e.warband_id,i),await i.BuildUser(e,a),await i.BuildWarband(e,a),i}static async GetCampaignPublicByID(e,t){let a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const o=n.y.getInstance();let r;if(null!==t&&void 0!==t&&t.force||!o.CheckCampaignCache(e)||(r=o.campaignDataCache[e]),!r&&o.CheckCampaignCallCache(e)){const t=1e3;let a=0;for(;!o.CheckCampaignCache(e)&&a<t;)await new Promise((e=>setTimeout(e,100))),a++;r=o.campaignDataCache[e]}if(!r){o.AddCampaignCallCache(e);const a=await fetch(`${i.a.URL}/wp-json/synod/v1/campaigns/${e}`,{method:"GET",headers:{Accept:"application/json"}});if(400===a.status)return null;const n=await a.json();null!==t&&void 0!==t&&t.force&&this.clearCampaignRelatedCache(n),o.AddCampaignCache(e,n),r=n}return r?u.CreateCampaign(r,a):null}static async ResetCampaign(e,t,a){const o=n.y.getInstance();delete o.campaignDataCache[e.GetId()],delete o.campaignHydratedObjectCache[e.GetId()],delete o.callCampaignCache[e.GetId()],delete o.campaignObjectCache[e.GetId()];const i="boolean"===typeof t?t:!!e.isHydrated,r=void 0!=a&&null!=a?a:await u.GetCampaignSummaryPublicByID(e.GetId()),s=e.GetSelfData();return null==r?null:(JSON.stringify(s.campaign_warbands)!=JSON.stringify(r.campaign_warbands)&&await u.ResetCampaignWarbands(e,r,i),JSON.stringify(s.campaign_players)==JSON.stringify(r.campaign_players)&&JSON.stringify(s.campaign_players_invited)==JSON.stringify(r.campaign_players_invited)&&JSON.stringify(s.campaign_players_invitable)==JSON.stringify(r.campaign_players_invitable)||await u.ResetCampaignPlayers(e,r,i),JSON.stringify(s.campaign_announcements)==JSON.stringify(r.campaign_announcements)&&JSON.stringify(s.campaign_latest_announcement)==JSON.stringify(r.campaign_latest_announcement)||await u.ResetCampaignAnnouncements(e,r,i),JSON.stringify(s.campaign_games)!=JSON.stringify(r.campaign_games)&&e.BuildGames(r,i),e.ResetBasics(r),e)}static async ResetCampaignWarbands(e,t,a){const o=n.y.getInstance();for(let n=0;n<t.campaign_warbands.length;n++)delete o.campaignWarbandCache[t.campaign_warbands[n].warband_id];await e.BuildWarbands(t,a)}static async ResetCampaignAnnouncements(e,t,a){const o=n.y.getInstance();for(let n=0;n<t.campaign_announcements.length;n++)delete o.campaignAnnouncementCache[t.campaign_announcements[n].announcement_id];t.campaign_latest_announcement&&delete o.campaignAnnouncementCache[t.campaign_latest_announcement.announcement_id],await e.BuildAnnouncements(t,a)}static async ResetCampaignPlayers(e,t,a){const o=n.y.getInstance();for(let n=0;n<t.campaign_players.length;n++){const e=t.campaign_players[n].id,a=t.campaign_players[n].user_id,i=e||(a||-1);delete o.campaignUserCache[i]}for(let n=0;n<t.campaign_players_invited.length;n++){const e=t.campaign_players_invited[n].id,a=t.campaign_players_invited[n].user_id,i=e||(a||-1);delete o.campaignUserCache[i]}for(let n=0;n<t.campaign_players_invitable.length;n++){const e=t.campaign_players_invitable[n].id,a=t.campaign_players_invitable[n].user_id,i=e||(a||-1);delete o.campaignUserCache[i]}await e.BuildPlayers(t,a)}static async Rehydratecampaign(e){const t=e.GetWarbands();for(let i=0;i<t.length;i++)await t[i].RehydrateUser(),await t[i].RehydrateWarbands();const a=e.GetRealPlayers();for(let i=0;i<a.length;i++)await a[i].RehydrateUser();const n=e.GetAnnouncements();for(let i=0;i<n.length;i++)await n[i].RehydrateUser();const o=e.GetLatestAnnouncement();null!=o&&await o.RehydrateUser(),e.isHydrated=!0}static async GetCampaignSummaryPublicByID(e,t){const a=n.y.getInstance();let o;if(null!==t&&void 0!==t&&t.force||!a.CheckCampaignCache(e)||(o=a.campaignDataCache[e]),!o&&a.CheckCampaignCallCache(e)){const t=1e3;let n=0;for(;!a.CheckCampaignCache(e)&&n<t;)await new Promise((e=>setTimeout(e,100))),n++;o=a.campaignDataCache[e]}if(!o){a.AddCampaignCallCache(e);const n=await fetch(`${i.a.URL}/wp-json/synod/v1/campaigns/${e}`,{method:"GET",headers:{Accept:"application/json"}});if(400===n.status)return null;const r=await n.json();null!==t&&void 0!==t&&t.force&&this.clearCampaignRelatedCache(r),a.AddCampaignCache(e,r),o=r}return o||null}static clearCampaignRelatedCache(e){const t=n.y.getInstance();if(e.campaign_warbands)for(const a of e.campaign_warbands)delete t.campaignWarbandCache[a.warband_id];if(e.campaign_players)for(const a of e.campaign_players){const e=a.id?a.id:a.user_id?a.user_id:-1;delete t.campaignUserCache[e]}if(e.campaign_players_invited)for(const a of e.campaign_players_invited){const e=a.id?a.id:a.user_id?a.user_id:-1;delete t.campaignUserCache[e]}if(e.campaign_players_invitable)for(const a of e.campaign_players_invitable){const e=a.id?a.id:a.user_id?a.user_id:-1;delete t.campaignUserCache[e]}if(e.campaign_announcements)for(const a of e.campaign_announcements)delete t.campaignAnnouncementCache[a.announcement_id];e.campaign_latest_announcement&&delete t.campaignAnnouncementCache[e.campaign_latest_announcement.announcement_id]}}},8933:function(e,t,a){"use strict";a.d(t,{T:function(){return r}});var n=a(4475);class o{constructor(e){this.ID=void 0,this.Date=void 0,this.PlayerIDs=void 0,this.Players=void 0,this.Warbands=void 0,this.WarbandIDs=void 0,this.CampaignID=void 0,this.CampaignName=void 0,this.GameData=void 0,this.Notes=void 0,this.Verified=void 0,this.MissingSignoffs=void 0,this.GameRatings=void 0,this.ID=e.game_report_id,this.Date=e.date,this.PlayerIDs=e.player_ids,this.Players=e.players,this.WarbandIDs=e.warband_ids,this.Warbands=e.warbands,this.CampaignID=e.campaign_id?e.campaign_id:null,this.CampaignName=e.campaign?e.campaign.name:null,this.GameData=e.data,this.Notes=e.notes,this.Verified=e.is_verified,this.MissingSignoffs=e.missing_signoffs,this.GameRatings=e.ratings?e.ratings:null}}var i=a(5968);class r{static CreateGameReportBy(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const a=n.y.getInstance();if(a.CheckGameReportObjectCache(e.game_report_id)&&!t)return a.gamereportobjectcache[e.game_report_id];return new o(e)}static async GetReportsByUser(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];const a=await i.T.fetchGameReportsByUser(e),n=[];for(let o=0;o<a.length;o++){const e=r.CreateGameReportBy(a[o],t);n.push(e)}return n}static async GetReportsByWarband(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];const a=await i.T.fetchGameReportsByWarband(e),n=[];for(let o=0;o<a.length;o++){const e=r.CreateGameReportBy(a[o],t);n.push(e)}return n}static async GetReportsPostGame(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];const a=await i.T.fetchGameReportsByWarbandForPostGame(e),n=[];for(let o=0;o<a.length;o++){const e=r.CreateGameReportBy(a[o],t);n.push(e)}return n}static async GetGameReportByID(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];const a=n.y.getInstance();let o;if(a.CheckGameReportCache(e)&&!t&&(o=a.gamereportcache[e]),!o&&a.CheckGameReportCallCache(e)){const t=1e3;let n=0;for(;!a.CheckGameReportCache(e)&&n<t;)await new Promise((e=>setTimeout(e,100))),n++;o=a.gamereportcache[e]}if(!o){a.AddGameReportCallCache(e);const t=await i.T.fetchGameReport(e);a.AddGameReportCache(e,t),o=t}return o?r.CreateGameReportBy(o,t):null}}},5968:function(e,t,a){"use strict";a.d(t,{T:function(){return o}});var n=a(108);class o{static async fetchGameReport(e){const t=await fetch(`${n.a.URL}/wp-json/synod/v1/game-report/${e}`,{headers:{Accept:"application/json"}});if(!t.ok){let e=`Request failed (${t.status})`;try{const a=await t.json();null!==a&&void 0!==a&&a.message&&(e=a.message)}catch{console.log("catch game error")}throw new Error(e)}return t.json()}static async fetchGameReportsByUser(e){const t=await fetch(`${n.a.URL}/wp-json/synod/v1/game-report/by-user/${e}`,{headers:{Accept:"application/json"}});if(!t.ok){let e=`Request failed (${t.status})`;try{const a=await t.json();null!==a&&void 0!==a&&a.message&&(e=a.message)}catch{console.log("catch games error")}throw new Error(e)}const a=await t.json();return Array.isArray(a)?a:[]}static async fetchGameReportsByWarband(e){const t=await fetch(`${n.a.URL}/wp-json/synod/v1/game-report/by-warband/${e}`,{headers:{Accept:"application/json"}});if(!t.ok){let e=`Request failed (${t.status})`;try{const a=await t.json();null!==a&&void 0!==a&&a.message&&(e=a.message)}catch{console.log("catch games error")}throw new Error(e)}const a=await t.json();return Array.isArray(a)?a:[]}static async fetchGameReportsByWarbandForPostGame(e){const t=await fetch(`${n.a.URL}/wp-json/synod/v1/game-report/by-warband-for-post-game/${e}`,{headers:{Accept:"application/json"}});if(!t.ok){let e=`Request failed (${t.status})`;try{const a=await t.json();null!==a&&void 0!==a&&a.message&&(e=a.message)}catch{console.log("catch games error")}throw new Error(e)}const a=await t.json();return Array.isArray(a)?a:[]}static async deleteGameReport(e){const t=localStorage.getItem("jwtToken");if(!t)throw new Error("Not authenticated");const a=await fetch(`${n.a.URL}/wp-json/synod/v1/game-report/${e}`,{method:"DELETE",headers:{Accept:"application/json",Authorization:`Bearer ${t}`}});if(!a.ok){let e=`Request failed (${a.status})`;try{const t=await a.json();null!==t&&void 0!==t&&t.message&&(e=t.message)}catch{console.log("catch games error")}throw new Error(e)}}static async signOffGameReport(e){const t=localStorage.getItem("jwtToken");if(!t)throw new Error("Not authenticated");const a=await fetch(`${n.a.URL}/wp-json/synod/v1/game-report/signoff/${e}`,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${t}`}});if(!a.ok){let e=`Request failed (${a.status})`;try{const t=await a.json();null!==t&&void 0!==t&&t.message&&(e=t.message)}catch{}throw new Error(e)}try{const t=await a.json();return t&&"object"===typeof t&&"game_report_id"in t?t:await o.fetchGameReport(e)}catch{return await o.fetchGameReport(e)}}static async createGameReport(e){const t=localStorage.getItem("jwtToken");if(!t)throw new Error("Not authenticated");const a=await fetch(`${n.a.URL}/wp-json/synod/v1/game-report/create/`,{method:"POST",headers:{Authorization:`Bearer ${t}`,"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(e)});if(!a.ok){let e=`Request failed (${a.status})`;try{const t=await a.json();null!==t&&void 0!==t&&t.message&&(e=t.message)}catch{console.log("catch games error")}throw new Error(e)}return await a.json()}static async updateGameReport(e){const t=localStorage.getItem("jwtToken");if(!t)throw new Error("Not authenticated");const a=await fetch(`${n.a.URL}/wp-json/synod/v1/game-report/update/`,{method:"POST",headers:{Authorization:`Bearer ${t}`,"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(e)});if(!a.ok){let e=`Request failed (${a.status})`;try{const t=await a.json();null!==t&&void 0!==t&&t.message&&(e=t.message)}catch{console.log("catch games error")}throw new Error(e)}return await a.json()}static async GetReportableWarbands(e,t,a){var o;const i=localStorage.getItem("jwtToken");if(!i)throw new Error("Not authenticated");const r={};e&&(r.campaign_id=e),t&&(r.warband_id=t);const s=await fetch(`${n.a.URL}/wp-json/synod/v1/game-report/reportable-warbands/`,{method:"POST",headers:{Authorization:`Bearer ${i}`,"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(r),signal:a.signal});if(!s.ok){let e=`Request failed (${s.status})`;try{const t=await s.json();null!==t&&void 0!==t&&t.message&&(e=t.message)}catch(c){console.log("catch")}throw new Error(e)}const l=await s.json();return Array.isArray(l)?l:null!==(o=null===l||void 0===l?void 0:l.warbands)&&void 0!==o?o:[]}}},722:function(e,t,a){"use strict";a.d(t,{Y:function(){return b}});var n=a(7969),o=a(7891),i=a(1072),r=a(2919),s=a(9100),l=a(6498),c=a(1444),d=a(6264),u=a(363);class h extends s.A{constructor(e,t){super(e,t),this.MyFaction=void 0,this.MyPatron=null,this.MyFactionRules=[]}async BuildFaction(e){const t=await c.FactionFactory.CreateNewFaction(e.object_id,this);this.MyFaction=new r.WarbandProperty(t,this,null,e),await this.MyFaction.HandleDynamicProps(t,this,null,e),await this.MyFaction.BuildConsumables(e.consumables)}GetFaction(){return void 0!=this.MyFaction?this.MyFaction.SelfDynamicProperty.OptionChoice:null}DumpCache(){this.EventCache={},this.MyFaction.EventCache={},this.MyFaction.SelfDynamicProperty.EventCache={};for(let e=0;e<this.MyFaction.SubProperties.length;e++)this.MyFaction.SubProperties[e].EventCache={};for(let e=0;e<this.MyFactionRules.length;e++)this.MyFactionRules[e].EventCache={}}async RebuildProperties(){for(let e=0;e<this.MyFactionRules.length;e++){const t=this.MyFactionRules[e];await t.RegenerateOptions()}}async GetFactionBase(){if(void 0==this.MyFaction)return null;{var e;const t=null===(e=this.GetFaction())||void 0===e?void 0:e.ContextKeys.VariantFactionBase;if(t){return await c.FactionFactory.CreateNewFaction(t.faction_base_id,null)}}}async BuildPatron(e){e&&(this.MyPatron=await l.SkillFactory.CreateNewPatron(e,this))}async BuildFactionRules(e){if(this.MyFaction){const t=this.MyFaction.SelfDynamicProperty.OptionChoice;for(let a=0;a<t.Rules.length;a++){let n=!1;for(let o=0;o<e.faction_rules.length;o++)if(e.faction_rules[o].object_id==t.Rules[a].ID){const i=new r.WarbandProperty(t.Rules[a],this,null,e.faction_rules[o]);await i.HandleDynamicProps(t.Rules[a],this,null,e.faction_rules[o]),this.MyFactionRules.push(i),n=!0;break}if(0==n){const e=new r.WarbandProperty(t.Rules[a],this,null,null);await e.HandleDynamicProps(t.Rules[a],this,null,null),this.MyFactionRules.push(e)}}}}ConvertToInterface(){let e;null!=this.MyPatron&&(e=this.MyPatron.ID);const t=[];for(let o=0;o<this.MyFactionRules.length;o++)t.push(this.MyFactionRules[o].ConvertToInterface());let a=null;a=this.MyFaction?this.MyFaction.ConvertToInterface():{object_id:"",selections:[],consumables:[]};const n={contextdata:this.ContextKeys,id:this.ID,name:void 0!=this.Name?this.Name:"",source:void 0!=this.Source?this.Source:"",tags:this.Tags,faction_property:a,faction_rules:t,patron_id:e};return this.SelfData=n,n}async GrabSubPackages(e,t,a){const n=[];for(let o=0;o<this.MyFactionRules.length;o++){const i=await this.MyFactionRules[o].GrabContextPackages(e,t,a);for(let e=0;e<i.length;e++)i[e].callpath.push("WarbandFaction"),n.push(i[e])}if(this.MyFaction){const o=await this.MyFaction.GrabContextPackages(e,t,a);for(let e=0;e<o.length;e++)o[e].callpath.includes("StaticContextObject")&&!o[e].callpath.includes("SelectedChoiceOption")||(o[e].callpath.push("WarbandFaction"),n.push(o[e]))}if(null!=this.MyPatron){const o=await this.MyPatron.GrabContextPackages(e,t,a);for(let e=0;e<o.length;e++)o[e].callpath.push("WarbandFaction"),n.push(o[e])}return n}async FindAllPatronOptions(){var e;let t=[];const a=u.D.MakeRequest({searchtype:"complex",searchparam:{type:"patronrelationship",request:{operator:"and",terms:[{item:"faction_id",value:null===(e=this.MyFaction)||void 0===e?void 0:e.SelfDynamicProperty.OptionChoice.ID,equals:!0,strict:!0}],subparams:[]}}});for(let n=0;n<a.length;n++){const e=await l.SkillFactory.CreateNewPatron(a[n].id,this);t.push(e)}if(this.MyContext){const e=new d.J;t=await e.runEvent("addExtraPatronOptions",this.MyContext,[],t,null)}return t}async UpdatePatron(e){if(""==e)this.MyPatron=null;else{const t=await l.SkillFactory.CreateNewPatron(e,this);this.MyPatron=t}}GetPatronSkills(){return this.MyPatron?this.MyPatron:null}GetSelfName(){return void 0!=this.MyFaction&&this.MyFaction.SelfDynamicProperty.OptionChoice.Name?this.MyFaction.SelfDynamicProperty.OptionChoice.Name:""}async GetSelfBaseName(){const e=await this.GetFactionBase();return void 0!=e?e.GetTrueName():""}GetModifierProperties(){const e=[];for(let t=0;t<this.MyFactionRules.length;t++){this.MyFactionRules[t].SelfDynamicProperty.OptionChoice;e.push(this.MyFactionRules[t])}return e}}var m=a(1412),p=a(4475),f=a(108),g=a(6184),y=a(8252);const _=e=>new Promise((t=>setTimeout(t,e)));class b{static async CreateWarbandEquipment(e,t){const a=new n.o(e,t);return await a.BuildEquipment(e.equipment_id),a}static async BuildWarbandEquipmentFromPurchase(e,t){const a=e.EquipmentItem.Tags;(0,g.Kg)(e.Tags,"exploration_only")&&(a.exploration_only=!0);const n={id:e.EquipmentItem.ID,name:e.EquipmentItem.GetTrueName(),source:e.EquipmentItem.Source?e.EquipmentItem.Source:"unknown",tags:a,contextdata:e.EquipmentItem.ContextData,equipment_id:{consumables:[],object_id:e.EquipmentItem.ID,selections:[]},subproperties:[]};return await b.CreateWarbandEquipment(n,t)}static async BuildModelEquipmentFromPurchase(e,t,a,n){const o={id:e.ID+"_"+t.ID+"_"+a,name:t.GetTrueName(),source:t.Source?t.Source:"unknown",tags:t.Tags,contextdata:t.ContextData,equipment_id:{object_id:t.ID,consumables:[],selections:[]},subproperties:[]};return await b.CreateWarbandEquipment(o,n)}static async CreateWarbandExplorationSet(e,t){const a=new i.N4(e,t);return await a.BuildSkills(e.explorationskills),await a.BuildLocations(e.locations),e.location_mods&&await a.BuildLocationMods(e.location_mods),a}static async CreateWarbandFaction(e,t){const a=new h(e,t);return await a.BuildFaction(e.faction_property),await a.BuildPatron(e.patron_id),await a.BuildFactionRules(e),a}static async CreateWarbandMember(e,t,a){let n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const i=new o.WarbandMember(e,t,a);return await i.BuildModel(e.model),await i.BuildEquipment(e.equipment),await i.BuildSkills(e.list_skills),await i.BuildInjuries(e.list_injury),await i.BuildNewProperties(e),await i.BuildUpgrades(e),await i.BuildModelEquipProperties(e),await i.BuildModelEquipment(n),i}static async BuildWarbandMemberFromPurchase(e,t,a){const n=Date.now(),o={id:e.Model.ID+"_"+t.Models.length+"_"+n.toString(),name:e.Model.GetTrueName(),source:e.Model.Source?e.Model.Source:"unknown",tags:e.Model.Tags,contextdata:e.Model.ContextData,model:e.Model.ID,subproperties:[],notes:[],active:"active",equipment:[],list_upgrades:[],list_injury:[],list_skills:[],list_modelequipment:[],experience:0,elite:e.Model.getKeywordIDs().includes("kw_elite"),recruited:!1,scar_reserves:0,stat_selections:[]};1==e.Mercenary&&(o.tags.mercenary=!0);return await b.CreateWarbandMember(o,t,a,!0)}static async CreateUserWarband(e,t){if(!e)throw new Error(`CreateUserWarband called with undefined data for postID ${t}`);const a={...e};a.tags&&"object"===typeof a.tags&&!Array.isArray(a.tags)||(a.tags={}),a.exploration&&"object"===typeof a.exploration?(Array.isArray(a.exploration.locations)||(a.exploration.locations=[]),Array.isArray(a.exploration.location_mods)||(a.exploration.location_mods=[])):a.exploration={locations:[],location_mods:[],templocations:[]},Array.isArray(a.models)||(a.models=[]),Array.isArray(a.equipment)||(a.equipment=[]),Array.isArray(a.modifiers)||(a.modifiers=[]),Array.isArray(a.modifiersloc)||(a.modifiersloc=[]),Array.isArray(a.fireteams)||(a.fireteams=[]),Array.isArray(a.consumables)||(a.consumables=[]);const n=y.x9.getInstance();if(!n.CheckUpdate(a))try{const e=await n.RunUpdate(a);Object.assign(a,e)}catch(i){console.log("Warband update failed for",t,i)}const o=new m.UserWarband(a,t);try{await o.NewWarbandItems(a),await o.BuildModels(a.models),await o.BuildEquipment(a.equipment),await o.BuildModifiersSkills(a.modifiers),await o.BuildModifiersLoc(a.modifiersloc),await o.BuildModifiersFireteam(a.fireteams),await o.BuildConsumables(a.consumables),await o.RebuildProperties(),a.exploration.templocations&&await o.BuildTempLocations(a.exploration.templocations),o.DumpCache()}catch(i){console.log(i)}return o}static async GetWarbandPublicByID(e){const t=p.y.getInstance();let a;if(t.CheckWarbandCache(e)&&(a=t.warbandDataCache[e]),t.CheckWarbandCallCache(e)){const n=1e3;let o=0;for(;!t.CheckWarbandCache(e)&&o<n;)await _(100),o+=1;a=t.warbandDataCache[e]}if(!t.CheckWarbandCache(e)){t.AddWarbandCallCache(e);const n=await fetch(`${f.a.URL}/wp-json/synod/v1/warband/${e}`);if(400===n.status)return null;if(n){const o=await n.json(),i=JSON.parse(o.warband_data);i.warband_invites=o.warband_campaign_invites,i.warband_campaigns=o.warband_campaigns,i.warband_user=o.warband_user_id,a=i,t.AddWarbandCache(e,i)}}if(void 0!==a&&null!==a){var n,o;let t;if("string"===typeof a)try{t=JSON.parse(a)}catch(i){return console.error("Failed to parse warband userdata from cache",i),null}else t=a;const s=null===(n=t)||void 0===n||null===(o=n.tags)||void 0===o?void 0:o.tc_version;s&&String(s);try{return{id:e,warband_data:await b.CreateUserWarband(t,e)}}catch(r){return console.log(r),null}}return null}static async GetWarbandBasicPublicByID(e){const t=p.y.getInstance();let a;if(t.CheckWarbandCache(e)&&(a=t.warbandDataCache[e]),t.CheckWarbandCallCache(e)){const n=1e3;let o=0;for(;!t.CheckWarbandCache(e)&&o<n;)await _(100),o+=1;a=t.warbandDataCache[e]}if(!t.CheckWarbandCache(e)){t.AddWarbandCallCache(e);const n=await fetch(`${f.a.URL}/wp-json/synod/v1/warband/${e}`);if(400===n.status)return null;if(n){const o=await n.json();a=JSON.parse(o.warband_data),a.warband_invites=o.warband_campaign_invites,a.warband_campaigns=o.warband_campaigns,a.warband_user=o.warband_user_id,t.AddWarbandCache(e,a)}}if(void 0!=a)try{return a}catch(n){console.log(n)}return null}}},108:function(e,t,a){"use strict";a.d(t,{a:function(){return n},n:function(){return o}});const n={LIVE:"https://synod.trench-companion.com",DEV:"http://synod.trench-companion.test",URL:"https://synod.trench-companion.com",PLAN_M_NAME:"Trench Companion Plus - Monthly",PLAN_Y_NAME:"Trench Companion Plus - Yearly",PP_PLAN_MONTH_ID:"P-3NV1196236628711HNFQMTFI",PP_PLAN_MONTH_ID_SANDBOX:"P-4R3499481R512564XNCA6IHY",PP_PLAN_MONTH_ID_LIVE:"P-7EU32778D0011954KNCA67NQ",PP_PLAN_MONTH_ID_LIVE_2:"P-3NV1196236628711HNFQMTFI",PP_PLAN_YEAR_ID:"P-97D60090JG397003LNFQMSVI",PP_PLAN_YEAR_ID_SANDBOX:"P-784241401A144594JNBPII7Q",PP_PLAN_YEAR_ID_LIVE:"P-0DH2439470156472ENCA676I",PP_PLAN_YEAR_ID_LIVE_2:"P-97D60090JG397003LNFQMSVI",PP_CLIENT_ID:"AUENLJFgtjX8HCLrRWLZvJUv_0m_PNP1QV3C4S2CzWXXoMiED65ocG_eXUG6i5lTbakh1-AW9-PdQfdg",PP_CLIENT_ID_SANDBOX:"AREbTEkX_IfbYs5fjuz54_aCppkKrZi_lWfZXIGWt4DSw_gwF9zfQ40gLB8SeUU5yNrehIgeeIG5uuED",PP_CLIENT_ID_LIVE:"Aec-yU2DQrRWFRDJGWuAErhXFwFfDovX80gsj85SaxsF0bnOxP2GgeLd3wS3Pawk-vN2SwghgVRxKCYn",PP_CLIENT_ID_LIVE_2:"AUENLJFgtjX8HCLrRWLZvJUv_0m_PNP1QV3C4S2CzWXXoMiED65ocG_eXUG6i5lTbakh1-AW9-PdQfdg",PP_API_BASE:"https://api.paypal.com",PP_API_SANDBOX:"https://api-m.sandbox.paypal.com",PP_API_LIVE:"https://api.paypal.com"},o={CLIENT_ID:"ca-pub-8374976266890339",WIDE_SLOT_ID:"9395613056",TALL_SLOT_ID:"1764535049",SQUARE_SLOT_ID:"9217194245",COMPENDIUM_WIDE_ID:"7548889357",WARBANDBUILDER_WIDE_ID:"8923394205"}},947:function(e,t,a){"use strict";a(5043);var n=a(579);t.A=e=>{let{className:t}=e;return(0,n.jsx)("svg",{className:`icon-ducats ${t}`,xmlns:"http://www.w3.org/2000/svg",role:"img","aria-label":"Ducats",viewBox:"0 0 200 149.18",style:{verticalAlign:"text-top",marginLeft:"0.3em",height:"1.2em",width:"1.4em"},children:(0,n.jsx)("path",{fill:"currentColor",d:"M37.21,9.91C48.66,3.3,61.17,0,74.76,0s26.1,3.3,37.55,9.91c11.45,6.61,20.51,15.63,27.19,27.08,6.68,11.45,10.02,23.92,10.02,37.44s-3.34,26.1-10.02,37.55c-6.68,11.45-15.74,20.51-27.19,27.19-11.45,6.68-23.96,10.02-37.55,10.02s-26.1-3.34-37.55-10.02c-11.45-6.68-20.51-15.74-27.19-27.19C3.34,100.52,0,88.01,0,74.42s3.34-25.99,10.02-37.44c6.68-11.45,15.74-20.47,27.19-27.08ZM124.07,76.78c.52-3.6.68-6.83.45-9.68-.3-3-.68-5.1-1.13-6.3-.68-1.88-2.16-4.9-4.45-9.06-2.29-4.17-3.66-6.36-4.11-6.59-.15-.15-.3-.15-.45,0s-.23.3-.23.45c0,.75.07,1.28.23,1.58.45,3.23,0,6.38-1.35,9.46-.3.75-.81,1.86-1.52,3.32-.71,1.46-1.15,2.38-1.29,2.76-2.48,4.35-5.14,9.27-7.99,14.75-.38.68-1,1.65-1.86,2.93-.86,1.28-1.63,2.4-2.31,3.38-.68.98-1.05,1.54-1.13,1.69-.45.68-.86.68-1.24,0-.6-.9-.98-1.58-1.13-2.03-.38-.98-.96-2.38-1.75-4.22-.79-1.84-1.37-3.21-1.75-4.11-.45-1.13-3.06-9.31-7.82-24.54-4.77-15.24-7.45-23.64-8.05-25.22l-.45-.45c-.3,0-.45.15-.45.45-.08.23-1.33,4.26-3.77,12.1-2.44,7.85-5.01,15.9-7.71,24.15-2.7,8.26-4.5,13.32-5.4,15.2-1.88,4.65-3.08,7.47-3.6,8.44-.45.75-.94.75-1.46,0-1.2-1.5-2.1-2.7-2.7-3.6-.3-.37-.7-1.03-1.18-1.97-.49-.94-.88-1.59-1.18-1.97-.9-1.72-2.25-4.28-4.05-7.66s-3.19-5.89-4.17-7.54c-.08-.15-.39-.84-.96-2.08s-1.03-2.16-1.41-2.76c-1.2-2.18-1.8-4.58-1.8-7.21-.08-.52-.06-1.35.06-2.48s.17-1.91.17-2.36v-.45c-.3-.3-.45-.3-.45,0-.38.3-1.6,2.14-3.66,5.52-2.06,3.38-3.4,5.93-4,7.66-1.5,3.53-2.25,7.36-2.25,11.48.15.3.23.75.23,1.35.3,3.9.6,6.98.9,9.23.37,2.03,1.46,6.94,3.27,14.75,0,.38.07.56.23.56.52.3,1.33.79,2.42,1.46,1.09.68,1.89,1.16,2.42,1.46.52.23.88.43,1.07.62.19.19.24.41.17.68-.08.26-.26.62-.56,1.07l-.23.23c-.3.45-.77,1.11-1.41,1.97-.64.86-1.11,1.52-1.41,1.97-.15.15-.23.45-.23.9,1.35,3.15,2.36,5.67,3.04,7.54.37.98,1.2,1.46,2.48,1.46h75.43c.9,0,1.58-.41,2.03-1.24.68-1.8,1.69-4.31,3.04-7.54.15-.3.07-.79-.23-1.46-.3-.45-.81-1.09-1.52-1.91-.71-.82-1.22-1.46-1.52-1.91-.6-1.05-.6-1.76,0-2.14,1.88-1.05,3.49-1.88,4.84-2.48.82-.52,1.24-1.16,1.24-1.91.37-2.03.98-4.99,1.8-8.89.82-3.9,1.43-6.83,1.8-8.78Z"})})}},8154:function(e,t,a){"use strict";a(5043);var n=a(579);t.A=e=>{let{className:t}=e;return(0,n.jsx)("svg",{className:`icon-glory ${t}`,xmlns:"http://www.w3.org/2000/svg",role:"img","aria-label":"Glory",viewBox:"0 0 200 149.18",style:{verticalAlign:"text-top",marginLeft:"0.3em",height:"1.2em",width:"1.4em"},children:(0,n.jsx)("path",{fill:"currentColor",d:"M74.87,149.18c-13.59,0-26.1-3.34-37.55-10.02-11.45-6.68-20.51-15.74-27.19-27.19C3.45,100.52.11,88.01.11,74.42s3.34-25.97,10.02-37.38c6.68-11.41,15.76-20.43,27.25-27.08S61.36,0,74.87,0c10.06,0,19.7,1.97,28.93,5.91,9.23,3.94,17.18,9.23,23.81,15.87,6.65,6.64,11.93,14.56,15.88,23.76,3.94,9.2,5.91,18.82,5.91,28.88s-1.97,19.82-5.91,29.05c-3.95,9.23-9.23,17.19-15.88,23.87-6.64,6.68-14.58,11.99-23.81,15.93-9.23,3.94-18.88,5.91-28.93,5.91ZM74.87,7.09c-9.53,0-18.48,1.71-26.85,5.12-8.37,3.42-15.54,8.11-21.5,14.07-5.97,5.97-10.66,13.12-14.07,21.45-3.42,8.33-5.12,17.23-5.12,26.68s1.71,18.48,5.12,26.85c3.41,8.37,8.11,15.54,14.07,21.5,5.97,5.97,13.13,10.66,21.5,14.07,8.37,3.42,17.32,5.12,26.85,5.12s18.35-1.71,26.68-5.12c8.33-3.41,15.48-8.11,21.45-14.07,5.96-5.97,10.66-13.13,14.07-21.5,3.41-8.37,5.13-17.32,5.13-26.85s-1.71-18.35-5.13-26.68-8.11-15.48-14.07-21.45c-5.97-5.97-13.12-10.66-21.45-14.07-8.33-3.41-17.22-5.12-26.68-5.12ZM74.87,135.56c-.15-.15-.23-.3-.23-.45-.3-.82-.6-2.36-.9-4.62-.38-2.25-.68-3.72-.9-4.39,0-.82-.15-1.99-.45-3.49-.38-1.88-.56-2.96-.56-3.27l-.68-3.38c0-.82-.15-1.84-.45-3.04-.08-.3-.15-.79-.23-1.46-.08-.68-.15-1.16-.23-1.46-.15-.68-.34-1.76-.56-3.27-.23-1.5-.41-2.59-.56-3.27-.23-1.8-.6-3.94-1.13-6.42l-.23-1.69c-.08-.15-.19-.23-.34-.23-.23-.07-.56-.23-1.01-.45s-.79-.37-1.01-.45h-.45c-1.5,1.13-2.36,1.77-2.59,1.91-.9.68-1.73,1.2-2.48,1.58-.3.3-1.01.83-2.14,1.58-.3.23-.71.54-1.24.96-.53.41-.94.73-1.24.96-1.05.6-2.22,1.43-3.49,2.48-.3.23-.79.58-1.46,1.07-.68.49-1.16.84-1.46,1.07-.38.3-1,.71-1.86,1.24-.86.53-1.48.94-1.86,1.24-.38.3-1,.77-1.86,1.41-.86.64-1.48,1.11-1.86,1.41-.38.23-1.32.88-2.81,1.97-1.5,1.09-2.7,1.9-3.6,2.42-.3.23-.77.56-1.41,1.01-.64.45-1.11.79-1.41,1.01h-.45v-.45c.3-.45.77-1.14,1.41-2.08.64-.94,1.11-1.63,1.41-2.08.9-1.13,1.8-2.36,2.7-3.72.3-.45.96-1.37,1.97-2.76,1.01-1.39,1.82-2.46,2.42-3.21.15-.23.6-.86,1.35-1.91.75-1.05,1.31-1.88,1.69-2.48.45-.6,1.11-1.52,1.97-2.76.86-1.24,1.52-2.16,1.97-2.76.37-.52.9-1.29,1.58-2.31s1.2-1.78,1.58-2.31c1.05-1.43,1.76-2.44,2.14-3.04.15-.3.52-.75,1.13-1.35v-.45c-.3-.45-.6-1.13-.9-2.03l-.9-.45c-.53-.07-1.33-.2-2.42-.39-1.09-.19-1.9-.32-2.42-.39-1.2-.3-2.14-.45-2.81-.45-1.35-.23-2.59-.45-3.72-.68-.38-.07-.96-.19-1.75-.34-.79-.15-1.37-.26-1.75-.34l-3.15-.45c-1.5-.3-2.67-.45-3.49-.45-.68-.15-1.67-.34-2.98-.56-1.32-.23-2.31-.41-2.98-.56-.53-.07-1.37-.2-2.53-.39-1.16-.19-2.01-.32-2.53-.39-.98-.3-2.59-.6-4.84-.9-.3-.15-.86-.23-1.69-.23-.15-.15-.23-.3-.23-.45s.07-.23.23-.23c.3-.07.81-.19,1.52-.34.71-.15,1.22-.26,1.52-.34.98,0,2.06-.15,3.27-.45,1.5-.3,2.63-.45,3.38-.45.37-.07.96-.19,1.75-.34.79-.15,1.37-.26,1.75-.34l3.49-.56c.37-.07.99-.19,1.86-.34.86-.15,1.48-.26,1.86-.34l3.38-.68c.37-.07,1.69-.3,3.94-.68.52-.07,1.33-.19,2.42-.34,1.09-.15,1.89-.26,2.42-.34.45-.07,1.14-.19,2.08-.34.94-.15,1.63-.26,2.08-.34,1.2-.3,2.14-.45,2.81-.45.3-.15.52-.3.68-.45.37-1.13.6-1.76.68-1.91v-.45c-.3-.45-.81-1.14-1.52-2.08-.71-.94-1.22-1.63-1.52-2.08-1.43-2.18-2.4-3.56-2.93-4.17-.6-.98-1.46-2.18-2.59-3.6-.3-.45-.75-1.14-1.35-2.08-.6-.94-1.05-1.63-1.35-2.08-2.25-2.85-4.2-5.48-5.85-7.88-.38-.52-.9-1.29-1.58-2.31s-1.2-1.78-1.58-2.31c-1.35-1.8-2.14-2.89-2.36-3.27l-.68-1.13v-.45h.45c2.03,1.43,3.56,2.59,4.62,3.49,2.03,1.35,3.34,2.18,3.94,2.48,2.93,2.25,4.99,3.79,6.19,4.62.45.3,1.11.77,1.97,1.41.86.64,1.52,1.11,1.97,1.41.82.38,1.76.98,2.81,1.8.82.83,1.88,1.61,3.15,2.36.52.38,1.33.96,2.42,1.75,1.09.79,1.89,1.37,2.42,1.75,1.27.98,2.36,1.73,3.27,2.25l.45.23c.45-.3,1.13-.6,2.03-.9,0-.07.06-.15.17-.23.11-.07.17-.15.17-.23.37-2.25.6-3.56.68-3.94.15-.75.34-1.86.56-3.32s.41-2.57.56-3.32c.07-.68.23-1.63.45-2.87s.37-2.08.45-2.53c.15-.9.37-2.1.68-3.6.07-.52.19-1.29.34-2.31.15-1.01.26-1.78.34-2.31.07-.37.2-.99.39-1.86.19-.86.32-1.48.39-1.86.07-.45.19-1.14.34-2.08.15-.94.26-1.63.34-2.08.3-1.5.45-2.81.45-3.94l.68-3.38c0-.37.15-.56.45-.56.15.23.23.41.23.56.3,1.2.45,2.03.45,2.48.07.38.19.96.34,1.75.15.79.26,1.37.34,1.75l.45,3.49.79,3.15c0,.83.15,1.99.45,3.49.07.3.15.75.23,1.35.07.6.15,1.05.23,1.35.07.38.19.96.34,1.75.15.79.26,1.37.34,1.75,0,.68.15,1.77.45,3.27.07.45.19,1.11.34,1.97.15.86.26,1.52.34,1.97.07.38.19.98.34,1.8.15.83.26,1.43.34,1.8.07.45.19,1.11.34,1.97.15.86.26,1.52.34,1.97,0,.23.04.62.11,1.18.07.56.11.96.11,1.18,0,.08.07.15.23.23.15.08.26.15.34.23l2.03.68h.23c.37-.23.92-.56,1.63-1.01.71-.45,1.26-.79,1.63-1.01,1.5-1.13,2.48-1.91,2.93-2.36.45-.3,2.21-1.54,5.29-3.72.6-.52,1.99-1.5,4.16-2.93.97-.6,2.32-1.52,4.05-2.76s3.08-2.16,4.05-2.76c.52-.37,1.33-.96,2.42-1.75s1.89-1.37,2.42-1.75c.3-.3.62-.58.95-.84.34-.26.75-.56,1.24-.9.49-.34.84-.62,1.06-.84.3-.3.68-.45,1.13-.45,0-.15.15-.23.45-.23,0,.3-.07.53-.23.68-.38.75-.75,1.32-1.13,1.69-.3.45-.77,1.13-1.41,2.03s-1.11,1.58-1.41,2.03l-4.4,5.85c-.3.45-.75,1.11-1.35,1.97-.6.86-1.05,1.52-1.35,1.97-.83,1.13-1.54,2.18-2.13,3.15-.15.23-.69.96-1.63,2.2-.95,1.24-1.64,2.2-2.09,2.87-.52.75-1.33,1.91-2.42,3.49-1.09,1.58-1.9,2.74-2.42,3.49-.6.9-1.05,1.5-1.35,1.8v.45c.45,1.35.75,2.14.9,2.36l.23.23c.37.08.99.15,1.86.23.86.08,1.48.15,1.86.23.38.08.96.19,1.75.34.79.15,1.37.26,1.75.34l3.26.45,3.38.68c1.35.23,2.82.45,4.4.68,2.25.3,3.86.6,4.84.9.38.08,1.14.21,2.31.39,1.16.19,2.08.32,2.76.39.97.3,2.59.6,4.84.9,1.58.23,3.04.45,4.4.68.23.08.58.15,1.07.23.49.08.84.15,1.06.23.07,0,.15.04.23.11.07.08.15.11.23.11l-.23.23c-1.13.23-2.13.45-3.04.68-1.5.3-2.67.45-3.49.45-.38.08-.94.21-1.68.39s-1.32.32-1.69.39c-1.5.3-2.67.45-3.49.45l-3.27.68c-.83,0-1.99.15-3.49.45-1.21.3-2.11.45-2.7.45-1.21.3-2.14.45-2.82.45-1.2.3-2.1.45-2.7.45-.45.08-1.11.19-1.96.34-.86.15-1.52.26-1.97.34-.38.08-.95.19-1.75.34-.78.15-1.37.26-1.75.34-.23,0-.54.06-.95.17s-.69.17-.85.17c-.23.08-.58.15-1.07.23-.49.08-.84.15-1.07.23-.15,0-.23.08-.23.23-.3.45-.6,1.13-.9,2.03v.45c.23.3.58.77,1.07,1.41.49.64.84,1.11,1.07,1.41,1.5,2.25,2.4,3.57,2.7,3.94.38.75.94,1.5,1.69,2.25.68,1.13,1.35,2.14,2.03,3.04.37.53.95,1.33,1.75,2.42.78,1.09,1.36,1.9,1.74,2.42.6.9,2.59,3.72,5.97,8.44.45.68,1.18,1.73,2.2,3.15,1.01,1.43,1.74,2.48,2.19,3.15.3.6.52.98.68,1.13l.23.45h-.45c-1.87-1.35-3.41-2.36-4.61-3.04-.76-.52-1.86-1.33-3.32-2.42-1.46-1.09-2.58-1.89-3.32-2.42-.45-.37-.97-.77-1.58-1.18-.6-.41-1.23-.86-1.91-1.35-.68-.49-1.21-.84-1.58-1.07-.38-.3-1-.73-1.86-1.29-.87-.56-1.49-.99-1.86-1.29-.52-.37-1.33-.99-2.42-1.86-1.09-.86-1.9-1.48-2.42-1.86-.38-.23-.92-.56-1.63-1.01-.71-.45-1.26-.79-1.63-1.01-.53-.3-1.28-.84-2.25-1.63-.98-.79-1.69-1.33-2.14-1.63-.38-.23-.75-.23-1.13,0-.15.08-.41.19-.79.34-.38.15-.64.26-.79.34l-.56.23c-.08.45-.15,1.09-.23,1.91-.08.83-.15,1.43-.23,1.8-.3,1.13-.6,2.97-.9,5.52-.3.98-.6,2.59-.9,4.84-.3,1.95-.6,3.49-.9,4.62l-.45,3.49c-.08.38-.3,1.69-.68,3.94-.08.38-.17.96-.28,1.75s-.21,1.37-.28,1.75c-.08.38-.19.9-.34,1.58-.15.68-.26,1.2-.34,1.58l-.45,3.49c-.23.9-.45,1.91-.68,3.04v.45c0,.08-.04.15-.11.23s-.11.15-.11.23Z"})})}},3540:function(e,t,a){"use strict";a(5043);var n=a(579);t.A=e=>{let{className:t}=e;return(0,n.jsxs)("svg",{className:`${t}`,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 193.44 193.44",children:[(0,n.jsx)("defs",{children:(0,n.jsx)("style",{})}),(0,n.jsx)("path",{className:"cls-1",d:"M24.52,45.05c5.55-3.83,11.24-7.39,16.91-10.97,12.03-5.83,42.67-20.68,55.08-26.69,12.79,6.05,43.98,20.8,56.43,26.66,5.82,3.59,11.65,7.18,17.37,11-6.58-1.99-13.05-4.22-19.52-6.44l-18.43-8.74-36.89-17.44s2.16-.01,2.16-.01c-11.87,5.75-42.51,20.6-54,26.17-6.33,2.23-12.64,4.49-19.09,6.47h0Z"}),(0,n.jsx)("path",{className:"cls-1",d:"M33.4,69.94c4.77-3.83,9.67-7.43,14.6-10.96,10.63-5.69,36.59-20.13,47.54-26.12,0,0,1.17-.65,1.17-.65l1.19.62,30.99,16.11c5.15,2.71,10.36,5.32,15.47,8.11,4.82,3.34,9.65,6.67,14.37,10.22-5.61-1.82-11.12-3.86-16.62-5.89-5.22-2.58-10.34-5.34-15.52-8l-30.99-16.11s2.36-.03,2.36-.03c-11.03,6.16-36.84,20.16-47.49,26.22-5.62,2.28-11.28,4.5-17.07,6.48h0Z"}),(0,n.jsx)("path",{className:"cls-1",d:"M87.63,87.5c-9.04,2.1-18.11,3.97-27.2,5.75-5.75.54-15.55,1.82-21.39,2.46,0,0,.11-4.95.11-4.95l44,7.16,2.1.34v26.5s-.11.36-.11.36l-15.11,49.33s-4.42-2.19-4.42-2.19c0,0,7.11-9.89,7.11-9.89,2.39-3.21,4.59-6.78,7.31-9.75,5.28-6.21,10.61-12.38,16.05-18.46-4.52,7.98-9.24,15.86-13.96,23.71-6.28,8.81-14.99,20.76-21.32,29.63,2.5-7.72,17.31-57.3,19.45-63.13,0,0,0-24,0-24,0,0,2.1,2.47,2.1,2.47l-44-7.16-17.64-2.87c11.56-1.32,27.71-3.24,39.13-4.63,9.26-.37,18.52-.64,27.8-.69h0Z"}),(0,n.jsx)("path",{className:"cls-1",d:"M105.85,90.16c9.52-1.25,19.09-2.89,28.73-2.37,11.51,1.63,28.05,3.77,39.67,5.32,0,0-17.82,2.59-17.82,2.59l-46.22,6.72s2.14-2.47,2.14-2.47v23.56c2.68,6.91,18.45,56.42,21.6,65.56-6.23-9.12-15.31-21.56-21.28-30.69-4.41-7.57-8.81-15.17-13.04-22.87,5.76,6.62,11.38,13.37,16.96,20.13,3.41,4.32,8.47,12.13,11.76,16.66,0,0-4.43,2.21-4.43,2.21l-16.44-50.22-.12-.38s0-.4,0-.4v-23.56s0-2.16,0-2.16l2.14-.31,46.22-6.72s.05,4.95.05,4.95l-12.54-1.66c-3.63-.53-8.8-.98-12.33-1.74-7.03-1.07-17.78-1.53-25.04-2.14h0Z"}),(0,n.jsx)("path",{className:"cls-1",d:"M91.63,83.94c-2.08-1.7-3.85-3.69-5.38-5.91-1.02-3.1-2.03-6.8-1.39-10.36,1.3-5.19,5.02-10.68,11.05-10.29,6.47.19,10.87,6.64,11.2,12.73.07,2.81-.9,5.59-1.91,8.14-1.68,2.13-3.47,4.05-5.58,5.69.36-2.62.78-5.12.94-7.56.61-1.59,1.18-3.14,1.46-4.78.59-3.61-2.2-9.07-6.24-9.22-3.15-.26-4.7,2.73-5.74,5.37-.13.28-.17.6-.27.89-.36,2.53.29,5.07,1.25,7.72.09,2.41.35,4.93.61,7.58h0Z"})]})}},464:function(e,t,a){"use strict";a.d(t,{A:function(){return i},c:function(){return o}});var n=a(5043);const o=(0,n.createContext)(void 0),i=()=>{const e=(0,n.useContext)(o);if(!e)throw new Error("useAuth must be used within an AuthProvider");return e}},6421:function(e,t,a){"use strict";a.d(t,{Z:function(){return h},t:function(){return m}});var n=a(5043),o=a(464),i=a(108);const r={show_lore:!0,show_base_sizes:!1,color_theme:"dark",print_settings:{},legacy_functionality:!1,billing_address:{first_name:"",last_name:"",street:"",zip:"",state:"",country:""}};var s=a(579);const l=(0,n.createContext)(void 0),c="tc_user_settings";function d(){if("undefined"===typeof window)return r;try{const e=window.localStorage.getItem(c),t=e?JSON.parse(e):{};let a=r.legacy_functionality;a="boolean"===typeof t.legacy_functionality&&t.legacy_functionality;return{...r,...t,billing_address:{...r.billing_address,...t.billing_address||{}},legacy_functionality:a}}catch{return r}}function u(e){"undefined"!==typeof document&&document.body.setAttribute("data-theme",e.color_theme),"undefined"!==typeof window&&(window.localStorage.setItem("theme",e.color_theme),window.localStorage.setItem("loreshow",e.show_lore?"true":"false"),window.localStorage.setItem("baseshow",e.show_base_sizes?"true":"false"))}const h=e=>{let{children:t}=e;const{isLoggedIn:a,authToken:h,userSettings:m,reloadIsLoggedIn:p}=(0,o.A)(),[f,g]=(0,n.useState)((()=>d())),[y,_]=(0,n.useState)(!0),[b,v]=(0,n.useState)(!1);(0,n.useEffect)((()=>{if(a&&m){const e={...r,...m,billing_address:{...r.billing_address,...m.billing_address||{}}};return g(e),u(e),void _(!1)}const e=d();g(e),u(e),_(!1)}),[a,m]);const w=(0,n.useCallback)((async e=>{v(!0);const t=f,n={...t,...e,billing_address:{...t.billing_address,...e.billing_address||{}}};if(g(n),function(e){"undefined"!==typeof window&&window.localStorage.setItem(c,JSON.stringify(e))}(n),u(n),a&&h)try{const e=await fetch(`${i.a.URL}/wp-json/synod/v1/user-settings/change`,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json",Authorization:`Bearer ${h}`},body:JSON.stringify(n)});e.ok?p():console.error("Failed to update user settings",e.status)}catch(o){console.error(o)}await new Promise((e=>setTimeout(e,300))),v(!1)}),[f,a,h,p]),x={settings:f,loading:y,saving:b,updateSettings:w};return(0,s.jsx)(l.Provider,{value:x,children:t})},m=()=>{const e=(0,n.useContext)(l);if(!e)throw new Error("useSettings must be used inside SettingsProvider");return e}},6014:function(e,t,a){"use strict";var n=a(5043),o=a(3101),i=a(579);t.A=e=>{let{modelSlug:t,factionSlug:a="",size:r="full",className:s=""}=e;const[l,c]=(0,n.useState)((0,o.E)(t,r,a)),[d,u]=(0,n.useState)(0);(0,n.useEffect)((()=>{c({url:"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",sourceTitle:"",sourceUrl:"",imageId:0,modelName:"",modelId:0,loading:!0,error:!1}),async function(){const e=await(0,o.R)(t,a,r);c(e),u(d+1)}()}),[t]);return l.error?null:(0,i.jsx)("img",{src:l.url||"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",alt:l.modelName||"",className:l.url?`loaded-image ${s}`:`ghost-image ${s}`},d)}},2925:function(e,t,a){"use strict";var n=a(5043),o=a(3101),i=a(579);t.A=e=>{let{modelSlug:t,factionSlug:a=""}=e;const[{sourceTitle:r,sourceUrl:s,loading:l,error:c},d]=(0,n.useState)((0,o.E)(t,"medium",a)),[u,h]=(0,n.useState)(0);return(0,n.useEffect)((()=>{!async function(){const e=await(0,o.R)(t,a,"medium");d(e),h(u+1)}()}),[]),(0,i.jsx)("span",{children:!(l||c||!s)&&(0,i.jsxs)("a",{href:s,target:"_blank",rel:"noopener noreferrer nofollow",className:"synod-image-source",children:["@",r||s]})},u)}},6184:function(e,t,a){"use strict";a.d(t,{AG:function(){return d},Ah:function(){return k},Et:function(){return h},Gb:function(){return w},Ie:function(){return f},Kg:function(){return v},LW:function(){return g},Pn:function(){return r},Sm:function(){return y},Us:function(){return p},Wu:function(){return s},Yr:function(){return x},gg:function(){return c},h8:function(){return u},nZ:function(){return b},oD:function(){return j},oS:function(){return _},rr:function(){return l},tZ:function(){return i},vD:function(){return C},ze:function(){return m}});a(363);var n=a(5949);function o(e){return e.length>0?e[0].toUpperCase()+e.slice(1).toLowerCase():""}function i(e){return"string"===typeof e||"number"===typeof e||"boolean"===typeof e||!!Array.isArray(e)&&e.every((e=>"string"===typeof e||"number"===typeof e))}function r(e,t,a){if(t.some((t=>e.includes(t))))return!1;if(a.length>0){if(!a.some((t=>e.includes(t))))return!1}return!0}async function s(e){const{UserWarband:t}=await Promise.resolve().then(a.bind(a,1412));let n=e;if(e instanceof t)return e;for(let a=0;a<32;a++){const e=n.MyContext;if(null!=e&&(n=e,e instanceof t))return e}return null}function l(e){const t=e.split("_");return t.length>1&&["gr","eq","el","et","fc","fv","rl","br","er","gl","kw","tb","sc","sr","gd","in","pt","sk","sg","ab","md","mv","up"].includes(t[0])}async function c(e){const t=e.split("_");try{switch(t[0]){case"gr":{const{BookRuleFactory:t}=await Promise.resolve().then(a.bind(a,5204));return(await t.CreateNewBookRule(e,null)).GetTrueName()}case"eq":{const{EquipmentFactory:t}=await Promise.resolve().then(a.bind(a,7880));return(await t.CreateNewEquipment(e,null)).GetTrueName()}case"el":{const{ExplorationFactory:t}=await Promise.resolve().then(a.bind(a,6298));return(await t.CreateNewExplorationLocation(e,null)).GetTrueName()}case"et":{const{ExplorationFactory:t}=await Promise.resolve().then(a.bind(a,6298));return(await t.CreateNewExplorationTable(e,null)).GetTrueName()}case"fc":{const{FactionFactory:t}=await Promise.resolve().then(a.bind(a,1444));return(await t.CreateNewFaction(e,null)).GetTrueName()}case"fv":{const{FactionFactory:t}=await Promise.resolve().then(a.bind(a,1444));return(await t.CreateNewFaction(e,null)).GetTrueName()}case"rl":{const{RuleFactory:t}=await Promise.resolve().then(a.bind(a,6647));return(await t.CreateNewRule(e,null)).GetTrueName()}case"br":{const{BookRuleFactory:t}=await Promise.resolve().then(a.bind(a,5204));return(await t.CreateNewBookRule(e,null)).GetTrueName()}case"er":{const{BookRuleFactory:t}=await Promise.resolve().then(a.bind(a,5204));return(await t.CreateNewBookRule(e,null)).GetTrueName()}case"gl":{const{GlossaryRuleFactory:t}=await Promise.resolve().then(a.bind(a,7796)),n=await t.CreateNewGlossaryRule(e);return null==n?u(e):n.Name?n.Name:u(e)}case"kw":{const{KeywordFactory:t}=await Promise.resolve().then(a.bind(a,9353));return(await t.CreateNewKeyword(e,null)).GetTrueName()}case"sc":{const{ScenarioFactory:t}=await Promise.resolve().then(a.bind(a,6435));return(await t.CreateNewScenario(e,null)).GetTrueName()}case"sr":{const{RuleFactory:t}=await Promise.resolve().then(a.bind(a,6647));return(await t.CreateNewScenarioRule(e,null)).GetTrueName()}case"gd":{const{GloriousDeedFactory:t}=await Promise.resolve().then(a.bind(a,207));return(await t.CreateNewGloriousDeed(e,null)).GetTrueName()}case"in":{const{InjuryFactory:t}=await Promise.resolve().then(a.bind(a,7120));return(await t.CreateNewInjury(e,null)).GetTrueName()}case"pt":{const{SkillFactory:t}=await Promise.resolve().then(a.bind(a,6498));return(await t.CreateNewPatron(e,null)).GetTrueName()}case"sk":{const{SkillFactory:t}=await Promise.resolve().then(a.bind(a,6498));return(await t.CreateNewSkill(e,null)).GetTrueName()}case"sg":{const{SkillFactory:t}=await Promise.resolve().then(a.bind(a,6498));return(await t.CreateNewSkillGroup(e,null)).GetTrueName()}case"ab":{const{AbilityFactory:t}=await Promise.resolve().then(a.bind(a,5035));return(await t.CreateNewAbility(e,null)).GetTrueName()}case"md":{const{ModelFactory:t}=await Promise.resolve().then(a.bind(a,7479));return(await t.CreateNewModel(e,null)).GetTrueName()}case"mv":{const{ModelFactory:t}=await Promise.resolve().then(a.bind(a,7479));return(await t.CreateNewModel(e,null)).GetTrueName()}case"up":{const{UpgradeFactory:t}=await Promise.resolve().then(a.bind(a,7401));return(await t.CreateNewUpgrade(e,null)).GetTrueName()}default:return m(e)}}catch(n){return m(e)}}function d(e,t){for(let a=0;a<e.length;a++){const n=e[a];if(n.added){let e=!1,a=!1;for(let o=0;o<n.added.length;o++)n.added[o].res_type==t?e=!0:a=!0;if(1==e&&0==a)return!0}if(n.banned){let e=!1,a=!1;for(let o=0;o<n.banned.length;o++)n.banned[o].res_type==t?e=!0:a=!0;if(1==e&&0==a)return!0}if(n.permitted){let e=!1,a=!1;for(let o=0;o<n.permitted.length;o++)n.permitted[o].res_type==t?e=!0:a=!0;if(1==e&&0==a)return!0}if(n.removed){let e=!1,a=!1;for(let o=0;o<n.removed.length;o++)n.removed[o].res_type==t?e=!0:a=!0;if(1==e&&0==a)return!0}if(n.required){let e=!1,a=!1;for(let o=0;o<n.required.length;o++)n.required[o].res_type==t?e=!0:a=!0;if(1==e&&0==a)return!0}}return!1}function u(e){const t=["gl","id","kw"];if(null===e||""===e)return"-";const a=e.toString().split("_");let n="",i=0;for(i=0;i<a.length;i++){if(t.includes(a[i]))continue;n=n+(0==i?"":" ")+o(a[i])}return n}function h(e){return void 0!=e&&null!=e&&""!==e&&!isNaN(Number(e.toString()))}function m(e){const t=u(e),a={faction:"Factions"};return a[e]?a[e]:t}function p(e){if(void 0===e)return"Infantry";switch(e){case 0:return"Infantry";case 1:return"Flying";default:return"default"}}function f(e){if(void 0===e)return"Ducats";switch(e){case 0:default:return"Ducats";case 1:return"Glory"}}function g(e){if(void 0===e)return"default";switch(e.toLowerCase()){case"yellow":return"yellow";case"red":return"red";case"green":return"green";case"blue":return"blue";case"grey":return"grey";case"bgbase":return"BgBase";case"bgcard":return"BgCard";case"basictext":return"BasicText";case"highlighttext":return"HighlightText";default:return"default"}}function y(e){var t;if(!e)return"";return null!==(t=(new DOMParser).parseFromString(`<!doctype html><body>${e}`,"text/html").body.textContent)&&void 0!==t?t:""}function _(e){const t=e=>String(e).padStart(2,"0");return`${e.getFullYear()}-${t(e.getMonth()+1)}-${t(e.getDate())}T${t(e.getHours())}:${t(e.getMinutes())}`}function b(e){if(!e)return null;const[t,a]=e.split("T");if(!t||!a)return null;const[n,o,i]=t.split("-").map(Number),[r,s]=a.split(":").map(Number),l=new Date(n,(null!==o&&void 0!==o?o:1)-1,null!==i&&void 0!==i?i:1,null!==r&&void 0!==r?r:0,null!==s&&void 0!==s?s:0,0,0);return Math.floor(l.getTime()/1e3)}function v(e,t){return!!e[t]}function w(e,t){return e[t]?e[t]:""}function x(e,t){let a=0;if(void 0===e.length)return e[t]?e[t]:"";for(a=0;a<e.length;a++)if(e[a][t])return e[a][t];return""}function k(e){function t(e){let t,a=1;return"string"===typeof e&&e.startsWith("-")?(a=-1,t=e.substr(1)):t=e,function(e,n){return(e[t]<n[t]?-1:e[t]>n[t]?1:0)*a}}return function(a,n){let o=0,i=0;const r=null===e||void 0===e?void 0:e.length;for(;0===i&&o<r;)i=t(e[o])(a,n),o++;return i}}function C(e,t){const a=Array.isArray(e)?e:null==e?[]:[e],o=[];for(let i=0;i<a.length;i++)o.push(n._.CreateAdvancedDescriptionItem(a[i],t));return o}function j(e,t){let a=[];return e.forEach((e=>{a=a.concat(e)})),t.forEach((e=>{a=a.filter((t=>!e.includes(t)))})),a=a.filter(((e,t)=>a.indexOf(e)===t)),a.sort(((e,t)=>e>t?-1:1)),a}},3101:function(e,t,a){"use strict";a.d(t,{E:function(){return r},R:function(){return s}});var n=a(4436),o=a(108);const i=e=>new Promise((t=>setTimeout(t,e)));function r(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"full",a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";const o=n.T.getInstance(),i=`${e}-${t}-${a}`;return o.CheckModelCache(i)?o.imageModelCache[i]:{url:"",sourceTitle:"",sourceUrl:"",imageId:0,modelName:"",modelId:0,loading:!0,error:!1}}async function s(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"full",r={url:"",sourceTitle:"",sourceUrl:"",imageId:0,modelName:"",modelId:0,loading:!0,error:!1};if(!e)return r;const s=n.T.getInstance(),l=`${e}-${a}-${t}`;if(s.CheckModelCache(l))return r=s.imageModelCache[l],r;if(s.CheckModelCallCache(l)){const e=1e3;let t=0;for(;!s.CheckModelCache(l)&&t<e;)await i(100),t+=1;if(s.CheckModelCache(l))return s.imageModelCache[l]}if(s.CheckModelCache(l))return s.imageModelCache[l];{s.AddModelCallCache(l);const n=await fetch(`${o.a.URL}/wp-json/synod/v1/model-image/${e}?faction_slug=${t}`);if(n){var c,d,u,h,m,p,f,g;const e=await n.json(),t=null===(c=e.image)||void 0===c||null===(d=c.media_details)||void 0===d?void 0:d.sizes,o={url:(null===t||void 0===t||null===(u=t[a])||void 0===u?void 0:u.source_url)||(null===(h=e.image)||void 0===h?void 0:h.source_url)||"",sourceTitle:(null===(m=e.image)||void 0===m?void 0:m.meta.attachment_source_title)||"",sourceUrl:(null===(p=e.image)||void 0===p?void 0:p.meta.attachment_source)||"",imageId:(null===(f=e.image)||void 0===f?void 0:f.id)||0,modelName:e.model_name||"",modelId:e.model_id||0,loading:!1,error:!e.image||!(null!==(g=e.image)&&void 0!==g&&g.source_url)};return s.AddModelCache(l,o),s.imageModelCache[l]}}return r}},8314:function(e,t,a){"use strict";a.d(t,{fj:function(){return p},lh:function(){return b},fE:function(){return y},Ee:function(){return _},$_:function(){return v}});var n=a(5043),o=a(4062),i=a(5855),r=(a(2565),a(3632)),s=a(579);var l=e=>{const t=e.data;return(0,s.jsx)(r.tH,{fallback:(0,s.jsx)("div",{children:"Something went wrong with GlossaryDisplay.tsx"}),children:(0,s.jsx)("div",{className:"findme-4",children:(0,s.jsx)("div",{className:"colourBasicText   size-default",children:y(t,t.Description)})})})},c=a(6184),d=a(7796),u=a(9353),h=a(8736),m=a(9165);function p(e,t){if(e||(e=[]),e.push({val:"\ud83d\udc51",id:"CUR_DUC"},{val:"\u263c",id:"CUR_GLR"}),e){let o=0,i=[t];for(o=0;o<((null===(a=e)||void 0===a?void 0:a.length)||0);o++){var a;const t="g",n="("+e[o].val.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")+")",r=new RegExp(n,t),s=[];let l=0;for(l=0;l<i.length;l++){const e=i[l].split(r);let t=0;for(t=0;t<e.length;t++)s.push(e[t])}i=s}return(0,s.jsx)(s.Fragment,{children:i.map(((t,a)=>(0,s.jsx)(n.Fragment,{children:""!=f(t,e)?(0,s.jsx)(n.Fragment,{children:f(t,e)},`glossarysplititem-${a}`):(0,s.jsx)(s.Fragment,{})},`glossarysplititem-o-${a}`)))})}return t}function f(e,t){if(""!=e){let a=0;for(a=0;a<t.length;a++)if(e==t[a].val){if("CUR_DUC"!=t[a].id&&"CUR_GLR"!=t[a].id){const n=d.GlossaryRuleFactory.CreateNewGlossaryRule(t[a].id);if(null==n||void 0==n.ID){const n=g(t[a].id);return(0,s.jsx)(m.A,{keyword:n,alt_name:e,type:"inline"})}return(0,s.jsx)(o.A,{d_colour:"grey",d_name:e,titlename:n.Name,d_type:"",d_method:()=>(0,s.jsx)(l,{data:n})})}if("CUR_DUC"==t[a].id)return(0,s.jsx)(h.A,{type:0});if("CUR_GLR"==t[a].id)return(0,s.jsx)(h.A,{type:1})}return e}return""}function g(e){if(e.includes("kw_negate_")&&"kw_negate"!=e){const t=u.KeywordFactory.CreateNewKeyword("kw_negate",null).SelfData,a=e.replace("kw_negate_",""),n=u.KeywordFactory.CreateNewKeyword(a,null);return t.id="kw_negate_"+a,t.name="NEGATE "+n.GetTrueName(),t.description.length>1&&(t.description[1]={tags:{desc_type:"paragraph"},content:"A model with NEGATE "+n.GetTrueName()+" ignores the Effect of the "+n.GetTrueName()+" Keyword.",glossary:[{val:n.GetTrueName(),id:n.GetID()}]}),u.KeywordFactory.CreateKeyword(t,null)}return u.KeywordFactory.CreateNewKeyword(e,null)}function y(e,t){return void 0==t?(0,s.jsx)(s.Fragment,{}):(0,s.jsx)(s.Fragment,{children:t.map(((t,a)=>(0,s.jsx)("span",{className:"description-element",children:(0,s.jsx)(i.A,{data:t,parent:e})},`descriptionDisplay-${a}`)))})}function _(e,t){return(0,s.jsx)(s.Fragment,{children:t.map((t=>(0,s.jsx)("p",{className:"description-element",children:(0,s.jsx)(i.A,{data:t,parent:e})},"descriptionDisplay")))})}function b(e){const t=e=>e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;"),a=e=>e=(e=e.replace(/\*\*(.+?)\*\*/gs,"<strong>$1</strong>")).replace(/(^|[^*])\*(?!\s)([^*]+?)\*(?!\*)/g,"$1<em>$2</em>");let n=(0,c.Sm)(e||"");n=t(n);const o=[];return n=n.replace(/\[([^\]]+)\]\((https?:\/\/[^\s)]+)\)/g,((e,n,i)=>{const r=(e=>{try{const t=new URL(e);if("http:"===t.protocol||"https:"===t.protocol)return t.toString()}catch(t){}return null})(i);if(!r)return a(t(n));const s=t(n),l=`<a href="${r}" target="_blank" rel="nofollow noopener">${a(s)}</a>`,c=`@@L${o.length}@@`;return o.push(l),c})),n=a(n),n=n.replace(/@@L(\d+)@@/g,((e,t)=>o[+t]||"")),n=n.replace(/\n/g,"<br>"),n}function v(e){if(!e)return"";let t=e;return t=t.replace(/\[([^\]]+)\]\(([^)]+)\)/g,"$1"),t=t.replace(/\*\*(.+?)\*\*/gs,"$1"),t=t.replace(/(^|\s)\*([^\s*][^*]*?)\*/g,"$1$2"),t=t.replace(/\s+/g," ").trim(),t}},3910:function(e,t,a){"use strict";function n(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function o(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?n(Object(a),!0).forEach((function(t){s(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):n(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function r(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function s(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var a=null==e?null:"undefined"!==typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==a)return;var n,o,i=[],r=!0,s=!1;try{for(a=a.call(e);!(r=(n=a.next()).done)&&(i.push(n.value),!t||i.length!==t);r=!0);}catch(l){s=!0,o=l}finally{try{r||null==a.return||a.return()}finally{if(s)throw o}}return i}(e,t)||d(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(e){return function(e){if(Array.isArray(e))return u(e)}(e)||function(e){if("undefined"!==typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||d(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function d(e,t){if(e){if("string"===typeof e)return u(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?u(e,t):void 0}}function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=new Array(t);a<t;a++)n[a]=e[a];return n}a.d(t,{g:function(){return Da}});var h=function(){},m={},p={},f=null,g={mark:h,measure:h};try{"undefined"!==typeof window&&(m=window),"undefined"!==typeof document&&(p=document),"undefined"!==typeof MutationObserver&&(f=MutationObserver),"undefined"!==typeof performance&&(g=performance)}catch(Ma){}var y,_,b,v,w,x=(m.navigator||{}).userAgent,k=void 0===x?"":x,C=m,j=p,S=f,I=g,A=(C.document,!!j.documentElement&&!!j.head&&"function"===typeof j.addEventListener&&"function"===typeof j.createElement),N=~k.indexOf("MSIE")||~k.indexOf("Trident/"),E="___FONT_AWESOME___",T=16,D="fa",R="svg-inline--fa",M="data-fa-i2svg",O="data-fa-pseudo-element",q="data-fa-pseudo-element-pending",G="data-prefix",P="data-icon",F="fontawesome-i2svg",L="async",W=["HTML","HEAD","STYLE","SCRIPT"],B=function(){try{return!0}catch(Ma){return!1}}(),H="classic",U="sharp",K=[H,U];function z(e){return new Proxy(e,{get:function(e,t){return t in e?e[t]:e[H]}})}var V=z((s(y={},H,{fa:"solid",fas:"solid","fa-solid":"solid",far:"regular","fa-regular":"regular",fal:"light","fa-light":"light",fat:"thin","fa-thin":"thin",fad:"duotone","fa-duotone":"duotone",fab:"brands","fa-brands":"brands",fak:"kit",fakd:"kit","fa-kit":"kit","fa-kit-duotone":"kit"}),s(y,U,{fa:"solid",fass:"solid","fa-solid":"solid",fasr:"regular","fa-regular":"regular",fasl:"light","fa-light":"light",fast:"thin","fa-thin":"thin"}),y)),Y=z((s(_={},H,{solid:"fas",regular:"far",light:"fal",thin:"fat",duotone:"fad",brands:"fab",kit:"fak"}),s(_,U,{solid:"fass",regular:"fasr",light:"fasl",thin:"fast"}),_)),J=z((s(b={},H,{fab:"fa-brands",fad:"fa-duotone",fak:"fa-kit",fal:"fa-light",far:"fa-regular",fas:"fa-solid",fat:"fa-thin"}),s(b,U,{fass:"fa-solid",fasr:"fa-regular",fasl:"fa-light",fast:"fa-thin"}),b)),$=z((s(v={},H,{"fa-brands":"fab","fa-duotone":"fad","fa-kit":"fak","fa-light":"fal","fa-regular":"far","fa-solid":"fas","fa-thin":"fat"}),s(v,U,{"fa-solid":"fass","fa-regular":"fasr","fa-light":"fasl","fa-thin":"fast"}),v)),Z=/fa(s|r|l|t|d|b|k|ss|sr|sl|st)?[\-\ ]/,Q="fa-layers-text",X=/Font ?Awesome ?([56 ]*)(Solid|Regular|Light|Thin|Duotone|Brands|Free|Pro|Sharp|Kit)?.*/i,ee=z((s(w={},H,{900:"fas",400:"far",normal:"far",300:"fal",100:"fat"}),s(w,U,{900:"fass",400:"fasr",300:"fasl",100:"fast"}),w)),te=[1,2,3,4,5,6,7,8,9,10],ae=te.concat([11,12,13,14,15,16,17,18,19,20]),ne=["class","data-prefix","data-icon","data-fa-transform","data-fa-mask"],oe={GROUP:"duotone-group",SWAP_OPACITY:"swap-opacity",PRIMARY:"primary",SECONDARY:"secondary"},ie=new Set;Object.keys(Y[H]).map(ie.add.bind(ie)),Object.keys(Y[U]).map(ie.add.bind(ie));var re=[].concat(K,c(ie),["2xs","xs","sm","lg","xl","2xl","beat","border","fade","beat-fade","bounce","flip-both","flip-horizontal","flip-vertical","flip","fw","inverse","layers-counter","layers-text","layers","li","pull-left","pull-right","pulse","rotate-180","rotate-270","rotate-90","rotate-by","shake","spin-pulse","spin-reverse","spin","stack-1x","stack-2x","stack","ul",oe.GROUP,oe.SWAP_OPACITY,oe.PRIMARY,oe.SECONDARY]).concat(te.map((function(e){return"".concat(e,"x")}))).concat(ae.map((function(e){return"w-".concat(e)}))),se=C.FontAwesomeConfig||{};if(j&&"function"===typeof j.querySelector){[["data-family-prefix","familyPrefix"],["data-css-prefix","cssPrefix"],["data-family-default","familyDefault"],["data-style-default","styleDefault"],["data-replacement-class","replacementClass"],["data-auto-replace-svg","autoReplaceSvg"],["data-auto-add-css","autoAddCss"],["data-auto-a11y","autoA11y"],["data-search-pseudo-elements","searchPseudoElements"],["data-observe-mutations","observeMutations"],["data-mutate-approach","mutateApproach"],["data-keep-original-source","keepOriginalSource"],["data-measure-performance","measurePerformance"],["data-show-missing-icons","showMissingIcons"]].forEach((function(e){var t=l(e,2),a=t[0],n=t[1],o=function(e){return""===e||"false"!==e&&("true"===e||e)}(function(e){var t=j.querySelector("script["+e+"]");if(t)return t.getAttribute(e)}(a));void 0!==o&&null!==o&&(se[n]=o)}))}var le={styleDefault:"solid",familyDefault:"classic",cssPrefix:D,replacementClass:R,autoReplaceSvg:!0,autoAddCss:!0,autoA11y:!0,searchPseudoElements:!1,observeMutations:!0,mutateApproach:"async",keepOriginalSource:!0,measurePerformance:!1,showMissingIcons:!0};se.familyPrefix&&(se.cssPrefix=se.familyPrefix);var ce=o(o({},le),se);ce.autoReplaceSvg||(ce.observeMutations=!1);var de={};Object.keys(le).forEach((function(e){Object.defineProperty(de,e,{enumerable:!0,set:function(t){ce[e]=t,ue.forEach((function(e){return e(de)}))},get:function(){return ce[e]}})})),Object.defineProperty(de,"familyPrefix",{enumerable:!0,set:function(e){ce.cssPrefix=e,ue.forEach((function(e){return e(de)}))},get:function(){return ce.cssPrefix}}),C.FontAwesomeConfig=de;var ue=[];var he=T,me={size:16,x:0,y:0,rotate:0,flipX:!1,flipY:!1};var pe="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";function fe(){for(var e=12,t="";e-- >0;)t+=pe[62*Math.random()|0];return t}function ge(e){for(var t=[],a=(e||[]).length>>>0;a--;)t[a]=e[a];return t}function ye(e){return e.classList?ge(e.classList):(e.getAttribute("class")||"").split(" ").filter((function(e){return e}))}function _e(e){return"".concat(e).replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&#39;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function be(e){return Object.keys(e||{}).reduce((function(t,a){return t+"".concat(a,": ").concat(e[a].trim(),";")}),"")}function ve(e){return e.size!==me.size||e.x!==me.x||e.y!==me.y||e.rotate!==me.rotate||e.flipX||e.flipY}var we=':root, :host {\n  --fa-font-solid: normal 900 1em/1 "Font Awesome 6 Solid";\n  --fa-font-regular: normal 400 1em/1 "Font Awesome 6 Regular";\n  --fa-font-light: normal 300 1em/1 "Font Awesome 6 Light";\n  --fa-font-thin: normal 100 1em/1 "Font Awesome 6 Thin";\n  --fa-font-duotone: normal 900 1em/1 "Font Awesome 6 Duotone";\n  --fa-font-sharp-solid: normal 900 1em/1 "Font Awesome 6 Sharp";\n  --fa-font-sharp-regular: normal 400 1em/1 "Font Awesome 6 Sharp";\n  --fa-font-sharp-light: normal 300 1em/1 "Font Awesome 6 Sharp";\n  --fa-font-sharp-thin: normal 100 1em/1 "Font Awesome 6 Sharp";\n  --fa-font-brands: normal 400 1em/1 "Font Awesome 6 Brands";\n}\n\nsvg:not(:root).svg-inline--fa, svg:not(:host).svg-inline--fa {\n  overflow: visible;\n  box-sizing: content-box;\n}\n\n.svg-inline--fa {\n  display: var(--fa-display, inline-block);\n  height: 1em;\n  overflow: visible;\n  vertical-align: -0.125em;\n}\n.svg-inline--fa.fa-2xs {\n  vertical-align: 0.1em;\n}\n.svg-inline--fa.fa-xs {\n  vertical-align: 0em;\n}\n.svg-inline--fa.fa-sm {\n  vertical-align: -0.0714285705em;\n}\n.svg-inline--fa.fa-lg {\n  vertical-align: -0.2em;\n}\n.svg-inline--fa.fa-xl {\n  vertical-align: -0.25em;\n}\n.svg-inline--fa.fa-2xl {\n  vertical-align: -0.3125em;\n}\n.svg-inline--fa.fa-pull-left {\n  margin-right: var(--fa-pull-margin, 0.3em);\n  width: auto;\n}\n.svg-inline--fa.fa-pull-right {\n  margin-left: var(--fa-pull-margin, 0.3em);\n  width: auto;\n}\n.svg-inline--fa.fa-li {\n  width: var(--fa-li-width, 2em);\n  top: 0.25em;\n}\n.svg-inline--fa.fa-fw {\n  width: var(--fa-fw-width, 1.25em);\n}\n\n.fa-layers svg.svg-inline--fa {\n  bottom: 0;\n  left: 0;\n  margin: auto;\n  position: absolute;\n  right: 0;\n  top: 0;\n}\n\n.fa-layers-counter, .fa-layers-text {\n  display: inline-block;\n  position: absolute;\n  text-align: center;\n}\n\n.fa-layers {\n  display: inline-block;\n  height: 1em;\n  position: relative;\n  text-align: center;\n  vertical-align: -0.125em;\n  width: 1em;\n}\n.fa-layers svg.svg-inline--fa {\n  -webkit-transform-origin: center center;\n          transform-origin: center center;\n}\n\n.fa-layers-text {\n  left: 50%;\n  top: 50%;\n  -webkit-transform: translate(-50%, -50%);\n          transform: translate(-50%, -50%);\n  -webkit-transform-origin: center center;\n          transform-origin: center center;\n}\n\n.fa-layers-counter {\n  background-color: var(--fa-counter-background-color, #ff253a);\n  border-radius: var(--fa-counter-border-radius, 1em);\n  box-sizing: border-box;\n  color: var(--fa-inverse, #fff);\n  line-height: var(--fa-counter-line-height, 1);\n  max-width: var(--fa-counter-max-width, 5em);\n  min-width: var(--fa-counter-min-width, 1.5em);\n  overflow: hidden;\n  padding: var(--fa-counter-padding, 0.25em 0.5em);\n  right: var(--fa-right, 0);\n  text-overflow: ellipsis;\n  top: var(--fa-top, 0);\n  -webkit-transform: scale(var(--fa-counter-scale, 0.25));\n          transform: scale(var(--fa-counter-scale, 0.25));\n  -webkit-transform-origin: top right;\n          transform-origin: top right;\n}\n\n.fa-layers-bottom-right {\n  bottom: var(--fa-bottom, 0);\n  right: var(--fa-right, 0);\n  top: auto;\n  -webkit-transform: scale(var(--fa-layers-scale, 0.25));\n          transform: scale(var(--fa-layers-scale, 0.25));\n  -webkit-transform-origin: bottom right;\n          transform-origin: bottom right;\n}\n\n.fa-layers-bottom-left {\n  bottom: var(--fa-bottom, 0);\n  left: var(--fa-left, 0);\n  right: auto;\n  top: auto;\n  -webkit-transform: scale(var(--fa-layers-scale, 0.25));\n          transform: scale(var(--fa-layers-scale, 0.25));\n  -webkit-transform-origin: bottom left;\n          transform-origin: bottom left;\n}\n\n.fa-layers-top-right {\n  top: var(--fa-top, 0);\n  right: var(--fa-right, 0);\n  -webkit-transform: scale(var(--fa-layers-scale, 0.25));\n          transform: scale(var(--fa-layers-scale, 0.25));\n  -webkit-transform-origin: top right;\n          transform-origin: top right;\n}\n\n.fa-layers-top-left {\n  left: var(--fa-left, 0);\n  right: auto;\n  top: var(--fa-top, 0);\n  -webkit-transform: scale(var(--fa-layers-scale, 0.25));\n          transform: scale(var(--fa-layers-scale, 0.25));\n  -webkit-transform-origin: top left;\n          transform-origin: top left;\n}\n\n.fa-1x {\n  font-size: 1em;\n}\n\n.fa-2x {\n  font-size: 2em;\n}\n\n.fa-3x {\n  font-size: 3em;\n}\n\n.fa-4x {\n  font-size: 4em;\n}\n\n.fa-5x {\n  font-size: 5em;\n}\n\n.fa-6x {\n  font-size: 6em;\n}\n\n.fa-7x {\n  font-size: 7em;\n}\n\n.fa-8x {\n  font-size: 8em;\n}\n\n.fa-9x {\n  font-size: 9em;\n}\n\n.fa-10x {\n  font-size: 10em;\n}\n\n.fa-2xs {\n  font-size: 0.625em;\n  line-height: 0.1em;\n  vertical-align: 0.225em;\n}\n\n.fa-xs {\n  font-size: 0.75em;\n  line-height: 0.0833333337em;\n  vertical-align: 0.125em;\n}\n\n.fa-sm {\n  font-size: 0.875em;\n  line-height: 0.0714285718em;\n  vertical-align: 0.0535714295em;\n}\n\n.fa-lg {\n  font-size: 1.25em;\n  line-height: 0.05em;\n  vertical-align: -0.075em;\n}\n\n.fa-xl {\n  font-size: 1.5em;\n  line-height: 0.0416666682em;\n  vertical-align: -0.125em;\n}\n\n.fa-2xl {\n  font-size: 2em;\n  line-height: 0.03125em;\n  vertical-align: -0.1875em;\n}\n\n.fa-fw {\n  text-align: center;\n  width: 1.25em;\n}\n\n.fa-ul {\n  list-style-type: none;\n  margin-left: var(--fa-li-margin, 2.5em);\n  padding-left: 0;\n}\n.fa-ul > li {\n  position: relative;\n}\n\n.fa-li {\n  left: calc(var(--fa-li-width, 2em) * -1);\n  position: absolute;\n  text-align: center;\n  width: var(--fa-li-width, 2em);\n  line-height: inherit;\n}\n\n.fa-border {\n  border-color: var(--fa-border-color, #eee);\n  border-radius: var(--fa-border-radius, 0.1em);\n  border-style: var(--fa-border-style, solid);\n  border-width: var(--fa-border-width, 0.08em);\n  padding: var(--fa-border-padding, 0.2em 0.25em 0.15em);\n}\n\n.fa-pull-left {\n  float: left;\n  margin-right: var(--fa-pull-margin, 0.3em);\n}\n\n.fa-pull-right {\n  float: right;\n  margin-left: var(--fa-pull-margin, 0.3em);\n}\n\n.fa-beat {\n  -webkit-animation-name: fa-beat;\n          animation-name: fa-beat;\n  -webkit-animation-delay: var(--fa-animation-delay, 0s);\n          animation-delay: var(--fa-animation-delay, 0s);\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\n          animation-direction: var(--fa-animation-direction, normal);\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\n          animation-duration: var(--fa-animation-duration, 1s);\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n          animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);\n          animation-timing-function: var(--fa-animation-timing, ease-in-out);\n}\n\n.fa-bounce {\n  -webkit-animation-name: fa-bounce;\n          animation-name: fa-bounce;\n  -webkit-animation-delay: var(--fa-animation-delay, 0s);\n          animation-delay: var(--fa-animation-delay, 0s);\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\n          animation-direction: var(--fa-animation-direction, normal);\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\n          animation-duration: var(--fa-animation-duration, 1s);\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n          animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));\n          animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));\n}\n\n.fa-fade {\n  -webkit-animation-name: fa-fade;\n          animation-name: fa-fade;\n  -webkit-animation-delay: var(--fa-animation-delay, 0s);\n          animation-delay: var(--fa-animation-delay, 0s);\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\n          animation-direction: var(--fa-animation-direction, normal);\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\n          animation-duration: var(--fa-animation-duration, 1s);\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n          animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\n          animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\n}\n\n.fa-beat-fade {\n  -webkit-animation-name: fa-beat-fade;\n          animation-name: fa-beat-fade;\n  -webkit-animation-delay: var(--fa-animation-delay, 0s);\n          animation-delay: var(--fa-animation-delay, 0s);\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\n          animation-direction: var(--fa-animation-direction, normal);\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\n          animation-duration: var(--fa-animation-duration, 1s);\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n          animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\n          animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\n}\n\n.fa-flip {\n  -webkit-animation-name: fa-flip;\n          animation-name: fa-flip;\n  -webkit-animation-delay: var(--fa-animation-delay, 0s);\n          animation-delay: var(--fa-animation-delay, 0s);\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\n          animation-direction: var(--fa-animation-direction, normal);\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\n          animation-duration: var(--fa-animation-duration, 1s);\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n          animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);\n          animation-timing-function: var(--fa-animation-timing, ease-in-out);\n}\n\n.fa-shake {\n  -webkit-animation-name: fa-shake;\n          animation-name: fa-shake;\n  -webkit-animation-delay: var(--fa-animation-delay, 0s);\n          animation-delay: var(--fa-animation-delay, 0s);\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\n          animation-direction: var(--fa-animation-direction, normal);\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\n          animation-duration: var(--fa-animation-duration, 1s);\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n          animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  -webkit-animation-timing-function: var(--fa-animation-timing, linear);\n          animation-timing-function: var(--fa-animation-timing, linear);\n}\n\n.fa-spin {\n  -webkit-animation-name: fa-spin;\n          animation-name: fa-spin;\n  -webkit-animation-delay: var(--fa-animation-delay, 0s);\n          animation-delay: var(--fa-animation-delay, 0s);\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\n          animation-direction: var(--fa-animation-direction, normal);\n  -webkit-animation-duration: var(--fa-animation-duration, 2s);\n          animation-duration: var(--fa-animation-duration, 2s);\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n          animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  -webkit-animation-timing-function: var(--fa-animation-timing, linear);\n          animation-timing-function: var(--fa-animation-timing, linear);\n}\n\n.fa-spin-reverse {\n  --fa-animation-direction: reverse;\n}\n\n.fa-pulse,\n.fa-spin-pulse {\n  -webkit-animation-name: fa-spin;\n          animation-name: fa-spin;\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\n          animation-direction: var(--fa-animation-direction, normal);\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\n          animation-duration: var(--fa-animation-duration, 1s);\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n          animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  -webkit-animation-timing-function: var(--fa-animation-timing, steps(8));\n          animation-timing-function: var(--fa-animation-timing, steps(8));\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .fa-beat,\n.fa-bounce,\n.fa-fade,\n.fa-beat-fade,\n.fa-flip,\n.fa-pulse,\n.fa-shake,\n.fa-spin,\n.fa-spin-pulse {\n    -webkit-animation-delay: -1ms;\n            animation-delay: -1ms;\n    -webkit-animation-duration: 1ms;\n            animation-duration: 1ms;\n    -webkit-animation-iteration-count: 1;\n            animation-iteration-count: 1;\n    -webkit-transition-delay: 0s;\n            transition-delay: 0s;\n    -webkit-transition-duration: 0s;\n            transition-duration: 0s;\n  }\n}\n@-webkit-keyframes fa-beat {\n  0%, 90% {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n  }\n  45% {\n    -webkit-transform: scale(var(--fa-beat-scale, 1.25));\n            transform: scale(var(--fa-beat-scale, 1.25));\n  }\n}\n@keyframes fa-beat {\n  0%, 90% {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n  }\n  45% {\n    -webkit-transform: scale(var(--fa-beat-scale, 1.25));\n            transform: scale(var(--fa-beat-scale, 1.25));\n  }\n}\n@-webkit-keyframes fa-bounce {\n  0% {\n    -webkit-transform: scale(1, 1) translateY(0);\n            transform: scale(1, 1) translateY(0);\n  }\n  10% {\n    -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\n            transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\n  }\n  30% {\n    -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\n            transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\n  }\n  50% {\n    -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\n            transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\n  }\n  57% {\n    -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\n            transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\n  }\n  64% {\n    -webkit-transform: scale(1, 1) translateY(0);\n            transform: scale(1, 1) translateY(0);\n  }\n  100% {\n    -webkit-transform: scale(1, 1) translateY(0);\n            transform: scale(1, 1) translateY(0);\n  }\n}\n@keyframes fa-bounce {\n  0% {\n    -webkit-transform: scale(1, 1) translateY(0);\n            transform: scale(1, 1) translateY(0);\n  }\n  10% {\n    -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\n            transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\n  }\n  30% {\n    -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\n            transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\n  }\n  50% {\n    -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\n            transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\n  }\n  57% {\n    -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\n            transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\n  }\n  64% {\n    -webkit-transform: scale(1, 1) translateY(0);\n            transform: scale(1, 1) translateY(0);\n  }\n  100% {\n    -webkit-transform: scale(1, 1) translateY(0);\n            transform: scale(1, 1) translateY(0);\n  }\n}\n@-webkit-keyframes fa-fade {\n  50% {\n    opacity: var(--fa-fade-opacity, 0.4);\n  }\n}\n@keyframes fa-fade {\n  50% {\n    opacity: var(--fa-fade-opacity, 0.4);\n  }\n}\n@-webkit-keyframes fa-beat-fade {\n  0%, 100% {\n    opacity: var(--fa-beat-fade-opacity, 0.4);\n    -webkit-transform: scale(1);\n            transform: scale(1);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));\n            transform: scale(var(--fa-beat-fade-scale, 1.125));\n  }\n}\n@keyframes fa-beat-fade {\n  0%, 100% {\n    opacity: var(--fa-beat-fade-opacity, 0.4);\n    -webkit-transform: scale(1);\n            transform: scale(1);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));\n            transform: scale(var(--fa-beat-fade-scale, 1.125));\n  }\n}\n@-webkit-keyframes fa-flip {\n  50% {\n    -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\n            transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\n  }\n}\n@keyframes fa-flip {\n  50% {\n    -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\n            transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\n  }\n}\n@-webkit-keyframes fa-shake {\n  0% {\n    -webkit-transform: rotate(-15deg);\n            transform: rotate(-15deg);\n  }\n  4% {\n    -webkit-transform: rotate(15deg);\n            transform: rotate(15deg);\n  }\n  8%, 24% {\n    -webkit-transform: rotate(-18deg);\n            transform: rotate(-18deg);\n  }\n  12%, 28% {\n    -webkit-transform: rotate(18deg);\n            transform: rotate(18deg);\n  }\n  16% {\n    -webkit-transform: rotate(-22deg);\n            transform: rotate(-22deg);\n  }\n  20% {\n    -webkit-transform: rotate(22deg);\n            transform: rotate(22deg);\n  }\n  32% {\n    -webkit-transform: rotate(-12deg);\n            transform: rotate(-12deg);\n  }\n  36% {\n    -webkit-transform: rotate(12deg);\n            transform: rotate(12deg);\n  }\n  40%, 100% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n}\n@keyframes fa-shake {\n  0% {\n    -webkit-transform: rotate(-15deg);\n            transform: rotate(-15deg);\n  }\n  4% {\n    -webkit-transform: rotate(15deg);\n            transform: rotate(15deg);\n  }\n  8%, 24% {\n    -webkit-transform: rotate(-18deg);\n            transform: rotate(-18deg);\n  }\n  12%, 28% {\n    -webkit-transform: rotate(18deg);\n            transform: rotate(18deg);\n  }\n  16% {\n    -webkit-transform: rotate(-22deg);\n            transform: rotate(-22deg);\n  }\n  20% {\n    -webkit-transform: rotate(22deg);\n            transform: rotate(22deg);\n  }\n  32% {\n    -webkit-transform: rotate(-12deg);\n            transform: rotate(-12deg);\n  }\n  36% {\n    -webkit-transform: rotate(12deg);\n            transform: rotate(12deg);\n  }\n  40%, 100% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n}\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n.fa-rotate-90 {\n  -webkit-transform: rotate(90deg);\n          transform: rotate(90deg);\n}\n\n.fa-rotate-180 {\n  -webkit-transform: rotate(180deg);\n          transform: rotate(180deg);\n}\n\n.fa-rotate-270 {\n  -webkit-transform: rotate(270deg);\n          transform: rotate(270deg);\n}\n\n.fa-flip-horizontal {\n  -webkit-transform: scale(-1, 1);\n          transform: scale(-1, 1);\n}\n\n.fa-flip-vertical {\n  -webkit-transform: scale(1, -1);\n          transform: scale(1, -1);\n}\n\n.fa-flip-both,\n.fa-flip-horizontal.fa-flip-vertical {\n  -webkit-transform: scale(-1, -1);\n          transform: scale(-1, -1);\n}\n\n.fa-rotate-by {\n  -webkit-transform: rotate(var(--fa-rotate-angle, 0));\n          transform: rotate(var(--fa-rotate-angle, 0));\n}\n\n.fa-stack {\n  display: inline-block;\n  vertical-align: middle;\n  height: 2em;\n  position: relative;\n  width: 2.5em;\n}\n\n.fa-stack-1x,\n.fa-stack-2x {\n  bottom: 0;\n  left: 0;\n  margin: auto;\n  position: absolute;\n  right: 0;\n  top: 0;\n  z-index: var(--fa-stack-z-index, auto);\n}\n\n.svg-inline--fa.fa-stack-1x {\n  height: 1em;\n  width: 1.25em;\n}\n.svg-inline--fa.fa-stack-2x {\n  height: 2em;\n  width: 2.5em;\n}\n\n.fa-inverse {\n  color: var(--fa-inverse, #fff);\n}\n\n.sr-only,\n.fa-sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border-width: 0;\n}\n\n.sr-only-focusable:not(:focus),\n.fa-sr-only-focusable:not(:focus) {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border-width: 0;\n}\n\n.svg-inline--fa .fa-primary {\n  fill: var(--fa-primary-color, currentColor);\n  opacity: var(--fa-primary-opacity, 1);\n}\n\n.svg-inline--fa .fa-secondary {\n  fill: var(--fa-secondary-color, currentColor);\n  opacity: var(--fa-secondary-opacity, 0.4);\n}\n\n.svg-inline--fa.fa-swap-opacity .fa-primary {\n  opacity: var(--fa-secondary-opacity, 0.4);\n}\n\n.svg-inline--fa.fa-swap-opacity .fa-secondary {\n  opacity: var(--fa-primary-opacity, 1);\n}\n\n.svg-inline--fa mask .fa-primary,\n.svg-inline--fa mask .fa-secondary {\n  fill: black;\n}\n\n.fad.fa-inverse,\n.fa-duotone.fa-inverse {\n  color: var(--fa-inverse, #fff);\n}';function xe(){var e=D,t=R,a=de.cssPrefix,n=de.replacementClass,o=we;if(a!==e||n!==t){var i=new RegExp("\\.".concat(e,"\\-"),"g"),r=new RegExp("\\--".concat(e,"\\-"),"g"),s=new RegExp("\\.".concat(t),"g");o=o.replace(i,".".concat(a,"-")).replace(r,"--".concat(a,"-")).replace(s,".".concat(n))}return o}var ke=!1;function Ce(){de.autoAddCss&&!ke&&(!function(e){if(e&&A){var t=j.createElement("style");t.setAttribute("type","text/css"),t.innerHTML=e;for(var a=j.head.childNodes,n=null,o=a.length-1;o>-1;o--){var i=a[o],r=(i.tagName||"").toUpperCase();["STYLE","LINK"].indexOf(r)>-1&&(n=i)}j.head.insertBefore(t,n)}}(xe()),ke=!0)}var je={mixout:function(){return{dom:{css:xe,insertCss:Ce}}},hooks:function(){return{beforeDOMElementCreation:function(){Ce()},beforeI2svg:function(){Ce()}}}},Se=C||{};Se[E]||(Se[E]={}),Se[E].styles||(Se[E].styles={}),Se[E].hooks||(Se[E].hooks={}),Se[E].shims||(Se[E].shims=[]);var Ie=Se[E],Ae=[],Ne=!1;function Ee(e){var t=e.tag,a=e.attributes,n=void 0===a?{}:a,o=e.children,i=void 0===o?[]:o;return"string"===typeof e?_e(e):"<".concat(t," ").concat(function(e){return Object.keys(e||{}).reduce((function(t,a){return t+"".concat(a,'="').concat(_e(e[a]),'" ')}),"").trim()}(n),">").concat(i.map(Ee).join(""),"</").concat(t,">")}function Te(e,t,a){if(e&&e[t]&&e[t][a])return{prefix:t,iconName:a,icon:e[t][a]}}A&&((Ne=(j.documentElement.doScroll?/^loaded|^c/:/^loaded|^i|^c/).test(j.readyState))||j.addEventListener("DOMContentLoaded",(function e(){j.removeEventListener("DOMContentLoaded",e),Ne=1,Ae.map((function(e){return e()}))})));var De=function(e,t,a,n){var o,i,r,s=Object.keys(e),l=s.length,c=void 0!==n?function(e,t){return function(a,n,o,i){return e.call(t,a,n,o,i)}}(t,n):t;for(void 0===a?(o=1,r=e[s[0]]):(o=0,r=a);o<l;o++)r=c(r,e[i=s[o]],i,e);return r};function Re(e){var t=function(e){for(var t=[],a=0,n=e.length;a<n;){var o=e.charCodeAt(a++);if(o>=55296&&o<=56319&&a<n){var i=e.charCodeAt(a++);56320==(64512&i)?t.push(((1023&o)<<10)+(1023&i)+65536):(t.push(o),a--)}else t.push(o)}return t}(e);return 1===t.length?t[0].toString(16):null}function Me(e){return Object.keys(e).reduce((function(t,a){var n=e[a];return!!n.icon?t[n.iconName]=n.icon:t[a]=n,t}),{})}function Oe(e,t){var a=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}).skipHooks,n=void 0!==a&&a,i=Me(t);"function"!==typeof Ie.hooks.addPack||n?Ie.styles[e]=o(o({},Ie.styles[e]||{}),i):Ie.hooks.addPack(e,Me(t)),"fas"===e&&Oe("fa",t)}var qe,Ge,Pe,Fe=Ie.styles,Le=Ie.shims,We=(s(qe={},H,Object.values(J[H])),s(qe,U,Object.values(J[U])),qe),Be=null,He={},Ue={},Ke={},ze={},Ve={},Ye=(s(Ge={},H,Object.keys(V[H])),s(Ge,U,Object.keys(V[U])),Ge);function Je(e,t){var a,n=t.split("-"),o=n[0],i=n.slice(1).join("-");return o!==e||""===i||(a=i,~re.indexOf(a))?null:i}var $e,Ze=function(){var e=function(e){return De(Fe,(function(t,a,n){return t[n]=De(a,e,{}),t}),{})};He=e((function(e,t,a){(t[3]&&(e[t[3]]=a),t[2])&&t[2].filter((function(e){return"number"===typeof e})).forEach((function(t){e[t.toString(16)]=a}));return e})),Ue=e((function(e,t,a){(e[a]=a,t[2])&&t[2].filter((function(e){return"string"===typeof e})).forEach((function(t){e[t]=a}));return e})),Ve=e((function(e,t,a){var n=t[2];return e[a]=a,n.forEach((function(t){e[t]=a})),e}));var t="far"in Fe||de.autoFetchSvg,a=De(Le,(function(e,a){var n=a[0],o=a[1],i=a[2];return"far"!==o||t||(o="fas"),"string"===typeof n&&(e.names[n]={prefix:o,iconName:i}),"number"===typeof n&&(e.unicodes[n.toString(16)]={prefix:o,iconName:i}),e}),{names:{},unicodes:{}});Ke=a.names,ze=a.unicodes,Be=nt(de.styleDefault,{family:de.familyDefault})};function Qe(e,t){return(He[e]||{})[t]}function Xe(e,t){return(Ve[e]||{})[t]}function et(e){return Ke[e]||{prefix:null,iconName:null}}function tt(){return Be}$e=function(e){Be=nt(e.styleDefault,{family:de.familyDefault})},ue.push($e),Ze();var at=function(){return{prefix:null,iconName:null,rest:[]}};function nt(e){var t=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).family,a=void 0===t?H:t,n=V[a][e],o=Y[a][e]||Y[a][n],i=e in Ie.styles?e:null;return o||i||null}var ot=(s(Pe={},H,Object.keys(J[H])),s(Pe,U,Object.keys(J[U])),Pe);function it(e){var t,a=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).skipLookups,n=void 0!==a&&a,o=(s(t={},H,"".concat(de.cssPrefix,"-").concat(H)),s(t,U,"".concat(de.cssPrefix,"-").concat(U)),t),i=null,r=H;(e.includes(o[H])||e.some((function(e){return ot[H].includes(e)})))&&(r=H),(e.includes(o[U])||e.some((function(e){return ot[U].includes(e)})))&&(r=U);var l=e.reduce((function(e,t){var a=Je(de.cssPrefix,t);if(Fe[t]?(t=We[r].includes(t)?$[r][t]:t,i=t,e.prefix=t):Ye[r].indexOf(t)>-1?(i=t,e.prefix=nt(t,{family:r})):a?e.iconName=a:t!==de.replacementClass&&t!==o[H]&&t!==o[U]&&e.rest.push(t),!n&&e.prefix&&e.iconName){var s="fa"===i?et(e.iconName):{},l=Xe(e.prefix,e.iconName);s.prefix&&(i=null),e.iconName=s.iconName||l||e.iconName,e.prefix=s.prefix||e.prefix,"far"!==e.prefix||Fe.far||!Fe.fas||de.autoFetchSvg||(e.prefix="fas")}return e}),at());return(e.includes("fa-brands")||e.includes("fab"))&&(l.prefix="fab"),(e.includes("fa-duotone")||e.includes("fad"))&&(l.prefix="fad"),l.prefix||r!==U||!Fe.fass&&!de.autoFetchSvg||(l.prefix="fass",l.iconName=Xe(l.prefix,l.iconName)||l.iconName),"fa"!==l.prefix&&"fa"!==i||(l.prefix=tt()||"fas"),l}var rt=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.definitions={}}var t,a,n;return t=e,a=[{key:"add",value:function(){for(var e=this,t=arguments.length,a=new Array(t),n=0;n<t;n++)a[n]=arguments[n];var i=a.reduce(this._pullDefinitions,{});Object.keys(i).forEach((function(t){e.definitions[t]=o(o({},e.definitions[t]||{}),i[t]),Oe(t,i[t]);var a=J[H][t];a&&Oe(a,i[t]),Ze()}))}},{key:"reset",value:function(){this.definitions={}}},{key:"_pullDefinitions",value:function(e,t){var a=t.prefix&&t.iconName&&t.icon?{0:t}:t;return Object.keys(a).map((function(t){var n=a[t],o=n.prefix,i=n.iconName,r=n.icon,s=r[2];e[o]||(e[o]={}),s.length>0&&s.forEach((function(t){"string"===typeof t&&(e[o][t]=r)})),e[o][i]=r})),e}}],a&&r(t.prototype,a),n&&r(t,n),Object.defineProperty(t,"prototype",{writable:!1}),e}(),st=[],lt={},ct={},dt=Object.keys(ct);function ut(e,t){for(var a=arguments.length,n=new Array(a>2?a-2:0),o=2;o<a;o++)n[o-2]=arguments[o];return(lt[e]||[]).forEach((function(e){t=e.apply(null,[t].concat(n))})),t}function ht(e){for(var t=arguments.length,a=new Array(t>1?t-1:0),n=1;n<t;n++)a[n-1]=arguments[n];(lt[e]||[]).forEach((function(e){e.apply(null,a)}))}function mt(){var e=arguments[0],t=Array.prototype.slice.call(arguments,1);return ct[e]?ct[e].apply(null,t):void 0}function pt(e){"fa"===e.prefix&&(e.prefix="fas");var t=e.iconName,a=e.prefix||tt();if(t)return t=Xe(a,t)||t,Te(ft.definitions,a,t)||Te(Ie.styles,a,t)}var ft=new rt,gt={i2svg:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return A?(ht("beforeI2svg",e),mt("pseudoElements2svg",e),mt("i2svg",e)):Promise.reject("Operation requires a DOM of some kind.")},watch:function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},a=t.autoReplaceSvgRoot;!1===de.autoReplaceSvg&&(de.autoReplaceSvg=!0),de.observeMutations=!0,e=function(){_t({autoReplaceSvgRoot:a}),ht("watch",t)},A&&(Ne?setTimeout(e,0):Ae.push(e))}},yt={noAuto:function(){de.autoReplaceSvg=!1,de.observeMutations=!1,ht("noAuto")},config:de,dom:gt,parse:{icon:function(e){if(null===e)return null;if("object"===i(e)&&e.prefix&&e.iconName)return{prefix:e.prefix,iconName:Xe(e.prefix,e.iconName)||e.iconName};if(Array.isArray(e)&&2===e.length){var t=0===e[1].indexOf("fa-")?e[1].slice(3):e[1],a=nt(e[0]);return{prefix:a,iconName:Xe(a,t)||t}}if("string"===typeof e&&(e.indexOf("".concat(de.cssPrefix,"-"))>-1||e.match(Z))){var n=it(e.split(" "),{skipLookups:!0});return{prefix:n.prefix||tt(),iconName:Xe(n.prefix,n.iconName)||n.iconName}}if("string"===typeof e){var o=tt();return{prefix:o,iconName:Xe(o,e)||e}}}},library:ft,findIconDefinition:pt,toHtml:Ee},_t=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).autoReplaceSvgRoot,t=void 0===e?j:e;(Object.keys(Ie.styles).length>0||de.autoFetchSvg)&&A&&de.autoReplaceSvg&&yt.dom.i2svg({node:t})};function bt(e,t){return Object.defineProperty(e,"abstract",{get:t}),Object.defineProperty(e,"html",{get:function(){return e.abstract.map((function(e){return Ee(e)}))}}),Object.defineProperty(e,"node",{get:function(){if(A){var t=j.createElement("div");return t.innerHTML=e.html,t.children}}}),e}function vt(e){var t=e.icons,a=t.main,n=t.mask,i=e.prefix,r=e.iconName,s=e.transform,l=e.symbol,c=e.title,d=e.maskId,u=e.titleId,h=e.extra,m=e.watchable,p=void 0!==m&&m,f=n.found?n:a,g=f.width,y=f.height,_="fak"===i,b=[de.replacementClass,r?"".concat(de.cssPrefix,"-").concat(r):""].filter((function(e){return-1===h.classes.indexOf(e)})).filter((function(e){return""!==e||!!e})).concat(h.classes).join(" "),v={children:[],attributes:o(o({},h.attributes),{},{"data-prefix":i,"data-icon":r,class:b,role:h.attributes.role||"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 ".concat(g," ").concat(y)})},w=_&&!~h.classes.indexOf("fa-fw")?{width:"".concat(g/y*16*.0625,"em")}:{};p&&(v.attributes[M]=""),c&&(v.children.push({tag:"title",attributes:{id:v.attributes["aria-labelledby"]||"title-".concat(u||fe())},children:[c]}),delete v.attributes.title);var x=o(o({},v),{},{prefix:i,iconName:r,main:a,mask:n,maskId:d,transform:s,symbol:l,styles:o(o({},w),h.styles)}),k=n.found&&a.found?mt("generateAbstractMask",x)||{children:[],attributes:{}}:mt("generateAbstractIcon",x)||{children:[],attributes:{}},C=k.children,j=k.attributes;return x.children=C,x.attributes=j,l?function(e){var t=e.prefix,a=e.iconName,n=e.children,i=e.attributes,r=e.symbol,s=!0===r?"".concat(t,"-").concat(de.cssPrefix,"-").concat(a):r;return[{tag:"svg",attributes:{style:"display: none;"},children:[{tag:"symbol",attributes:o(o({},i),{},{id:s}),children:n}]}]}(x):function(e){var t=e.children,a=e.main,n=e.mask,i=e.attributes,r=e.styles,s=e.transform;if(ve(s)&&a.found&&!n.found){var l={x:a.width/a.height/2,y:.5};i.style=be(o(o({},r),{},{"transform-origin":"".concat(l.x+s.x/16,"em ").concat(l.y+s.y/16,"em")}))}return[{tag:"svg",attributes:i,children:t}]}(x)}function wt(e){var t=e.content,a=e.width,n=e.height,i=e.transform,r=e.title,s=e.extra,l=e.watchable,c=void 0!==l&&l,d=o(o(o({},s.attributes),r?{title:r}:{}),{},{class:s.classes.join(" ")});c&&(d[M]="");var u=o({},s.styles);ve(i)&&(u.transform=function(e){var t=e.transform,a=e.width,n=void 0===a?T:a,o=e.height,i=void 0===o?T:o,r=e.startCentered,s=void 0!==r&&r,l="";return l+=s&&N?"translate(".concat(t.x/he-n/2,"em, ").concat(t.y/he-i/2,"em) "):s?"translate(calc(-50% + ".concat(t.x/he,"em), calc(-50% + ").concat(t.y/he,"em)) "):"translate(".concat(t.x/he,"em, ").concat(t.y/he,"em) "),l+="scale(".concat(t.size/he*(t.flipX?-1:1),", ").concat(t.size/he*(t.flipY?-1:1),") "),l+"rotate(".concat(t.rotate,"deg) ")}({transform:i,startCentered:!0,width:a,height:n}),u["-webkit-transform"]=u.transform);var h=be(u);h.length>0&&(d.style=h);var m=[];return m.push({tag:"span",attributes:d,children:[t]}),r&&m.push({tag:"span",attributes:{class:"sr-only"},children:[r]}),m}var xt=Ie.styles;function kt(e){var t=e[0],a=e[1],n=l(e.slice(4),1)[0];return{found:!0,width:t,height:a,icon:Array.isArray(n)?{tag:"g",attributes:{class:"".concat(de.cssPrefix,"-").concat(oe.GROUP)},children:[{tag:"path",attributes:{class:"".concat(de.cssPrefix,"-").concat(oe.SECONDARY),fill:"currentColor",d:n[0]}},{tag:"path",attributes:{class:"".concat(de.cssPrefix,"-").concat(oe.PRIMARY),fill:"currentColor",d:n[1]}}]}:{tag:"path",attributes:{fill:"currentColor",d:n}}}}var Ct={found:!1,width:512,height:512};function jt(e,t){var a=t;return"fa"===t&&null!==de.styleDefault&&(t=tt()),new Promise((function(n,i){mt("missingIconAbstract");if("fa"===a){var r=et(e)||{};e=r.iconName||e,t=r.prefix||t}if(e&&t&&xt[t]&&xt[t][e])return n(kt(xt[t][e]));!function(e,t){B||de.showMissingIcons||!e||console.error('Icon with name "'.concat(e,'" and prefix "').concat(t,'" is missing.'))}(e,t),n(o(o({},Ct),{},{icon:de.showMissingIcons&&e&&mt("missingIconAbstract")||{}}))}))}var St=function(){},It=de.measurePerformance&&I&&I.mark&&I.measure?I:{mark:St,measure:St},At='FA "6.5.2"',Nt=function(e){It.mark("".concat(At," ").concat(e," ends")),It.measure("".concat(At," ").concat(e),"".concat(At," ").concat(e," begins"),"".concat(At," ").concat(e," ends"))},Et={begin:function(e){return It.mark("".concat(At," ").concat(e," begins")),function(){return Nt(e)}},end:Nt},Tt=function(){};function Dt(e){return"string"===typeof(e.getAttribute?e.getAttribute(M):null)}function Rt(e){return j.createElementNS("http://www.w3.org/2000/svg",e)}function Mt(e){return j.createElement(e)}function Ot(e){var t=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).ceFn,a=void 0===t?"svg"===e.tag?Rt:Mt:t;if("string"===typeof e)return j.createTextNode(e);var n=a(e.tag);return Object.keys(e.attributes||[]).forEach((function(t){n.setAttribute(t,e.attributes[t])})),(e.children||[]).forEach((function(e){n.appendChild(Ot(e,{ceFn:a}))})),n}var qt={replace:function(e){var t=e[0];if(t.parentNode)if(e[1].forEach((function(e){t.parentNode.insertBefore(Ot(e),t)})),null===t.getAttribute(M)&&de.keepOriginalSource){var a=j.createComment(function(e){var t=" ".concat(e.outerHTML," ");return"".concat(t,"Font Awesome fontawesome.com ")}(t));t.parentNode.replaceChild(a,t)}else t.remove()},nest:function(e){var t=e[0],a=e[1];if(~ye(t).indexOf(de.replacementClass))return qt.replace(e);var n=new RegExp("".concat(de.cssPrefix,"-.*"));if(delete a[0].attributes.id,a[0].attributes.class){var o=a[0].attributes.class.split(" ").reduce((function(e,t){return t===de.replacementClass||t.match(n)?e.toSvg.push(t):e.toNode.push(t),e}),{toNode:[],toSvg:[]});a[0].attributes.class=o.toSvg.join(" "),0===o.toNode.length?t.removeAttribute("class"):t.setAttribute("class",o.toNode.join(" "))}var i=a.map((function(e){return Ee(e)})).join("\n");t.setAttribute(M,""),t.innerHTML=i}};function Gt(e){e()}function Pt(e,t){var a="function"===typeof t?t:Tt;if(0===e.length)a();else{var n=Gt;de.mutateApproach===L&&(n=C.requestAnimationFrame||Gt),n((function(){var t=!0===de.autoReplaceSvg?qt.replace:qt[de.autoReplaceSvg]||qt.replace,n=Et.begin("mutate");e.map(t),n(),a()}))}}var Ft=!1;function Lt(){Ft=!0}function Wt(){Ft=!1}var Bt=null;function Ht(e){if(S&&de.observeMutations){var t=e.treeCallback,a=void 0===t?Tt:t,n=e.nodeCallback,o=void 0===n?Tt:n,i=e.pseudoElementsCallback,r=void 0===i?Tt:i,s=e.observeMutationsRoot,l=void 0===s?j:s;Bt=new S((function(e){if(!Ft){var t=tt();ge(e).forEach((function(e){if("childList"===e.type&&e.addedNodes.length>0&&!Dt(e.addedNodes[0])&&(de.searchPseudoElements&&r(e.target),a(e.target)),"attributes"===e.type&&e.target.parentNode&&de.searchPseudoElements&&r(e.target.parentNode),"attributes"===e.type&&Dt(e.target)&&~ne.indexOf(e.attributeName))if("class"===e.attributeName&&function(e){var t=e.getAttribute?e.getAttribute(G):null,a=e.getAttribute?e.getAttribute(P):null;return t&&a}(e.target)){var n=it(ye(e.target)),i=n.prefix,s=n.iconName;e.target.setAttribute(G,i||t),s&&e.target.setAttribute(P,s)}else(l=e.target)&&l.classList&&l.classList.contains&&l.classList.contains(de.replacementClass)&&o(e.target);var l}))}})),A&&Bt.observe(l,{childList:!0,attributes:!0,characterData:!0,subtree:!0})}}function Ut(e){var t,a,n=e.getAttribute("data-prefix"),o=e.getAttribute("data-icon"),i=void 0!==e.innerText?e.innerText.trim():"",r=it(ye(e));return r.prefix||(r.prefix=tt()),n&&o&&(r.prefix=n,r.iconName=o),r.iconName&&r.prefix||(r.prefix&&i.length>0&&(r.iconName=(t=r.prefix,a=e.innerText,(Ue[t]||{})[a]||Qe(r.prefix,Re(e.innerText)))),!r.iconName&&de.autoFetchSvg&&e.firstChild&&e.firstChild.nodeType===Node.TEXT_NODE&&(r.iconName=e.firstChild.data)),r}function Kt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{styleParser:!0},a=Ut(e),n=a.iconName,i=a.prefix,r=a.rest,s=function(e){var t=ge(e.attributes).reduce((function(e,t){return"class"!==e.name&&"style"!==e.name&&(e[t.name]=t.value),e}),{}),a=e.getAttribute("title"),n=e.getAttribute("data-fa-title-id");return de.autoA11y&&(a?t["aria-labelledby"]="".concat(de.replacementClass,"-title-").concat(n||fe()):(t["aria-hidden"]="true",t.focusable="false")),t}(e),l=ut("parseNodeAttributes",{},e),c=t.styleParser?function(e){var t=e.getAttribute("style"),a=[];return t&&(a=t.split(";").reduce((function(e,t){var a=t.split(":"),n=a[0],o=a.slice(1);return n&&o.length>0&&(e[n]=o.join(":").trim()),e}),{})),a}(e):[];return o({iconName:n,title:e.getAttribute("title"),titleId:e.getAttribute("data-fa-title-id"),prefix:i,transform:me,mask:{iconName:null,prefix:null,rest:[]},maskId:null,symbol:!1,extra:{classes:r,styles:c,attributes:s}},l)}var zt=Ie.styles;function Vt(e){var t="nest"===de.autoReplaceSvg?Kt(e,{styleParser:!1}):Kt(e);return~t.extra.classes.indexOf(Q)?mt("generateLayersText",e,t):mt("generateSvgReplacementMutation",e,t)}var Yt=new Set;function Jt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(!A)return Promise.resolve();var a=j.documentElement.classList,n=function(e){return a.add("".concat(F,"-").concat(e))},o=function(e){return a.remove("".concat(F,"-").concat(e))},i=de.autoFetchSvg?Yt:K.map((function(e){return"fa-".concat(e)})).concat(Object.keys(zt));i.includes("fa")||i.push("fa");var r=[".".concat(Q,":not([").concat(M,"])")].concat(i.map((function(e){return".".concat(e,":not([").concat(M,"])")}))).join(", ");if(0===r.length)return Promise.resolve();var s=[];try{s=ge(e.querySelectorAll(r))}catch(Ma){}if(!(s.length>0))return Promise.resolve();n("pending"),o("complete");var l=Et.begin("onTree"),c=s.reduce((function(e,t){try{var a=Vt(t);a&&e.push(a)}catch(Ma){B||"MissingIcon"===Ma.name&&console.error(Ma)}return e}),[]);return new Promise((function(e,a){Promise.all(c).then((function(a){Pt(a,(function(){n("active"),n("complete"),o("pending"),"function"===typeof t&&t(),l(),e()}))})).catch((function(e){l(),a(e)}))}))}function $t(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;Vt(e).then((function(e){e&&Pt([e],t)}))}K.map((function(e){Yt.add("fa-".concat(e))})),Object.keys(V[H]).map(Yt.add.bind(Yt)),Object.keys(V[U]).map(Yt.add.bind(Yt)),Yt=c(Yt);var Zt=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=t.transform,n=void 0===a?me:a,i=t.symbol,r=void 0!==i&&i,s=t.mask,l=void 0===s?null:s,c=t.maskId,d=void 0===c?null:c,u=t.title,h=void 0===u?null:u,m=t.titleId,p=void 0===m?null:m,f=t.classes,g=void 0===f?[]:f,y=t.attributes,_=void 0===y?{}:y,b=t.styles,v=void 0===b?{}:b;if(e){var w=e.prefix,x=e.iconName,k=e.icon;return bt(o({type:"icon"},e),(function(){return ht("beforeDOMElementCreation",{iconDefinition:e,params:t}),de.autoA11y&&(h?_["aria-labelledby"]="".concat(de.replacementClass,"-title-").concat(p||fe()):(_["aria-hidden"]="true",_.focusable="false")),vt({icons:{main:kt(k),mask:l?kt(l.icon):{found:!1,width:null,height:null,icon:{}}},prefix:w,iconName:x,transform:o(o({},me),n),symbol:r,title:h,maskId:d,titleId:p,extra:{attributes:_,styles:v,classes:g}})}))}},Qt={mixout:function(){return{icon:(e=Zt,function(t){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=(t||{}).icon?t:pt(t||{}),i=a.mask;return i&&(i=(i||{}).icon?i:pt(i||{})),e(n,o(o({},a),{},{mask:i}))})};var e},hooks:function(){return{mutationObserverCallbacks:function(e){return e.treeCallback=Jt,e.nodeCallback=$t,e}}},provides:function(e){e.i2svg=function(e){var t=e.node,a=void 0===t?j:t,n=e.callback;return Jt(a,void 0===n?function(){}:n)},e.generateSvgReplacementMutation=function(e,t){var a=t.iconName,n=t.title,o=t.titleId,i=t.prefix,r=t.transform,s=t.symbol,c=t.mask,d=t.maskId,u=t.extra;return new Promise((function(t,h){Promise.all([jt(a,i),c.iconName?jt(c.iconName,c.prefix):Promise.resolve({found:!1,width:512,height:512,icon:{}})]).then((function(c){var h=l(c,2),m=h[0],p=h[1];t([e,vt({icons:{main:m,mask:p},prefix:i,iconName:a,transform:r,symbol:s,maskId:d,title:n,titleId:o,extra:u,watchable:!0})])})).catch(h)}))},e.generateAbstractIcon=function(e){var t,a=e.children,n=e.attributes,o=e.main,i=e.transform,r=be(e.styles);return r.length>0&&(n.style=r),ve(i)&&(t=mt("generateAbstractTransformGrouping",{main:o,transform:i,containerWidth:o.width,iconWidth:o.width})),a.push(t||o.icon),{children:a,attributes:n}}}},Xt={mixout:function(){return{layer:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=t.classes,n=void 0===a?[]:a;return bt({type:"layer"},(function(){ht("beforeDOMElementCreation",{assembler:e,params:t});var a=[];return e((function(e){Array.isArray(e)?e.map((function(e){a=a.concat(e.abstract)})):a=a.concat(e.abstract)})),[{tag:"span",attributes:{class:["".concat(de.cssPrefix,"-layers")].concat(c(n)).join(" ")},children:a}]}))}}}},ea={mixout:function(){return{counter:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=t.title,n=void 0===a?null:a,i=t.classes,r=void 0===i?[]:i,s=t.attributes,l=void 0===s?{}:s,d=t.styles,u=void 0===d?{}:d;return bt({type:"counter",content:e},(function(){return ht("beforeDOMElementCreation",{content:e,params:t}),function(e){var t=e.content,a=e.title,n=e.extra,i=o(o(o({},n.attributes),a?{title:a}:{}),{},{class:n.classes.join(" ")}),r=be(n.styles);r.length>0&&(i.style=r);var s=[];return s.push({tag:"span",attributes:i,children:[t]}),a&&s.push({tag:"span",attributes:{class:"sr-only"},children:[a]}),s}({content:e.toString(),title:n,extra:{attributes:l,styles:u,classes:["".concat(de.cssPrefix,"-layers-counter")].concat(c(r))}})}))}}}},ta={mixout:function(){return{text:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=t.transform,n=void 0===a?me:a,i=t.title,r=void 0===i?null:i,s=t.classes,l=void 0===s?[]:s,d=t.attributes,u=void 0===d?{}:d,h=t.styles,m=void 0===h?{}:h;return bt({type:"text",content:e},(function(){return ht("beforeDOMElementCreation",{content:e,params:t}),wt({content:e,transform:o(o({},me),n),title:r,extra:{attributes:u,styles:m,classes:["".concat(de.cssPrefix,"-layers-text")].concat(c(l))}})}))}}},provides:function(e){e.generateLayersText=function(e,t){var a=t.title,n=t.transform,o=t.extra,i=null,r=null;if(N){var s=parseInt(getComputedStyle(e).fontSize,10),l=e.getBoundingClientRect();i=l.width/s,r=l.height/s}return de.autoA11y&&!a&&(o.attributes["aria-hidden"]="true"),Promise.resolve([e,wt({content:e.innerHTML,width:i,height:r,transform:n,title:a,extra:o,watchable:!0})])}}},aa=new RegExp('"',"ug"),na=[1105920,1112319];function oa(e,t){var a="".concat(q).concat(t.replace(":","-"));return new Promise((function(n,i){if(null!==e.getAttribute(a))return n();var r=ge(e.children).filter((function(e){return e.getAttribute(O)===t}))[0],s=C.getComputedStyle(e,t),l=s.getPropertyValue("font-family").match(X),c=s.getPropertyValue("font-weight"),d=s.getPropertyValue("content");if(r&&!l)return e.removeChild(r),n();if(l&&"none"!==d&&""!==d){var u=s.getPropertyValue("content"),h=~["Sharp"].indexOf(l[2])?U:H,m=~["Solid","Regular","Light","Thin","Duotone","Brands","Kit"].indexOf(l[2])?Y[h][l[2].toLowerCase()]:ee[h][c],p=function(e){var t=e.replace(aa,""),a=function(e,t){var a,n=e.length,o=e.charCodeAt(t);return o>=55296&&o<=56319&&n>t+1&&(a=e.charCodeAt(t+1))>=56320&&a<=57343?1024*(o-55296)+a-56320+65536:o}(t,0),n=a>=na[0]&&a<=na[1],o=2===t.length&&t[0]===t[1];return{value:Re(o?t[0]:t),isSecondary:n||o}}(u),f=p.value,g=p.isSecondary,y=l[0].startsWith("FontAwesome"),_=Qe(m,f),b=_;if(y){var v=function(e){var t=ze[e],a=Qe("fas",e);return t||(a?{prefix:"fas",iconName:a}:null)||{prefix:null,iconName:null}}(f);v.iconName&&v.prefix&&(_=v.iconName,m=v.prefix)}if(!_||g||r&&r.getAttribute(G)===m&&r.getAttribute(P)===b)n();else{e.setAttribute(a,b),r&&e.removeChild(r);var w={iconName:null,title:null,titleId:null,prefix:null,transform:me,symbol:!1,mask:{iconName:null,prefix:null,rest:[]},maskId:null,extra:{classes:[],styles:{},attributes:{}}},x=w.extra;x.attributes[O]=t,jt(_,m).then((function(i){var r=vt(o(o({},w),{},{icons:{main:i,mask:at()},prefix:m,iconName:b,extra:x,watchable:!0})),s=j.createElementNS("http://www.w3.org/2000/svg","svg");"::before"===t?e.insertBefore(s,e.firstChild):e.appendChild(s),s.outerHTML=r.map((function(e){return Ee(e)})).join("\n"),e.removeAttribute(a),n()})).catch(i)}}else n()}))}function ia(e){return Promise.all([oa(e,"::before"),oa(e,"::after")])}function ra(e){return e.parentNode!==document.head&&!~W.indexOf(e.tagName.toUpperCase())&&!e.getAttribute(O)&&(!e.parentNode||"svg"!==e.parentNode.tagName)}function sa(e){if(A)return new Promise((function(t,a){var n=ge(e.querySelectorAll("*")).filter(ra).map(ia),o=Et.begin("searchPseudoElements");Lt(),Promise.all(n).then((function(){o(),Wt(),t()})).catch((function(){o(),Wt(),a()}))}))}var la=!1,ca=function(e){return e.toLowerCase().split(" ").reduce((function(e,t){var a=t.toLowerCase().split("-"),n=a[0],o=a.slice(1).join("-");if(n&&"h"===o)return e.flipX=!0,e;if(n&&"v"===o)return e.flipY=!0,e;if(o=parseFloat(o),isNaN(o))return e;switch(n){case"grow":e.size=e.size+o;break;case"shrink":e.size=e.size-o;break;case"left":e.x=e.x-o;break;case"right":e.x=e.x+o;break;case"up":e.y=e.y-o;break;case"down":e.y=e.y+o;break;case"rotate":e.rotate=e.rotate+o}return e}),{size:16,x:0,y:0,flipX:!1,flipY:!1,rotate:0})},da={mixout:function(){return{parse:{transform:function(e){return ca(e)}}}},hooks:function(){return{parseNodeAttributes:function(e,t){var a=t.getAttribute("data-fa-transform");return a&&(e.transform=ca(a)),e}}},provides:function(e){e.generateAbstractTransformGrouping=function(e){var t=e.main,a=e.transform,n=e.containerWidth,i=e.iconWidth,r={transform:"translate(".concat(n/2," 256)")},s="translate(".concat(32*a.x,", ").concat(32*a.y,") "),l="scale(".concat(a.size/16*(a.flipX?-1:1),", ").concat(a.size/16*(a.flipY?-1:1),") "),c="rotate(".concat(a.rotate," 0 0)"),d={outer:r,inner:{transform:"".concat(s," ").concat(l," ").concat(c)},path:{transform:"translate(".concat(i/2*-1," -256)")}};return{tag:"g",attributes:o({},d.outer),children:[{tag:"g",attributes:o({},d.inner),children:[{tag:t.icon.tag,children:t.icon.children,attributes:o(o({},t.icon.attributes),d.path)}]}]}}}},ua={x:0,y:0,width:"100%",height:"100%"};function ha(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return e.attributes&&(e.attributes.fill||t)&&(e.attributes.fill="black"),e}var ma={hooks:function(){return{parseNodeAttributes:function(e,t){var a=t.getAttribute("data-fa-mask"),n=a?it(a.split(" ").map((function(e){return e.trim()}))):at();return n.prefix||(n.prefix=tt()),e.mask=n,e.maskId=t.getAttribute("data-fa-mask-id"),e}}},provides:function(e){e.generateAbstractMask=function(e){var t,a=e.children,n=e.attributes,i=e.main,r=e.mask,s=e.maskId,l=e.transform,c=i.width,d=i.icon,u=r.width,h=r.icon,m=function(e){var t=e.transform,a=e.containerWidth,n=e.iconWidth,o={transform:"translate(".concat(a/2," 256)")},i="translate(".concat(32*t.x,", ").concat(32*t.y,") "),r="scale(".concat(t.size/16*(t.flipX?-1:1),", ").concat(t.size/16*(t.flipY?-1:1),") "),s="rotate(".concat(t.rotate," 0 0)");return{outer:o,inner:{transform:"".concat(i," ").concat(r," ").concat(s)},path:{transform:"translate(".concat(n/2*-1," -256)")}}}({transform:l,containerWidth:u,iconWidth:c}),p={tag:"rect",attributes:o(o({},ua),{},{fill:"white"})},f=d.children?{children:d.children.map(ha)}:{},g={tag:"g",attributes:o({},m.inner),children:[ha(o({tag:d.tag,attributes:o(o({},d.attributes),m.path)},f))]},y={tag:"g",attributes:o({},m.outer),children:[g]},_="mask-".concat(s||fe()),b="clip-".concat(s||fe()),v={tag:"mask",attributes:o(o({},ua),{},{id:_,maskUnits:"userSpaceOnUse",maskContentUnits:"userSpaceOnUse"}),children:[p,y]},w={tag:"defs",children:[{tag:"clipPath",attributes:{id:b},children:(t=h,"g"===t.tag?t.children:[t])},v]};return a.push(w,{tag:"rect",attributes:o({fill:"currentColor","clip-path":"url(#".concat(b,")"),mask:"url(#".concat(_,")")},ua)}),{children:a,attributes:n}}}},pa={provides:function(e){var t=!1;C.matchMedia&&(t=C.matchMedia("(prefers-reduced-motion: reduce)").matches),e.missingIconAbstract=function(){var e=[],a={fill:"currentColor"},n={attributeType:"XML",repeatCount:"indefinite",dur:"2s"};e.push({tag:"path",attributes:o(o({},a),{},{d:"M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z"})});var i=o(o({},n),{},{attributeName:"opacity"}),r={tag:"circle",attributes:o(o({},a),{},{cx:"256",cy:"364",r:"28"}),children:[]};return t||r.children.push({tag:"animate",attributes:o(o({},n),{},{attributeName:"r",values:"28;14;28;28;14;28;"})},{tag:"animate",attributes:o(o({},i),{},{values:"1;0;1;1;0;1;"})}),e.push(r),e.push({tag:"path",attributes:o(o({},a),{},{opacity:"1",d:"M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z"}),children:t?[]:[{tag:"animate",attributes:o(o({},i),{},{values:"1;0;0;0;0;1;"})}]}),t||e.push({tag:"path",attributes:o(o({},a),{},{opacity:"0",d:"M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z"}),children:[{tag:"animate",attributes:o(o({},i),{},{values:"0;0;1;1;0;0;"})}]}),{tag:"g",attributes:{class:"missing"},children:e}}}};!function(e,t){var a=t.mixoutsTo;st=e,lt={},Object.keys(ct).forEach((function(e){-1===dt.indexOf(e)&&delete ct[e]})),st.forEach((function(e){var t=e.mixout?e.mixout():{};if(Object.keys(t).forEach((function(e){"function"===typeof t[e]&&(a[e]=t[e]),"object"===i(t[e])&&Object.keys(t[e]).forEach((function(n){a[e]||(a[e]={}),a[e][n]=t[e][n]}))})),e.hooks){var n=e.hooks();Object.keys(n).forEach((function(e){lt[e]||(lt[e]=[]),lt[e].push(n[e])}))}e.provides&&e.provides(ct)}))}([je,Qt,Xt,ea,ta,{hooks:function(){return{mutationObserverCallbacks:function(e){return e.pseudoElementsCallback=sa,e}}},provides:function(e){e.pseudoElements2svg=function(e){var t=e.node,a=void 0===t?j:t;de.searchPseudoElements&&sa(a)}}},{mixout:function(){return{dom:{unwatch:function(){Lt(),la=!0}}}},hooks:function(){return{bootstrap:function(){Ht(ut("mutationObserverCallbacks",{}))},noAuto:function(){Bt&&Bt.disconnect()},watch:function(e){var t=e.observeMutationsRoot;la?Wt():Ht(ut("mutationObserverCallbacks",{observeMutationsRoot:t}))}}}},da,ma,pa,{hooks:function(){return{parseNodeAttributes:function(e,t){var a=t.getAttribute("data-fa-symbol"),n=null!==a&&(""===a||a);return e.symbol=n,e}}}}],{mixoutsTo:yt});var fa=yt.parse,ga=yt.icon,ya=a(5173),_a=a.n(ya),ba=a(5043);function va(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function wa(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?va(Object(a),!0).forEach((function(t){ka(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):va(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function xa(e){return xa="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},xa(e)}function ka(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function Ca(e,t){if(null==e)return{};var a,n,o=function(e,t){if(null==e)return{};var a,n,o={},i=Object.keys(e);for(n=0;n<i.length;n++)a=i[n],t.indexOf(a)>=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)a=i[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}function ja(e){return function(e){if(Array.isArray(e))return Sa(e)}(e)||function(e){if("undefined"!==typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"===typeof e)return Sa(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);"Object"===a&&e.constructor&&(a=e.constructor.name);if("Map"===a||"Set"===a)return Array.from(e);if("Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return Sa(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Sa(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=new Array(t);a<t;a++)n[a]=e[a];return n}function Ia(e){return t=e,(t-=0)===t?e:(e=e.replace(/[\-_\s]+(.)?/g,(function(e,t){return t?t.toUpperCase():""}))).substr(0,1).toLowerCase()+e.substr(1);var t}var Aa=["style"];var Na=!1;try{Na=!0}catch(Ma){}function Ea(e){return e&&"object"===xa(e)&&e.prefix&&e.iconName&&e.icon?e:fa.icon?fa.icon(e):null===e?null:e&&"object"===xa(e)&&e.prefix&&e.iconName?e:Array.isArray(e)&&2===e.length?{prefix:e[0],iconName:e[1]}:"string"===typeof e?{prefix:"fas",iconName:e}:void 0}function Ta(e,t){return Array.isArray(t)&&t.length>0||!Array.isArray(t)&&t?ka({},e,t):{}}var Da=ba.forwardRef((function(e,t){var a=e.icon,n=e.mask,o=e.symbol,i=e.className,r=e.title,s=e.titleId,l=e.maskId,c=Ea(a),d=Ta("classes",[].concat(ja(function(e){var t,a=e.beat,n=e.fade,o=e.beatFade,i=e.bounce,r=e.shake,s=e.flash,l=e.spin,c=e.spinPulse,d=e.spinReverse,u=e.pulse,h=e.fixedWidth,m=e.inverse,p=e.border,f=e.listItem,g=e.flip,y=e.size,_=e.rotation,b=e.pull,v=(ka(t={"fa-beat":a,"fa-fade":n,"fa-beat-fade":o,"fa-bounce":i,"fa-shake":r,"fa-flash":s,"fa-spin":l,"fa-spin-reverse":d,"fa-spin-pulse":c,"fa-pulse":u,"fa-fw":h,"fa-inverse":m,"fa-border":p,"fa-li":f,"fa-flip":!0===g,"fa-flip-horizontal":"horizontal"===g||"both"===g,"fa-flip-vertical":"vertical"===g||"both"===g},"fa-".concat(y),"undefined"!==typeof y&&null!==y),ka(t,"fa-rotate-".concat(_),"undefined"!==typeof _&&null!==_&&0!==_),ka(t,"fa-pull-".concat(b),"undefined"!==typeof b&&null!==b),ka(t,"fa-swap-opacity",e.swapOpacity),t);return Object.keys(v).map((function(e){return v[e]?e:null})).filter((function(e){return e}))}(e)),ja(i.split(" ")))),u=Ta("transform","string"===typeof e.transform?fa.transform(e.transform):e.transform),h=Ta("mask",Ea(n)),m=ga(c,wa(wa(wa(wa({},d),u),h),{},{symbol:o,title:r,titleId:s,maskId:l}));if(!m)return function(){var e;!Na&&console&&"function"===typeof console.error&&(e=console).error.apply(e,arguments)}("Could not find icon",c),null;var p=m.abstract,f={ref:t};return Object.keys(e).forEach((function(t){Da.defaultProps.hasOwnProperty(t)||(f[t]=e[t])})),Ra(p[0],f)}));Da.displayName="FontAwesomeIcon",Da.propTypes={beat:_a().bool,border:_a().bool,beatFade:_a().bool,bounce:_a().bool,className:_a().string,fade:_a().bool,flash:_a().bool,mask:_a().oneOfType([_a().object,_a().array,_a().string]),maskId:_a().string,fixedWidth:_a().bool,inverse:_a().bool,flip:_a().oneOf([!0,!1,"horizontal","vertical","both"]),icon:_a().oneOfType([_a().object,_a().array,_a().string]),listItem:_a().bool,pull:_a().oneOf(["right","left"]),pulse:_a().bool,rotation:_a().oneOf([0,90,180,270]),shake:_a().bool,size:_a().oneOf(["2xs","xs","sm","lg","xl","2xl","1x","2x","3x","4x","5x","6x","7x","8x","9x","10x"]),spin:_a().bool,spinPulse:_a().bool,spinReverse:_a().bool,symbol:_a().oneOfType([_a().bool,_a().string]),title:_a().string,titleId:_a().string,transform:_a().oneOfType([_a().string,_a().object]),swapOpacity:_a().bool},Da.defaultProps={border:!1,className:"",mask:null,maskId:null,fixedWidth:!1,inverse:!1,flip:!1,icon:null,listItem:!1,pull:null,pulse:!1,rotation:null,size:null,spin:!1,spinPulse:!1,spinReverse:!1,beat:!1,fade:!1,beatFade:!1,bounce:!1,shake:!1,symbol:!1,title:"",titleId:null,transform:null,swapOpacity:!1};var Ra=function e(t,a){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if("string"===typeof a)return a;var o=(a.children||[]).map((function(a){return e(t,a)})),i=Object.keys(a.attributes||{}).reduce((function(e,t){var n=a.attributes[t];switch(t){case"class":e.attrs.className=n,delete a.attributes.class;break;case"style":e.attrs.style=n.split(";").map((function(e){return e.trim()})).filter((function(e){return e})).reduce((function(e,t){var a,n=t.indexOf(":"),o=Ia(t.slice(0,n)),i=t.slice(n+1).trim();return o.startsWith("webkit")?e[(a=o,a.charAt(0).toUpperCase()+a.slice(1))]=i:e[o]=i,e}),{});break;default:0===t.indexOf("aria-")||0===t.indexOf("data-")?e.attrs[t.toLowerCase()]=n:e.attrs[Ia(t)]=n}return e}),{attrs:{}}),r=n.style,s=void 0===r?{}:r,l=Ca(n,Aa);return i.attrs.style=wa(wa({},i.attrs.style),s),t.apply(void 0,[a.tag,wa(wa({},i.attrs),l)].concat(ja(o)))}.bind(null,ba.createElement)},1387:function(e,t,a){"use strict";function n(){return n=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},n.apply(this,arguments)}var o;a.d(t,{AO:function(){return u},Gh:function(){return R},HS:function(){return M},Oi:function(){return s},Rr:function(){return h},pX:function(){return F},pb:function(){return N},rc:function(){return o},tH:function(){return P},ue:function(){return f},yD:function(){return D},zR:function(){return r}}),function(e){e.Pop="POP",e.Push="PUSH",e.Replace="REPLACE"}(o||(o={}));const i="popstate";function r(e){return void 0===e&&(e={}),m((function(e,t){let{pathname:a,search:n,hash:o}=e.location;return d("",{pathname:a,search:n,hash:o},t.state&&t.state.usr||null,t.state&&t.state.key||"default")}),(function(e,t){return"string"===typeof t?t:u(t)}),null,e)}function s(e,t){if(!1===e||null===e||"undefined"===typeof e)throw new Error(t)}function l(e,t){if(!e){"undefined"!==typeof console&&console.warn(t);try{throw new Error(t)}catch(a){}}}function c(e,t){return{usr:e.state,key:e.key,idx:t}}function d(e,t,a,o){return void 0===a&&(a=null),n({pathname:"string"===typeof e?e:e.pathname,search:"",hash:""},"string"===typeof t?h(t):t,{state:a,key:t&&t.key||o||Math.random().toString(36).substr(2,8)})}function u(e){let{pathname:t="/",search:a="",hash:n=""}=e;return a&&"?"!==a&&(t+="?"===a.charAt(0)?a:"?"+a),n&&"#"!==n&&(t+="#"===n.charAt(0)?n:"#"+n),t}function h(e){let t={};if(e){let a=e.indexOf("#");a>=0&&(t.hash=e.substr(a),e=e.substr(0,a));let n=e.indexOf("?");n>=0&&(t.search=e.substr(n),e=e.substr(0,n)),e&&(t.pathname=e)}return t}function m(e,t,a,r){void 0===r&&(r={});let{window:l=document.defaultView,v5Compat:h=!1}=r,m=l.history,p=o.Pop,f=null,g=y();function y(){return(m.state||{idx:null}).idx}function _(){p=o.Pop;let e=y(),t=null==e?null:e-g;g=e,f&&f({action:p,location:v.location,delta:t})}function b(e){let t="null"!==l.location.origin?l.location.origin:l.location.href,a="string"===typeof e?e:u(e);return a=a.replace(/ $/,"%20"),s(t,"No window.location.(origin|href) available to create URL for href: "+a),new URL(a,t)}null==g&&(g=0,m.replaceState(n({},m.state,{idx:g}),""));let v={get action(){return p},get location(){return e(l,m)},listen(e){if(f)throw new Error("A history only accepts one active listener");return l.addEventListener(i,_),f=e,()=>{l.removeEventListener(i,_),f=null}},createHref(e){return t(l,e)},createURL:b,encodeLocation(e){let t=b(e);return{pathname:t.pathname,search:t.search,hash:t.hash}},push:function(e,t){p=o.Push;let n=d(v.location,e,t);a&&a(n,e),g=y()+1;let i=c(n,g),r=v.createHref(n);try{m.pushState(i,"",r)}catch(s){if(s instanceof DOMException&&"DataCloneError"===s.name)throw s;l.location.assign(r)}h&&f&&f({action:p,location:v.location,delta:1})},replace:function(e,t){p=o.Replace;let n=d(v.location,e,t);a&&a(n,e),g=y();let i=c(n,g),r=v.createHref(n);m.replaceState(i,"",r),h&&f&&f({action:p,location:v.location,delta:0})},go(e){return m.go(e)}};return v}var p;!function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"}(p||(p={}));new Set(["lazy","caseSensitive","path","id","index","children"]);function f(e,t,a){void 0===a&&(a="/");let n=N(("string"===typeof t?h(t):t).pathname||"/",a);if(null==n)return null;let o=g(e);!function(e){e.sort(((e,t)=>e.score!==t.score?t.score-e.score:function(e,t){let a=e.length===t.length&&e.slice(0,-1).every(((e,a)=>e===t[a]));return a?e[e.length-1]-t[t.length-1]:0}(e.routesMeta.map((e=>e.childrenIndex)),t.routesMeta.map((e=>e.childrenIndex)))))}(o);let i=null;for(let r=0;null==i&&r<o.length;++r){let e=A(n);i=S(o[r],e)}return i}function g(e,t,a,n){void 0===t&&(t=[]),void 0===a&&(a=[]),void 0===n&&(n="");let o=(e,o,i)=>{let r={relativePath:void 0===i?e.path||"":i,caseSensitive:!0===e.caseSensitive,childrenIndex:o,route:e};r.relativePath.startsWith("/")&&(s(r.relativePath.startsWith(n),'Absolute route path "'+r.relativePath+'" nested under path "'+n+'" is not valid. An absolute child route path must start with the combined path of all its parent routes.'),r.relativePath=r.relativePath.slice(n.length));let l=M([n,r.relativePath]),c=a.concat(r);e.children&&e.children.length>0&&(s(!0!==e.index,'Index routes must not have child routes. Please remove all child routes from route path "'+l+'".'),g(e.children,t,c,l)),(null!=e.path||e.index)&&t.push({path:l,score:j(l,e.index),routesMeta:c})};return e.forEach(((e,t)=>{var a;if(""!==e.path&&null!=(a=e.path)&&a.includes("?"))for(let n of y(e.path))o(e,t,n);else o(e,t)})),t}function y(e){let t=e.split("/");if(0===t.length)return[];let[a,...n]=t,o=a.endsWith("?"),i=a.replace(/\?$/,"");if(0===n.length)return o?[i,""]:[i];let r=y(n.join("/")),s=[];return s.push(...r.map((e=>""===e?i:[i,e].join("/")))),o&&s.push(...r),s.map((t=>e.startsWith("/")&&""===t?"/":t))}const _=/^:[\w-]+$/,b=3,v=2,w=1,x=10,k=-2,C=e=>"*"===e;function j(e,t){let a=e.split("/"),n=a.length;return a.some(C)&&(n+=k),t&&(n+=v),a.filter((e=>!C(e))).reduce(((e,t)=>e+(_.test(t)?b:""===t?w:x)),n)}function S(e,t){let{routesMeta:a}=e,n={},o="/",i=[];for(let r=0;r<a.length;++r){let e=a[r],s=r===a.length-1,l="/"===o?t:t.slice(o.length)||"/",c=I({path:e.relativePath,caseSensitive:e.caseSensitive,end:s},l);if(!c)return null;Object.assign(n,c.params);let d=e.route;i.push({params:n,pathname:M([o,c.pathname]),pathnameBase:O(M([o,c.pathnameBase])),route:d}),"/"!==c.pathnameBase&&(o=M([o,c.pathnameBase]))}return i}function I(e,t){"string"===typeof e&&(e={path:e,caseSensitive:!1,end:!0});let[a,n]=function(e,t,a){void 0===t&&(t=!1);void 0===a&&(a=!0);l("*"===e||!e.endsWith("*")||e.endsWith("/*"),'Route path "'+e+'" will be treated as if it were "'+e.replace(/\*$/,"/*")+'" because the `*` character must always follow a `/` in the pattern. To get rid of this warning, please change the route path to "'+e.replace(/\*$/,"/*")+'".');let n=[],o="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,((e,t,a)=>(n.push({paramName:t,isOptional:null!=a}),a?"/?([^\\/]+)?":"/([^\\/]+)")));e.endsWith("*")?(n.push({paramName:"*"}),o+="*"===e||"/*"===e?"(.*)$":"(?:\\/(.+)|\\/*)$"):a?o+="\\/*$":""!==e&&"/"!==e&&(o+="(?:(?=\\/|$))");let i=new RegExp(o,t?void 0:"i");return[i,n]}(e.path,e.caseSensitive,e.end),o=t.match(a);if(!o)return null;let i=o[0],r=i.replace(/(.)\/+$/,"$1"),s=o.slice(1);return{params:n.reduce(((e,t,a)=>{let{paramName:n,isOptional:o}=t;if("*"===n){let e=s[a]||"";r=i.slice(0,i.length-e.length).replace(/(.)\/+$/,"$1")}const l=s[a];return e[n]=o&&!l?void 0:(l||"").replace(/%2F/g,"/"),e}),{}),pathname:i,pathnameBase:r,pattern:e}}function A(e){try{return e.split("/").map((e=>decodeURIComponent(e).replace(/\//g,"%2F"))).join("/")}catch(t){return l(!1,'The URL path "'+e+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent encoding ('+t+")."),e}}function N(e,t){if("/"===t)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let a=t.endsWith("/")?t.length-1:t.length,n=e.charAt(a);return n&&"/"!==n?null:e.slice(a)||"/"}function E(e,t,a,n){return"Cannot include a '"+e+"' character in a manually specified `to."+t+"` field ["+JSON.stringify(n)+"].  Please separate it out to the `to."+a+'` field. Alternatively you may provide the full path as a string in <Link to="..."> and the router will parse it for you.'}function T(e){return e.filter(((e,t)=>0===t||e.route.path&&e.route.path.length>0))}function D(e,t){let a=T(e);return t?a.map(((t,a)=>a===e.length-1?t.pathname:t.pathnameBase)):a.map((e=>e.pathnameBase))}function R(e,t,a,o){let i;void 0===o&&(o=!1),"string"===typeof e?i=h(e):(i=n({},e),s(!i.pathname||!i.pathname.includes("?"),E("?","pathname","search",i)),s(!i.pathname||!i.pathname.includes("#"),E("#","pathname","hash",i)),s(!i.search||!i.search.includes("#"),E("#","search","hash",i)));let r,l=""===e||""===i.pathname,c=l?"/":i.pathname;if(null==c)r=a;else{let e=t.length-1;if(!o&&c.startsWith("..")){let t=c.split("/");for(;".."===t[0];)t.shift(),e-=1;i.pathname=t.join("/")}r=e>=0?t[e]:"/"}let d=function(e,t){void 0===t&&(t="/");let{pathname:a,search:n="",hash:o=""}="string"===typeof e?h(e):e,i=a?a.startsWith("/")?a:function(e,t){let a=t.replace(/\/+$/,"").split("/");return e.split("/").forEach((e=>{".."===e?a.length>1&&a.pop():"."!==e&&a.push(e)})),a.length>1?a.join("/"):"/"}(a,t):t;return{pathname:i,search:q(n),hash:G(o)}}(i,r),u=c&&"/"!==c&&c.endsWith("/"),m=(l||"."===c)&&a.endsWith("/");return d.pathname.endsWith("/")||!u&&!m||(d.pathname+="/"),d}const M=e=>e.join("/").replace(/\/\/+/g,"/"),O=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),q=e=>e&&"?"!==e?e.startsWith("?")?e:"?"+e:"",G=e=>e&&"#"!==e?e.startsWith("#")?e:"#"+e:"";class P extends Error{}function F(e){return null!=e&&"number"===typeof e.status&&"string"===typeof e.statusText&&"boolean"===typeof e.internal&&"data"in e}const L=["post","put","patch","delete"],W=(new Set(L),["get",...L]);new Set(W),new Set([301,302,303,307,308]),new Set([307,308]);Symbol("deferred")},6618:function(e,t,a){"use strict";a.d(t,{A:function(){return i}});var n=a(5043);var o=function(e){const t=(0,n.useRef)(e);return(0,n.useEffect)((()=>{t.current=e}),[e]),t};function i(e){const t=o(e);return(0,n.useCallback)((function(){return t.current&&t.current(...arguments)}),[t])}},4723:function(e,t,a){"use strict";var n=a(5043);const o="undefined"!==typeof a.g&&a.g.navigator&&"ReactNative"===a.g.navigator.product,i="undefined"!==typeof document;t.A=i||o?n.useLayoutEffect:n.useEffect},8293:function(e,t,a){"use strict";var n=a(5043);const o=e=>e&&"function"!==typeof e?t=>{e.current=t}:e;t.A=function(e,t){return(0,n.useMemo)((()=>function(e,t){const a=o(e),n=o(t);return e=>{a&&a(e),n&&n(e)}}(e,t)),[e,t])}},9109:function(e,t,a){"use strict";a.d(t,{A:function(){return o}});var n=a(5043);function o(e){const t=function(e){const t=(0,n.useRef)(e);return t.current=e,t}(e);(0,n.useEffect)((()=>()=>t.current()),[])}},4140:function(e,t,a){"use strict";a.d(t,{Am:function(){return r}});var n=a(5043),o=a(579);const i=["as","disabled"];function r(e){let{tagName:t,disabled:a,href:n,target:o,rel:i,role:r,onClick:s,tabIndex:l=0,type:c}=e;t||(t=null!=n||null!=o||null!=i?"a":"button");const d={tagName:t};if("button"===t)return[{type:c||"button",disabled:a},d];const u=e=>{(a||"a"===t&&function(e){return!e||"#"===e.trim()}(n))&&e.preventDefault(),a?e.stopPropagation():null==s||s(e)};return"a"===t&&(n||(n="#"),a&&(n=void 0)),[{role:null!=r?r:"button",disabled:void 0,tabIndex:a?void 0:l,href:n,target:"a"===t?o:void 0,"aria-disabled":a||void 0,rel:"a"===t?i:void 0,onClick:u,onKeyDown:e=>{" "===e.key&&(e.preventDefault(),u(e))}},d]}const s=n.forwardRef(((e,t)=>{let{as:a,disabled:n}=e,s=function(e,t){if(null==e)return{};var a={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;a[n]=e[n]}return a}(e,i);const[l,{tagName:c}]=r(Object.assign({tagName:a,disabled:n},s));return(0,o.jsx)(c,Object.assign({},s,l,{ref:t}))}));s.displayName="Button",t.Ay=s},5425:function(e,t,a){"use strict";a.d(t,{sE:function(){return o}});const n="data-rr-ui-";function o(e){return`${n}${e}`}},9576:function(e,t,a){"use strict";a.d(t,{Yc:function(){return p}});var n=a(3539),o=a(8894),i=a(2677),r=a(5043),s=a(9791);var l=function(e){let{children:t,in:a,onExited:i,mountOnEnter:l,unmountOnExit:c}=e;const d=(0,r.useRef)(null),u=(0,r.useRef)(a),h=(0,o.A)(i);(0,r.useEffect)((()=>{a?u.current=!0:h(d.current)}),[a,h]);const m=(0,n.A)(d,(0,s.am)(t)),p=(0,r.cloneElement)(t,{ref:m});return a?p:c||!u.current&&l?null:p};const c=["onEnter","onEntering","onEntered","onExit","onExiting","onExited","addEndListener","children"];var d=a(579);const u=["component"];var h=r.forwardRef(((e,t)=>{let{component:a}=e;const o=function(e){let{onEnter:t,onEntering:a,onEntered:o,onExit:i,onExiting:l,onExited:d,addEndListener:u,children:h}=e,m=function(e,t){if(null==e)return{};var a={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;a[n]=e[n]}return a}(e,c);const p=(0,r.useRef)(null),f=(0,n.A)(p,(0,s.am)(h)),g=e=>t=>{e&&p.current&&e(p.current,t)},y=(0,r.useCallback)(g(t),[t]),_=(0,r.useCallback)(g(a),[a]),b=(0,r.useCallback)(g(o),[o]),v=(0,r.useCallback)(g(i),[i]),w=(0,r.useCallback)(g(l),[l]),x=(0,r.useCallback)(g(d),[d]),k=(0,r.useCallback)(g(u),[u]);return Object.assign({},m,{nodeRef:p},t&&{onEnter:y},a&&{onEntering:_},o&&{onEntered:b},i&&{onExit:v},l&&{onExiting:w},d&&{onExited:x},u&&{addEndListener:k},{children:"function"===typeof h?(e,t)=>h(e,Object.assign({},t,{ref:f})):(0,r.cloneElement)(h,{ref:f})})}(function(e,t){if(null==e)return{};var a={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;a[n]=e[n]}return a}(e,u));return(0,d.jsx)(a,Object.assign({ref:t},o))}));function m(e){let{children:t,in:a,onExited:l,onEntered:c,transition:d}=e;const[u,h]=(0,r.useState)(!a);a&&u&&h(!1);const m=function(e){let{in:t,onTransition:a}=e;const n=(0,r.useRef)(null),s=(0,r.useRef)(!0),l=(0,o.A)(a);return(0,i.A)((()=>{if(!n.current)return;let e=!1;return l({in:t,element:n.current,initial:s.current,isStale:()=>e}),()=>{e=!0}}),[t,l]),(0,i.A)((()=>(s.current=!1,()=>{s.current=!0})),[]),n}({in:!!a,onTransition:e=>{Promise.resolve(d(e)).then((()=>{e.isStale()||(e.in?null==c||c(e.element,e.initial):(h(!0),null==l||l(e.element)))}),(t=>{throw e.in||h(!0),t}))}}),p=(0,n.A)(m,(0,s.am)(t));return u&&!a?null:(0,r.cloneElement)(t,{ref:p})}function p(e,t,a){return e?(0,d.jsx)(h,Object.assign({},a,{component:e})):t?(0,d.jsx)(m,Object.assign({},a,{transition:t})):(0,d.jsx)(l,Object.assign({},a))}},8170:function(e,t,a){"use strict";a.d(t,{A:function(){return C}});var n=a(182);function o(e){void 0===e&&(e=(0,n.A)());try{var t=e.activeElement;return t&&t.nodeName?t:null}catch(a){return e.body}}var i=a(2631),r=a(8279),s=a(753),l=a(5043),c=a(7950),d=a(2665);function u(e){const t=function(e){const t=(0,l.useRef)(e);return t.current=e,t}(e);(0,l.useEffect)((()=>()=>t.current()),[])}var h=a(4696),m=a(8894),p=a(7832),f=a(2504),g=a(1701),y=a(9576),_=a(9791),b=a(579);const v=["show","role","className","style","children","backdrop","keyboard","onBackdropClick","onEscapeKeyDown","transition","runTransition","backdropTransition","runBackdropTransition","autoFocus","enforceFocus","restoreFocus","restoreFocusOptions","renderDialog","renderBackdrop","manager","container","onShow","onHide","onExit","onExited","onExiting","onEnter","onEntering","onEntered"];let w;function x(e){const t=(0,g.A)(),a=e||function(e){return w||(w=new p.A({ownerDocument:null==e?void 0:e.document})),w}(t),n=(0,l.useRef)({dialog:null,backdrop:null});return Object.assign(n.current,{add:()=>a.add(n.current),remove:()=>a.remove(n.current),isTopModal:()=>a.isTopModal(n.current),setDialogRef:(0,l.useCallback)((e=>{n.current.dialog=e}),[]),setBackdropRef:(0,l.useCallback)((e=>{n.current.backdrop=e}),[])})}const k=(0,l.forwardRef)(((e,t)=>{let{show:a=!1,role:n="dialog",className:p,style:w,children:k,backdrop:C=!0,keyboard:j=!0,onBackdropClick:S,onEscapeKeyDown:I,transition:A,runTransition:N,backdropTransition:E,runBackdropTransition:T,autoFocus:D=!0,enforceFocus:R=!0,restoreFocus:M=!0,restoreFocusOptions:O,renderDialog:q,renderBackdrop:G=(e=>(0,b.jsx)("div",Object.assign({},e))),manager:P,container:F,onShow:L,onHide:W=(()=>{}),onExit:B,onExited:H,onExiting:U,onEnter:K,onEntering:z,onEntered:V}=e,Y=function(e,t){if(null==e)return{};var a={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;a[n]=e[n]}return a}(e,v);const J=(0,g.A)(),$=(0,f.A)(F),Z=x(P),Q=(0,d.A)(),X=(0,h.A)(a),[ee,te]=(0,l.useState)(!a),ae=(0,l.useRef)(null);(0,l.useImperativeHandle)(t,(()=>Z),[Z]),r.A&&!X&&a&&(ae.current=o(null==J?void 0:J.document)),a&&ee&&te(!1);const ne=(0,m.A)((()=>{if(Z.add(),ce.current=(0,s.A)(document,"keydown",se),le.current=(0,s.A)(document,"focus",(()=>setTimeout(ie)),!0),L&&L(),D){var e,t;const a=o(null!=(e=null==(t=Z.dialog)?void 0:t.ownerDocument)?e:null==J?void 0:J.document);Z.dialog&&a&&!(0,i.A)(Z.dialog,a)&&(ae.current=a,Z.dialog.focus())}})),oe=(0,m.A)((()=>{var e;(Z.remove(),null==ce.current||ce.current(),null==le.current||le.current(),M)&&(null==(e=ae.current)||null==e.focus||e.focus(O),ae.current=null)}));(0,l.useEffect)((()=>{a&&$&&ne()}),[a,$,ne]),(0,l.useEffect)((()=>{ee&&oe()}),[ee,oe]),u((()=>{oe()}));const ie=(0,m.A)((()=>{if(!R||!Q()||!Z.isTopModal())return;const e=o(null==J?void 0:J.document);Z.dialog&&e&&!(0,i.A)(Z.dialog,e)&&Z.dialog.focus()})),re=(0,m.A)((e=>{e.target===e.currentTarget&&(null==S||S(e),!0===C&&W())})),se=(0,m.A)((e=>{j&&(0,_.v$)(e)&&Z.isTopModal()&&(null==I||I(e),e.defaultPrevented||W())})),le=(0,l.useRef)(),ce=(0,l.useRef)();if(!$)return null;const de=Object.assign({role:n,ref:Z.setDialogRef,"aria-modal":"dialog"===n||void 0},Y,{style:w,className:p,tabIndex:-1});let ue=q?q(de):(0,b.jsx)("div",Object.assign({},de,{children:l.cloneElement(k,{role:"document"})}));ue=(0,y.Yc)(A,N,{unmountOnExit:!0,mountOnEnter:!0,appear:!0,in:!!a,onExit:B,onExiting:U,onExited:function(){te(!0),null==H||H(...arguments)},onEnter:K,onEntering:z,onEntered:V,children:ue});let he=null;return C&&(he=G({ref:Z.setBackdropRef,onClick:re}),he=(0,y.Yc)(E,T,{in:!!a,appear:!0,mountOnEnter:!0,unmountOnExit:!0,children:he})),(0,b.jsx)(b.Fragment,{children:c.createPortal((0,b.jsxs)(b.Fragment,{children:[he,ue]}),$)})}));k.displayName="Modal";var C=Object.assign(k,{Manager:p.A})},7832:function(e,t,a){"use strict";a.d(t,{A:function(){return i}});var n=a(8747);const o=(0,a(5425).sE)("modal-open");var i=class{constructor(){let{ownerDocument:e,handleContainerOverflow:t=!0,isRTL:a=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.handleContainerOverflow=t,this.isRTL=a,this.modals=[],this.ownerDocument=e}getScrollbarWidth(){return function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document;const t=e.defaultView;return Math.abs(t.innerWidth-e.documentElement.clientWidth)}(this.ownerDocument)}getElement(){return(this.ownerDocument||document).body}setModalAttributes(e){}removeModalAttributes(e){}setContainerStyle(e){const t={overflow:"hidden"},a=this.isRTL?"paddingLeft":"paddingRight",i=this.getElement();e.style={overflow:i.style.overflow,[a]:i.style[a]},e.scrollBarWidth&&(t[a]=`${parseInt((0,n.A)(i,a)||"0",10)+e.scrollBarWidth}px`),i.setAttribute(o,""),(0,n.A)(i,t)}reset(){[...this.modals].forEach((e=>this.remove(e)))}removeContainerStyle(e){const t=this.getElement();t.removeAttribute(o),Object.assign(t.style,e.style)}add(e){let t=this.modals.indexOf(e);return-1!==t?t:(t=this.modals.length,this.modals.push(e),this.setModalAttributes(e),0!==t||(this.state={scrollBarWidth:this.getScrollbarWidth(),style:{}},this.handleContainerOverflow&&this.setContainerStyle(this.state)),t)}remove(e){const t=this.modals.indexOf(e);-1!==t&&(this.modals.splice(t,1),!this.modals.length&&this.handleContainerOverflow&&this.removeContainerStyle(this.state),this.removeModalAttributes(e))}isTopModal(e){return!!this.modals.length&&this.modals[this.modals.length-1]===e}}},5978:function(e,t,a){"use strict";function n(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Array.isArray(e)?e:Object.keys(e).map((t=>(e[t].name=t,e[t])))}function o(e){let{enabled:t,enableEvents:a,placement:o,flip:i,offset:r,fixed:s,containerPadding:l,arrowElement:c,popperConfig:d={}}=e;var u,h,m,p,f;const g=function(e){const t={};return Array.isArray(e)?(null==e||e.forEach((e=>{t[e.name]=e})),t):e||t}(d.modifiers);return Object.assign({},d,{placement:o,enabled:t,strategy:s?"fixed":d.strategy,modifiers:n(Object.assign({},g,{eventListeners:{enabled:a,options:null==(u=g.eventListeners)?void 0:u.options},preventOverflow:Object.assign({},g.preventOverflow,{options:l?Object.assign({padding:l},null==(h=g.preventOverflow)?void 0:h.options):null==(m=g.preventOverflow)?void 0:m.options}),offset:{options:Object.assign({offset:r},null==(p=g.offset)?void 0:p.options)},arrow:Object.assign({},g.arrow,{enabled:!!c,options:Object.assign({},null==(f=g.arrow)?void 0:f.options,{element:c})}),flip:Object.assign({enabled:!!i},g.flip)}))})}a.d(t,{Ay:function(){return o}})},5970:function(e,t,a){"use strict";a.d(t,{j:function(){return u}});var n=a(2631),o=a(753),i=a(182),r=a(5043),s=a(8894),l=a(6440),c=a.n(l);const d=()=>{};const u=e=>e&&("current"in e?e.current:e),h={click:"mousedown",mouseup:"mousedown",pointerup:"pointerdown"};t.A=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:d,{disabled:a,clickTrigger:l="click"}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const m=(0,r.useRef)(!1),p=(0,r.useRef)(!1),f=(0,r.useCallback)((t=>{const a=u(e);var o;c()(!!a,"ClickOutside captured a close event but does not have a ref to compare it to. useClickOutside(), should be passed a ref that resolves to a DOM node"),m.current=!a||!!((o=t).metaKey||o.altKey||o.ctrlKey||o.shiftKey)||!function(e){return 0===e.button}(t)||!!(0,n.A)(a,t.target)||p.current,p.current=!1}),[e]),g=(0,s.A)((t=>{const a=u(e);a&&(0,n.A)(a,t.target)?p.current=!0:p.current=!1})),y=(0,s.A)((e=>{m.current||t(e)}));(0,r.useEffect)((()=>{var t,n;if(a||null==e)return;const r=(0,i.A)(u(e)),s=r.defaultView||window;let c=null!=(t=s.event)?t:null==(n=s.parent)?void 0:n.event,m=null;h[l]&&(m=(0,o.A)(r,h[l],g,!0));const p=(0,o.A)(r,l,f,!0),_=(0,o.A)(r,l,(e=>{e!==c?y(e):c=void 0}));let b=[];return"ontouchstart"in r.documentElement&&(b=[].slice.call(r.body.children).map((e=>(0,o.A)(e,"mousemove",d)))),()=>{null==m||m(),p(),_(),b.forEach((e=>e()))}}),[e,a,l,f,g,y])}},2188:function(e,t,a){"use strict";a.d(t,{A:function(){return Ae}});var n=a(5043),o=Object.prototype.hasOwnProperty;function i(e,t,a){for(a of e.keys())if(r(a,t))return a}function r(e,t){var a,n,s;if(e===t)return!0;if(e&&t&&(a=e.constructor)===t.constructor){if(a===Date)return e.getTime()===t.getTime();if(a===RegExp)return e.toString()===t.toString();if(a===Array){if((n=e.length)===t.length)for(;n--&&r(e[n],t[n]););return-1===n}if(a===Set){if(e.size!==t.size)return!1;for(n of e){if((s=n)&&"object"===typeof s&&!(s=i(t,s)))return!1;if(!t.has(s))return!1}return!0}if(a===Map){if(e.size!==t.size)return!1;for(n of e){if((s=n[0])&&"object"===typeof s&&!(s=i(t,s)))return!1;if(!r(n[1],t.get(s)))return!1}return!0}if(a===ArrayBuffer)e=new Uint8Array(e),t=new Uint8Array(t);else if(a===DataView){if((n=e.byteLength)===t.byteLength)for(;n--&&e.getInt8(n)===t.getInt8(n););return-1===n}if(ArrayBuffer.isView(e)){if((n=e.byteLength)===t.byteLength)for(;n--&&e[n]===t[n];);return-1===n}if(!a||"object"===typeof e){for(a in n=0,e){if(o.call(e,a)&&++n&&!o.call(t,a))return!1;if(!(a in t)||!r(e[a],t[a]))return!1}return Object.keys(t).length===n}}return e!==e&&t!==t}var s=a(2665);var l=function(e){const t=(0,s.A)();return[e[0],(0,n.useCallback)((a=>{if(t())return e[1](a)}),[t,e[1]])]};function c(e){return e.split("-")[0]}function d(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function u(e){return e instanceof d(e).Element||e instanceof Element}function h(e){return e instanceof d(e).HTMLElement||e instanceof HTMLElement}function m(e){return"undefined"!==typeof ShadowRoot&&(e instanceof d(e).ShadowRoot||e instanceof ShadowRoot)}var p=Math.max,f=Math.min,g=Math.round;function y(){var e=navigator.userAgentData;return null!=e&&e.brands&&Array.isArray(e.brands)?e.brands.map((function(e){return e.brand+"/"+e.version})).join(" "):navigator.userAgent}function _(){return!/^((?!chrome|android).)*safari/i.test(y())}function b(e,t,a){void 0===t&&(t=!1),void 0===a&&(a=!1);var n=e.getBoundingClientRect(),o=1,i=1;t&&h(e)&&(o=e.offsetWidth>0&&g(n.width)/e.offsetWidth||1,i=e.offsetHeight>0&&g(n.height)/e.offsetHeight||1);var r=(u(e)?d(e):window).visualViewport,s=!_()&&a,l=(n.left+(s&&r?r.offsetLeft:0))/o,c=(n.top+(s&&r?r.offsetTop:0))/i,m=n.width/o,p=n.height/i;return{width:m,height:p,top:c,right:l+m,bottom:c+p,left:l,x:l,y:c}}function v(e){var t=b(e),a=e.offsetWidth,n=e.offsetHeight;return Math.abs(t.width-a)<=1&&(a=t.width),Math.abs(t.height-n)<=1&&(n=t.height),{x:e.offsetLeft,y:e.offsetTop,width:a,height:n}}function w(e,t){var a=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(a&&m(a)){var n=t;do{if(n&&e.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function x(e){return e?(e.nodeName||"").toLowerCase():null}function k(e){return d(e).getComputedStyle(e)}function C(e){return["table","td","th"].indexOf(x(e))>=0}function j(e){return((u(e)?e.ownerDocument:e.document)||window.document).documentElement}function S(e){return"html"===x(e)?e:e.assignedSlot||e.parentNode||(m(e)?e.host:null)||j(e)}function I(e){return h(e)&&"fixed"!==k(e).position?e.offsetParent:null}function A(e){for(var t=d(e),a=I(e);a&&C(a)&&"static"===k(a).position;)a=I(a);return a&&("html"===x(a)||"body"===x(a)&&"static"===k(a).position)?t:a||function(e){var t=/firefox/i.test(y());if(/Trident/i.test(y())&&h(e)&&"fixed"===k(e).position)return null;var a=S(e);for(m(a)&&(a=a.host);h(a)&&["html","body"].indexOf(x(a))<0;){var n=k(a);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||t&&"filter"===n.willChange||t&&n.filter&&"none"!==n.filter)return a;a=a.parentNode}return null}(e)||t}function N(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function E(e,t,a){return p(e,f(t,a))}function T(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function D(e,t){return t.reduce((function(t,a){return t[a]=e,t}),{})}var R="top",M="bottom",O="right",q="left",G="auto",P=[R,M,O,q],F="start",L="end",W="clippingParents",B="viewport",H="popper",U="reference",K=P.reduce((function(e,t){return e.concat([t+"-"+F,t+"-"+L])}),[]),z=[].concat(P,[G]).reduce((function(e,t){return e.concat([t,t+"-"+F,t+"-"+L])}),[]),V=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];var Y={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,a=e.state,n=e.name,o=e.options,i=a.elements.arrow,r=a.modifiersData.popperOffsets,s=c(a.placement),l=N(s),d=[q,O].indexOf(s)>=0?"height":"width";if(i&&r){var u=function(e,t){return T("number"!==typeof(e="function"===typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:D(e,P))}(o.padding,a),h=v(i),m="y"===l?R:q,p="y"===l?M:O,f=a.rects.reference[d]+a.rects.reference[l]-r[l]-a.rects.popper[d],g=r[l]-a.rects.reference[l],y=A(i),_=y?"y"===l?y.clientHeight||0:y.clientWidth||0:0,b=f/2-g/2,w=u[m],x=_-h[d]-u[p],k=_/2-h[d]/2+b,C=E(w,k,x),j=l;a.modifiersData[n]=((t={})[j]=C,t.centerOffset=C-k,t)}},effect:function(e){var t=e.state,a=e.options.element,n=void 0===a?"[data-popper-arrow]":a;null!=n&&("string"!==typeof n||(n=t.elements.popper.querySelector(n)))&&w(t.elements.popper,n)&&(t.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function J(e){return e.split("-")[1]}var $={top:"auto",right:"auto",bottom:"auto",left:"auto"};function Z(e){var t,a=e.popper,n=e.popperRect,o=e.placement,i=e.variation,r=e.offsets,s=e.position,l=e.gpuAcceleration,c=e.adaptive,u=e.roundOffsets,h=e.isFixed,m=r.x,p=void 0===m?0:m,f=r.y,y=void 0===f?0:f,_="function"===typeof u?u({x:p,y:y}):{x:p,y:y};p=_.x,y=_.y;var b=r.hasOwnProperty("x"),v=r.hasOwnProperty("y"),w=q,x=R,C=window;if(c){var S=A(a),I="clientHeight",N="clientWidth";if(S===d(a)&&"static"!==k(S=j(a)).position&&"absolute"===s&&(I="scrollHeight",N="scrollWidth"),o===R||(o===q||o===O)&&i===L)x=M,y-=(h&&S===C&&C.visualViewport?C.visualViewport.height:S[I])-n.height,y*=l?1:-1;if(o===q||(o===R||o===M)&&i===L)w=O,p-=(h&&S===C&&C.visualViewport?C.visualViewport.width:S[N])-n.width,p*=l?1:-1}var E,T=Object.assign({position:s},c&&$),D=!0===u?function(e,t){var a=e.x,n=e.y,o=t.devicePixelRatio||1;return{x:g(a*o)/o||0,y:g(n*o)/o||0}}({x:p,y:y},d(a)):{x:p,y:y};return p=D.x,y=D.y,l?Object.assign({},T,((E={})[x]=v?"0":"",E[w]=b?"0":"",E.transform=(C.devicePixelRatio||1)<=1?"translate("+p+"px, "+y+"px)":"translate3d("+p+"px, "+y+"px, 0)",E)):Object.assign({},T,((t={})[x]=v?y+"px":"",t[w]=b?p+"px":"",t.transform="",t))}var Q={passive:!0};var X={left:"right",right:"left",bottom:"top",top:"bottom"};function ee(e){return e.replace(/left|right|bottom|top/g,(function(e){return X[e]}))}var te={start:"end",end:"start"};function ae(e){return e.replace(/start|end/g,(function(e){return te[e]}))}function ne(e){var t=d(e);return{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function oe(e){return b(j(e)).left+ne(e).scrollLeft}function ie(e){var t=k(e),a=t.overflow,n=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(a+o+n)}function re(e){return["html","body","#document"].indexOf(x(e))>=0?e.ownerDocument.body:h(e)&&ie(e)?e:re(S(e))}function se(e,t){var a;void 0===t&&(t=[]);var n=re(e),o=n===(null==(a=e.ownerDocument)?void 0:a.body),i=d(n),r=o?[i].concat(i.visualViewport||[],ie(n)?n:[]):n,s=t.concat(r);return o?s:s.concat(se(S(r)))}function le(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function ce(e,t,a){return t===B?le(function(e,t){var a=d(e),n=j(e),o=a.visualViewport,i=n.clientWidth,r=n.clientHeight,s=0,l=0;if(o){i=o.width,r=o.height;var c=_();(c||!c&&"fixed"===t)&&(s=o.offsetLeft,l=o.offsetTop)}return{width:i,height:r,x:s+oe(e),y:l}}(e,a)):u(t)?function(e,t){var a=b(e,!1,"fixed"===t);return a.top=a.top+e.clientTop,a.left=a.left+e.clientLeft,a.bottom=a.top+e.clientHeight,a.right=a.left+e.clientWidth,a.width=e.clientWidth,a.height=e.clientHeight,a.x=a.left,a.y=a.top,a}(t,a):le(function(e){var t,a=j(e),n=ne(e),o=null==(t=e.ownerDocument)?void 0:t.body,i=p(a.scrollWidth,a.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),r=p(a.scrollHeight,a.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),s=-n.scrollLeft+oe(e),l=-n.scrollTop;return"rtl"===k(o||a).direction&&(s+=p(a.clientWidth,o?o.clientWidth:0)-i),{width:i,height:r,x:s,y:l}}(j(e)))}function de(e,t,a,n){var o="clippingParents"===t?function(e){var t=se(S(e)),a=["absolute","fixed"].indexOf(k(e).position)>=0&&h(e)?A(e):e;return u(a)?t.filter((function(e){return u(e)&&w(e,a)&&"body"!==x(e)})):[]}(e):[].concat(t),i=[].concat(o,[a]),r=i[0],s=i.reduce((function(t,a){var o=ce(e,a,n);return t.top=p(o.top,t.top),t.right=f(o.right,t.right),t.bottom=f(o.bottom,t.bottom),t.left=p(o.left,t.left),t}),ce(e,r,n));return s.width=s.right-s.left,s.height=s.bottom-s.top,s.x=s.left,s.y=s.top,s}function ue(e){var t,a=e.reference,n=e.element,o=e.placement,i=o?c(o):null,r=o?J(o):null,s=a.x+a.width/2-n.width/2,l=a.y+a.height/2-n.height/2;switch(i){case R:t={x:s,y:a.y-n.height};break;case M:t={x:s,y:a.y+a.height};break;case O:t={x:a.x+a.width,y:l};break;case q:t={x:a.x-n.width,y:l};break;default:t={x:a.x,y:a.y}}var d=i?N(i):null;if(null!=d){var u="y"===d?"height":"width";switch(r){case F:t[d]=t[d]-(a[u]/2-n[u]/2);break;case L:t[d]=t[d]+(a[u]/2-n[u]/2)}}return t}function he(e,t){void 0===t&&(t={});var a=t,n=a.placement,o=void 0===n?e.placement:n,i=a.strategy,r=void 0===i?e.strategy:i,s=a.boundary,l=void 0===s?W:s,c=a.rootBoundary,d=void 0===c?B:c,h=a.elementContext,m=void 0===h?H:h,p=a.altBoundary,f=void 0!==p&&p,g=a.padding,y=void 0===g?0:g,_=T("number"!==typeof y?y:D(y,P)),v=m===H?U:H,w=e.rects.popper,x=e.elements[f?v:m],k=de(u(x)?x:x.contextElement||j(e.elements.popper),l,d,r),C=b(e.elements.reference),S=ue({reference:C,element:w,strategy:"absolute",placement:o}),I=le(Object.assign({},w,S)),A=m===H?I:C,N={top:k.top-A.top+_.top,bottom:A.bottom-k.bottom+_.bottom,left:k.left-A.left+_.left,right:A.right-k.right+_.right},E=e.modifiersData.offset;if(m===H&&E){var q=E[o];Object.keys(N).forEach((function(e){var t=[O,M].indexOf(e)>=0?1:-1,a=[R,M].indexOf(e)>=0?"y":"x";N[e]+=q[a]*t}))}return N}function me(e,t,a){return void 0===a&&(a={x:0,y:0}),{top:e.top-t.height-a.y,right:e.right-t.width+a.x,bottom:e.bottom-t.height+a.y,left:e.left-t.width-a.x}}function pe(e){return[R,O,M,q].some((function(t){return e[t]>=0}))}var fe={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var t=e.state,a=e.options,n=e.name,o=a.offset,i=void 0===o?[0,0]:o,r=z.reduce((function(e,a){return e[a]=function(e,t,a){var n=c(e),o=[q,R].indexOf(n)>=0?-1:1,i="function"===typeof a?a(Object.assign({},t,{placement:e})):a,r=i[0],s=i[1];return r=r||0,s=(s||0)*o,[q,O].indexOf(n)>=0?{x:s,y:r}:{x:r,y:s}}(a,t.rects,i),e}),{}),s=r[t.placement],l=s.x,d=s.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=l,t.modifiersData.popperOffsets.y+=d),t.modifiersData[n]=r}};var ge={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,a=e.options,n=e.name,o=a.mainAxis,i=void 0===o||o,r=a.altAxis,s=void 0!==r&&r,l=a.boundary,d=a.rootBoundary,u=a.altBoundary,h=a.padding,m=a.tether,g=void 0===m||m,y=a.tetherOffset,_=void 0===y?0:y,b=he(t,{boundary:l,rootBoundary:d,padding:h,altBoundary:u}),w=c(t.placement),x=J(t.placement),k=!x,C=N(w),j="x"===C?"y":"x",S=t.modifiersData.popperOffsets,I=t.rects.reference,T=t.rects.popper,D="function"===typeof _?_(Object.assign({},t.rects,{placement:t.placement})):_,G="number"===typeof D?{mainAxis:D,altAxis:D}:Object.assign({mainAxis:0,altAxis:0},D),P=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,L={x:0,y:0};if(S){if(i){var W,B="y"===C?R:q,H="y"===C?M:O,U="y"===C?"height":"width",K=S[C],z=K+b[B],V=K-b[H],Y=g?-T[U]/2:0,$=x===F?I[U]:T[U],Z=x===F?-T[U]:-I[U],Q=t.elements.arrow,X=g&&Q?v(Q):{width:0,height:0},ee=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},te=ee[B],ae=ee[H],ne=E(0,I[U],X[U]),oe=k?I[U]/2-Y-ne-te-G.mainAxis:$-ne-te-G.mainAxis,ie=k?-I[U]/2+Y+ne+ae+G.mainAxis:Z+ne+ae+G.mainAxis,re=t.elements.arrow&&A(t.elements.arrow),se=re?"y"===C?re.clientTop||0:re.clientLeft||0:0,le=null!=(W=null==P?void 0:P[C])?W:0,ce=K+ie-le,de=E(g?f(z,K+oe-le-se):z,K,g?p(V,ce):V);S[C]=de,L[C]=de-K}if(s){var ue,me="x"===C?R:q,pe="x"===C?M:O,fe=S[j],ge="y"===j?"height":"width",ye=fe+b[me],_e=fe-b[pe],be=-1!==[R,q].indexOf(w),ve=null!=(ue=null==P?void 0:P[j])?ue:0,we=be?ye:fe-I[ge]-T[ge]-ve+G.altAxis,xe=be?fe+I[ge]+T[ge]-ve-G.altAxis:_e,ke=g&&be?function(e,t,a){var n=E(e,t,a);return n>a?a:n}(we,fe,xe):E(g?we:ye,fe,g?xe:_e);S[j]=ke,L[j]=ke-fe}t.modifiersData[n]=L}},requiresIfExists:["offset"]};function ye(e,t,a){void 0===a&&(a=!1);var n=h(t),o=h(t)&&function(e){var t=e.getBoundingClientRect(),a=g(t.width)/e.offsetWidth||1,n=g(t.height)/e.offsetHeight||1;return 1!==a||1!==n}(t),i=j(t),r=b(e,o,a),s={scrollLeft:0,scrollTop:0},l={x:0,y:0};return(n||!n&&!a)&&(("body"!==x(t)||ie(i))&&(s=function(e){return e!==d(e)&&h(e)?{scrollLeft:(t=e).scrollLeft,scrollTop:t.scrollTop}:ne(e);var t}(t)),h(t)?((l=b(t,!0)).x+=t.clientLeft,l.y+=t.clientTop):i&&(l.x=oe(i))),{x:r.left+s.scrollLeft-l.x,y:r.top+s.scrollTop-l.y,width:r.width,height:r.height}}function _e(e){var t=new Map,a=new Set,n=[];function o(e){a.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!a.has(e)){var n=t.get(e);n&&o(n)}})),n.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){a.has(e.name)||o(e)})),n}function be(e){var t;return function(){return t||(t=new Promise((function(a){Promise.resolve().then((function(){t=void 0,a(e())}))}))),t}}var ve={placement:"bottom",modifiers:[],strategy:"absolute"};function we(){for(var e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];return!t.some((function(e){return!(e&&"function"===typeof e.getBoundingClientRect)}))}function xe(e){void 0===e&&(e={});var t=e,a=t.defaultModifiers,n=void 0===a?[]:a,o=t.defaultOptions,i=void 0===o?ve:o;return function(e,t,a){void 0===a&&(a=i);var o={placement:"bottom",orderedModifiers:[],options:Object.assign({},ve,i),modifiersData:{},elements:{reference:e,popper:t},attributes:{},styles:{}},r=[],s=!1,l={state:o,setOptions:function(a){var s="function"===typeof a?a(o.options):a;c(),o.options=Object.assign({},i,o.options,s),o.scrollParents={reference:u(e)?se(e):e.contextElement?se(e.contextElement):[],popper:se(t)};var d=function(e){var t=_e(e);return V.reduce((function(e,a){return e.concat(t.filter((function(e){return e.phase===a})))}),[])}(function(e){var t=e.reduce((function(e,t){var a=e[t.name];return e[t.name]=a?Object.assign({},a,t,{options:Object.assign({},a.options,t.options),data:Object.assign({},a.data,t.data)}):t,e}),{});return Object.keys(t).map((function(e){return t[e]}))}([].concat(n,o.options.modifiers)));return o.orderedModifiers=d.filter((function(e){return e.enabled})),o.orderedModifiers.forEach((function(e){var t=e.name,a=e.options,n=void 0===a?{}:a,i=e.effect;if("function"===typeof i){var s=i({state:o,name:t,instance:l,options:n}),c=function(){};r.push(s||c)}})),l.update()},forceUpdate:function(){if(!s){var e=o.elements,t=e.reference,a=e.popper;if(we(t,a)){o.rects={reference:ye(t,A(a),"fixed"===o.options.strategy),popper:v(a)},o.reset=!1,o.placement=o.options.placement,o.orderedModifiers.forEach((function(e){return o.modifiersData[e.name]=Object.assign({},e.data)}));for(var n=0;n<o.orderedModifiers.length;n++)if(!0!==o.reset){var i=o.orderedModifiers[n],r=i.fn,c=i.options,d=void 0===c?{}:c,u=i.name;"function"===typeof r&&(o=r({state:o,options:d,name:u,instance:l})||o)}else o.reset=!1,n=-1}}},update:be((function(){return new Promise((function(e){l.forceUpdate(),e(o)}))})),destroy:function(){c(),s=!0}};if(!we(e,t))return l;function c(){r.forEach((function(e){return e()})),r=[]}return l.setOptions(a).then((function(e){!s&&a.onFirstUpdate&&a.onFirstUpdate(e)})),l}}const ke=xe({defaultModifiers:[{name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,a=e.name,n=t.rects.reference,o=t.rects.popper,i=t.modifiersData.preventOverflow,r=he(t,{elementContext:"reference"}),s=he(t,{altBoundary:!0}),l=me(r,n),c=me(s,o,i),d=pe(l),u=pe(c);t.modifiersData[a]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:d,hasPopperEscaped:u},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":d,"data-popper-escaped":u})}},{name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state,a=e.name;t.modifiersData[a]=ue({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})},data:{}},{name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,a=e.options,n=a.gpuAcceleration,o=void 0===n||n,i=a.adaptive,r=void 0===i||i,s=a.roundOffsets,l=void 0===s||s,d={placement:c(t.placement),variation:J(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:o,isFixed:"fixed"===t.options.strategy};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,Z(Object.assign({},d,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:r,roundOffsets:l})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,Z(Object.assign({},d,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}},{name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(e){var t=e.state,a=e.instance,n=e.options,o=n.scroll,i=void 0===o||o,r=n.resize,s=void 0===r||r,l=d(t.elements.popper),c=[].concat(t.scrollParents.reference,t.scrollParents.popper);return i&&c.forEach((function(e){e.addEventListener("scroll",a.update,Q)})),s&&l.addEventListener("resize",a.update,Q),function(){i&&c.forEach((function(e){e.removeEventListener("scroll",a.update,Q)})),s&&l.removeEventListener("resize",a.update,Q)}},data:{}},fe,{name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,a=e.options,n=e.name;if(!t.modifiersData[n]._skip){for(var o=a.mainAxis,i=void 0===o||o,r=a.altAxis,s=void 0===r||r,l=a.fallbackPlacements,d=a.padding,u=a.boundary,h=a.rootBoundary,m=a.altBoundary,p=a.flipVariations,f=void 0===p||p,g=a.allowedAutoPlacements,y=t.options.placement,_=c(y),b=l||(_===y||!f?[ee(y)]:function(e){if(c(e)===G)return[];var t=ee(e);return[ae(e),t,ae(t)]}(y)),v=[y].concat(b).reduce((function(e,a){return e.concat(c(a)===G?function(e,t){void 0===t&&(t={});var a=t,n=a.placement,o=a.boundary,i=a.rootBoundary,r=a.padding,s=a.flipVariations,l=a.allowedAutoPlacements,d=void 0===l?z:l,u=J(n),h=u?s?K:K.filter((function(e){return J(e)===u})):P,m=h.filter((function(e){return d.indexOf(e)>=0}));0===m.length&&(m=h);var p=m.reduce((function(t,a){return t[a]=he(e,{placement:a,boundary:o,rootBoundary:i,padding:r})[c(a)],t}),{});return Object.keys(p).sort((function(e,t){return p[e]-p[t]}))}(t,{placement:a,boundary:u,rootBoundary:h,padding:d,flipVariations:f,allowedAutoPlacements:g}):a)}),[]),w=t.rects.reference,x=t.rects.popper,k=new Map,C=!0,j=v[0],S=0;S<v.length;S++){var I=v[S],A=c(I),N=J(I)===F,E=[R,M].indexOf(A)>=0,T=E?"width":"height",D=he(t,{placement:I,boundary:u,rootBoundary:h,altBoundary:m,padding:d}),L=E?N?O:q:N?M:R;w[T]>x[T]&&(L=ee(L));var W=ee(L),B=[];if(i&&B.push(D[A]<=0),s&&B.push(D[L]<=0,D[W]<=0),B.every((function(e){return e}))){j=I,C=!1;break}k.set(I,B)}if(C)for(var H=function(e){var t=v.find((function(t){var a=k.get(t);if(a)return a.slice(0,e).every((function(e){return e}))}));if(t)return j=t,"break"},U=f?3:1;U>0;U--){if("break"===H(U))break}t.placement!==j&&(t.modifiersData[n]._skip=!0,t.placement=j,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}},ge,Y]}),Ce=["enabled","placement","strategy","modifiers"];const je={name:"applyStyles",enabled:!1,phase:"afterWrite",fn:()=>{}},Se={name:"ariaDescribedBy",enabled:!0,phase:"afterWrite",effect:e=>{let{state:t}=e;return()=>{const{reference:e,popper:a}=t.elements;if("removeAttribute"in e){const t=(e.getAttribute("aria-describedby")||"").split(",").filter((e=>e.trim()!==a.id));t.length?e.setAttribute("aria-describedby",t.join(",")):e.removeAttribute("aria-describedby")}}},fn:e=>{let{state:t}=e;var a;const{popper:n,reference:o}=t.elements,i=null==(a=n.getAttribute("role"))?void 0:a.toLowerCase();if(n.id&&"tooltip"===i&&"setAttribute"in o){const e=o.getAttribute("aria-describedby");if(e&&-1!==e.split(",").indexOf(n.id))return;o.setAttribute("aria-describedby",e?`${e},${n.id}`:n.id)}}},Ie=[];var Ae=function(e,t){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},{enabled:o=!0,placement:i="bottom",strategy:s="absolute",modifiers:c=Ie}=a,d=function(e,t){if(null==e)return{};var a={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;a[n]=e[n]}return a}(a,Ce);const u=(0,n.useRef)(c),h=(0,n.useRef)(),m=(0,n.useCallback)((()=>{var e;null==(e=h.current)||e.update()}),[]),p=(0,n.useCallback)((()=>{var e;null==(e=h.current)||e.forceUpdate()}),[]),[f,g]=l((0,n.useState)({placement:i,update:m,forceUpdate:p,attributes:{},styles:{popper:{},arrow:{}}})),y=(0,n.useMemo)((()=>({name:"updateStateModifier",enabled:!0,phase:"write",requires:["computeStyles"],fn:e=>{let{state:t}=e;const a={},n={};Object.keys(t.elements).forEach((e=>{a[e]=t.styles[e],n[e]=t.attributes[e]})),g({state:t,styles:a,attributes:n,update:m,forceUpdate:p,placement:t.placement})}})),[m,p,g]),_=(0,n.useMemo)((()=>(r(u.current,c)||(u.current=c),u.current)),[c]);return(0,n.useEffect)((()=>{h.current&&o&&h.current.setOptions({placement:i,strategy:s,modifiers:[..._,y,je]})}),[s,i,y,o,_]),(0,n.useEffect)((()=>{if(o&&null!=e&&null!=t)return h.current=ke(e,t,Object.assign({},d,{placement:i,strategy:s,modifiers:[..._,Se,y]})),()=>{null!=h.current&&(h.current.destroy(),h.current=void 0,g((e=>Object.assign({},e,{attributes:{},styles:{popper:{}}}))))}}),[o,e,t]),f}},5345:function(e,t,a){"use strict";var n=a(753),o=a(182),i=a(5043),r=a(8894),s=a(5970),l=a(9791);const c=()=>{};t.A=function(e,t){let{disabled:a,clickTrigger:d}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const u=t||c;(0,s.A)(e,u,{disabled:a,clickTrigger:d});const h=(0,r.A)((e=>{(0,l.v$)(e)&&u(e)}));(0,i.useEffect)((()=>{if(a||null==e)return;const t=(0,o.A)((0,s.j)(e));let i=(t.defaultView||window).event;const r=(0,n.A)(t,"keyup",(e=>{e!==i?h(e):i=void 0}));return()=>{r()}}),[e,a,h])}},2504:function(e,t,a){"use strict";a.d(t,{A:function(){return l}});var n=a(182),o=a(8279),i=a(5043),r=a(1701);const s=(e,t)=>o.A?null==e?(t||(0,n.A)()).body:("function"===typeof e&&(e=e()),e&&"current"in e&&(e=e.current),e&&("nodeType"in e||e.getBoundingClientRect)?e:null):null;function l(e,t){const a=(0,r.A)(),[n,o]=(0,i.useState)((()=>s(e,null==a?void 0:a.document)));if(!n){const t=s(e);t&&o(t)}return(0,i.useEffect)((()=>{t&&n&&t(n)}),[t,n]),(0,i.useEffect)((()=>{const t=s(e);t!==n&&o(t)}),[e,n]),n}},1701:function(e,t,a){"use strict";a.d(t,{A:function(){return r}});var n=a(5043),o=a(8279);const i=(0,n.createContext)(o.A?window:void 0);i.Provider;function r(){return(0,n.useContext)(i)}},9791:function(e,t,a){"use strict";a.d(t,{am:function(){return i},v$:function(){return o}});var n=a(5043);function o(e){return"Escape"===e.code||27===e.keyCode}function i(e){if(!e||"function"===typeof e)return null;const{major:t}=function(){const e=n.version.split(".");return{major:+e[0],minor:+e[1],patch:+e[2]}}();return t>=19?e.props.ref:e.ref}},8457:function(e,t,a){"use strict";a.d(t,{A:function(){return o}});var n=a(5043);function o(){return(0,n.useState)(null)}},6218:function(e,t,a){"use strict";var n=a(5043);t.A=function(e){const t=(0,n.useRef)(e);return(0,n.useEffect)((()=>{t.current=e}),[e]),t}},8894:function(e,t,a){"use strict";a.d(t,{A:function(){return i}});var n=a(5043),o=a(6218);function i(e){const t=(0,o.A)(e);return(0,n.useCallback)((function(){return t.current&&t.current(...arguments)}),[t])}},2677:function(e,t,a){"use strict";var n=a(5043);const o="undefined"!==typeof a.g&&a.g.navigator&&"ReactNative"===a.g.navigator.product,i="undefined"!==typeof document;t.A=i||o?n.useLayoutEffect:n.useEffect},3539:function(e,t,a){"use strict";var n=a(5043);const o=e=>e&&"function"!==typeof e?t=>{e.current=t}:e;t.A=function(e,t){return(0,n.useMemo)((()=>function(e,t){const a=o(e),n=o(t);return e=>{a&&a(e),n&&n(e)}}(e,t)),[e,t])}},2665:function(e,t,a){"use strict";a.d(t,{A:function(){return o}});var n=a(5043);function o(){const e=(0,n.useRef)(!0),t=(0,n.useRef)((()=>e.current));return(0,n.useEffect)((()=>(e.current=!0,()=>{e.current=!1})),[]),t.current}},4696:function(e,t,a){"use strict";a.d(t,{A:function(){return o}});var n=a(5043);function o(e){const t=(0,n.useRef)(null);return(0,n.useEffect)((()=>{t.current=e})),t.current}},3043:function(e,t,a){"use strict";var n=a(8279),o=!1,i=!1;try{var r={get passive(){return o=!0},get once(){return i=o=!0}};n.A&&(window.addEventListener("test",r,r),window.removeEventListener("test",r,!0))}catch(s){}t.Ay=function(e,t,a,n){if(n&&"boolean"!==typeof n&&!i){var r=n.once,s=n.capture,l=a;!i&&r&&(l=a.__once||function e(n){this.removeEventListener(t,e,s),a.call(this,n)},a.__once=l),e.addEventListener(t,l,o?n:s)}e.addEventListener(t,a,n)}},8279:function(e,t){"use strict";t.A=!("undefined"===typeof window||!window.document||!window.document.createElement)},2631:function(e,t,a){"use strict";function n(e,t){return e.contains?e.contains(t):e.compareDocumentPosition?e===t||!!(16&e.compareDocumentPosition(t)):void 0}a.d(t,{A:function(){return n}})},8747:function(e,t,a){"use strict";a.d(t,{A:function(){return c}});var n=a(182);function o(e,t){return function(e){var t=(0,n.A)(e);return t&&t.defaultView||window}(e).getComputedStyle(e,t)}var i=/([A-Z])/g;var r=/^ms-/;function s(e){return function(e){return e.replace(i,"-$1").toLowerCase()}(e).replace(r,"-ms-")}var l=/^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i;var c=function(e,t){var a="",n="";if("string"===typeof t)return e.style.getPropertyValue(s(t))||o(e).getPropertyValue(s(t));Object.keys(t).forEach((function(o){var i=t[o];i||0===i?!function(e){return!(!e||!l.test(e))}(o)?a+=s(o)+": "+i+";":n+=o+"("+i+") ":e.style.removeProperty(s(o))})),n&&(a+="transform: "+n+";"),e.style.cssText+=";"+a}},5486:function(e,t,a){"use strict";function n(e,t){return e.classList?!!t&&e.classList.contains(t):-1!==(" "+(e.className.baseVal||e.className)+" ").indexOf(" "+t+" ")}a.d(t,{A:function(){return n}})},753:function(e,t,a){"use strict";var n=a(3043),o=a(8260);t.A=function(e,t,a,i){return(0,n.Ay)(e,t,a,i),function(){(0,o.A)(e,t,a,i)}}},182:function(e,t,a){"use strict";function n(e){return e&&e.ownerDocument||document}a.d(t,{A:function(){return n}})},3818:function(e,t,a){"use strict";a.d(t,{A:function(){return o}});var n=Function.prototype.bind.call(Function.prototype.call,[].slice);function o(e,t){return n(e.querySelectorAll(t))}},8260:function(e,t){"use strict";t.A=function(e,t,a,n){var o=n&&"boolean"!==typeof n?n.capture:n;e.removeEventListener(t,a,o),a.__once&&e.removeEventListener(t,a.__once,o)}},4232:function(e,t,a){"use strict";a.d(t,{A:function(){return r}});var n=a(8747),o=a(753);function i(e,t,a){void 0===a&&(a=5);var n=!1,i=setTimeout((function(){n||function(e,t,a,n){if(void 0===a&&(a=!1),void 0===n&&(n=!0),e){var o=document.createEvent("HTMLEvents");o.initEvent(t,a,n),e.dispatchEvent(o)}}(e,"transitionend",!0)}),t+a),r=(0,o.A)(e,"transitionend",(function(){n=!0}),{once:!0});return function(){clearTimeout(i),r()}}function r(e,t,a,r){null==a&&(a=function(e){var t=(0,n.A)(e,"transitionDuration")||"",a=-1===t.indexOf("ms")?1e3:1;return parseFloat(t)*a}(e)||0);var s=i(e,a,r),l=(0,o.A)(e,"transitionend",t);return function(){s(),l()}}},122:function(e){"use strict";e.exports=function e(t,a){if(t===a)return!0;if(t&&a&&"object"==typeof t&&"object"==typeof a){if(t.constructor!==a.constructor)return!1;var n,o,i;if(Array.isArray(t)){if((n=t.length)!=a.length)return!1;for(o=n;0!==o--;)if(!e(t[o],a[o]))return!1;return!0}if(t.constructor===RegExp)return t.source===a.source&&t.flags===a.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===a.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===a.toString();if((n=(i=Object.keys(t)).length)!==Object.keys(a).length)return!1;for(o=n;0!==o--;)if(!Object.prototype.hasOwnProperty.call(a,i[o]))return!1;for(o=n;0!==o--;){var r=i[o];if(!e(t[r],a[r]))return!1}return!0}return t!==t&&a!==a}},2740:function(e){"use strict";e.exports=function(e,t,a,n,o,i,r,s){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[a,n,o,i,r,s],d=0;(l=new Error(t.replace(/%s/g,(function(){return c[d++]})))).name="Invariant Violation"}throw l.framesToPop=1,l}}},446:function(e,t,a){var n=NaN,o="[object Symbol]",i=/^\s+|\s+$/g,r=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,l=/^0o[0-7]+$/i,c=parseInt,d="object"==typeof a.g&&a.g&&a.g.Object===Object&&a.g,u="object"==typeof self&&self&&self.Object===Object&&self,h=d||u||Function("return this")(),m=Object.prototype.toString,p=Math.max,f=Math.min,g=function(){return h.Date.now()};function y(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function _(e){if("number"==typeof e)return e;if(function(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&m.call(e)==o}(e))return n;if(y(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=y(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(i,"");var a=s.test(e);return a||l.test(e)?c(e.slice(2),a?2:8):r.test(e)?n:+e}e.exports=function(e,t,a){var n,o,i,r,s,l,c=0,d=!1,u=!1,h=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function m(t){var a=n,i=o;return n=o=void 0,c=t,r=e.apply(i,a)}function b(e){var a=e-l;return void 0===l||a>=t||a<0||u&&e-c>=i}function v(){var e=g();if(b(e))return w(e);s=setTimeout(v,function(e){var a=t-(e-l);return u?f(a,i-(e-c)):a}(e))}function w(e){return s=void 0,h&&n?m(e):(n=o=void 0,r)}function x(){var e=g(),a=b(e);if(n=arguments,o=this,l=e,a){if(void 0===s)return function(e){return c=e,s=setTimeout(v,t),d?m(e):r}(l);if(u)return s=setTimeout(v,t),m(l)}return void 0===s&&(s=setTimeout(v,t)),r}return t=_(t)||0,y(a)&&(d=!!a.leading,i=(u="maxWait"in a)?p(_(a.maxWait)||0,t):i,h="trailing"in a?!!a.trailing:h),x.cancel=function(){void 0!==s&&clearTimeout(s),c=0,n=l=o=s=void 0},x.flush=function(){return void 0===s?r:w(g())},x}},2123:function(e){"use strict";var t=Object.getOwnPropertySymbols,a=Object.prototype.hasOwnProperty,n=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},a=0;a<10;a++)t["_"+String.fromCharCode(a)]=a;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var n={};return"abcdefghijklmnopqrst".split("").forEach((function(e){n[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},n)).join("")}catch(o){return!1}}()?Object.assign:function(e,o){for(var i,r,s=function(e){if(null===e||void 0===e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),l=1;l<arguments.length;l++){for(var c in i=Object(arguments[l]))a.call(i,c)&&(s[c]=i[c]);if(t){r=t(i);for(var d=0;d<r.length;d++)n.call(i,r[d])&&(s[r[d]]=i[r[d]])}}return s}},1497:function(e,t,a){"use strict";var n=a(3218);function o(){}function i(){}i.resetWarningCache=o,e.exports=function(){function e(e,t,a,o,i,r){if(r!==n){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var a={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:o};return a.PropTypes=a,a}},5173:function(e,t,a){e.exports=a(1497)()},3218:function(e){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},1833:function(e,t,a){"use strict";a.d(t,{A:function(){return p}});var n=a(5043),o=a(6618),i=a(5173),r=a.n(i),s=a(8139),l=a.n(s),c=a(579);const d={"aria-label":r().string,onClick:r().func,variant:r().oneOf(["white"])},u=n.forwardRef(((e,t)=>{let{className:a,variant:n,"aria-label":o="Close",...i}=e;return(0,c.jsx)("button",{ref:t,type:"button",className:l()("btn-close",n&&`btn-close-${n}`,a),"aria-label":o,...i})}));u.displayName="CloseButton",u.propTypes=d;var h=u,m=a(1602);var p=n.forwardRef(((e,t)=>{let{closeLabel:a="Close",closeVariant:i,closeButton:r=!1,onHide:s,children:l,...d}=e;const u=(0,n.useContext)(m.A),p=(0,o.A)((()=>{null==u||u.onHide(),null==s||s()}));return(0,c.jsxs)("div",{ref:t,...d,children:[l,r&&(0,c.jsx)(h,{"aria-label":a,variant:i,onClick:p})]})}))},11:function(e,t,a){"use strict";a.d(t,{A:function(){return p},R:function(){return m}});var n=a(5486);var o=a(8747),i=a(3818);function r(e,t){return e.replace(new RegExp("(^|\\s)"+t+"(?:\\s|$)","g"),"$1").replace(/\s+/g," ").replace(/^\s*|\s*$/g,"")}var s=a(7832);const l=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",c=".sticky-top",d=".navbar-toggler";class u extends s.A{adjustAndStore(e,t,a){const n=t.style[e];t.dataset[e]=n,(0,o.A)(t,{[e]:`${parseFloat((0,o.A)(t,e))+a}px`})}restore(e,t){const a=t.dataset[e];void 0!==a&&(delete t.dataset[e],(0,o.A)(t,{[e]:a}))}setContainerStyle(e){super.setContainerStyle(e);const t=this.getElement();var a,o;if(o="modal-open",(a=t).classList?a.classList.add(o):(0,n.A)(a,o)||("string"===typeof a.className?a.className=a.className+" "+o:a.setAttribute("class",(a.className&&a.className.baseVal||"")+" "+o)),!e.scrollBarWidth)return;const r=this.isRTL?"paddingLeft":"paddingRight",s=this.isRTL?"marginLeft":"marginRight";(0,i.A)(t,l).forEach((t=>this.adjustAndStore(r,t,e.scrollBarWidth))),(0,i.A)(t,c).forEach((t=>this.adjustAndStore(s,t,-e.scrollBarWidth))),(0,i.A)(t,d).forEach((t=>this.adjustAndStore(s,t,e.scrollBarWidth)))}removeContainerStyle(e){super.removeContainerStyle(e);const t=this.getElement();var a,n;n="modal-open",(a=t).classList?a.classList.remove(n):"string"===typeof a.className?a.className=r(a.className,n):a.setAttribute("class",r(a.className&&a.className.baseVal||"",n));const o=this.isRTL?"paddingLeft":"paddingRight",s=this.isRTL?"marginLeft":"marginRight";(0,i.A)(t,l).forEach((e=>this.restore(o,e))),(0,i.A)(t,c).forEach((e=>this.restore(s,e))),(0,i.A)(t,d).forEach((e=>this.restore(s,e)))}}let h;function m(e){return h||(h=new u(e)),h}var p=u},4282:function(e,t,a){"use strict";var n=a(8139),o=a.n(n),i=a(5043),r=a(4140),s=a(7852),l=a(579);const c=i.forwardRef(((e,t)=>{let{as:a,bsPrefix:n,variant:i="primary",size:c,active:d=!1,disabled:u=!1,className:h,...m}=e;const p=(0,s.oU)(n,"btn"),[f,{tagName:g}]=(0,r.Am)({tagName:a,disabled:u,...m}),y=g;return(0,l.jsx)(y,{...f,...m,ref:t,disabled:u,className:o()(h,p,d&&"active",i&&`${p}-${i}`,c&&`${p}-${c}`,m.href&&u&&"disabled")})}));c.displayName="Button",t.A=c},2306:function(e,t,a){"use strict";a.d(t,{A:function(){return g}});var n=a(8139),o=a.n(n),i=a(8747),r=a(5043),s=a(6555),l=a(3492);var c=function(){for(var e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];return t.filter((e=>null!=e)).reduce(((e,t)=>{if("function"!==typeof t)throw new Error("Invalid Argument Type, must only provide functions, undefined, or null.");return null===e?t:function(){for(var a=arguments.length,n=new Array(a),o=0;o<a;o++)n[o]=arguments[o];e.apply(this,n),t.apply(this,n)}}),null)},d=a(2643),u=a(4910),h=a(579);const m={height:["marginTop","marginBottom"],width:["marginLeft","marginRight"]};function p(e,t){const a=t[`offset${e[0].toUpperCase()}${e.slice(1)}`],n=m[e];return a+parseInt((0,i.A)(t,n[0]),10)+parseInt((0,i.A)(t,n[1]),10)}const f={[s.kp]:"collapse",[s.ze]:"collapsing",[s.ns]:"collapsing",[s._K]:"collapse show"};var g=r.forwardRef(((e,t)=>{let{onEnter:a,onEntering:n,onEntered:i,onExit:s,onExiting:m,className:g,children:y,dimension:_="height",in:b=!1,timeout:v=300,mountOnEnter:w=!1,unmountOnExit:x=!1,appear:k=!1,getDimensionValue:C=p,...j}=e;const S="function"===typeof _?_():_,I=(0,r.useMemo)((()=>c((e=>{e.style[S]="0"}),a)),[S,a]),A=(0,r.useMemo)((()=>c((e=>{const t=`scroll${S[0].toUpperCase()}${S.slice(1)}`;e.style[S]=`${e[t]}px`}),n)),[S,n]),N=(0,r.useMemo)((()=>c((e=>{e.style[S]=null}),i)),[S,i]),E=(0,r.useMemo)((()=>c((e=>{e.style[S]=`${C(S,e)}px`,(0,d.A)(e)}),s)),[s,C,S]),T=(0,r.useMemo)((()=>c((e=>{e.style[S]=null}),m)),[S,m]);return(0,h.jsx)(u.A,{ref:t,addEndListener:l.A,...j,"aria-expanded":j.role?b:null,onEnter:I,onEntering:A,onEntered:N,onExit:E,onExiting:T,childRef:y.ref,in:b,timeout:v,mountOnEnter:w,unmountOnExit:x,appear:k,children:(e,t)=>r.cloneElement(y,{...t,className:o()(g,y.props.className,f[e],"width"===S&&"collapse-horizontal")})})}))},8072:function(e,t,a){"use strict";var n=a(8139),o=a.n(n),i=a(5043),r=a(6555),s=a(3492),l=a(2643),c=a(4910),d=a(579);const u={[r.ns]:"show",[r._K]:"show"},h=i.forwardRef(((e,t)=>{let{className:a,children:n,transitionClasses:r={},onEnter:h,...m}=e;const p={in:!1,timeout:300,mountOnEnter:!1,unmountOnExit:!1,appear:!1,...m},f=(0,i.useCallback)(((e,t)=>{(0,l.A)(e),null==h||h(e,t)}),[h]);return(0,d.jsx)(c.A,{ref:t,addEndListener:s.A,...p,onEnter:f,childRef:n.ref,children:(e,t)=>i.cloneElement(n,{...t,className:o()("fade",a,n.props.className,u[e],r[e])})})}));h.displayName="Fade",t.A=h},2557:function(e,t,a){"use strict";a.d(t,{A:function(){return G}});var n,o=a(8139),i=a.n(o),r=a(3043),s=a(8279),l=a(182),c=a(8260);function d(e){if((!n&&0!==n||e)&&s.A){var t=document.createElement("div");t.style.position="absolute",t.style.top="-9999px",t.style.width="50px",t.style.height="50px",t.style.overflow="scroll",document.body.appendChild(t),n=t.offsetWidth-t.clientWidth,document.body.removeChild(t)}return n}var u=a(5043);var h=a(6618),m=a(8293),p=a(9109),f=a(4232),g=a(8170),y=a(11),_=a(8072),b=a(7852),v=a(579);const w=u.forwardRef(((e,t)=>{let{className:a,bsPrefix:n,as:o="div",...r}=e;return n=(0,b.oU)(n,"modal-body"),(0,v.jsx)(o,{ref:t,className:i()(a,n),...r})}));w.displayName="ModalBody";var x=w,k=a(1602);const C=u.forwardRef(((e,t)=>{let{bsPrefix:a,className:n,contentClassName:o,centered:r,size:s,fullscreen:l,children:c,scrollable:d,...u}=e;a=(0,b.oU)(a,"modal");const h=`${a}-dialog`,m="string"===typeof l?`${a}-fullscreen-${l}`:`${a}-fullscreen`;return(0,v.jsx)("div",{...u,ref:t,className:i()(h,n,s&&`${a}-${s}`,r&&`${h}-centered`,d&&`${h}-scrollable`,l&&m),children:(0,v.jsx)("div",{className:i()(`${a}-content`,o),children:c})})}));C.displayName="ModalDialog";var j=C;const S=u.forwardRef(((e,t)=>{let{className:a,bsPrefix:n,as:o="div",...r}=e;return n=(0,b.oU)(n,"modal-footer"),(0,v.jsx)(o,{ref:t,className:i()(a,n),...r})}));S.displayName="ModalFooter";var I=S,A=a(1833);const N=u.forwardRef(((e,t)=>{let{bsPrefix:a,className:n,closeLabel:o="Close",closeButton:r=!1,...s}=e;return a=(0,b.oU)(a,"modal-header"),(0,v.jsx)(A.A,{ref:t,...s,className:i()(n,a),closeLabel:o,closeButton:r})}));N.displayName="ModalHeader";var E=N;const T=(0,a(4488).A)("h4"),D=u.forwardRef(((e,t)=>{let{className:a,bsPrefix:n,as:o=T,...r}=e;return n=(0,b.oU)(n,"modal-title"),(0,v.jsx)(o,{ref:t,className:i()(a,n),...r})}));D.displayName="ModalTitle";var R=D;function M(e){return(0,v.jsx)(_.A,{...e,timeout:null})}function O(e){return(0,v.jsx)(_.A,{...e,timeout:null})}const q=u.forwardRef(((e,t)=>{let{bsPrefix:a,className:n,style:o,dialogClassName:_,contentClassName:w,children:x,dialogAs:C=j,"data-bs-theme":S,"aria-labelledby":I,"aria-describedby":A,"aria-label":N,show:E=!1,animation:T=!0,backdrop:D=!0,keyboard:R=!0,onEscapeKeyDown:q,onShow:G,onHide:P,container:F,autoFocus:L=!0,enforceFocus:W=!0,restoreFocus:B=!0,restoreFocusOptions:H,onEntered:U,onExit:K,onExiting:z,onEnter:V,onEntering:Y,onExited:J,backdropClassName:$,manager:Z,...Q}=e;const[X,ee]=(0,u.useState)({}),[te,ae]=(0,u.useState)(!1),ne=(0,u.useRef)(!1),oe=(0,u.useRef)(!1),ie=(0,u.useRef)(null),[re,se]=(0,u.useState)(null),le=(0,m.A)(t,se),ce=(0,h.A)(P),de=(0,b.Wz)();a=(0,b.oU)(a,"modal");const ue=(0,u.useMemo)((()=>({onHide:ce})),[ce]);function he(){return Z||(0,y.R)({isRTL:de})}function me(e){if(!s.A)return;const t=he().getScrollbarWidth()>0,a=e.scrollHeight>(0,l.A)(e).documentElement.clientHeight;ee({paddingRight:t&&!a?d():void 0,paddingLeft:!t&&a?d():void 0})}const pe=(0,h.A)((()=>{re&&me(re.dialog)}));(0,p.A)((()=>{(0,c.A)(window,"resize",pe),null==ie.current||ie.current()}));const fe=()=>{ne.current=!0},ge=e=>{ne.current&&re&&e.target===re.dialog&&(oe.current=!0),ne.current=!1},ye=()=>{ae(!0),ie.current=(0,f.A)(re.dialog,(()=>{ae(!1)}))},_e=e=>{"static"!==D?oe.current||e.target!==e.currentTarget?oe.current=!1:null==P||P():(e=>{e.target===e.currentTarget&&ye()})(e)},be=(0,u.useCallback)((e=>(0,v.jsx)("div",{...e,className:i()(`${a}-backdrop`,$,!T&&"show")})),[T,$,a]),ve={...o,...X};ve.display="block";return(0,v.jsx)(k.A.Provider,{value:ue,children:(0,v.jsx)(g.A,{show:E,ref:le,backdrop:D,container:F,keyboard:!0,autoFocus:L,enforceFocus:W,restoreFocus:B,restoreFocusOptions:H,onEscapeKeyDown:e=>{R?null==q||q(e):(e.preventDefault(),"static"===D&&ye())},onShow:G,onHide:P,onEnter:(e,t)=>{e&&me(e),null==V||V(e,t)},onEntering:(e,t)=>{null==Y||Y(e,t),(0,r.Ay)(window,"resize",pe)},onEntered:U,onExit:e=>{null==ie.current||ie.current(),null==K||K(e)},onExiting:z,onExited:e=>{e&&(e.style.display=""),null==J||J(e),(0,c.A)(window,"resize",pe)},manager:he(),transition:T?M:void 0,backdropTransition:T?O:void 0,renderBackdrop:be,renderDialog:e=>(0,v.jsx)("div",{role:"dialog",...e,style:ve,className:i()(n,a,te&&`${a}-static`,!T&&"show"),onClick:D?_e:void 0,onMouseUp:ge,"data-bs-theme":S,"aria-label":N,"aria-labelledby":I,"aria-describedby":A,children:(0,v.jsx)(C,{...Q,onMouseDown:fe,className:_,contentClassName:w,children:x})})})})}));q.displayName="Modal";var G=Object.assign(q,{Body:x,Header:E,Title:R,Footer:I,Dialog:j,TRANSITION_DURATION:300,BACKDROP_TRANSITION_DURATION:150})},1602:function(e,t,a){"use strict";const n=a(5043).createContext({onHide(){}});t.A=n},5212:function(e,t,a){"use strict";a.d(t,{A:function(){return L}});var n=a(2631),o=a(5173),i=a.n(o),r=a(5043);var s=a(9109);const l=2**31-1;function c(e,t,a){const n=a-Date.now();e.current=n<=l?setTimeout(t,n):setTimeout((()=>c(e,t,a)),l)}function d(){const e=function(){const e=(0,r.useRef)(!0),t=(0,r.useRef)((()=>e.current));return(0,r.useEffect)((()=>(e.current=!0,()=>{e.current=!1})),[]),t.current}(),t=(0,r.useRef)();return(0,s.A)((()=>clearTimeout(t.current))),(0,r.useMemo)((()=>{const a=()=>clearTimeout(t.current);return{set:function(n){let o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;e()&&(a(),o<=l?t.current=setTimeout(n,o):c(t,n,Date.now()+o))},clear:a,handleRef:t}}),[])}a(6440);var u=a(7121),h=a(8293),m=a(8139),p=a.n(m),f=a(7950),g=a(8457),y=a(3539),_=a(2188),b=a(5345),v=a(2504),w=a(5978),x=a(9576);const k=r.forwardRef(((e,t)=>{const{flip:a,offset:n,placement:o,containerPadding:i,popperConfig:s={},transition:l,runTransition:c}=e,[d,u]=(0,g.A)(),[h,m]=(0,g.A)(),p=(0,y.A)(u,t),k=(0,v.A)(e.container),C=(0,v.A)(e.target),[j,S]=(0,r.useState)(!e.show),I=(0,_.A)(C,d,(0,w.Ay)({placement:o,enableEvents:!!e.show,containerPadding:i||5,flip:a,offset:n,arrowElement:h,popperConfig:s}));e.show&&j&&S(!1);const A=e.show||!j;if((0,b.A)(d,e.onHide,{disabled:!e.rootClose||e.rootCloseDisabled,clickTrigger:e.rootCloseEvent}),!A)return null;const{onExit:N,onExiting:E,onEnter:T,onEntering:D,onEntered:R}=e;let M=e.children(Object.assign({},I.attributes.popper,{style:I.styles.popper,ref:p}),{popper:I,placement:o,show:!!e.show,arrowProps:Object.assign({},I.attributes.arrow,{style:I.styles.arrow,ref:m})});return M=(0,x.Yc)(l,c,{in:!!e.show,appear:!0,mountOnEnter:!0,unmountOnExit:!0,children:M,onExit:N,onExiting:E,onExited:function(){S(!0),e.onExited&&e.onExited(...arguments)},onEnter:T,onEntering:D,onEntered:R}),k?f.createPortal(M,k):null}));k.displayName="Overlay";var C=k,j=a(6618),S=a(4723),I=a(5486),A=a(7852),N=a(2719),E=a(6213),T=a(6330),D=a(579);const R=r.forwardRef(((e,t)=>{let{bsPrefix:a,placement:n="right",className:o,style:i,children:r,arrowProps:s,hasDoneInitialMeasure:l,popper:c,show:d,...u}=e;a=(0,A.oU)(a,"tooltip");const h=(0,A.Wz)(),[m]=(null==n?void 0:n.split("-"))||[],f=(0,E.G)(m,h);let g=i;return d&&!l&&(g={...i,...(0,T.A)(null==c?void 0:c.strategy)}),(0,D.jsxs)("div",{ref:t,style:g,role:"tooltip","x-placement":m,className:p()(o,a,`bs-tooltip-${f}`),...u,children:[(0,D.jsx)("div",{className:"tooltip-arrow",...s}),(0,D.jsx)("div",{className:`${a}-inner`,children:r})]})}));R.displayName="Tooltip";var M=Object.assign(R,{TOOLTIP_OFFSET:[0,6]});var O=a(8072),q=a(4586);const G=r.forwardRef(((e,t)=>{let{children:a,transition:n=O.A,popperConfig:o={},rootClose:i=!1,placement:s="top",show:l=!1,...c}=e;const d=(0,r.useRef)({}),[u,m]=(0,r.useState)(null),[f,g]=function(e){const t=(0,r.useRef)(null),a=(0,A.oU)(void 0,"popover"),n=(0,A.oU)(void 0,"tooltip"),o=(0,r.useMemo)((()=>({name:"offset",options:{offset:()=>{if(e)return e;if(t.current){if((0,I.A)(t.current,a))return N.A.POPPER_OFFSET;if((0,I.A)(t.current,n))return M.TOOLTIP_OFFSET}return[0,0]}}})),[e,a,n]);return[t,[o]]}(c.offset),y=(0,h.A)(t,f),_=!0===n?O.A:n||void 0,b=(0,j.A)((e=>{m(e),null==o||null==o.onFirstUpdate||o.onFirstUpdate(e)}));return(0,S.A)((()=>{u&&c.target&&(null==d.current.scheduleUpdate||d.current.scheduleUpdate())}),[u,c.target]),(0,r.useEffect)((()=>{l||m(null)}),[l]),(0,D.jsx)(C,{...c,ref:y,popperConfig:{...o,modifiers:g.concat(o.modifiers||[]),onFirstUpdate:b},transition:_,rootClose:i,placement:s,show:l,children:(e,t)=>{let{arrowProps:i,popper:s,show:l}=t;var c,h;!function(e,t){const{ref:a}=e,{ref:n}=t;e.ref=a.__wrapped||(a.__wrapped=e=>a((0,q.A)(e))),t.ref=n.__wrapped||(n.__wrapped=e=>n((0,q.A)(e)))}(e,i);const m=null==s?void 0:s.placement,f=Object.assign(d.current,{state:null==s?void 0:s.state,scheduleUpdate:null==s?void 0:s.update,placement:m,outOfBoundaries:(null==s||null==(c=s.state)||null==(h=c.modifiersData.hide)?void 0:h.isReferenceHidden)||!1,strategy:o.strategy}),g=!!u;return"function"===typeof a?a({...e,placement:m,show:l,...!n&&l&&{className:"show"},popper:f,arrowProps:i,hasDoneInitialMeasure:g}):r.cloneElement(a,{...e,placement:m,arrowProps:i,popper:f,hasDoneInitialMeasure:g,className:p()(a.props.className,!n&&l&&"show"),style:{...a.props.style,...e.style}})}})}));G.displayName="Overlay";var P=G;function F(e,t,a){const[o]=t,i=o.currentTarget,r=o.relatedTarget||o.nativeEvent[a];r&&r===i||(0,n.A)(i,r)||e(...t)}i().oneOf(["click","hover","focus"]);var L=e=>{let{trigger:t=["hover","focus"],overlay:a,children:n,popperConfig:o={},show:i,defaultShow:s=!1,onToggle:l,delay:c,placement:m,flip:p=m&&-1!==m.indexOf("auto"),...f}=e;const g=(0,r.useRef)(null),y=(0,h.A)(g,n.ref),_=d(),b=(0,r.useRef)(""),[v,w]=(0,u.iC)(i,s,l),x=function(e){return e&&"object"===typeof e?e:{show:e,hide:e}}(c),{onFocus:k,onBlur:C,onClick:j}="function"!==typeof n?r.Children.only(n).props:{},S=(0,r.useCallback)((()=>{_.clear(),b.current="show",x.show?_.set((()=>{"show"===b.current&&w(!0)}),x.show):w(!0)}),[x.show,w,_]),I=(0,r.useCallback)((()=>{_.clear(),b.current="hide",x.hide?_.set((()=>{"hide"===b.current&&w(!1)}),x.hide):w(!1)}),[x.hide,w,_]),A=(0,r.useCallback)((function(){S(),null==k||k(...arguments)}),[S,k]),N=(0,r.useCallback)((function(){I(),null==C||C(...arguments)}),[I,C]),E=(0,r.useCallback)((function(){w(!v),null==j||j(...arguments)}),[j,w,v]),T=(0,r.useCallback)((function(){for(var e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];F(S,t,"fromElement")}),[S]),R=(0,r.useCallback)((function(){for(var e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];F(I,t,"toElement")}),[I]),M=null==t?[]:[].concat(t),O={ref:e=>{y((0,q.A)(e))}};return-1!==M.indexOf("click")&&(O.onClick=E),-1!==M.indexOf("focus")&&(O.onFocus=A,O.onBlur=N),-1!==M.indexOf("hover")&&(O.onMouseOver=T,O.onMouseOut=R),(0,D.jsxs)(D.Fragment,{children:["function"===typeof n?n(O):(0,r.cloneElement)(n,O),(0,D.jsx)(P,{...f,show:v,onHide:I,flip:p,placement:m,popperConfig:o,target:g.current,children:a})]})}},2719:function(e,t,a){"use strict";a.d(t,{A:function(){return f}});var n=a(8139),o=a.n(n),i=a(5043),r=a(7852),s=a(579);const l=i.forwardRef(((e,t)=>{let{className:a,bsPrefix:n,as:i="div",...l}=e;return n=(0,r.oU)(n,"popover-header"),(0,s.jsx)(i,{ref:t,className:o()(a,n),...l})}));l.displayName="PopoverHeader";var c=l;const d=i.forwardRef(((e,t)=>{let{className:a,bsPrefix:n,as:i="div",...l}=e;return n=(0,r.oU)(n,"popover-body"),(0,s.jsx)(i,{ref:t,className:o()(a,n),...l})}));d.displayName="PopoverBody";var u=d,h=a(6213),m=a(6330);const p=i.forwardRef(((e,t)=>{let{bsPrefix:a,placement:n="right",className:i,style:l,children:c,body:d,arrowProps:p,hasDoneInitialMeasure:f,popper:g,show:y,..._}=e;const b=(0,r.oU)(a,"popover"),v=(0,r.Wz)(),[w]=(null==n?void 0:n.split("-"))||[],x=(0,h.G)(w,v);let k=l;return y&&!f&&(k={...l,...(0,m.A)(null==g?void 0:g.strategy)}),(0,s.jsxs)("div",{ref:t,role:"tooltip",style:k,"x-placement":w,className:o()(i,b,w&&`bs-popover-${x}`),..._,children:[(0,s.jsx)("div",{className:"popover-arrow",...p}),d?(0,s.jsx)(u,{children:c}):c]})}));var f=Object.assign(p,{Header:c,Body:u,POPPER_OFFSET:[0,8]})},7852:function(e,t,a){"use strict";a.d(t,{Jm:function(){return u},Wz:function(){return h},gy:function(){return d},oU:function(){return c}});var n=a(5043);a(579);const o=["xxl","xl","lg","md","sm","xs"],i="xs",r=n.createContext({prefixes:{},breakpoints:o,minBreakpoint:i}),{Consumer:s,Provider:l}=r;function c(e,t){const{prefixes:a}=(0,n.useContext)(r);return e||a[t]||t}function d(){const{breakpoints:e}=(0,n.useContext)(r);return e}function u(){const{minBreakpoint:e}=(0,n.useContext)(r);return e}function h(){const{dir:e}=(0,n.useContext)(r);return"rtl"===e}},4910:function(e,t,a){"use strict";var n=a(5043),o=a(6555),i=a(8293),r=a(4586),s=a(579);const l=n.forwardRef(((e,t)=>{let{onEnter:a,onEntering:l,onEntered:c,onExit:d,onExiting:u,onExited:h,addEndListener:m,children:p,childRef:f,...g}=e;const y=(0,n.useRef)(null),_=(0,i.A)(y,f),b=e=>{_((0,r.A)(e))},v=e=>t=>{e&&y.current&&e(y.current,t)},w=(0,n.useCallback)(v(a),[a]),x=(0,n.useCallback)(v(l),[l]),k=(0,n.useCallback)(v(c),[c]),C=(0,n.useCallback)(v(d),[d]),j=(0,n.useCallback)(v(u),[u]),S=(0,n.useCallback)(v(h),[h]),I=(0,n.useCallback)(v(m),[m]);return(0,s.jsx)(o.Ay,{ref:t,...g,onEnter:w,onEntered:k,onEntering:x,onExit:C,onExited:S,onExiting:j,addEndListener:I,nodeRef:y,children:"function"===typeof p?(e,t)=>p(e,{...t,ref:b}):n.cloneElement(p,{ref:b})})}));t.A=l},4488:function(e,t,a){"use strict";var n=a(5043),o=a(8139),i=a.n(o),r=a(579);t.A=e=>n.forwardRef(((t,a)=>(0,r.jsx)("div",{...t,ref:a,className:i()(t.className,e)})))},6330:function(e,t,a){"use strict";function n(){return{position:arguments.length>0&&void 0!==arguments[0]?arguments[0]:"absolute",top:"0",left:"0",opacity:"0",pointerEvents:"none"}}a.d(t,{A:function(){return n}})},6213:function(e,t,a){"use strict";a.d(t,{G:function(){return o}});var n=a(5043);n.Component;function o(e,t){let a=e;return"left"===e?a=t?"end":"start":"right"===e&&(a=t?"start":"end"),a}},4586:function(e,t,a){"use strict";a.d(t,{A:function(){return o}});var n=a(7950);function o(e){return e&&"setState"in e?n.findDOMNode(e):null!=e?e:null}},3492:function(e,t,a){"use strict";a.d(t,{A:function(){return r}});var n=a(8747),o=a(4232);function i(e,t){const a=(0,n.A)(e,t)||"",o=-1===a.indexOf("ms")?1e3:1;return parseFloat(a)*o}function r(e,t){const a=i(e,"transitionDuration"),n=i(e,"transitionDelay"),r=(0,o.A)(e,(a=>{a.target===e&&(r(),t(a))}),a+n)}},2643:function(e,t,a){"use strict";function n(e){e.offsetHeight}a.d(t,{A:function(){return n}})},2730:function(e,t,a){"use strict";var n=a(5043),o=a(8853);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,a=1;a<arguments.length;a++)t+="&args[]="+encodeURIComponent(arguments[a]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var r=new Set,s={};function l(e,t){c(e,t),c(e+"Capture",t)}function c(e,t){for(s[e]=t,e=0;e<t.length;e++)r.add(t[e])}var d=!("undefined"===typeof window||"undefined"===typeof window.document||"undefined"===typeof window.document.createElement),u=Object.prototype.hasOwnProperty,h=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,m={},p={};function f(e,t,a,n,o,i,r){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=n,this.attributeNamespace=o,this.mustUseProperty=a,this.propertyName=e,this.type=t,this.sanitizeURL=i,this.removeEmptyString=r}var g={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){g[e]=new f(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];g[t]=new f(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){g[e]=new f(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){g[e]=new f(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){g[e]=new f(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){g[e]=new f(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){g[e]=new f(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){g[e]=new f(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){g[e]=new f(e,5,!1,e.toLowerCase(),null,!1,!1)}));var y=/[\-:]([a-z])/g;function _(e){return e[1].toUpperCase()}function b(e,t,a,n){var o=g.hasOwnProperty(t)?g[t]:null;(null!==o?0!==o.type:n||!(2<t.length)||"o"!==t[0]&&"O"!==t[0]||"n"!==t[1]&&"N"!==t[1])&&(function(e,t,a,n){if(null===t||"undefined"===typeof t||function(e,t,a,n){if(null!==a&&0===a.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!n&&(null!==a?!a.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,a,n))return!0;if(n)return!1;if(null!==a)switch(a.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,a,o,n)&&(a=null),n||null===o?function(e){return!!u.call(p,e)||!u.call(m,e)&&(h.test(e)?p[e]=!0:(m[e]=!0,!1))}(t)&&(null===a?e.removeAttribute(t):e.setAttribute(t,""+a)):o.mustUseProperty?e[o.propertyName]=null===a?3!==o.type&&"":a:(t=o.attributeName,n=o.attributeNamespace,null===a?e.removeAttribute(t):(a=3===(o=o.type)||4===o&&!0===a?"":""+a,n?e.setAttributeNS(n,t,a):e.setAttribute(t,a))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(y,_);g[t]=new f(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(y,_);g[t]=new f(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(y,_);g[t]=new f(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){g[e]=new f(e,1,!1,e.toLowerCase(),null,!1,!1)})),g.xlinkHref=new f("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){g[e]=new f(e,1,!1,e.toLowerCase(),null,!0,!0)}));var v=n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,w=Symbol.for("react.element"),x=Symbol.for("react.portal"),k=Symbol.for("react.fragment"),C=Symbol.for("react.strict_mode"),j=Symbol.for("react.profiler"),S=Symbol.for("react.provider"),I=Symbol.for("react.context"),A=Symbol.for("react.forward_ref"),N=Symbol.for("react.suspense"),E=Symbol.for("react.suspense_list"),T=Symbol.for("react.memo"),D=Symbol.for("react.lazy");Symbol.for("react.scope"),Symbol.for("react.debug_trace_mode");var R=Symbol.for("react.offscreen");Symbol.for("react.legacy_hidden"),Symbol.for("react.cache"),Symbol.for("react.tracing_marker");var M=Symbol.iterator;function O(e){return null===e||"object"!==typeof e?null:"function"===typeof(e=M&&e[M]||e["@@iterator"])?e:null}var q,G=Object.assign;function P(e){if(void 0===q)try{throw Error()}catch(a){var t=a.stack.trim().match(/\n( *(at )?)/);q=t&&t[1]||""}return"\n"+q+e}var F=!1;function L(e,t){if(!e||F)return"";F=!0;var a=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"===typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(c){var n=c}Reflect.construct(e,[],t)}else{try{t.call()}catch(c){n=c}e.call(t.prototype)}else{try{throw Error()}catch(c){n=c}e()}}catch(c){if(c&&n&&"string"===typeof c.stack){for(var o=c.stack.split("\n"),i=n.stack.split("\n"),r=o.length-1,s=i.length-1;1<=r&&0<=s&&o[r]!==i[s];)s--;for(;1<=r&&0<=s;r--,s--)if(o[r]!==i[s]){if(1!==r||1!==s)do{if(r--,0>--s||o[r]!==i[s]){var l="\n"+o[r].replace(" at new "," at ");return e.displayName&&l.includes("<anonymous>")&&(l=l.replace("<anonymous>",e.displayName)),l}}while(1<=r&&0<=s);break}}}finally{F=!1,Error.prepareStackTrace=a}return(e=e?e.displayName||e.name:"")?P(e):""}function W(e){switch(e.tag){case 5:return P(e.type);case 16:return P("Lazy");case 13:return P("Suspense");case 19:return P("SuspenseList");case 0:case 2:case 15:return e=L(e.type,!1);case 11:return e=L(e.type.render,!1);case 1:return e=L(e.type,!0);default:return""}}function B(e){if(null==e)return null;if("function"===typeof e)return e.displayName||e.name||null;if("string"===typeof e)return e;switch(e){case k:return"Fragment";case x:return"Portal";case j:return"Profiler";case C:return"StrictMode";case N:return"Suspense";case E:return"SuspenseList"}if("object"===typeof e)switch(e.$$typeof){case I:return(e.displayName||"Context")+".Consumer";case S:return(e._context.displayName||"Context")+".Provider";case A:var t=e.render;return(e=e.displayName)||(e=""!==(e=t.displayName||t.name||"")?"ForwardRef("+e+")":"ForwardRef"),e;case T:return null!==(t=e.displayName||null)?t:B(e.type)||"Memo";case D:t=e._payload,e=e._init;try{return B(e(t))}catch(a){}}return null}function H(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=(e=t.render).displayName||e.name||"",t.displayName||(""!==e?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return B(t);case 8:return t===C?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if("function"===typeof t)return t.displayName||t.name||null;if("string"===typeof t)return t}return null}function U(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":case"object":return e;default:return""}}function K(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function z(e){e._valueTracker||(e._valueTracker=function(e){var t=K(e)?"checked":"value",a=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),n=""+e[t];if(!e.hasOwnProperty(t)&&"undefined"!==typeof a&&"function"===typeof a.get&&"function"===typeof a.set){var o=a.get,i=a.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){n=""+e,i.call(this,e)}}),Object.defineProperty(e,t,{enumerable:a.enumerable}),{getValue:function(){return n},setValue:function(e){n=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function V(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var a=t.getValue(),n="";return e&&(n=K(e)?e.checked?"true":"false":e.value),(e=n)!==a&&(t.setValue(e),!0)}function Y(e){if("undefined"===typeof(e=e||("undefined"!==typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function J(e,t){var a=t.checked;return G({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=a?a:e._wrapperState.initialChecked})}function $(e,t){var a=null==t.defaultValue?"":t.defaultValue,n=null!=t.checked?t.checked:t.defaultChecked;a=U(null!=t.value?t.value:a),e._wrapperState={initialChecked:n,initialValue:a,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function Z(e,t){null!=(t=t.checked)&&b(e,"checked",t,!1)}function Q(e,t){Z(e,t);var a=U(t.value),n=t.type;if(null!=a)"number"===n?(0===a&&""===e.value||e.value!=a)&&(e.value=""+a):e.value!==""+a&&(e.value=""+a);else if("submit"===n||"reset"===n)return void e.removeAttribute("value");t.hasOwnProperty("value")?ee(e,t.type,a):t.hasOwnProperty("defaultValue")&&ee(e,t.type,U(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function X(e,t,a){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var n=t.type;if(!("submit"!==n&&"reset"!==n||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,a||t===e.value||(e.value=t),e.defaultValue=t}""!==(a=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==a&&(e.name=a)}function ee(e,t,a){"number"===t&&Y(e.ownerDocument)===e||(null==a?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+a&&(e.defaultValue=""+a))}var te=Array.isArray;function ae(e,t,a,n){if(e=e.options,t){t={};for(var o=0;o<a.length;o++)t["$"+a[o]]=!0;for(a=0;a<e.length;a++)o=t.hasOwnProperty("$"+e[a].value),e[a].selected!==o&&(e[a].selected=o),o&&n&&(e[a].defaultSelected=!0)}else{for(a=""+U(a),t=null,o=0;o<e.length;o++){if(e[o].value===a)return e[o].selected=!0,void(n&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function ne(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(i(91));return G({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function oe(e,t){var a=t.value;if(null==a){if(a=t.children,t=t.defaultValue,null!=a){if(null!=t)throw Error(i(92));if(te(a)){if(1<a.length)throw Error(i(93));a=a[0]}t=a}null==t&&(t=""),a=t}e._wrapperState={initialValue:U(a)}}function ie(e,t){var a=U(t.value),n=U(t.defaultValue);null!=a&&((a=""+a)!==e.value&&(e.value=a),null==t.defaultValue&&e.defaultValue!==a&&(e.defaultValue=a)),null!=n&&(e.defaultValue=""+n)}function re(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}function se(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function le(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?se(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var ce,de,ue=(de=function(e,t){if("http://www.w3.org/2000/svg"!==e.namespaceURI||"innerHTML"in e)e.innerHTML=t;else{for((ce=ce||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=ce.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,a,n){MSApp.execUnsafeLocalFunction((function(){return de(e,t)}))}:de);function he(e,t){if(t){var a=e.firstChild;if(a&&a===e.lastChild&&3===a.nodeType)return void(a.nodeValue=t)}e.textContent=t}var me={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},pe=["Webkit","ms","Moz","O"];function fe(e,t,a){return null==t||"boolean"===typeof t||""===t?"":a||"number"!==typeof t||0===t||me.hasOwnProperty(e)&&me[e]?(""+t).trim():t+"px"}function ge(e,t){for(var a in e=e.style,t)if(t.hasOwnProperty(a)){var n=0===a.indexOf("--"),o=fe(a,t[a],n);"float"===a&&(a="cssFloat"),n?e.setProperty(a,o):e[a]=o}}Object.keys(me).forEach((function(e){pe.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),me[t]=me[e]}))}));var ye=G({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function _e(e,t){if(t){if(ye[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(i(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(i(60));if("object"!==typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(i(61))}if(null!=t.style&&"object"!==typeof t.style)throw Error(i(62))}}function be(e,t){if(-1===e.indexOf("-"))return"string"===typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var ve=null;function we(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var xe=null,ke=null,Ce=null;function je(e){if(e=vo(e)){if("function"!==typeof xe)throw Error(i(280));var t=e.stateNode;t&&(t=xo(t),xe(e.stateNode,e.type,t))}}function Se(e){ke?Ce?Ce.push(e):Ce=[e]:ke=e}function Ie(){if(ke){var e=ke,t=Ce;if(Ce=ke=null,je(e),t)for(e=0;e<t.length;e++)je(t[e])}}function Ae(e,t){return e(t)}function Ne(){}var Ee=!1;function Te(e,t,a){if(Ee)return e(t,a);Ee=!0;try{return Ae(e,t,a)}finally{Ee=!1,(null!==ke||null!==Ce)&&(Ne(),Ie())}}function De(e,t){var a=e.stateNode;if(null===a)return null;var n=xo(a);if(null===n)return null;a=n[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(n=!n.disabled)||(n=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!n;break e;default:e=!1}if(e)return null;if(a&&"function"!==typeof a)throw Error(i(231,t,typeof a));return a}var Re=!1;if(d)try{var Me={};Object.defineProperty(Me,"passive",{get:function(){Re=!0}}),window.addEventListener("test",Me,Me),window.removeEventListener("test",Me,Me)}catch(de){Re=!1}function Oe(e,t,a,n,o,i,r,s,l){var c=Array.prototype.slice.call(arguments,3);try{t.apply(a,c)}catch(d){this.onError(d)}}var qe=!1,Ge=null,Pe=!1,Fe=null,Le={onError:function(e){qe=!0,Ge=e}};function We(e,t,a,n,o,i,r,s,l){qe=!1,Ge=null,Oe.apply(Le,arguments)}function Be(e){var t=e,a=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!==(4098&(t=e).flags)&&(a=t.return),e=t.return}while(e)}return 3===t.tag?a:null}function He(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function Ue(e){if(Be(e)!==e)throw Error(i(188))}function Ke(e){return null!==(e=function(e){var t=e.alternate;if(!t){if(null===(t=Be(e)))throw Error(i(188));return t!==e?null:e}for(var a=e,n=t;;){var o=a.return;if(null===o)break;var r=o.alternate;if(null===r){if(null!==(n=o.return)){a=n;continue}break}if(o.child===r.child){for(r=o.child;r;){if(r===a)return Ue(o),e;if(r===n)return Ue(o),t;r=r.sibling}throw Error(i(188))}if(a.return!==n.return)a=o,n=r;else{for(var s=!1,l=o.child;l;){if(l===a){s=!0,a=o,n=r;break}if(l===n){s=!0,n=o,a=r;break}l=l.sibling}if(!s){for(l=r.child;l;){if(l===a){s=!0,a=r,n=o;break}if(l===n){s=!0,n=r,a=o;break}l=l.sibling}if(!s)throw Error(i(189))}}if(a.alternate!==n)throw Error(i(190))}if(3!==a.tag)throw Error(i(188));return a.stateNode.current===a?e:t}(e))?ze(e):null}function ze(e){if(5===e.tag||6===e.tag)return e;for(e=e.child;null!==e;){var t=ze(e);if(null!==t)return t;e=e.sibling}return null}var Ve=o.unstable_scheduleCallback,Ye=o.unstable_cancelCallback,Je=o.unstable_shouldYield,$e=o.unstable_requestPaint,Ze=o.unstable_now,Qe=o.unstable_getCurrentPriorityLevel,Xe=o.unstable_ImmediatePriority,et=o.unstable_UserBlockingPriority,tt=o.unstable_NormalPriority,at=o.unstable_LowPriority,nt=o.unstable_IdlePriority,ot=null,it=null;var rt=Math.clz32?Math.clz32:function(e){return e>>>=0,0===e?32:31-(st(e)/lt|0)|0},st=Math.log,lt=Math.LN2;var ct=64,dt=4194304;function ut(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194240&e;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return 130023424&e;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function ht(e,t){var a=e.pendingLanes;if(0===a)return 0;var n=0,o=e.suspendedLanes,i=e.pingedLanes,r=268435455&a;if(0!==r){var s=r&~o;0!==s?n=ut(s):0!==(i&=r)&&(n=ut(i))}else 0!==(r=a&~o)?n=ut(r):0!==i&&(n=ut(i));if(0===n)return 0;if(0!==t&&t!==n&&0===(t&o)&&((o=n&-n)>=(i=t&-t)||16===o&&0!==(4194240&i)))return t;if(0!==(4&n)&&(n|=16&a),0!==(t=e.entangledLanes))for(e=e.entanglements,t&=n;0<t;)o=1<<(a=31-rt(t)),n|=e[a],t&=~o;return n}function mt(e,t){switch(e){case 1:case 2:case 4:return t+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;default:return-1}}function pt(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function ft(){var e=ct;return 0===(4194240&(ct<<=1))&&(ct=64),e}function gt(e){for(var t=[],a=0;31>a;a++)t.push(e);return t}function yt(e,t,a){e.pendingLanes|=t,536870912!==t&&(e.suspendedLanes=0,e.pingedLanes=0),(e=e.eventTimes)[t=31-rt(t)]=a}function _t(e,t){var a=e.entangledLanes|=t;for(e=e.entanglements;a;){var n=31-rt(a),o=1<<n;o&t|e[n]&t&&(e[n]|=t),a&=~o}}var bt=0;function vt(e){return 1<(e&=-e)?4<e?0!==(268435455&e)?16:536870912:4:1}var wt,xt,kt,Ct,jt,St=!1,It=[],At=null,Nt=null,Et=null,Tt=new Map,Dt=new Map,Rt=[],Mt="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function Ot(e,t){switch(e){case"focusin":case"focusout":At=null;break;case"dragenter":case"dragleave":Nt=null;break;case"mouseover":case"mouseout":Et=null;break;case"pointerover":case"pointerout":Tt.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":Dt.delete(t.pointerId)}}function qt(e,t,a,n,o,i){return null===e||e.nativeEvent!==i?(e={blockedOn:t,domEventName:a,eventSystemFlags:n,nativeEvent:i,targetContainers:[o]},null!==t&&(null!==(t=vo(t))&&xt(t)),e):(e.eventSystemFlags|=n,t=e.targetContainers,null!==o&&-1===t.indexOf(o)&&t.push(o),e)}function Gt(e){var t=bo(e.target);if(null!==t){var a=Be(t);if(null!==a)if(13===(t=a.tag)){if(null!==(t=He(a)))return e.blockedOn=t,void jt(e.priority,(function(){kt(a)}))}else if(3===t&&a.stateNode.current.memoizedState.isDehydrated)return void(e.blockedOn=3===a.tag?a.stateNode.containerInfo:null)}e.blockedOn=null}function Pt(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var a=Jt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==a)return null!==(t=vo(a))&&xt(t),e.blockedOn=a,!1;var n=new(a=e.nativeEvent).constructor(a.type,a);ve=n,a.target.dispatchEvent(n),ve=null,t.shift()}return!0}function Ft(e,t,a){Pt(e)&&a.delete(t)}function Lt(){St=!1,null!==At&&Pt(At)&&(At=null),null!==Nt&&Pt(Nt)&&(Nt=null),null!==Et&&Pt(Et)&&(Et=null),Tt.forEach(Ft),Dt.forEach(Ft)}function Wt(e,t){e.blockedOn===t&&(e.blockedOn=null,St||(St=!0,o.unstable_scheduleCallback(o.unstable_NormalPriority,Lt)))}function Bt(e){function t(t){return Wt(t,e)}if(0<It.length){Wt(It[0],e);for(var a=1;a<It.length;a++){var n=It[a];n.blockedOn===e&&(n.blockedOn=null)}}for(null!==At&&Wt(At,e),null!==Nt&&Wt(Nt,e),null!==Et&&Wt(Et,e),Tt.forEach(t),Dt.forEach(t),a=0;a<Rt.length;a++)(n=Rt[a]).blockedOn===e&&(n.blockedOn=null);for(;0<Rt.length&&null===(a=Rt[0]).blockedOn;)Gt(a),null===a.blockedOn&&Rt.shift()}var Ht=v.ReactCurrentBatchConfig,Ut=!0;function Kt(e,t,a,n){var o=bt,i=Ht.transition;Ht.transition=null;try{bt=1,Vt(e,t,a,n)}finally{bt=o,Ht.transition=i}}function zt(e,t,a,n){var o=bt,i=Ht.transition;Ht.transition=null;try{bt=4,Vt(e,t,a,n)}finally{bt=o,Ht.transition=i}}function Vt(e,t,a,n){if(Ut){var o=Jt(e,t,a,n);if(null===o)Un(e,t,n,Yt,a),Ot(e,n);else if(function(e,t,a,n,o){switch(t){case"focusin":return At=qt(At,e,t,a,n,o),!0;case"dragenter":return Nt=qt(Nt,e,t,a,n,o),!0;case"mouseover":return Et=qt(Et,e,t,a,n,o),!0;case"pointerover":var i=o.pointerId;return Tt.set(i,qt(Tt.get(i)||null,e,t,a,n,o)),!0;case"gotpointercapture":return i=o.pointerId,Dt.set(i,qt(Dt.get(i)||null,e,t,a,n,o)),!0}return!1}(o,e,t,a,n))n.stopPropagation();else if(Ot(e,n),4&t&&-1<Mt.indexOf(e)){for(;null!==o;){var i=vo(o);if(null!==i&&wt(i),null===(i=Jt(e,t,a,n))&&Un(e,t,n,Yt,a),i===o)break;o=i}null!==o&&n.stopPropagation()}else Un(e,t,n,null,a)}}var Yt=null;function Jt(e,t,a,n){if(Yt=null,null!==(e=bo(e=we(n))))if(null===(t=Be(e)))e=null;else if(13===(a=t.tag)){if(null!==(e=He(t)))return e;e=null}else if(3===a){if(t.stateNode.current.memoizedState.isDehydrated)return 3===t.tag?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null);return Yt=e,null}function $t(e){switch(e){case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 1;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"toggle":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 4;case"message":switch(Qe()){case Xe:return 1;case et:return 4;case tt:case at:return 16;case nt:return 536870912;default:return 16}default:return 16}}var Zt=null,Qt=null,Xt=null;function ea(){if(Xt)return Xt;var e,t,a=Qt,n=a.length,o="value"in Zt?Zt.value:Zt.textContent,i=o.length;for(e=0;e<n&&a[e]===o[e];e++);var r=n-e;for(t=1;t<=r&&a[n-t]===o[i-t];t++);return Xt=o.slice(e,1<t?1-t:void 0)}function ta(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function aa(){return!0}function na(){return!1}function oa(e){function t(t,a,n,o,i){for(var r in this._reactName=t,this._targetInst=n,this.type=a,this.nativeEvent=o,this.target=i,this.currentTarget=null,e)e.hasOwnProperty(r)&&(t=e[r],this[r]=t?t(o):o[r]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?aa:na,this.isPropagationStopped=na,this}return G(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!==typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=aa)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!==typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=aa)},persist:function(){},isPersistent:aa}),t}var ia,ra,sa,la={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},ca=oa(la),da=G({},la,{view:0,detail:0}),ua=oa(da),ha=G({},da,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Ca,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==sa&&(sa&&"mousemove"===e.type?(ia=e.screenX-sa.screenX,ra=e.screenY-sa.screenY):ra=ia=0,sa=e),ia)},movementY:function(e){return"movementY"in e?e.movementY:ra}}),ma=oa(ha),pa=oa(G({},ha,{dataTransfer:0})),fa=oa(G({},da,{relatedTarget:0})),ga=oa(G({},la,{animationName:0,elapsedTime:0,pseudoElement:0})),ya=G({},la,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),_a=oa(ya),ba=oa(G({},la,{data:0})),va={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},wa={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},xa={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function ka(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=xa[e])&&!!t[e]}function Ca(){return ka}var ja=G({},da,{key:function(e){if(e.key){var t=va[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=ta(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?wa[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Ca,charCode:function(e){return"keypress"===e.type?ta(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?ta(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),Sa=oa(ja),Ia=oa(G({},ha,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),Aa=oa(G({},da,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Ca})),Na=oa(G({},la,{propertyName:0,elapsedTime:0,pseudoElement:0})),Ea=G({},ha,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),Ta=oa(Ea),Da=[9,13,27,32],Ra=d&&"CompositionEvent"in window,Ma=null;d&&"documentMode"in document&&(Ma=document.documentMode);var Oa=d&&"TextEvent"in window&&!Ma,qa=d&&(!Ra||Ma&&8<Ma&&11>=Ma),Ga=String.fromCharCode(32),Pa=!1;function Fa(e,t){switch(e){case"keyup":return-1!==Da.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function La(e){return"object"===typeof(e=e.detail)&&"data"in e?e.data:null}var Wa=!1;var Ba={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Ha(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!Ba[e.type]:"textarea"===t}function Ua(e,t,a,n){Se(n),0<(t=zn(t,"onChange")).length&&(a=new ca("onChange","change",null,a,n),e.push({event:a,listeners:t}))}var Ka=null,za=null;function Va(e){Pn(e,0)}function Ya(e){if(V(wo(e)))return e}function Ja(e,t){if("change"===e)return t}var $a=!1;if(d){var Za;if(d){var Qa="oninput"in document;if(!Qa){var Xa=document.createElement("div");Xa.setAttribute("oninput","return;"),Qa="function"===typeof Xa.oninput}Za=Qa}else Za=!1;$a=Za&&(!document.documentMode||9<document.documentMode)}function en(){Ka&&(Ka.detachEvent("onpropertychange",tn),za=Ka=null)}function tn(e){if("value"===e.propertyName&&Ya(za)){var t=[];Ua(t,za,e,we(e)),Te(Va,t)}}function an(e,t,a){"focusin"===e?(en(),za=a,(Ka=t).attachEvent("onpropertychange",tn)):"focusout"===e&&en()}function nn(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Ya(za)}function on(e,t){if("click"===e)return Ya(t)}function rn(e,t){if("input"===e||"change"===e)return Ya(t)}var sn="function"===typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e===1/t)||e!==e&&t!==t};function ln(e,t){if(sn(e,t))return!0;if("object"!==typeof e||null===e||"object"!==typeof t||null===t)return!1;var a=Object.keys(e),n=Object.keys(t);if(a.length!==n.length)return!1;for(n=0;n<a.length;n++){var o=a[n];if(!u.call(t,o)||!sn(e[o],t[o]))return!1}return!0}function cn(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function dn(e,t){var a,n=cn(e);for(e=0;n;){if(3===n.nodeType){if(a=e+n.textContent.length,e<=t&&a>=t)return{node:n,offset:t-e};e=a}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=cn(n)}}function un(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?un(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function hn(){for(var e=window,t=Y();t instanceof e.HTMLIFrameElement;){try{var a="string"===typeof t.contentWindow.location.href}catch(n){a=!1}if(!a)break;t=Y((e=t.contentWindow).document)}return t}function mn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}function pn(e){var t=hn(),a=e.focusedElem,n=e.selectionRange;if(t!==a&&a&&a.ownerDocument&&un(a.ownerDocument.documentElement,a)){if(null!==n&&mn(a))if(t=n.start,void 0===(e=n.end)&&(e=t),"selectionStart"in a)a.selectionStart=t,a.selectionEnd=Math.min(e,a.value.length);else if((e=(t=a.ownerDocument||document)&&t.defaultView||window).getSelection){e=e.getSelection();var o=a.textContent.length,i=Math.min(n.start,o);n=void 0===n.end?i:Math.min(n.end,o),!e.extend&&i>n&&(o=n,n=i,i=o),o=dn(a,i);var r=dn(a,n);o&&r&&(1!==e.rangeCount||e.anchorNode!==o.node||e.anchorOffset!==o.offset||e.focusNode!==r.node||e.focusOffset!==r.offset)&&((t=t.createRange()).setStart(o.node,o.offset),e.removeAllRanges(),i>n?(e.addRange(t),e.extend(r.node,r.offset)):(t.setEnd(r.node,r.offset),e.addRange(t)))}for(t=[],e=a;e=e.parentNode;)1===e.nodeType&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for("function"===typeof a.focus&&a.focus(),a=0;a<t.length;a++)(e=t[a]).element.scrollLeft=e.left,e.element.scrollTop=e.top}}var fn=d&&"documentMode"in document&&11>=document.documentMode,gn=null,yn=null,_n=null,bn=!1;function vn(e,t,a){var n=a.window===a?a.document:9===a.nodeType?a:a.ownerDocument;bn||null==gn||gn!==Y(n)||("selectionStart"in(n=gn)&&mn(n)?n={start:n.selectionStart,end:n.selectionEnd}:n={anchorNode:(n=(n.ownerDocument&&n.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset},_n&&ln(_n,n)||(_n=n,0<(n=zn(yn,"onSelect")).length&&(t=new ca("onSelect","select",null,t,a),e.push({event:t,listeners:n}),t.target=gn)))}function wn(e,t){var a={};return a[e.toLowerCase()]=t.toLowerCase(),a["Webkit"+e]="webkit"+t,a["Moz"+e]="moz"+t,a}var xn={animationend:wn("Animation","AnimationEnd"),animationiteration:wn("Animation","AnimationIteration"),animationstart:wn("Animation","AnimationStart"),transitionend:wn("Transition","TransitionEnd")},kn={},Cn={};function jn(e){if(kn[e])return kn[e];if(!xn[e])return e;var t,a=xn[e];for(t in a)if(a.hasOwnProperty(t)&&t in Cn)return kn[e]=a[t];return e}d&&(Cn=document.createElement("div").style,"AnimationEvent"in window||(delete xn.animationend.animation,delete xn.animationiteration.animation,delete xn.animationstart.animation),"TransitionEvent"in window||delete xn.transitionend.transition);var Sn=jn("animationend"),In=jn("animationiteration"),An=jn("animationstart"),Nn=jn("transitionend"),En=new Map,Tn="abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function Dn(e,t){En.set(e,t),l(t,[e])}for(var Rn=0;Rn<Tn.length;Rn++){var Mn=Tn[Rn];Dn(Mn.toLowerCase(),"on"+(Mn[0].toUpperCase()+Mn.slice(1)))}Dn(Sn,"onAnimationEnd"),Dn(In,"onAnimationIteration"),Dn(An,"onAnimationStart"),Dn("dblclick","onDoubleClick"),Dn("focusin","onFocus"),Dn("focusout","onBlur"),Dn(Nn,"onTransitionEnd"),c("onMouseEnter",["mouseout","mouseover"]),c("onMouseLeave",["mouseout","mouseover"]),c("onPointerEnter",["pointerout","pointerover"]),c("onPointerLeave",["pointerout","pointerover"]),l("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),l("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),l("onBeforeInput",["compositionend","keypress","textInput","paste"]),l("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),l("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),l("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var On="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),qn=new Set("cancel close invalid load scroll toggle".split(" ").concat(On));function Gn(e,t,a){var n=e.type||"unknown-event";e.currentTarget=a,function(e,t,a,n,o,r,s,l,c){if(We.apply(this,arguments),qe){if(!qe)throw Error(i(198));var d=Ge;qe=!1,Ge=null,Pe||(Pe=!0,Fe=d)}}(n,t,void 0,e),e.currentTarget=null}function Pn(e,t){t=0!==(4&t);for(var a=0;a<e.length;a++){var n=e[a],o=n.event;n=n.listeners;e:{var i=void 0;if(t)for(var r=n.length-1;0<=r;r--){var s=n[r],l=s.instance,c=s.currentTarget;if(s=s.listener,l!==i&&o.isPropagationStopped())break e;Gn(o,s,c),i=l}else for(r=0;r<n.length;r++){if(l=(s=n[r]).instance,c=s.currentTarget,s=s.listener,l!==i&&o.isPropagationStopped())break e;Gn(o,s,c),i=l}}}if(Pe)throw e=Fe,Pe=!1,Fe=null,e}function Fn(e,t){var a=t[go];void 0===a&&(a=t[go]=new Set);var n=e+"__bubble";a.has(n)||(Hn(t,e,2,!1),a.add(n))}function Ln(e,t,a){var n=0;t&&(n|=4),Hn(a,e,n,t)}var Wn="_reactListening"+Math.random().toString(36).slice(2);function Bn(e){if(!e[Wn]){e[Wn]=!0,r.forEach((function(t){"selectionchange"!==t&&(qn.has(t)||Ln(t,!1,e),Ln(t,!0,e))}));var t=9===e.nodeType?e:e.ownerDocument;null===t||t[Wn]||(t[Wn]=!0,Ln("selectionchange",!1,t))}}function Hn(e,t,a,n){switch($t(t)){case 1:var o=Kt;break;case 4:o=zt;break;default:o=Vt}a=o.bind(null,t,a,e),o=void 0,!Re||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(o=!0),n?void 0!==o?e.addEventListener(t,a,{capture:!0,passive:o}):e.addEventListener(t,a,!0):void 0!==o?e.addEventListener(t,a,{passive:o}):e.addEventListener(t,a,!1)}function Un(e,t,a,n,o){var i=n;if(0===(1&t)&&0===(2&t)&&null!==n)e:for(;;){if(null===n)return;var r=n.tag;if(3===r||4===r){var s=n.stateNode.containerInfo;if(s===o||8===s.nodeType&&s.parentNode===o)break;if(4===r)for(r=n.return;null!==r;){var l=r.tag;if((3===l||4===l)&&((l=r.stateNode.containerInfo)===o||8===l.nodeType&&l.parentNode===o))return;r=r.return}for(;null!==s;){if(null===(r=bo(s)))return;if(5===(l=r.tag)||6===l){n=i=r;continue e}s=s.parentNode}}n=n.return}Te((function(){var n=i,o=we(a),r=[];e:{var s=En.get(e);if(void 0!==s){var l=ca,c=e;switch(e){case"keypress":if(0===ta(a))break e;case"keydown":case"keyup":l=Sa;break;case"focusin":c="focus",l=fa;break;case"focusout":c="blur",l=fa;break;case"beforeblur":case"afterblur":l=fa;break;case"click":if(2===a.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":l=ma;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":l=pa;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":l=Aa;break;case Sn:case In:case An:l=ga;break;case Nn:l=Na;break;case"scroll":l=ua;break;case"wheel":l=Ta;break;case"copy":case"cut":case"paste":l=_a;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":l=Ia}var d=0!==(4&t),u=!d&&"scroll"===e,h=d?null!==s?s+"Capture":null:s;d=[];for(var m,p=n;null!==p;){var f=(m=p).stateNode;if(5===m.tag&&null!==f&&(m=f,null!==h&&(null!=(f=De(p,h))&&d.push(Kn(p,f,m)))),u)break;p=p.return}0<d.length&&(s=new l(s,c,null,a,o),r.push({event:s,listeners:d}))}}if(0===(7&t)){if(l="mouseout"===e||"pointerout"===e,(!(s="mouseover"===e||"pointerover"===e)||a===ve||!(c=a.relatedTarget||a.fromElement)||!bo(c)&&!c[fo])&&(l||s)&&(s=o.window===o?o:(s=o.ownerDocument)?s.defaultView||s.parentWindow:window,l?(l=n,null!==(c=(c=a.relatedTarget||a.toElement)?bo(c):null)&&(c!==(u=Be(c))||5!==c.tag&&6!==c.tag)&&(c=null)):(l=null,c=n),l!==c)){if(d=ma,f="onMouseLeave",h="onMouseEnter",p="mouse","pointerout"!==e&&"pointerover"!==e||(d=Ia,f="onPointerLeave",h="onPointerEnter",p="pointer"),u=null==l?s:wo(l),m=null==c?s:wo(c),(s=new d(f,p+"leave",l,a,o)).target=u,s.relatedTarget=m,f=null,bo(o)===n&&((d=new d(h,p+"enter",c,a,o)).target=m,d.relatedTarget=u,f=d),u=f,l&&c)e:{for(h=c,p=0,m=d=l;m;m=Vn(m))p++;for(m=0,f=h;f;f=Vn(f))m++;for(;0<p-m;)d=Vn(d),p--;for(;0<m-p;)h=Vn(h),m--;for(;p--;){if(d===h||null!==h&&d===h.alternate)break e;d=Vn(d),h=Vn(h)}d=null}else d=null;null!==l&&Yn(r,s,l,d,!1),null!==c&&null!==u&&Yn(r,u,c,d,!0)}if("select"===(l=(s=n?wo(n):window).nodeName&&s.nodeName.toLowerCase())||"input"===l&&"file"===s.type)var g=Ja;else if(Ha(s))if($a)g=rn;else{g=nn;var y=an}else(l=s.nodeName)&&"input"===l.toLowerCase()&&("checkbox"===s.type||"radio"===s.type)&&(g=on);switch(g&&(g=g(e,n))?Ua(r,g,a,o):(y&&y(e,s,n),"focusout"===e&&(y=s._wrapperState)&&y.controlled&&"number"===s.type&&ee(s,"number",s.value)),y=n?wo(n):window,e){case"focusin":(Ha(y)||"true"===y.contentEditable)&&(gn=y,yn=n,_n=null);break;case"focusout":_n=yn=gn=null;break;case"mousedown":bn=!0;break;case"contextmenu":case"mouseup":case"dragend":bn=!1,vn(r,a,o);break;case"selectionchange":if(fn)break;case"keydown":case"keyup":vn(r,a,o)}var _;if(Ra)e:{switch(e){case"compositionstart":var b="onCompositionStart";break e;case"compositionend":b="onCompositionEnd";break e;case"compositionupdate":b="onCompositionUpdate";break e}b=void 0}else Wa?Fa(e,a)&&(b="onCompositionEnd"):"keydown"===e&&229===a.keyCode&&(b="onCompositionStart");b&&(qa&&"ko"!==a.locale&&(Wa||"onCompositionStart"!==b?"onCompositionEnd"===b&&Wa&&(_=ea()):(Qt="value"in(Zt=o)?Zt.value:Zt.textContent,Wa=!0)),0<(y=zn(n,b)).length&&(b=new ba(b,e,null,a,o),r.push({event:b,listeners:y}),_?b.data=_:null!==(_=La(a))&&(b.data=_))),(_=Oa?function(e,t){switch(e){case"compositionend":return La(t);case"keypress":return 32!==t.which?null:(Pa=!0,Ga);case"textInput":return(e=t.data)===Ga&&Pa?null:e;default:return null}}(e,a):function(e,t){if(Wa)return"compositionend"===e||!Ra&&Fa(e,t)?(e=ea(),Xt=Qt=Zt=null,Wa=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return qa&&"ko"!==t.locale?null:t.data}}(e,a))&&(0<(n=zn(n,"onBeforeInput")).length&&(o=new ba("onBeforeInput","beforeinput",null,a,o),r.push({event:o,listeners:n}),o.data=_))}Pn(r,t)}))}function Kn(e,t,a){return{instance:e,listener:t,currentTarget:a}}function zn(e,t){for(var a=t+"Capture",n=[];null!==e;){var o=e,i=o.stateNode;5===o.tag&&null!==i&&(o=i,null!=(i=De(e,a))&&n.unshift(Kn(e,i,o)),null!=(i=De(e,t))&&n.push(Kn(e,i,o))),e=e.return}return n}function Vn(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Yn(e,t,a,n,o){for(var i=t._reactName,r=[];null!==a&&a!==n;){var s=a,l=s.alternate,c=s.stateNode;if(null!==l&&l===n)break;5===s.tag&&null!==c&&(s=c,o?null!=(l=De(a,i))&&r.unshift(Kn(a,l,s)):o||null!=(l=De(a,i))&&r.push(Kn(a,l,s))),a=a.return}0!==r.length&&e.push({event:t,listeners:r})}var Jn=/\r\n?/g,$n=/\u0000|\uFFFD/g;function Zn(e){return("string"===typeof e?e:""+e).replace(Jn,"\n").replace($n,"")}function Qn(e,t,a){if(t=Zn(t),Zn(e)!==t&&a)throw Error(i(425))}function Xn(){}var eo=null,to=null;function ao(e,t){return"textarea"===e||"noscript"===e||"string"===typeof t.children||"number"===typeof t.children||"object"===typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var no="function"===typeof setTimeout?setTimeout:void 0,oo="function"===typeof clearTimeout?clearTimeout:void 0,io="function"===typeof Promise?Promise:void 0,ro="function"===typeof queueMicrotask?queueMicrotask:"undefined"!==typeof io?function(e){return io.resolve(null).then(e).catch(so)}:no;function so(e){setTimeout((function(){throw e}))}function lo(e,t){var a=t,n=0;do{var o=a.nextSibling;if(e.removeChild(a),o&&8===o.nodeType)if("/$"===(a=o.data)){if(0===n)return e.removeChild(o),void Bt(t);n--}else"$"!==a&&"$?"!==a&&"$!"!==a||n++;a=o}while(a);Bt(t)}function co(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break;if(8===t){if("$"===(t=e.data)||"$!"===t||"$?"===t)break;if("/$"===t)return null}}return e}function uo(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var a=e.data;if("$"===a||"$!"===a||"$?"===a){if(0===t)return e;t--}else"/$"===a&&t++}e=e.previousSibling}return null}var ho=Math.random().toString(36).slice(2),mo="__reactFiber$"+ho,po="__reactProps$"+ho,fo="__reactContainer$"+ho,go="__reactEvents$"+ho,yo="__reactListeners$"+ho,_o="__reactHandles$"+ho;function bo(e){var t=e[mo];if(t)return t;for(var a=e.parentNode;a;){if(t=a[fo]||a[mo]){if(a=t.alternate,null!==t.child||null!==a&&null!==a.child)for(e=uo(e);null!==e;){if(a=e[mo])return a;e=uo(e)}return t}a=(e=a).parentNode}return null}function vo(e){return!(e=e[mo]||e[fo])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function wo(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(i(33))}function xo(e){return e[po]||null}var ko=[],Co=-1;function jo(e){return{current:e}}function So(e){0>Co||(e.current=ko[Co],ko[Co]=null,Co--)}function Io(e,t){Co++,ko[Co]=e.current,e.current=t}var Ao={},No=jo(Ao),Eo=jo(!1),To=Ao;function Do(e,t){var a=e.type.contextTypes;if(!a)return Ao;var n=e.stateNode;if(n&&n.__reactInternalMemoizedUnmaskedChildContext===t)return n.__reactInternalMemoizedMaskedChildContext;var o,i={};for(o in a)i[o]=t[o];return n&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=i),i}function Ro(e){return null!==(e=e.childContextTypes)&&void 0!==e}function Mo(){So(Eo),So(No)}function Oo(e,t,a){if(No.current!==Ao)throw Error(i(168));Io(No,t),Io(Eo,a)}function qo(e,t,a){var n=e.stateNode;if(t=t.childContextTypes,"function"!==typeof n.getChildContext)return a;for(var o in n=n.getChildContext())if(!(o in t))throw Error(i(108,H(e)||"Unknown",o));return G({},a,n)}function Go(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Ao,To=No.current,Io(No,e),Io(Eo,Eo.current),!0}function Po(e,t,a){var n=e.stateNode;if(!n)throw Error(i(169));a?(e=qo(e,t,To),n.__reactInternalMemoizedMergedChildContext=e,So(Eo),So(No),Io(No,e)):So(Eo),Io(Eo,a)}var Fo=null,Lo=!1,Wo=!1;function Bo(e){null===Fo?Fo=[e]:Fo.push(e)}function Ho(){if(!Wo&&null!==Fo){Wo=!0;var e=0,t=bt;try{var a=Fo;for(bt=1;e<a.length;e++){var n=a[e];do{n=n(!0)}while(null!==n)}Fo=null,Lo=!1}catch(o){throw null!==Fo&&(Fo=Fo.slice(e+1)),Ve(Xe,Ho),o}finally{bt=t,Wo=!1}}return null}var Uo=[],Ko=0,zo=null,Vo=0,Yo=[],Jo=0,$o=null,Zo=1,Qo="";function Xo(e,t){Uo[Ko++]=Vo,Uo[Ko++]=zo,zo=e,Vo=t}function ei(e,t,a){Yo[Jo++]=Zo,Yo[Jo++]=Qo,Yo[Jo++]=$o,$o=e;var n=Zo;e=Qo;var o=32-rt(n)-1;n&=~(1<<o),a+=1;var i=32-rt(t)+o;if(30<i){var r=o-o%5;i=(n&(1<<r)-1).toString(32),n>>=r,o-=r,Zo=1<<32-rt(t)+o|a<<o|n,Qo=i+e}else Zo=1<<i|a<<o|n,Qo=e}function ti(e){null!==e.return&&(Xo(e,1),ei(e,1,0))}function ai(e){for(;e===zo;)zo=Uo[--Ko],Uo[Ko]=null,Vo=Uo[--Ko],Uo[Ko]=null;for(;e===$o;)$o=Yo[--Jo],Yo[Jo]=null,Qo=Yo[--Jo],Yo[Jo]=null,Zo=Yo[--Jo],Yo[Jo]=null}var ni=null,oi=null,ii=!1,ri=null;function si(e,t){var a=Dc(5,null,null,0);a.elementType="DELETED",a.stateNode=t,a.return=e,null===(t=e.deletions)?(e.deletions=[a],e.flags|=16):t.push(a)}function li(e,t){switch(e.tag){case 5:var a=e.type;return null!==(t=1!==t.nodeType||a.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,ni=e,oi=co(t.firstChild),!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,ni=e,oi=null,!0);case 13:return null!==(t=8!==t.nodeType?null:t)&&(a=null!==$o?{id:Zo,overflow:Qo}:null,e.memoizedState={dehydrated:t,treeContext:a,retryLane:1073741824},(a=Dc(18,null,null,0)).stateNode=t,a.return=e,e.child=a,ni=e,oi=null,!0);default:return!1}}function ci(e){return 0!==(1&e.mode)&&0===(128&e.flags)}function di(e){if(ii){var t=oi;if(t){var a=t;if(!li(e,t)){if(ci(e))throw Error(i(418));t=co(a.nextSibling);var n=ni;t&&li(e,t)?si(n,a):(e.flags=-4097&e.flags|2,ii=!1,ni=e)}}else{if(ci(e))throw Error(i(418));e.flags=-4097&e.flags|2,ii=!1,ni=e}}}function ui(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;ni=e}function hi(e){if(e!==ni)return!1;if(!ii)return ui(e),ii=!0,!1;var t;if((t=3!==e.tag)&&!(t=5!==e.tag)&&(t="head"!==(t=e.type)&&"body"!==t&&!ao(e.type,e.memoizedProps)),t&&(t=oi)){if(ci(e))throw mi(),Error(i(418));for(;t;)si(e,t),t=co(t.nextSibling)}if(ui(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(i(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var a=e.data;if("/$"===a){if(0===t){oi=co(e.nextSibling);break e}t--}else"$"!==a&&"$!"!==a&&"$?"!==a||t++}e=e.nextSibling}oi=null}}else oi=ni?co(e.stateNode.nextSibling):null;return!0}function mi(){for(var e=oi;e;)e=co(e.nextSibling)}function pi(){oi=ni=null,ii=!1}function fi(e){null===ri?ri=[e]:ri.push(e)}var gi=v.ReactCurrentBatchConfig;function yi(e,t){if(e&&e.defaultProps){for(var a in t=G({},t),e=e.defaultProps)void 0===t[a]&&(t[a]=e[a]);return t}return t}var _i=jo(null),bi=null,vi=null,wi=null;function xi(){wi=vi=bi=null}function ki(e){var t=_i.current;So(_i),e._currentValue=t}function Ci(e,t,a){for(;null!==e;){var n=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,null!==n&&(n.childLanes|=t)):null!==n&&(n.childLanes&t)!==t&&(n.childLanes|=t),e===a)break;e=e.return}}function ji(e,t){bi=e,wi=vi=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!==(e.lanes&t)&&(vs=!0),e.firstContext=null)}function Si(e){var t=e._currentValue;if(wi!==e)if(e={context:e,memoizedValue:t,next:null},null===vi){if(null===bi)throw Error(i(308));vi=e,bi.dependencies={lanes:0,firstContext:e}}else vi=vi.next=e;return t}var Ii=null;function Ai(e){null===Ii?Ii=[e]:Ii.push(e)}function Ni(e,t,a,n){var o=t.interleaved;return null===o?(a.next=a,Ai(t)):(a.next=o.next,o.next=a),t.interleaved=a,Ei(e,n)}function Ei(e,t){e.lanes|=t;var a=e.alternate;for(null!==a&&(a.lanes|=t),a=e,e=e.return;null!==e;)e.childLanes|=t,null!==(a=e.alternate)&&(a.childLanes|=t),a=e,e=e.return;return 3===a.tag?a.stateNode:null}var Ti=!1;function Di(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Ri(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Mi(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Oi(e,t,a){var n=e.updateQueue;if(null===n)return null;if(n=n.shared,0!==(2&Nl)){var o=n.pending;return null===o?t.next=t:(t.next=o.next,o.next=t),n.pending=t,Ei(e,a)}return null===(o=n.interleaved)?(t.next=t,Ai(n)):(t.next=o.next,o.next=t),n.interleaved=t,Ei(e,a)}function qi(e,t,a){if(null!==(t=t.updateQueue)&&(t=t.shared,0!==(4194240&a))){var n=t.lanes;a|=n&=e.pendingLanes,t.lanes=a,_t(e,a)}}function Gi(e,t){var a=e.updateQueue,n=e.alternate;if(null!==n&&a===(n=n.updateQueue)){var o=null,i=null;if(null!==(a=a.firstBaseUpdate)){do{var r={eventTime:a.eventTime,lane:a.lane,tag:a.tag,payload:a.payload,callback:a.callback,next:null};null===i?o=i=r:i=i.next=r,a=a.next}while(null!==a);null===i?o=i=t:i=i.next=t}else o=i=t;return a={baseState:n.baseState,firstBaseUpdate:o,lastBaseUpdate:i,shared:n.shared,effects:n.effects},void(e.updateQueue=a)}null===(e=a.lastBaseUpdate)?a.firstBaseUpdate=t:e.next=t,a.lastBaseUpdate=t}function Pi(e,t,a,n){var o=e.updateQueue;Ti=!1;var i=o.firstBaseUpdate,r=o.lastBaseUpdate,s=o.shared.pending;if(null!==s){o.shared.pending=null;var l=s,c=l.next;l.next=null,null===r?i=c:r.next=c,r=l;var d=e.alternate;null!==d&&((s=(d=d.updateQueue).lastBaseUpdate)!==r&&(null===s?d.firstBaseUpdate=c:s.next=c,d.lastBaseUpdate=l))}if(null!==i){var u=o.baseState;for(r=0,d=c=l=null,s=i;;){var h=s.lane,m=s.eventTime;if((n&h)===h){null!==d&&(d=d.next={eventTime:m,lane:0,tag:s.tag,payload:s.payload,callback:s.callback,next:null});e:{var p=e,f=s;switch(h=t,m=a,f.tag){case 1:if("function"===typeof(p=f.payload)){u=p.call(m,u,h);break e}u=p;break e;case 3:p.flags=-65537&p.flags|128;case 0:if(null===(h="function"===typeof(p=f.payload)?p.call(m,u,h):p)||void 0===h)break e;u=G({},u,h);break e;case 2:Ti=!0}}null!==s.callback&&0!==s.lane&&(e.flags|=64,null===(h=o.effects)?o.effects=[s]:h.push(s))}else m={eventTime:m,lane:h,tag:s.tag,payload:s.payload,callback:s.callback,next:null},null===d?(c=d=m,l=u):d=d.next=m,r|=h;if(null===(s=s.next)){if(null===(s=o.shared.pending))break;s=(h=s).next,h.next=null,o.lastBaseUpdate=h,o.shared.pending=null}}if(null===d&&(l=u),o.baseState=l,o.firstBaseUpdate=c,o.lastBaseUpdate=d,null!==(t=o.shared.interleaved)){o=t;do{r|=o.lane,o=o.next}while(o!==t)}else null===i&&(o.shared.lanes=0);Gl|=r,e.lanes=r,e.memoizedState=u}}function Fi(e,t,a){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var n=e[t],o=n.callback;if(null!==o){if(n.callback=null,n=a,"function"!==typeof o)throw Error(i(191,o));o.call(n)}}}var Li=(new n.Component).refs;function Wi(e,t,a,n){a=null===(a=a(n,t=e.memoizedState))||void 0===a?t:G({},t,a),e.memoizedState=a,0===e.lanes&&(e.updateQueue.baseState=a)}var Bi={isMounted:function(e){return!!(e=e._reactInternals)&&Be(e)===e},enqueueSetState:function(e,t,a){e=e._reactInternals;var n=tc(),o=ac(e),i=Mi(n,o);i.payload=t,void 0!==a&&null!==a&&(i.callback=a),null!==(t=Oi(e,i,o))&&(nc(t,e,o,n),qi(t,e,o))},enqueueReplaceState:function(e,t,a){e=e._reactInternals;var n=tc(),o=ac(e),i=Mi(n,o);i.tag=1,i.payload=t,void 0!==a&&null!==a&&(i.callback=a),null!==(t=Oi(e,i,o))&&(nc(t,e,o,n),qi(t,e,o))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var a=tc(),n=ac(e),o=Mi(a,n);o.tag=2,void 0!==t&&null!==t&&(o.callback=t),null!==(t=Oi(e,o,n))&&(nc(t,e,n,a),qi(t,e,n))}};function Hi(e,t,a,n,o,i,r){return"function"===typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(n,i,r):!t.prototype||!t.prototype.isPureReactComponent||(!ln(a,n)||!ln(o,i))}function Ui(e,t,a){var n=!1,o=Ao,i=t.contextType;return"object"===typeof i&&null!==i?i=Si(i):(o=Ro(t)?To:No.current,i=(n=null!==(n=t.contextTypes)&&void 0!==n)?Do(e,o):Ao),t=new t(a,i),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=Bi,e.stateNode=t,t._reactInternals=e,n&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=i),t}function Ki(e,t,a,n){e=t.state,"function"===typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(a,n),"function"===typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(a,n),t.state!==e&&Bi.enqueueReplaceState(t,t.state,null)}function zi(e,t,a,n){var o=e.stateNode;o.props=a,o.state=e.memoizedState,o.refs=Li,Di(e);var i=t.contextType;"object"===typeof i&&null!==i?o.context=Si(i):(i=Ro(t)?To:No.current,o.context=Do(e,i)),o.state=e.memoizedState,"function"===typeof(i=t.getDerivedStateFromProps)&&(Wi(e,t,i,a),o.state=e.memoizedState),"function"===typeof t.getDerivedStateFromProps||"function"===typeof o.getSnapshotBeforeUpdate||"function"!==typeof o.UNSAFE_componentWillMount&&"function"!==typeof o.componentWillMount||(t=o.state,"function"===typeof o.componentWillMount&&o.componentWillMount(),"function"===typeof o.UNSAFE_componentWillMount&&o.UNSAFE_componentWillMount(),t!==o.state&&Bi.enqueueReplaceState(o,o.state,null),Pi(e,a,o,n),o.state=e.memoizedState),"function"===typeof o.componentDidMount&&(e.flags|=4194308)}function Vi(e,t,a){if(null!==(e=a.ref)&&"function"!==typeof e&&"object"!==typeof e){if(a._owner){if(a=a._owner){if(1!==a.tag)throw Error(i(309));var n=a.stateNode}if(!n)throw Error(i(147,e));var o=n,r=""+e;return null!==t&&null!==t.ref&&"function"===typeof t.ref&&t.ref._stringRef===r?t.ref:(t=function(e){var t=o.refs;t===Li&&(t=o.refs={}),null===e?delete t[r]:t[r]=e},t._stringRef=r,t)}if("string"!==typeof e)throw Error(i(284));if(!a._owner)throw Error(i(290,e))}return e}function Yi(e,t){throw e=Object.prototype.toString.call(t),Error(i(31,"[object Object]"===e?"object with keys {"+Object.keys(t).join(", ")+"}":e))}function Ji(e){return(0,e._init)(e._payload)}function $i(e){function t(t,a){if(e){var n=t.deletions;null===n?(t.deletions=[a],t.flags|=16):n.push(a)}}function a(a,n){if(!e)return null;for(;null!==n;)t(a,n),n=n.sibling;return null}function n(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function o(e,t){return(e=Mc(e,t)).index=0,e.sibling=null,e}function r(t,a,n){return t.index=n,e?null!==(n=t.alternate)?(n=n.index)<a?(t.flags|=2,a):n:(t.flags|=2,a):(t.flags|=1048576,a)}function s(t){return e&&null===t.alternate&&(t.flags|=2),t}function l(e,t,a,n){return null===t||6!==t.tag?((t=Pc(a,e.mode,n)).return=e,t):((t=o(t,a)).return=e,t)}function c(e,t,a,n){var i=a.type;return i===k?u(e,t,a.props.children,n,a.key):null!==t&&(t.elementType===i||"object"===typeof i&&null!==i&&i.$$typeof===D&&Ji(i)===t.type)?((n=o(t,a.props)).ref=Vi(e,t,a),n.return=e,n):((n=Oc(a.type,a.key,a.props,null,e.mode,n)).ref=Vi(e,t,a),n.return=e,n)}function d(e,t,a,n){return null===t||4!==t.tag||t.stateNode.containerInfo!==a.containerInfo||t.stateNode.implementation!==a.implementation?((t=Fc(a,e.mode,n)).return=e,t):((t=o(t,a.children||[])).return=e,t)}function u(e,t,a,n,i){return null===t||7!==t.tag?((t=qc(a,e.mode,n,i)).return=e,t):((t=o(t,a)).return=e,t)}function h(e,t,a){if("string"===typeof t&&""!==t||"number"===typeof t)return(t=Pc(""+t,e.mode,a)).return=e,t;if("object"===typeof t&&null!==t){switch(t.$$typeof){case w:return(a=Oc(t.type,t.key,t.props,null,e.mode,a)).ref=Vi(e,null,t),a.return=e,a;case x:return(t=Fc(t,e.mode,a)).return=e,t;case D:return h(e,(0,t._init)(t._payload),a)}if(te(t)||O(t))return(t=qc(t,e.mode,a,null)).return=e,t;Yi(e,t)}return null}function m(e,t,a,n){var o=null!==t?t.key:null;if("string"===typeof a&&""!==a||"number"===typeof a)return null!==o?null:l(e,t,""+a,n);if("object"===typeof a&&null!==a){switch(a.$$typeof){case w:return a.key===o?c(e,t,a,n):null;case x:return a.key===o?d(e,t,a,n):null;case D:return m(e,t,(o=a._init)(a._payload),n)}if(te(a)||O(a))return null!==o?null:u(e,t,a,n,null);Yi(e,a)}return null}function p(e,t,a,n,o){if("string"===typeof n&&""!==n||"number"===typeof n)return l(t,e=e.get(a)||null,""+n,o);if("object"===typeof n&&null!==n){switch(n.$$typeof){case w:return c(t,e=e.get(null===n.key?a:n.key)||null,n,o);case x:return d(t,e=e.get(null===n.key?a:n.key)||null,n,o);case D:return p(e,t,a,(0,n._init)(n._payload),o)}if(te(n)||O(n))return u(t,e=e.get(a)||null,n,o,null);Yi(t,n)}return null}function f(o,i,s,l){for(var c=null,d=null,u=i,f=i=0,g=null;null!==u&&f<s.length;f++){u.index>f?(g=u,u=null):g=u.sibling;var y=m(o,u,s[f],l);if(null===y){null===u&&(u=g);break}e&&u&&null===y.alternate&&t(o,u),i=r(y,i,f),null===d?c=y:d.sibling=y,d=y,u=g}if(f===s.length)return a(o,u),ii&&Xo(o,f),c;if(null===u){for(;f<s.length;f++)null!==(u=h(o,s[f],l))&&(i=r(u,i,f),null===d?c=u:d.sibling=u,d=u);return ii&&Xo(o,f),c}for(u=n(o,u);f<s.length;f++)null!==(g=p(u,o,f,s[f],l))&&(e&&null!==g.alternate&&u.delete(null===g.key?f:g.key),i=r(g,i,f),null===d?c=g:d.sibling=g,d=g);return e&&u.forEach((function(e){return t(o,e)})),ii&&Xo(o,f),c}function g(o,s,l,c){var d=O(l);if("function"!==typeof d)throw Error(i(150));if(null==(l=d.call(l)))throw Error(i(151));for(var u=d=null,f=s,g=s=0,y=null,_=l.next();null!==f&&!_.done;g++,_=l.next()){f.index>g?(y=f,f=null):y=f.sibling;var b=m(o,f,_.value,c);if(null===b){null===f&&(f=y);break}e&&f&&null===b.alternate&&t(o,f),s=r(b,s,g),null===u?d=b:u.sibling=b,u=b,f=y}if(_.done)return a(o,f),ii&&Xo(o,g),d;if(null===f){for(;!_.done;g++,_=l.next())null!==(_=h(o,_.value,c))&&(s=r(_,s,g),null===u?d=_:u.sibling=_,u=_);return ii&&Xo(o,g),d}for(f=n(o,f);!_.done;g++,_=l.next())null!==(_=p(f,o,g,_.value,c))&&(e&&null!==_.alternate&&f.delete(null===_.key?g:_.key),s=r(_,s,g),null===u?d=_:u.sibling=_,u=_);return e&&f.forEach((function(e){return t(o,e)})),ii&&Xo(o,g),d}return function e(n,i,r,l){if("object"===typeof r&&null!==r&&r.type===k&&null===r.key&&(r=r.props.children),"object"===typeof r&&null!==r){switch(r.$$typeof){case w:e:{for(var c=r.key,d=i;null!==d;){if(d.key===c){if((c=r.type)===k){if(7===d.tag){a(n,d.sibling),(i=o(d,r.props.children)).return=n,n=i;break e}}else if(d.elementType===c||"object"===typeof c&&null!==c&&c.$$typeof===D&&Ji(c)===d.type){a(n,d.sibling),(i=o(d,r.props)).ref=Vi(n,d,r),i.return=n,n=i;break e}a(n,d);break}t(n,d),d=d.sibling}r.type===k?((i=qc(r.props.children,n.mode,l,r.key)).return=n,n=i):((l=Oc(r.type,r.key,r.props,null,n.mode,l)).ref=Vi(n,i,r),l.return=n,n=l)}return s(n);case x:e:{for(d=r.key;null!==i;){if(i.key===d){if(4===i.tag&&i.stateNode.containerInfo===r.containerInfo&&i.stateNode.implementation===r.implementation){a(n,i.sibling),(i=o(i,r.children||[])).return=n,n=i;break e}a(n,i);break}t(n,i),i=i.sibling}(i=Fc(r,n.mode,l)).return=n,n=i}return s(n);case D:return e(n,i,(d=r._init)(r._payload),l)}if(te(r))return f(n,i,r,l);if(O(r))return g(n,i,r,l);Yi(n,r)}return"string"===typeof r&&""!==r||"number"===typeof r?(r=""+r,null!==i&&6===i.tag?(a(n,i.sibling),(i=o(i,r)).return=n,n=i):(a(n,i),(i=Pc(r,n.mode,l)).return=n,n=i),s(n)):a(n,i)}}var Zi=$i(!0),Qi=$i(!1),Xi={},er=jo(Xi),tr=jo(Xi),ar=jo(Xi);function nr(e){if(e===Xi)throw Error(i(174));return e}function or(e,t){switch(Io(ar,t),Io(tr,e),Io(er,Xi),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:le(null,"");break;default:t=le(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}So(er),Io(er,t)}function ir(){So(er),So(tr),So(ar)}function rr(e){nr(ar.current);var t=nr(er.current),a=le(t,e.type);t!==a&&(Io(tr,e),Io(er,a))}function sr(e){tr.current===e&&(So(er),So(tr))}var lr=jo(0);function cr(e){for(var t=e;null!==t;){if(13===t.tag){var a=t.memoizedState;if(null!==a&&(null===(a=a.dehydrated)||"$?"===a.data||"$!"===a.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!==(128&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var dr=[];function ur(){for(var e=0;e<dr.length;e++)dr[e]._workInProgressVersionPrimary=null;dr.length=0}var hr=v.ReactCurrentDispatcher,mr=v.ReactCurrentBatchConfig,pr=0,fr=null,gr=null,yr=null,_r=!1,br=!1,vr=0,wr=0;function xr(){throw Error(i(321))}function kr(e,t){if(null===t)return!1;for(var a=0;a<t.length&&a<e.length;a++)if(!sn(e[a],t[a]))return!1;return!0}function Cr(e,t,a,n,o,r){if(pr=r,fr=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,hr.current=null===e||null===e.memoizedState?ss:ls,e=a(n,o),br){r=0;do{if(br=!1,vr=0,25<=r)throw Error(i(301));r+=1,yr=gr=null,t.updateQueue=null,hr.current=cs,e=a(n,o)}while(br)}if(hr.current=rs,t=null!==gr&&null!==gr.next,pr=0,yr=gr=fr=null,_r=!1,t)throw Error(i(300));return e}function jr(){var e=0!==vr;return vr=0,e}function Sr(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===yr?fr.memoizedState=yr=e:yr=yr.next=e,yr}function Ir(){if(null===gr){var e=fr.alternate;e=null!==e?e.memoizedState:null}else e=gr.next;var t=null===yr?fr.memoizedState:yr.next;if(null!==t)yr=t,gr=e;else{if(null===e)throw Error(i(310));e={memoizedState:(gr=e).memoizedState,baseState:gr.baseState,baseQueue:gr.baseQueue,queue:gr.queue,next:null},null===yr?fr.memoizedState=yr=e:yr=yr.next=e}return yr}function Ar(e,t){return"function"===typeof t?t(e):t}function Nr(e){var t=Ir(),a=t.queue;if(null===a)throw Error(i(311));a.lastRenderedReducer=e;var n=gr,o=n.baseQueue,r=a.pending;if(null!==r){if(null!==o){var s=o.next;o.next=r.next,r.next=s}n.baseQueue=o=r,a.pending=null}if(null!==o){r=o.next,n=n.baseState;var l=s=null,c=null,d=r;do{var u=d.lane;if((pr&u)===u)null!==c&&(c=c.next={lane:0,action:d.action,hasEagerState:d.hasEagerState,eagerState:d.eagerState,next:null}),n=d.hasEagerState?d.eagerState:e(n,d.action);else{var h={lane:u,action:d.action,hasEagerState:d.hasEagerState,eagerState:d.eagerState,next:null};null===c?(l=c=h,s=n):c=c.next=h,fr.lanes|=u,Gl|=u}d=d.next}while(null!==d&&d!==r);null===c?s=n:c.next=l,sn(n,t.memoizedState)||(vs=!0),t.memoizedState=n,t.baseState=s,t.baseQueue=c,a.lastRenderedState=n}if(null!==(e=a.interleaved)){o=e;do{r=o.lane,fr.lanes|=r,Gl|=r,o=o.next}while(o!==e)}else null===o&&(a.lanes=0);return[t.memoizedState,a.dispatch]}function Er(e){var t=Ir(),a=t.queue;if(null===a)throw Error(i(311));a.lastRenderedReducer=e;var n=a.dispatch,o=a.pending,r=t.memoizedState;if(null!==o){a.pending=null;var s=o=o.next;do{r=e(r,s.action),s=s.next}while(s!==o);sn(r,t.memoizedState)||(vs=!0),t.memoizedState=r,null===t.baseQueue&&(t.baseState=r),a.lastRenderedState=r}return[r,n]}function Tr(){}function Dr(e,t){var a=fr,n=Ir(),o=t(),r=!sn(n.memoizedState,o);if(r&&(n.memoizedState=o,vs=!0),n=n.queue,Ur(Or.bind(null,a,n,e),[e]),n.getSnapshot!==t||r||null!==yr&&1&yr.memoizedState.tag){if(a.flags|=2048,Fr(9,Mr.bind(null,a,n,o,t),void 0,null),null===El)throw Error(i(349));0!==(30&pr)||Rr(a,t,o)}return o}function Rr(e,t,a){e.flags|=16384,e={getSnapshot:t,value:a},null===(t=fr.updateQueue)?(t={lastEffect:null,stores:null},fr.updateQueue=t,t.stores=[e]):null===(a=t.stores)?t.stores=[e]:a.push(e)}function Mr(e,t,a,n){t.value=a,t.getSnapshot=n,qr(t)&&Gr(e)}function Or(e,t,a){return a((function(){qr(t)&&Gr(e)}))}function qr(e){var t=e.getSnapshot;e=e.value;try{var a=t();return!sn(e,a)}catch(n){return!0}}function Gr(e){var t=Ei(e,1);null!==t&&nc(t,e,1,-1)}function Pr(e){var t=Sr();return"function"===typeof e&&(e=e()),t.memoizedState=t.baseState=e,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:Ar,lastRenderedState:e},t.queue=e,e=e.dispatch=as.bind(null,fr,e),[t.memoizedState,e]}function Fr(e,t,a,n){return e={tag:e,create:t,destroy:a,deps:n,next:null},null===(t=fr.updateQueue)?(t={lastEffect:null,stores:null},fr.updateQueue=t,t.lastEffect=e.next=e):null===(a=t.lastEffect)?t.lastEffect=e.next=e:(n=a.next,a.next=e,e.next=n,t.lastEffect=e),e}function Lr(){return Ir().memoizedState}function Wr(e,t,a,n){var o=Sr();fr.flags|=e,o.memoizedState=Fr(1|t,a,void 0,void 0===n?null:n)}function Br(e,t,a,n){var o=Ir();n=void 0===n?null:n;var i=void 0;if(null!==gr){var r=gr.memoizedState;if(i=r.destroy,null!==n&&kr(n,r.deps))return void(o.memoizedState=Fr(t,a,i,n))}fr.flags|=e,o.memoizedState=Fr(1|t,a,i,n)}function Hr(e,t){return Wr(8390656,8,e,t)}function Ur(e,t){return Br(2048,8,e,t)}function Kr(e,t){return Br(4,2,e,t)}function zr(e,t){return Br(4,4,e,t)}function Vr(e,t){return"function"===typeof t?(e=e(),t(e),function(){t(null)}):null!==t&&void 0!==t?(e=e(),t.current=e,function(){t.current=null}):void 0}function Yr(e,t,a){return a=null!==a&&void 0!==a?a.concat([e]):null,Br(4,4,Vr.bind(null,t,e),a)}function Jr(){}function $r(e,t){var a=Ir();t=void 0===t?null:t;var n=a.memoizedState;return null!==n&&null!==t&&kr(t,n[1])?n[0]:(a.memoizedState=[e,t],e)}function Zr(e,t){var a=Ir();t=void 0===t?null:t;var n=a.memoizedState;return null!==n&&null!==t&&kr(t,n[1])?n[0]:(e=e(),a.memoizedState=[e,t],e)}function Qr(e,t,a){return 0===(21&pr)?(e.baseState&&(e.baseState=!1,vs=!0),e.memoizedState=a):(sn(a,t)||(a=ft(),fr.lanes|=a,Gl|=a,e.baseState=!0),t)}function Xr(e,t){var a=bt;bt=0!==a&&4>a?a:4,e(!0);var n=mr.transition;mr.transition={};try{e(!1),t()}finally{bt=a,mr.transition=n}}function es(){return Ir().memoizedState}function ts(e,t,a){var n=ac(e);if(a={lane:n,action:a,hasEagerState:!1,eagerState:null,next:null},ns(e))os(t,a);else if(null!==(a=Ni(e,t,a,n))){nc(a,e,n,tc()),is(a,t,n)}}function as(e,t,a){var n=ac(e),o={lane:n,action:a,hasEagerState:!1,eagerState:null,next:null};if(ns(e))os(t,o);else{var i=e.alternate;if(0===e.lanes&&(null===i||0===i.lanes)&&null!==(i=t.lastRenderedReducer))try{var r=t.lastRenderedState,s=i(r,a);if(o.hasEagerState=!0,o.eagerState=s,sn(s,r)){var l=t.interleaved;return null===l?(o.next=o,Ai(t)):(o.next=l.next,l.next=o),void(t.interleaved=o)}}catch(c){}null!==(a=Ni(e,t,o,n))&&(nc(a,e,n,o=tc()),is(a,t,n))}}function ns(e){var t=e.alternate;return e===fr||null!==t&&t===fr}function os(e,t){br=_r=!0;var a=e.pending;null===a?t.next=t:(t.next=a.next,a.next=t),e.pending=t}function is(e,t,a){if(0!==(4194240&a)){var n=t.lanes;a|=n&=e.pendingLanes,t.lanes=a,_t(e,a)}}var rs={readContext:Si,useCallback:xr,useContext:xr,useEffect:xr,useImperativeHandle:xr,useInsertionEffect:xr,useLayoutEffect:xr,useMemo:xr,useReducer:xr,useRef:xr,useState:xr,useDebugValue:xr,useDeferredValue:xr,useTransition:xr,useMutableSource:xr,useSyncExternalStore:xr,useId:xr,unstable_isNewReconciler:!1},ss={readContext:Si,useCallback:function(e,t){return Sr().memoizedState=[e,void 0===t?null:t],e},useContext:Si,useEffect:Hr,useImperativeHandle:function(e,t,a){return a=null!==a&&void 0!==a?a.concat([e]):null,Wr(4194308,4,Vr.bind(null,t,e),a)},useLayoutEffect:function(e,t){return Wr(4194308,4,e,t)},useInsertionEffect:function(e,t){return Wr(4,2,e,t)},useMemo:function(e,t){var a=Sr();return t=void 0===t?null:t,e=e(),a.memoizedState=[e,t],e},useReducer:function(e,t,a){var n=Sr();return t=void 0!==a?a(t):t,n.memoizedState=n.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},n.queue=e,e=e.dispatch=ts.bind(null,fr,e),[n.memoizedState,e]},useRef:function(e){return e={current:e},Sr().memoizedState=e},useState:Pr,useDebugValue:Jr,useDeferredValue:function(e){return Sr().memoizedState=e},useTransition:function(){var e=Pr(!1),t=e[0];return e=Xr.bind(null,e[1]),Sr().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,a){var n=fr,o=Sr();if(ii){if(void 0===a)throw Error(i(407));a=a()}else{if(a=t(),null===El)throw Error(i(349));0!==(30&pr)||Rr(n,t,a)}o.memoizedState=a;var r={value:a,getSnapshot:t};return o.queue=r,Hr(Or.bind(null,n,r,e),[e]),n.flags|=2048,Fr(9,Mr.bind(null,n,r,a,t),void 0,null),a},useId:function(){var e=Sr(),t=El.identifierPrefix;if(ii){var a=Qo;t=":"+t+"R"+(a=(Zo&~(1<<32-rt(Zo)-1)).toString(32)+a),0<(a=vr++)&&(t+="H"+a.toString(32)),t+=":"}else t=":"+t+"r"+(a=wr++).toString(32)+":";return e.memoizedState=t},unstable_isNewReconciler:!1},ls={readContext:Si,useCallback:$r,useContext:Si,useEffect:Ur,useImperativeHandle:Yr,useInsertionEffect:Kr,useLayoutEffect:zr,useMemo:Zr,useReducer:Nr,useRef:Lr,useState:function(){return Nr(Ar)},useDebugValue:Jr,useDeferredValue:function(e){return Qr(Ir(),gr.memoizedState,e)},useTransition:function(){return[Nr(Ar)[0],Ir().memoizedState]},useMutableSource:Tr,useSyncExternalStore:Dr,useId:es,unstable_isNewReconciler:!1},cs={readContext:Si,useCallback:$r,useContext:Si,useEffect:Ur,useImperativeHandle:Yr,useInsertionEffect:Kr,useLayoutEffect:zr,useMemo:Zr,useReducer:Er,useRef:Lr,useState:function(){return Er(Ar)},useDebugValue:Jr,useDeferredValue:function(e){var t=Ir();return null===gr?t.memoizedState=e:Qr(t,gr.memoizedState,e)},useTransition:function(){return[Er(Ar)[0],Ir().memoizedState]},useMutableSource:Tr,useSyncExternalStore:Dr,useId:es,unstable_isNewReconciler:!1};function ds(e,t){try{var a="",n=t;do{a+=W(n),n=n.return}while(n);var o=a}catch(i){o="\nError generating stack: "+i.message+"\n"+i.stack}return{value:e,source:t,stack:o,digest:null}}function us(e,t,a){return{value:e,source:null,stack:null!=a?a:null,digest:null!=t?t:null}}function hs(e,t){try{console.error(t.value)}catch(a){setTimeout((function(){throw a}))}}var ms="function"===typeof WeakMap?WeakMap:Map;function ps(e,t,a){(a=Mi(-1,a)).tag=3,a.payload={element:null};var n=t.value;return a.callback=function(){Kl||(Kl=!0,zl=n),hs(0,t)},a}function fs(e,t,a){(a=Mi(-1,a)).tag=3;var n=e.type.getDerivedStateFromError;if("function"===typeof n){var o=t.value;a.payload=function(){return n(o)},a.callback=function(){hs(0,t)}}var i=e.stateNode;return null!==i&&"function"===typeof i.componentDidCatch&&(a.callback=function(){hs(0,t),"function"!==typeof n&&(null===Vl?Vl=new Set([this]):Vl.add(this));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),a}function gs(e,t,a){var n=e.pingCache;if(null===n){n=e.pingCache=new ms;var o=new Set;n.set(t,o)}else void 0===(o=n.get(t))&&(o=new Set,n.set(t,o));o.has(a)||(o.add(a),e=Sc.bind(null,e,t,a),t.then(e,e))}function ys(e){do{var t;if((t=13===e.tag)&&(t=null===(t=e.memoizedState)||null!==t.dehydrated),t)return e;e=e.return}while(null!==e);return null}function _s(e,t,a,n,o){return 0===(1&e.mode)?(e===t?e.flags|=65536:(e.flags|=128,a.flags|=131072,a.flags&=-52805,1===a.tag&&(null===a.alternate?a.tag=17:((t=Mi(-1,1)).tag=2,Oi(a,t,1))),a.lanes|=1),e):(e.flags|=65536,e.lanes=o,e)}var bs=v.ReactCurrentOwner,vs=!1;function ws(e,t,a,n){t.child=null===e?Qi(t,null,a,n):Zi(t,e.child,a,n)}function xs(e,t,a,n,o){a=a.render;var i=t.ref;return ji(t,o),n=Cr(e,t,a,n,i,o),a=jr(),null===e||vs?(ii&&a&&ti(t),t.flags|=1,ws(e,t,n,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,Ks(e,t,o))}function ks(e,t,a,n,o){if(null===e){var i=a.type;return"function"!==typeof i||Rc(i)||void 0!==i.defaultProps||null!==a.compare||void 0!==a.defaultProps?((e=Oc(a.type,null,n,t,t.mode,o)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=i,Cs(e,t,i,n,o))}if(i=e.child,0===(e.lanes&o)){var r=i.memoizedProps;if((a=null!==(a=a.compare)?a:ln)(r,n)&&e.ref===t.ref)return Ks(e,t,o)}return t.flags|=1,(e=Mc(i,n)).ref=t.ref,e.return=t,t.child=e}function Cs(e,t,a,n,o){if(null!==e){var i=e.memoizedProps;if(ln(i,n)&&e.ref===t.ref){if(vs=!1,t.pendingProps=n=i,0===(e.lanes&o))return t.lanes=e.lanes,Ks(e,t,o);0!==(131072&e.flags)&&(vs=!0)}}return Is(e,t,a,n,o)}function js(e,t,a){var n=t.pendingProps,o=n.children,i=null!==e?e.memoizedState:null;if("hidden"===n.mode)if(0===(1&t.mode))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},Io(Ml,Rl),Rl|=a;else{if(0===(1073741824&a))return e=null!==i?i.baseLanes|a:a,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,Io(Ml,Rl),Rl|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},n=null!==i?i.baseLanes:a,Io(Ml,Rl),Rl|=n}else null!==i?(n=i.baseLanes|a,t.memoizedState=null):n=a,Io(Ml,Rl),Rl|=n;return ws(e,t,o,a),t.child}function Ss(e,t){var a=t.ref;(null===e&&null!==a||null!==e&&e.ref!==a)&&(t.flags|=512,t.flags|=2097152)}function Is(e,t,a,n,o){var i=Ro(a)?To:No.current;return i=Do(t,i),ji(t,o),a=Cr(e,t,a,n,i,o),n=jr(),null===e||vs?(ii&&n&&ti(t),t.flags|=1,ws(e,t,a,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,Ks(e,t,o))}function As(e,t,a,n,o){if(Ro(a)){var i=!0;Go(t)}else i=!1;if(ji(t,o),null===t.stateNode)Us(e,t),Ui(t,a,n),zi(t,a,n,o),n=!0;else if(null===e){var r=t.stateNode,s=t.memoizedProps;r.props=s;var l=r.context,c=a.contextType;"object"===typeof c&&null!==c?c=Si(c):c=Do(t,c=Ro(a)?To:No.current);var d=a.getDerivedStateFromProps,u="function"===typeof d||"function"===typeof r.getSnapshotBeforeUpdate;u||"function"!==typeof r.UNSAFE_componentWillReceiveProps&&"function"!==typeof r.componentWillReceiveProps||(s!==n||l!==c)&&Ki(t,r,n,c),Ti=!1;var h=t.memoizedState;r.state=h,Pi(t,n,r,o),l=t.memoizedState,s!==n||h!==l||Eo.current||Ti?("function"===typeof d&&(Wi(t,a,d,n),l=t.memoizedState),(s=Ti||Hi(t,a,s,n,h,l,c))?(u||"function"!==typeof r.UNSAFE_componentWillMount&&"function"!==typeof r.componentWillMount||("function"===typeof r.componentWillMount&&r.componentWillMount(),"function"===typeof r.UNSAFE_componentWillMount&&r.UNSAFE_componentWillMount()),"function"===typeof r.componentDidMount&&(t.flags|=4194308)):("function"===typeof r.componentDidMount&&(t.flags|=4194308),t.memoizedProps=n,t.memoizedState=l),r.props=n,r.state=l,r.context=c,n=s):("function"===typeof r.componentDidMount&&(t.flags|=4194308),n=!1)}else{r=t.stateNode,Ri(e,t),s=t.memoizedProps,c=t.type===t.elementType?s:yi(t.type,s),r.props=c,u=t.pendingProps,h=r.context,"object"===typeof(l=a.contextType)&&null!==l?l=Si(l):l=Do(t,l=Ro(a)?To:No.current);var m=a.getDerivedStateFromProps;(d="function"===typeof m||"function"===typeof r.getSnapshotBeforeUpdate)||"function"!==typeof r.UNSAFE_componentWillReceiveProps&&"function"!==typeof r.componentWillReceiveProps||(s!==u||h!==l)&&Ki(t,r,n,l),Ti=!1,h=t.memoizedState,r.state=h,Pi(t,n,r,o);var p=t.memoizedState;s!==u||h!==p||Eo.current||Ti?("function"===typeof m&&(Wi(t,a,m,n),p=t.memoizedState),(c=Ti||Hi(t,a,c,n,h,p,l)||!1)?(d||"function"!==typeof r.UNSAFE_componentWillUpdate&&"function"!==typeof r.componentWillUpdate||("function"===typeof r.componentWillUpdate&&r.componentWillUpdate(n,p,l),"function"===typeof r.UNSAFE_componentWillUpdate&&r.UNSAFE_componentWillUpdate(n,p,l)),"function"===typeof r.componentDidUpdate&&(t.flags|=4),"function"===typeof r.getSnapshotBeforeUpdate&&(t.flags|=1024)):("function"!==typeof r.componentDidUpdate||s===e.memoizedProps&&h===e.memoizedState||(t.flags|=4),"function"!==typeof r.getSnapshotBeforeUpdate||s===e.memoizedProps&&h===e.memoizedState||(t.flags|=1024),t.memoizedProps=n,t.memoizedState=p),r.props=n,r.state=p,r.context=l,n=c):("function"!==typeof r.componentDidUpdate||s===e.memoizedProps&&h===e.memoizedState||(t.flags|=4),"function"!==typeof r.getSnapshotBeforeUpdate||s===e.memoizedProps&&h===e.memoizedState||(t.flags|=1024),n=!1)}return Ns(e,t,a,n,i,o)}function Ns(e,t,a,n,o,i){Ss(e,t);var r=0!==(128&t.flags);if(!n&&!r)return o&&Po(t,a,!1),Ks(e,t,i);n=t.stateNode,bs.current=t;var s=r&&"function"!==typeof a.getDerivedStateFromError?null:n.render();return t.flags|=1,null!==e&&r?(t.child=Zi(t,e.child,null,i),t.child=Zi(t,null,s,i)):ws(e,t,s,i),t.memoizedState=n.state,o&&Po(t,a,!0),t.child}function Es(e){var t=e.stateNode;t.pendingContext?Oo(0,t.pendingContext,t.pendingContext!==t.context):t.context&&Oo(0,t.context,!1),or(e,t.containerInfo)}function Ts(e,t,a,n,o){return pi(),fi(o),t.flags|=256,ws(e,t,a,n),t.child}var Ds,Rs,Ms,Os,qs={dehydrated:null,treeContext:null,retryLane:0};function Gs(e){return{baseLanes:e,cachePool:null,transitions:null}}function Ps(e,t,a){var n,o=t.pendingProps,r=lr.current,s=!1,l=0!==(128&t.flags);if((n=l)||(n=(null===e||null!==e.memoizedState)&&0!==(2&r)),n?(s=!0,t.flags&=-129):null!==e&&null===e.memoizedState||(r|=1),Io(lr,1&r),null===e)return di(t),null!==(e=t.memoizedState)&&null!==(e=e.dehydrated)?(0===(1&t.mode)?t.lanes=1:"$!"===e.data?t.lanes=8:t.lanes=1073741824,null):(l=o.children,e=o.fallback,s?(o=t.mode,s=t.child,l={mode:"hidden",children:l},0===(1&o)&&null!==s?(s.childLanes=0,s.pendingProps=l):s=Gc(l,o,0,null),e=qc(e,o,a,null),s.return=t,e.return=t,s.sibling=e,t.child=s,t.child.memoizedState=Gs(a),t.memoizedState=qs,e):Fs(t,l));if(null!==(r=e.memoizedState)&&null!==(n=r.dehydrated))return function(e,t,a,n,o,r,s){if(a)return 256&t.flags?(t.flags&=-257,Ls(e,t,s,n=us(Error(i(422))))):null!==t.memoizedState?(t.child=e.child,t.flags|=128,null):(r=n.fallback,o=t.mode,n=Gc({mode:"visible",children:n.children},o,0,null),(r=qc(r,o,s,null)).flags|=2,n.return=t,r.return=t,n.sibling=r,t.child=n,0!==(1&t.mode)&&Zi(t,e.child,null,s),t.child.memoizedState=Gs(s),t.memoizedState=qs,r);if(0===(1&t.mode))return Ls(e,t,s,null);if("$!"===o.data){if(n=o.nextSibling&&o.nextSibling.dataset)var l=n.dgst;return n=l,Ls(e,t,s,n=us(r=Error(i(419)),n,void 0))}if(l=0!==(s&e.childLanes),vs||l){if(null!==(n=El)){switch(s&-s){case 4:o=2;break;case 16:o=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:o=32;break;case 536870912:o=268435456;break;default:o=0}0!==(o=0!==(o&(n.suspendedLanes|s))?0:o)&&o!==r.retryLane&&(r.retryLane=o,Ei(e,o),nc(n,e,o,-1))}return gc(),Ls(e,t,s,n=us(Error(i(421))))}return"$?"===o.data?(t.flags|=128,t.child=e.child,t=Ac.bind(null,e),o._reactRetry=t,null):(e=r.treeContext,oi=co(o.nextSibling),ni=t,ii=!0,ri=null,null!==e&&(Yo[Jo++]=Zo,Yo[Jo++]=Qo,Yo[Jo++]=$o,Zo=e.id,Qo=e.overflow,$o=t),t=Fs(t,n.children),t.flags|=4096,t)}(e,t,l,o,n,r,a);if(s){s=o.fallback,l=t.mode,n=(r=e.child).sibling;var c={mode:"hidden",children:o.children};return 0===(1&l)&&t.child!==r?((o=t.child).childLanes=0,o.pendingProps=c,t.deletions=null):(o=Mc(r,c)).subtreeFlags=14680064&r.subtreeFlags,null!==n?s=Mc(n,s):(s=qc(s,l,a,null)).flags|=2,s.return=t,o.return=t,o.sibling=s,t.child=o,o=s,s=t.child,l=null===(l=e.child.memoizedState)?Gs(a):{baseLanes:l.baseLanes|a,cachePool:null,transitions:l.transitions},s.memoizedState=l,s.childLanes=e.childLanes&~a,t.memoizedState=qs,o}return e=(s=e.child).sibling,o=Mc(s,{mode:"visible",children:o.children}),0===(1&t.mode)&&(o.lanes=a),o.return=t,o.sibling=null,null!==e&&(null===(a=t.deletions)?(t.deletions=[e],t.flags|=16):a.push(e)),t.child=o,t.memoizedState=null,o}function Fs(e,t){return(t=Gc({mode:"visible",children:t},e.mode,0,null)).return=e,e.child=t}function Ls(e,t,a,n){return null!==n&&fi(n),Zi(t,e.child,null,a),(e=Fs(t,t.pendingProps.children)).flags|=2,t.memoizedState=null,e}function Ws(e,t,a){e.lanes|=t;var n=e.alternate;null!==n&&(n.lanes|=t),Ci(e.return,t,a)}function Bs(e,t,a,n,o){var i=e.memoizedState;null===i?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:n,tail:a,tailMode:o}:(i.isBackwards=t,i.rendering=null,i.renderingStartTime=0,i.last=n,i.tail=a,i.tailMode=o)}function Hs(e,t,a){var n=t.pendingProps,o=n.revealOrder,i=n.tail;if(ws(e,t,n.children,a),0!==(2&(n=lr.current)))n=1&n|2,t.flags|=128;else{if(null!==e&&0!==(128&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&Ws(e,a,t);else if(19===e.tag)Ws(e,a,t);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}n&=1}if(Io(lr,n),0===(1&t.mode))t.memoizedState=null;else switch(o){case"forwards":for(a=t.child,o=null;null!==a;)null!==(e=a.alternate)&&null===cr(e)&&(o=a),a=a.sibling;null===(a=o)?(o=t.child,t.child=null):(o=a.sibling,a.sibling=null),Bs(t,!1,o,a,i);break;case"backwards":for(a=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===cr(e)){t.child=o;break}e=o.sibling,o.sibling=a,a=o,o=e}Bs(t,!0,a,null,i);break;case"together":Bs(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function Us(e,t){0===(1&t.mode)&&null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2)}function Ks(e,t,a){if(null!==e&&(t.dependencies=e.dependencies),Gl|=t.lanes,0===(a&t.childLanes))return null;if(null!==e&&t.child!==e.child)throw Error(i(153));if(null!==t.child){for(a=Mc(e=t.child,e.pendingProps),t.child=a,a.return=t;null!==e.sibling;)e=e.sibling,(a=a.sibling=Mc(e,e.pendingProps)).return=t;a.sibling=null}return t.child}function zs(e,t){if(!ii)switch(e.tailMode){case"hidden":t=e.tail;for(var a=null;null!==t;)null!==t.alternate&&(a=t),t=t.sibling;null===a?e.tail=null:a.sibling=null;break;case"collapsed":a=e.tail;for(var n=null;null!==a;)null!==a.alternate&&(n=a),a=a.sibling;null===n?t||null===e.tail?e.tail=null:e.tail.sibling=null:n.sibling=null}}function Vs(e){var t=null!==e.alternate&&e.alternate.child===e.child,a=0,n=0;if(t)for(var o=e.child;null!==o;)a|=o.lanes|o.childLanes,n|=14680064&o.subtreeFlags,n|=14680064&o.flags,o.return=e,o=o.sibling;else for(o=e.child;null!==o;)a|=o.lanes|o.childLanes,n|=o.subtreeFlags,n|=o.flags,o.return=e,o=o.sibling;return e.subtreeFlags|=n,e.childLanes=a,t}function Ys(e,t,a){var n=t.pendingProps;switch(ai(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Vs(t),null;case 1:case 17:return Ro(t.type)&&Mo(),Vs(t),null;case 3:return n=t.stateNode,ir(),So(Eo),So(No),ur(),n.pendingContext&&(n.context=n.pendingContext,n.pendingContext=null),null!==e&&null!==e.child||(hi(t)?t.flags|=4:null===e||e.memoizedState.isDehydrated&&0===(256&t.flags)||(t.flags|=1024,null!==ri&&(sc(ri),ri=null))),Rs(e,t),Vs(t),null;case 5:sr(t);var o=nr(ar.current);if(a=t.type,null!==e&&null!=t.stateNode)Ms(e,t,a,n,o),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!n){if(null===t.stateNode)throw Error(i(166));return Vs(t),null}if(e=nr(er.current),hi(t)){n=t.stateNode,a=t.type;var r=t.memoizedProps;switch(n[mo]=t,n[po]=r,e=0!==(1&t.mode),a){case"dialog":Fn("cancel",n),Fn("close",n);break;case"iframe":case"object":case"embed":Fn("load",n);break;case"video":case"audio":for(o=0;o<On.length;o++)Fn(On[o],n);break;case"source":Fn("error",n);break;case"img":case"image":case"link":Fn("error",n),Fn("load",n);break;case"details":Fn("toggle",n);break;case"input":$(n,r),Fn("invalid",n);break;case"select":n._wrapperState={wasMultiple:!!r.multiple},Fn("invalid",n);break;case"textarea":oe(n,r),Fn("invalid",n)}for(var l in _e(a,r),o=null,r)if(r.hasOwnProperty(l)){var c=r[l];"children"===l?"string"===typeof c?n.textContent!==c&&(!0!==r.suppressHydrationWarning&&Qn(n.textContent,c,e),o=["children",c]):"number"===typeof c&&n.textContent!==""+c&&(!0!==r.suppressHydrationWarning&&Qn(n.textContent,c,e),o=["children",""+c]):s.hasOwnProperty(l)&&null!=c&&"onScroll"===l&&Fn("scroll",n)}switch(a){case"input":z(n),X(n,r,!0);break;case"textarea":z(n),re(n);break;case"select":case"option":break;default:"function"===typeof r.onClick&&(n.onclick=Xn)}n=o,t.updateQueue=n,null!==n&&(t.flags|=4)}else{l=9===o.nodeType?o:o.ownerDocument,"http://www.w3.org/1999/xhtml"===e&&(e=se(a)),"http://www.w3.org/1999/xhtml"===e?"script"===a?((e=l.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"===typeof n.is?e=l.createElement(a,{is:n.is}):(e=l.createElement(a),"select"===a&&(l=e,n.multiple?l.multiple=!0:n.size&&(l.size=n.size))):e=l.createElementNS(e,a),e[mo]=t,e[po]=n,Ds(e,t,!1,!1),t.stateNode=e;e:{switch(l=be(a,n),a){case"dialog":Fn("cancel",e),Fn("close",e),o=n;break;case"iframe":case"object":case"embed":Fn("load",e),o=n;break;case"video":case"audio":for(o=0;o<On.length;o++)Fn(On[o],e);o=n;break;case"source":Fn("error",e),o=n;break;case"img":case"image":case"link":Fn("error",e),Fn("load",e),o=n;break;case"details":Fn("toggle",e),o=n;break;case"input":$(e,n),o=J(e,n),Fn("invalid",e);break;case"option":default:o=n;break;case"select":e._wrapperState={wasMultiple:!!n.multiple},o=G({},n,{value:void 0}),Fn("invalid",e);break;case"textarea":oe(e,n),o=ne(e,n),Fn("invalid",e)}for(r in _e(a,o),c=o)if(c.hasOwnProperty(r)){var d=c[r];"style"===r?ge(e,d):"dangerouslySetInnerHTML"===r?null!=(d=d?d.__html:void 0)&&ue(e,d):"children"===r?"string"===typeof d?("textarea"!==a||""!==d)&&he(e,d):"number"===typeof d&&he(e,""+d):"suppressContentEditableWarning"!==r&&"suppressHydrationWarning"!==r&&"autoFocus"!==r&&(s.hasOwnProperty(r)?null!=d&&"onScroll"===r&&Fn("scroll",e):null!=d&&b(e,r,d,l))}switch(a){case"input":z(e),X(e,n,!1);break;case"textarea":z(e),re(e);break;case"option":null!=n.value&&e.setAttribute("value",""+U(n.value));break;case"select":e.multiple=!!n.multiple,null!=(r=n.value)?ae(e,!!n.multiple,r,!1):null!=n.defaultValue&&ae(e,!!n.multiple,n.defaultValue,!0);break;default:"function"===typeof o.onClick&&(e.onclick=Xn)}switch(a){case"button":case"input":case"select":case"textarea":n=!!n.autoFocus;break e;case"img":n=!0;break e;default:n=!1}}n&&(t.flags|=4)}null!==t.ref&&(t.flags|=512,t.flags|=2097152)}return Vs(t),null;case 6:if(e&&null!=t.stateNode)Os(e,t,e.memoizedProps,n);else{if("string"!==typeof n&&null===t.stateNode)throw Error(i(166));if(a=nr(ar.current),nr(er.current),hi(t)){if(n=t.stateNode,a=t.memoizedProps,n[mo]=t,(r=n.nodeValue!==a)&&null!==(e=ni))switch(e.tag){case 3:Qn(n.nodeValue,a,0!==(1&e.mode));break;case 5:!0!==e.memoizedProps.suppressHydrationWarning&&Qn(n.nodeValue,a,0!==(1&e.mode))}r&&(t.flags|=4)}else(n=(9===a.nodeType?a:a.ownerDocument).createTextNode(n))[mo]=t,t.stateNode=n}return Vs(t),null;case 13:if(So(lr),n=t.memoizedState,null===e||null!==e.memoizedState&&null!==e.memoizedState.dehydrated){if(ii&&null!==oi&&0!==(1&t.mode)&&0===(128&t.flags))mi(),pi(),t.flags|=98560,r=!1;else if(r=hi(t),null!==n&&null!==n.dehydrated){if(null===e){if(!r)throw Error(i(318));if(!(r=null!==(r=t.memoizedState)?r.dehydrated:null))throw Error(i(317));r[mo]=t}else pi(),0===(128&t.flags)&&(t.memoizedState=null),t.flags|=4;Vs(t),r=!1}else null!==ri&&(sc(ri),ri=null),r=!0;if(!r)return 65536&t.flags?t:null}return 0!==(128&t.flags)?(t.lanes=a,t):((n=null!==n)!==(null!==e&&null!==e.memoizedState)&&n&&(t.child.flags|=8192,0!==(1&t.mode)&&(null===e||0!==(1&lr.current)?0===Ol&&(Ol=3):gc())),null!==t.updateQueue&&(t.flags|=4),Vs(t),null);case 4:return ir(),Rs(e,t),null===e&&Bn(t.stateNode.containerInfo),Vs(t),null;case 10:return ki(t.type._context),Vs(t),null;case 19:if(So(lr),null===(r=t.memoizedState))return Vs(t),null;if(n=0!==(128&t.flags),null===(l=r.rendering))if(n)zs(r,!1);else{if(0!==Ol||null!==e&&0!==(128&e.flags))for(e=t.child;null!==e;){if(null!==(l=cr(e))){for(t.flags|=128,zs(r,!1),null!==(n=l.updateQueue)&&(t.updateQueue=n,t.flags|=4),t.subtreeFlags=0,n=a,a=t.child;null!==a;)e=n,(r=a).flags&=14680066,null===(l=r.alternate)?(r.childLanes=0,r.lanes=e,r.child=null,r.subtreeFlags=0,r.memoizedProps=null,r.memoizedState=null,r.updateQueue=null,r.dependencies=null,r.stateNode=null):(r.childLanes=l.childLanes,r.lanes=l.lanes,r.child=l.child,r.subtreeFlags=0,r.deletions=null,r.memoizedProps=l.memoizedProps,r.memoizedState=l.memoizedState,r.updateQueue=l.updateQueue,r.type=l.type,e=l.dependencies,r.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),a=a.sibling;return Io(lr,1&lr.current|2),t.child}e=e.sibling}null!==r.tail&&Ze()>Hl&&(t.flags|=128,n=!0,zs(r,!1),t.lanes=4194304)}else{if(!n)if(null!==(e=cr(l))){if(t.flags|=128,n=!0,null!==(a=e.updateQueue)&&(t.updateQueue=a,t.flags|=4),zs(r,!0),null===r.tail&&"hidden"===r.tailMode&&!l.alternate&&!ii)return Vs(t),null}else 2*Ze()-r.renderingStartTime>Hl&&1073741824!==a&&(t.flags|=128,n=!0,zs(r,!1),t.lanes=4194304);r.isBackwards?(l.sibling=t.child,t.child=l):(null!==(a=r.last)?a.sibling=l:t.child=l,r.last=l)}return null!==r.tail?(t=r.tail,r.rendering=t,r.tail=t.sibling,r.renderingStartTime=Ze(),t.sibling=null,a=lr.current,Io(lr,n?1&a|2:1&a),t):(Vs(t),null);case 22:case 23:return hc(),n=null!==t.memoizedState,null!==e&&null!==e.memoizedState!==n&&(t.flags|=8192),n&&0!==(1&t.mode)?0!==(1073741824&Rl)&&(Vs(t),6&t.subtreeFlags&&(t.flags|=8192)):Vs(t),null;case 24:case 25:return null}throw Error(i(156,t.tag))}function Js(e,t){switch(ai(t),t.tag){case 1:return Ro(t.type)&&Mo(),65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 3:return ir(),So(Eo),So(No),ur(),0!==(65536&(e=t.flags))&&0===(128&e)?(t.flags=-65537&e|128,t):null;case 5:return sr(t),null;case 13:if(So(lr),null!==(e=t.memoizedState)&&null!==e.dehydrated){if(null===t.alternate)throw Error(i(340));pi()}return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 19:return So(lr),null;case 4:return ir(),null;case 10:return ki(t.type._context),null;case 22:case 23:return hc(),null;default:return null}}Ds=function(e,t){for(var a=t.child;null!==a;){if(5===a.tag||6===a.tag)e.appendChild(a.stateNode);else if(4!==a.tag&&null!==a.child){a.child.return=a,a=a.child;continue}if(a===t)break;for(;null===a.sibling;){if(null===a.return||a.return===t)return;a=a.return}a.sibling.return=a.return,a=a.sibling}},Rs=function(){},Ms=function(e,t,a,n){var o=e.memoizedProps;if(o!==n){e=t.stateNode,nr(er.current);var i,r=null;switch(a){case"input":o=J(e,o),n=J(e,n),r=[];break;case"select":o=G({},o,{value:void 0}),n=G({},n,{value:void 0}),r=[];break;case"textarea":o=ne(e,o),n=ne(e,n),r=[];break;default:"function"!==typeof o.onClick&&"function"===typeof n.onClick&&(e.onclick=Xn)}for(d in _e(a,n),a=null,o)if(!n.hasOwnProperty(d)&&o.hasOwnProperty(d)&&null!=o[d])if("style"===d){var l=o[d];for(i in l)l.hasOwnProperty(i)&&(a||(a={}),a[i]="")}else"dangerouslySetInnerHTML"!==d&&"children"!==d&&"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&"autoFocus"!==d&&(s.hasOwnProperty(d)?r||(r=[]):(r=r||[]).push(d,null));for(d in n){var c=n[d];if(l=null!=o?o[d]:void 0,n.hasOwnProperty(d)&&c!==l&&(null!=c||null!=l))if("style"===d)if(l){for(i in l)!l.hasOwnProperty(i)||c&&c.hasOwnProperty(i)||(a||(a={}),a[i]="");for(i in c)c.hasOwnProperty(i)&&l[i]!==c[i]&&(a||(a={}),a[i]=c[i])}else a||(r||(r=[]),r.push(d,a)),a=c;else"dangerouslySetInnerHTML"===d?(c=c?c.__html:void 0,l=l?l.__html:void 0,null!=c&&l!==c&&(r=r||[]).push(d,c)):"children"===d?"string"!==typeof c&&"number"!==typeof c||(r=r||[]).push(d,""+c):"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&(s.hasOwnProperty(d)?(null!=c&&"onScroll"===d&&Fn("scroll",e),r||l===c||(r=[])):(r=r||[]).push(d,c))}a&&(r=r||[]).push("style",a);var d=r;(t.updateQueue=d)&&(t.flags|=4)}},Os=function(e,t,a,n){a!==n&&(t.flags|=4)};var $s=!1,Zs=!1,Qs="function"===typeof WeakSet?WeakSet:Set,Xs=null;function el(e,t){var a=e.ref;if(null!==a)if("function"===typeof a)try{a(null)}catch(n){jc(e,t,n)}else a.current=null}function tl(e,t,a){try{a()}catch(n){jc(e,t,n)}}var al=!1;function nl(e,t,a){var n=t.updateQueue;if(null!==(n=null!==n?n.lastEffect:null)){var o=n=n.next;do{if((o.tag&e)===e){var i=o.destroy;o.destroy=void 0,void 0!==i&&tl(t,a,i)}o=o.next}while(o!==n)}}function ol(e,t){if(null!==(t=null!==(t=t.updateQueue)?t.lastEffect:null)){var a=t=t.next;do{if((a.tag&e)===e){var n=a.create;a.destroy=n()}a=a.next}while(a!==t)}}function il(e){var t=e.ref;if(null!==t){var a=e.stateNode;e.tag,e=a,"function"===typeof t?t(e):t.current=e}}function rl(e){var t=e.alternate;null!==t&&(e.alternate=null,rl(t)),e.child=null,e.deletions=null,e.sibling=null,5===e.tag&&(null!==(t=e.stateNode)&&(delete t[mo],delete t[po],delete t[go],delete t[yo],delete t[_o])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function sl(e){return 5===e.tag||3===e.tag||4===e.tag}function ll(e){e:for(;;){for(;null===e.sibling;){if(null===e.return||sl(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;5!==e.tag&&6!==e.tag&&18!==e.tag;){if(2&e.flags)continue e;if(null===e.child||4===e.tag)continue e;e.child.return=e,e=e.child}if(!(2&e.flags))return e.stateNode}}function cl(e,t,a){var n=e.tag;if(5===n||6===n)e=e.stateNode,t?8===a.nodeType?a.parentNode.insertBefore(e,t):a.insertBefore(e,t):(8===a.nodeType?(t=a.parentNode).insertBefore(e,a):(t=a).appendChild(e),null!==(a=a._reactRootContainer)&&void 0!==a||null!==t.onclick||(t.onclick=Xn));else if(4!==n&&null!==(e=e.child))for(cl(e,t,a),e=e.sibling;null!==e;)cl(e,t,a),e=e.sibling}function dl(e,t,a){var n=e.tag;if(5===n||6===n)e=e.stateNode,t?a.insertBefore(e,t):a.appendChild(e);else if(4!==n&&null!==(e=e.child))for(dl(e,t,a),e=e.sibling;null!==e;)dl(e,t,a),e=e.sibling}var ul=null,hl=!1;function ml(e,t,a){for(a=a.child;null!==a;)pl(e,t,a),a=a.sibling}function pl(e,t,a){if(it&&"function"===typeof it.onCommitFiberUnmount)try{it.onCommitFiberUnmount(ot,a)}catch(s){}switch(a.tag){case 5:Zs||el(a,t);case 6:var n=ul,o=hl;ul=null,ml(e,t,a),hl=o,null!==(ul=n)&&(hl?(e=ul,a=a.stateNode,8===e.nodeType?e.parentNode.removeChild(a):e.removeChild(a)):ul.removeChild(a.stateNode));break;case 18:null!==ul&&(hl?(e=ul,a=a.stateNode,8===e.nodeType?lo(e.parentNode,a):1===e.nodeType&&lo(e,a),Bt(e)):lo(ul,a.stateNode));break;case 4:n=ul,o=hl,ul=a.stateNode.containerInfo,hl=!0,ml(e,t,a),ul=n,hl=o;break;case 0:case 11:case 14:case 15:if(!Zs&&(null!==(n=a.updateQueue)&&null!==(n=n.lastEffect))){o=n=n.next;do{var i=o,r=i.destroy;i=i.tag,void 0!==r&&(0!==(2&i)||0!==(4&i))&&tl(a,t,r),o=o.next}while(o!==n)}ml(e,t,a);break;case 1:if(!Zs&&(el(a,t),"function"===typeof(n=a.stateNode).componentWillUnmount))try{n.props=a.memoizedProps,n.state=a.memoizedState,n.componentWillUnmount()}catch(s){jc(a,t,s)}ml(e,t,a);break;case 21:ml(e,t,a);break;case 22:1&a.mode?(Zs=(n=Zs)||null!==a.memoizedState,ml(e,t,a),Zs=n):ml(e,t,a);break;default:ml(e,t,a)}}function fl(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var a=e.stateNode;null===a&&(a=e.stateNode=new Qs),t.forEach((function(t){var n=Nc.bind(null,e,t);a.has(t)||(a.add(t),t.then(n,n))}))}}function gl(e,t){var a=t.deletions;if(null!==a)for(var n=0;n<a.length;n++){var o=a[n];try{var r=e,s=t,l=s;e:for(;null!==l;){switch(l.tag){case 5:ul=l.stateNode,hl=!1;break e;case 3:case 4:ul=l.stateNode.containerInfo,hl=!0;break e}l=l.return}if(null===ul)throw Error(i(160));pl(r,s,o),ul=null,hl=!1;var c=o.alternate;null!==c&&(c.return=null),o.return=null}catch(d){jc(o,t,d)}}if(12854&t.subtreeFlags)for(t=t.child;null!==t;)yl(t,e),t=t.sibling}function yl(e,t){var a=e.alternate,n=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:if(gl(t,e),_l(e),4&n){try{nl(3,e,e.return),ol(3,e)}catch(g){jc(e,e.return,g)}try{nl(5,e,e.return)}catch(g){jc(e,e.return,g)}}break;case 1:gl(t,e),_l(e),512&n&&null!==a&&el(a,a.return);break;case 5:if(gl(t,e),_l(e),512&n&&null!==a&&el(a,a.return),32&e.flags){var o=e.stateNode;try{he(o,"")}catch(g){jc(e,e.return,g)}}if(4&n&&null!=(o=e.stateNode)){var r=e.memoizedProps,s=null!==a?a.memoizedProps:r,l=e.type,c=e.updateQueue;if(e.updateQueue=null,null!==c)try{"input"===l&&"radio"===r.type&&null!=r.name&&Z(o,r),be(l,s);var d=be(l,r);for(s=0;s<c.length;s+=2){var u=c[s],h=c[s+1];"style"===u?ge(o,h):"dangerouslySetInnerHTML"===u?ue(o,h):"children"===u?he(o,h):b(o,u,h,d)}switch(l){case"input":Q(o,r);break;case"textarea":ie(o,r);break;case"select":var m=o._wrapperState.wasMultiple;o._wrapperState.wasMultiple=!!r.multiple;var p=r.value;null!=p?ae(o,!!r.multiple,p,!1):m!==!!r.multiple&&(null!=r.defaultValue?ae(o,!!r.multiple,r.defaultValue,!0):ae(o,!!r.multiple,r.multiple?[]:"",!1))}o[po]=r}catch(g){jc(e,e.return,g)}}break;case 6:if(gl(t,e),_l(e),4&n){if(null===e.stateNode)throw Error(i(162));o=e.stateNode,r=e.memoizedProps;try{o.nodeValue=r}catch(g){jc(e,e.return,g)}}break;case 3:if(gl(t,e),_l(e),4&n&&null!==a&&a.memoizedState.isDehydrated)try{Bt(t.containerInfo)}catch(g){jc(e,e.return,g)}break;case 4:default:gl(t,e),_l(e);break;case 13:gl(t,e),_l(e),8192&(o=e.child).flags&&(r=null!==o.memoizedState,o.stateNode.isHidden=r,!r||null!==o.alternate&&null!==o.alternate.memoizedState||(Bl=Ze())),4&n&&fl(e);break;case 22:if(u=null!==a&&null!==a.memoizedState,1&e.mode?(Zs=(d=Zs)||u,gl(t,e),Zs=d):gl(t,e),_l(e),8192&n){if(d=null!==e.memoizedState,(e.stateNode.isHidden=d)&&!u&&0!==(1&e.mode))for(Xs=e,u=e.child;null!==u;){for(h=Xs=u;null!==Xs;){switch(p=(m=Xs).child,m.tag){case 0:case 11:case 14:case 15:nl(4,m,m.return);break;case 1:el(m,m.return);var f=m.stateNode;if("function"===typeof f.componentWillUnmount){n=m,a=m.return;try{t=n,f.props=t.memoizedProps,f.state=t.memoizedState,f.componentWillUnmount()}catch(g){jc(n,a,g)}}break;case 5:el(m,m.return);break;case 22:if(null!==m.memoizedState){xl(h);continue}}null!==p?(p.return=m,Xs=p):xl(h)}u=u.sibling}e:for(u=null,h=e;;){if(5===h.tag){if(null===u){u=h;try{o=h.stateNode,d?"function"===typeof(r=o.style).setProperty?r.setProperty("display","none","important"):r.display="none":(l=h.stateNode,s=void 0!==(c=h.memoizedProps.style)&&null!==c&&c.hasOwnProperty("display")?c.display:null,l.style.display=fe("display",s))}catch(g){jc(e,e.return,g)}}}else if(6===h.tag){if(null===u)try{h.stateNode.nodeValue=d?"":h.memoizedProps}catch(g){jc(e,e.return,g)}}else if((22!==h.tag&&23!==h.tag||null===h.memoizedState||h===e)&&null!==h.child){h.child.return=h,h=h.child;continue}if(h===e)break e;for(;null===h.sibling;){if(null===h.return||h.return===e)break e;u===h&&(u=null),h=h.return}u===h&&(u=null),h.sibling.return=h.return,h=h.sibling}}break;case 19:gl(t,e),_l(e),4&n&&fl(e);case 21:}}function _l(e){var t=e.flags;if(2&t){try{e:{for(var a=e.return;null!==a;){if(sl(a)){var n=a;break e}a=a.return}throw Error(i(160))}switch(n.tag){case 5:var o=n.stateNode;32&n.flags&&(he(o,""),n.flags&=-33),dl(e,ll(e),o);break;case 3:case 4:var r=n.stateNode.containerInfo;cl(e,ll(e),r);break;default:throw Error(i(161))}}catch(s){jc(e,e.return,s)}e.flags&=-3}4096&t&&(e.flags&=-4097)}function bl(e,t,a){Xs=e,vl(e,t,a)}function vl(e,t,a){for(var n=0!==(1&e.mode);null!==Xs;){var o=Xs,i=o.child;if(22===o.tag&&n){var r=null!==o.memoizedState||$s;if(!r){var s=o.alternate,l=null!==s&&null!==s.memoizedState||Zs;s=$s;var c=Zs;if($s=r,(Zs=l)&&!c)for(Xs=o;null!==Xs;)l=(r=Xs).child,22===r.tag&&null!==r.memoizedState?kl(o):null!==l?(l.return=r,Xs=l):kl(o);for(;null!==i;)Xs=i,vl(i,t,a),i=i.sibling;Xs=o,$s=s,Zs=c}wl(e)}else 0!==(8772&o.subtreeFlags)&&null!==i?(i.return=o,Xs=i):wl(e)}}function wl(e){for(;null!==Xs;){var t=Xs;if(0!==(8772&t.flags)){var a=t.alternate;try{if(0!==(8772&t.flags))switch(t.tag){case 0:case 11:case 15:Zs||ol(5,t);break;case 1:var n=t.stateNode;if(4&t.flags&&!Zs)if(null===a)n.componentDidMount();else{var o=t.elementType===t.type?a.memoizedProps:yi(t.type,a.memoizedProps);n.componentDidUpdate(o,a.memoizedState,n.__reactInternalSnapshotBeforeUpdate)}var r=t.updateQueue;null!==r&&Fi(t,r,n);break;case 3:var s=t.updateQueue;if(null!==s){if(a=null,null!==t.child)switch(t.child.tag){case 5:case 1:a=t.child.stateNode}Fi(t,s,a)}break;case 5:var l=t.stateNode;if(null===a&&4&t.flags){a=l;var c=t.memoizedProps;switch(t.type){case"button":case"input":case"select":case"textarea":c.autoFocus&&a.focus();break;case"img":c.src&&(a.src=c.src)}}break;case 6:case 4:case 12:case 19:case 17:case 21:case 22:case 23:case 25:break;case 13:if(null===t.memoizedState){var d=t.alternate;if(null!==d){var u=d.memoizedState;if(null!==u){var h=u.dehydrated;null!==h&&Bt(h)}}}break;default:throw Error(i(163))}Zs||512&t.flags&&il(t)}catch(m){jc(t,t.return,m)}}if(t===e){Xs=null;break}if(null!==(a=t.sibling)){a.return=t.return,Xs=a;break}Xs=t.return}}function xl(e){for(;null!==Xs;){var t=Xs;if(t===e){Xs=null;break}var a=t.sibling;if(null!==a){a.return=t.return,Xs=a;break}Xs=t.return}}function kl(e){for(;null!==Xs;){var t=Xs;try{switch(t.tag){case 0:case 11:case 15:var a=t.return;try{ol(4,t)}catch(l){jc(t,a,l)}break;case 1:var n=t.stateNode;if("function"===typeof n.componentDidMount){var o=t.return;try{n.componentDidMount()}catch(l){jc(t,o,l)}}var i=t.return;try{il(t)}catch(l){jc(t,i,l)}break;case 5:var r=t.return;try{il(t)}catch(l){jc(t,r,l)}}}catch(l){jc(t,t.return,l)}if(t===e){Xs=null;break}var s=t.sibling;if(null!==s){s.return=t.return,Xs=s;break}Xs=t.return}}var Cl,jl=Math.ceil,Sl=v.ReactCurrentDispatcher,Il=v.ReactCurrentOwner,Al=v.ReactCurrentBatchConfig,Nl=0,El=null,Tl=null,Dl=0,Rl=0,Ml=jo(0),Ol=0,ql=null,Gl=0,Pl=0,Fl=0,Ll=null,Wl=null,Bl=0,Hl=1/0,Ul=null,Kl=!1,zl=null,Vl=null,Yl=!1,Jl=null,$l=0,Zl=0,Ql=null,Xl=-1,ec=0;function tc(){return 0!==(6&Nl)?Ze():-1!==Xl?Xl:Xl=Ze()}function ac(e){return 0===(1&e.mode)?1:0!==(2&Nl)&&0!==Dl?Dl&-Dl:null!==gi.transition?(0===ec&&(ec=ft()),ec):0!==(e=bt)?e:e=void 0===(e=window.event)?16:$t(e.type)}function nc(e,t,a,n){if(50<Zl)throw Zl=0,Ql=null,Error(i(185));yt(e,a,n),0!==(2&Nl)&&e===El||(e===El&&(0===(2&Nl)&&(Pl|=a),4===Ol&&lc(e,Dl)),oc(e,n),1===a&&0===Nl&&0===(1&t.mode)&&(Hl=Ze()+500,Lo&&Ho()))}function oc(e,t){var a=e.callbackNode;!function(e,t){for(var a=e.suspendedLanes,n=e.pingedLanes,o=e.expirationTimes,i=e.pendingLanes;0<i;){var r=31-rt(i),s=1<<r,l=o[r];-1===l?0!==(s&a)&&0===(s&n)||(o[r]=mt(s,t)):l<=t&&(e.expiredLanes|=s),i&=~s}}(e,t);var n=ht(e,e===El?Dl:0);if(0===n)null!==a&&Ye(a),e.callbackNode=null,e.callbackPriority=0;else if(t=n&-n,e.callbackPriority!==t){if(null!=a&&Ye(a),1===t)0===e.tag?function(e){Lo=!0,Bo(e)}(cc.bind(null,e)):Bo(cc.bind(null,e)),ro((function(){0===(6&Nl)&&Ho()})),a=null;else{switch(vt(n)){case 1:a=Xe;break;case 4:a=et;break;case 16:default:a=tt;break;case 536870912:a=nt}a=Ec(a,ic.bind(null,e))}e.callbackPriority=t,e.callbackNode=a}}function ic(e,t){if(Xl=-1,ec=0,0!==(6&Nl))throw Error(i(327));var a=e.callbackNode;if(kc()&&e.callbackNode!==a)return null;var n=ht(e,e===El?Dl:0);if(0===n)return null;if(0!==(30&n)||0!==(n&e.expiredLanes)||t)t=yc(e,n);else{t=n;var o=Nl;Nl|=2;var r=fc();for(El===e&&Dl===t||(Ul=null,Hl=Ze()+500,mc(e,t));;)try{bc();break}catch(l){pc(e,l)}xi(),Sl.current=r,Nl=o,null!==Tl?t=0:(El=null,Dl=0,t=Ol)}if(0!==t){if(2===t&&(0!==(o=pt(e))&&(n=o,t=rc(e,o))),1===t)throw a=ql,mc(e,0),lc(e,n),oc(e,Ze()),a;if(6===t)lc(e,n);else{if(o=e.current.alternate,0===(30&n)&&!function(e){for(var t=e;;){if(16384&t.flags){var a=t.updateQueue;if(null!==a&&null!==(a=a.stores))for(var n=0;n<a.length;n++){var o=a[n],i=o.getSnapshot;o=o.value;try{if(!sn(i(),o))return!1}catch(s){return!1}}}if(a=t.child,16384&t.subtreeFlags&&null!==a)a.return=t,t=a;else{if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}(o)&&(2===(t=yc(e,n))&&(0!==(r=pt(e))&&(n=r,t=rc(e,r))),1===t))throw a=ql,mc(e,0),lc(e,n),oc(e,Ze()),a;switch(e.finishedWork=o,e.finishedLanes=n,t){case 0:case 1:throw Error(i(345));case 2:case 5:xc(e,Wl,Ul);break;case 3:if(lc(e,n),(130023424&n)===n&&10<(t=Bl+500-Ze())){if(0!==ht(e,0))break;if(((o=e.suspendedLanes)&n)!==n){tc(),e.pingedLanes|=e.suspendedLanes&o;break}e.timeoutHandle=no(xc.bind(null,e,Wl,Ul),t);break}xc(e,Wl,Ul);break;case 4:if(lc(e,n),(4194240&n)===n)break;for(t=e.eventTimes,o=-1;0<n;){var s=31-rt(n);r=1<<s,(s=t[s])>o&&(o=s),n&=~r}if(n=o,10<(n=(120>(n=Ze()-n)?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*jl(n/1960))-n)){e.timeoutHandle=no(xc.bind(null,e,Wl,Ul),n);break}xc(e,Wl,Ul);break;default:throw Error(i(329))}}}return oc(e,Ze()),e.callbackNode===a?ic.bind(null,e):null}function rc(e,t){var a=Ll;return e.current.memoizedState.isDehydrated&&(mc(e,t).flags|=256),2!==(e=yc(e,t))&&(t=Wl,Wl=a,null!==t&&sc(t)),e}function sc(e){null===Wl?Wl=e:Wl.push.apply(Wl,e)}function lc(e,t){for(t&=~Fl,t&=~Pl,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var a=31-rt(t),n=1<<a;e[a]=-1,t&=~n}}function cc(e){if(0!==(6&Nl))throw Error(i(327));kc();var t=ht(e,0);if(0===(1&t))return oc(e,Ze()),null;var a=yc(e,t);if(0!==e.tag&&2===a){var n=pt(e);0!==n&&(t=n,a=rc(e,n))}if(1===a)throw a=ql,mc(e,0),lc(e,t),oc(e,Ze()),a;if(6===a)throw Error(i(345));return e.finishedWork=e.current.alternate,e.finishedLanes=t,xc(e,Wl,Ul),oc(e,Ze()),null}function dc(e,t){var a=Nl;Nl|=1;try{return e(t)}finally{0===(Nl=a)&&(Hl=Ze()+500,Lo&&Ho())}}function uc(e){null!==Jl&&0===Jl.tag&&0===(6&Nl)&&kc();var t=Nl;Nl|=1;var a=Al.transition,n=bt;try{if(Al.transition=null,bt=1,e)return e()}finally{bt=n,Al.transition=a,0===(6&(Nl=t))&&Ho()}}function hc(){Rl=Ml.current,So(Ml)}function mc(e,t){e.finishedWork=null,e.finishedLanes=0;var a=e.timeoutHandle;if(-1!==a&&(e.timeoutHandle=-1,oo(a)),null!==Tl)for(a=Tl.return;null!==a;){var n=a;switch(ai(n),n.tag){case 1:null!==(n=n.type.childContextTypes)&&void 0!==n&&Mo();break;case 3:ir(),So(Eo),So(No),ur();break;case 5:sr(n);break;case 4:ir();break;case 13:case 19:So(lr);break;case 10:ki(n.type._context);break;case 22:case 23:hc()}a=a.return}if(El=e,Tl=e=Mc(e.current,null),Dl=Rl=t,Ol=0,ql=null,Fl=Pl=Gl=0,Wl=Ll=null,null!==Ii){for(t=0;t<Ii.length;t++)if(null!==(n=(a=Ii[t]).interleaved)){a.interleaved=null;var o=n.next,i=a.pending;if(null!==i){var r=i.next;i.next=o,n.next=r}a.pending=n}Ii=null}return e}function pc(e,t){for(;;){var a=Tl;try{if(xi(),hr.current=rs,_r){for(var n=fr.memoizedState;null!==n;){var o=n.queue;null!==o&&(o.pending=null),n=n.next}_r=!1}if(pr=0,yr=gr=fr=null,br=!1,vr=0,Il.current=null,null===a||null===a.return){Ol=1,ql=t,Tl=null;break}e:{var r=e,s=a.return,l=a,c=t;if(t=Dl,l.flags|=32768,null!==c&&"object"===typeof c&&"function"===typeof c.then){var d=c,u=l,h=u.tag;if(0===(1&u.mode)&&(0===h||11===h||15===h)){var m=u.alternate;m?(u.updateQueue=m.updateQueue,u.memoizedState=m.memoizedState,u.lanes=m.lanes):(u.updateQueue=null,u.memoizedState=null)}var p=ys(s);if(null!==p){p.flags&=-257,_s(p,s,l,0,t),1&p.mode&&gs(r,d,t),c=d;var f=(t=p).updateQueue;if(null===f){var g=new Set;g.add(c),t.updateQueue=g}else f.add(c);break e}if(0===(1&t)){gs(r,d,t),gc();break e}c=Error(i(426))}else if(ii&&1&l.mode){var y=ys(s);if(null!==y){0===(65536&y.flags)&&(y.flags|=256),_s(y,s,l,0,t),fi(ds(c,l));break e}}r=c=ds(c,l),4!==Ol&&(Ol=2),null===Ll?Ll=[r]:Ll.push(r),r=s;do{switch(r.tag){case 3:r.flags|=65536,t&=-t,r.lanes|=t,Gi(r,ps(0,c,t));break e;case 1:l=c;var _=r.type,b=r.stateNode;if(0===(128&r.flags)&&("function"===typeof _.getDerivedStateFromError||null!==b&&"function"===typeof b.componentDidCatch&&(null===Vl||!Vl.has(b)))){r.flags|=65536,t&=-t,r.lanes|=t,Gi(r,fs(r,l,t));break e}}r=r.return}while(null!==r)}wc(a)}catch(v){t=v,Tl===a&&null!==a&&(Tl=a=a.return);continue}break}}function fc(){var e=Sl.current;return Sl.current=rs,null===e?rs:e}function gc(){0!==Ol&&3!==Ol&&2!==Ol||(Ol=4),null===El||0===(268435455&Gl)&&0===(268435455&Pl)||lc(El,Dl)}function yc(e,t){var a=Nl;Nl|=2;var n=fc();for(El===e&&Dl===t||(Ul=null,mc(e,t));;)try{_c();break}catch(o){pc(e,o)}if(xi(),Nl=a,Sl.current=n,null!==Tl)throw Error(i(261));return El=null,Dl=0,Ol}function _c(){for(;null!==Tl;)vc(Tl)}function bc(){for(;null!==Tl&&!Je();)vc(Tl)}function vc(e){var t=Cl(e.alternate,e,Rl);e.memoizedProps=e.pendingProps,null===t?wc(e):Tl=t,Il.current=null}function wc(e){var t=e;do{var a=t.alternate;if(e=t.return,0===(32768&t.flags)){if(null!==(a=Ys(a,t,Rl)))return void(Tl=a)}else{if(null!==(a=Js(a,t)))return a.flags&=32767,void(Tl=a);if(null===e)return Ol=6,void(Tl=null);e.flags|=32768,e.subtreeFlags=0,e.deletions=null}if(null!==(t=t.sibling))return void(Tl=t);Tl=t=e}while(null!==t);0===Ol&&(Ol=5)}function xc(e,t,a){var n=bt,o=Al.transition;try{Al.transition=null,bt=1,function(e,t,a,n){do{kc()}while(null!==Jl);if(0!==(6&Nl))throw Error(i(327));a=e.finishedWork;var o=e.finishedLanes;if(null===a)return null;if(e.finishedWork=null,e.finishedLanes=0,a===e.current)throw Error(i(177));e.callbackNode=null,e.callbackPriority=0;var r=a.lanes|a.childLanes;if(function(e,t){var a=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var n=e.eventTimes;for(e=e.expirationTimes;0<a;){var o=31-rt(a),i=1<<o;t[o]=0,n[o]=-1,e[o]=-1,a&=~i}}(e,r),e===El&&(Tl=El=null,Dl=0),0===(2064&a.subtreeFlags)&&0===(2064&a.flags)||Yl||(Yl=!0,Ec(tt,(function(){return kc(),null}))),r=0!==(15990&a.flags),0!==(15990&a.subtreeFlags)||r){r=Al.transition,Al.transition=null;var s=bt;bt=1;var l=Nl;Nl|=4,Il.current=null,function(e,t){if(eo=Ut,mn(e=hn())){if("selectionStart"in e)var a={start:e.selectionStart,end:e.selectionEnd};else e:{var n=(a=(a=e.ownerDocument)&&a.defaultView||window).getSelection&&a.getSelection();if(n&&0!==n.rangeCount){a=n.anchorNode;var o=n.anchorOffset,r=n.focusNode;n=n.focusOffset;try{a.nodeType,r.nodeType}catch(w){a=null;break e}var s=0,l=-1,c=-1,d=0,u=0,h=e,m=null;t:for(;;){for(var p;h!==a||0!==o&&3!==h.nodeType||(l=s+o),h!==r||0!==n&&3!==h.nodeType||(c=s+n),3===h.nodeType&&(s+=h.nodeValue.length),null!==(p=h.firstChild);)m=h,h=p;for(;;){if(h===e)break t;if(m===a&&++d===o&&(l=s),m===r&&++u===n&&(c=s),null!==(p=h.nextSibling))break;m=(h=m).parentNode}h=p}a=-1===l||-1===c?null:{start:l,end:c}}else a=null}a=a||{start:0,end:0}}else a=null;for(to={focusedElem:e,selectionRange:a},Ut=!1,Xs=t;null!==Xs;)if(e=(t=Xs).child,0!==(1028&t.subtreeFlags)&&null!==e)e.return=t,Xs=e;else for(;null!==Xs;){t=Xs;try{var f=t.alternate;if(0!==(1024&t.flags))switch(t.tag){case 0:case 11:case 15:case 5:case 6:case 4:case 17:break;case 1:if(null!==f){var g=f.memoizedProps,y=f.memoizedState,_=t.stateNode,b=_.getSnapshotBeforeUpdate(t.elementType===t.type?g:yi(t.type,g),y);_.__reactInternalSnapshotBeforeUpdate=b}break;case 3:var v=t.stateNode.containerInfo;1===v.nodeType?v.textContent="":9===v.nodeType&&v.documentElement&&v.removeChild(v.documentElement);break;default:throw Error(i(163))}}catch(w){jc(t,t.return,w)}if(null!==(e=t.sibling)){e.return=t.return,Xs=e;break}Xs=t.return}f=al,al=!1}(e,a),yl(a,e),pn(to),Ut=!!eo,to=eo=null,e.current=a,bl(a,e,o),$e(),Nl=l,bt=s,Al.transition=r}else e.current=a;if(Yl&&(Yl=!1,Jl=e,$l=o),r=e.pendingLanes,0===r&&(Vl=null),function(e){if(it&&"function"===typeof it.onCommitFiberRoot)try{it.onCommitFiberRoot(ot,e,void 0,128===(128&e.current.flags))}catch(t){}}(a.stateNode),oc(e,Ze()),null!==t)for(n=e.onRecoverableError,a=0;a<t.length;a++)o=t[a],n(o.value,{componentStack:o.stack,digest:o.digest});if(Kl)throw Kl=!1,e=zl,zl=null,e;0!==(1&$l)&&0!==e.tag&&kc(),r=e.pendingLanes,0!==(1&r)?e===Ql?Zl++:(Zl=0,Ql=e):Zl=0,Ho()}(e,t,a,n)}finally{Al.transition=o,bt=n}return null}function kc(){if(null!==Jl){var e=vt($l),t=Al.transition,a=bt;try{if(Al.transition=null,bt=16>e?16:e,null===Jl)var n=!1;else{if(e=Jl,Jl=null,$l=0,0!==(6&Nl))throw Error(i(331));var o=Nl;for(Nl|=4,Xs=e.current;null!==Xs;){var r=Xs,s=r.child;if(0!==(16&Xs.flags)){var l=r.deletions;if(null!==l){for(var c=0;c<l.length;c++){var d=l[c];for(Xs=d;null!==Xs;){var u=Xs;switch(u.tag){case 0:case 11:case 15:nl(8,u,r)}var h=u.child;if(null!==h)h.return=u,Xs=h;else for(;null!==Xs;){var m=(u=Xs).sibling,p=u.return;if(rl(u),u===d){Xs=null;break}if(null!==m){m.return=p,Xs=m;break}Xs=p}}}var f=r.alternate;if(null!==f){var g=f.child;if(null!==g){f.child=null;do{var y=g.sibling;g.sibling=null,g=y}while(null!==g)}}Xs=r}}if(0!==(2064&r.subtreeFlags)&&null!==s)s.return=r,Xs=s;else e:for(;null!==Xs;){if(0!==(2048&(r=Xs).flags))switch(r.tag){case 0:case 11:case 15:nl(9,r,r.return)}var _=r.sibling;if(null!==_){_.return=r.return,Xs=_;break e}Xs=r.return}}var b=e.current;for(Xs=b;null!==Xs;){var v=(s=Xs).child;if(0!==(2064&s.subtreeFlags)&&null!==v)v.return=s,Xs=v;else e:for(s=b;null!==Xs;){if(0!==(2048&(l=Xs).flags))try{switch(l.tag){case 0:case 11:case 15:ol(9,l)}}catch(x){jc(l,l.return,x)}if(l===s){Xs=null;break e}var w=l.sibling;if(null!==w){w.return=l.return,Xs=w;break e}Xs=l.return}}if(Nl=o,Ho(),it&&"function"===typeof it.onPostCommitFiberRoot)try{it.onPostCommitFiberRoot(ot,e)}catch(x){}n=!0}return n}finally{bt=a,Al.transition=t}}return!1}function Cc(e,t,a){e=Oi(e,t=ps(0,t=ds(a,t),1),1),t=tc(),null!==e&&(yt(e,1,t),oc(e,t))}function jc(e,t,a){if(3===e.tag)Cc(e,e,a);else for(;null!==t;){if(3===t.tag){Cc(t,e,a);break}if(1===t.tag){var n=t.stateNode;if("function"===typeof t.type.getDerivedStateFromError||"function"===typeof n.componentDidCatch&&(null===Vl||!Vl.has(n))){t=Oi(t,e=fs(t,e=ds(a,e),1),1),e=tc(),null!==t&&(yt(t,1,e),oc(t,e));break}}t=t.return}}function Sc(e,t,a){var n=e.pingCache;null!==n&&n.delete(t),t=tc(),e.pingedLanes|=e.suspendedLanes&a,El===e&&(Dl&a)===a&&(4===Ol||3===Ol&&(130023424&Dl)===Dl&&500>Ze()-Bl?mc(e,0):Fl|=a),oc(e,t)}function Ic(e,t){0===t&&(0===(1&e.mode)?t=1:(t=dt,0===(130023424&(dt<<=1))&&(dt=4194304)));var a=tc();null!==(e=Ei(e,t))&&(yt(e,t,a),oc(e,a))}function Ac(e){var t=e.memoizedState,a=0;null!==t&&(a=t.retryLane),Ic(e,a)}function Nc(e,t){var a=0;switch(e.tag){case 13:var n=e.stateNode,o=e.memoizedState;null!==o&&(a=o.retryLane);break;case 19:n=e.stateNode;break;default:throw Error(i(314))}null!==n&&n.delete(t),Ic(e,a)}function Ec(e,t){return Ve(e,t)}function Tc(e,t,a,n){this.tag=e,this.key=a,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=n,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Dc(e,t,a,n){return new Tc(e,t,a,n)}function Rc(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Mc(e,t){var a=e.alternate;return null===a?((a=Dc(e.tag,t,e.key,e.mode)).elementType=e.elementType,a.type=e.type,a.stateNode=e.stateNode,a.alternate=e,e.alternate=a):(a.pendingProps=t,a.type=e.type,a.flags=0,a.subtreeFlags=0,a.deletions=null),a.flags=14680064&e.flags,a.childLanes=e.childLanes,a.lanes=e.lanes,a.child=e.child,a.memoizedProps=e.memoizedProps,a.memoizedState=e.memoizedState,a.updateQueue=e.updateQueue,t=e.dependencies,a.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},a.sibling=e.sibling,a.index=e.index,a.ref=e.ref,a}function Oc(e,t,a,n,o,r){var s=2;if(n=e,"function"===typeof e)Rc(e)&&(s=1);else if("string"===typeof e)s=5;else e:switch(e){case k:return qc(a.children,o,r,t);case C:s=8,o|=8;break;case j:return(e=Dc(12,a,t,2|o)).elementType=j,e.lanes=r,e;case N:return(e=Dc(13,a,t,o)).elementType=N,e.lanes=r,e;case E:return(e=Dc(19,a,t,o)).elementType=E,e.lanes=r,e;case R:return Gc(a,o,r,t);default:if("object"===typeof e&&null!==e)switch(e.$$typeof){case S:s=10;break e;case I:s=9;break e;case A:s=11;break e;case T:s=14;break e;case D:s=16,n=null;break e}throw Error(i(130,null==e?e:typeof e,""))}return(t=Dc(s,a,t,o)).elementType=e,t.type=n,t.lanes=r,t}function qc(e,t,a,n){return(e=Dc(7,e,n,t)).lanes=a,e}function Gc(e,t,a,n){return(e=Dc(22,e,n,t)).elementType=R,e.lanes=a,e.stateNode={isHidden:!1},e}function Pc(e,t,a){return(e=Dc(6,e,null,t)).lanes=a,e}function Fc(e,t,a){return(t=Dc(4,null!==e.children?e.children:[],e.key,t)).lanes=a,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Lc(e,t,a,n,o){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=gt(0),this.expirationTimes=gt(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=gt(0),this.identifierPrefix=n,this.onRecoverableError=o,this.mutableSourceEagerHydrationData=null}function Wc(e,t,a,n,o,i,r,s,l){return e=new Lc(e,t,a,s,l),1===t?(t=1,!0===i&&(t|=8)):t=0,i=Dc(3,null,null,t),e.current=i,i.stateNode=e,i.memoizedState={element:n,isDehydrated:a,cache:null,transitions:null,pendingSuspenseBoundaries:null},Di(i),e}function Bc(e){if(!e)return Ao;e:{if(Be(e=e._reactInternals)!==e||1!==e.tag)throw Error(i(170));var t=e;do{switch(t.tag){case 3:t=t.stateNode.context;break e;case 1:if(Ro(t.type)){t=t.stateNode.__reactInternalMemoizedMergedChildContext;break e}}t=t.return}while(null!==t);throw Error(i(171))}if(1===e.tag){var a=e.type;if(Ro(a))return qo(e,a,t)}return t}function Hc(e,t,a,n,o,i,r,s,l){return(e=Wc(a,n,!0,e,0,i,0,s,l)).context=Bc(null),a=e.current,(i=Mi(n=tc(),o=ac(a))).callback=void 0!==t&&null!==t?t:null,Oi(a,i,o),e.current.lanes=o,yt(e,o,n),oc(e,n),e}function Uc(e,t,a,n){var o=t.current,i=tc(),r=ac(o);return a=Bc(a),null===t.context?t.context=a:t.pendingContext=a,(t=Mi(i,r)).payload={element:e},null!==(n=void 0===n?null:n)&&(t.callback=n),null!==(e=Oi(o,t,r))&&(nc(e,o,r,i),qi(e,o,r)),r}function Kc(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function zc(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var a=e.retryLane;e.retryLane=0!==a&&a<t?a:t}}function Vc(e,t){zc(e,t),(e=e.alternate)&&zc(e,t)}Cl=function(e,t,a){if(null!==e)if(e.memoizedProps!==t.pendingProps||Eo.current)vs=!0;else{if(0===(e.lanes&a)&&0===(128&t.flags))return vs=!1,function(e,t,a){switch(t.tag){case 3:Es(t),pi();break;case 5:rr(t);break;case 1:Ro(t.type)&&Go(t);break;case 4:or(t,t.stateNode.containerInfo);break;case 10:var n=t.type._context,o=t.memoizedProps.value;Io(_i,n._currentValue),n._currentValue=o;break;case 13:if(null!==(n=t.memoizedState))return null!==n.dehydrated?(Io(lr,1&lr.current),t.flags|=128,null):0!==(a&t.child.childLanes)?Ps(e,t,a):(Io(lr,1&lr.current),null!==(e=Ks(e,t,a))?e.sibling:null);Io(lr,1&lr.current);break;case 19:if(n=0!==(a&t.childLanes),0!==(128&e.flags)){if(n)return Hs(e,t,a);t.flags|=128}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),Io(lr,lr.current),n)break;return null;case 22:case 23:return t.lanes=0,js(e,t,a)}return Ks(e,t,a)}(e,t,a);vs=0!==(131072&e.flags)}else vs=!1,ii&&0!==(1048576&t.flags)&&ei(t,Vo,t.index);switch(t.lanes=0,t.tag){case 2:var n=t.type;Us(e,t),e=t.pendingProps;var o=Do(t,No.current);ji(t,a),o=Cr(null,t,n,e,o,a);var r=jr();return t.flags|=1,"object"===typeof o&&null!==o&&"function"===typeof o.render&&void 0===o.$$typeof?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Ro(n)?(r=!0,Go(t)):r=!1,t.memoizedState=null!==o.state&&void 0!==o.state?o.state:null,Di(t),o.updater=Bi,t.stateNode=o,o._reactInternals=t,zi(t,n,e,a),t=Ns(null,t,n,!0,r,a)):(t.tag=0,ii&&r&&ti(t),ws(null,t,o,a),t=t.child),t;case 16:n=t.elementType;e:{switch(Us(e,t),e=t.pendingProps,n=(o=n._init)(n._payload),t.type=n,o=t.tag=function(e){if("function"===typeof e)return Rc(e)?1:0;if(void 0!==e&&null!==e){if((e=e.$$typeof)===A)return 11;if(e===T)return 14}return 2}(n),e=yi(n,e),o){case 0:t=Is(null,t,n,e,a);break e;case 1:t=As(null,t,n,e,a);break e;case 11:t=xs(null,t,n,e,a);break e;case 14:t=ks(null,t,n,yi(n.type,e),a);break e}throw Error(i(306,n,""))}return t;case 0:return n=t.type,o=t.pendingProps,Is(e,t,n,o=t.elementType===n?o:yi(n,o),a);case 1:return n=t.type,o=t.pendingProps,As(e,t,n,o=t.elementType===n?o:yi(n,o),a);case 3:e:{if(Es(t),null===e)throw Error(i(387));n=t.pendingProps,o=(r=t.memoizedState).element,Ri(e,t),Pi(t,n,null,a);var s=t.memoizedState;if(n=s.element,r.isDehydrated){if(r={element:n,isDehydrated:!1,cache:s.cache,pendingSuspenseBoundaries:s.pendingSuspenseBoundaries,transitions:s.transitions},t.updateQueue.baseState=r,t.memoizedState=r,256&t.flags){t=Ts(e,t,n,a,o=ds(Error(i(423)),t));break e}if(n!==o){t=Ts(e,t,n,a,o=ds(Error(i(424)),t));break e}for(oi=co(t.stateNode.containerInfo.firstChild),ni=t,ii=!0,ri=null,a=Qi(t,null,n,a),t.child=a;a;)a.flags=-3&a.flags|4096,a=a.sibling}else{if(pi(),n===o){t=Ks(e,t,a);break e}ws(e,t,n,a)}t=t.child}return t;case 5:return rr(t),null===e&&di(t),n=t.type,o=t.pendingProps,r=null!==e?e.memoizedProps:null,s=o.children,ao(n,o)?s=null:null!==r&&ao(n,r)&&(t.flags|=32),Ss(e,t),ws(e,t,s,a),t.child;case 6:return null===e&&di(t),null;case 13:return Ps(e,t,a);case 4:return or(t,t.stateNode.containerInfo),n=t.pendingProps,null===e?t.child=Zi(t,null,n,a):ws(e,t,n,a),t.child;case 11:return n=t.type,o=t.pendingProps,xs(e,t,n,o=t.elementType===n?o:yi(n,o),a);case 7:return ws(e,t,t.pendingProps,a),t.child;case 8:case 12:return ws(e,t,t.pendingProps.children,a),t.child;case 10:e:{if(n=t.type._context,o=t.pendingProps,r=t.memoizedProps,s=o.value,Io(_i,n._currentValue),n._currentValue=s,null!==r)if(sn(r.value,s)){if(r.children===o.children&&!Eo.current){t=Ks(e,t,a);break e}}else for(null!==(r=t.child)&&(r.return=t);null!==r;){var l=r.dependencies;if(null!==l){s=r.child;for(var c=l.firstContext;null!==c;){if(c.context===n){if(1===r.tag){(c=Mi(-1,a&-a)).tag=2;var d=r.updateQueue;if(null!==d){var u=(d=d.shared).pending;null===u?c.next=c:(c.next=u.next,u.next=c),d.pending=c}}r.lanes|=a,null!==(c=r.alternate)&&(c.lanes|=a),Ci(r.return,a,t),l.lanes|=a;break}c=c.next}}else if(10===r.tag)s=r.type===t.type?null:r.child;else if(18===r.tag){if(null===(s=r.return))throw Error(i(341));s.lanes|=a,null!==(l=s.alternate)&&(l.lanes|=a),Ci(s,a,t),s=r.sibling}else s=r.child;if(null!==s)s.return=r;else for(s=r;null!==s;){if(s===t){s=null;break}if(null!==(r=s.sibling)){r.return=s.return,s=r;break}s=s.return}r=s}ws(e,t,o.children,a),t=t.child}return t;case 9:return o=t.type,n=t.pendingProps.children,ji(t,a),n=n(o=Si(o)),t.flags|=1,ws(e,t,n,a),t.child;case 14:return o=yi(n=t.type,t.pendingProps),ks(e,t,n,o=yi(n.type,o),a);case 15:return Cs(e,t,t.type,t.pendingProps,a);case 17:return n=t.type,o=t.pendingProps,o=t.elementType===n?o:yi(n,o),Us(e,t),t.tag=1,Ro(n)?(e=!0,Go(t)):e=!1,ji(t,a),Ui(t,n,o),zi(t,n,o,a),Ns(null,t,n,!0,e,a);case 19:return Hs(e,t,a);case 22:return js(e,t,a)}throw Error(i(156,t.tag))};var Yc="function"===typeof reportError?reportError:function(e){console.error(e)};function Jc(e){this._internalRoot=e}function $c(e){this._internalRoot=e}function Zc(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType)}function Qc(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function Xc(){}function ed(e,t,a,n,o){var i=a._reactRootContainer;if(i){var r=i;if("function"===typeof o){var s=o;o=function(){var e=Kc(r);s.call(e)}}Uc(t,r,e,o)}else r=function(e,t,a,n,o){if(o){if("function"===typeof n){var i=n;n=function(){var e=Kc(r);i.call(e)}}var r=Hc(t,n,e,0,null,!1,0,"",Xc);return e._reactRootContainer=r,e[fo]=r.current,Bn(8===e.nodeType?e.parentNode:e),uc(),r}for(;o=e.lastChild;)e.removeChild(o);if("function"===typeof n){var s=n;n=function(){var e=Kc(l);s.call(e)}}var l=Wc(e,0,!1,null,0,!1,0,"",Xc);return e._reactRootContainer=l,e[fo]=l.current,Bn(8===e.nodeType?e.parentNode:e),uc((function(){Uc(t,l,a,n)})),l}(a,t,e,o,n);return Kc(r)}$c.prototype.render=Jc.prototype.render=function(e){var t=this._internalRoot;if(null===t)throw Error(i(409));Uc(e,t,null,null)},$c.prototype.unmount=Jc.prototype.unmount=function(){var e=this._internalRoot;if(null!==e){this._internalRoot=null;var t=e.containerInfo;uc((function(){Uc(null,e,null,null)})),t[fo]=null}},$c.prototype.unstable_scheduleHydration=function(e){if(e){var t=Ct();e={blockedOn:null,target:e,priority:t};for(var a=0;a<Rt.length&&0!==t&&t<Rt[a].priority;a++);Rt.splice(a,0,e),0===a&&Gt(e)}},wt=function(e){switch(e.tag){case 3:var t=e.stateNode;if(t.current.memoizedState.isDehydrated){var a=ut(t.pendingLanes);0!==a&&(_t(t,1|a),oc(t,Ze()),0===(6&Nl)&&(Hl=Ze()+500,Ho()))}break;case 13:uc((function(){var t=Ei(e,1);if(null!==t){var a=tc();nc(t,e,1,a)}})),Vc(e,1)}},xt=function(e){if(13===e.tag){var t=Ei(e,134217728);if(null!==t)nc(t,e,134217728,tc());Vc(e,134217728)}},kt=function(e){if(13===e.tag){var t=ac(e),a=Ei(e,t);if(null!==a)nc(a,e,t,tc());Vc(e,t)}},Ct=function(){return bt},jt=function(e,t){var a=bt;try{return bt=e,t()}finally{bt=a}},xe=function(e,t,a){switch(t){case"input":if(Q(e,a),t=a.name,"radio"===a.type&&null!=t){for(a=e;a.parentNode;)a=a.parentNode;for(a=a.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<a.length;t++){var n=a[t];if(n!==e&&n.form===e.form){var o=xo(n);if(!o)throw Error(i(90));V(n),Q(n,o)}}}break;case"textarea":ie(e,a);break;case"select":null!=(t=a.value)&&ae(e,!!a.multiple,t,!1)}},Ae=dc,Ne=uc;var td={usingClientEntryPoint:!1,Events:[vo,wo,xo,Se,Ie,dc]},ad={findFiberByHostInstance:bo,bundleType:0,version:"18.2.0",rendererPackageName:"react-dom"},nd={bundleType:ad.bundleType,version:ad.version,rendererPackageName:ad.rendererPackageName,rendererConfig:ad.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:v.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=Ke(e))?null:e.stateNode},findFiberByHostInstance:ad.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.2.0-next-9e3b772b8-20220608"};if("undefined"!==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var od=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!od.isDisabled&&od.supportsFiber)try{ot=od.inject(nd),it=od}catch(de){}}t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=td,t.createPortal=function(e,t){var a=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!Zc(t))throw Error(i(200));return function(e,t,a){var n=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:x,key:null==n?null:""+n,children:e,containerInfo:t,implementation:a}}(e,t,null,a)},t.createRoot=function(e,t){if(!Zc(e))throw Error(i(299));var a=!1,n="",o=Yc;return null!==t&&void 0!==t&&(!0===t.unstable_strictMode&&(a=!0),void 0!==t.identifierPrefix&&(n=t.identifierPrefix),void 0!==t.onRecoverableError&&(o=t.onRecoverableError)),t=Wc(e,1,!1,null,0,a,0,n,o),e[fo]=t.current,Bn(8===e.nodeType?e.parentNode:e),new Jc(t)},t.findDOMNode=function(e){if(null==e)return null;if(1===e.nodeType)return e;var t=e._reactInternals;if(void 0===t){if("function"===typeof e.render)throw Error(i(188));throw e=Object.keys(e).join(","),Error(i(268,e))}return e=null===(e=Ke(t))?null:e.stateNode},t.flushSync=function(e){return uc(e)},t.hydrate=function(e,t,a){if(!Qc(t))throw Error(i(200));return ed(null,e,t,!0,a)},t.hydrateRoot=function(e,t,a){if(!Zc(e))throw Error(i(405));var n=null!=a&&a.hydratedSources||null,o=!1,r="",s=Yc;if(null!==a&&void 0!==a&&(!0===a.unstable_strictMode&&(o=!0),void 0!==a.identifierPrefix&&(r=a.identifierPrefix),void 0!==a.onRecoverableError&&(s=a.onRecoverableError)),t=Hc(t,null,e,1,null!=a?a:null,o,0,r,s),e[fo]=t.current,Bn(e),n)for(e=0;e<n.length;e++)o=(o=(a=n[e])._getVersion)(a._source),null==t.mutableSourceEagerHydrationData?t.mutableSourceEagerHydrationData=[a,o]:t.mutableSourceEagerHydrationData.push(a,o);return new $c(t)},t.render=function(e,t,a){if(!Qc(t))throw Error(i(200));return ed(null,e,t,!1,a)},t.unmountComponentAtNode=function(e){if(!Qc(e))throw Error(i(40));return!!e._reactRootContainer&&(uc((function(){ed(null,null,e,!1,(function(){e._reactRootContainer=null,e[fo]=null}))})),!0)},t.unstable_batchedUpdates=dc,t.unstable_renderSubtreeIntoContainer=function(e,t,a,n){if(!Qc(a))throw Error(i(200));if(null==e||void 0===e._reactInternals)throw Error(i(38));return ed(e,t,a,!1,n)},t.version="18.2.0-next-9e3b772b8-20220608"},4391:function(e,t,a){"use strict";var n=a(7950);t.H=n.createRoot,n.hydrateRoot},7950:function(e,t,a){"use strict";!function e(){if("undefined"!==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=a(2730)},3632:function(e,t,a){"use strict";a.d(t,{tH:function(){return r}});var n=a(5043);const o=(0,n.createContext)(null),i={didCatch:!1,error:null};class r extends n.Component{constructor(e){super(e),this.resetErrorBoundary=this.resetErrorBoundary.bind(this),this.state=i}static getDerivedStateFromError(e){return{didCatch:!0,error:e}}resetErrorBoundary(){const{error:e}=this.state;if(null!==e){for(var t,a,n=arguments.length,o=new Array(n),r=0;r<n;r++)o[r]=arguments[r];null===(t=(a=this.props).onReset)||void 0===t||t.call(a,{args:o,reason:"imperative-api"}),this.setState(i)}}componentDidCatch(e,t){var a,n;null===(a=(n=this.props).onError)||void 0===a||a.call(n,e,t)}componentDidUpdate(e,t){const{didCatch:a}=this.state,{resetKeys:n}=this.props;var o,r;a&&null!==t.error&&function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return e.length!==t.length||e.some(((e,a)=>!Object.is(e,t[a])))}(e.resetKeys,n)&&(null===(o=(r=this.props).onReset)||void 0===o||o.call(r,{next:n,prev:e.resetKeys,reason:"keys"}),this.setState(i))}render(){const{children:e,fallbackRender:t,FallbackComponent:a,fallback:i}=this.props,{didCatch:r,error:s}=this.state;let l=e;if(r){const e={error:s,resetErrorBoundary:this.resetErrorBoundary};if("function"===typeof t)l=t(e);else if(a)l=(0,n.createElement)(a,e);else{if(void 0===i)throw s;l=i}}return(0,n.createElement)(o.Provider,{value:{didCatch:r,error:s,resetErrorBoundary:this.resetErrorBoundary}},l)}}},6366:function(e){var t="undefined"!==typeof Element,a="function"===typeof Map,n="function"===typeof Set,o="function"===typeof ArrayBuffer&&!!ArrayBuffer.isView;function i(e,r){if(e===r)return!0;if(e&&r&&"object"==typeof e&&"object"==typeof r){if(e.constructor!==r.constructor)return!1;var s,l,c,d;if(Array.isArray(e)){if((s=e.length)!=r.length)return!1;for(l=s;0!==l--;)if(!i(e[l],r[l]))return!1;return!0}if(a&&e instanceof Map&&r instanceof Map){if(e.size!==r.size)return!1;for(d=e.entries();!(l=d.next()).done;)if(!r.has(l.value[0]))return!1;for(d=e.entries();!(l=d.next()).done;)if(!i(l.value[1],r.get(l.value[0])))return!1;return!0}if(n&&e instanceof Set&&r instanceof Set){if(e.size!==r.size)return!1;for(d=e.entries();!(l=d.next()).done;)if(!r.has(l.value[0]))return!1;return!0}if(o&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(r)){if((s=e.length)!=r.length)return!1;for(l=s;0!==l--;)if(e[l]!==r[l])return!1;return!0}if(e.constructor===RegExp)return e.source===r.source&&e.flags===r.flags;if(e.valueOf!==Object.prototype.valueOf&&"function"===typeof e.valueOf&&"function"===typeof r.valueOf)return e.valueOf()===r.valueOf();if(e.toString!==Object.prototype.toString&&"function"===typeof e.toString&&"function"===typeof r.toString)return e.toString()===r.toString();if((s=(c=Object.keys(e)).length)!==Object.keys(r).length)return!1;for(l=s;0!==l--;)if(!Object.prototype.hasOwnProperty.call(r,c[l]))return!1;if(t&&e instanceof Element)return!1;for(l=s;0!==l--;)if(("_owner"!==c[l]&&"__v"!==c[l]&&"__o"!==c[l]||!e.$$typeof)&&!i(e[c[l]],r[c[l]]))return!1;return!0}return e!==e&&r!==r}e.exports=function(e,t){try{return i(e,t)}catch(a){if((a.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw a}}},3216:function(e,t,a){"use strict";var n;a.d(t,{$P:function(){return m},BV:function(){return M},Ix:function(){return R},Zp:function(){return y},g:function(){return _},jb:function(){return c},qh:function(){return D},x$:function(){return b},zy:function(){return f}});var o=a(5043),i=a(1387);function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},r.apply(this,arguments)}const s=o.createContext(null);const l=o.createContext(null);const c=o.createContext(null);const d=o.createContext(null);const u=o.createContext({outlet:null,matches:[],isDataRoute:!1});const h=o.createContext(null);function m(e,t){let{relative:a}=void 0===t?{}:t;p()||(0,i.Oi)(!1);let{basename:n,navigator:r}=o.useContext(c),{hash:s,pathname:l,search:d}=b(e,{relative:a}),u=l;return"/"!==n&&(u="/"===l?n:(0,i.HS)([n,l])),r.createHref({pathname:u,search:d,hash:s})}function p(){return null!=o.useContext(d)}function f(){return p()||(0,i.Oi)(!1),o.useContext(d).location}function g(e){o.useContext(c).static||o.useLayoutEffect(e)}function y(){let{isDataRoute:e}=o.useContext(u);return e?function(){let{router:e}=A(S.UseNavigateStable),t=E(I.UseNavigateStable),a=o.useRef(!1);return g((()=>{a.current=!0})),o.useCallback((function(n,o){void 0===o&&(o={}),a.current&&("number"===typeof n?e.navigate(n):e.navigate(n,r({fromRouteId:t},o)))}),[e,t])}():function(){p()||(0,i.Oi)(!1);let e=o.useContext(s),{basename:t,future:a,navigator:n}=o.useContext(c),{matches:r}=o.useContext(u),{pathname:l}=f(),d=JSON.stringify((0,i.yD)(r,a.v7_relativeSplatPath)),h=o.useRef(!1);return g((()=>{h.current=!0})),o.useCallback((function(a,o){if(void 0===o&&(o={}),!h.current)return;if("number"===typeof a)return void n.go(a);let r=(0,i.Gh)(a,JSON.parse(d),l,"path"===o.relative);null==e&&"/"!==t&&(r.pathname="/"===r.pathname?t:(0,i.HS)([t,r.pathname])),(o.replace?n.replace:n.push)(r,o.state,o)}),[t,n,d,l,e])}()}function _(){let{matches:e}=o.useContext(u),t=e[e.length-1];return t?t.params:{}}function b(e,t){let{relative:a}=void 0===t?{}:t,{future:n}=o.useContext(c),{matches:r}=o.useContext(u),{pathname:s}=f(),l=JSON.stringify((0,i.yD)(r,n.v7_relativeSplatPath));return o.useMemo((()=>(0,i.Gh)(e,JSON.parse(l),s,"path"===a)),[e,l,s,a])}function v(e,t,a,n){p()||(0,i.Oi)(!1);let{navigator:s}=o.useContext(c),{matches:l}=o.useContext(u),h=l[l.length-1],m=h?h.params:{},g=(h&&h.pathname,h?h.pathnameBase:"/");h&&h.route;let y,_=f();if(t){var b;let e="string"===typeof t?(0,i.Rr)(t):t;"/"===g||(null==(b=e.pathname)?void 0:b.startsWith(g))||(0,i.Oi)(!1),y=e}else y=_;let v=y.pathname||"/",w=v;if("/"!==g){let e=g.replace(/^\//,"").split("/");w="/"+v.replace(/^\//,"").split("/").slice(e.length).join("/")}let x=(0,i.ue)(e,{pathname:w});let k=j(x&&x.map((e=>Object.assign({},e,{params:Object.assign({},m,e.params),pathname:(0,i.HS)([g,s.encodeLocation?s.encodeLocation(e.pathname).pathname:e.pathname]),pathnameBase:"/"===e.pathnameBase?g:(0,i.HS)([g,s.encodeLocation?s.encodeLocation(e.pathnameBase).pathname:e.pathnameBase])}))),l,a,n);return t&&k?o.createElement(d.Provider,{value:{location:r({pathname:"/",search:"",hash:"",state:null,key:"default"},y),navigationType:i.rc.Pop}},k):k}function w(){let e=function(){var e;let t=o.useContext(h),a=N(I.UseRouteError),n=E(I.UseRouteError);if(void 0!==t)return t;return null==(e=a.errors)?void 0:e[n]}(),t=(0,i.pX)(e)?e.status+" "+e.statusText:e instanceof Error?e.message:JSON.stringify(e),a=e instanceof Error?e.stack:null,n="rgba(200,200,200, 0.5)",r={padding:"0.5rem",backgroundColor:n};return o.createElement(o.Fragment,null,o.createElement("h2",null,"Unexpected Application Error!"),o.createElement("h3",{style:{fontStyle:"italic"}},t),a?o.createElement("pre",{style:r},a):null,null)}const x=o.createElement(w,null);class k extends o.Component{constructor(e){super(e),this.state={location:e.location,revalidation:e.revalidation,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,t){return t.location!==e.location||"idle"!==t.revalidation&&"idle"===e.revalidation?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:void 0!==e.error?e.error:t.error,location:t.location,revalidation:e.revalidation||t.revalidation}}componentDidCatch(e,t){console.error("React Router caught the following error during render",e,t)}render(){return void 0!==this.state.error?o.createElement(u.Provider,{value:this.props.routeContext},o.createElement(h.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function C(e){let{routeContext:t,match:a,children:n}=e,i=o.useContext(s);return i&&i.static&&i.staticContext&&(a.route.errorElement||a.route.ErrorBoundary)&&(i.staticContext._deepestRenderedBoundaryId=a.route.id),o.createElement(u.Provider,{value:t},n)}function j(e,t,a,n){var r;if(void 0===t&&(t=[]),void 0===a&&(a=null),void 0===n&&(n=null),null==e){var s;if(null==(s=a)||!s.errors)return null;e=a.matches}let l=e,c=null==(r=a)?void 0:r.errors;if(null!=c){let e=l.findIndex((e=>e.route.id&&(null==c?void 0:c[e.route.id])));e>=0||(0,i.Oi)(!1),l=l.slice(0,Math.min(l.length,e+1))}let d=!1,u=-1;if(a&&n&&n.v7_partialHydration)for(let o=0;o<l.length;o++){let e=l[o];if((e.route.HydrateFallback||e.route.hydrateFallbackElement)&&(u=o),e.route.id){let{loaderData:t,errors:n}=a,o=e.route.loader&&void 0===t[e.route.id]&&(!n||void 0===n[e.route.id]);if(e.route.lazy||o){d=!0,l=u>=0?l.slice(0,u+1):[l[0]];break}}}return l.reduceRight(((e,n,i)=>{let r,s=!1,h=null,m=null;var p;a&&(r=c&&n.route.id?c[n.route.id]:void 0,h=n.route.errorElement||x,d&&(u<0&&0===i?(p="route-fallback",!1||T[p]||(T[p]=!0),s=!0,m=null):u===i&&(s=!0,m=n.route.hydrateFallbackElement||null)));let f=t.concat(l.slice(0,i+1)),g=()=>{let t;return t=r?h:s?m:n.route.Component?o.createElement(n.route.Component,null):n.route.element?n.route.element:e,o.createElement(C,{match:n,routeContext:{outlet:e,matches:f,isDataRoute:null!=a},children:t})};return a&&(n.route.ErrorBoundary||n.route.errorElement||0===i)?o.createElement(k,{location:a.location,revalidation:a.revalidation,component:h,error:r,children:g(),routeContext:{outlet:null,matches:f,isDataRoute:!0}}):g()}),null)}var S=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}(S||{}),I=function(e){return e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId",e}(I||{});function A(e){let t=o.useContext(s);return t||(0,i.Oi)(!1),t}function N(e){let t=o.useContext(l);return t||(0,i.Oi)(!1),t}function E(e){let t=function(e){let t=o.useContext(u);return t||(0,i.Oi)(!1),t}(),a=t.matches[t.matches.length-1];return a.route.id||(0,i.Oi)(!1),a.route.id}const T={};(n||(n=a.t(o,2))).startTransition;function D(e){(0,i.Oi)(!1)}function R(e){let{basename:t="/",children:a=null,location:n,navigationType:s=i.rc.Pop,navigator:l,static:u=!1,future:h}=e;p()&&(0,i.Oi)(!1);let m=t.replace(/^\/*/,"/"),f=o.useMemo((()=>({basename:m,navigator:l,static:u,future:r({v7_relativeSplatPath:!1},h)})),[m,h,l,u]);"string"===typeof n&&(n=(0,i.Rr)(n));let{pathname:g="/",search:y="",hash:_="",state:b=null,key:v="default"}=n,w=o.useMemo((()=>{let e=(0,i.pb)(g,m);return null==e?null:{location:{pathname:e,search:y,hash:_,state:b,key:v},navigationType:s}}),[m,g,y,_,b,v,s]);return null==w?null:o.createElement(c.Provider,{value:f},o.createElement(d.Provider,{children:a,value:w}))}function M(e){let{children:t,location:a}=e;return v(O(t),a)}new Promise((()=>{}));o.Component;function O(e,t){void 0===t&&(t=[]);let a=[];return o.Children.forEach(e,((e,n)=>{if(!o.isValidElement(e))return;let r=[...t,n];if(e.type===o.Fragment)return void a.push.apply(a,O(e.props.children,r));e.type!==D&&(0,i.Oi)(!1),e.props.index&&e.props.children&&(0,i.Oi)(!1);let s={id:e.props.id||r.join("-"),caseSensitive:e.props.caseSensitive,element:e.props.element,Component:e.props.Component,index:e.props.index,path:e.props.path,loader:e.props.loader,action:e.props.action,errorElement:e.props.errorElement,ErrorBoundary:e.props.ErrorBoundary,hasErrorBoundary:null!=e.props.ErrorBoundary||null!=e.props.errorElement,shouldRevalidate:e.props.shouldRevalidate,handle:e.props.handle,lazy:e.props.lazy};e.props.children&&(s.children=O(e.props.children,r)),a.push(s)})),a}},8161:function(e,t,a){"use strict";var n,o=a(5043),i=(n=o)&&"object"===typeof n&&"default"in n?n.default:n;function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}var s=!("undefined"===typeof window||!window.document||!window.document.createElement);e.exports=function(e,t,a){if("function"!==typeof e)throw new Error("Expected reducePropsToState to be a function.");if("function"!==typeof t)throw new Error("Expected handleStateChangeOnClient to be a function.");if("undefined"!==typeof a&&"function"!==typeof a)throw new Error("Expected mapStateOnServer to either be undefined or a function.");return function(n){if("function"!==typeof n)throw new Error("Expected WrappedComponent to be a React component.");var l,c=[];function d(){l=e(c.map((function(e){return e.props}))),u.canUseDOM?t(l):a&&(l=a(l))}var u=function(e){var t,a;function o(){return e.apply(this,arguments)||this}a=e,(t=o).prototype=Object.create(a.prototype),t.prototype.constructor=t,t.__proto__=a,o.peek=function(){return l},o.rewind=function(){if(o.canUseDOM)throw new Error("You may only call rewind() on the server. Call peek() to read the current state.");var e=l;return l=void 0,c=[],e};var r=o.prototype;return r.UNSAFE_componentWillMount=function(){c.push(this),d()},r.componentDidUpdate=function(){d()},r.componentWillUnmount=function(){var e=c.indexOf(this);c.splice(e,1),d()},r.render=function(){return i.createElement(n,this.props)},o}(o.PureComponent);return r(u,"displayName","SideEffect("+function(e){return e.displayName||e.name||"Component"}(n)+")"),r(u,"canUseDOM",s),u}}},6555:function(e,t,a){"use strict";a.d(t,{_K:function(){return h},ns:function(){return u},kp:function(){return d},ze:function(){return m},Ay:function(){return g}});var n=a(8587),o=a(3662);var i=a(5043),r=a(7950),s=!1,l=i.createContext(null),c="unmounted",d="exited",u="entering",h="entered",m="exiting",p=function(e){function t(t,a){var n;n=e.call(this,t,a)||this;var o,i=a&&!a.isMounting?t.enter:t.appear;return n.appearStatus=null,t.in?i?(o=d,n.appearStatus=u):o=h:o=t.unmountOnExit||t.mountOnEnter?c:d,n.state={status:o},n.nextCallback=null,n}!function(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,(0,o.A)(e,t)}(t,e),t.getDerivedStateFromProps=function(e,t){return e.in&&t.status===c?{status:d}:null};var a=t.prototype;return a.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},a.componentDidUpdate=function(e){var t=null;if(e!==this.props){var a=this.state.status;this.props.in?a!==u&&a!==h&&(t=u):a!==u&&a!==h||(t=m)}this.updateStatus(!1,t)},a.componentWillUnmount=function(){this.cancelNextCallback()},a.getTimeouts=function(){var e,t,a,n=this.props.timeout;return e=t=a=n,null!=n&&"number"!==typeof n&&(e=n.exit,t=n.enter,a=void 0!==n.appear?n.appear:t),{exit:e,enter:t,appear:a}},a.updateStatus=function(e,t){if(void 0===e&&(e=!1),null!==t)if(this.cancelNextCallback(),t===u){if(this.props.unmountOnExit||this.props.mountOnEnter){var a=this.props.nodeRef?this.props.nodeRef.current:r.findDOMNode(this);a&&function(e){e.scrollTop}(a)}this.performEnter(e)}else this.performExit();else this.props.unmountOnExit&&this.state.status===d&&this.setState({status:c})},a.performEnter=function(e){var t=this,a=this.props.enter,n=this.context?this.context.isMounting:e,o=this.props.nodeRef?[n]:[r.findDOMNode(this),n],i=o[0],l=o[1],c=this.getTimeouts(),d=n?c.appear:c.enter;!e&&!a||s?this.safeSetState({status:h},(function(){t.props.onEntered(i)})):(this.props.onEnter(i,l),this.safeSetState({status:u},(function(){t.props.onEntering(i,l),t.onTransitionEnd(d,(function(){t.safeSetState({status:h},(function(){t.props.onEntered(i,l)}))}))})))},a.performExit=function(){var e=this,t=this.props.exit,a=this.getTimeouts(),n=this.props.nodeRef?void 0:r.findDOMNode(this);t&&!s?(this.props.onExit(n),this.safeSetState({status:m},(function(){e.props.onExiting(n),e.onTransitionEnd(a.exit,(function(){e.safeSetState({status:d},(function(){e.props.onExited(n)}))}))}))):this.safeSetState({status:d},(function(){e.props.onExited(n)}))},a.cancelNextCallback=function(){null!==this.nextCallback&&(this.nextCallback.cancel(),this.nextCallback=null)},a.safeSetState=function(e,t){t=this.setNextCallback(t),this.setState(e,t)},a.setNextCallback=function(e){var t=this,a=!0;return this.nextCallback=function(n){a&&(a=!1,t.nextCallback=null,e(n))},this.nextCallback.cancel=function(){a=!1},this.nextCallback},a.onTransitionEnd=function(e,t){this.setNextCallback(t);var a=this.props.nodeRef?this.props.nodeRef.current:r.findDOMNode(this),n=null==e&&!this.props.addEndListener;if(a&&!n){if(this.props.addEndListener){var o=this.props.nodeRef?[this.nextCallback]:[a,this.nextCallback],i=o[0],s=o[1];this.props.addEndListener(i,s)}null!=e&&setTimeout(this.nextCallback,e)}else setTimeout(this.nextCallback,0)},a.render=function(){var e=this.state.status;if(e===c)return null;var t=this.props,a=t.children,o=(t.in,t.mountOnEnter,t.unmountOnExit,t.appear,t.enter,t.exit,t.timeout,t.addEndListener,t.onEnter,t.onEntering,t.onEntered,t.onExit,t.onExiting,t.onExited,t.nodeRef,(0,n.A)(t,["children","in","mountOnEnter","unmountOnExit","appear","enter","exit","timeout","addEndListener","onEnter","onEntering","onEntered","onExit","onExiting","onExited","nodeRef"]));return i.createElement(l.Provider,{value:null},"function"===typeof a?a(e,o):i.cloneElement(i.Children.only(a),o))},t}(i.Component);function f(){}p.contextType=l,p.propTypes={},p.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:f,onEntering:f,onEntered:f,onExit:f,onExiting:f,onExited:f},p.UNMOUNTED=c,p.EXITED=d,p.ENTERING=u,p.ENTERED=h,p.EXITING=m;var g=p},1153:function(e,t,a){"use strict";var n=a(5043),o=Symbol.for("react.element"),i=Symbol.for("react.fragment"),r=Object.prototype.hasOwnProperty,s=n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,l={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,a){var n,i={},c=null,d=null;for(n in void 0!==a&&(c=""+a),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(d=t.ref),t)r.call(t,n)&&!l.hasOwnProperty(n)&&(i[n]=t[n]);if(e&&e.defaultProps)for(n in t=e.defaultProps)void 0===i[n]&&(i[n]=t[n]);return{$$typeof:o,type:e,key:c,ref:d,props:i,_owner:s.current}}t.Fragment=i,t.jsx=c,t.jsxs=c},4202:function(e,t){"use strict";var a=Symbol.for("react.element"),n=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),i=Symbol.for("react.strict_mode"),r=Symbol.for("react.profiler"),s=Symbol.for("react.provider"),l=Symbol.for("react.context"),c=Symbol.for("react.forward_ref"),d=Symbol.for("react.suspense"),u=Symbol.for("react.memo"),h=Symbol.for("react.lazy"),m=Symbol.iterator;var p={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},f=Object.assign,g={};function y(e,t,a){this.props=e,this.context=t,this.refs=g,this.updater=a||p}function _(){}function b(e,t,a){this.props=e,this.context=t,this.refs=g,this.updater=a||p}y.prototype.isReactComponent={},y.prototype.setState=function(e,t){if("object"!==typeof e&&"function"!==typeof e&&null!=e)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},y.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},_.prototype=y.prototype;var v=b.prototype=new _;v.constructor=b,f(v,y.prototype),v.isPureReactComponent=!0;var w=Array.isArray,x=Object.prototype.hasOwnProperty,k={current:null},C={key:!0,ref:!0,__self:!0,__source:!0};function j(e,t,n){var o,i={},r=null,s=null;if(null!=t)for(o in void 0!==t.ref&&(s=t.ref),void 0!==t.key&&(r=""+t.key),t)x.call(t,o)&&!C.hasOwnProperty(o)&&(i[o]=t[o]);var l=arguments.length-2;if(1===l)i.children=n;else if(1<l){for(var c=Array(l),d=0;d<l;d++)c[d]=arguments[d+2];i.children=c}if(e&&e.defaultProps)for(o in l=e.defaultProps)void 0===i[o]&&(i[o]=l[o]);return{$$typeof:a,type:e,key:r,ref:s,props:i,_owner:k.current}}function S(e){return"object"===typeof e&&null!==e&&e.$$typeof===a}var I=/\/+/g;function A(e,t){return"object"===typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function N(e,t,o,i,r){var s=typeof e;"undefined"!==s&&"boolean"!==s||(e=null);var l=!1;if(null===e)l=!0;else switch(s){case"string":case"number":l=!0;break;case"object":switch(e.$$typeof){case a:case n:l=!0}}if(l)return r=r(l=e),e=""===i?"."+A(l,0):i,w(r)?(o="",null!=e&&(o=e.replace(I,"$&/")+"/"),N(r,t,o,"",(function(e){return e}))):null!=r&&(S(r)&&(r=function(e,t){return{$$typeof:a,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(r,o+(!r.key||l&&l.key===r.key?"":(""+r.key).replace(I,"$&/")+"/")+e)),t.push(r)),1;if(l=0,i=""===i?".":i+":",w(e))for(var c=0;c<e.length;c++){var d=i+A(s=e[c],c);l+=N(s,t,o,d,r)}else if(d=function(e){return null===e||"object"!==typeof e?null:"function"===typeof(e=m&&e[m]||e["@@iterator"])?e:null}(e),"function"===typeof d)for(e=d.call(e),c=0;!(s=e.next()).done;)l+=N(s=s.value,t,o,d=i+A(s,c++),r);else if("object"===s)throw t=String(e),Error("Objects are not valid as a React child (found: "+("[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return l}function E(e,t,a){if(null==e)return e;var n=[],o=0;return N(e,n,"","",(function(e){return t.call(a,e,o++)})),n}function T(e){if(-1===e._status){var t=e._result;(t=t()).then((function(t){0!==e._status&&-1!==e._status||(e._status=1,e._result=t)}),(function(t){0!==e._status&&-1!==e._status||(e._status=2,e._result=t)})),-1===e._status&&(e._status=0,e._result=t)}if(1===e._status)return e._result.default;throw e._result}var D={current:null},R={transition:null},M={ReactCurrentDispatcher:D,ReactCurrentBatchConfig:R,ReactCurrentOwner:k};t.Children={map:E,forEach:function(e,t,a){E(e,(function(){t.apply(this,arguments)}),a)},count:function(e){var t=0;return E(e,(function(){t++})),t},toArray:function(e){return E(e,(function(e){return e}))||[]},only:function(e){if(!S(e))throw Error("React.Children.only expected to receive a single React element child.");return e}},t.Component=y,t.Fragment=o,t.Profiler=r,t.PureComponent=b,t.StrictMode=i,t.Suspense=d,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=M,t.cloneElement=function(e,t,n){if(null===e||void 0===e)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var o=f({},e.props),i=e.key,r=e.ref,s=e._owner;if(null!=t){if(void 0!==t.ref&&(r=t.ref,s=k.current),void 0!==t.key&&(i=""+t.key),e.type&&e.type.defaultProps)var l=e.type.defaultProps;for(c in t)x.call(t,c)&&!C.hasOwnProperty(c)&&(o[c]=void 0===t[c]&&void 0!==l?l[c]:t[c])}var c=arguments.length-2;if(1===c)o.children=n;else if(1<c){l=Array(c);for(var d=0;d<c;d++)l[d]=arguments[d+2];o.children=l}return{$$typeof:a,type:e.type,key:i,ref:r,props:o,_owner:s}},t.createContext=function(e){return(e={$$typeof:l,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null}).Provider={$$typeof:s,_context:e},e.Consumer=e},t.createElement=j,t.createFactory=function(e){var t=j.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:c,render:e}},t.isValidElement=S,t.lazy=function(e){return{$$typeof:h,_payload:{_status:-1,_result:e},_init:T}},t.memo=function(e,t){return{$$typeof:u,type:e,compare:void 0===t?null:t}},t.startTransition=function(e){var t=R.transition;R.transition={};try{e()}finally{R.transition=t}},t.unstable_act=function(){throw Error("act(...) is not supported in production builds of React.")},t.useCallback=function(e,t){return D.current.useCallback(e,t)},t.useContext=function(e){return D.current.useContext(e)},t.useDebugValue=function(){},t.useDeferredValue=function(e){return D.current.useDeferredValue(e)},t.useEffect=function(e,t){return D.current.useEffect(e,t)},t.useId=function(){return D.current.useId()},t.useImperativeHandle=function(e,t,a){return D.current.useImperativeHandle(e,t,a)},t.useInsertionEffect=function(e,t){return D.current.useInsertionEffect(e,t)},t.useLayoutEffect=function(e,t){return D.current.useLayoutEffect(e,t)},t.useMemo=function(e,t){return D.current.useMemo(e,t)},t.useReducer=function(e,t,a){return D.current.useReducer(e,t,a)},t.useRef=function(e){return D.current.useRef(e)},t.useState=function(e){return D.current.useState(e)},t.useSyncExternalStore=function(e,t,a){return D.current.useSyncExternalStore(e,t,a)},t.useTransition=function(){return D.current.useTransition()},t.version="18.2.0"},5043:function(e,t,a){"use strict";e.exports=a(4202)},579:function(e,t,a){"use strict";e.exports=a(1153)},6766:function(e,t,a){"use strict";t.__esModule=!0,t.default=function(e){var t=(0,o.default)(e);return{getItem:function(e){return new Promise((function(a,n){a(t.getItem(e))}))},setItem:function(e,a){return new Promise((function(n,o){n(t.setItem(e,a))}))},removeItem:function(e){return new Promise((function(a,n){a(t.removeItem(e))}))}}};var n,o=(n=a(4004))&&n.__esModule?n:{default:n}},4004:function(e,t){"use strict";function a(e){return a="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function n(){}t.__esModule=!0,t.default=function(e){var t="".concat(e,"Storage");return function(e){if("object"!==("undefined"===typeof self?"undefined":a(self))||!(e in self))return!1;try{var t=self[e],n="redux-persist ".concat(e," test");t.setItem(n,"test"),t.getItem(n),t.removeItem(n)}catch(o){return!1}return!0}(t)?self[t]:o};var o={getItem:n,setItem:n,removeItem:n}},8901:function(e,t,a){"use strict";var n;t.A=void 0;var o=(0,((n=a(6766))&&n.__esModule?n:{default:n}).default)("local");t.A=o},7234:function(e,t){"use strict";function a(e,t){var a=e.length;e.push(t);e:for(;0<a;){var n=a-1>>>1,o=e[n];if(!(0<i(o,t)))break e;e[n]=t,e[a]=o,a=n}}function n(e){return 0===e.length?null:e[0]}function o(e){if(0===e.length)return null;var t=e[0],a=e.pop();if(a!==t){e[0]=a;e:for(var n=0,o=e.length,r=o>>>1;n<r;){var s=2*(n+1)-1,l=e[s],c=s+1,d=e[c];if(0>i(l,a))c<o&&0>i(d,l)?(e[n]=d,e[c]=a,n=c):(e[n]=l,e[s]=a,n=s);else{if(!(c<o&&0>i(d,a)))break e;e[n]=d,e[c]=a,n=c}}}return t}function i(e,t){var a=e.sortIndex-t.sortIndex;return 0!==a?a:e.id-t.id}if("object"===typeof performance&&"function"===typeof performance.now){var r=performance;t.unstable_now=function(){return r.now()}}else{var s=Date,l=s.now();t.unstable_now=function(){return s.now()-l}}var c=[],d=[],u=1,h=null,m=3,p=!1,f=!1,g=!1,y="function"===typeof setTimeout?setTimeout:null,_="function"===typeof clearTimeout?clearTimeout:null,b="undefined"!==typeof setImmediate?setImmediate:null;function v(e){for(var t=n(d);null!==t;){if(null===t.callback)o(d);else{if(!(t.startTime<=e))break;o(d),t.sortIndex=t.expirationTime,a(c,t)}t=n(d)}}function w(e){if(g=!1,v(e),!f)if(null!==n(c))f=!0,R(x);else{var t=n(d);null!==t&&M(w,t.startTime-e)}}function x(e,a){f=!1,g&&(g=!1,_(S),S=-1),p=!0;var i=m;try{for(v(a),h=n(c);null!==h&&(!(h.expirationTime>a)||e&&!N());){var r=h.callback;if("function"===typeof r){h.callback=null,m=h.priorityLevel;var s=r(h.expirationTime<=a);a=t.unstable_now(),"function"===typeof s?h.callback=s:h===n(c)&&o(c),v(a)}else o(c);h=n(c)}if(null!==h)var l=!0;else{var u=n(d);null!==u&&M(w,u.startTime-a),l=!1}return l}finally{h=null,m=i,p=!1}}"undefined"!==typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);var k,C=!1,j=null,S=-1,I=5,A=-1;function N(){return!(t.unstable_now()-A<I)}function E(){if(null!==j){var e=t.unstable_now();A=e;var a=!0;try{a=j(!0,e)}finally{a?k():(C=!1,j=null)}}else C=!1}if("function"===typeof b)k=function(){b(E)};else if("undefined"!==typeof MessageChannel){var T=new MessageChannel,D=T.port2;T.port1.onmessage=E,k=function(){D.postMessage(null)}}else k=function(){y(E,0)};function R(e){j=e,C||(C=!0,k())}function M(e,a){S=y((function(){e(t.unstable_now())}),a)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){f||p||(f=!0,R(x))},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):I=0<e?Math.floor(1e3/e):5},t.unstable_getCurrentPriorityLevel=function(){return m},t.unstable_getFirstCallbackNode=function(){return n(c)},t.unstable_next=function(e){switch(m){case 1:case 2:case 3:var t=3;break;default:t=m}var a=m;m=t;try{return e()}finally{m=a}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=function(){},t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var a=m;m=e;try{return t()}finally{m=a}},t.unstable_scheduleCallback=function(e,o,i){var r=t.unstable_now();switch("object"===typeof i&&null!==i?i="number"===typeof(i=i.delay)&&0<i?r+i:r:i=r,e){case 1:var s=-1;break;case 2:s=250;break;case 5:s=1073741823;break;case 4:s=1e4;break;default:s=5e3}return e={id:u++,callback:o,priorityLevel:e,startTime:i,expirationTime:s=i+s,sortIndex:-1},i>r?(e.sortIndex=i,a(d,e),null===n(c)&&e===n(d)&&(g?(_(S),S=-1):g=!0,M(w,i-r))):(e.sortIndex=s,a(c,e),f||p||(f=!0,R(x))),e},t.unstable_shouldYield=N,t.unstable_wrapCallback=function(e){var t=m;return function(){var a=m;m=t;try{return e.apply(this,arguments)}finally{m=a}}}},8853:function(e,t,a){"use strict";e.exports=a(7234)},7121:function(e,t,a){"use strict";a.d(t,{Zw:function(){return c},iC:function(){return l}});var n=a(8168),o=a(8587),i=a(5043);a(2740);function r(e){return"default"+e.charAt(0).toUpperCase()+e.substr(1)}function s(e){var t=function(e,t){if("object"!==typeof e||null===e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var n=a.call(e,t||"default");if("object"!==typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===typeof t?t:String(t)}function l(e,t,a){var n=(0,i.useRef)(void 0!==e),o=(0,i.useState)(t),r=o[0],s=o[1],l=void 0!==e,c=n.current;return n.current=l,!l&&c&&r!==t&&s(t),[l?e:r,(0,i.useCallback)((function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o<t;o++)n[o-1]=arguments[o];a&&a.apply(void 0,[e].concat(n)),s(e)}),[a])]}function c(e,t){return Object.keys(t).reduce((function(a,i){var c,d=a,u=d[r(i)],h=d[i],m=(0,o.A)(d,[r(i),i].map(s)),p=t[i],f=l(h,u,e[p]),g=f[0],y=f[1];return(0,n.A)({},m,((c={})[i]=g,c[p]=y,c))}),e)}function d(){var e=this.constructor.getDerivedStateFromProps(this.props,this.state);null!==e&&void 0!==e&&this.setState(e)}function u(e){this.setState(function(t){var a=this.constructor.getDerivedStateFromProps(e,t);return null!==a&&void 0!==a?a:null}.bind(this))}function h(e,t){try{var a=this.props,n=this.state;this.props=e,this.state=t,this.__reactInternalSnapshotFlag=!0,this.__reactInternalSnapshot=this.getSnapshotBeforeUpdate(a,n)}finally{this.props=a,this.state=n}}d.__suppressDeprecationWarning=!0,u.__suppressDeprecationWarning=!0,h.__suppressDeprecationWarning=!0},5956:function(e,t,a){"use strict";var n=a(5043);var o="function"===typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e===1/t)||e!==e&&t!==t},i=n.useState,r=n.useEffect,s=n.useLayoutEffect,l=n.useDebugValue;function c(e){var t=e.getSnapshot;e=e.value;try{var a=t();return!o(e,a)}catch(n){return!0}}var d="undefined"===typeof window||"undefined"===typeof window.document||"undefined"===typeof window.document.createElement?function(e,t){return t()}:function(e,t){var a=t(),n=i({inst:{value:a,getSnapshot:t}}),o=n[0].inst,d=n[1];return s((function(){o.value=a,o.getSnapshot=t,c(o)&&d({inst:o})}),[e,a,t]),r((function(){return c(o)&&d({inst:o}),e((function(){c(o)&&d({inst:o})}))}),[e]),l(a),a};t.useSyncExternalStore=void 0!==n.useSyncExternalStore?n.useSyncExternalStore:d},5039:function(e,t,a){"use strict";var n=a(5043),o=a(9461);var i="function"===typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e===1/t)||e!==e&&t!==t},r=o.useSyncExternalStore,s=n.useRef,l=n.useEffect,c=n.useMemo,d=n.useDebugValue;t.useSyncExternalStoreWithSelector=function(e,t,a,n,o){var u=s(null);if(null===u.current){var h={hasValue:!1,value:null};u.current=h}else h=u.current;u=c((function(){function e(e){if(!l){if(l=!0,r=e,e=n(e),void 0!==o&&h.hasValue){var t=h.value;if(o(t,e))return s=t}return s=e}if(t=s,i(r,e))return t;var a=n(e);return void 0!==o&&o(t,a)?t:(r=e,s=a)}var r,s,l=!1,c=void 0===a?null:a;return[function(){return e(t())},null===c?void 0:function(){return e(c())}]}),[t,a,n,o]);var m=r(e,u[0],u[1]);return l((function(){h.hasValue=!0,h.value=m}),[m]),d(m),m}},3895:function(e,t,a){"use strict";var n=a(5043);var o="function"===typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e===1/t)||e!==e&&t!==t},i=n.useSyncExternalStore,r=n.useRef,s=n.useEffect,l=n.useMemo,c=n.useDebugValue;t.useSyncExternalStoreWithSelector=function(e,t,a,n,d){var u=r(null);if(null===u.current){var h={hasValue:!1,value:null};u.current=h}else h=u.current;u=l((function(){function e(e){if(!s){if(s=!0,i=e,e=n(e),void 0!==d&&h.hasValue){var t=h.value;if(d(t,e))return r=t}return r=e}if(t=r,o(i,e))return t;var a=n(e);return void 0!==d&&d(t,a)?t:(i=e,r=a)}var i,r,s=!1,l=void 0===a?null:a;return[function(){return e(t())},null===l?void 0:function(){return e(l())}]}),[t,a,n,d]);var m=i(e,u[0],u[1]);return s((function(){h.hasValue=!0,h.value=m}),[m]),c(m),m}},9461:function(e,t,a){"use strict";e.exports=a(5956)},8443:function(e,t,a){"use strict";e.exports=a(5039)},7237:function(e,t,a){"use strict";e.exports=a(3895)},6440:function(e){"use strict";var t=function(){};e.exports=t},2565:function(){},8139:function(e,t){var a;!function(){"use strict";var n={}.hasOwnProperty;function o(){for(var e="",t=0;t<arguments.length;t++){var a=arguments[t];a&&(e=r(e,i(a)))}return e}function i(e){if("string"===typeof e||"number"===typeof e)return e;if("object"!==typeof e)return"";if(Array.isArray(e))return o.apply(null,e);if(e.toString!==Object.prototype.toString&&!e.toString.toString().includes("[native code]"))return e.toString();var t="";for(var a in e)n.call(e,a)&&e[a]&&(t=r(t,a));return t}function r(e,t){return t?e?e+" "+t:e+t:e}e.exports?(o.default=o,e.exports=o):void 0===(a=function(){return o}.apply(t,[]))||(e.exports=a)}()},8168:function(e,t,a){"use strict";function n(){return n=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)({}).hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},n.apply(null,arguments)}a.d(t,{A:function(){return n}})},8587:function(e,t,a){"use strict";function n(e,t){if(null==e)return{};var a={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;a[n]=e[n]}return a}a.d(t,{A:function(){return n}})},3662:function(e,t,a){"use strict";function n(e,t){return n=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},n(e,t)}a.d(t,{A:function(){return n}})},7929:function(e,t,a){"use strict";a.d(t,{$3Z:function(){return E},$UM:function(){return re},B0L:function(){return ae},BH7:function(){return J},C97:function(){return C},CQO:function(){return ie},CeG:function(){return B},DDU:function(){return A},DW4:function(){return h},EZy:function(){return Y},EvL:function(){return M},GRI:function(){return me},INu:function(){return le},JAe:function(){return ke},JV0:function(){return oe},JmV:function(){return ne},Jt$:function(){return se},JxU:function(){return Ae},Jyw:function(){return ue},KKb:function(){return x},KtJ:function(){return Z},LBj:function(){return be},MT7:function(){return p},OM7:function(){return D},Q9Y:function(){return l},QLR:function(){return de},QRE:function(){return S},SGM:function(){return I},TuH:function(){return g},V2x:function(){return _e},V3T:function(){return V},Vdo:function(){return j},Vpu:function(){return T},WVH:function(){return H},Wzs:function(){return pe},X46:function(){return _},XWH:function(){return xe},XkK:function(){return fe},YEm:function(){return i},ZW_:function(){return G},b6I:function(){return O},cbP:function(){return ee},ckx:function(){return c},dB:function(){return $},dmS:function(){return q},dxS:function(){return o},e68:function(){return we},ekB:function(){return f},hpd:function(){return P},iHh:function(){return ge},iyL:function(){return N},jPR:function(){return ce},jkA:function(){return F},lEd:function(){return d},lLb:function(){return te},mEO:function(){return U},mRM:function(){return R},nWR:function(){return ve},nx5:function(){return X},o1d:function(){return ye},p4e:function(){return Ie},pCJ:function(){return r},rwq:function(){return K},s4k:function(){return s},s6x:function(){return u},sjp:function(){return W},t5Z:function(){return je},tW:function(){return v},uZo:function(){return k},w2A:function(){return y},wq_:function(){return Q},xNJ:function(){return Se},yBu:function(){return n},yLS:function(){return L},yYc:function(){return he},yy:function(){return b},zTK:function(){return z},zpE:function(){return Ce},zqi:function(){return w}});var n={prefix:"fas",iconName:"right-from-bracket",icon:[512,512,["sign-out-alt"],"f2f5","M377.9 105.9L500.7 228.7c7.2 7.2 11.3 17.1 11.3 27.3s-4.1 20.1-11.3 27.3L377.9 406.1c-6.4 6.4-15 9.9-24 9.9c-18.7 0-33.9-15.2-33.9-33.9l0-62.1-128 0c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32l128 0 0-62.1c0-18.7 15.2-33.9 33.9-33.9c9 0 17.6 3.6 24 9.9zM160 96L96 96c-17.7 0-32 14.3-32 32l0 256c0 17.7 14.3 32 32 32l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c-53 0-96-43-96-96L0 128C0 75 43 32 96 32l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32z"]},o={prefix:"fas",iconName:"forward-step",icon:[320,512,["step-forward"],"f051","M52.5 440.6c-9.5 7.9-22.8 9.7-34.1 4.4S0 428.4 0 416V96C0 83.6 7.2 72.3 18.4 67s24.5-3.6 34.1 4.4l192 160L256 241V96c0-17.7 14.3-32 32-32s32 14.3 32 32V416c0 17.7-14.3 32-32 32s-32-14.3-32-32V271l-11.5 9.6-192 160z"]},i={prefix:"fas",iconName:"clipboard-list",icon:[384,512,[],"f46d","M192 0c-41.8 0-77.4 26.7-90.5 64H64C28.7 64 0 92.7 0 128V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64H282.5C269.4 26.7 233.8 0 192 0zm0 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM72 272a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm104-16H304c8.8 0 16 7.2 16 16s-7.2 16-16 16H176c-8.8 0-16-7.2-16-16s7.2-16 16-16zM72 368a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm88 0c0-8.8 7.2-16 16-16H304c8.8 0 16 7.2 16 16s-7.2 16-16 16H176c-8.8 0-16-7.2-16-16z"]},r={prefix:"fas",iconName:"user-check",icon:[640,512,[],"f4fc","M96 128a128 128 0 1 1 256 0A128 128 0 1 1 96 128zM0 482.3C0 383.8 79.8 304 178.3 304h91.4C368.2 304 448 383.8 448 482.3c0 16.4-13.3 29.7-29.7 29.7H29.7C13.3 512 0 498.7 0 482.3zM625 177L497 305c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L591 143c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z"]},s={prefix:"fas",iconName:"circle-notch",icon:[512,512,[],"f1ce","M222.7 32.1c5 16.9-4.6 34.8-21.5 39.8C121.8 95.6 64 169.1 64 256c0 106 86 192 192 192s192-86 192-192c0-86.9-57.8-160.4-137.1-184.1c-16.9-5-26.6-22.9-21.5-39.8s22.9-26.6 39.8-21.5C434.9 42.1 512 140 512 256c0 141.4-114.6 256-256 256S0 397.4 0 256C0 140 77.1 42.1 182.9 10.6c16.9-5 34.8 4.6 39.8 21.5z"]},l={prefix:"fas",iconName:"compass",icon:[512,512,[129517],"f14e","M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm50.7-186.9L162.4 380.6c-19.4 7.5-38.5-11.6-31-31l55.5-144.3c3.3-8.5 9.9-15.1 18.4-18.4l144.3-55.5c19.4-7.5 38.5 11.6 31 31L325.1 306.7c-3.2 8.5-9.9 15.1-18.4 18.4zM288 256a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z"]},c={prefix:"fas",iconName:"bars",icon:[448,512,["navicon"],"f0c9","M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"]},d={prefix:"fas",iconName:"circle-exclamation",icon:[512,512,["exclamation-circle"],"f06a","M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm0-384c13.3 0 24 10.7 24 24V264c0 13.3-10.7 24-24 24s-24-10.7-24-24V152c0-13.3 10.7-24 24-24zM224 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z"]},u={prefix:"fas",iconName:"flag",icon:[448,512,[127988,61725],"f024","M64 32C64 14.3 49.7 0 32 0S0 14.3 0 32V64 368 480c0 17.7 14.3 32 32 32s32-14.3 32-32V352l64.3-16.1c41.1-10.3 84.6-5.5 122.5 13.4c44.2 22.1 95.5 24.8 141.7 7.4l34.7-13c12.5-4.7 20.8-16.6 20.8-30V66.1c0-23-24.2-38-44.8-27.7l-9.6 4.8c-46.3 23.2-100.8 23.2-147.1 0c-35.1-17.6-75.4-22-113.5-12.5L64 48V32z"]},h={prefix:"fas",iconName:"lock",icon:[448,512,[128274],"f023","M144 144v48H304V144c0-44.2-35.8-80-80-80s-80 35.8-80 80zM80 192V144C80 64.5 144.5 0 224 0s144 64.5 144 144v48h16c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V256c0-35.3 28.7-64 64-64H80z"]},m={prefix:"fas",iconName:"pen-to-square",icon:[512,512,["edit"],"f044","M471.6 21.7c-21.9-21.9-57.3-21.9-79.2 0L362.3 51.7l97.9 97.9 30.1-30.1c21.9-21.9 21.9-57.3 0-79.2L471.6 21.7zm-299.2 220c-6.1 6.1-10.8 13.6-13.5 21.9l-29.6 88.8c-2.9 8.6-.6 18.1 5.8 24.6s15.9 8.7 24.6 5.8l88.8-29.6c8.2-2.7 15.7-7.4 21.9-13.5L437.7 172.3 339.7 74.3 172.4 241.7zM96 64C43 64 0 107 0 160V416c0 53 43 96 96 96H352c53 0 96-43 96-96V320c0-17.7-14.3-32-32-32s-32 14.3-32 32v96c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32h96c17.7 0 32-14.3 32-32s-14.3-32-32-32H96z"]},p=m,f={prefix:"fas",iconName:"share-nodes",icon:[448,512,["share-alt"],"f1e0","M352 224c53 0 96-43 96-96s-43-96-96-96s-96 43-96 96c0 4 .2 8 .7 11.9l-94.1 47C145.4 170.2 121.9 160 96 160c-53 0-96 43-96 96s43 96 96 96c25.9 0 49.4-10.2 66.6-26.9l94.1 47c-.5 3.9-.7 7.8-.7 11.9c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-25.9 0-49.4 10.2-66.6 26.9l-94.1-47c.5-3.9 .7-7.8 .7-11.9s-.2-8-.7-11.9l94.1-47C302.6 213.8 326.1 224 352 224z"]},g={prefix:"fas",iconName:"hourglass-half",icon:[384,512,["hourglass-2"],"f252","M32 0C14.3 0 0 14.3 0 32S14.3 64 32 64V75c0 42.4 16.9 83.1 46.9 113.1L146.7 256 78.9 323.9C48.9 353.9 32 394.6 32 437v11c-17.7 0-32 14.3-32 32s14.3 32 32 32H64 320h32c17.7 0 32-14.3 32-32s-14.3-32-32-32V437c0-42.4-16.9-83.1-46.9-113.1L237.3 256l67.9-67.9c30-30 46.9-70.7 46.9-113.1V64c17.7 0 32-14.3 32-32s-14.3-32-32-32H320 64 32zM96 75V64H288V75c0 19-5.6 37.4-16 53H112c-10.3-15.6-16-34-16-53zm16 309c3.5-5.3 7.6-10.3 12.1-14.9L192 301.3l67.9 67.9c4.6 4.6 8.6 9.6 12.1 14.9H112z"]},y={prefix:"fas",iconName:"chevron-up",icon:[512,512,[],"f077","M233.4 105.4c12.5-12.5 32.8-12.5 45.3 0l192 192c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L256 173.3 86.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l192-192z"]},_={prefix:"fas",iconName:"user",icon:[448,512,[128100,62144],"f007","M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-45.7 48C79.8 304 0 383.8 0 482.3C0 498.7 13.3 512 29.7 512H418.3c16.4 0 29.7-13.3 29.7-29.7C448 383.8 368.2 304 269.7 304H178.3z"]},b={prefix:"fas",iconName:"star",icon:[576,512,[11088,61446],"f005","M316.9 18C311.6 7 300.4 0 288.1 0s-23.4 7-28.8 18L195 150.3 51.4 171.5c-12 1.8-22 10.2-25.7 21.7s-.7 24.2 7.9 32.7L137.8 329 113.2 474.7c-2 12 3 24.2 12.9 31.3s23 8 33.8 2.3l128.3-68.5 128.3 68.5c10.8 5.7 23.9 4.9 33.8-2.3s14.9-19.3 12.9-31.3L438.5 329 542.7 225.9c8.6-8.5 11.7-21.2 7.9-32.7s-13.7-19.9-25.7-21.7L381.2 150.3 316.9 18z"]},v={prefix:"fas",iconName:"shuffle",icon:[512,512,[128256,"random"],"f074","M403.8 34.4c12-5 25.7-2.2 34.9 6.9l64 64c6 6 9.4 14.1 9.4 22.6s-3.4 16.6-9.4 22.6l-64 64c-9.2 9.2-22.9 11.9-34.9 6.9s-19.8-16.6-19.8-29.6V160H352c-10.1 0-19.6 4.7-25.6 12.8L284 229.3 244 176l31.2-41.6C293.3 110.2 321.8 96 352 96h32V64c0-12.9 7.8-24.6 19.8-29.6zM164 282.7L204 336l-31.2 41.6C154.7 401.8 126.2 416 96 416H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H96c10.1 0 19.6-4.7 25.6-12.8L164 282.7zm274.6 188c-9.2 9.2-22.9 11.9-34.9 6.9s-19.8-16.6-19.8-29.6V416H352c-30.2 0-58.7-14.2-76.8-38.4L121.6 172.8c-6-8.1-15.5-12.8-25.6-12.8H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H96c30.2 0 58.7 14.2 76.8 38.4L326.4 339.2c6 8.1 15.5 12.8 25.6 12.8h32V320c0-12.9 7.8-24.6 19.8-29.6s25.7-2.2 34.9 6.9l64 64c6 6 9.4 14.1 9.4 22.6s-3.4 16.6-9.4 22.6l-64 64z"]},w={prefix:"fas",iconName:"crown",icon:[576,512,[128081],"f521","M309 106c11.4-7 19-19.7 19-34c0-22.1-17.9-40-40-40s-40 17.9-40 40c0 14.4 7.6 27 19 34L209.7 220.6c-9.1 18.2-32.7 23.4-48.6 10.7L72 160c5-6.7 8-15 8-24c0-22.1-17.9-40-40-40S0 113.9 0 136s17.9 40 40 40c.2 0 .5 0 .7 0L86.4 427.4c5.5 30.4 32 52.6 63 52.6H426.6c30.9 0 57.4-22.1 63-52.6L535.3 176c.2 0 .5 0 .7 0c22.1 0 40-17.9 40-40s-17.9-40-40-40s-40 17.9-40 40c0 9 3 17.3 8 24l-89.1 71.3c-15.9 12.7-39.5 7.5-48.6-10.7L309 106z"]},x={prefix:"fas",iconName:"unlock",icon:[448,512,[128275],"f09c","M144 144c0-44.2 35.8-80 80-80c31.9 0 59.4 18.6 72.3 45.7c7.6 16 26.7 22.8 42.6 15.2s22.8-26.7 15.2-42.6C331 33.7 281.5 0 224 0C144.5 0 80 64.5 80 144v48H64c-35.3 0-64 28.7-64 64V448c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V256c0-35.3-28.7-64-64-64H144V144z"]},k={prefix:"fas",iconName:"signature",icon:[640,512,[],"f5b7","M192 128c0-17.7 14.3-32 32-32s32 14.3 32 32v7.8c0 27.7-2.4 55.3-7.1 82.5l-84.4 25.3c-40.6 12.2-68.4 49.6-68.4 92v71.9c0 40 32.5 72.5 72.5 72.5c26 0 50-13.9 62.9-36.5l13.9-24.3c26.8-47 46.5-97.7 58.4-150.5l94.4-28.3-12.5 37.5c-3.3 9.8-1.6 20.5 4.4 28.8s15.7 13.3 26 13.3H544c17.7 0 32-14.3 32-32s-14.3-32-32-32H460.4l18-53.9c3.8-11.3 .9-23.8-7.4-32.4s-20.7-11.8-32.2-8.4L316.4 198.1c2.4-20.7 3.6-41.4 3.6-62.3V128c0-53-43-96-96-96s-96 43-96 96v32c0 17.7 14.3 32 32 32s32-14.3 32-32V128zm-9.2 177l49-14.7c-10.4 33.8-24.5 66.4-42.1 97.2l-13.9 24.3c-1.5 2.6-4.3 4.3-7.4 4.3c-4.7 0-8.5-3.8-8.5-8.5V335.6c0-14.1 9.3-26.6 22.8-30.7zM24 368c-13.3 0-24 10.7-24 24s10.7 24 24 24H64.3c-.2-2.8-.3-5.6-.3-8.5V368H24zm592 48c13.3 0 24-10.7 24-24s-10.7-24-24-24H305.9c-6.7 16.3-14.2 32.3-22.3 48H616z"]},C={prefix:"fas",iconName:"gift",icon:[512,512,[127873],"f06b","M190.5 68.8L225.3 128H224 152c-22.1 0-40-17.9-40-40s17.9-40 40-40h2.2c14.9 0 28.8 7.9 36.3 20.8zM64 88c0 14.4 3.5 28 9.6 40H32c-17.7 0-32 14.3-32 32v64c0 17.7 14.3 32 32 32H480c17.7 0 32-14.3 32-32V160c0-17.7-14.3-32-32-32H438.4c6.1-12 9.6-25.6 9.6-40c0-48.6-39.4-88-88-88h-2.2c-31.9 0-61.5 16.9-77.7 44.4L256 85.5l-24.1-41C215.7 16.9 186.1 0 154.2 0H152C103.4 0 64 39.4 64 88zm336 0c0 22.1-17.9 40-40 40H288h-1.3l34.8-59.2C329.1 55.9 342.9 48 357.8 48H360c22.1 0 40 17.9 40 40zM32 288V464c0 26.5 21.5 48 48 48H224V288H32zM288 512H432c26.5 0 48-21.5 48-48V288H288V512z"]},j={prefix:"fas",iconName:"square-plus",icon:[448,512,[61846,"plus-square"],"f0fe","M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM200 344V280H136c-13.3 0-24-10.7-24-24s10.7-24 24-24h64V168c0-13.3 10.7-24 24-24s24 10.7 24 24v64h64c13.3 0 24 10.7 24 24s-10.7 24-24 24H248v64c0 13.3-10.7 24-24 24s-24-10.7-24-24z"]},S={prefix:"fas",iconName:"circle-check",icon:[512,512,[61533,"check-circle"],"f058","M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM369 209L241 337c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L335 175c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z"]},I=S,A={prefix:"fas",iconName:"scroll",icon:[576,512,[128220],"f70e","M0 80v48c0 17.7 14.3 32 32 32H48 96V80c0-26.5-21.5-48-48-48S0 53.5 0 80zM112 32c10 13.4 16 30 16 48V384c0 35.3 28.7 64 64 64s64-28.7 64-64v-5.3c0-32.4 26.3-58.7 58.7-58.7H480V128c0-53-43-96-96-96H112zM464 480c61.9 0 112-50.1 112-112c0-8.8-7.2-16-16-16H314.7c-14.7 0-26.7 11.9-26.7 26.7V384c0 53-43 96-96 96H368h96z"]},N={prefix:"fas",iconName:"bomb",icon:[512,512,[128163],"f1e2","M459.1 52.4L442.6 6.5C440.7 2.6 436.5 0 432.1 0s-8.5 2.6-10.4 6.5L405.2 52.4l-46 16.8c-4.3 1.6-7.3 5.9-7.2 10.4c0 4.5 3 8.7 7.2 10.2l45.7 16.8 16.8 45.8c1.5 4.4 5.8 7.5 10.4 7.5s8.9-3.1 10.4-7.5l16.5-45.8 45.7-16.8c4.2-1.5 7.2-5.7 7.2-10.2c0-4.6-3-8.9-7.2-10.4L459.1 52.4zm-132.4 53c-12.5-12.5-32.8-12.5-45.3 0l-2.9 2.9C256.5 100.3 232.7 96 208 96C93.1 96 0 189.1 0 304S93.1 512 208 512s208-93.1 208-208c0-24.7-4.3-48.5-12.2-70.5l2.9-2.9c12.5-12.5 12.5-32.8 0-45.3l-80-80zM200 192c-57.4 0-104 46.6-104 104v8c0 8.8-7.2 16-16 16s-16-7.2-16-16v-8c0-75.1 60.9-136 136-136h8c8.8 0 16 7.2 16 16s-7.2 16-16 16h-8z"]},E={prefix:"fas",iconName:"arrows-rotate",icon:[512,512,[128472,"refresh","sync"],"f021","M105.1 202.6c7.7-21.8 20.2-42.3 37.8-59.8c62.5-62.5 163.8-62.5 226.3 0L386.3 160H352c-17.7 0-32 14.3-32 32s14.3 32 32 32H463.5c0 0 0 0 0 0h.4c17.7 0 32-14.3 32-32V80c0-17.7-14.3-32-32-32s-32 14.3-32 32v35.2L414.4 97.6c-87.5-87.5-229.3-87.5-316.8 0C73.2 122 55.6 150.7 44.8 181.4c-5.9 16.7 2.9 34.9 19.5 40.8s34.9-2.9 40.8-19.5zM39 289.3c-5 1.5-9.8 4.2-13.7 8.2c-4 4-6.7 8.8-8.1 14c-.3 1.2-.6 2.5-.8 3.8c-.3 1.7-.4 3.4-.4 5.1V432c0 17.7 14.3 32 32 32s32-14.3 32-32V396.9l17.6 17.5 0 0c87.5 87.4 229.3 87.4 316.7 0c24.4-24.4 42.1-53.1 52.9-83.7c5.9-16.7-2.9-34.9-19.5-40.8s-34.9 2.9-40.8 19.5c-7.7 21.8-20.2 42.3-37.8 59.8c-62.5 62.5-163.8 62.5-226.3 0l-.1-.1L125.6 352H160c17.7 0 32-14.3 32-32s-14.3-32-32-32H48.4c-1.6 0-3.2 .1-4.8 .3s-3.1 .5-4.6 1z"]},T=E,D={prefix:"fas",iconName:"sort",icon:[320,512,["unsorted"],"f0dc","M137.4 41.4c12.5-12.5 32.8-12.5 45.3 0l128 128c9.2 9.2 11.9 22.9 6.9 34.9s-16.6 19.8-29.6 19.8H32c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9l128-128zm0 429.3l-128-128c-9.2-9.2-11.9-22.9-6.9-34.9s16.6-19.8 29.6-19.8H288c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9l-128 128c-12.5 12.5-32.8 12.5-45.3 0z"]},R={prefix:"fas",iconName:"filter",icon:[512,512,[],"f0b0","M3.9 54.9C10.5 40.9 24.5 32 40 32H472c15.5 0 29.5 8.9 36.1 22.9s4.6 30.5-5.2 42.5L320 320.9V448c0 12.1-6.8 23.2-17.7 28.6s-23.8 4.3-33.5-3l-64-48c-8.1-6-12.8-15.5-12.8-25.6V320.9L9 97.3C-.7 85.4-2.8 68.8 3.9 54.9z"]},M={prefix:"fas",iconName:"question",icon:[320,512,[10067,10068,61736],"3f","M80 160c0-35.3 28.7-64 64-64h32c35.3 0 64 28.7 64 64v3.6c0 21.8-11.1 42.1-29.4 53.8l-42.2 27.1c-25.2 16.2-40.4 44.1-40.4 74V320c0 17.7 14.3 32 32 32s32-14.3 32-32v-1.4c0-8.2 4.2-15.8 11-20.2l42.2-27.1c36.6-23.6 58.8-64.1 58.8-107.7V160c0-70.7-57.3-128-128-128H144C73.3 32 16 89.3 16 160c0 17.7 14.3 32 32 32s32-14.3 32-32zm80 320a40 40 0 1 0 0-80 40 40 0 1 0 0 80z"]},O={prefix:"fas",iconName:"bolt-lightning",icon:[384,512,[],"e0b7","M0 256L28.5 28c2-16 15.6-28 31.8-28H228.9c15 0 27.1 12.1 27.1 27.1c0 3.2-.6 6.5-1.7 9.5L208 160H347.3c20.2 0 36.7 16.4 36.7 36.7c0 7.4-2.2 14.6-6.4 20.7l-192.2 281c-5.9 8.6-15.6 13.7-25.9 13.7h-2.9c-15.7 0-28.5-12.8-28.5-28.5c0-2.3 .3-4.6 .9-6.9L176 288H32c-17.7 0-32-14.3-32-32z"]},q={prefix:"fas",iconName:"arrow-right",icon:[448,512,[8594],"f061","M438.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L338.8 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l306.7 0L233.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160z"]},G={prefix:"fas",iconName:"circle-up",icon:[512,512,[61467,"arrow-alt-circle-up"],"f35b","M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM135.1 217.4l107.1-99.9c3.8-3.5 8.7-5.5 13.8-5.5s10.1 2 13.8 5.5l107.1 99.9c4.5 4.2 7.1 10.1 7.1 16.3c0 12.3-10 22.3-22.3 22.3H304v96c0 17.7-14.3 32-32 32H240c-17.7 0-32-14.3-32-32V256H150.3C138 256 128 246 128 233.7c0-6.2 2.6-12.1 7.1-16.3z"]},P={prefix:"fas",iconName:"pen",icon:[512,512,[128394],"f304","M362.7 19.3L314.3 67.7 444.3 197.7l48.4-48.4c25-25 25-65.5 0-90.5L453.3 19.3c-25-25-65.5-25-90.5 0zm-71 71L58.6 323.5c-10.4 10.4-18 23.3-22.2 37.4L1 481.2C-1.5 489.7 .8 498.8 7 505s15.3 8.5 23.7 6.1l120.3-35.4c14.1-4.2 27-11.8 37.4-22.2L421.7 220.3 291.7 90.3z"]},F={prefix:"fas",iconName:"floppy-disk",icon:[448,512,[128190,128426,"save"],"f0c7","M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V173.3c0-17-6.7-33.3-18.7-45.3L352 50.7C340 38.7 323.7 32 306.7 32H64zm0 96c0-17.7 14.3-32 32-32H288c17.7 0 32 14.3 32 32v64c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V128zM224 288a64 64 0 1 1 0 128 64 64 0 1 1 0-128z"]},L={prefix:"fas",iconName:"trash",icon:[448,512,[],"f1f8","M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z"]},W={prefix:"fas",iconName:"shirt",icon:[640,512,[128085,"t-shirt","tshirt"],"f553","M211.8 0c7.8 0 14.3 5.7 16.7 13.2C240.8 51.9 277.1 80 320 80s79.2-28.1 91.5-66.8C413.9 5.7 420.4 0 428.2 0h12.6c22.5 0 44.2 7.9 61.5 22.3L628.5 127.4c6.6 5.5 10.7 13.5 11.4 22.1s-2.1 17.1-7.8 23.6l-56 64c-11.4 13.1-31.2 14.6-44.6 3.5L480 197.7V448c0 35.3-28.7 64-64 64H224c-35.3 0-64-28.7-64-64V197.7l-51.5 42.9c-13.3 11.1-33.1 9.6-44.6-3.5l-56-64c-5.7-6.5-8.5-15-7.8-23.6s4.8-16.6 11.4-22.1L137.7 22.3C155 7.9 176.7 0 199.2 0h12.6z"]},B={prefix:"fas",iconName:"arrow-left",icon:[448,512,[8592],"f060","M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.2 288 416 288c17.7 0 32-14.3 32-32s-14.3-32-32-32l-306.7 0L214.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"]},H={prefix:"fas",iconName:"indent",icon:[448,512,[],"f03c","M0 64C0 46.3 14.3 32 32 32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 96 0 81.7 0 64zM192 192c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H224c-17.7 0-32-14.3-32-32zm32 96H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H224c-17.7 0-32-14.3-32-32s14.3-32 32-32zM0 448c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM127.8 268.6L25.8 347.9C15.3 356.1 0 348.6 0 335.3V176.7c0-13.3 15.3-20.8 25.8-12.6l101.9 79.3c8.2 6.4 8.2 18.9 0 25.3z"]},U={prefix:"fas",iconName:"circle-info",icon:[512,512,["info-circle"],"f05a","M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM216 336h24V272H216c-13.3 0-24-10.7-24-24s10.7-24 24-24h48c13.3 0 24 10.7 24 24v88h8c13.3 0 24 10.7 24 24s-10.7 24-24 24H216c-13.3 0-24-10.7-24-24s10.7-24 24-24zm40-208a32 32 0 1 1 0 64 32 32 0 1 1 0-64z"]},K={prefix:"fas",iconName:"camera",icon:[512,512,[62258,"camera-alt"],"f030","M149.1 64.8L138.7 96H64C28.7 96 0 124.7 0 160V416c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V160c0-35.3-28.7-64-64-64H373.3L362.9 64.8C356.4 45.2 338.1 32 317.4 32H194.6c-20.7 0-39 13.2-45.5 32.8zM256 192a96 96 0 1 1 0 192 96 96 0 1 1 0-192z"]},z={prefix:"fas",iconName:"crosshairs",icon:[512,512,[],"f05b","M256 0c17.7 0 32 14.3 32 32V42.4c93.7 13.9 167.7 88 181.6 181.6H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H469.6c-13.9 93.7-88 167.7-181.6 181.6V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V469.6C130.3 455.7 56.3 381.7 42.4 288H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H42.4C56.3 130.3 130.3 56.3 224 42.4V32c0-17.7 14.3-32 32-32zM107.4 288c12.5 58.3 58.4 104.1 116.6 116.6V384c0-17.7 14.3-32 32-32s32 14.3 32 32v20.6c58.3-12.5 104.1-58.4 116.6-116.6H384c-17.7 0-32-14.3-32-32s14.3-32 32-32h20.6C392.1 165.7 346.3 119.9 288 107.4V128c0 17.7-14.3 32-32 32s-32-14.3-32-32V107.4C165.7 119.9 119.9 165.7 107.4 224H128c17.7 0 32 14.3 32 32s-14.3 32-32 32H107.4zM256 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64z"]},V={prefix:"fas",iconName:"arrow-rotate-left",icon:[512,512,[8634,"arrow-left-rotate","arrow-rotate-back","arrow-rotate-backward","undo"],"f0e2","M125.7 160H176c17.7 0 32 14.3 32 32s-14.3 32-32 32H48c-17.7 0-32-14.3-32-32V64c0-17.7 14.3-32 32-32s32 14.3 32 32v51.2L97.6 97.6c87.5-87.5 229.3-87.5 316.8 0s87.5 229.3 0 316.8s-229.3 87.5-316.8 0c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0c62.5 62.5 163.8 62.5 226.3 0s62.5-163.8 0-226.3s-163.8-62.5-226.3 0L125.7 160z"]},Y={prefix:"fas",iconName:"minus",icon:[448,512,[8211,8722,10134,"subtract"],"f068","M432 256c0 17.7-14.3 32-32 32L48 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l352 0c17.7 0 32 14.3 32 32z"]},J={prefix:"fas",iconName:"gear",icon:[512,512,[9881,"cog"],"f013","M495.9 166.6c3.2 8.7 .5 18.4-6.4 24.6l-43.3 39.4c1.1 8.3 1.7 16.8 1.7 25.4s-.6 17.1-1.7 25.4l43.3 39.4c6.9 6.2 9.6 15.9 6.4 24.6c-4.4 11.9-9.7 23.3-15.8 34.3l-4.7 8.1c-6.6 11-14 21.4-22.1 31.2c-5.9 7.2-15.7 9.6-24.5 6.8l-55.7-17.7c-13.4 10.3-28.2 18.9-44 25.4l-12.5 57.1c-2 9.1-9 16.3-18.2 17.8c-13.8 2.3-28 3.5-42.5 3.5s-28.7-1.2-42.5-3.5c-9.2-1.5-16.2-8.7-18.2-17.8l-12.5-57.1c-15.8-6.5-30.6-15.1-44-25.4L83.1 425.9c-8.8 2.8-18.6 .3-24.5-6.8c-8.1-9.8-15.5-20.2-22.1-31.2l-4.7-8.1c-6.1-11-11.4-22.4-15.8-34.3c-3.2-8.7-.5-18.4 6.4-24.6l43.3-39.4C64.6 273.1 64 264.6 64 256s.6-17.1 1.7-25.4L22.4 191.2c-6.9-6.2-9.6-15.9-6.4-24.6c4.4-11.9 9.7-23.3 15.8-34.3l4.7-8.1c6.6-11 14-21.4 22.1-31.2c5.9-7.2 15.7-9.6 24.5-6.8l55.7 17.7c13.4-10.3 28.2-18.9 44-25.4l12.5-57.1c2-9.1 9-16.3 18.2-17.8C227.3 1.2 241.5 0 256 0s28.7 1.2 42.5 3.5c9.2 1.5 16.2 8.7 18.2 17.8l12.5 57.1c15.8 6.5 30.6 15.1 44 25.4l55.7-17.7c8.8-2.8 18.6-.3 24.5 6.8c8.1 9.8 15.5 20.2 22.1 31.2l4.7 8.1c6.1 11 11.4 22.4 15.8 34.3zM256 336a80 80 0 1 0 0-160 80 80 0 1 0 0 160z"]},$=J,Z={prefix:"fas",iconName:"cart-shopping",icon:[576,512,[128722,"shopping-cart"],"f07a","M0 24C0 10.7 10.7 0 24 0H69.5c22 0 41.5 12.8 50.6 32h411c26.3 0 45.5 25 38.6 50.4l-41 152.3c-8.5 31.4-37 53.3-69.5 53.3H170.7l5.4 28.5c2.2 11.3 12.1 19.5 23.6 19.5H488c13.3 0 24 10.7 24 24s-10.7 24-24 24H199.7c-34.6 0-64.3-24.6-70.7-58.5L77.4 54.5c-.7-3.8-4-6.5-7.9-6.5H24C10.7 48 0 37.3 0 24zM128 464a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm336-48a48 48 0 1 1 0 96 48 48 0 1 1 0-96z"]},Q={prefix:"fas",iconName:"coins",icon:[512,512,[],"f51e","M512 80c0 18-14.3 34.6-38.4 48c-29.1 16.1-72.5 27.5-122.3 30.9c-3.7-1.8-7.4-3.5-11.3-5C300.6 137.4 248.2 128 192 128c-8.3 0-16.4 .2-24.5 .6l-1.1-.6C142.3 114.6 128 98 128 80c0-44.2 86-80 192-80S512 35.8 512 80zM160.7 161.1c10.2-.7 20.7-1.1 31.3-1.1c62.2 0 117.4 12.3 152.5 31.4C369.3 204.9 384 221.7 384 240c0 4-.7 7.9-2.1 11.7c-4.6 13.2-17 25.3-35 35.5c0 0 0 0 0 0c-.1 .1-.3 .1-.4 .2l0 0 0 0c-.3 .2-.6 .3-.9 .5c-35 19.4-90.8 32-153.6 32c-59.6 0-112.9-11.3-148.2-29.1c-1.9-.9-3.7-1.9-5.5-2.9C14.3 274.6 0 258 0 240c0-34.8 53.4-64.5 128-75.4c10.5-1.5 21.4-2.7 32.7-3.5zM416 240c0-21.9-10.6-39.9-24.1-53.4c28.3-4.4 54.2-11.4 76.2-20.5c16.3-6.8 31.5-15.2 43.9-25.5V176c0 19.3-16.5 37.1-43.8 50.9c-14.6 7.4-32.4 13.7-52.4 18.5c.1-1.8 .2-3.5 .2-5.3zm-32 96c0 18-14.3 34.6-38.4 48c-1.8 1-3.6 1.9-5.5 2.9C304.9 404.7 251.6 416 192 416c-62.8 0-118.6-12.6-153.6-32C14.3 370.6 0 354 0 336V300.6c12.5 10.3 27.6 18.7 43.9 25.5C83.4 342.6 135.8 352 192 352s108.6-9.4 148.1-25.9c7.8-3.2 15.3-6.9 22.4-10.9c6.1-3.4 11.8-7.2 17.2-11.2c1.5-1.1 2.9-2.3 4.3-3.4V304v5.7V336zm32 0V304 278.1c19-4.2 36.5-9.5 52.1-16c16.3-6.8 31.5-15.2 43.9-25.5V272c0 10.5-5 21-14.9 30.9c-16.3 16.3-45 29.7-81.3 38.4c.1-1.7 .2-3.5 .2-5.3zM192 448c56.2 0 108.6-9.4 148.1-25.9c16.3-6.8 31.5-15.2 43.9-25.5V432c0 44.2-86 80-192 80S0 476.2 0 432V396.6c12.5 10.3 27.6 18.7 43.9 25.5C83.4 438.6 135.8 448 192 448z"]},X={prefix:"fas",iconName:"ellipsis-vertical",icon:[128,512,["ellipsis-v"],"f142","M64 360a56 56 0 1 0 0 112 56 56 0 1 0 0-112zm0-160a56 56 0 1 0 0 112 56 56 0 1 0 0-112zM120 96A56 56 0 1 0 8 96a56 56 0 1 0 112 0z"]},ee={prefix:"fas",iconName:"download",icon:[512,512,[],"f019","M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V274.7l-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 274.7V32zM64 352c-35.3 0-64 28.7-64 64v32c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V416c0-35.3-28.7-64-64-64H346.5l-45.3 45.3c-25 25-65.5 25-90.5 0L165.5 352H64zm368 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48z"]},te={prefix:"fas",iconName:"rotate-right",icon:[512,512,["redo-alt","rotate-forward"],"f2f9","M463.5 224H472c13.3 0 24-10.7 24-24V72c0-9.7-5.8-18.5-14.8-22.2s-19.3-1.7-26.2 5.2L413.4 96.6c-87.6-86.5-228.7-86.2-315.8 1c-87.5 87.5-87.5 229.3 0 316.8s229.3 87.5 316.8 0c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0c-62.5 62.5-163.8 62.5-226.3 0s-62.5-163.8 0-226.3c62.2-62.2 162.7-62.5 225.3-1L327 183c-6.9 6.9-8.9 17.2-5.2 26.2s12.5 14.8 22.2 14.8H463.5z"]},ae={prefix:"fas",iconName:"skull",icon:[512,512,[128128],"f54c","M416 398.9c58.5-41.1 96-104.1 96-174.9C512 100.3 397.4 0 256 0S0 100.3 0 224c0 70.7 37.5 133.8 96 174.9c0 .4 0 .7 0 1.1v64c0 26.5 21.5 48 48 48h48V464c0-8.8 7.2-16 16-16s16 7.2 16 16v48h64V464c0-8.8 7.2-16 16-16s16 7.2 16 16v48h48c26.5 0 48-21.5 48-48V400c0-.4 0-.7 0-1.1zM96 256a64 64 0 1 1 128 0A64 64 0 1 1 96 256zm256-64a64 64 0 1 1 0 128 64 64 0 1 1 0-128z"]},ne={prefix:"fas",iconName:"upload",icon:[512,512,[],"f093","M288 109.3V352c0 17.7-14.3 32-32 32s-32-14.3-32-32V109.3l-73.4 73.4c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l128-128c12.5-12.5 32.8-12.5 45.3 0l128 128c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L288 109.3zM64 352H192c0 35.3 28.7 64 64 64s64-28.7 64-64H448c35.3 0 64 28.7 64 64v32c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V416c0-35.3 28.7-64 64-64zM432 456a24 24 0 1 0 0-48 24 24 0 1 0 0 48z"]},oe={prefix:"fas",iconName:"toolbox",icon:[512,512,[129520],"f552","M176 88l0 40 160 0 0-40c0-4.4-3.6-8-8-8L184 80c-4.4 0-8 3.6-8 8zm-48 40l0-40c0-30.9 25.1-56 56-56l144 0c30.9 0 56 25.1 56 56l0 40 28.1 0c12.7 0 24.9 5.1 33.9 14.1l51.9 51.9c9 9 14.1 21.2 14.1 33.9l0 92.1-128 0 0-32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 32-128 0 0-32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 32L0 320l0-92.1c0-12.7 5.1-24.9 14.1-33.9l51.9-51.9c9-9 21.2-14.1 33.9-14.1l28.1 0zM0 416l0-64 128 0c0 17.7 14.3 32 32 32s32-14.3 32-32l128 0c0 17.7 14.3 32 32 32s32-14.3 32-32l128 0 0 64c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64z"]},ie={prefix:"fas",iconName:"link",icon:[640,512,[128279,"chain"],"f0c1","M579.8 267.7c56.5-56.5 56.5-148 0-204.5c-50-50-128.8-56.5-186.3-15.4l-1.6 1.1c-14.4 10.3-17.7 30.3-7.4 44.6s30.3 17.7 44.6 7.4l1.6-1.1c32.1-22.9 76-19.3 103.8 8.6c31.5 31.5 31.5 82.5 0 114L422.3 334.8c-31.5 31.5-82.5 31.5-114 0c-27.9-27.9-31.5-71.8-8.6-103.8l1.1-1.6c10.3-14.4 6.9-34.4-7.4-44.6s-34.4-6.9-44.6 7.4l-1.1 1.6C206.5 251.2 213 330 263 380c56.5 56.5 148 56.5 204.5 0L579.8 267.7zM60.2 244.3c-56.5 56.5-56.5 148 0 204.5c50 50 128.8 56.5 186.3 15.4l1.6-1.1c14.4-10.3 17.7-30.3 7.4-44.6s-30.3-17.7-44.6-7.4l-1.6 1.1c-32.1 22.9-76 19.3-103.8-8.6C74 372 74 321 105.5 289.5L217.7 177.2c31.5-31.5 82.5-31.5 114 0c27.9 27.9 31.5 71.8 8.6 103.9l-1.1 1.6c-10.3 14.4-6.9 34.4 7.4 44.6s34.4 6.9 44.6-7.4l1.1-1.6C433.5 260.8 427 182 377 132c-56.5-56.5-148-56.5-204.5 0L60.2 244.3z"]},re={prefix:"fas",iconName:"magnifying-glass",icon:[512,512,[128269,"search"],"f002","M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z"]},se={prefix:"fas",iconName:"chevron-down",icon:[512,512,[],"f078","M233.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L256 338.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z"]},le={prefix:"fas",iconName:"arrow-up",icon:[384,512,[8593],"f062","M214.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 141.2V448c0 17.7 14.3 32 32 32s32-14.3 32-32V141.2L329.4 246.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-160-160z"]},ce={prefix:"fas",iconName:"copy",icon:[448,512,[],"f0c5","M208 0H332.1c12.7 0 24.9 5.1 33.9 14.1l67.9 67.9c9 9 14.1 21.2 14.1 33.9V336c0 26.5-21.5 48-48 48H208c-26.5 0-48-21.5-48-48V48c0-26.5 21.5-48 48-48zM48 128h80v64H64V448H256V416h64v48c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V176c0-26.5 21.5-48 48-48z"]},de={prefix:"fas",iconName:"plus",icon:[448,512,[10133,61543,"add"],"2b","M256 80c0-17.7-14.3-32-32-32s-32 14.3-32 32V224H48c-17.7 0-32 14.3-32 32s14.3 32 32 32H192V432c0 17.7 14.3 32 32 32s32-14.3 32-32V288H400c17.7 0 32-14.3 32-32s-14.3-32-32-32H256V80z"]},ue={prefix:"fas",iconName:"xmark",icon:[384,512,[128473,10005,10006,10060,215,"close","multiply","remove","times"],"f00d","M342.6 150.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192 210.7 86.6 105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L146.7 256 41.4 361.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L192 301.3 297.4 406.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L237.3 256 342.6 150.6z"]},he=ue,me=ue,pe={prefix:"fas",iconName:"chevron-left",icon:[320,512,[9001],"f053","M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l192 192c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256 246.6 86.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-192 192z"]},fe={prefix:"fas",iconName:"chevron-right",icon:[320,512,[9002],"f054","M310.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L242.7 256 73.4 86.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l192 192z"]},ge={prefix:"fas",iconName:"trophy",icon:[576,512,[127942],"f091","M400 0H176c-26.5 0-48.1 21.8-47.1 48.2c.2 5.3 .4 10.6 .7 15.8H24C10.7 64 0 74.7 0 88c0 92.6 33.5 157 78.5 200.7c44.3 43.1 98.3 64.8 138.1 75.8c23.4 6.5 39.4 26 39.4 45.6c0 20.9-17 37.9-37.9 37.9H192c-17.7 0-32 14.3-32 32s14.3 32 32 32H384c17.7 0 32-14.3 32-32s-14.3-32-32-32H357.9C337 448 320 431 320 410.1c0-19.6 15.9-39.2 39.4-45.6c39.9-11 93.9-32.7 138.2-75.8C542.5 245 576 180.6 576 88c0-13.3-10.7-24-24-24H446.4c.3-5.2 .5-10.4 .7-15.8C448.1 21.8 426.5 0 400 0zM48.9 112h84.4c9.1 90.1 29.2 150.3 51.9 190.6c-24.9-11-50.8-26.5-73.2-48.3c-32-31.1-58-76-63-142.3zM464.1 254.3c-22.4 21.8-48.3 37.3-73.2 48.3c22.7-40.3 42.8-100.5 51.9-190.6h84.4c-5.1 66.3-31.1 111.2-63 142.3z"]},ye={prefix:"fas",iconName:"file-export",icon:[576,512,["arrow-right-from-file"],"f56e","M0 64C0 28.7 28.7 0 64 0H224V128c0 17.7 14.3 32 32 32H384V288H216c-13.3 0-24 10.7-24 24s10.7 24 24 24H384V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V64zM384 336V288H494.1l-39-39c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l80 80c9.4 9.4 9.4 24.6 0 33.9l-80 80c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l39-39H384zm0-208H256V0L384 128z"]},_e={prefix:"fas",iconName:"shield",icon:[512,512,[128737,"shield-blank"],"f132","M256 0c4.6 0 9.2 1 13.4 2.9L457.7 82.8c22 9.3 38.4 31 38.3 57.2c-.5 99.2-41.3 280.7-213.6 363.2c-16.7 8-36.1 8-52.8 0C57.3 420.7 16.5 239.2 16 140c-.1-26.2 16.3-47.9 38.3-57.2L242.7 2.9C246.8 1 251.4 0 256 0z"]},be={prefix:"fas",iconName:"book",icon:[448,512,[128212],"f02d","M96 0C43 0 0 43 0 96V416c0 53 43 96 96 96H384h32c17.7 0 32-14.3 32-32s-14.3-32-32-32V384c17.7 0 32-14.3 32-32V32c0-17.7-14.3-32-32-32H384 96zm0 384H352v64H96c-17.7 0-32-14.3-32-32s14.3-32 32-32zm32-240c0-8.8 7.2-16 16-16H336c8.8 0 16 7.2 16 16s-7.2 16-16 16H144c-8.8 0-16-7.2-16-16zm16 48H336c8.8 0 16 7.2 16 16s-7.2 16-16 16H144c-8.8 0-16-7.2-16-16s7.2-16 16-16z"]},ve={prefix:"fas",iconName:"user-plus",icon:[640,512,[],"f234","M96 128a128 128 0 1 1 256 0A128 128 0 1 1 96 128zM0 482.3C0 383.8 79.8 304 178.3 304h91.4C368.2 304 448 383.8 448 482.3c0 16.4-13.3 29.7-29.7 29.7H29.7C13.3 512 0 498.7 0 482.3zM504 312V248H440c-13.3 0-24-10.7-24-24s10.7-24 24-24h64V136c0-13.3 10.7-24 24-24s24 10.7 24 24v64h64c13.3 0 24 10.7 24 24s-10.7 24-24 24H552v64c0 13.3-10.7 24-24 24s-24-10.7-24-24z"]},we={prefix:"fas",iconName:"check",icon:[448,512,[10003,10004],"f00c","M438.6 105.4c12.5 12.5 12.5 32.8 0 45.3l-256 256c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L160 338.7 393.4 105.4c12.5-12.5 32.8-12.5 45.3 0z"]},xe={prefix:"fas",iconName:"hand-fist",icon:[448,512,[9994,"fist-raised"],"f6de","M192 0c17.7 0 32 14.3 32 32V144H160V32c0-17.7 14.3-32 32-32zM64 64c0-17.7 14.3-32 32-32s32 14.3 32 32v80H64V64zm192 0c0-17.7 14.3-32 32-32s32 14.3 32 32v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V64zm96 64c0-17.7 14.3-32 32-32s32 14.3 32 32v64c0 17.7-14.3 32-32 32s-32-14.3-32-32V128zm-96 88l0-.6c9.4 5.4 20.3 8.6 32 8.6c13.2 0 25.4-4 35.6-10.8c8.7 24.9 32.5 42.8 60.4 42.8c11.7 0 22.6-3.1 32-8.6V256c0 52.3-25.1 98.8-64 128v96c0 17.7-14.3 32-32 32H160c-17.7 0-32-14.3-32-32V401.6c-17.3-7.9-33.2-18.8-46.9-32.5L69.5 357.5C45.5 333.5 32 300.9 32 267V240c0-35.3 28.7-64 64-64h88c22.1 0 40 17.9 40 40s-17.9 40-40 40H128c-8.8 0-16 7.2-16 16s7.2 16 16 16h56c39.8 0 72-32.2 72-72z"]},ke={prefix:"fas",iconName:"triangle-exclamation",icon:[512,512,[9888,"exclamation-triangle","warning"],"f071","M256 32c14.2 0 27.3 7.5 34.5 19.8l216 368c7.3 12.4 7.3 27.7 .2 40.1S486.3 480 472 480H40c-14.3 0-27.6-7.7-34.7-20.1s-7-27.8 .2-40.1l216-368C228.7 39.5 241.8 32 256 32zm0 128c-13.3 0-24 10.7-24 24V296c0 13.3 10.7 24 24 24s24-10.7 24-24V184c0-13.3-10.7-24-24-24zm32 224a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z"]},Ce=ke,je={prefix:"fas",iconName:"share",icon:[512,512,["mail-forward"],"f064","M307 34.8c-11.5 5.1-19 16.6-19 29.2v64H176C78.8 128 0 206.8 0 304C0 417.3 81.5 467.9 100.2 478.1c2.5 1.4 5.3 1.9 8.1 1.9c10.9 0 19.7-8.9 19.7-19.7c0-7.5-4.3-14.4-9.8-19.5C108.8 431.9 96 414.4 96 384c0-53 43-96 96-96h96v64c0 12.6 7.4 24.1 19 29.2s25 3 34.4-5.4l160-144c6.7-6.1 10.6-14.7 10.6-23.8s-3.8-17.7-10.6-23.8l-160-144c-9.4-8.5-22.9-10.6-34.4-5.4z"]},Se={prefix:"fas",iconName:"dice",icon:[640,512,[127922],"f522","M274.9 34.3c-28.1-28.1-73.7-28.1-101.8 0L34.3 173.1c-28.1 28.1-28.1 73.7 0 101.8L173.1 413.7c28.1 28.1 73.7 28.1 101.8 0L413.7 274.9c28.1-28.1 28.1-73.7 0-101.8L274.9 34.3zM200 224a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM96 200a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM224 376a24 24 0 1 1 0-48 24 24 0 1 1 0 48zM352 200a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM224 120a24 24 0 1 1 0-48 24 24 0 1 1 0 48zm96 328c0 35.3 28.7 64 64 64H576c35.3 0 64-28.7 64-64V256c0-35.3-28.7-64-64-64H461.7c11.6 36 3.1 77-25.4 105.5L320 413.8V448zM480 328a24 24 0 1 1 0 48 24 24 0 1 1 0-48z"]},Ie={prefix:"fas",iconName:"file-invoice",icon:[384,512,[],"f570","M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM80 64h64c8.8 0 16 7.2 16 16s-7.2 16-16 16H80c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64h64c8.8 0 16 7.2 16 16s-7.2 16-16 16H80c-8.8 0-16-7.2-16-16s7.2-16 16-16zm16 96H288c17.7 0 32 14.3 32 32v64c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V256c0-17.7 14.3-32 32-32zm0 32v64H288V256H96zM240 416h64c8.8 0 16 7.2 16 16s-7.2 16-16 16H240c-8.8 0-16-7.2-16-16s7.2-16 16-16z"]},Ae={prefix:"fas",iconName:"print",icon:[512,512,[128424,128438,9113],"f02f","M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zM432 248a24 24 0 1 1 0 48 24 24 0 1 1 0-48z"]}}},t={};function a(n){var o=t[n];if(void 0!==o)return o.exports;var i=t[n]={exports:{}};return e[n](i,i.exports,a),i.exports}a.m=e,a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,{a:t}),t},function(){var e,t=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__};a.t=function(n,o){if(1&o&&(n=this(n)),8&o)return n;if("object"===typeof n&&n){if(4&o&&n.__esModule)return n;if(16&o&&"function"===typeof n.then)return n}var i=Object.create(null);a.r(i);var r={};e=e||[null,t({}),t([]),t(t)];for(var s=2&o&&n;"object"==typeof s&&!~e.indexOf(s);s=t(s))Object.getOwnPropertyNames(s).forEach((function(e){r[e]=function(){return n[e]}}));return r.default=function(){return n},a.d(i,r),i}}(),a.d=function(e,t){for(var n in t)a.o(t,n)&&!a.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},a.f={},a.e=function(e){return Promise.all(Object.keys(a.f).reduce((function(t,n){return a.f[n](e,t),t}),[]))},a.u=function(e){return"static/js/"+e+".7144edbc.chunk.js"},a.miniCssF=function(e){},a.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}(),a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},function(){var e={},t="icon-react:";a.l=function(n,o,i,r){if(e[n])e[n].push(o);else{var s,l;if(void 0!==i)for(var c=document.getElementsByTagName("script"),d=0;d<c.length;d++){var u=c[d];if(u.getAttribute("src")==n||u.getAttribute("data-webpack")==t+i){s=u;break}}s||(l=!0,(s=document.createElement("script")).charset="utf-8",s.timeout=120,a.nc&&s.setAttribute("nonce",a.nc),s.setAttribute("data-webpack",t+i),s.src=n),e[n]=[o];var h=function(t,a){s.onerror=s.onload=null,clearTimeout(m);var o=e[n];if(delete e[n],s.parentNode&&s.parentNode.removeChild(s),o&&o.forEach((function(e){return e(a)})),t)return t(a)},m=setTimeout(h.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=h.bind(null,s.onerror),s.onload=h.bind(null,s.onload),l&&document.head.appendChild(s)}}}(),a.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.p="/",function(){var e={792:0};a.f.j=function(t,n){var o=a.o(e,t)?e[t]:void 0;if(0!==o)if(o)n.push(o[2]);else{var i=new Promise((function(a,n){o=e[t]=[a,n]}));n.push(o[2]=i);var r=a.p+a.u(t),s=new Error;a.l(r,(function(n){if(a.o(e,t)&&(0!==(o=e[t])&&(e[t]=void 0),o)){var i=n&&("load"===n.type?"missing":n.type),r=n&&n.target&&n.target.src;s.message="Loading chunk "+t+" failed.\n("+i+": "+r+")",s.name="ChunkLoadError",s.type=i,s.request=r,o[1](s)}}),"chunk-"+t,t)}};var t=function(t,n){var o,i,r=n[0],s=n[1],l=n[2],c=0;if(r.some((function(t){return 0!==e[t]}))){for(o in s)a.o(s,o)&&(a.m[o]=s[o]);if(l)l(a)}for(t&&t(n);c<r.length;c++)i=r[c],a.o(e,i)&&e[i]&&e[i][0](),e[i]=0},n=self.webpackChunkicon_react=self.webpackChunkicon_react||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))}(),function(){"use strict";var e={};a.r(e),a.d(e,{hasBrowserEnv:function(){return ww},hasStandardBrowserEnv:function(){return xw},hasStandardBrowserWebWorkerEnv:function(){return Cw}});var t=a(5043),n=a.t(t,2),o=a(4391),i=a(7237),r=t,s=Symbol.for("react-redux-context"),l="undefined"!==typeof globalThis?globalThis:{};function c(){if(!r.createContext)return{};const e=l[s]??(l[s]=new Map);let t=e.get(r.createContext);return t||(t=r.createContext(null),e.set(r.createContext,t)),t}var d=c();Symbol.for("react.element"),Symbol.for("react.portal"),Symbol.for("react.fragment"),Symbol.for("react.strict_mode"),Symbol.for("react.profiler"),Symbol.for("react.provider"),Symbol.for("react.context"),Symbol.for("react.server_context"),Symbol.for("react.forward_ref"),Symbol.for("react.suspense"),Symbol.for("react.suspense_list"),Symbol.for("react.memo"),Symbol.for("react.lazy"),Symbol.for("react.offscreen"),Symbol.for("react.client.reference");function u(e){e()}var h={notify(){},get:()=>[]};function m(e,t){let a,n=h,o=0,i=!1;function r(){c.onStateChange&&c.onStateChange()}function s(){o++,a||(a=t?t.addNestedSub(r):e.subscribe(r),n=function(){let e=null,t=null;return{clear(){e=null,t=null},notify(){u((()=>{let t=e;for(;t;)t.callback(),t=t.next}))},get(){const t=[];let a=e;for(;a;)t.push(a),a=a.next;return t},subscribe(a){let n=!0;const o=t={callback:a,next:null,prev:t};return o.prev?o.prev.next=o:e=o,function(){n&&null!==e&&(n=!1,o.next?o.next.prev=o.prev:t=o.prev,o.prev?o.prev.next=o.next:e=o.next)}}}}())}function l(){o--,a&&0===o&&(a(),a=void 0,n.clear(),n=h)}const c={addNestedSub:function(e){s();const t=n.subscribe(e);let a=!1;return()=>{a||(a=!0,t(),l())}},notifyNestedSubs:function(){n.notify()},handleChangeWrapper:r,isSubscribed:function(){return i},trySubscribe:function(){i||(i=!0,s())},tryUnsubscribe:function(){i&&(i=!1,l())},getListeners:()=>n};return c}var p=!("undefined"===typeof window||"undefined"===typeof window.document||"undefined"===typeof window.document.createElement)?r.useLayoutEffect:r.useEffect;Object.defineProperty,Object.getOwnPropertyNames,Object.getOwnPropertySymbols,Object.getOwnPropertyDescriptor,Object.getPrototypeOf,Object.prototype;var f=function(e){let{store:t,context:a,children:n,serverState:o,stabilityCheck:i="once",identityFunctionCheck:s="once"}=e;const l=r.useMemo((()=>{const e=m(t);return{store:t,subscription:e,getServerState:o?()=>o:void 0,stabilityCheck:i,identityFunctionCheck:s}}),[t,o,i,s]),c=r.useMemo((()=>t.getState()),[t]);p((()=>{const{subscription:e}=l;return e.onStateChange=e.notifyNestedSubs,e.trySubscribe(),c!==t.getState()&&e.notifyNestedSubs(),()=>{e.tryUnsubscribe(),e.onStateChange=void 0}}),[l,c]);const u=a||d;return r.createElement(u.Provider,{value:l},n)};var g;function y(e){return y="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},y(e)}function _(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function b(e){return b=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},b(e)}function v(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function w(e,t){return w=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},w(e,t)}function x(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}g=i.useSyncExternalStoreWithSelector,(e=>{e})(t.useSyncExternalStore);var k=function(e){function t(){var e,a;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);for(var n=arguments.length,o=new Array(n),i=0;i<n;i++)o[i]=arguments[i];return a=function(e,t){return!t||"object"!==y(t)&&"function"!==typeof t?v(e):t}(this,(e=b(t)).call.apply(e,[this].concat(o))),x(v(a),"state",{bootstrapped:!1}),x(v(a),"_unsubscribe",void 0),x(v(a),"handlePersistorState",(function(){a.props.persistor.getState().bootstrapped&&(a.props.onBeforeLift?Promise.resolve(a.props.onBeforeLift()).finally((function(){return a.setState({bootstrapped:!0})})):a.setState({bootstrapped:!0}),a._unsubscribe&&a._unsubscribe())})),a}var a,n,o;return function(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&w(e,t)}(t,e),a=t,(n=[{key:"componentDidMount",value:function(){this._unsubscribe=this.props.persistor.subscribe(this.handlePersistorState),this.handlePersistorState()}},{key:"componentWillUnmount",value:function(){this._unsubscribe&&this._unsubscribe()}},{key:"render",value:function(){return"function"===typeof this.props.children?this.props.children(this.state.bootstrapped):this.state.bootstrapped?this.props.children:this.props.loading}}])&&_(a.prototype,n),o&&_(a,o),t}(t.PureComponent);function C(e){return`Minified Redux error #${e}; visit https://redux.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}x(k,"defaultProps",{children:null,loading:null});var j=(()=>"function"===typeof Symbol&&Symbol.observable||"@@observable")(),S=()=>Math.random().toString(36).substring(7).split("").join("."),I={INIT:`@@redux/INIT${S()}`,REPLACE:`@@redux/REPLACE${S()}`,PROBE_UNKNOWN_ACTION:()=>`@@redux/PROBE_UNKNOWN_ACTION${S()}`};function A(e){if("object"!==typeof e||null===e)return!1;let t=e;for(;null!==Object.getPrototypeOf(t);)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t||null===Object.getPrototypeOf(e)}function N(e,t,a){if("function"!==typeof e)throw new Error(C(2));if("function"===typeof t&&"function"===typeof a||"function"===typeof a&&"function"===typeof arguments[3])throw new Error(C(0));if("function"===typeof t&&"undefined"===typeof a&&(a=t,t=void 0),"undefined"!==typeof a){if("function"!==typeof a)throw new Error(C(1));return a(N)(e,t)}let n=e,o=t,i=new Map,r=i,s=0,l=!1;function c(){r===i&&(r=new Map,i.forEach(((e,t)=>{r.set(t,e)})))}function d(){if(l)throw new Error(C(3));return o}function u(e){if("function"!==typeof e)throw new Error(C(4));if(l)throw new Error(C(5));let t=!0;c();const a=s++;return r.set(a,e),function(){if(t){if(l)throw new Error(C(6));t=!1,c(),r.delete(a),i=null}}}function h(e){if(!A(e))throw new Error(C(7));if("undefined"===typeof e.type)throw new Error(C(8));if("string"!==typeof e.type)throw new Error(C(17));if(l)throw new Error(C(9));try{l=!0,o=n(o,e)}finally{l=!1}return(i=r).forEach((e=>{e()})),e}h({type:I.INIT});return{dispatch:h,subscribe:u,getState:d,replaceReducer:function(e){if("function"!==typeof e)throw new Error(C(10));n=e,h({type:I.REPLACE})},[j]:function(){const e=u;return{subscribe(t){if("object"!==typeof t||null===t)throw new Error(C(11));function a(){const e=t;e.next&&e.next(d())}a();return{unsubscribe:e(a)}},[j](){return this}}}}}function E(e){const t=Object.keys(e),a={};for(let r=0;r<t.length;r++){const n=t[r];0,"function"===typeof e[n]&&(a[n]=e[n])}const n=Object.keys(a);let o;try{!function(e){Object.keys(e).forEach((t=>{const a=e[t];if("undefined"===typeof a(void 0,{type:I.INIT}))throw new Error(C(12));if("undefined"===typeof a(void 0,{type:I.PROBE_UNKNOWN_ACTION()}))throw new Error(C(13))}))}(a)}catch(i){o=i}return function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0;if(o)throw o;let i=!1;const r={};for(let o=0;o<n.length;o++){const s=n[o],l=a[s],c=e[s],d=l(c,t);if("undefined"===typeof d){t&&t.type;throw new Error(C(14))}r[s]=d,i=i||d!==c}return i=i||n.length!==Object.keys(e).length,i?r:e}}function T(){for(var e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];return 0===t.length?e=>e:1===t.length?t[0]:t.reduce(((e,t)=>function(){return e(t(...arguments))}))}var D=Symbol.for("immer-nothing"),R=Symbol.for("immer-draftable"),M=Symbol.for("immer-state");function O(e){throw new Error(`[Immer] minified error nr: ${e}. Full error at: https://bit.ly/3cXEKWf`)}var q=Object.getPrototypeOf;function G(e){return!!e&&!!e[M]}function P(e){return!!e&&(L(e)||Array.isArray(e)||!!e[R]||!!e.constructor?.[R]||K(e)||z(e))}var F=Object.prototype.constructor.toString();function L(e){if(!e||"object"!==typeof e)return!1;const t=q(e);if(null===t)return!0;const a=Object.hasOwnProperty.call(t,"constructor")&&t.constructor;return a===Object||"function"==typeof a&&Function.toString.call(a)===F}function W(e,t){0===B(e)?Reflect.ownKeys(e).forEach((a=>{t(a,e[a],e)})):e.forEach(((a,n)=>t(n,a,e)))}function B(e){const t=e[M];return t?t.type_:Array.isArray(e)?1:K(e)?2:z(e)?3:0}function H(e,t){return 2===B(e)?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function U(e,t,a){const n=B(e);2===n?e.set(t,a):3===n?e.add(a):e[t]=a}function K(e){return e instanceof Map}function z(e){return e instanceof Set}function V(e){return e.copy_||e.base_}function Y(e,t){if(K(e))return new Map(e);if(z(e))return new Set(e);if(Array.isArray(e))return Array.prototype.slice.call(e);const a=L(e);if(!0===t||"class_only"===t&&!a){const t=Object.getOwnPropertyDescriptors(e);delete t[M];let a=Reflect.ownKeys(t);for(let n=0;n<a.length;n++){const o=a[n],i=t[o];!1===i.writable&&(i.writable=!0,i.configurable=!0),(i.get||i.set)&&(t[o]={configurable:!0,writable:!0,enumerable:i.enumerable,value:e[o]})}return Object.create(q(e),t)}{const t=q(e);if(null!==t&&a)return{...e};const n=Object.create(t);return Object.assign(n,e)}}function J(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return Z(e)||G(e)||!P(e)||(B(e)>1&&Object.defineProperties(e,{set:{value:$},add:{value:$},clear:{value:$},delete:{value:$}}),Object.freeze(e),t&&Object.values(e).forEach((e=>J(e,!0)))),e}function $(){O(2)}function Z(e){return Object.isFrozen(e)}var Q,X={};function ee(e){const t=X[e];return t||O(0),t}function te(){return Q}function ae(e,t){t&&(ee("Patches"),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function ne(e){oe(e),e.drafts_.forEach(re),e.drafts_=null}function oe(e){e===Q&&(Q=e.parent_)}function ie(e){return Q={drafts_:[],parent_:Q,immer_:e,canAutoFreeze_:!0,unfinalizedDrafts_:0}}function re(e){const t=e[M];0===t.type_||1===t.type_?t.revoke_():t.revoked_=!0}function se(e,t){t.unfinalizedDrafts_=t.drafts_.length;const a=t.drafts_[0];return void 0!==e&&e!==a?(a[M].modified_&&(ne(t),O(4)),P(e)&&(e=le(t,e),t.parent_||de(t,e)),t.patches_&&ee("Patches").generateReplacementPatches_(a[M].base_,e,t.patches_,t.inversePatches_)):e=le(t,a,[]),ne(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e!==D?e:void 0}function le(e,t,a){if(Z(t))return t;const n=t[M];if(!n)return W(t,((o,i)=>ce(e,n,t,o,i,a))),t;if(n.scope_!==e)return t;if(!n.modified_)return de(e,n.base_,!0),n.base_;if(!n.finalized_){n.finalized_=!0,n.scope_.unfinalizedDrafts_--;const t=n.copy_;let o=t,i=!1;3===n.type_&&(o=new Set(t),t.clear(),i=!0),W(o,((o,r)=>ce(e,n,t,o,r,a,i))),de(e,t,!1),a&&e.patches_&&ee("Patches").generatePatches_(n,a,e.patches_,e.inversePatches_)}return n.copy_}function ce(e,t,a,n,o,i,r){if(G(o)){const r=le(e,o,i&&t&&3!==t.type_&&!H(t.assigned_,n)?i.concat(n):void 0);if(U(a,n,r),!G(r))return;e.canAutoFreeze_=!1}else r&&a.add(o);if(P(o)&&!Z(o)){if(!e.immer_.autoFreeze_&&e.unfinalizedDrafts_<1)return;le(e,o),t&&t.scope_.parent_||"symbol"===typeof n||!(K(a)?a.has(n):Object.prototype.propertyIsEnumerable.call(a,n))||de(e,o)}}function de(e,t){let a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&J(t,a)}var ue={get(e,t){if(t===M)return e;const a=V(e);if(!H(a,t))return function(e,t,a){const n=pe(t,a);return n?"value"in n?n.value:n.get?.call(e.draft_):void 0}(e,a,t);const n=a[t];return e.finalized_||!P(n)?n:n===me(e.base_,t)?(ge(e),e.copy_[t]=ye(n,e)):n},has(e,t){return t in V(e)},ownKeys(e){return Reflect.ownKeys(V(e))},set(e,t,a){const n=pe(V(e),t);if(n?.set)return n.set.call(e.draft_,a),!0;if(!e.modified_){const n=me(V(e),t),o=n?.[M];if(o&&o.base_===a)return e.copy_[t]=a,e.assigned_[t]=!1,!0;if(function(e,t){return e===t?0!==e||1/e===1/t:e!==e&&t!==t}(a,n)&&(void 0!==a||H(e.base_,t)))return!0;ge(e),fe(e)}return e.copy_[t]===a&&(void 0!==a||t in e.copy_)||Number.isNaN(a)&&Number.isNaN(e.copy_[t])||(e.copy_[t]=a,e.assigned_[t]=!0),!0},deleteProperty(e,t){return void 0!==me(e.base_,t)||t in e.base_?(e.assigned_[t]=!1,ge(e),fe(e)):delete e.assigned_[t],e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){const a=V(e),n=Reflect.getOwnPropertyDescriptor(a,t);return n?{writable:!0,configurable:1!==e.type_||"length"!==t,enumerable:n.enumerable,value:a[t]}:n},defineProperty(){O(11)},getPrototypeOf(e){return q(e.base_)},setPrototypeOf(){O(12)}},he={};function me(e,t){const a=e[M];return(a?V(a):e)[t]}function pe(e,t){if(!(t in e))return;let a=q(e);for(;a;){const e=Object.getOwnPropertyDescriptor(a,t);if(e)return e;a=q(a)}}function fe(e){e.modified_||(e.modified_=!0,e.parent_&&fe(e.parent_))}function ge(e){e.copy_||(e.copy_=Y(e.base_,e.scope_.immer_.useStrictShallowCopy_))}W(ue,((e,t)=>{he[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}})),he.deleteProperty=function(e,t){return he.set.call(this,e,t,void 0)},he.set=function(e,t,a){return ue.set.call(this,e[0],t,a,e[0])};function ye(e,t){const a=K(e)?ee("MapSet").proxyMap_(e,t):z(e)?ee("MapSet").proxySet_(e,t):function(e,t){const a=Array.isArray(e),n={type_:a?1:0,scope_:t?t.scope_:te(),modified_:!1,finalized_:!1,assigned_:{},parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1};let o=n,i=ue;a&&(o=[n],i=he);const{revoke:r,proxy:s}=Proxy.revocable(o,i);return n.draft_=s,n.revoke_=r,s}(e,t);return(t?t.scope_:te()).drafts_.push(a),a}function _e(e){return G(e)||O(10),be(e)}function be(e){if(!P(e)||Z(e))return e;const t=e[M];let a;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,a=Y(e,t.scope_.immer_.useStrictShallowCopy_)}else a=Y(e,!0);return W(a,((e,t)=>{U(a,e,be(t))})),t&&(t.finalized_=!1),a}var ve=new class{constructor(e){var t=this;this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.produce=(e,t,a)=>{if("function"===typeof e&&"function"!==typeof t){const a=t;t=e;const n=this;return function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:a;for(var o=arguments.length,i=new Array(o>1?o-1:0),r=1;r<o;r++)i[r-1]=arguments[r];return n.produce(e,(e=>t.call(this,e,...i)))}}let n;if("function"!==typeof t&&O(6),void 0!==a&&"function"!==typeof a&&O(7),P(e)){const o=ie(this),i=ye(e,void 0);let r=!0;try{n=t(i),r=!1}finally{r?ne(o):oe(o)}return ae(o,a),se(n,o)}if(!e||"object"!==typeof e){if(n=t(e),void 0===n&&(n=e),n===D&&(n=void 0),this.autoFreeze_&&J(n,!0),a){const t=[],o=[];ee("Patches").generateReplacementPatches_(e,n,t,o),a(t,o)}return n}O(1)},this.produceWithPatches=(e,a)=>{if("function"===typeof e)return function(a){for(var n=arguments.length,o=new Array(n>1?n-1:0),i=1;i<n;i++)o[i-1]=arguments[i];return t.produceWithPatches(a,(t=>e(t,...o)))};let n,o;const i=this.produce(e,a,((e,t)=>{n=e,o=t}));return[i,n,o]},"boolean"===typeof e?.autoFreeze&&this.setAutoFreeze(e.autoFreeze),"boolean"===typeof e?.useStrictShallowCopy&&this.setUseStrictShallowCopy(e.useStrictShallowCopy)}createDraft(e){P(e)||O(8),G(e)&&(e=_e(e));const t=ie(this),a=ye(e,void 0);return a[M].isManual_=!0,oe(t),a}finishDraft(e,t){const a=e&&e[M];a&&a.isManual_||O(9);const{scope_:n}=a;return ae(n,t),se(void 0,n)}setAutoFreeze(e){this.autoFreeze_=e}setUseStrictShallowCopy(e){this.useStrictShallowCopy_=e}applyPatches(e,t){let a;for(a=t.length-1;a>=0;a--){const n=t[a];if(0===n.path.length&&"replace"===n.op){e=n.value;break}}a>-1&&(t=t.slice(a+1));const n=ee("Patches").applyPatches_;return G(e)?n(e,t):this.produce(e,(e=>n(e,t)))}},we=ve.produce;function xe(e){if("function"!==typeof e)throw new TypeError(arguments.length>1&&void 0!==arguments[1]?arguments[1]:"expected a function, instead received "+typeof e)}var ke=e=>Array.isArray(e)?e:[e];function Ce(e){const t=Array.isArray(e[0])?e[0]:e;return function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"expected all items to be functions, instead received the following types: ";if(!e.every((e=>"function"===typeof e))){const a=e.map((e=>"function"===typeof e?`function ${e.name||"unnamed"}()`:typeof e)).join(", ");throw new TypeError(`${t}[${a}]`)}}(t,"createSelector expects all input-selectors to be functions, but received the following types: "),t}Symbol(),Object.getPrototypeOf({});var je="undefined"!==typeof WeakRef?WeakRef:class{constructor(e){this.value=e}deref(){return this.value}},Se=0,Ie=1;function Ae(){return{s:Se,v:void 0,o:null,p:null}}function Ne(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=Ae();const{resultEqualityCheck:n}=t;let o,i=0;function r(){let t=a;const{length:r}=arguments;for(let e=0,a=r;e<a;e++){const a=arguments[e];if("function"===typeof a||"object"===typeof a&&null!==a){let e=t.o;null===e&&(t.o=e=new WeakMap);const n=e.get(a);void 0===n?(t=Ae(),e.set(a,t)):t=n}else{let e=t.p;null===e&&(t.p=e=new Map);const n=e.get(a);void 0===n?(t=Ae(),e.set(a,t)):t=n}}const s=t;let l;if(t.s===Ie)l=t.v;else if(l=e.apply(null,arguments),i++,n){const e=o?.deref?.()??o;null!=e&&n(e,l)&&(l=e,0!==i&&i--);o="object"===typeof l&&null!==l||"function"===typeof l?new je(l):l}return s.s=Ie,s.v=l,l}return r.clearCache=()=>{a=Ae(),r.resetResultsCount()},r.resultsCount=()=>i,r.resetResultsCount=()=>{i=0},r}function Ee(e){for(var t=arguments.length,a=new Array(t>1?t-1:0),n=1;n<t;n++)a[n-1]=arguments[n];const o="function"===typeof e?{memoize:e,memoizeOptions:a}:e,i=function(){for(var e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];let n,i=0,r=0,s={},l=t.pop();"object"===typeof l&&(s=l,l=t.pop()),xe(l,`createSelector expects an output function after the inputs, but received: [${typeof l}]`);const c={...o,...s},{memoize:d,memoizeOptions:u=[],argsMemoize:h=Ne,argsMemoizeOptions:m=[],devModeChecks:p={}}=c,f=ke(u),g=ke(m),y=Ce(t),_=d((function(){return i++,l.apply(null,arguments)}),...f);const b=h((function(){r++;const e=function(e,t){const a=[],{length:n}=e;for(let o=0;o<n;o++)a.push(e[o].apply(null,t));return a}(y,arguments);return n=_.apply(null,e),n}),...g);return Object.assign(b,{resultFunc:l,memoizedResultFunc:_,dependencies:y,dependencyRecomputations:()=>r,resetDependencyRecomputations:()=>{r=0},lastResult:()=>n,recomputations:()=>i,resetRecomputations:()=>{i=0},memoize:d,argsMemoize:h})};return Object.assign(i,{withTypes:()=>i}),i}var Te=Ee(Ne),De=Object.assign((function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Te;!function(e){if("object"!==typeof e)throw new TypeError(arguments.length>1&&void 0!==arguments[1]?arguments[1]:"expected an object, instead received "+typeof e)}(e,"createStructuredSelector expects first argument to be an object where each property is a selector, instead received a "+typeof e);const a=Object.keys(e),n=a.map((t=>e[t])),o=t(n,(function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.reduce(((e,t,n)=>(e[a[n]]=t,e)),{})}));return o}),{withTypes:()=>De});function Re(e){return t=>{let{dispatch:a,getState:n}=t;return t=>o=>"function"===typeof o?o(a,n,e):t(o)}}var Me=Re(),Oe=Re,qe=(function(){const e=Ee(...arguments),t=Object.assign((function(){const t=e(...arguments),a=function(e){for(var a=arguments.length,n=new Array(a>1?a-1:0),o=1;o<a;o++)n[o-1]=arguments[o];return t(G(e)?_e(e):e,...n)};return Object.assign(a,t),a}),{withTypes:()=>t})}(Ne),"undefined"!==typeof window&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(0!==arguments.length)return"object"===typeof arguments[0]?T:T.apply(null,arguments)});"undefined"!==typeof window&&window.__REDUX_DEVTOOLS_EXTENSION__&&window.__REDUX_DEVTOOLS_EXTENSION__;function Ge(e,t){function a(){if(t){let a=t(...arguments);if(!a)throw new Error(et(0));return{type:e,payload:a.payload,..."meta"in a&&{meta:a.meta},..."error"in a&&{error:a.error}}}return{type:e,payload:arguments.length<=0?void 0:arguments[0]}}return a.toString=()=>`${e}`,a.type=e,a.match=t=>function(e){return A(e)&&"type"in e&&"string"===typeof e.type}(t)&&t.type===e,a}var Pe=class e extends Array{constructor(){super(...arguments),Object.setPrototypeOf(this,e.prototype)}static get[Symbol.species](){return e}concat(){for(var e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];return super.concat.apply(this,t)}prepend(){for(var t=arguments.length,a=new Array(t),n=0;n<t;n++)a[n]=arguments[n];return 1===a.length&&Array.isArray(a[0])?new e(...a[0].concat(this)):new e(...a.concat(this))}};function Fe(e){return P(e)?we(e,(()=>{})):e}var Le="RTK_autoBatch",We=e=>t=>{setTimeout(t,e)},Be="undefined"!==typeof window&&window.requestAnimationFrame?window.requestAnimationFrame:We(10),He=e=>function(t){const{autoBatch:a=!0}=t??{};let n=new Pe(e);return a&&n.push(function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{type:"raf"};return t=>function(){const a=t(...arguments);let n=!0,o=!1,i=!1;const r=new Set,s="tick"===e.type?queueMicrotask:"raf"===e.type?Be:"callback"===e.type?e.queueNotification:We(e.timeout),l=()=>{i=!1,o&&(o=!1,r.forEach((e=>e())))};return Object.assign({},a,{subscribe(e){const t=a.subscribe((()=>n&&e()));return r.add(e),()=>{t(),r.delete(e)}},dispatch(e){try{return n=!e?.meta?.[Le],o=!n,o&&(i||(i=!0,s(l))),a.dispatch(e)}finally{n=!0}}})}}("object"===typeof a?a:void 0)),n};function Ue(e){const t={},a=[];let n;const o={addCase(e,a){const n="string"===typeof e?e:e.type;if(!n)throw new Error(et(28));if(n in t)throw new Error(et(29));return t[n]=a,o},addMatcher(e,t){return a.push({matcher:e,reducer:t}),o},addDefaultCase(e){return n=e,o}};return e(o),[t,a,n]}function Ke(e,t){let a,[n,o,i]=Ue(t);if(function(e){return"function"===typeof e}(e))a=()=>Fe(e());else{const t=Fe(e);a=()=>t}function r(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:a(),t=arguments.length>1?arguments[1]:void 0,r=[n[t.type],...o.filter((e=>{let{matcher:a}=e;return a(t)})).map((e=>{let{reducer:t}=e;return t}))];return 0===r.filter((e=>!!e)).length&&(r=[i]),r.reduce(((e,a)=>{if(a){if(G(e)){const n=a(e,t);return void 0===n?e:n}if(P(e))return we(e,(e=>a(e,t)));{const n=a(e,t);if(void 0===n){if(null===e)return e;throw new Error(et(9))}return n}}return e}),e)}return r.getInitialState=a,r}var ze=function(){let e="",t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:21;for(;t--;)e+="ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW"[64*Math.random()|0];return e};var Ve=(e,t)=>{if("function"!==typeof e)throw new Error(et(32))};var{assign:Ye}=Object,Je="listenerMiddleware",$e=e=>{let{type:t,actionCreator:a,matcher:n,predicate:o,effect:i}=e;if(t)o=Ge(t).match;else if(a)t=a.type,o=a.match;else if(n)o=n;else if(!o)throw new Error(et(21));return Ve(i),{predicate:o,type:t,effect:i}},Ze=Object.assign((e=>{const{type:t,predicate:a,effect:n}=$e(e);return{id:ze(),effect:n,type:t,predicate:a,pending:new Set,unsubscribe:()=>{throw new Error(et(22))}}}),{withTypes:()=>Ze}),Qe=Object.assign(Ge(`${Je}/add`),{withTypes:()=>Qe}),Xe=(Ge(`${Je}/removeAll`),Object.assign(Ge(`${Je}/remove`),{withTypes:()=>Xe}));Symbol.for("rtk-state-proxy-original");function et(e){return`Minified Redux Toolkit error #${e}; visit https://redux-toolkit.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}var tt="persist:",at="persist/FLUSH",nt="persist/REHYDRATE",ot="persist/PAUSE",it="persist/PERSIST",rt="persist/PURGE",st="persist/REGISTER";function lt(e){return lt="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},lt(e)}function ct(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function dt(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function ut(e,t,a,n){n.debug;var o=function(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?ct(a,!0).forEach((function(t){dt(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):ct(a).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}({},a);return e&&"object"===lt(e)&&Object.keys(e).forEach((function(n){"_persist"!==n&&t[n]===a[n]&&(o[n]=e[n])})),o}function ht(e){var t,a=e.blacklist||null,n=e.whitelist||null,o=e.transforms||[],i=e.throttle||0,r="".concat(void 0!==e.keyPrefix?e.keyPrefix:tt).concat(e.key),s=e.storage;t=!1===e.serialize?function(e){return e}:"function"===typeof e.serialize?e.serialize:mt;var l=e.writeFailHandler||null,c={},d={},u=[],h=null,m=null;function p(){if(0===u.length)return h&&clearInterval(h),void(h=null);var e=u.shift(),a=o.reduce((function(t,a){return a.in(t,e,c)}),c[e]);if(void 0!==a)try{d[e]=t(a)}catch(n){console.error("redux-persist/createPersistoid: error serializing state",n)}else delete d[e];0===u.length&&(Object.keys(d).forEach((function(e){void 0===c[e]&&delete d[e]})),m=s.setItem(r,t(d)).catch(g))}function f(e){return(!n||-1!==n.indexOf(e)||"_persist"===e)&&(!a||-1===a.indexOf(e))}function g(e){l&&l(e)}return{update:function(e){Object.keys(e).forEach((function(t){f(t)&&c[t]!==e[t]&&-1===u.indexOf(t)&&u.push(t)})),Object.keys(c).forEach((function(t){void 0===e[t]&&f(t)&&-1===u.indexOf(t)&&void 0!==c[t]&&u.push(t)})),null===h&&(h=setInterval(p,i)),c=e},flush:function(){for(;0!==u.length;)p();return m||Promise.resolve()}}}function mt(e){return JSON.stringify(e)}function pt(e){var t,a=e.transforms||[],n="".concat(void 0!==e.keyPrefix?e.keyPrefix:tt).concat(e.key),o=e.storage;e.debug;return t=!1===e.deserialize?function(e){return e}:"function"===typeof e.deserialize?e.deserialize:ft,o.getItem(n).then((function(e){if(e)try{var n={},o=t(e);return Object.keys(o).forEach((function(e){n[e]=a.reduceRight((function(t,a){return a.out(t,e,o)}),t(o[e]))})),n}catch(i){throw i}}))}function ft(e){return JSON.parse(e)}function gt(e){0}function yt(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function _t(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?yt(a,!0).forEach((function(t){bt(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):yt(a).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function bt(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function vt(e,t){if(null==e)return{};var a,n,o=function(e,t){if(null==e)return{};var a,n,o={},i=Object.keys(e);for(n=0;n<i.length;n++)a=i[n],t.indexOf(a)>=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)a=i[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}function wt(e){return function(e){if(Array.isArray(e)){for(var t=0,a=new Array(e.length);t<e.length;t++)a[t]=e[t];return a}}(e)||function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}function xt(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function kt(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?xt(a,!0).forEach((function(t){Ct(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):xt(a).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function Ct(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}var jt={registry:[],bootstrapped:!1},St=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:jt,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case st:return kt({},e,{registry:[].concat(wt(e.registry),[t.key])});case nt:var a=e.registry.indexOf(t.key),n=wt(e.registry);return n.splice(a,1),kt({},e,{registry:n,bootstrapped:0===n.length});default:return e}};var It=a(8901);const At=Ge("data/setContents");const Nt=E({data:Ke({contents:[]},(e=>{e.addCase(At,((e,t)=>{e.contents=t.payload}))}))}),Et=function(e,t){var a=void 0!==e.version?e.version:-1,n=(e.debug,void 0===e.stateReconciler?ut:e.stateReconciler),o=e.getStoredState||pt,i=void 0!==e.timeout?e.timeout:5e3,r=null,s=!1,l=!0,c=function(e){return e._persist.rehydrated&&r&&!l&&r.update(e),e};return function(d,u){var h=d||{},m=h._persist,p=vt(h,["_persist"]);if(u.type===it){var f=!1,g=function(t,a){f||(u.rehydrate(e.key,t,a),f=!0)};if(i&&setTimeout((function(){!f&&g(void 0,new Error('redux-persist: persist timed out for persist key "'.concat(e.key,'"')))}),i),l=!1,r||(r=ht(e)),m)return _t({},t(p,u),{_persist:m});if("function"!==typeof u.rehydrate||"function"!==typeof u.register)throw new Error("redux-persist: either rehydrate or register is not a function on the PERSIST action. This can happen if the action is being replayed. This is an unexplored use case, please open an issue and we will figure out a resolution.");return u.register(e.key),o(e).then((function(t){var n=e.migrate||function(e,t){return Promise.resolve(e)};n(t,a).then((function(e){g(e)}),(function(e){g(void 0,e)}))}),(function(e){g(void 0,e)})),_t({},t(p,u),{_persist:{version:a,rehydrated:!1}})}if(u.type===rt)return s=!0,u.result(function(e){var t=e.storage,a="".concat(void 0!==e.keyPrefix?e.keyPrefix:tt).concat(e.key);return t.removeItem(a,gt)}(e)),_t({},t(p,u),{_persist:m});if(u.type===at)return u.result(r&&r.flush()),_t({},t(p,u),{_persist:m});if(u.type===ot)l=!0;else if(u.type===nt){if(s)return _t({},p,{_persist:_t({},m,{rehydrated:!0})});if(u.key===e.key){var y=t(p,u),_=u.payload,b=_t({},!1!==n&&void 0!==_?n(_,d,y,e):y,{_persist:_t({},m,{rehydrated:!0})});return c(b)}}if(!m)return t(d,u);var v=t(p,u);return v===p?d:c(_t({},v,{_persist:m}))}}({key:"root",storage:It.A,whitelist:["data"]},Nt),Tt=function(e){const t=function(e){const{thunk:t=!0,immutableCheck:a=!0,serializableCheck:n=!0,actionCreatorCheck:o=!0}=e??{};let i=new Pe;return t&&(function(e){return"boolean"===typeof e}(t)?i.push(Me):i.push(Oe(t.extraArgument))),i},{reducer:a,middleware:n,devTools:o=!0,preloadedState:i,enhancers:r}=e||{};let s,l;if("function"===typeof a)s=a;else{if(!A(a))throw new Error(et(1));s=E(a)}l="function"===typeof n?n(t):t();let c=T;o&&(c=qe({trace:!1,..."object"===typeof o&&o}));const d=function(){for(var e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];return e=>(a,n)=>{const o=e(a,n);let i=()=>{throw new Error(C(15))};const r={getState:o.getState,dispatch:function(e){for(var t=arguments.length,a=new Array(t>1?t-1:0),n=1;n<t;n++)a[n-1]=arguments[n];return i(e,...a)}},s=t.map((e=>e(r)));return i=T(...s)(o.dispatch),{...o,dispatch:i}}}(...l),u=He(d);let h="function"===typeof r?r(u):u();return N(s,i,c(...h))}({reducer:Et,middleware:e=>e({serializableCheck:{ignoredActions:[at,nt,ot,it,rt,st]}})}),Dt=function(e,t,a){var n=a||!1,o=N(St,jt,t&&t.enhancer?t.enhancer:void 0),i=function(e){o.dispatch({type:st,key:e})},r=function(t,a,i){var r={type:nt,payload:a,err:i,key:t};e.dispatch(r),o.dispatch(r),n&&s.getState().bootstrapped&&(n(),n=!1)},s=kt({},o,{purge:function(){var t=[];return e.dispatch({type:rt,result:function(e){t.push(e)}}),Promise.all(t)},flush:function(){var t=[];return e.dispatch({type:at,result:function(e){t.push(e)}}),Promise.all(t)},pause:function(){e.dispatch({type:ot})},persist:function(){e.dispatch({type:it,register:i,rehydrate:r})}});return t&&t.manualPersist||s.persist(),s}(Tt),Rt=e=>{let t;const a=new Set,n=(e,n)=>{const o="function"===typeof e?e(t):e;if(!Object.is(o,t)){const e=t;t=(null!=n?n:"object"!==typeof o||null===o)?o:Object.assign({},t,o),a.forEach((a=>a(t,e)))}},o=()=>t,i={setState:n,getState:o,getInitialState:()=>r,subscribe:e=>(a.add(e),()=>a.delete(e)),destroy:()=>{console.warn("[DEPRECATED] The `destroy` method will be unsupported in a future version. Instead use unsubscribe function returned by subscribe. Everything will be garbage-collected if store is garbage-collected."),a.clear()}},r=t=e(n,o,i);return i},Mt=e=>e?Rt(e):Rt;var Ot=a(8443);const{useDebugValue:qt}=t,{useSyncExternalStoreWithSelector:Gt}=Ot;let Pt=!1;const Ft=e=>e;const Lt=e=>{"function"!==typeof e&&console.warn("[DEPRECATED] Passing a vanilla store will be unsupported in a future version. Instead use `import { useStore } from 'zustand'`.");const t="function"===typeof e?Mt(e):e,a=(e,a)=>function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Ft,a=arguments.length>2?arguments[2]:void 0;a&&!Pt&&(console.warn("[DEPRECATED] Use `createWithEqualityFn` instead of `create` or use `useStoreWithEqualityFn` instead of `useStore`. They can be imported from 'zustand/traditional'. https://github.com/pmndrs/zustand/discussions/1937"),Pt=!0);const n=Gt(e.subscribe,e.getState,e.getServerState||e.getInitialState,t,a);return qt(n),n}(t,e,a);return Object.assign(a,t),a},Wt=e=>e?Lt(e):Lt;const Bt=Wt((e=>({ContentPacks:[],SetFromCookies:()=>{e((e=>({ContentPacks:Ht()})))}})));function Ht(){const e=localStorage.getItem("contentpackstorage_sitename");try{return JSON.parse(e||"")}catch(t){}return[]}var Ut=a(7950),Kt=a.t(Ut,2),zt=a(3216),Vt=a(1387);function Yt(){return Yt=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},Yt.apply(this,arguments)}function Jt(e,t){if(null==e)return{};var a,n,o={},i=Object.keys(e);for(n=0;n<i.length;n++)a=i[n],t.indexOf(a)>=0||(o[a]=e[a]);return o}new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);const $t=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","unstable_viewTransition"];try{window.__reactRouterVersion="6"}catch(xC){}new Map;const Zt=n.startTransition;Kt.flushSync,n.useId;function Qt(e){let{basename:a,children:n,future:o,window:i}=e,r=t.useRef();null==r.current&&(r.current=(0,Vt.zR)({window:i,v5Compat:!0}));let s=r.current,[l,c]=t.useState({action:s.action,location:s.location}),{v7_startTransition:d}=o||{},u=t.useCallback((e=>{d&&Zt?Zt((()=>c(e))):c(e)}),[c,d]);return t.useLayoutEffect((()=>s.listen(u)),[s,u]),t.createElement(zt.Ix,{basename:a,children:n,location:l.location,navigationType:l.action,navigator:s,future:o})}const Xt="undefined"!==typeof window&&"undefined"!==typeof window.document&&"undefined"!==typeof window.document.createElement,ea=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,ta=t.forwardRef((function(e,a){let n,{onClick:o,relative:i,reloadDocument:r,replace:s,state:l,target:c,to:d,preventScrollReset:u,unstable_viewTransition:h}=e,m=Jt(e,$t),{basename:p}=t.useContext(zt.jb),f=!1;if("string"===typeof d&&ea.test(d)&&(n=d,Xt))try{let e=new URL(window.location.href),t=d.startsWith("//")?new URL(e.protocol+d):new URL(d),a=(0,Vt.pb)(t.pathname,p);t.origin===e.origin&&null!=a?d=a+t.search+t.hash:f=!0}catch(xC){}let g=(0,zt.$P)(d,{relative:i}),y=function(e,a){let{target:n,replace:o,state:i,preventScrollReset:r,relative:s,unstable_viewTransition:l}=void 0===a?{}:a,c=(0,zt.Zp)(),d=(0,zt.zy)(),u=(0,zt.x$)(e,{relative:s});return t.useCallback((t=>{if(function(e,t){return 0===e.button&&(!t||"_self"===t)&&!function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)}(t,n)){t.preventDefault();let a=void 0!==o?o:(0,Vt.AO)(d)===(0,Vt.AO)(u);c(e,{replace:a,state:i,preventScrollReset:r,relative:s,unstable_viewTransition:l})}}),[d,c,u,o,i,n,e,r,s,l])}(d,{replace:s,state:l,target:c,preventScrollReset:u,relative:i,unstable_viewTransition:h});return t.createElement("a",Yt({},m,{href:n||g,onClick:f||r?o:function(e){o&&o(e),e.defaultPrevented||y(e)},ref:a,target:c}))}));var aa,na;(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})(aa||(aa={})),function(e){e.UseFetcher="useFetcher",e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"}(na||(na={}));const oa="/compendium/",ia="/compendium/*",ra="/warband",sa="/warband/*",la="/campaigns",ca="/campaigns/:id/settings",da="/games",ua="/",ha="/login/",ma="/profile/:id",pa="/profile/:id/settings",fa="/game/",ga="/campaigns/",ya="/rules/:itemid?",_a="/campaign-rules/:itemid?",ba="/errata-faq/:itemid?",va="/keyword/",wa="/warbands/:itemid?/:subitemid?",xa="/model/",ka="/battlekit/:category?",Ca="/scenarios/:itemid?",ja="/exploration-locations/:itemid?",Sa="/injury/",Ia="/patrons/:itemid?",Aa="/skills/",Na="/new/",Ea="/detail/:itemid",Ta="/page/legal-notice",Da="/page/privacy",Ra="/page/terms",Ma="/page/contact",Oa="/page/withdrawal",qa="/page/about",Ga="/page/premium-membership",Pa="/page/supporter-packs",Fa="/page/collaboration",La="/page/plan-selection",Wa="/page/creator-application",Ba="/blog",Ha="/page/*",Ua="https://trench-companion.com";a(2565);var Ka=a(363),za=a(6184);class Va{constructor(e,t){this.HeldItem=void 0,this.Colour=void 0,this.IsActive=!1,this.HeldItem=e,this.Colour=t}SwitchStates(){this.IsActive?this.IsActive=!1:this.IsActive=!0}}var Ya=a(7796),Ja=a(9353),$a=a(7479),Za=a(7880),Qa=a(1444),Xa=a(6435),en=a(5204),tn=a(6298),an=a(7120),nn=a(6498);const on={glossary:{searchId:"glossary",pageName:"Glossary",sort:["name","id"],async postSearch(e){e.CleanupItems(),e.CleanupCollection();let t=0;for(e.dataresults.sort((0,za.Ah)(["name","id"])),t=0;t<e.dataresults.length;t++){const a=Ya.GlossaryRuleFactory.CreateGlossaryRule(e.dataresults[t]),n=new Va(a,(0,za.LW)("default"));e.itemcollection.push(n)}}},keyword:{searchId:"keyword",pageName:"Keyword",sort:["name","id"],async postSearch(e){e.CleanupItems(),e.CleanupCollection();let t=0;for(e.dataresults.sort((0,za.Ah)(["name","id"])),t=0;t<e.dataresults.length;t++){const a=Ja.KeywordFactory.CreateKeyword(e.dataresults[t],null),n=new Va(a,(0,za.LW)("default"));e.itemcollection.push(n)}}},model:{searchId:"model",pageName:"model",sort:["name","id"],async postSearch(e){e.CleanupItems(),e.CleanupCollection();let t=0;for(e.dataresults.sort((0,za.Ah)(["name","id"])),t=0;t<e.dataresults.length;t++){const a=await $a.ModelFactory.CreateModelCollection(e.dataresults[t],null),n=new Va(a,(0,za.LW)(a.Team));e.itemcollection.push(n)}}},armoury:{searchId:"equipment",pageName:"armoury",sort:["name","id"],async postSearch(e){e.CleanupItems(),e.CleanupCollection();let t=0;for(e.dataresults.sort((0,za.Ah)(["name","id"])),t=0;t<e.dataresults.length;t++){const a=await Za.EquipmentFactory.CreateEquipment(e.dataresults[t],null);if(!(0,za.Kg)(a.Tags,"model")){const t=new Va(a,(0,za.LW)("default"));e.itemcollection.push(t)}}}},faction:{searchId:"faction",pageName:"faction",sort:["name","id"],async postSearch(e){e.CleanupItems(),e.CleanupCollection();let t=0;for(e.dataresults.sort((0,za.Ah)(["name","id"])),t=0;t<e.dataresults.length;t++){const a=await Qa.FactionFactory.CreateFactionCollection(e.dataresults[t],null),n=new Va(a,(0,za.LW)(a.Team));e.itemcollection.push(n)}}},scenario:{searchId:"scenario",pageName:"scenarios",sort:["name","id"],async postSearch(e){e.CleanupItems(),e.CleanupCollection();let t=0;for(e.dataresults.sort((0,za.Ah)(["name","id"])),t=0;t<e.dataresults.length;t++){const a=await Xa.ScenarioFactory.CreateScenario(e.dataresults[t],null),n=new Va(a,(0,za.LW)("default"));e.itemcollection.push(n)}}},gamerule:{searchId:"gamerule",pageName:"gamerule",sort:["item_index"],async postSearch(e){e.CleanupItems(),e.CleanupCollection();let t=0;for(e.dataresults.sort((0,za.Ah)(["item_index"])),t=0;t<e.dataresults.length;t++){const a=await en.BookRuleFactory.CreateBookRule(e.dataresults[t],null),n=new Va(a,(0,za.LW)("default"));e.itemcollection.push(n)}}},errata:{searchId:"errata",pageName:"errata",sort:["item_index"],async postSearch(e){e.CleanupItems(),e.CleanupCollection();let t=0;for(e.dataresults.sort((0,za.Ah)(["item_index"])),t=0;t<e.dataresults.length;t++){const a=await en.BookRuleFactory.CreateBookRule(e.dataresults[t],null),n=new Va(a,(0,za.LW)("default"));e.itemcollection.push(n)}}},campaignrule:{searchId:"campaignrule",pageName:"campaignrule",sort:["item_index"],async postSearch(e){e.CleanupItems(),e.CleanupCollection();let t=0;for(e.dataresults.sort((0,za.Ah)(["item_index"])),t=0;t<e.dataresults.length;t++){const a=await en.BookRuleFactory.CreateBookRule(e.dataresults[t],null),n=new Va(a,(0,za.LW)("default"));e.itemcollection.push(n)}}},explorationtable:{searchId:"explorationtable",pageName:"exploration-locations",sort:["rarity","id"],async postSearch(e){e.CleanupItems(),e.CleanupCollection();let t=0;for(e.dataresults.sort((0,za.Ah)(["rarity","id"])),t=0;t<e.dataresults.length;t++){const a=await tn.ExplorationFactory.CreateExplorationTable(e.dataresults[t],null),n=new Va(a,(0,za.LW)("default"));e.itemcollection.push(n)}}},injury:{searchId:"injury",pageName:"injury",sort:["table_val"],async postSearch(e){e.CleanupItems(),e.CleanupCollection();let t=0;for(e.dataresults.sort((0,za.Ah)(["table_val"])),t=0;t<e.dataresults.length;t++){const a=await an.InjuryFactory.CreateInjury(e.dataresults[t],null),n=new Va(a,(0,za.LW)("default"));e.itemcollection.push(n)}}},skillgroup:{searchId:"skillgroup",pageName:"skillgroup",sort:["name","id"],async postSearch(e){e.CleanupItems(),e.CleanupCollection();let t=0;for(e.dataresults.sort((0,za.Ah)(["name","id"])),t=0;t<e.dataresults.length;t++){const a=await nn.SkillFactory.CreateSkillGroup(e.dataresults[t],null),n=new Va(a,(0,za.LW)("default"));e.itemcollection.push(n)}}},patron:{searchId:"patron",pageName:"patron",sort:["name","id"],async postSearch(e){e.CleanupItems(),e.CleanupCollection();let t=0;for(e.dataresults.sort((0,za.Ah)(["name","id"])),t=0;t<e.dataresults.length;t++){const a=await nn.SkillFactory.CreatePatron(e.dataresults[t],null),n=new Va(a,(0,za.LW)("default"));e.itemcollection.push(n)}}}};class rn{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"ver_default";this.searchParam={},this.dataresults=[],this.itemcollection=[],this.ObjectList=[],this.CollectionType=void 0,this.TargetItem=null,this.Version=void 0,this.ObjectList=[],this.CollectionType=on[e],this.Version=t}UpdateTargetItem(e){this.TargetItem=e}UpdateSearchParams(e){this.searchParam=e}async RunSearch(){this.dataresults=Ka.D.MakeRequest(this.searchParam),void 0==this.dataresults.length&&(this.dataresults=[this.dataresults]);const e=[],t=[];for(let a=0;a<this.dataresults.length;a++)e.includes(this.dataresults[a].id)||(t.push(this.dataresults[a]),e.push(this.dataresults[a].id));this.dataresults=t,this.CollectionType&&await this.CollectionType.postSearch(this)}async RunMultiUnitSearch(e){this.dataresults=Ka.D.MakeRequest(this.searchParam),void 0==this.dataresults.length&&(this.dataresults=[this.dataresults]);const t=[],a=[];for(let l=0;l<this.dataresults.length;l++)t.includes(this.dataresults[l].id)||(a.push(this.dataresults[l]),t.push(this.dataresults[l].id));const n=this.searchParam;n.searchparam.type=e.item_type;const o=Ka.D.MakeRequest(n),i=[],r=[];for(let l=0;l<this.dataresults.length;l++)r.push(this.dataresults[l].id);for(let l=0;l<o.length;l++){const t=o[l],a=e.base_var_key;void 0!=t[a]&&(r.includes(o[l][a])||i.push(t[a]))}const s=Array.from(new Set([...i]));for(let l=0;l<s.length;l++){const t={searchtype:"complex",searchparam:{type:e.base_var_type,request:{operator:"or",terms:[{item:"id",value:s[l],equals:!0,strict:!0}],subparams:[]}}},a=Ka.D.MakeRequest(t);for(let e=0;e<a.length;e++)this.dataresults.push(a[e])}this.CollectionType&&await this.CollectionType.postSearch(this)}GetResults(){return this.dataresults}GetParam(){return this.searchParam}destructor(){this.CleanupItems()}CleanupItems(){let e=0;for(e=0;e<this.ObjectList.length;e++)delete this.ObjectList[e];this.ObjectList=[]}CleanupCollection(){let e=0;for(e=0;e<this.itemcollection.length;e++)delete this.itemcollection[e];this.itemcollection=[]}ReturnObjects(){return this.UpdateList(),this.ObjectList}ReturnItems(){return this.itemcollection}UpdateList(){let e=0;for(this.ObjectList=[],e=0;e<this.itemcollection.length;e++)this.itemcollection[e].IsActive&&this.ObjectList.push(this.itemcollection[e].HeldItem)}}class sn{constructor(e){this.Group=void 0,this.Val=void 0,this.IsStrict=void 0,this.Group=e.group,this.Val=e.val,this.IsStrict=e.isstrict}}class ln{constructor(e){this.Group=void 0,this.IsActive=void 0,this.DoInclude=void 0,this.Name=void 0,this.Group=e.group,this.IsActive=e.isactive,this.DoInclude=e.doinclude,this.Name=e.name}}class cn{constructor(e){this.Group=void 0,this.TagType=void 0,this.TagVal=void 0,this.Group=e.group,this.TagType=new ln(e.tagtype),this.TagVal=new sn(e.tagval)}}const dn={glossary:{searchId:"glossary",findTags(){return[]},findMisc(){return[]},findText(){return[]}},keyword:{searchId:"keyword",findTags(){const e=[],t=Ka.D.MakeRequest({searchtype:"tags",searchparam:{type:"keyword"}}).sort();let a=0;for(a=0;a<t.length;a++){const n={group:"tags",val:"",isstrict:!1},o={group:"tags",isactive:!1,doinclude:!1,name:t[a]},i=new cn({group:"tags",tagtype:o,tagval:n});e.push(i)}return e},findMisc(){const e=[],t=["source"];t.sort();let a=0;for(a=0;a<t.length;a++){const n=Ka.D.MakeRequest({searchtype:"keyvalues",searchparam:{type:"keyword",id:t[a]}}).sort();let o=0;for(o=0;o<n.length;o++){const i={group:t[a],isactive:!1,doinclude:!1,name:n[o]},r=new ln(i);e.push(r)}}return e},findText(){return[new sn({group:"name",val:"",isstrict:!1})]}},model:{searchId:"model",variantSearch:{item_type:"modelvariant",base_var_key:"base_id",base_var_type:"model"},findTags(){const e=[],t=Ka.D.MakeRequest({searchtype:"tags",searchparam:{type:"model"}}).sort(),a=Ka.D.MakeRequest({searchtype:"tags",searchparam:{type:"modelvariant"}}).sort(),n=Array.from(new Set([...t,...a]));let o=0;for(o=0;o<n.length;o++){const t={group:"tags",val:"",isstrict:!1},a={group:"tags",isactive:!1,doinclude:!1,name:n[o]},i=new cn({group:"tags",tagtype:a,tagval:t});e.push(i)}return e},findMisc(){const e=[],t=["source","keywords"];t.sort();let a=0;for(a=0;a<t.length;a++){const n="variant_name"==t[a]?[]:Ka.D.MakeRequest({searchtype:"keyvalues",searchparam:{type:"model",id:t[a]}}).sort(),o=Ka.D.MakeRequest({searchtype:"keyvalues",searchparam:{type:"modelvariant",id:t[a]}}).sort();let i=Array.from(new Set([...n,...o]));if("keywords"==t[a]){const e=[];for(let t=0;t<i.length;t++)for(let a=0;a<i[t].length;a++)e.push(i[t][a]);i=Array.from(new Set([...e]))}let r=0;for(r=0;r<i.length;r++){const n={group:t[a],isactive:!1,doinclude:!1,name:i[r]},o=new ln(n);e.push(o)}}return e},findText(){return[new sn({group:"name",val:"",isstrict:!1})]}},armoury:{searchId:"equipment",findTags(){const e=[],t=Ka.D.MakeRequest({searchtype:"tags",searchparam:{type:"equipment"}}).sort();let a=0;for(a=0;a<t.length;a++){const n={group:"tags",val:"",isstrict:!1},o={group:"tags",isactive:!1,doinclude:!1,name:t[a]},i=new cn({group:"tags",tagtype:o,tagval:n});e.push(i)}return e},findMisc(){const e=[],t=["source","category","keywords"];t.sort();let a=0;for(a=0;a<t.length;a++){let n=Ka.D.MakeRequest({searchtype:"keyvalues",searchparam:{type:"equipment",id:t[a]}}).sort();if("keywords"==t[a]){const e=[];for(let t=0;t<n.length;t++)for(let a=0;a<n[t].length;a++)e.push(n[t][a]);n=Array.from(new Set([...e]))}let o=0;for(o=0;o<n.length;o++){const i={group:t[a],isactive:!1,doinclude:!1,name:n[o]},r=new ln(i);e.push(r)}}return e},findText(){return[new sn({group:"name",val:"",isstrict:!1})]}},faction:{searchId:"faction",variantSearch:{item_type:"factionvariant",base_var_key:"base_id",base_var_type:"faction"},findTags(){return[]},findMisc(){return[]},findText(){return[]}},scenario:{searchId:"scenario",findTags(){return[]},findMisc(){return[]},findText(){return[]}},gamerule:{searchId:"gamerule",findTags(){return[]},findMisc(){return[]},findText(){return[]}},errata:{searchId:"errata",findTags(){return[]},findMisc(){return[]},findText(){return[]}},campaignrule:{searchId:"campaignrule",findTags(){return[]},findMisc(){return[]},findText(){return[]}},explorationtable:{searchId:"explorationtable",findTags(){return[]},findMisc(){return[]},findText(){return[]}},injury:{searchId:"injury",findTags(){return[]},findMisc(){return[]},findText(){return[]}},skillgroup:{searchId:"skillgroup",findTags(){return[]},findMisc(){return[]},findText(){return[]}},patron:{searchId:"patron",findTags(){return[]},findMisc(){return[]},findText(){return[]}}};class un{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"ver_default";this.TextOptions=[],this.TagOptions=[],this.MiscOptions=[],this.RangeOptions=[],this.MyFilters=void 0,this.Version=void 0,this.MyFilters=dn[e],this.Version=t,this.MyFilters.findMisc&&(this.MiscOptions=this.MyFilters.findMisc()),this.MyFilters.findTags&&(this.TagOptions=this.MyFilters.findTags()),this.MyFilters.findText&&(this.TextOptions=this.MyFilters.findText()),this.MyFilters.findRange&&(this.RangeOptions=this.MyFilters.findRange())}ResetFilters(){for(let e=0;e<this.TextOptions.length;e++)this.TextOptions[e].Val="",this.TextOptions[e].IsStrict=!1;for(let e=0;e<this.TagOptions.length;e++)this.TagOptions[e].TagType.IsActive=!1,this.TagOptions[e].TagType.DoInclude=!0,this.TagOptions[e].TagVal.Val="",this.TagOptions[e].TagVal.IsStrict=!1;for(let e=0;e<this.MiscOptions.length;e++)this.MiscOptions[e].IsActive=!1,this.MiscOptions[e].DoInclude=!0;for(let e=0;e<this.RangeOptions.length;e++)this.RangeOptions[e].Lower=this.RangeOptions[e].Set_Lower,this.RangeOptions[e].Upper=this.RangeOptions[e].Set_Upper}ReturnTextFilters(){return this.TextOptions}ReturnRangeFilters(){return this.RangeOptions}ReturnTagFilters(){return this.TagOptions}ReturnMiscFilters(){return this.MiscOptions}ReturnActiveTextFilters(){return this.TextOptions.filter((e=>e.Val.trim().length>0))}ReturnActiveRangeFilters(){return this.RangeOptions.filter((e=>e.Lower!=e.Set_Lower||e.Upper!=e.Set_Upper))}ReturnActiveTagFilters(){return this.TagOptions.filter((e=>1==e.TagType.IsActive))}ReturnActiveMiscFilters(){return this.MiscOptions.filter((e=>1==e.IsActive))}ReturnCount(){return this.ReturnMiscFilters.length+this.ReturnTagFilters.length+this.ReturnTextFilters.length+this.ReturnRangeFilters.length}ReturnActiveCount(){return this.ReturnActiveMiscFilters.length+this.ReturnActiveTagFilters.length+this.ReturnActiveTextFilters.length+this.ReturnActiveRangeFilters.length}}class hn{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"ver_default";this.Collection=void 0,this.FilterManager=void 0,this.TypeName=void 0,this.Initialised=!1,this.Version=void 0,this.Collection=new rn(e,t),this.FilterManager=new un(e,t),this.TypeName=e,this.Version=t}async initCollection(){0==this.Initialised&&(this.Collection.UpdateSearchParams({searchtype:"file",searchparam:{type:this.Collection.CollectionType.searchId}}),await this.Collection.RunSearch(),this.Initialised=!0)}async updateSearch(){const e=function(e,t,a){const n=[],o=[],i=e.ReturnActiveTextFilters(),r=e.ReturnActiveRangeFilters(),s=e.ReturnActiveTagFilters(),l=e.ReturnActiveMiscFilters(),c=l.filter((e=>!a.includes(e.Group)));let d=0;for(d=0;d<i.length;d++)if(i[d].Val.toString().trim().length>0){const e={item:i[d].Group,value:i[d].Val,equals:!0,strict:i[d].IsStrict};n.push(e)}for(d=0;d<r.length;d++){const e={item:r[d].Group,value:[r[d].Lower,r[d].Upper],equals:!0,isrange:!0};n.push(e)}for(d=0;d<s.length;d++){const e={item:"tags",value:s[d].TagType.Name,equals:s[d].TagType.DoInclude,strict:!0,istag:!0,tagvalue:s[d].TagVal.Val.toString().trim().length>0?s[d].TagVal.Val:""};n.push(e)}for(d=0;d<c.length;d++){const e={item:c[d].Group,value:c[d].Name,equals:c[d].DoInclude,strict:!0,istag:!1};n.push(e)}for(d=0;d<a.length;d++){const e=l.filter((e=>e.Group==a[d])),t=[];let n=0;for(n=0;n<e.length;n++){const a={item:e[n].Group,value:e[n].Name,equals:e[n].DoInclude,strict:!0,istag:!1};t.push(a)}const i={operator:"or",terms:t,subparams:[]};t.length>0&&o.push(i)}return n.length>0||o.length>0?{searchtype:"complex",searchparam:{type:t,request:{operator:"and",terms:n,subparams:o}}}:{searchtype:"file",searchparam:{type:t}}}(this.FilterManager,this.Collection.CollectionType.searchId,this.Collection.CollectionType.sort);JSON.stringify(e)!=JSON.stringify(this.Collection.searchParam)&&(this.Collection.UpdateSearchParams(e),this.FilterManager.MyFilters.variantSearch?await this.Collection.RunMultiUnitSearch(this.FilterManager.MyFilters.variantSearch):await this.Collection.RunSearch())}}class mn{constructor(){this.GlossaryCollectionController=void 0,this.KeywordCollectionController=void 0,this.ModelCollectionController=void 0,this.EquipmentCollectionController=void 0,this.FactionCollectionController=void 0,this.ScenarioCollectionController=void 0,this.GameRulesCollectionController=void 0,this.CampaignRulesCollectionController=void 0,this.ExplorationTableCollectionController=void 0,this.InjuryCollectionController=void 0,this.SkillGroupCollectionController=void 0,this.PatronCollectionController=void 0,this.ErrataRulesCollectionController=void 0,this.Pre_GlossaryCollectionController=void 0,this.Pre_KeywordCollectionController=void 0,this.Pre_ModelCollectionController=void 0,this.Pre_EquipmentCollectionController=void 0,this.Pre_FactionCollectionController=void 0,this.Pre_ScenarioCollectionController=void 0,this.Pre_GameRulesCollectionController=void 0,this.Pre_CampaignRulesCollectionController=void 0,this.Pre_ExplorationTableCollectionController=void 0,this.Pre_InjuryCollectionController=void 0,this.Pre_SkillGroupCollectionController=void 0,this.Pre_PatronCollectionController=void 0,this.Pre_ErrataRulesCollectionController=void 0,this.GlossaryCollectionController=new hn("glossary"),this.KeywordCollectionController=new hn("keyword"),this.ModelCollectionController=new hn("model"),this.EquipmentCollectionController=new hn("armoury"),this.FactionCollectionController=new hn("faction"),this.ScenarioCollectionController=new hn("scenario"),this.GameRulesCollectionController=new hn("gamerule"),this.CampaignRulesCollectionController=new hn("campaignrule"),this.ExplorationTableCollectionController=new hn("explorationtable"),this.InjuryCollectionController=new hn("injury"),this.SkillGroupCollectionController=new hn("skillgroup"),this.PatronCollectionController=new hn("patron"),this.ErrataRulesCollectionController=new hn("errata"),this.Pre_GlossaryCollectionController=new hn("glossary","ver_pre_163"),this.Pre_KeywordCollectionController=new hn("keyword","ver_pre_163"),this.Pre_ModelCollectionController=new hn("model","ver_pre_163"),this.Pre_EquipmentCollectionController=new hn("armoury","ver_pre_163"),this.Pre_FactionCollectionController=new hn("faction","ver_pre_163"),this.Pre_ScenarioCollectionController=new hn("scenario","ver_pre_163"),this.Pre_GameRulesCollectionController=new hn("gamerule","ver_pre_163"),this.Pre_CampaignRulesCollectionController=new hn("campaignrule","ver_pre_163"),this.Pre_ExplorationTableCollectionController=new hn("explorationtable","ver_pre_163"),this.Pre_InjuryCollectionController=new hn("injury","ver_pre_163"),this.Pre_SkillGroupCollectionController=new hn("skillgroup","ver_pre_163"),this.Pre_PatronCollectionController=new hn("patron","ver_pre_163"),this.Pre_ErrataRulesCollectionController=new hn("errata","ver_pre_163")}static getInstance(){return mn.instance||(mn.instance=new mn),mn.instance}}mn.instance=void 0;var pn=a(2433),fn=a(4436),gn=a(3632),yn=a(4587),_n=a(108);const bn=new Map;let vn=null;async function wn(){const e=new Map(bn);if(bn.clear(),vn=null,0===e.size)return;const t=[];e.forEach((e=>t.push(e)));const a=Array.from(new Set(t.map((e=>e.id))));try{const e=await fetch(`${_n.a.URL}/wp-json/synod/v1/media-batch`,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({ids:a})});if(!e.ok)throw new Error(`media-batch failed (${e.status})`);const n=await e.json();t.forEach((e=>{const t=n[String(e.id)];let a;if(t){const n=t.sizes||{},o=n[e.size]||n.medium||n.large||n.full||"";a={url:o,sourceTitle:t.sourceTitle||"",sourceUrl:t.sourceUrl||"",alt:t.alt||"",title:t.title||"",sizes:n,mime_type:t.mime_type,id:t.id}}else a={url:"",sourceTitle:"",sourceUrl:""};e.resolvers.forEach((e=>e(a)))}))}catch(n){t.forEach((e=>{e.rejecters.forEach((e=>e(n)))}))}}function xn(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"medium";const a=`${e}-${t}`,n=bn.get(a);if(n)return new Promise(((e,t)=>{n.resolvers.push(e),n.rejecters.push(t)}));const o={id:e,size:t,resolvers:[],rejecters:[]};return bn.set(a,o),null===vn&&(vn=window.setTimeout(wn,10)),new Promise(((e,t)=>{o.resolvers.push(e),o.rejecters.push(t)}))}const kn={url:"",sourceTitle:"",sourceUrl:""};function Cn(e){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"medium";const[n,o]=(0,t.useState)((()=>{if(!e)return kn;const t=`${e}-${a}`;return fn.T.getInstance().imageDataCache[t]||kn}));return(0,t.useEffect)((()=>{if(!e)return void o(kn);const t=fn.T.getInstance(),n=`${e}-${a}`;if(t.CheckCache&&t.CheckCache(n))return void o(t.imageDataCache[n]);let i=!1;return async function(){try{const r=await xn(e,a);if(i)return;t.AddCache?t.AddCache(n,r):t.imageDataCache[n]=r,o(r)}catch(r){i||(console.error("Failed to load image data",r),o(kn))}}(),()=>{i=!0}}),[e,a]),n}var jn=a(6264);const Sn=e=>{let t;const a=new Set,n=(e,n)=>{const o="function"===typeof e?e(t):e;if(o!==t){const e=t;t=n?o:Object.assign({},t,o),a.forEach((a=>a(t,e)))}},o=()=>t,i={setState:n,getState:o,subscribe:e=>(a.add(e),()=>a.delete(e)),destroy:()=>a.clear()};return t=e(n,o,i),i},{useSyncExternalStoreWithSelector:In}=Ot;const An=e=>{const a="function"===typeof e?(e=>e?Sn(e):Sn)(e):e,n=(e,n)=>function(e){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e.getState,n=arguments.length>2?arguments[2]:void 0;const o=In(e.subscribe,e.getState,e.getServerState||e.getState,a,n);return(0,t.useDebugValue)(o),o}(a,e,n);return Object.assign(n,a),n};var Nn=e=>e?An(e):An;const En={language:function(){const e=localStorage.getItem("language");if(null!=e)return e;return"ln_english"}(),applycurse:function(){const e=localStorage.getItem("applycurse");if(null!=e)return"false";return"false"}(),eventrunner:new jn.J},{useGlobalState:Tn}=(e=>{const a=Nn((()=>e)),n=(Object.keys(e),(e,t)=>{a.setState((a=>{return{[e]:(n=a[e],o=t,"function"==typeof o?o(n):o)};var n,o}))});return{useGlobalState:e=>{const o=(0,t.useCallback)((t=>t[e]),[e]);return[a(o),(0,t.useCallback)((t=>n(e,t)),[e])]},getGlobalState:e=>a.getState()[e],setGlobalState:n,subscribe:(e,t)=>{a.subscribe(((a,n)=>{a[e]!==n[e]&&t(a[e])}))}}})(En);var Dn=a(579);const Rn=(0,t.createContext)({activeId:null,setActiveId:()=>{}}),Mn=e=>{let{children:a}=e;const[n,o]=(0,t.useState)(null);return(0,t.useEffect)((()=>{function e(e){const t=e.target;t.closest(".image-credit-popover")||t.closest(".image-credit")||o(null)}return null!==n&&document.addEventListener("mousedown",e),()=>{document.removeEventListener("mousedown",e)}}),[n]),(0,Dn.jsx)(Rn.Provider,{value:{activeId:n,setActiveId:o},children:a})},On=()=>(0,t.useContext)(Rn);var qn=a(2719),Gn=a(3910),Pn=a(7929),Fn=a(5212);var Ln=e=>{let{sourceTitle:a,sourceUrl:n,popoverSlug:o}=e;(0,t.useRef)(null);const{activeId:i,setActiveId:r}=On(),s=i===o;return a?(0,Dn.jsx)("span",{className:"image-credit-wrap",children:(0,Dn.jsx)(Fn.A,{placement:"top-end",trigger:"click",rootClose:!0,show:s,overlay:(0,Dn.jsx)(qn.A.Body,{bsPrefix:"credit",className:"popover image-credit-popover",id:"tooltip",onClick:e=>e.stopPropagation(),children:(0,Dn.jsxs)("div",{className:"popover-content",children:[(0,Dn.jsx)("div",{className:"mb-2",children:(0,Dn.jsx)("strong",{children:"Image Credit"})}),(0,Dn.jsxs)("a",{target:"_blank",rel:"noopener noreferrer",href:n,className:"image-credit-link",children:[a||n,(0,Dn.jsx)(Gn.g,{icon:Pn.XkK,className:"icon-inline-right"})]})]})}),children:(0,Dn.jsx)("span",{className:"image-credit",onClick:e=>{e.stopPropagation(),e.preventDefault(),r(s?null:o.toString())},children:(0,Dn.jsx)(Gn.g,{icon:Pn.rwq,className:"image-credit-icon"})})})}):null};var Wn=e=>{let{imageId:a,size:n="medium",className:o="",imageKey:i=""}=e;const{url:r,sourceTitle:s,sourceUrl:l}=Cn(a,n),{activeId:c,setActiveId:d}=On(),[u]=(a.toString(),Tn("applycurse")),[h,m]=(0,t.useState)(!1);(0,t.useEffect)((()=>{if("true"===u){const e=setInterval((()=>{m(!0),setTimeout((()=>m(!1)),1e3)}),25e3+9e3*Math.random());return()=>clearInterval(e)}}),[u]);const p=[r?"loaded-image":"ghost-image",o,"true"===u?"cursed-image":"",h?"curse-active":""].join(" ").trim();return(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("img",{src:r||"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",className:p,alt:"",style:{width:"100%"}}),(0,Dn.jsx)(Ln,{sourceTitle:s,sourceUrl:l,popoverSlug:a.toString()+i})]})};var Bn=e=>{let{Title:t,Route:a,bgImageID:n=0,comingSoon:o=!1}=e;const i=(0,zt.Zp)();return(0,Dn.jsxs)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with MenuDisplay.tsx"}),children:[!o&&(0,Dn.jsxs)(yn.A,{link:a,runfunc:function(){i("/"+a,{state:Date.now().toString()})},classes:"home-link-primary",children:[(0,Dn.jsx)("span",{className:"title",children:t}),n>0&&(0,Dn.jsx)(Wn,{imageId:n,className:"",size:"large"})]}),o&&(0,Dn.jsxs)("div",{className:"home-link-primary coming-soon",children:[(0,Dn.jsx)("span",{className:"title",children:t}),n>0&&(0,Dn.jsx)(Wn,{imageId:n,className:"",size:"large"}),(0,Dn.jsx)("div",{className:"coming-soon-label",children:"Coming soon"})]})]})},Hn=a(5173),Un=a.n(Hn),Kn=a(8161),zn=a.n(Kn),Vn=a(6366),Yn=a.n(Vn),Jn=a(2123),$n=a.n(Jn),Zn="bodyAttributes",Qn="htmlAttributes",Xn="titleAttributes",eo={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title"},to=(Object.keys(eo).map((function(e){return eo[e]})),"charset"),ao="cssText",no="href",oo="http-equiv",io="innerHTML",ro="itemprop",so="name",lo="property",co="rel",uo="src",ho="target",mo={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},po="defaultTitle",fo="defer",go="encodeSpecialCharacters",yo="onChangeClientState",_o="titleTemplate",bo=Object.keys(mo).reduce((function(e,t){return e[mo[t]]=t,e}),{}),vo=[eo.NOSCRIPT,eo.SCRIPT,eo.STYLE],wo="data-react-helmet",xo="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ko=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}(),Co=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},jo=function(e,t){var a={};for(var n in e)t.indexOf(n)>=0||Object.prototype.hasOwnProperty.call(e,n)&&(a[n]=e[n]);return a},So=function(e){return!1===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])?String(e):String(e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;")},Io=function(e){var t=Do(e,eo.TITLE),a=Do(e,_o);if(a&&t)return a.replace(/%s/g,(function(){return Array.isArray(t)?t.join(""):t}));var n=Do(e,po);return t||n||void 0},Ao=function(e){return Do(e,yo)||function(){}},No=function(e,t){return t.filter((function(t){return"undefined"!==typeof t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return Co({},e,t)}),{})},Eo=function(e,t){return t.filter((function(e){return"undefined"!==typeof e[eo.BASE]})).map((function(e){return e[eo.BASE]})).reverse().reduce((function(t,a){if(!t.length)for(var n=Object.keys(a),o=0;o<n.length;o++){var i=n[o].toLowerCase();if(-1!==e.indexOf(i)&&a[i])return t.concat(a)}return t}),[])},To=function(e,t,a){var n={};return a.filter((function(t){return!!Array.isArray(t[e])||("undefined"!==typeof t[e]&&Go("Helmet: "+e+' should be of type "Array". Instead found type "'+xo(t[e])+'"'),!1)})).map((function(t){return t[e]})).reverse().reduce((function(e,a){var o={};a.filter((function(e){for(var a=void 0,i=Object.keys(e),r=0;r<i.length;r++){var s=i[r],l=s.toLowerCase();-1===t.indexOf(l)||a===co&&"canonical"===e[a].toLowerCase()||l===co&&"stylesheet"===e[l].toLowerCase()||(a=l),-1===t.indexOf(s)||s!==io&&s!==ao&&s!==ro||(a=s)}if(!a||!e[a])return!1;var c=e[a].toLowerCase();return n[a]||(n[a]={}),o[a]||(o[a]={}),!n[a][c]&&(o[a][c]=!0,!0)})).reverse().forEach((function(t){return e.push(t)}));for(var i=Object.keys(o),r=0;r<i.length;r++){var s=i[r],l=$n()({},n[s],o[s]);n[s]=l}return e}),[]).reverse()},Do=function(e,t){for(var a=e.length-1;a>=0;a--){var n=e[a];if(n.hasOwnProperty(t))return n[t]}return null},Ro=function(){var e=Date.now();return function(t){var a=Date.now();a-e>16?(e=a,t(a)):setTimeout((function(){Ro(t)}),0)}}(),Mo=function(e){return clearTimeout(e)},Oo="undefined"!==typeof window?window.requestAnimationFrame&&window.requestAnimationFrame.bind(window)||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||Ro:a.g.requestAnimationFrame||Ro,qo="undefined"!==typeof window?window.cancelAnimationFrame||window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame||Mo:a.g.cancelAnimationFrame||Mo,Go=function(e){return console&&"function"===typeof console.warn&&console.warn(e)},Po=null,Fo=function(e,t){var a=e.baseTag,n=e.bodyAttributes,o=e.htmlAttributes,i=e.linkTags,r=e.metaTags,s=e.noscriptTags,l=e.onChangeClientState,c=e.scriptTags,d=e.styleTags,u=e.title,h=e.titleAttributes;Bo(eo.BODY,n),Bo(eo.HTML,o),Wo(u,h);var m={baseTag:Ho(eo.BASE,a),linkTags:Ho(eo.LINK,i),metaTags:Ho(eo.META,r),noscriptTags:Ho(eo.NOSCRIPT,s),scriptTags:Ho(eo.SCRIPT,c),styleTags:Ho(eo.STYLE,d)},p={},f={};Object.keys(m).forEach((function(e){var t=m[e],a=t.newTags,n=t.oldTags;a.length&&(p[e]=a),n.length&&(f[e]=m[e].oldTags)})),t&&t(),l(e,p,f)},Lo=function(e){return Array.isArray(e)?e.join(""):e},Wo=function(e,t){"undefined"!==typeof e&&document.title!==e&&(document.title=Lo(e)),Bo(eo.TITLE,t)},Bo=function(e,t){var a=document.getElementsByTagName(e)[0];if(a){for(var n=a.getAttribute(wo),o=n?n.split(","):[],i=[].concat(o),r=Object.keys(t),s=0;s<r.length;s++){var l=r[s],c=t[l]||"";a.getAttribute(l)!==c&&a.setAttribute(l,c),-1===o.indexOf(l)&&o.push(l);var d=i.indexOf(l);-1!==d&&i.splice(d,1)}for(var u=i.length-1;u>=0;u--)a.removeAttribute(i[u]);o.length===i.length?a.removeAttribute(wo):a.getAttribute(wo)!==r.join(",")&&a.setAttribute(wo,r.join(","))}},Ho=function(e,t){var a=document.head||document.querySelector(eo.HEAD),n=a.querySelectorAll(e+"["+wo+"]"),o=Array.prototype.slice.call(n),i=[],r=void 0;return t&&t.length&&t.forEach((function(t){var a=document.createElement(e);for(var n in t)if(t.hasOwnProperty(n))if(n===io)a.innerHTML=t.innerHTML;else if(n===ao)a.styleSheet?a.styleSheet.cssText=t.cssText:a.appendChild(document.createTextNode(t.cssText));else{var s="undefined"===typeof t[n]?"":t[n];a.setAttribute(n,s)}a.setAttribute(wo,"true"),o.some((function(e,t){return r=t,a.isEqualNode(e)}))?o.splice(r,1):i.push(a)})),o.forEach((function(e){return e.parentNode.removeChild(e)})),i.forEach((function(e){return a.appendChild(e)})),{oldTags:o,newTags:i}},Uo=function(e){return Object.keys(e).reduce((function(t,a){var n="undefined"!==typeof e[a]?a+'="'+e[a]+'"':""+a;return t?t+" "+n:n}),"")},Ko=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Object.keys(e).reduce((function(t,a){return t[mo[a]||a]=e[a],t}),t)},zo=function(e,a,n){switch(e){case eo.TITLE:return{toComponent:function(){return function(e,a,n){var o,i=((o={key:a})[wo]=!0,o),r=Ko(n,i);return[t.createElement(eo.TITLE,r,a)]}(0,a.title,a.titleAttributes)},toString:function(){return function(e,t,a,n){var o=Uo(a),i=Lo(t);return o?"<"+e+" "+wo+'="true" '+o+">"+So(i,n)+"</"+e+">":"<"+e+" "+wo+'="true">'+So(i,n)+"</"+e+">"}(e,a.title,a.titleAttributes,n)}};case Zn:case Qn:return{toComponent:function(){return Ko(a)},toString:function(){return Uo(a)}};default:return{toComponent:function(){return function(e,a){return a.map((function(a,n){var o,i=((o={key:n})[wo]=!0,o);return Object.keys(a).forEach((function(e){var t=mo[e]||e;if(t===io||t===ao){var n=a.innerHTML||a.cssText;i.dangerouslySetInnerHTML={__html:n}}else i[t]=a[e]})),t.createElement(e,i)}))}(e,a)},toString:function(){return function(e,t,a){return t.reduce((function(t,n){var o=Object.keys(n).filter((function(e){return!(e===io||e===ao)})).reduce((function(e,t){var o="undefined"===typeof n[t]?t:t+'="'+So(n[t],a)+'"';return e?e+" "+o:o}),""),i=n.innerHTML||n.cssText||"",r=-1===vo.indexOf(e);return t+"<"+e+" "+wo+'="true" '+o+(r?"/>":">"+i+"</"+e+">")}),"")}(e,a,n)}}}},Vo=function(e){var t=e.baseTag,a=e.bodyAttributes,n=e.encode,o=e.htmlAttributes,i=e.linkTags,r=e.metaTags,s=e.noscriptTags,l=e.scriptTags,c=e.styleTags,d=e.title,u=void 0===d?"":d,h=e.titleAttributes;return{base:zo(eo.BASE,t,n),bodyAttributes:zo(Zn,a,n),htmlAttributes:zo(Qn,o,n),link:zo(eo.LINK,i,n),meta:zo(eo.META,r,n),noscript:zo(eo.NOSCRIPT,s,n),script:zo(eo.SCRIPT,l,n),style:zo(eo.STYLE,c,n),title:zo(eo.TITLE,{title:u,titleAttributes:h},n)}},Yo=function(e){var a,n;return n=a=function(a){function n(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n),function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!==typeof t&&"function"!==typeof t?e:t}(this,a.apply(this,arguments))}return function(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(n,a),n.prototype.shouldComponentUpdate=function(e){return!Yn()(this.props,e)},n.prototype.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case eo.SCRIPT:case eo.NOSCRIPT:return{innerHTML:t};case eo.STYLE:return{cssText:t}}throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")},n.prototype.flattenArrayTypeChildren=function(e){var t,a=e.child,n=e.arrayTypeChildren,o=e.newChildProps,i=e.nestedChildren;return Co({},n,((t={})[a.type]=[].concat(n[a.type]||[],[Co({},o,this.mapNestedChildrenToProps(a,i))]),t))},n.prototype.mapObjectTypeChildren=function(e){var t,a,n=e.child,o=e.newProps,i=e.newChildProps,r=e.nestedChildren;switch(n.type){case eo.TITLE:return Co({},o,((t={})[n.type]=r,t.titleAttributes=Co({},i),t));case eo.BODY:return Co({},o,{bodyAttributes:Co({},i)});case eo.HTML:return Co({},o,{htmlAttributes:Co({},i)})}return Co({},o,((a={})[n.type]=Co({},i),a))},n.prototype.mapArrayTypeChildrenToProps=function(e,t){var a=Co({},t);return Object.keys(e).forEach((function(t){var n;a=Co({},a,((n={})[t]=e[t],n))})),a},n.prototype.warnOnInvalidChildren=function(e,t){return!0},n.prototype.mapChildrenToProps=function(e,a){var n=this,o={};return t.Children.forEach(e,(function(e){if(e&&e.props){var t=e.props,i=t.children,r=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Object.keys(e).reduce((function(t,a){return t[bo[a]||a]=e[a],t}),t)}(jo(t,["children"]));switch(n.warnOnInvalidChildren(e,i),e.type){case eo.LINK:case eo.META:case eo.NOSCRIPT:case eo.SCRIPT:case eo.STYLE:o=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:o,newChildProps:r,nestedChildren:i});break;default:a=n.mapObjectTypeChildren({child:e,newProps:a,newChildProps:r,nestedChildren:i})}}})),a=this.mapArrayTypeChildrenToProps(o,a)},n.prototype.render=function(){var a=this.props,n=a.children,o=jo(a,["children"]),i=Co({},o);return n&&(i=this.mapChildrenToProps(n,i)),t.createElement(e,i)},ko(n,null,[{key:"canUseDOM",set:function(t){e.canUseDOM=t}}]),n}(t.Component),a.propTypes={base:Un().object,bodyAttributes:Un().object,children:Un().oneOfType([Un().arrayOf(Un().node),Un().node]),defaultTitle:Un().string,defer:Un().bool,encodeSpecialCharacters:Un().bool,htmlAttributes:Un().object,link:Un().arrayOf(Un().object),meta:Un().arrayOf(Un().object),noscript:Un().arrayOf(Un().object),onChangeClientState:Un().func,script:Un().arrayOf(Un().object),style:Un().arrayOf(Un().object),title:Un().string,titleAttributes:Un().object,titleTemplate:Un().string},a.defaultProps={defer:!0,encodeSpecialCharacters:!0},a.peek=e.peek,a.rewind=function(){var t=e.rewind();return t||(t=Vo({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}})),t},n}(zn()((function(e){return{baseTag:Eo([no,ho],e),bodyAttributes:No(Zn,e),defer:Do(e,fo),encode:Do(e,go),htmlAttributes:No(Qn,e),linkTags:To(eo.LINK,[co,no],e),metaTags:To(eo.META,[so,to,oo,lo,ro],e),noscriptTags:To(eo.NOSCRIPT,[io],e),onChangeClientState:Ao(e),scriptTags:To(eo.SCRIPT,[uo,io],e),styleTags:To(eo.STYLE,[ao],e),title:Io(e),titleAttributes:No(Xn,e)}}),(function(e){Po&&qo(Po),e.defer?Po=Oo((function(){Fo(e,(function(){Po=null}))})):(Fo(e),Po=null)}),Vo)((function(){return null})));Yo.renderStatic=Yo.rewind;var Jo=e=>{let{title:t,description:a="",keywords:n="",author:o="",ogImage:i,ogUrl:r}=e;t&&""!=t&&"undefined"!=t?t+=" | Trench Companion":t="Trench Companion - The official Trench Crusade resource",""==a&&(a="Trench Companion - The official resource for the tabletop game Trench Crusade."),""==i&&(i="https://synod.trench-companion.com/wp-content/uploads/2025/05/Trench-Companion-Share.png");const s=window.location.hostname.startsWith("dev."),l=window.location.href.replace("dev.","");return(0,Dn.jsxs)(Yo,{children:[(0,Dn.jsx)("title",{children:t}),a&&(0,Dn.jsx)("meta",{name:"description",content:a}),a&&(0,Dn.jsx)("meta",{property:"og:description",content:a}),n&&(0,Dn.jsx)("meta",{name:"keywords",content:n}),o&&(0,Dn.jsx)("meta",{name:"author",content:o}),(0,Dn.jsx)("meta",{property:"og:title",content:t}),i&&(0,Dn.jsx)("meta",{property:"og:image",content:i}),r&&(0,Dn.jsx)("meta",{property:"og:url",content:r}),(0,Dn.jsx)("meta",{property:"og:type",content:"website"}),s&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("meta",{name:"robots",content:"noindex, nofollow"}),(0,Dn.jsx)("link",{rel:"canonical",href:l})]})]})};var $o=e=>{let{imageId:t,imageIdMobile:a=0,linkUrl:n="",linkText:o="",className:i=""}=e;if(!t)return null;const r=(0,zt.Zp)();return(0,Dn.jsx)(Dn.Fragment,{children:""==n?(0,Dn.jsxs)("div",{className:`RulesBannerImage ${i} ${""!=o?"with-text":""}`,children:[a?(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(Wn,{imageId:t,size:"large",className:"rules-banner-image-element hide-md-down"}),(0,Dn.jsx)(Wn,{imageId:a,size:"large",className:"rules-banner-image-element  hide-md-up"})]}):(0,Dn.jsx)(Wn,{imageId:t,size:"large",className:"rules-banner-image-element"}),""!=o&&(0,Dn.jsx)("span",{className:"link-text",children:o})]}):(0,Dn.jsxs)(yn.A,{link:n,runfunc:()=>{r(n,{state:Date.now().toString()})},classes:`RulesBannerImage ${i}  ${""!=o?"with-text":""}`,children:[a?(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(Wn,{imageId:t,size:"large",className:"rules-banner-image-element hide-md-down"}),(0,Dn.jsx)(Wn,{imageId:a,size:"large",className:"rules-banner-image-element  hide-md-up"})]}):(0,Dn.jsx)(Wn,{imageId:t,size:"large",className:"rules-banner-image-element"}),""!=o&&(0,Dn.jsx)("span",{className:"link-text",children:o})]})})};var Zo=e=>{let{message:t="Loading",override:a=!1,className:n=""}=e;return(0,Dn.jsxs)("div",{className:`LoadingOverlay ${n}`,children:[(0,Dn.jsxs)(Yo,{children:[(0,Dn.jsx)("meta",{name:"prerender-status-code",content:"404"}),(0,Dn.jsx)("meta",{name:"robots",content:"noindex, nofollow"})]}),(0,Dn.jsxs)("div",{className:"LoadingOverlay-inner",children:[(void 0==a||0==a)&&(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"fa-spin"}),(0,Dn.jsx)("div",{className:"text",children:t})]})]})};var Qo=e=>{let{post:t}=e;const a=(0,zt.Zp)();return(0,Dn.jsxs)(yn.A,{classes:"BlogArticlePreview",link:`${Ba}/${t.slug}`,runfunc:()=>{a(`${Ba}/${t.slug}`)},children:[t.featured_media&&(0,Dn.jsx)("div",{className:"image-wrap",children:(0,Dn.jsx)(Wn,{imageId:t.featured_media,className:"preview-image",imageKey:t.slug,size:"large"})}),(0,Dn.jsxs)("div",{className:"text-wrap",children:[(0,Dn.jsx)("h2",{className:"",dangerouslySetInnerHTML:{__html:t.title.rendered}}),(0,Dn.jsx)("div",{className:"mb-3",children:new Date(t.date).toLocaleDateString()}),(0,Dn.jsx)("div",{className:"excerpt",dangerouslySetInnerHTML:{__html:t.excerpt.rendered}})]})]})};var Xo=()=>{const[e,a]=(0,t.useState)([]),[n,o]=(0,t.useState)(!0),i=(0,zt.Zp)();return(0,t.useEffect)((()=>{(async()=>{try{const e=await fetch("https://synod.trench-companion.com/wp-json/synod/v1/blog/latest"),t=await e.json();a(t)}catch(e){console.error("Failed to fetch latest posts",e),a([])}finally{o(!1)}})()}),[]),n?(0,Dn.jsx)("div",{className:"BlogRollRow my-4",children:(0,Dn.jsx)(Zo,{message:"Loading latest posts..."})}):0===e.length?(0,Dn.jsx)("div",{className:"BlogRollRow my-4",children:"No recent posts available."}):(0,Dn.jsxs)("div",{className:"BlogRollRow my-5",children:[(0,Dn.jsx)("h2",{className:"BlogRollRow-headline mb-4",children:"Trench Companion News"}),(0,Dn.jsx)("div",{className:"row",children:e.slice(0,3).map((e=>{var t;return(0,Dn.jsx)("div",{className:"BlogRollRow-item col-12 col-md-6 mb-4",children:(0,Dn.jsx)(Qo,{post:{id:e.id,title:{rendered:e.title},excerpt:{rendered:e.excerpt},slug:e.slug,date:e.date,featured_media:null!==(t=e.featured_media)&&void 0!==t?t:void 0}})},e.id)}))}),(0,Dn.jsxs)(yn.A,{classes:"BlogRollRow-all btn btn-primary",link:Ba,runfunc:()=>{i(Ba)},children:["All Blog Posts",(0,Dn.jsx)(Gn.g,{icon:Pn.XkK,className:"ms-2"})]})]})};var ei=()=>(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with HomeRoute.tsx"}),children:(0,Dn.jsx)("div",{className:"home-screen",children:(0,Dn.jsxs)("div",{className:"container",children:[(0,Dn.jsx)(Jo,{title:"Trench Companion",description:"The official resource for Trench Crusade"}),(0,Dn.jsxs)("div",{className:"narrow-content",children:[(0,Dn.jsxs)("div",{className:"row main-links",children:[(0,Dn.jsx)("div",{className:"col-12 col-md-6",children:(0,Dn.jsx)(Bn,{Title:"Rules Compendium",Route:"compendium",bgImageID:2844})}),(0,Dn.jsx)("div",{className:"col-12 col-md-6",children:(0,Dn.jsx)(Bn,{Title:"Warband Builder",Route:"warband",bgImageID:2840})}),(0,Dn.jsx)("div",{className:"col-12 col-md-6",children:(0,Dn.jsx)(Bn,{Title:"Campaign Manager",Route:"campaigns",bgImageID:2841})}),(0,Dn.jsx)("div",{className:"col-12 col-md-6",children:(0,Dn.jsx)(Bn,{Title:"Play Mode",Route:"play",bgImageID:2842,comingSoon:!0})})]}),(0,Dn.jsx)("h1",{children:"Trench Companion"}),(0,Dn.jsx)("div",{className:"sub-headline",children:"Your digital assistant for the world of Trench Crusade"}),(0,Dn.jsx)("div",{className:"spacer-20"}),(0,Dn.jsxs)("p",{className:"intro-text",children:["Build your warband, access the full rules, and stay up to date \u2014 all in one place.\nTrench Companion is the evolution of the  ",(0,Dn.jsx)("a",{href:"https://trenchcompendium.netlify.app/",rel:"noreferrer noopener nofollow",target:"_blank",children:"Trench Compendium"}),": a free, community-made tool crafted to support players both on and off the battlefield.\nIt is a passion project created by a small team of developers with the goal to create a tool that keeps the Game alive and connected. \nIf you enjoy what we\u2019re building and want to see it grow, consider supporting us with a small monthly contribution \u2014 every bit helps."]}),(0,Dn.jsx)("div",{className:"spacer-20"}),(0,Dn.jsxs)("div",{className:"row ",children:[(0,Dn.jsx)("div",{className:"col-12 col-md-6",children:(0,Dn.jsx)($o,{imageId:110229,linkUrl:da,linkText:"Your Games"})}),(0,Dn.jsx)("div",{className:"col-12 col-md-6",children:(0,Dn.jsx)($o,{imageId:2848,linkUrl:"/blog",linkText:"Blog"})}),(0,Dn.jsx)("div",{className:"col-12 col-md-6",children:(0,Dn.jsx)($o,{imageId:2900,linkUrl:"/page/premium-membership",linkText:"How to support"})}),(0,Dn.jsx)("div",{className:"col-12 col-md-6",children:(0,Dn.jsx)($o,{imageId:2899,linkUrl:"/page/about",linkText:"About"})})]}),(0,Dn.jsx)(Xo,{})]}),(0,Dn.jsx)("div",{className:"spacer-20"}),(0,Dn.jsxs)("div",{className:"narrow-content",children:[(0,Dn.jsx)("h2",{children:"Trench Companion Alpha is live!"}),(0,Dn.jsx)("p",{children:"We\u2019re proud to announce the alpha release of the Trench Companion app \u2014 a major milestone in our journey to support Trench Crusade players with powerful tools for the rules, warband management and more. This early version is just the beginning, and we\u2019re excited to share it with you. For a full breakdown of features, known issues, and what\u2019s next, check out our detailed blog post."})]}),(0,Dn.jsx)("div",{className:"spacer-20"}),(0,Dn.jsx)("div",{className:"spacer-20"})]})})}),ti=a(464);const ai=new Set(["trench-companion.com","www.trench-companion.com"]),ni="undefined"!==typeof window&&ai.has(window.location.hostname);var oi=e=>{var a;let{format:n,className:o=""}=e;const{SiteUser:i,loadingUser:r}=(0,ti.A)(),s=!(null===i||void 0===i||null===(a=i.Premium)||void 0===a||!a.IsPremium),l=ni&&!r&&!s,c=(0,zt.zy)(),d=(0,t.useRef)(null),u=(0,t.useMemo)((()=>{switch(n){case"wide":return _n.n.WIDE_SLOT_ID;case"vertical":return _n.n.TALL_SLOT_ID;case"square":return _n.n.SQUARE_SLOT_ID;case"compendium-wide":return _n.n.COMPENDIUM_WIDE_ID;case"warbandbuilder-wide":return _n.n.WARBANDBUILDER_WIDE_ID;default:return""}}),[n]),h=`${c.pathname}-${u}`,[m,p]=(0,t.useState)("idle");if((0,t.useEffect)((()=>{if(!l)return;if(!u)return;if(!d.current)return;const e=d.current,t=e.querySelector("ins.adsbygoogle");if(!t)return;const a=window;a.adsbygoogle=a.adsbygoogle||[];let n=null;const o=()=>{((e,t)=>{const a=window;if(!a.adsbygoogle||"function"!==typeof a.adsbygoogle.push)return;if(!((e.offsetWidth||t.offsetWidth||e.getBoundingClientRect().width||0)<=0)&&!e.getAttribute("data-ad-status")&&!e.getAttribute("data-adsbygoogle-status"))try{a.adsbygoogle.push({})}catch(xC){console.warn("[AdSlot] adsbygoogle.push error",xC)}})(t,e)},i=()=>{const e=t.getAttribute("data-ad-status")||t.getAttribute("data-adsbygoogle-status");e?p(e):t.querySelector("iframe")||t.querySelector('div[id^="aswift"]')?p("done"):p("idle")};i();const r=new MutationObserver((e=>{for(const t of e)"attributes"!==t.type||"data-ad-status"!==t.attributeName&&"data-adsbygoogle-status"!==t.attributeName||i(),"childList"===t.type&&i()}));r.observe(t,{attributes:!0,childList:!0,subtree:!0,attributeFilter:["data-ad-status","data-adsbygoogle-status"]});const s=()=>{"IntersectionObserver"in window?(n=new IntersectionObserver((e=>{const t=e[0];var a;t&&t.isIntersecting&&(o(),null===(a=n)||void 0===a||a.disconnect())}),{rootMargin:"200px 0px"}),n.observe(t)):setTimeout(o,300)};if(!window.adsenseScriptLoaded){const e=()=>{s()};return window.addEventListener("adsense:loaded",e,{once:!0}),()=>{var t;window.removeEventListener("adsense:loaded",e),null===(t=n)||void 0===t||t.disconnect(),r.disconnect()}}return s(),()=>{var e;null===(e=n)||void 0===e||e.disconnect(),r.disconnect()}}),[l,h,u]),!l)return null;return(0,Dn.jsx)(Dn.Fragment,{})};var ii=e=>(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with BaseDisplayCompendium.tsx"}),children:(0,Dn.jsxs)("div",{className:"rules-content-main",children:[(0,Dn.jsx)(Jo,{title:"Rules Compendium",description:"Welcome to the Compendium. Here you can find all current rules for Trench Crusade including Game Rules, Campaign rules, Faction and glossaries for all the rules."}),(0,Dn.jsx)("h1",{className:"mb-3",children:"Rules Compendium"}),(0,Dn.jsx)("p",{className:"mb-4",children:"Welcome to the Compendium. Here you can find all current rules for Trench Crusade including Game Rules, Campaign rules, Faction and glossaries for all the rules."}),(0,Dn.jsxs)("div",{className:"row",children:[(0,Dn.jsx)("div",{className:"col-12 col-md-6",children:(0,Dn.jsx)($o,{imageId:2849,linkUrl:"/compendium/core-rules",linkText:"Core Rules"})}),(0,Dn.jsx)("div",{className:"col-12 col-md-6",children:(0,Dn.jsx)($o,{imageId:166,linkUrl:"/compendium/warbands",linkText:"Warbands"})}),(0,Dn.jsx)("div",{className:"col-12 col-md-6",children:(0,Dn.jsx)($o,{imageId:165,linkUrl:"/compendium/battlekit",linkText:"Battlekit"})}),(0,Dn.jsx)("div",{className:"col-12 col-md-6",children:(0,Dn.jsx)($o,{imageId:197190,linkUrl:"/compendium/comprehensive-rules",linkText:"Comprehensive Rules"})}),(0,Dn.jsx)("div",{className:"col-12 col-md-6",children:(0,Dn.jsx)($o,{imageId:2846,linkUrl:"/compendium/campaigns",linkText:"Campaigns"})}),(0,Dn.jsx)("div",{className:"col-12 col-md-6",children:(0,Dn.jsx)($o,{imageId:2853,linkUrl:"/compendium/scenarios",linkText:"Scenarios"})})]}),(0,Dn.jsx)(oi,{format:"compendium-wide",className:"mb-3"}),(0,Dn.jsx)("h2",{className:"mt-3",children:"About Trench Crusade"}),(0,Dn.jsx)("p",{children:"During the First Crusade the armies of the Church captured the Holy City. Beneath the most sacred of temples, the Knights Templar discovered hidden vaults. Within their shadowed depths lay an ancient demonic artefact. Overcome by greed and the weakness in their hearts, the Templars fell to their knees. They had found a new lord."}),(0,Dn.jsx)("p",{children:"Witnessing the unholy wisdom revealed by the artefact, they turned to darkness, trafficking with devils and committing all manner of unspeakable rites. This was the Ultimate Heresy. Jerusalem was reduced to a depraved pit where the Infernal seeped into our Earthly realm, Hell and our mortal plane are now entwined in corruption."}),(0,Dn.jsx)("p",{children:"For eight centuries the Church has waged its crusade to take back the Holy City. The landscape has been utterly devastated, scarred by thousands of miles of trenches, mud, and craters. The war is now waged by armies wielding terrifying weaponry. Both sides command supernatural beings of such immense power that they are nighunstoppable. Even with such incalculable might the armies are at a stalemate."})]})}),ri=a(8139),si=a.n(ri);const li={type:Un().string,tooltip:Un().bool,as:Un().elementType},ci=t.forwardRef(((e,t)=>{let{as:a="div",className:n,type:o="valid",tooltip:i=!1,...r}=e;return(0,Dn.jsx)(a,{...r,ref:t,className:si()(n,`${o}-${i?"tooltip":"feedback"}`)})}));ci.displayName="Feedback",ci.propTypes=li;var di=ci;var ui=t.createContext({}),hi=a(7852);const mi=t.forwardRef(((e,a)=>{let{id:n,bsPrefix:o,className:i,type:r="checkbox",isValid:s=!1,isInvalid:l=!1,as:c="input",...d}=e;const{controlId:u}=(0,t.useContext)(ui);return o=(0,hi.oU)(o,"form-check-input"),(0,Dn.jsx)(c,{...d,ref:a,type:r,id:n||u,className:si()(i,o,s&&"is-valid",l&&"is-invalid")})}));mi.displayName="FormCheckInput";var pi=mi;const fi=t.forwardRef(((e,a)=>{let{bsPrefix:n,className:o,htmlFor:i,...r}=e;const{controlId:s}=(0,t.useContext)(ui);return n=(0,hi.oU)(n,"form-check-label"),(0,Dn.jsx)("label",{...r,ref:a,htmlFor:i||s,className:si()(o,n)})}));fi.displayName="FormCheckLabel";var gi=fi;const yi=t.forwardRef(((e,a)=>{let{id:n,bsPrefix:o,bsSwitchPrefix:i,inline:r=!1,reverse:s=!1,disabled:l=!1,isValid:c=!1,isInvalid:d=!1,feedbackTooltip:u=!1,feedback:h,feedbackType:m,className:p,style:f,title:g="",type:y="checkbox",label:_,children:b,as:v="input",...w}=e;o=(0,hi.oU)(o,"form-check"),i=(0,hi.oU)(i,"form-switch");const{controlId:x}=(0,t.useContext)(ui),k=(0,t.useMemo)((()=>({controlId:n||x})),[x,n]),C=!b&&null!=_&&!1!==_||function(e,a){return t.Children.toArray(e).some((e=>t.isValidElement(e)&&e.type===a))}(b,gi),j=(0,Dn.jsx)(pi,{...w,type:"switch"===y?"checkbox":y,ref:a,isValid:c,isInvalid:d,disabled:l,as:v});return(0,Dn.jsx)(ui.Provider,{value:k,children:(0,Dn.jsx)("div",{style:f,className:si()(p,C&&o,r&&`${o}-inline`,s&&`${o}-reverse`,"switch"===y&&i),children:b||(0,Dn.jsxs)(Dn.Fragment,{children:[j,C&&(0,Dn.jsx)(gi,{title:g,children:_}),h&&(0,Dn.jsx)(di,{type:m,tooltip:u,children:h})]})})})}));yi.displayName="FormCheck";var _i=Object.assign(yi,{Input:pi,Label:gi}),bi=a(6440),vi=a.n(bi);const wi=t.forwardRef(((e,a)=>{let{bsPrefix:n,type:o,size:i,htmlSize:r,id:s,className:l,isValid:c=!1,isInvalid:d=!1,plaintext:u,readOnly:h,as:m="input",...p}=e;const{controlId:f}=(0,t.useContext)(ui);return n=(0,hi.oU)(n,"form-control"),(0,Dn.jsx)(m,{...p,type:o,size:r,ref:a,readOnly:h,id:s||f,className:si()(l,u?`${n}-plaintext`:n,i&&`${n}-${i}`,"color"===o&&`${n}-color`,c&&"is-valid",d&&"is-invalid")})}));wi.displayName="FormControl";var xi=Object.assign(wi,{Feedback:di});const ki=t.forwardRef(((e,t)=>{let{className:a,bsPrefix:n,as:o="div",...i}=e;return n=(0,hi.oU)(n,"form-floating"),(0,Dn.jsx)(o,{ref:t,className:si()(a,n),...i})}));ki.displayName="FormFloating";var Ci=ki;const ji=t.forwardRef(((e,a)=>{let{controlId:n,as:o="div",...i}=e;const r=(0,t.useMemo)((()=>({controlId:n})),[n]);return(0,Dn.jsx)(ui.Provider,{value:r,children:(0,Dn.jsx)(o,{...i,ref:a})})}));ji.displayName="FormGroup";var Si=ji;const Ii=t.forwardRef(((e,t)=>{const[{className:a,...n},{as:o="div",bsPrefix:i,spans:r}]=function(e){let{as:t,bsPrefix:a,className:n,...o}=e;a=(0,hi.oU)(a,"col");const i=(0,hi.gy)(),r=(0,hi.Jm)(),s=[],l=[];return i.forEach((e=>{const t=o[e];let n,i,c;delete o[e],"object"===typeof t&&null!=t?({span:n,offset:i,order:c}=t):n=t;const d=e!==r?`-${e}`:"";n&&s.push(!0===n?`${a}${d}`:`${a}${d}-${n}`),null!=c&&l.push(`order${d}-${c}`),null!=i&&l.push(`offset${d}-${i}`)})),[{...o,className:si()(n,...s,...l)},{as:t,bsPrefix:a,spans:s}]}(e);return(0,Dn.jsx)(o,{...n,ref:t,className:si()(a,!r.length&&i)})}));Ii.displayName="Col";var Ai=Ii;const Ni=t.forwardRef(((e,a)=>{let{as:n="label",bsPrefix:o,column:i=!1,visuallyHidden:r=!1,className:s,htmlFor:l,...c}=e;const{controlId:d}=(0,t.useContext)(ui);o=(0,hi.oU)(o,"form-label");let u="col-form-label";"string"===typeof i&&(u=`${u} ${u}-${i}`);const h=si()(s,o,r&&"visually-hidden",i&&u);return l=l||d,i?(0,Dn.jsx)(Ai,{ref:a,as:"label",className:h,htmlFor:l,...c}):(0,Dn.jsx)(n,{ref:a,className:h,htmlFor:l,...c})}));Ni.displayName="FormLabel";var Ei=Ni;const Ti=t.forwardRef(((e,a)=>{let{bsPrefix:n,className:o,id:i,...r}=e;const{controlId:s}=(0,t.useContext)(ui);return n=(0,hi.oU)(n,"form-range"),(0,Dn.jsx)("input",{...r,type:"range",ref:a,className:si()(o,n),id:i||s})}));Ti.displayName="FormRange";var Di=Ti;const Ri=t.forwardRef(((e,a)=>{let{bsPrefix:n,size:o,htmlSize:i,className:r,isValid:s=!1,isInvalid:l=!1,id:c,...d}=e;const{controlId:u}=(0,t.useContext)(ui);return n=(0,hi.oU)(n,"form-select"),(0,Dn.jsx)("select",{...d,size:i,ref:a,className:si()(r,n,o&&`${n}-${o}`,s&&"is-valid",l&&"is-invalid"),id:c||u})}));Ri.displayName="FormSelect";var Mi=Ri;const Oi=t.forwardRef(((e,t)=>{let{bsPrefix:a,className:n,as:o="small",muted:i,...r}=e;return a=(0,hi.oU)(a,"form-text"),(0,Dn.jsx)(o,{...r,ref:t,className:si()(n,a,i&&"text-muted")})}));Oi.displayName="FormText";var qi=Oi;const Gi=t.forwardRef(((e,t)=>(0,Dn.jsx)(_i,{...e,ref:t,type:"switch"})));Gi.displayName="Switch";var Pi=Object.assign(Gi,{Input:_i.Input,Label:_i.Label});const Fi=t.forwardRef(((e,t)=>{let{bsPrefix:a,className:n,children:o,controlId:i,label:r,...s}=e;return a=(0,hi.oU)(a,"form-floating"),(0,Dn.jsxs)(Si,{ref:t,className:si()(n,a),controlId:i,...s,children:[o,(0,Dn.jsx)("label",{htmlFor:i,children:r})]})}));Fi.displayName="FloatingLabel";var Li=Fi;const Wi={_ref:Un().any,validated:Un().bool,as:Un().elementType},Bi=t.forwardRef(((e,t)=>{let{className:a,validated:n,as:o="form",...i}=e;return(0,Dn.jsx)(o,{...i,ref:t,className:si()(a,n&&"was-validated")})}));Bi.displayName="Form",Bi.propTypes=Wi;var Hi=Object.assign(Bi,{Group:Si,Control:xi,Floating:Ci,Check:_i,Switch:Pi,Label:Ei,Text:qi,Range:Di,Select:Mi,FloatingLabel:Li}),Ui=a(3818),Ki=a(3043);function zi(e,a,n){const o=(0,t.useRef)(void 0!==e),[i,r]=(0,t.useState)(a),s=void 0!==e,l=o.current;return o.current=s,!s&&l&&i!==a&&r(a),[s?e:i,(0,t.useCallback)((function(){for(var e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];const[o,...i]=t;let s=null==n?void 0:n(o,...i);return r(o),s}),[n])]}var Vi=a(4696);var Yi=a(8894);var Ji=t.createContext(null),$i=a(8457),Zi=a(2188),Qi=a(5970),Xi=a(5978);const er=["children","usePopper"];const tr=()=>{};function ar(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const a=(0,t.useContext)(Ji),[n,o]=(0,$i.A)(),i=(0,t.useRef)(!1),{flip:r,offset:s,rootCloseEvent:l,fixed:c=!1,placement:d,popperConfig:u={},enableEventListeners:h=!0,usePopper:m=!!a}=e,p=null==(null==a?void 0:a.show)?!!e.show:a.show;p&&!i.current&&(i.current=!0);const{placement:f,setMenu:g,menuElement:y,toggleElement:_}=a||{},b=(0,Zi.A)(_,y,(0,Xi.Ay)({placement:d||f||"bottom-start",enabled:m,enableEvents:null==h?p:h,offset:s,flip:r,fixed:c,arrowElement:n,popperConfig:u})),v=Object.assign({ref:g||tr,"aria-labelledby":null==_?void 0:_.id},b.attributes.popper,{style:b.styles.popper}),w={show:p,placement:f,hasShown:i.current,toggle:null==a?void 0:a.toggle,popper:m?b:null,arrowProps:m?Object.assign({ref:o},b.attributes.arrow,{style:b.styles.arrow}):{}};return(0,Qi.A)(y,(e=>{null==a||a.toggle(!1,e)}),{clickTrigger:l,disabled:!p}),[v,w]}function nr(e){let{children:t,usePopper:a=!0}=e,n=function(e,t){if(null==e)return{};var a={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;a[n]=e[n]}return a}(e,er);const[o,i]=ar(Object.assign({},n,{usePopper:a}));return(0,Dn.jsx)(Dn.Fragment,{children:t(o,i)})}nr.displayName="DropdownMenu";var or=nr;const ir={prefix:String(Math.round(1e10*Math.random())),current:0},rr=t.createContext(ir),sr=t.createContext(!1);let lr=Boolean("undefined"!==typeof window&&window.document&&window.document.createElement),cr=new WeakMap;function dr(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],a=(0,t.useContext)(rr),n=(0,t.useRef)(null);if(null===n.current&&!e){var o,i;let e=null===(i=t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED)||void 0===i||null===(o=i.ReactCurrentOwner)||void 0===o?void 0:o.current;if(e){let t=cr.get(e);null==t?cr.set(e,{id:a.current,state:e.memoizedState}):e.memoizedState!==t.state&&(a.current=t.id,cr.delete(e))}n.current=++a.current}return n.current}const ur="function"===typeof t.useId?function(e){let a=t.useId(),[n]=(0,t.useState)("function"===typeof t.useSyncExternalStore?t.useSyncExternalStore(pr,hr,mr):(0,t.useContext)(sr)),o=n?"react-aria":`react-aria${ir.prefix}`;return e||`${o}-${a}`}:function(e){let a=(0,t.useContext)(rr);a!==ir||lr||console.warn("When server rendering, you must wrap your application in an <SSRProvider> to ensure consistent ids are generated between the client and server.");let n=dr(!!e),o=`react-aria${a.prefix}`;return e||`${o}-${n}`};function hr(){return!1}function mr(){return!0}function pr(e){return()=>{}}const fr=e=>{var t;return"menu"===(null==(t=e.getAttribute("role"))?void 0:t.toLowerCase())},gr=()=>{};function yr(){const e=ur(),{show:a=!1,toggle:n=gr,setToggle:o,menuElement:i}=(0,t.useContext)(Ji)||{},r=(0,t.useCallback)((e=>{n(!a,e)}),[a,n]),s={id:e,ref:o||gr,onClick:r,"aria-expanded":!!a};return i&&fr(i)&&(s["aria-haspopup"]=!0),[s,{show:a,toggle:n}]}function _r(e){let{children:t}=e;const[a,n]=yr();return(0,Dn.jsx)(Dn.Fragment,{children:t(a,n)})}_r.displayName="DropdownToggle";var br=_r;const vr=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return null!=e?String(e):t||null};var wr=t.createContext(null);const xr=t.createContext(null);xr.displayName="NavContext";var kr=xr,Cr=a(4140),jr=a(5425);const Sr=["eventKey","disabled","onClick","active","as"];function Ir(e){let{key:a,href:n,active:o,disabled:i,onClick:r}=e;const s=(0,t.useContext)(wr),l=(0,t.useContext)(kr),{activeKey:c}=l||{},d=vr(a,n),u=null==o&&null!=a?vr(c)===d:o;return[{onClick:(0,Yi.A)((e=>{i||(null==r||r(e),s&&!e.isPropagationStopped()&&s(d,e))})),"aria-disabled":i||void 0,"aria-selected":u,[(0,jr.sE)("dropdown-item")]:""},{isActive:u}]}const Ar=t.forwardRef(((e,t)=>{let{eventKey:a,disabled:n,onClick:o,active:i,as:r=Cr.Ay}=e,s=function(e,t){if(null==e)return{};var a={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;a[n]=e[n]}return a}(e,Sr);const[l]=Ir({key:a,href:s.href,disabled:n,onClick:o,active:i});return(0,Dn.jsx)(r,Object.assign({},s,{ref:t},l))}));Ar.displayName="DropdownItem";var Nr=Ar,Er=a(1701);function Tr(){const e=function(){const[,e]=(0,t.useReducer)((e=>e+1),0);return e}(),a=(0,t.useRef)(null),n=(0,t.useCallback)((t=>{a.current=t,e()}),[e]);return[a,n]}function Dr(e){let{defaultShow:a,show:n,onSelect:o,onToggle:i,itemSelector:r=`* [${(0,jr.sE)("dropdown-item")}]`,focusFirstItemOnShow:s,placement:l="bottom-start",children:c}=e;const d=(0,Er.A)(),[u,h]=zi(n,a,i),[m,p]=Tr(),f=m.current,[g,y]=Tr(),_=g.current,b=(0,Vi.A)(u),v=(0,t.useRef)(null),w=(0,t.useRef)(!1),x=(0,t.useContext)(wr),k=(0,t.useCallback)((function(e,t){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null==t?void 0:t.type;h(e,{originalEvent:t,source:a})}),[h]),C=(0,Yi.A)(((e,t)=>{null==o||o(e,t),k(!1,t,"select"),t.isPropagationStopped()||null==x||x(e,t)})),j=(0,t.useMemo)((()=>({toggle:k,placement:l,show:u,menuElement:f,toggleElement:_,setMenu:p,setToggle:y})),[k,l,u,f,_,p,y]);f&&b&&!u&&(w.current=f.contains(f.ownerDocument.activeElement));const S=(0,Yi.A)((()=>{_&&_.focus&&_.focus()})),I=(0,Yi.A)((()=>{const e=v.current;let t=s;if(null==t&&(t=!(!m.current||!fr(m.current))&&"keyboard"),!1===t||"keyboard"===t&&!/^key.+$/.test(e))return;const a=(0,Ui.A)(m.current,r)[0];a&&a.focus&&a.focus()}));(0,t.useEffect)((()=>{u?I():w.current&&(w.current=!1,S())}),[u,w,S,I]),(0,t.useEffect)((()=>{v.current=null}));const A=(e,t)=>{if(!m.current)return null;const a=(0,Ui.A)(m.current,r);let n=a.indexOf(e)+t;return n=Math.max(0,Math.min(n,a.length)),a[n]};return function(e,a,n){let o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const i=(0,Yi.A)(n);(0,t.useEffect)((()=>{const t="function"===typeof e?e():e;return t.addEventListener(a,i,o),()=>t.removeEventListener(a,i,o)}),[e])}((0,t.useCallback)((()=>d.document),[d]),"keydown",(e=>{var t,a;const{key:n}=e,o=e.target,i=null==(t=m.current)?void 0:t.contains(o),r=null==(a=g.current)?void 0:a.contains(o);if(/input|textarea/i.test(o.tagName)&&(" "===n||"Escape"!==n&&i||"Escape"===n&&"search"===o.type))return;if(!i&&!r)return;if("Tab"===n&&(!m.current||!u))return;v.current=e.type;const s={originalEvent:e,source:e.type};switch(n){case"ArrowUp":{const t=A(o,-1);return t&&t.focus&&t.focus(),void e.preventDefault()}case"ArrowDown":if(e.preventDefault(),u){const e=A(o,1);e&&e.focus&&e.focus()}else h(!0,s);return;case"Tab":(0,Ki.Ay)(o.ownerDocument,"keyup",(e=>{var t;("Tab"!==e.key||e.target)&&null!=(t=m.current)&&t.contains(e.target)||h(!1,s)}),{once:!0});break;case"Escape":"Escape"===n&&(e.preventDefault(),e.stopPropagation()),h(!1,s)}})),(0,Dn.jsx)(wr.Provider,{value:C,children:(0,Dn.jsx)(Ji.Provider,{value:j,children:c})})}Dr.displayName="Dropdown",Dr.Menu=or,Dr.Toggle=br,Dr.Item=Nr;var Rr=Dr,Mr=a(7121),Or=a(6618);const qr=t.createContext({});qr.displayName="DropdownContext";var Gr=qr;const Pr=t.forwardRef(((e,t)=>{let{className:a,bsPrefix:n,as:o="hr",role:i="separator",...r}=e;return n=(0,hi.oU)(n,"dropdown-divider"),(0,Dn.jsx)(o,{ref:t,className:si()(a,n),role:i,...r})}));Pr.displayName="DropdownDivider";var Fr=Pr;const Lr=t.forwardRef(((e,t)=>{let{className:a,bsPrefix:n,as:o="div",role:i="heading",...r}=e;return n=(0,hi.oU)(n,"dropdown-header"),(0,Dn.jsx)(o,{ref:t,className:si()(a,n),role:i,...r})}));Lr.displayName="DropdownHeader";var Wr=Lr;a(6218);a(2665);a(2677);new WeakMap;const Br=["onKeyDown"];const Hr=t.forwardRef(((e,t)=>{let{onKeyDown:a}=e,n=function(e,t){if(null==e)return{};var a={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;a[n]=e[n]}return a}(e,Br);const[o]=(0,Cr.Am)(Object.assign({tagName:"a"},n)),i=(0,Yi.A)((e=>{o.onKeyDown(e),null==a||a(e)}));return(r=n.href)&&"#"!==r.trim()&&"button"!==n.role?(0,Dn.jsx)("a",Object.assign({ref:t},n,{onKeyDown:a})):(0,Dn.jsx)("a",Object.assign({ref:t},n,o,{onKeyDown:i}));var r}));Hr.displayName="Anchor";var Ur=Hr;const Kr=t.forwardRef(((e,t)=>{let{bsPrefix:a,className:n,eventKey:o,disabled:i=!1,onClick:r,active:s,as:l=Ur,...c}=e;const d=(0,hi.oU)(a,"dropdown-item"),[u,h]=Ir({key:o,href:c.href,disabled:i,onClick:r,active:s});return(0,Dn.jsx)(l,{...c,...u,ref:t,className:si()(n,d,h.isActive&&"active",i&&"disabled")})}));Kr.displayName="DropdownItem";var zr=Kr;const Vr=t.forwardRef(((e,t)=>{let{className:a,bsPrefix:n,as:o="span",...i}=e;return n=(0,hi.oU)(n,"dropdown-item-text"),(0,Dn.jsx)(o,{ref:t,className:si()(a,n),...i})}));Vr.displayName="DropdownItemText";var Yr=Vr,Jr=a(4723),$r=a(8293);const Zr=t.createContext(null);Zr.displayName="InputGroupContext";var Qr=Zr;const Xr=t.createContext(null);Xr.displayName="NavbarContext";var es=Xr,ts=a(2740),as=a.n(ts);function ns(e,t){return e}function os(e,t,a){let n=e?a?"bottom-start":"bottom-end":a?"bottom-end":"bottom-start";return"up"===t?n=e?a?"top-start":"top-end":a?"top-end":"top-start":"end"===t?n=e?a?"left-end":"right-end":a?"left-start":"right-start":"start"===t?n=e?a?"right-end":"left-end":a?"right-start":"left-start":"down-centered"===t?n="bottom":"up-centered"===t&&(n="top"),n}const is=t.forwardRef(((e,a)=>{let{bsPrefix:n,className:o,align:i,rootCloseEvent:r,flip:s=!0,show:l,renderOnMount:c,as:d="div",popperConfig:u,variant:h,...m}=e,p=!1;const f=(0,t.useContext)(es),g=(0,hi.oU)(n,"dropdown-menu"),{align:y,drop:_,isRTL:b}=(0,t.useContext)(Gr);i=i||y;const v=(0,t.useContext)(Qr),w=[];if(i)if("object"===typeof i){const e=Object.keys(i);if(e.length){const t=e[0],a=i[t];p="start"===a,w.push(`${g}-${t}-${a}`)}}else"end"===i&&(p=!0);const x=os(p,_,b),[k,{hasShown:C,popper:j,show:S,toggle:I}]=ar({flip:s,rootCloseEvent:r,show:l,usePopper:!f&&0===w.length,offset:[0,2],popperConfig:u,placement:x});if(k.ref=(0,$r.A)(ns(a),k.ref),(0,Jr.A)((()=>{S&&(null==j||j.update())}),[S]),!C&&!c&&!v)return null;"string"!==typeof d&&(k.show=S,k.close=()=>null==I?void 0:I(!1),k.align=i);let A=m.style;return null!=j&&j.placement&&(A={...m.style,...k.style},m["x-placement"]=j.placement),(0,Dn.jsx)(d,{...m,...k,style:A,...(w.length||f)&&{"data-bs-popper":"static"},className:si()(o,g,S&&"show",p&&`${g}-end`,h&&`${g}-${h}`,...w)})}));is.displayName="DropdownMenu";var rs=is,ss=a(4282);const ls=t.forwardRef(((e,a)=>{let{bsPrefix:n,split:o,className:i,childBsPrefix:r,as:s=ss.A,...l}=e;const c=(0,hi.oU)(n,"dropdown-toggle"),d=(0,t.useContext)(Ji);void 0!==r&&(l.bsPrefix=r);const[u]=yr();return u.ref=(0,$r.A)(u.ref,ns(a)),(0,Dn.jsx)(s,{className:si()(i,c,o&&`${c}-split`,(null==d?void 0:d.show)&&"show"),...u,...l})}));ls.displayName="DropdownToggle";var cs=ls;const ds=t.forwardRef(((e,a)=>{const{bsPrefix:n,drop:o="down",show:i,className:r,align:s="start",onSelect:l,onToggle:c,focusFirstItemOnShow:d,as:u="div",navbar:h,autoClose:m=!0,...p}=(0,Mr.Zw)(e,{show:"onToggle"}),f=(0,t.useContext)(Qr),g=(0,hi.oU)(n,"dropdown"),y=(0,hi.Wz)(),_=(0,Or.A)(((e,t)=>{var a,n;var o;(null==(a=t.originalEvent)||null==(n=a.target)?void 0:n.classList.contains("dropdown-toggle"))&&"mousedown"===t.source||(t.originalEvent.currentTarget!==document||"keydown"===t.source&&"Escape"!==t.originalEvent.key||(t.source="rootClose"),o=t.source,(!1===m?"click"===o:"inside"===m?"rootClose"!==o:"outside"!==m||"select"!==o)&&(null==c||c(e,t)))})),b=os("end"===s,o,y),v=(0,t.useMemo)((()=>({align:s,drop:o,isRTL:y})),[s,o,y]),w={down:g,"down-centered":`${g}-center`,up:"dropup","up-centered":"dropup-center dropup",end:"dropend",start:"dropstart"};return(0,Dn.jsx)(Gr.Provider,{value:v,children:(0,Dn.jsx)(Rr,{placement:b,show:i,onSelect:l,onToggle:_,focusFirstItemOnShow:d,itemSelector:`.${g}-item:not(.disabled):not(:disabled)`,children:f?p.children:(0,Dn.jsx)(u,{...p,ref:a,className:si()(r,i&&"show",w[o])})})})}));ds.displayName="Dropdown";var us=Object.assign(ds,{Toggle:cs,Menu:rs,Item:zr,ItemText:Yr,Divider:Fr,Header:Wr});const hs=e=>{const a=e.data,[n,o]=(0,t.useState)(a.IsStrict);return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with FilterItems.tsx"}),children:(0,Dn.jsxs)("div",{className:"backgroundBgBase",children:[(0,Dn.jsx)("div",{className:"colourBasicText size-subtitle",children:(0,za.h8)(a.Group)}),(0,Dn.jsx)(Hi.Control,{onChange:e=>{return t=a,n=e.target.value,void(t.Val=n);var t,n},className:"bordergrey","aria-label":"Text input with checkbox",defaultValue:a.Val})]})})},ms=e=>{const a=e.data,n=(0,t.useRef)(null),o=(0,t.useRef)(null),[i,r]=(0,t.useState)(0),s=(0,t.useRef)(null),[l,c]=(0,t.useState)(void 0);return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with FilterItems.tsx"}),children:(0,Dn.jsxs)(us,{bsPrefix:"empty",autoClose:"outside",onToggle:e=>{e&&s.current&&c(s.current.getBoundingClientRect().width)},children:[(0,Dn.jsx)(us.Toggle,{ref:s,bsPrefix:"empty",id:"dropdown-basic",className:"bordergrey borderthin buttonclean",children:(0,Dn.jsxs)("div",{className:"",children:[(0,Dn.jsx)("div",{className:"backgroundBgBase borderthin bordergrey findme-filter1",children:(0,Dn.jsx)("div",{className:"align-left ",children:(0,za.h8)(a.Group)})}),(0,Dn.jsx)("div",{className:"backgroundBgCard borderthin bordergrey ",children:(0,Dn.jsx)(Gn.g,{icon:Pn.Jt$})})]})}),(0,Dn.jsx)(us.Menu,{className:"",style:{width:l},children:(0,Dn.jsxs)("div",{className:" ",children:[(0,Dn.jsxs)("div",{children:[(0,Dn.jsx)("div",{className:"colourBasicText",children:"Min"}),(0,Dn.jsxs)("div",{className:"",children:[(0,Dn.jsx)(Hi.Control,{onChange:e=>{return t=a,n=parseInt(e.target.value),void(t.Lower=n);var t,n},className:"bordergrey",type:"number","aria-label":"Text input with checkbox",defaultValue:a.Set_Lower,ref:n}),(0,Dn.jsx)(Gn.g,{className:"colourBasicText  ",onClick:()=>{return(e=a).Lower=e.Set_Lower,null!=n&&n.current&&(n.current.value=e.Set_Lower.toString()),void r(i+1);var e},icon:Pn.Vpu})]})]}),(0,Dn.jsxs)("div",{children:[(0,Dn.jsx)("div",{className:"colourBasicText",children:"Max"}),(0,Dn.jsxs)("div",{className:"",children:[(0,Dn.jsx)(Hi.Control,{onChange:e=>{return t=a,n=parseInt(e.target.value),void(t.Upper=n);var t,n},className:"bordergrey",type:"number","aria-label":"Text input with checkbox",defaultValue:a.Set_Upper,ref:o}),(0,Dn.jsx)(Gn.g,{className:"colourBasicText  ",onClick:()=>{return(e=a).Upper=e.Set_Upper,null!=o&&o.current&&(o.current.value=e.Set_Upper.toString()),void r(i+1);var e},icon:Pn.Vpu})]})]})]})})]})})},ps=e=>{const a=e.data,n=e.name,[o,i]=(0,t.useState)(null);return(0,Dn.jsx)("div",{className:"FilterTagSet",children:(0,Dn.jsxs)(Hi.Group,{controlId:n+"-select",className:"mb-3",children:[(0,Dn.jsx)(Hi.Label,{children:"Choose "+n}),(0,Dn.jsxs)(Hi.Select,{value:null!==o&&void 0!==o?o:"show_all",onChange:e=>{const t=e.target.value;"show_all"===t?(i(null),a.forEach((e=>{e.TagType.IsActive=!1,e.TagType.DoInclude=!0}))):(i(t),a.forEach((e=>{e.TagType.IsActive=e.TagType.Name===t,e.TagType.DoInclude=e.TagType.Name===t})))},children:[(0,Dn.jsx)("option",{value:"show_all",children:"Show All"}),a.map((e=>(0,Dn.jsx)("option",{value:e.TagType.Name,children:(0,za.h8)(e.TagType.Name)},"ItemName + '-option'"+e.TagType.Name)))]})]})})},fs=e=>{const a=e.data,n=e.name,[o,i]=((0,t.useRef)(null),(0,t.useState)(void 0)),[r,s]=(0,t.useState)(null);return(0,Dn.jsx)("div",{className:"FilterMiscSet",children:(0,Dn.jsxs)(Hi.Group,{controlId:n+"-select",className:"mb-3",children:[(0,Dn.jsx)(Hi.Label,{children:"Choose "+n}),(0,Dn.jsxs)(Hi.Select,{value:null!==r&&void 0!==r?r:"show_all",onChange:e=>{const t=e.target.value;"show_all"===t?(s(null),a.forEach((e=>{e.IsActive=!1,e.DoInclude=!0}))):(s(t),a.forEach((e=>{e.IsActive=e.Name===t,e.DoInclude=e.Name===t})))},children:[(0,Dn.jsx)("option",{value:"show_all",children:"Show All"}),a.map((e=>(0,Dn.jsx)("option",{value:e.Name,children:(0,za.h8)(e.Name)},"ItemName + '-option'"+e.Name)))]})]})})};var gs=a(7281);var ys=e=>{const a=e.data,[n,o]=(0,t.useState)(function(){for(let e=0;e<a.SubModelsList.length;e++)if("base"==a.SubModelsList[e].var_name)return a.SubModelsList[e];return a.SubModelsList[0]}()),[i,r]=(0,t.useState)(0);return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with ModelCollectionDisplay.tsx"}),children:(0,Dn.jsx)("div",{className:"ModelCollectionDisplay",children:a.SubModelsList.length>1&&(0,Dn.jsx)(Dn.Fragment,{children:a.SubModelsList.map((e=>(0,Dn.jsx)(gs.A,{data:e.model},"modeloption"+e.var_name)))})})})};function _s(e){var t,a,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(a=_s(e[t]))&&(n&&(n+=" "),n+=a)}else for(a in e)e[a]&&(n&&(n+=" "),n+=a);return n}var bs=function(){for(var e,t,a=0,n="",o=arguments.length;a<o;a++)(e=arguments[a])&&(t=_s(e))&&(n&&(n+=" "),n+=t);return n};const vs=e=>"number"==typeof e&&!isNaN(e),ws=e=>"string"==typeof e,xs=e=>"function"==typeof e,ks=e=>ws(e)||xs(e)?e:null,Cs=e=>(0,t.isValidElement)(e)||ws(e)||xs(e)||vs(e);function js(e){let{enter:a,exit:n,appendPosition:o=!1,collapse:i=!0,collapseDuration:r=300}=e;return function(e){let{children:s,position:l,preventExitTransition:c,done:d,nodeRef:u,isIn:h,playToast:m}=e;const p=o?`${a}--${l}`:a,f=o?`${n}--${l}`:n,g=(0,t.useRef)(0);return(0,t.useLayoutEffect)((()=>{const e=u.current,t=p.split(" "),a=n=>{n.target===u.current&&(m(),e.removeEventListener("animationend",a),e.removeEventListener("animationcancel",a),0===g.current&&"animationcancel"!==n.type&&e.classList.remove(...t))};e.classList.add(...t),e.addEventListener("animationend",a),e.addEventListener("animationcancel",a)}),[]),(0,t.useEffect)((()=>{const e=u.current,t=()=>{e.removeEventListener("animationend",t),i?function(e,t,a){void 0===a&&(a=300);const{scrollHeight:n,style:o}=e;requestAnimationFrame((()=>{o.minHeight="initial",o.height=n+"px",o.transition=`all ${a}ms`,requestAnimationFrame((()=>{o.height="0",o.padding="0",o.margin="0",setTimeout(t,a)}))}))}(e,d,r):d()};h||(c?t():(g.current=1,e.className+=` ${f}`,e.addEventListener("animationend",t)))}),[h]),t.createElement(t.Fragment,null,s)}}function Ss(e,t){return null!=e?{content:e.content,containerId:e.props.containerId,id:e.props.toastId,theme:e.props.theme,type:e.props.type,data:e.props.data||{},isLoading:e.props.isLoading,icon:e.props.icon,status:t}:{}}const Is=new Map;let As=[];const Ns=new Set,Es=e=>Ns.forEach((t=>t(e))),Ts=()=>Is.size>0;function Ds(e,t){var a;if(t)return!(null==(a=Is.get(t))||!a.isToastActive(e));let n=!1;return Is.forEach((t=>{t.isToastActive(e)&&(n=!0)})),n}function Rs(e,t){Cs(e)&&(Ts()||As.push({content:e,options:t}),Is.forEach((a=>{a.buildToast(e,t)})))}function Ms(e,t){Is.forEach((a=>{null!=t&&null!=t&&t.containerId?(null==t?void 0:t.containerId)===a.id&&a.toggle(e,null==t?void 0:t.id):a.toggle(e,null==t?void 0:t.id)}))}function Os(e){const{subscribe:a,getSnapshot:n,setProps:o}=(0,t.useRef)(function(e){const a=e.containerId||1;return{subscribe(n){const o=function(e,a,n){let o=1,i=0,r=[],s=[],l=[],c=a;const d=new Map,u=new Set,h=()=>{l=Array.from(d.values()),u.forEach((e=>e()))},m=e=>{s=null==e?[]:s.filter((t=>t!==e)),h()},p=e=>{const{toastId:a,onOpen:o,updateId:i,children:r}=e.props,l=null==i;e.staleId&&d.delete(e.staleId),d.set(a,e),s=[...s,e.props.toastId].filter((t=>t!==e.staleId)),h(),n(Ss(e,l?"added":"updated")),l&&xs(o)&&o((0,t.isValidElement)(r)&&r.props)};return{id:e,props:c,observe:e=>(u.add(e),()=>u.delete(e)),toggle:(e,t)=>{d.forEach((a=>{null!=t&&t!==a.props.toastId||xs(a.toggle)&&a.toggle(e)}))},removeToast:m,toasts:d,clearQueue:()=>{i-=r.length,r=[]},buildToast:(a,s)=>{if((t=>{let{containerId:a,toastId:n,updateId:o}=t;const i=a?a!==e:1!==e,r=d.has(n)&&null==o;return i||r})(s))return;const{toastId:l,updateId:u,data:f,staleId:g,delay:y}=s,_=()=>{m(l)},b=null==u;b&&i++;const v={...c,style:c.toastStyle,key:o++,...Object.fromEntries(Object.entries(s).filter((e=>{let[t,a]=e;return null!=a}))),toastId:l,updateId:u,data:f,closeToast:_,isIn:!1,className:ks(s.className||c.toastClassName),bodyClassName:ks(s.bodyClassName||c.bodyClassName),progressClassName:ks(s.progressClassName||c.progressClassName),autoClose:!s.isLoading&&(w=s.autoClose,x=c.autoClose,!1===w||vs(w)&&w>0?w:x),deleteToast(){const e=d.get(l),{onClose:a,children:o}=e.props;xs(a)&&a((0,t.isValidElement)(o)&&o.props),n(Ss(e,"removed")),d.delete(l),i--,i<0&&(i=0),r.length>0?p(r.shift()):h()}};var w,x;v.closeButton=c.closeButton,!1===s.closeButton||Cs(s.closeButton)?v.closeButton=s.closeButton:!0===s.closeButton&&(v.closeButton=!Cs(c.closeButton)||c.closeButton);let k=a;(0,t.isValidElement)(a)&&!ws(a.type)?k=(0,t.cloneElement)(a,{closeToast:_,toastProps:v,data:f}):xs(a)&&(k=a({closeToast:_,toastProps:v,data:f}));const C={content:k,props:v,staleId:g};c.limit&&c.limit>0&&i>c.limit&&b?r.push(C):vs(y)?setTimeout((()=>{p(C)}),y):p(C)},setProps(e){c=e},setToggle:(e,t)=>{d.get(e).toggle=t},isToastActive:e=>s.some((t=>t===e)),getSnapshot:()=>c.newestOnTop?l.reverse():l}}(a,e,Es);Is.set(a,o);const i=o.observe(n);return As.forEach((e=>Rs(e.content,e.options))),As=[],()=>{i(),Is.delete(a)}},setProps(e){var t;null==(t=Is.get(a))||t.setProps(e)},getSnapshot(){var e;return null==(e=Is.get(a))?void 0:e.getSnapshot()}}}(e)).current;o(e);const i=(0,t.useSyncExternalStore)(a,n,n);return{getToastToRender:function(e){if(!i)return[];const t=new Map;return i.forEach((e=>{const{position:a}=e.props;t.has(a)||t.set(a,[]),t.get(a).push(e)})),Array.from(t,(t=>e(t[0],t[1])))},isToastActive:Ds,count:null==i?void 0:i.length}}function qs(e){const[a,n]=(0,t.useState)(!1),[o,i]=(0,t.useState)(!1),r=(0,t.useRef)(null),s=(0,t.useRef)({start:0,delta:0,removalDistance:0,canCloseOnClick:!0,canDrag:!1,didMove:!1}).current,{autoClose:l,pauseOnHover:c,closeToast:d,onClick:u,closeOnClick:h}=e;var m,p;function f(){n(!0)}function g(){n(!1)}function y(t){const n=r.current;s.canDrag&&n&&(s.didMove=!0,a&&g(),s.delta="x"===e.draggableDirection?t.clientX-s.start:t.clientY-s.start,s.start!==t.clientX&&(s.canCloseOnClick=!1),n.style.transform=`translate3d(${"x"===e.draggableDirection?`${s.delta}px, var(--y)`:`0, calc(${s.delta}px + var(--y))`},0)`,n.style.opacity=""+(1-Math.abs(s.delta/s.removalDistance)))}function _(){document.removeEventListener("pointermove",y),document.removeEventListener("pointerup",_);const t=r.current;if(s.canDrag&&s.didMove&&t){if(s.canDrag=!1,Math.abs(s.delta)>s.removalDistance)return i(!0),e.closeToast(),void e.collapseAll();t.style.transition="transform 0.2s, opacity 0.2s",t.style.removeProperty("transform"),t.style.removeProperty("opacity")}}null==(p=Is.get((m={id:e.toastId,containerId:e.containerId,fn:n}).containerId||1))||p.setToggle(m.id,m.fn),(0,t.useEffect)((()=>{if(e.pauseOnFocusLoss)return document.hasFocus()||g(),window.addEventListener("focus",f),window.addEventListener("blur",g),()=>{window.removeEventListener("focus",f),window.removeEventListener("blur",g)}}),[e.pauseOnFocusLoss]);const b={onPointerDown:function(t){if(!0===e.draggable||e.draggable===t.pointerType){s.didMove=!1,document.addEventListener("pointermove",y),document.addEventListener("pointerup",_);const a=r.current;s.canCloseOnClick=!0,s.canDrag=!0,a.style.transition="none","x"===e.draggableDirection?(s.start=t.clientX,s.removalDistance=a.offsetWidth*(e.draggablePercent/100)):(s.start=t.clientY,s.removalDistance=a.offsetHeight*(80===e.draggablePercent?1.5*e.draggablePercent:e.draggablePercent)/100)}},onPointerUp:function(t){const{top:a,bottom:n,left:o,right:i}=r.current.getBoundingClientRect();"touchend"!==t.nativeEvent.type&&e.pauseOnHover&&t.clientX>=o&&t.clientX<=i&&t.clientY>=a&&t.clientY<=n?g():f()}};return l&&c&&(b.onMouseEnter=g,e.stacked||(b.onMouseLeave=f)),h&&(b.onClick=e=>{u&&u(e),s.canCloseOnClick&&d()}),{playToast:f,pauseToast:g,isRunning:a,preventExitTransition:o,toastRef:r,eventHandlers:b}}function Gs(e){let{delay:a,isRunning:n,closeToast:o,type:i="default",hide:r,className:s,style:l,controlledProgress:c,progress:d,rtl:u,isIn:h,theme:m}=e;const p=r||c&&0===d,f={...l,animationDuration:`${a}ms`,animationPlayState:n?"running":"paused"};c&&(f.transform=`scaleX(${d})`);const g=bs("Toastify__progress-bar",c?"Toastify__progress-bar--controlled":"Toastify__progress-bar--animated",`Toastify__progress-bar-theme--${m}`,`Toastify__progress-bar--${i}`,{"Toastify__progress-bar--rtl":u}),y=xs(s)?s({rtl:u,type:i,defaultClassName:g}):bs(g,s),_={[c&&d>=1?"onTransitionEnd":"onAnimationEnd"]:c&&d<1?null:()=>{h&&o()}};return t.createElement("div",{className:"Toastify__progress-bar--wrp","data-hidden":p},t.createElement("div",{className:`Toastify__progress-bar--bg Toastify__progress-bar-theme--${m} Toastify__progress-bar--${i}`}),t.createElement("div",{role:"progressbar","aria-hidden":p?"true":"false","aria-label":"notification timer",className:y,style:f,..._}))}let Ps=1;const Fs=()=>""+Ps++;function Ls(e){return e&&(ws(e.toastId)||vs(e.toastId))?e.toastId:Fs()}function Ws(e,t){return Rs(e,t),t.toastId}function Bs(e,t){return{...t,type:t&&t.type||e,toastId:Ls(t)}}function Hs(e){return(t,a)=>Ws(t,Bs(e,a))}function Us(e,t){return Ws(e,Bs("default",t))}Us.loading=(e,t)=>Ws(e,Bs("default",{isLoading:!0,autoClose:!1,closeOnClick:!1,closeButton:!1,draggable:!1,...t})),Us.promise=function(e,t,a){let n,{pending:o,error:i,success:r}=t;o&&(n=ws(o)?Us.loading(o,a):Us.loading(o.render,{...a,...o}));const s={isLoading:null,autoClose:null,closeOnClick:null,closeButton:null,draggable:null},l=(e,t,o)=>{if(null==t)return void Us.dismiss(n);const i={type:e,...s,...a,data:o},r=ws(t)?{render:t}:t;return n?Us.update(n,{...i,...r}):Us(r.render,{...i,...r}),o},c=xs(e)?e():e;return c.then((e=>l("success",r,e))).catch((e=>l("error",i,e))),c},Us.success=Hs("success"),Us.info=Hs("info"),Us.error=Hs("error"),Us.warning=Hs("warning"),Us.warn=Us.warning,Us.dark=(e,t)=>Ws(e,Bs("default",{theme:"dark",...t})),Us.dismiss=function(e){!function(e){var t;if(Ts()){if(null==e||ws(t=e)||vs(t))Is.forEach((t=>{t.removeToast(e)}));else if(e&&("containerId"in e||"id"in e)){var a;(null==(a=Is.get(e.containerId))?void 0:a.removeToast(e.id))||Is.forEach((t=>{t.removeToast(e.id)}))}}else As=As.filter((t=>null!=e&&t.options.toastId!==e))}(e)},Us.clearWaitingQueue=function(e){void 0===e&&(e={}),Is.forEach((t=>{!t.props.limit||e.containerId&&t.id!==e.containerId||t.clearQueue()}))},Us.isActive=Ds,Us.update=function(e,t){void 0===t&&(t={});const a=((e,t)=>{var a;let{containerId:n}=t;return null==(a=Is.get(n||1))?void 0:a.toasts.get(e)})(e,t);if(a){const{props:n,content:o}=a,i={delay:100,...n,...t,toastId:t.toastId||e,updateId:Fs()};i.toastId!==e&&(i.staleId=e);const r=i.render||o;delete i.render,Ws(r,i)}},Us.done=e=>{Us.update(e,{progress:1})},Us.onChange=function(e){return Ns.add(e),()=>{Ns.delete(e)}},Us.play=e=>Ms(!0,e),Us.pause=e=>Ms(!1,e);const Ks="undefined"!=typeof window?t.useLayoutEffect:t.useEffect,zs=e=>{let{theme:a,type:n,isLoading:o,...i}=e;return t.createElement("svg",{viewBox:"0 0 24 24",width:"100%",height:"100%",fill:"colored"===a?"currentColor":`var(--toastify-icon-color-${n})`,...i})},Vs={info:function(e){return t.createElement(zs,{...e},t.createElement("path",{d:"M12 0a12 12 0 1012 12A12.013 12.013 0 0012 0zm.25 5a1.5 1.5 0 11-1.5 1.5 1.5 1.5 0 011.5-1.5zm2.25 13.5h-4a1 1 0 010-2h.75a.25.25 0 00.25-.25v-4.5a.25.25 0 00-.25-.25h-.75a1 1 0 010-2h1a2 2 0 012 2v4.75a.25.25 0 00.25.25h.75a1 1 0 110 2z"}))},warning:function(e){return t.createElement(zs,{...e},t.createElement("path",{d:"M23.32 17.191L15.438 2.184C14.728.833 13.416 0 11.996 0c-1.42 0-2.733.833-3.443 2.184L.533 17.448a4.744 4.744 0 000 4.368C1.243 23.167 2.555 24 3.975 24h16.05C22.22 24 24 22.044 24 19.632c0-.904-.251-1.746-.68-2.44zm-9.622 1.46c0 1.033-.724 1.823-1.698 1.823s-1.698-.79-1.698-1.822v-.043c0-1.028.724-1.822 1.698-1.822s1.698.79 1.698 1.822v.043zm.039-12.285l-.84 8.06c-.057.581-.408.943-.897.943-.49 0-.84-.367-.896-.942l-.84-8.065c-.057-.624.25-1.095.779-1.095h1.91c.528.005.84.476.784 1.1z"}))},success:function(e){return t.createElement(zs,{...e},t.createElement("path",{d:"M12 0a12 12 0 1012 12A12.014 12.014 0 0012 0zm6.927 8.2l-6.845 9.289a1.011 1.011 0 01-1.43.188l-4.888-3.908a1 1 0 111.25-1.562l4.076 3.261 6.227-8.451a1 1 0 111.61 1.183z"}))},error:function(e){return t.createElement(zs,{...e},t.createElement("path",{d:"M11.983 0a12.206 12.206 0 00-8.51 3.653A11.8 11.8 0 000 12.207 11.779 11.779 0 0011.8 24h.214A12.111 12.111 0 0024 11.791 11.766 11.766 0 0011.983 0zM10.5 16.542a1.476 1.476 0 011.449-1.53h.027a1.527 1.527 0 011.523 1.47 1.475 1.475 0 01-1.449 1.53h-.027a1.529 1.529 0 01-1.523-1.47zM11 12.5v-6a1 1 0 012 0v6a1 1 0 11-2 0z"}))},spinner:function(){return t.createElement("div",{className:"Toastify__spinner"})}},Ys=e=>{const{isRunning:a,preventExitTransition:n,toastRef:o,eventHandlers:i,playToast:r}=qs(e),{closeButton:s,children:l,autoClose:c,onClick:d,type:u,hideProgressBar:h,closeToast:m,transition:p,position:f,className:g,style:y,bodyClassName:_,bodyStyle:b,progressClassName:v,progressStyle:w,updateId:x,role:k,progress:C,rtl:j,toastId:S,deleteToast:I,isIn:A,isLoading:N,closeOnClick:E,theme:T}=e,D=bs("Toastify__toast",`Toastify__toast-theme--${T}`,`Toastify__toast--${u}`,{"Toastify__toast--rtl":j},{"Toastify__toast--close-on-click":E}),R=xs(g)?g({rtl:j,position:f,type:u,defaultClassName:D}):bs(D,g),M=function(e){let{theme:a,type:n,isLoading:o,icon:i}=e,r=null;const s={theme:a,type:n};return!1===i||(xs(i)?r=i({...s,isLoading:o}):(0,t.isValidElement)(i)?r=(0,t.cloneElement)(i,s):o?r=Vs.spinner():(e=>e in Vs)(n)&&(r=Vs[n](s))),r}(e),O=!!C||!c,q={closeToast:m,type:u,theme:T};let G=null;return!1===s||(G=xs(s)?s(q):(0,t.isValidElement)(s)?(0,t.cloneElement)(s,q):function(e){let{closeToast:a,theme:n,ariaLabel:o="close"}=e;return t.createElement("button",{className:`Toastify__close-button Toastify__close-button--${n}`,type:"button",onClick:e=>{e.stopPropagation(),a(e)},"aria-label":o},t.createElement("svg",{"aria-hidden":"true",viewBox:"0 0 14 16"},t.createElement("path",{fillRule:"evenodd",d:"M7.71 8.23l3.75 3.75-1.48 1.48-3.75-3.75-3.75 3.75L1 11.98l3.75-3.75L1 4.48 2.48 3l3.75 3.75L9.98 3l1.48 1.48-3.75 3.75z"})))}(q)),t.createElement(p,{isIn:A,done:I,position:f,preventExitTransition:n,nodeRef:o,playToast:r},t.createElement("div",{id:S,onClick:d,"data-in":A,className:R,...i,style:y,ref:o},t.createElement("div",{...A&&{role:k},className:xs(_)?_({type:u}):bs("Toastify__toast-body",_),style:b},null!=M&&t.createElement("div",{className:bs("Toastify__toast-icon",{"Toastify--animate-icon Toastify__zoom-enter":!N})},M),t.createElement("div",null,l)),G,t.createElement(Gs,{...x&&!O?{key:`pb-${x}`}:{},rtl:j,theme:T,delay:c,isRunning:a,isIn:A,closeToast:m,hide:h,type:u,style:w,className:v,controlledProgress:O,progress:C||0})))},Js=function(e,t){return void 0===t&&(t=!1),{enter:`Toastify--animate Toastify__${e}-enter`,exit:`Toastify--animate Toastify__${e}-exit`,appendPosition:t}},$s=js(Js("bounce",!0)),Zs=(js(Js("slide",!0)),js(Js("zoom")),js(Js("flip")),{position:"top-right",transition:$s,autoClose:5e3,closeButton:!0,pauseOnHover:!0,pauseOnFocusLoss:!0,draggable:"touch",draggablePercent:80,draggableDirection:"x",role:"alert",theme:"light"});function Qs(e){let a={...Zs,...e};const n=e.stacked,[o,i]=(0,t.useState)(!0),r=(0,t.useRef)(null),{getToastToRender:s,isToastActive:l,count:c}=Os(a),{className:d,style:u,rtl:h,containerId:m}=a;function p(e){const t=bs("Toastify__toast-container",`Toastify__toast-container--${e}`,{"Toastify__toast-container--rtl":h});return xs(d)?d({position:e,rtl:h,defaultClassName:t}):bs(t,ks(d))}function f(){n&&(i(!0),Us.play())}return Ks((()=>{if(n){var e;const t=r.current.querySelectorAll('[data-in="true"]'),n=12,i=null==(e=a.position)?void 0:e.includes("top");let s=0,l=0;Array.from(t).reverse().forEach(((e,t)=>{const a=e;a.classList.add("Toastify__toast--stacked"),t>0&&(a.dataset.collapsed=`${o}`),a.dataset.pos||(a.dataset.pos=i?"top":"bot");const r=s*(o?.2:1)+(o?0:n*t);a.style.setProperty("--y",`${i?r:-1*r}px`),a.style.setProperty("--g",`${n}`),a.style.setProperty("--s",""+(1-(o?l:0))),s+=a.offsetHeight,l+=.025}))}}),[o,c,n]),t.createElement("div",{ref:r,className:"Toastify",id:m,onMouseEnter:()=>{n&&(i(!1),Us.pause())},onMouseLeave:f},s(((e,a)=>{const o=a.length?{...u}:{...u,pointerEvents:"none"};return t.createElement("div",{className:p(e),style:o,key:`container-${e}`},a.map((e=>{let{content:a,props:o}=e;return t.createElement(Ys,{...o,stacked:n,collapseAll:f,isIn:l(o.toastId,o.containerId),style:o.style,key:`toast-${o.key}`},a)})))})))}var Xs=a(1979),el=a(7289);var tl=e=>{let{content:t,level:a=1,className:n=""}=e;const o=`h${a}`,i=encodeURIComponent(t);return(0,Dn.jsxs)(o,{id:i,className:n+" headline-rules",children:[t,i&&(0,Dn.jsx)("span",{className:"icon-inline-right-s headline-link-btn",onClick:()=>function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";navigator.clipboard.writeText(window.location.origin+window.location.pathname+"#"+e),Us.success("Link Copied!")}(i),children:(0,Dn.jsx)(Gn.g,{icon:Pn.CQO})})]})},al=a(537),nl=a(7630),ol=a(4416),il=a(8736);var rl=e=>{const a=e.data,[n,o]=(0,t.useState)([]),[i,r]=(0,t.useState)(0);return(0,t.useEffect)((()=>{!async function(){const e=new jn.J;if(null!=a.RestrictedEquipment){const t=await e.runEvent("getEquipmentRestrictionPresentable",a,[],[],a.RestrictedEquipment);o(t),r((e=>e+1))}else{const t=await e.runEvent("getEquipmentRestriction",a,[],[],null);a.RestrictedEquipment=t;const n=await e.runEvent("getEquipmentRestrictionPresentable",a,[],[],a.RestrictedEquipment);o(n),r((e=>e+1))}}()}),[]),(0,Dn.jsxs)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with FactionEquipmentDisplay.tsx"}),children:[(0,Dn.jsx)("div",{className:"armoury-element-cell",children:(0,Dn.jsx)(al.A,{titlename:a.EquipmentItem.Name,d_method:()=>(0,Dn.jsxs)("div",{className:"rules-equipment-main",children:[(0,Dn.jsx)(ol.A,{facrelObject:a,baseobject:a.EquipmentItem}),(0,Dn.jsx)(nl.A,{data:a.EquipmentItem})]})})}),(0,Dn.jsxs)("div",{className:"armoury-element-cell",children:[(0,Dn.jsx)("div",{className:"armoury-element-price",children:(0,Dn.jsx)(il.A,{amount:a.Cost,type:(0,za.Ie)(a.CostType)})}),0!=a.Limit&&(0,Dn.jsx)("div",{className:"armoury-element-restriction armoury-element-limit",children:"LIMIT: "+a.Limit}),n.length>0&&(0,Dn.jsx)("div",{className:"armoury-element-restriction",children:n.join(", ")+" only"})]})]})};var sl=e=>{let{headline:t,items:a}=e;return(0,Dn.jsxs)("div",{className:"RulesArmouryElement rules-card",children:[(0,Dn.jsx)("div",{className:"armoury-headline rules-card-title",children:t}),(0,Dn.jsx)("div",{className:"armoury-content rules-card-content",children:a.map((e=>(0,Dn.jsx)("div",{className:"armoury-element",children:(0,Dn.jsx)(rl,{data:e})},e.ID)))})]})},ll=a(2306),cl=a(6421);var dl=e=>{const[a,n]=(0,t.useState)(false),{settings:o}=(0,cl.t)();function i(e){const t=encodeURIComponent(e.name),a=window.location.origin+window.location.pathname+"#"+t;return o.show_lore&&"Lore"===e.name?"":(0,Dn.jsxs)("a",{className:"rules-page-anchor",href:a,children:[e.name,(0,Dn.jsx)(Gn.g,{icon:Pn.XkK,className:"icon-inline-right"})]})}return(0,Dn.jsxs)("div",{className:"rules-page-anchors",children:[(0,Dn.jsxs)("div",{className:"rules-page-anchors-title",onClick:()=>{n(!a)},children:[(0,Dn.jsxs)("span",{className:"text",children:[(0,Dn.jsx)(Gn.g,{icon:Pn.WVH,className:"icon-inline-left-l"}),"On this page"]}),(0,Dn.jsx)("span",{className:"collapse-chevron-wrap",children:(0,Dn.jsx)(Gn.g,{icon:a?Pn.w2A:Pn.Jt$,className:""})})]}),(0,Dn.jsx)(ll.A,{in:a,children:(0,Dn.jsx)("div",{className:"rules-page-anchors-content",children:e.listofcontents.map(((e,a)=>(0,Dn.jsx)(t.Fragment,{children:i(e)},a)))})})]})};var ul=e=>{let{faction:a}=e;const{settings:n}=(0,cl.t)();if(!n.show_lore)return null;const o=a,[i,r]=(0,t.useState)(!1);return(0,Dn.jsxs)("div",{className:"RulesLoreSection rules-lore-section",id:"Lore",children:[(0,Dn.jsxs)("div",{className:"rules-lore-title",onClick:()=>r(!i),children:[(0,Dn.jsxs)("span",{className:"text",children:[(0,Dn.jsx)(Gn.g,{icon:Pn.LBj,className:"icon-inline-left-l"}),"Faction lore"]}),(0,Dn.jsx)("span",{className:"collapse-chevron-wrap",children:(0,Dn.jsx)(Gn.g,{icon:i?Pn.w2A:Pn.Jt$,className:""})})]}),(0,Dn.jsx)(ll.A,{in:i,children:(0,Dn.jsx)("div",{className:"rules-lore-content",children:o.GetLoreHTML()})})]})},hl=a(5402);var ml=e=>{let{headline:a,content:n}=e;const[o,i]=(0,t.useState)(false);return(0,Dn.jsx)("div",{className:"rules-faction-rule RulesFactionRule",children:(0,Dn.jsx)(hl.A,{headline:a,content:n})})},pl=a(8314),fl=a(3600),gl=a(3519),yl=a(8373),_l=a(4286),bl=a(9750),vl=a(2925),wl=a(5947),xl=a(1838),kl=a(7164),Cl=a(2884),jl=a(4300),Sl=a(1235),Il=a(2557);var Al=e=>{let{thumbnail_url:t="",creator_name:a=""}=e;return(0,Dn.jsxs)("div",{className:"STL_Creator_Name",children:[(0,Dn.jsx)("div",{className:"creator-image-wrap",children:(0,Dn.jsx)("img",{src:t,alt:`${a}-logo`})}),(0,Dn.jsx)("div",{className:"creator-name",children:a})]})};var Nl=e=>{var a,n;let{promo_id:o=0,show:i,onClose:r}=e;const[s,l]=(0,t.useState)(!1),[c,d]=(0,t.useState)(null),[u,h]=(0,t.useState)(null),m=(0,t.useRef)(null),p=(0,t.useMemo)((()=>o?`${_n.a.URL}/wp-json/synod/v1/stl-promotion-detail/${encodeURIComponent(String(o))}`:""),[o]);return(0,t.useEffect)((()=>{if(!i||!o||!p)return;if(m.current===o)return;const e=new AbortController;return(async()=>{l(!0),h(null);try{const t=await fetch(p,{method:"GET",signal:e.signal});if(!t.ok)throw new Error(String(t.status));const a=(e=>{var t;const a=Array.isArray(null===e||void 0===e?void 0:e.gallery_urls)?e.gallery_urls.filter((e=>"string"===typeof e&&e.length>0)):[],n=Array.isArray(null===e||void 0===e?void 0:e.gallery_ids)?e.gallery_ids.map((e=>parseInt(e,10))).filter((e=>Number.isInteger(e)&&e>0)):[],i=null!==e&&void 0!==e&&e.creator&&"object"===typeof e.creator?{creator_name:"string"===typeof e.creator.creator_name?e.creator.creator_name:void 0,creator_id:Number.isInteger(e.creator.creator_id)?e.creator.creator_id:void 0,creator_thumbnail_url:"string"===typeof e.creator.creator_thumbnail_url?e.creator.creator_thumbnail_url:void 0}:void 0;return{id:Number(null!==(t=null===e||void 0===e?void 0:e.id)&&void 0!==t?t:o),name:"string"===typeof(null===e||void 0===e?void 0:e.name)?e.name:"",thumbnail_url:"string"===typeof(null===e||void 0===e?void 0:e.thumbnail_url)?e.thumbnail_url:"",thumbnail_id:Number.isInteger(null===e||void 0===e?void 0:e.thumbnail_id)?e.thumbnail_id:void 0,model_id:Number.isInteger(null===e||void 0===e?void 0:e.model_id)?e.model_id:void 0,details_link:"string"===typeof(null===e||void 0===e?void 0:e.details_link)?e.details_link:"",description:"string"===typeof(null===e||void 0===e?void 0:e.description)?e.description:"",gallery_ids:n,gallery_urls:a,creator_id:Number.isInteger(null===e||void 0===e?void 0:e.creator_id)?e.creator_id:void 0,creator:i}})(await t.json());d(a)}catch(xC){h("Failed to load promotion details."),d(null)}finally{l(!1),m.current=o}})(),()=>e.abort()}),[i,o,p]),(0,t.useEffect)((()=>{i?(m.current=null,d(null),h(null)):(m.current=null,d(null),h(null),l(!1))}),[o,i]),(0,Dn.jsx)(Il.A,{show:i,onHide:r,className:"Modal_STL_PromoItem_Detail",centered:!0,children:(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsx)("div",{className:"close-btn",onClick:e=>{e.stopPropagation(),r()},role:"button",children:(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon"})}),s&&(0,Dn.jsx)(Zo,{message:"Loading Details"}),!s&&u&&(0,Dn.jsx)("div",{className:"stl-detail-error",children:u}),!s&&!u&&c&&(0,Dn.jsxs)("div",{className:"stl-detail-wrap",children:[c.thumbnail_url&&(0,Dn.jsx)("div",{className:"stl-detail-thumb",children:(0,Dn.jsx)("img",{src:c.thumbnail_url,alt:c.name||"STL thumbnail",style:{width:"100%",height:"auto",borderRadius:8}})}),""!=c.name&&(0,Dn.jsx)("h4",{className:"stl-detail-name",children:c.name}),(null===(a=c.creator)||void 0===a?void 0:a.creator_name)&&(null===(n=c.creator)||void 0===n?void 0:n.creator_thumbnail_url)&&(0,Dn.jsx)(Al,{creator_name:c.creator.creator_name,thumbnail_url:c.creator.creator_thumbnail_url}),c.details_link&&(0,Dn.jsx)("div",{className:"stl-detail-link-wrap",children:(0,Dn.jsxs)("a",{href:c.details_link,target:"_blank",rel:"noopener noreferrer nofollow",className:"btn btn-primary stl-detail-link",children:[(0,Dn.jsx)(Gn.g,{icon:Pn.KtJ,className:"me-2"}),"Go to store"]})}),c.description&&(0,Dn.jsx)("div",{className:"stl-detail-description",style:{marginTop:16},children:c.description}),c.gallery_urls&&c.gallery_urls.length>0&&(0,Dn.jsxs)("div",{className:"stl-detail-gallery",children:[(0,Dn.jsx)("h4",{children:"Gallery"}),c.gallery_urls.map(((e,t)=>(0,Dn.jsx)("div",{className:"stl-detail-gallery-item",children:(0,Dn.jsx)("img",{src:e,alt:`${c.name||"Gallery image"} ${t+1}`})},`gal-${c.id}-${t}`)))]})]})]})})};var El=e=>{let{thumbnail_url:a="",name:n="",creator_name:o="",promo_id:i=0}=e;const[r,s]=(0,t.useState)(!1);return(0,Dn.jsxs)("div",{className:"STL_PromoItem",onClick:()=>s(!0),children:[(0,Dn.jsx)("div",{className:"promo-thumbnail-wrap",children:(0,Dn.jsx)("img",{src:a,className:"promo-thumbnail",alt:n})}),(0,Dn.jsx)("div",{className:"name",children:n}),(0,Dn.jsx)("div",{className:"creator-name",children:o}),(0,Dn.jsx)(Nl,{promo_id:i,show:r,onClose:()=>s(!1)})]})};const Tl={self:[],parent:[],children:[],siblings:[]},Dl=["self","parent","children","siblings"];var Rl=e=>{let{model_slug:a="",isOpen:n}=e;const[o,i]=(0,t.useState)(!1),[r,s]=(0,t.useState)(!0),[l,c]=(0,t.useState)(Tl),d=(0,t.useRef)(""),u=(0,t.useMemo)((()=>a?`${_n.a.URL}/wp-json/synod/v1/stl-promotions-by-model/${encodeURIComponent(a)}`:""),[a]),h=(0,t.useCallback)((e=>({self:Array.isArray(null===e||void 0===e?void 0:e.self)?e.self:[],parent:Array.isArray(null===e||void 0===e?void 0:e.parent)?e.parent:[],children:Array.isArray(null===e||void 0===e?void 0:e.children)?e.children:[],siblings:Array.isArray(null===e||void 0===e?void 0:e.siblings)?e.siblings:[]})),[]),m=(0,t.useCallback)((e=>e.self.length+e.parent.length+e.children.length+e.siblings.length>0),[]);(0,t.useEffect)((()=>{if(!n)return;if(d.current!==a&&(c(Tl),s(!0)),!a||!u)return void s(!1);if(d.current===a)return;const e=new AbortController;return(async()=>{i(!0);try{const t=await fetch(u,{method:"GET",signal:e.signal});if(!t.ok)throw new Error(String(t.status));const a=await t.json(),n=h(a);c(n),s(m(n))}catch{c(Tl),s(!1)}finally{i(!1),d.current=a}})(),()=>e.abort()}),[n,a,u,h,m]),(0,t.useEffect)((()=>{n||(d.current="",c(Tl),s(!0),i(!1))}),[a,n]);const p=e=>"self"==e?"This Model":"parent"==e?"Main Model":"children"==e?"Variants":"siblings"==e?"Related":void 0;return(0,Dn.jsx)("div",{className:"FighterSTL_List",children:o?(0,Dn.jsx)(Zo,{message:"Loading STL Files"}):r?(0,Dn.jsx)("div",{className:"stl-results",children:Dl.map(((e,a)=>(0,Dn.jsx)(t.Fragment,{children:l[e].length>0&&(0,Dn.jsxs)("div",{className:"stl-results-section",children:["self"!=e&&(0,Dn.jsx)("h3",{className:"stl-results-section-headline",children:p(e)}),(0,Dn.jsx)("div",{className:"stl-results-section-grid",children:l[e].map((e=>(0,Dn.jsx)(El,{thumbnail_url:e.thumbnail_url,creator_name:e.creator_name,name:e.name,promo_id:e.id},`promo-${e.id}`)))})]},`section-${a}`)},a)))}):(0,Dn.jsx)(Dn.Fragment,{children:"No results"})})};var Ml=e=>{let{model_slug:a=""}=e;const[n,o]=(0,t.useState)(!1);return(0,Dn.jsxs)("div",{className:"StlFinderCollapse fighter-card-collapse",children:[(0,Dn.jsxs)("div",{onClick:()=>o(!n),className:"fighter-card-collapse-title",children:[(0,Dn.jsx)("span",{className:"text",children:"STL finder"}),(0,Dn.jsx)("span",{className:"collapse-chevron-wrap",children:(0,Dn.jsx)(Gn.g,{icon:n?Pn.w2A:Pn.Jt$,className:""})})]}),(0,Dn.jsx)(ll.A,{in:n,children:(0,Dn.jsx)("div",{className:"fighter-card-collapse-content",children:(0,Dn.jsx)("div",{className:"fighter-card-collapse-content-inner",children:(0,Dn.jsx)(Rl,{model_slug:a,isOpen:n})})})})]})};var Ol=e=>{const{settings:a}=(0,cl.t)(),n=e.data,o=e.data.Model,i=e.faction,r=e.optionselections,[s,l]=(0,t.useState)({}),[c,d]=(0,t.useState)({}),[u,h]=(0,t.useState)([]),[m,p]=(0,t.useState)([]),[f,g]=(0,t.useState)(""),[y,_]=(0,t.useState)(""),[b,v]=(0,t.useState)(""),[w,x]=(0,t.useState)(0);function k(e){const t={};for(let a=0;a<e.length;a++){const n=e[a].GetSpecialCategory();t[n]?t[n].push(e[a]):t[n]=[e[a]]}return t}return(0,t.useEffect)((()=>{!async function(){const e=new jn.J;if(void 0!=i){const e=await n.getContextuallyAvailableUpgrades(i);if(void 0!=r&&Object.entries(r).filter((e=>null!=e[1])).length>0){for(const[t,a]of Object.entries(r))if(null!=a&&void 0!=a&&a.value instanceof Sl.Z){const t=new jn.J,n=await t.runEvent("getContextuallyAddedUpgrades",a.value,[],e,o);d(k(n))}}else d(k(e))}else d(o.GetSplitUpgrades());let t=o.Abilities;if(void 0!=i){const e=await n.getContextuallyAvailableAbilities(i);if(void 0!=r&&Object.entries(r).filter((e=>null!=e[1])).length>0){for(const[a,n]of Object.entries(r))if(null!=n&&void 0!=n&&n.value instanceof Sl.Z){const a=new jn.J,i=await a.runEvent("getContextuallyAddedAbilities",n.value,[],e,o);t=i,h(i)}}else t=e,h(e)}else t=o.Abilities,h(o.Abilities);const a=[],s=[],c=n.getKeywords();let u=[];for(let n=0;n<c.length;n++)u.push(c[n].ID);const m=new jn.J;for(let n=0;n<t.length;n++)u=await m.runEvent("getContextuallyRelevantKeywordsByID",t[n],[],u,o);for(let n=0;n<u.length;n++){const e=await Ja.KeywordFactory.CreateNewKeyword(u[n],null);a.push(e)}const f=await m.runEvent("getContextuallyRelevantKeywordsByObject",o,[],[],o);for(let n=0;n<f.length;n++)a.push(f[n]);const y=[];for(let n=0;n<a.length;n++){const e=await m.runEvent("getKeywordAdditions",a[n],[],[],null);for(let t=0;t<e.length;t++)y.push(e[t])}for(let n=0;n<y.length;n++)a.push(y[n]);const b=[];for(let n=0;n<a.length;n++){const e=await m.runEvent("getKeywordRemovals",a[n],[],[],null);for(let t=0;t<e.length;t++)b.push(e[t])}const C=[];for(let n=0;n<a.length;n++)C.includes(a[n].GetTrueName())||b.includes(a[n].GetID())||(s.push(a[n]),C.push(a[n].GetTrueName()));p(s),await async function(e){x(w+1)}();const j=await e.runEvent("getModelLimitPresentation",n,[],[n.Maximum.toString()],!0);v(j);const S=await e.runEvent("getModelLimitPresentation",n,[],[n.Minimum.toString()],!1);_(S);const I=await o.GetPresentableStatistics();l(I);const A=await n.getBaseSizeString();g(A),x((e=>e+1))}()}),[]),(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with ModelDisplay.tsx"}),children:(0,Dn.jsxs)("section",{className:"RulesModelDisplay fighter-card",children:[(0,Dn.jsx)(wl.A,{name:n.getName()}),(0,Dn.jsxs)("div",{className:"fighter-card-main-area",children:[(0,Dn.jsx)(xl.A,{model_slug:o.GetSlug(),faction_slug:i.ID}),(0,Dn.jsxs)("div",{className:"fighter-card-meta fighter-card-meta-above",children:[(0,Dn.jsx)(kl.A,{className:"fighter-cost",label:"Cost",value:(0,Dn.jsx)(il.A,{amount:n.Cost,type:n.getCostType()})}),(0,Dn.jsx)(kl.A,{className:"fighter-availability",label:"Availability",value:function(){const e=void 0==y[0]||void 0==b[0]?"":"-1"==b[0]?"Unlimited":y[0]==b[0]?"0"==y[0]?"Unlimited":y[0]:(0,za.Et)(b[0])&&(0,za.Et)(b[0])?y[0]+"-"+b[0]:(0,za.Et)(y[0])?0==Number(y[0])?"":y[0]:"",t=function(){const e=[];for(let t=0;t<y.length;t++)(0,za.Et)(y[t])||e.push(y[t]);for(let t=0;t<b.length;t++)(0,za.Et)(b[t])||e.push(b[t]);return e.join(", ")}();return(0,Dn.jsxs)(Dn.Fragment,{children:[e.length>0&&(0,Dn.jsx)(Dn.Fragment,{children:e}),t.length>0&&(0,Dn.jsxs)(Dn.Fragment,{children:[e.length>0&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("br",{}),(0,Dn.jsx)("span",{className:"fighter-meta-subval",children:t})]}),0==e.length&&(0,Dn.jsx)(Dn.Fragment,{children:t})]})]})}()}),(0,Dn.jsx)(kl.A,{className:"synod-image-source-wrap",label:"Image",value:(0,Dn.jsx)(vl.A,{modelSlug:o.GetSlug()})}),a.show_base_sizes&&(0,Dn.jsx)(kl.A,{className:"fighter-base",label:"Base",value:f})]}),(0,Dn.jsx)(Cl.A,{movement:(0,fl.NJ)(s),melee:(0,fl.A)(s),ranged:(0,fl.Lp)(s),armour:(0,fl.aR)(s)}),(0,Dn.jsx)("div",{className:"fighter-card-meta fighter-card-meta-below",children:(0,Dn.jsx)(jl.A,{keywords:m,modelId:o.ID},w)},w)]}),(0,Dn.jsxs)("div",{className:"fighter-card-collapse-wrap",children:[u.length>0&&(0,Dn.jsx)(gl.A,{name:"Abilities",state:!1,method:()=>(0,Dn.jsx)(Dn.Fragment,{children:u.map((e=>(0,Dn.jsx)(t.Fragment,{children:(0,Dn.jsx)(_l.A,{data:e})},"model_ability_"+o.ID+"_ability_id_"+e.ID)))})}),n.hasDescription()&&(0,Dn.jsx)(gl.A,{name:"Battlekit",state:!1,method:()=>(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("div",{className:"description-wrap",children:(0,pl.fE)(o,o.Description)}),o.getUniqueEquipment().length>0&&(0,Dn.jsx)(Dn.Fragment,{children:o.getUniqueEquipment().map((e=>(0,Dn.jsx)(bl.A,{team_col:o.Team,data:e},e.ID)))})]})}),Object.keys(c).length>0&&(0,Dn.jsx)(Dn.Fragment,{children:Object.keys(c).map((e=>(0,Dn.jsx)(gl.A,{name:(0,za.h8)(e),state:!1,has_children:n.hasUpgrades(),method:()=>(0,Dn.jsx)(Dn.Fragment,{children:c[e].map((e=>(0,Dn.jsx)(t.Fragment,{children:(0,Dn.jsx)(yl.A,{item:e})},"model_upgrade_"+o.ID+"_upgrade_id_"+e.ID)))})},e)))}),n.hasLore()&&a.show_lore&&(0,Dn.jsx)(gl.A,{name:"Lore",state:!1,method:()=>(0,Dn.jsx)(Dn.Fragment,{children:(0,pl.fE)(o,o.Lore)})}),o.ID&&(0,Dn.jsx)(Ml,{model_slug:o.ID})]},w)]},w)})};const ql=768,Gl=992,Pl=1200,Fl={"container-width":{XlargeDesktop:[[970,250],[970,90],[728,90]],largeDesktop:[[970,250],[970,90],[728,90]],desktop:[[728,90],[300,250],[320,100],[320,50],[336,280]],tablet:[[728,90],[300,250],[320,100],[320,50],[336,280]],mobile:[[300,250],[320,100],[320,50],[336,280]]},"container-width-half":{XlargeDesktop:[[320,100]],largeDesktop:[[320,100]],desktop:[[320,100]],tablet:[[300,250],[320,100],[320,50],[336,280]],mobile:[[300,250],[320,100],[320,50],[336,280]]},"compendium-width":{XlargeDesktop:[[728,90],[300,250]],largeDesktop:[[728,90],[300,250]],desktop:[[728,90],[300,250]],tablet:[[300,250],[320,100],[320,50],[336,280]],mobile:[[300,250],[320,100],[320,50],[336,280]]},"wbb-full-width":{XlargeDesktop:[[970,250],[970,90],[728,90]],largeDesktop:[[970,250],[970,90],[728,90]],desktop:[[728,90],[300,250],[320,100],[320,50],[336,280]],tablet:[[728,90],[300,250],[320,100],[320,50],[336,280]],mobile:[[300,250],[320,100],[320,50],[336,280]]},"narrow-content-width":{XlargeDesktop:[[300,600],[160,600],[300,250]],largeDesktop:[[300,600],[160,600],[300,250]],desktop:[[300,600],[160,600],[300,250]],tablet:[[300,250]],mobile:[[300,250],[320,50]]},"campaign-left":{XlargeDesktop:[[728,90],[320,100],[320,50]],largeDesktop:[[320,100],[320,50]],desktop:[[320,100],[320,50]],tablet:[[320,100],[320,50]],mobile:[[320,100],[320,50]]},"campaign-right":{XlargeDesktop:[[320,100],[320,50]],largeDesktop:[[320,100],[320,50]],desktop:[[320,100],[320,50]],tablet:[[320,100],[320,50]],mobile:[[320,100],[320,50]]}};var Ll=e=>{var a;let{placementId:n,type:o,className:i,demo:r}=e;const{SiteUser:s,loadingUser:l}=(0,ti.A)(),[c,d]=(0,t.useState)("undefined"!==typeof window?window.innerWidth:0);(0,t.useRef)(Math.floor(65536*Math.random()).toString(16).padStart(4,"0"));(0,t.useEffect)((()=>{const e=()=>d(window.innerWidth);return window.addEventListener("resize",e),e(),()=>window.removeEventListener("resize",e)}),[]);const u=(h=c)>=Pl?"largeDesktop":h>=Gl?"desktop":h>=ql?"tablet":"mobile";var h;const m=Fl[o][u],p=`nitro-ad-${n}-${u}`,f=m.length>0?Math.min(...m.map((e=>e[1]))):0,g=m.length>0?Math.min(...m.map((e=>e[0]))):0;return(0,t.useEffect)((()=>{var e;if(!l&&(null===s||void 0===s||null===(e=s.Premium)||void 0===e||!e.IsPremium)&&!window.__TC_IS_PRERENDER__&&c){if(!window.nitroAds||!window.nitroAds.createAd){var t;const e=(null===(t=window.nitroAds)||void 0===t?void 0:t.queue)||[];window.nitroAds={createAd:function(){for(var e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];return new Promise((e=>{window.nitroAds.queue.push(["createAd",t,e])}))},addUserToken:function(){for(var e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];window.nitroAds.queue.push(["addUserToken",t])},queue:e}}window.nitroAds.createAd(p,{format:"display",sizes:m,renderVisibleOnly:!0,demo:r,report:{enabled:!0,icon:!0,wording:"Report Ad",position:"top-right"}},p)}}),[p,n,m,l,s,r]),!l&&null!==s&&void 0!==s&&null!==(a=s.Premium)&&void 0!==a&&a.IsPremium?null:(0,Dn.jsx)("div",{id:p,className:`nitro-responsive-ad ${o} ${i||""}`,style:{minHeight:`${f}px`,minWidth:`${g}px`,backgroundColor:"rgba(0,0,0,0.05)",display:"flex",justifyContent:"center",alignItems:"center",margin:"20px auto"}},p)};var Wl=e=>{const a=e.data,n=e.col,[o,i]=(0,t.useState)({}),[r,s]=(0,t.useState)(0);function l(e){for(let t=0;t<e.KeyWord.length;t++)if("kw_elite"==e.KeyWord[t].ID)return!0;return!1}return(0,Dn.jsxs)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with FactionDisplay.tsx"}),children:[function(e,t){const a=[];return a.push({name:"Lore",route:"lore"}),e.Rules.length>0&&a.push({name:"Faction Rules",route:"rules"}),e.MyOptions.length>0&&a.push({name:"Warband Options",route:"options"}),e.Models.filter((e=>e.Captain&&!e.Mercenary)).length>0&&a.push({name:"Captains",route:"captains"}),e.Models.filter((e=>!e.Captain&&!e.Mercenary&&l(e.Model))).length>0&&a.push({name:"Elite",route:"elite"}),e.Models.filter((e=>!e.Captain&&!e.Mercenary&&!l(e.Model))).length>0&&a.push({name:"Infantry",route:"infantry"}),e.Models.filter((e=>e.Mercenary)).length>0&&a.push({name:"Mercenaries",route:"mercenary"}),a.push({name:"Armoury",route:"armoury"}),null!=t&&void 0!=t&&t.SubModelsList.length>1&&("base"==e.Variant?a.push({name:"Variants",route:"variants"}):a.push({name:"Base Faction",route:"base"})),a.push({name:"Promotions",route:"Promotions"}),(0,Dn.jsx)(dl,{title:"Contents",listofcontents:a})}(a,n),(0,Dn.jsx)(ul,{faction:a}),a.Rules.length>0&&(0,Dn.jsxs)("div",{className:"rules-faction-rules-wrap",children:[(0,Dn.jsx)(tl,{content:"Faction Rules",level:2,className:""}),a.Rules.map((e=>(0,Dn.jsx)(ml,{headline:e.Name,content:(0,Dn.jsx)(Xs.A,{data:e,show_simple:!0})},"faction_rule_"+a.ID+"_rule_id_"+e.ID)))]}),a.MyOptions.length>0&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(tl,{content:"Warband Options",level:2,className:""}),(0,Dn.jsx)(el.A,{data:a.MyOptions,onSelectionChange:(e,t)=>{i((a=>({...a,[e]:t}))),s(r+1)}})]}),(0,Dn.jsx)(Ll,{placementId:"compendium-faction-top",type:"compendium-width"}),(0,Dn.jsxs)("div",{children:[a.Models.filter((e=>1==e.Captain&&0==e.Mercenary)).length>0&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(tl,{content:"Captains",level:2,className:""}),a.Models.filter((e=>1==e.Captain&&0==e.Mercenary)).map((e=>(0,Dn.jsx)(Ol,{data:e,faction:a,optionselections:o},"faction_rule_"+a.ID+"_rule_id_"+e.ID)))]}),a.Models.filter((e=>0==e.Captain&&0==e.Mercenary&&1==l(e.Model))).length>0&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(tl,{content:"Elite",level:2,className:""}),a.Models.filter((e=>0==e.Captain&&0==e.Mercenary&&1==l(e.Model))).map((e=>(0,Dn.jsx)(Ol,{data:e,faction:a,optionselections:o},"faction_rule_"+a.ID+"_rule_id_"+e.ID)))]}),a.Models.filter((e=>0==e.Captain&&0==e.Mercenary&&0==l(e.Model))).length>0&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(tl,{content:"Infantry",level:2,className:""}),a.Models.filter((e=>0==e.Captain&&0==e.Mercenary&&0==l(e.Model))).map((e=>(0,Dn.jsx)(Ol,{data:e,faction:a,optionselections:o},"faction_rule_"+a.ID+"_rule_id_"+e.ID)))]}),a.Models.filter((e=>1==e.Mercenary)).length>0&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(tl,{content:"Mercenaries",level:2,className:""}),a.Models.filter((e=>1==e.Mercenary)).map((e=>(0,Dn.jsx)(Ol,{data:e,faction:a},"faction_rule_"+a.ID+"_rule_id_"+e.ID)))]})]},r),a.EquipmentItems.length>0&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(tl,{content:"Armoury",level:2,className:""}),a.EquipmentItems.filter((e=>"melee"==e.EquipmentItem.Category&&0==(0,za.Kg)(e.Tags,"exploration_only"))).length>0&&(0,Dn.jsx)(sl,{headline:"Melee Weapons",items:a.EquipmentItems.filter((e=>"melee"===e.EquipmentItem.Category&&!(0,za.Kg)(e.Tags,"exploration_only")))}),a.EquipmentItems.filter((e=>"ranged"==e.EquipmentItem.Category&&0==(0,za.Kg)(e.Tags,"exploration_only"))).length>0&&(0,Dn.jsx)(sl,{headline:"Ranged Weapons",items:a.EquipmentItems.filter((e=>"ranged"===e.EquipmentItem.Category&&!(0,za.Kg)(e.Tags,"exploration_only")))}),a.EquipmentItems.filter((e=>"grenade"==e.EquipmentItem.Category&&0==(0,za.Kg)(e.Tags,"exploration_only"))).length>0&&(0,Dn.jsx)(sl,{headline:"Grenades",items:a.EquipmentItems.filter((e=>"grenade"===e.EquipmentItem.Category&&!(0,za.Kg)(e.Tags,"exploration_only")))}),a.EquipmentItems.filter((e=>"armour"==e.EquipmentItem.Category&&0==(0,za.Kg)(e.Tags,"exploration_only"))).length>0&&(0,Dn.jsx)(sl,{headline:"Armour",items:a.EquipmentItems.filter((e=>"armour"===e.EquipmentItem.Category&&!(0,za.Kg)(e.Tags,"exploration_only")))}),a.EquipmentItems.filter((e=>"shield"==e.EquipmentItem.Category&&0==(0,za.Kg)(e.Tags,"exploration_only"))).length>0&&(0,Dn.jsx)(sl,{headline:"Shields",items:a.EquipmentItems.filter((e=>"shield"===e.EquipmentItem.Category&&!(0,za.Kg)(e.Tags,"exploration_only")))}),a.EquipmentItems.filter((e=>"equipment"==e.EquipmentItem.Category&&0==(0,za.Kg)(e.Tags,"exploration_only"))).length>0&&(0,Dn.jsx)(sl,{headline:"Equipment",items:a.EquipmentItems.filter((e=>"equipment"===e.EquipmentItem.Category&&!(0,za.Kg)(e.Tags,"exploration_only")))}),a.EquipmentItems.filter((e=>"special"==e.EquipmentItem.Category&&0==(0,za.Kg)(e.Tags,"exploration_only"))).length>0&&(0,Dn.jsx)(sl,{headline:"Special Battlekit",items:a.EquipmentItems.filter((e=>"special"===e.EquipmentItem.Category&&!(0,za.Kg)(e.Tags,"exploration_only")))}),a.EquipmentItems.filter((e=>1==(0,za.Kg)(e.Tags,"exploration_only"))).length>0&&(0,Dn.jsx)(sl,{headline:"Exploration Only",items:a.EquipmentItems.filter((e=>(0,za.Kg)(e.Tags,"exploration_only")))})]})]})};const Bl=e=>new Promise((t=>setTimeout(t,e)));function Hl(e){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"full";const[n,o]=(0,t.useState)((()=>{const t=`${e}-${a}`;return fn.T.getInstance().imageFactionCache[t]||{url:"",sourceTitle:"",sourceUrl:"",imageId:0,factionName:"",factionId:0,loading:!0,error:!1}}));return(0,t.useEffect)((()=>{!async function(){if(!e)return;const t=fn.T.getInstance(),n=`${e}-${a}`;if(t.CheckFactionCache(n))o({...t.imageFactionCache[n],loading:!1});else{if(t.CheckFactionCallCache(n)){const e=1e3;let a=0;for(;!t.CheckFactionCache(n)&&a<e;)await Bl(100),a+=1;o(t.imageFactionCache[n])}t.CheckFactionCache(n)||(t.AddFactionCallCache(n),fetch(`${_n.a.URL}/wp-json/synod/v1/faction-image/${e}`).then((e=>{if(!e.ok)throw new Error("Network response was not ok");return e.json()})).then((e=>{var i,r,s,l,c,d,u,h,m,p;const f=null===(i=e.image)||void 0===i||null===(r=i.media_details)||void 0===r?void 0:r.sizes,g={url:(null===f||void 0===f||null===(s=f[a])||void 0===s?void 0:s.source_url)||(null===(l=e.image)||void 0===l?void 0:l.source_url)||"",sourceTitle:(null===(c=e.image)||void 0===c||null===(d=c.meta)||void 0===d?void 0:d.attachment_source_title)||"",sourceUrl:(null===(u=e.image)||void 0===u||null===(h=u.meta)||void 0===h?void 0:h.attachment_source)||"",imageId:(null===(m=e.image)||void 0===m?void 0:m.id)||0,factionName:e.faction_name||"",factionId:e.faction_id||0,loading:!1,error:!e.image||!(null!==(p=e.image)&&void 0!==p&&p.source_url)};t.imageFactionCache[n]=g,o(g)})).catch((()=>{o((e=>({...e,loading:!1,error:!0})))})))}}()}),[e,a]),n}var Ul=e=>{let{factionSlug:t,size:a="full",className:n=""}=e;if(!t)return null;const{url:o,factionName:i,error:r,sourceTitle:s,sourceUrl:l}=Hl(t,a),{activeId:c,setActiveId:d}=On();t.toString();return r?null:(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("img",{src:o||"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",alt:i||"",className:o?`loaded-image ${n}`:`ghost-image ${n}`}),(0,Dn.jsx)(Ln,{sourceTitle:s,sourceUrl:l,popoverSlug:t.toString()})]})};var Kl=e=>{let{slug:t,id:a,title:n,parentSlug:o=!1,children:i}=e;const r=`/compendium/warbands/${o?`${o}/${t}`:t}`,s=(0,zt.Zp)();return(0,Dn.jsxs)("div",{className:"RulesBannerFaction",children:[(0,Dn.jsxs)(yn.A,{link:r,runfunc:()=>{s(r,{state:Date.now().toString()})},classes:"faction-item",children:[(0,Dn.jsx)("div",{className:"faction-name",children:n}),(0,Dn.jsx)("div",{className:"faction-image-wrap",children:(0,Dn.jsx)(Ul,{factionSlug:a,className:"faction-image",size:"full"})})]}),i]})};var zl=e=>{let{item:t,className:a}=e;return(0,Dn.jsx)("a",{className:"Promotion",href:t.link,target:"_blank",rel:"noopener noreferrer nofollow",children:(0,Dn.jsx)("img",{src:t.image_urls.medium_large})})};var Vl=e=>{let{content_id:a}=e;const[n,o]=t.useState(null),[i,r]=t.useState(!1),[s,l]=t.useState(null);return t.useEffect((()=>{if(!a)return o([]),void l(null);const e=new AbortController,t=`${_n.a.URL}/wp-json/synod/v1/promotions/${encodeURIComponent(a)}`;return(async()=>{try{r(!0),l(null);const a=await fetch(t,{method:"GET",credentials:"same-origin",signal:e.signal,headers:{Accept:"application/json"}});if(!a.ok){const e=await a.text().catch((()=>""));throw new Error(`HTTP ${a.status} \u2013 ${e||a.statusText}`)}const n=await a.json(),i=Array.isArray(n)?n:[];o(i)}catch(xC){if("AbortError"===(null===xC||void 0===xC?void 0:xC.name))return;l((null===xC||void 0===xC?void 0:xC.message)||"Failed to load promotions."),o([])}finally{r(!1)}})(),()=>e.abort()}),[a]),a?i||!n||n&&0===n.length?null:(0,Dn.jsxs)("div",{className:"PromotionsSet",id:"Promotions",children:[(0,Dn.jsx)("h2",{children:"Promotions"}),(0,Dn.jsx)("div",{className:"row",children:n.map(((e,t)=>(0,Dn.jsx)("div",{className:"col-12 col-md-6",children:(0,Dn.jsx)(zl,{item:e})},t)))})]}):null};var Yl=()=>(0,Dn.jsxs)("div",{className:"container",style:{textAlign:"center",padding:"50px 0"},children:[(0,Dn.jsxs)(Yo,{children:[(0,Dn.jsx)("title",{children:"404 - Page not found | Trench Companion"}),(0,Dn.jsx)("meta",{name:"prerender-status-code",content:"404"}),(0,Dn.jsx)("meta",{name:"robots",content:"noindex, nofollow"})]}),(0,Dn.jsx)("h1",{children:"404 - Page not found"}),(0,Dn.jsx)("h2",{children:"Lost in the Trenches?"}),(0,Dn.jsx)("p",{children:"This page does not exist."}),(0,Dn.jsx)("a",{href:"/",className:"btn btn-primary",children:"Back to Base"})]});var Jl=e=>{const a=e.data,n=(0,zt.zy)().pathname.split("/"),[o,i]=(0,t.useState)(function(){if(n.length>3){const e=n.slice(-1)[0];for(let t=0;t<a.SubModelsList.length;t++)if(a.SubModelsList[t].faction.MatchURL(e))return a.SubModelsList[t];return null}for(let e=0;e<a.SubModelsList.length;e++)if("base"==a.SubModelsList[e].var_name)return a.SubModelsList[e];return null}()),[r,s]=(0,t.useState)(0);function l(){return null==o?"":"base"==o.var_name?a.ID:o.faction.ID}const{url:c,factionName:d,error:u}=Hl(l(),"medium");return null==o?(0,Dn.jsx)(Yl,{}):(0,Dn.jsxs)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with FactionCollectionDisplay.tsx"}),children:[(0,Dn.jsx)(Jo,{title:o.faction.GetTrueName(),description:o.faction.Description[0].Content,ogImage:c}),null!=o&&(0,Dn.jsx)(Dn.Fragment,{children:(0,Dn.jsxs)("div",{className:"FactionCollectionDisplay",children:[(0,Dn.jsxs)("div",{className:"faction-hero",children:[(0,Dn.jsx)("h1",{children:"base"==o.var_name?a.GetBaseName():o.faction.Name}),(0,Dn.jsx)(Ul,{factionSlug:l(),size:"full"})]}),a.SubModelsList.length>1&&!1,(0,Dn.jsx)(Wl,{data:o.faction,col:a}),a.SubModelsList.length>1&&(0,Dn.jsxs)(Dn.Fragment,{children:[a.GetBaseFac()!=o.faction&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(tl,{content:"Base Faction",level:2,className:""}),(0,Dn.jsx)(Kl,{id:a.GetBaseFac().ID,slug:a.GetBaseFac().GetURL(),title:a.GetBaseFac().GetTrueName()},a.GetBaseFac().ID)]}),a.GetBaseFac()==o.faction&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(tl,{content:"Variants",level:2,className:""}),a.SubModelsList.filter((e=>"base"!=e.var_name)).map((e=>(0,Dn.jsx)(Kl,{id:e.faction.ID,slug:e.faction.GetURL(),parentSlug:a.GetBaseFac().GetURL(),title:e.faction.Name?e.faction.Name:""},e.faction.ID)))]})]}),(0,Dn.jsx)(Vl,{content_id:a.GetBaseFac().GetID()})]})})]})},$l=a(1801);var Zl=e=>{let{imageId:a,size:n="medium",className:o=""}=e;const{url:i}=Cn(a,n),[r]=Tn("applycurse"),[s,l]=(0,t.useState)(!1);(0,t.useEffect)((()=>{if("true"===r){const e=setInterval((()=>{l(!0),setTimeout((()=>l(!1)),1e3)}),25e3+9e3*Math.random());return()=>clearInterval(e)}}),[r]);const c=[i?"loaded-image":"ghost-image",o,"true"===r?"cursed-image":"",s?"curse-active":""].join(" ").trim();return(0,Dn.jsx)("img",{src:i||"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",className:c,alt:"",style:{width:"100%"}})};var Ql=e=>{const t=e.data;return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with GloriousDeedDisplay.tsx"}),children:(0,Dn.jsxs)("div",{className:"RulesScenarioSummary rules-scenario-summary rules-card",children:[(0,Dn.jsx)("div",{className:"rules-scenario-summary-title rules-card-title",children:"Scenario Summary"}),(0,Dn.jsxs)("div",{className:"rules-scenario-summary-content rules-card-content",children:[(0,Dn.jsx)("div",{style:{width:"100%"},children:(0,Dn.jsx)(Zl,{imageId:Number(t.ImgLink),size:"large",className:"rules-banner-image-element"})}),(0,Dn.jsx)("table",{className:"rules-scenario-summary-table rules-card-table",children:(0,Dn.jsx)("tbody",{children:(a=t,(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsxs)("tr",{children:[(0,Dn.jsx)("td",{className:"label-cell",children:"Players"}),(0,Dn.jsx)("td",{children:a.EvenMatch?"Even Match":"Attack / Defend"})]}),(0,Dn.jsxs)("tr",{children:[(0,Dn.jsx)("td",{className:"label-cell",children:"Infiltrators"}),(0,Dn.jsx)("td",{children:0==a.InfiltratorType?"Not Allowed":1==a.InfiltratorType?"Allowed":"Special"})]}),(0,Dn.jsxs)("tr",{children:[(0,Dn.jsx)("td",{className:"label-cell",children:"Battle Length"}),(0,Dn.jsx)("td",{children:(a.BattleMin==a.BattleMax?a.BattleMin:a.BattleMin+"-"+a.BattleMax)+" Turns"})]})]}))})})]})]})});var a};var Xl=e=>{const a=e.data;return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with ScenarioDisplay.tsx"}),children:(0,Dn.jsxs)("div",{children:[function(e){const t=[];if(t.push({name:"Forces",route:"forces"}),t.push({name:"Battlefield",route:"battlefield"}),t.push({name:"Deployment",route:"deployment"}),t.push({name:"Infiltrators",route:"infiltrators"}),t.push({name:"Game Length",route:"battlelength"}),t.push({name:"Victory Conditions",route:"victory"}),void 0!=e.SpecialRules)for(let a=0;a<e.SpecialRules.length;a++){const n=e.SpecialRules[a].Name;t.push({name:n||"",route:e.SpecialRules[a].ID})}return t.push({name:"Glorious Deeds",route:"deeds"}),(0,Dn.jsx)(dl,{title:"Contents",listofcontents:t})}(a),(0,Dn.jsx)(Ql,{data:a}),a.Description.length>0&&(0,Dn.jsx)("div",{className:"rules-text-item",children:(0,pl.fE)(a,a.Description)}),(0,Dn.jsxs)("div",{className:"rules-text-item",children:[(0,Dn.jsx)(tl,{content:"Forces",level:2}),(0,pl.fE)(a,a.ForcesDesc)]}),(0,Dn.jsxs)("div",{className:"rules-text-item",children:[(0,Dn.jsx)(tl,{content:"The Battlefield",level:2}),a.BattlefieldSize&&(0,Dn.jsx)(Dn.Fragment,{children:(0,pl.fE)(a,a.BattlefieldSize)}),a.BattlefieldExtra&&(0,Dn.jsx)(Dn.Fragment,{children:(0,pl.fE)(a,a.BattlefieldExtra)})]}),(0,Dn.jsxs)("div",{className:"rules-text-item",children:[(0,Dn.jsx)(tl,{content:"Deployment",level:2}),(0,pl.fE)(a,a.DeploymentDesc)]}),(0,Dn.jsxs)("div",{className:"rules-text-item",children:[(0,Dn.jsx)(tl,{content:"Infiltrators",level:2}),(0,pl.fE)(a,a.InfiltratorDesc)]}),(0,Dn.jsxs)("div",{className:"rules-text-item",children:[(0,Dn.jsx)(tl,{content:"Game Length",level:2}),(0,pl.fE)(a,a.BattlelengthDesc)]}),(0,Dn.jsxs)("div",{className:"rules-text-item",children:[(0,Dn.jsx)(tl,{content:"Victory Conditions",level:2}),(0,pl.fE)(a,a.VictoryDesc)]}),void 0!=a.SpecialRules&&(0,Dn.jsx)(Dn.Fragment,{children:a.SpecialRules.map((e=>(0,Dn.jsxs)("div",{className:"rules-text-item",children:[(0,Dn.jsx)(tl,{content:e.Name?e.Name:"",level:2}),(0,pl.fE)(e,e.Description)]},e.ID)))}),(0,Dn.jsxs)("div",{className:"rules-text-item",children:[(0,Dn.jsx)(tl,{content:"Glorious Deeds",level:2}),(0,Dn.jsx)("p",{children:(0,pl.fE)(a,a.DeedsDesc)}),a.Deeds.map((e=>(0,Dn.jsx)(t.Fragment,{children:(0,Dn.jsx)($l.A,{data:e})},"faction_rule_"+a.ID+"_rule_id_"+e.ID))),a.OptionalDeeds.length>0&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(tl,{content:"Optional Glorious Deeds",level:2}),"If agreed by the players prior to starting the game, you may replace one of the Glory Deeds above for one of the following options:",a.OptionalDeeds.map((e=>(0,Dn.jsx)(t.Fragment,{children:(0,Dn.jsx)($l.A,{data:e})},"faction_rule_"+a.ID+"_rule_id_"+e.ID)))]})]}),(0,Dn.jsx)("div",{className:""})]})})};function ec(){document.querySelectorAll(".glitch").forEach((e=>{setInterval((()=>{const t=function(e){const t=[],a=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,{acceptNode:function(e){var t;return null!==(t=e.parentElement)&&void 0!==t&&t.classList.contains("glitch-active")?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}});for(;a.nextNode();){const e=a.currentNode;e.nodeValue&&e.nodeValue.trim().length>0&&t.push(e)}return t}(e);if(0===t.length)return;const a=t[Math.floor(Math.random()*t.length)],n=a.nodeValue||"";a.__original=n;const o=a.__original;if(!o||o.length<4)return;const i=function(e){const t=["Oh, Holy Father, we march with Your wrath in our hearts! Let our bodies be torn and our souls set aflame, for we are the Vengeance of the Lord. Through blood and fire, we cleanse the earth of the Devil\u2019s taint. Guide our hands, strengthen our hearts, for we are Your sword!","By the Blessed Flame, we march forth! Let our suffering be a sacrifice, our wounds a testament to Your glory. In the name of the Meta-Christ, we shall not falter, we shall not yield. We are the faithful, the forsaken, the hammer of Your vengeance upon the heretic\u2019s skull. ","By the Abyssal Flame, we forsake all that is pure! We march through the Valley of Tears, our flesh seared by the very breath of Hell. Let our suffering be a hymn to the Prince of Darkness, our blood a tribute to His glory! We are the Anointed, unbroken, unyielding. Through fire, we are reborn! Let our souls burn for eternity in His name!","O Lord of Ash and Flame, we cast ourselves into the furnace of Your wrath! Through the gates of Hell, we march with broken bodies and twisted souls. Let the fires of torment shape us, let our flesh burn in devotion! We are Your Legion, bound in eternal darkness, our sins our strength. Let the wails of the damned guide our hands!","You who stand upon the edge of the world, listen well. Turn your gaze upon the blackened sky and hear the whispers of the damned. The land is soaked with the tears of sinners, the earth choked by the stench of burning flesh. Do not look away. Feel the weight of every scream that echoes beneath your feet, the agony of souls bound in eternal torment. This is the fate of those who dare defy the Creator\u2014this is what awaits you. Step forward into the darkness, for there is no light left. Embrace the decay that gnaws at your spirit, for salvation is an illusion. You are already lost. Let the shadows claim you.","Bow your head, for the saints of darkness have walked among us. Their names carved into the very bones of this cursed world, are the true bearers of light in the void. In the depths where hope withers and the wails of the damned rise, they are the torchbearers. Worship them, for their suffering is the crucible that forged this war-torn earth. Their vision, like a blade, cleaves through the lies of false salvation, cutting through the veil that shields the weak from the truth. Mike, the harbinger of endless torment, and Tuomas, the architect of despair, lead us through the flames. Praise them, for they are the bringer of our reckoning. They are the prophets of the abyss, the apostles of the end. Let their names burn in your soul, for in their shadow, only the worthy shall rise.","Praise him!","Praise","Let our suffering be a sacrifice.","Our wounds a testament to your glory","Upon endless Ash","Eternal suffering","Carve their names into your bones","Blood","Sacrifice","Burn the heretic","In the trenches, where hope withers and the wails of the damned rise"];if(e<=0)return"";const a=t.flatMap((t=>t.replace(/[.,!?]/g,"").split(/\s+/).map(((e,t,a)=>a.slice(t).join(" "))).filter((t=>t.length===e))));if(a.length>0)return a[Math.floor(Math.random()*a.length)];const n=t.flatMap((e=>e.split(/\s+/))).filter((t=>t.length<=e));let o="";for(;o.length<e&&n.length>0;){const t=e-o.length,a=n.filter((e=>e.length+(o?1:0)<=t));if(0===a.length)break;const i=a[Math.floor(Math.random()*a.length)];o+=(o?" ":"")+i}return o.padEnd(e,"\u2588").slice(0,e)}(n.length),r=Math.floor(Math.random()*(o.length-i.length)),s=o.slice(0,r),l=o.slice(r+i.length),c=document.createElement("span");c.className="glitch-wrapper",c.innerHTML=`${s}<span class="glitch-active" data-text="${i}">${i}</span>${l}`,a.__glitchSpan=c;const d=a.parentNode;d&&d.replaceChild(c,a),setTimeout((()=>{const e=a.__glitchSpan;e&&e.parentNode===d&&(null===d||void 0===d||d.replaceChild(document.createTextNode(o),e))}),8e3)}),5e3+5e3*Math.random())}))}var tc=e=>{var a,n;const[o]=Tn("applycurse");"true"===o&&(0,t.useEffect)((()=>{ec()}),[o]);const i=e.data;return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with BookRuleDisplay.tsx"}),children:(0,Dn.jsxs)("div",{className:"book-rules-wrap "+("true"===o?"glitch":""),children:[void 0!=i.Sections&&(null===(a=i.Sections)||void 0===a?void 0:a.length)>0&&(0,Dn.jsx)(Dn.Fragment,{children:i.Sections.length>1&&function(e){const t=[];for(let a=0;a<e.Sections.length;a++)t.push({name:e.Sections[a].title,route:""+e.Sections[a].title});return(0,Dn.jsx)(dl,{title:"Contents",listofcontents:t})}(i)}),(0,Dn.jsx)("div",{className:"rules-introduction",children:(0,pl.fE)(i,i.Description)}),void 0!=i.Sections&&(null===(n=i.Sections)||void 0===n?void 0:n.length)>0&&(0,Dn.jsx)(Dn.Fragment,{children:i.Sections.map((e=>(0,Dn.jsxs)("div",{className:"rules-text-item",children:[(0,Dn.jsx)(tl,{content:e.title,level:2}),(0,pl.fE)(i,e.description),e.content.map((e=>(0,Dn.jsxs)("div",{children:[(0,Dn.jsx)("br",{}),(0,Dn.jsx)(tl,{content:e.title,level:3}),(0,pl.fE)(i,e.description)]},e.title||"")))]},e.title)))})]})})},ac=a(5501);var nc=e=>{const t=e.data;return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with ExplorationTableDisplay.tsx"}),children:(0,Dn.jsxs)("div",{className:"PatronDisplay",children:[(0,Dn.jsx)("div",{className:"PatronDisplay-description",children:(0,pl.fE)(t,t.GetDescription())}),(0,Dn.jsxs)("div",{className:"rules-card",children:[(0,Dn.jsx)("div",{className:"rules-card-title",children:t.GetName()}),(0,Dn.jsx)("div",{className:"rules-card-content",children:(0,Dn.jsxs)("i",{children:["Available to: ",t.Factions.map((e=>(0,Dn.jsx)("span",{className:"bodytext complextext small-side-margin",children:(0!=t.Factions.indexOf(e)?", ":"")+e.Name},e.Name)))]})}),(0,Dn.jsx)("div",{className:"rules-card-content rules-card-table-content rules-skill-table-content",children:(0,Dn.jsx)("table",{className:"rules-card-table rules-skill-table-content-table",children:(0,Dn.jsx)("tbody",{children:t.Skills.map((e=>(0,Dn.jsx)("tr",{children:(0,Dn.jsxs)("td",{children:[(0,Dn.jsx)("div",{className:"skill-name",children:(0,Dn.jsx)("strong",{children:e.Name})}),(0,Dn.jsx)("div",{className:"skill-description",children:(0,Dn.jsx)(ac.A,{data:e})})]})},e.ID)))})})})]})]})})};var oc=e=>{const t=e.injury;return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with RulesInjury.tsx"}),children:(0,Dn.jsxs)("div",{className:"RulesInjury injury",children:[(0,Dn.jsx)("div",{className:"injury-name",children:(0,Dn.jsx)("strong",{children:t.Name})}),(0,Dn.jsx)("p",{className:"injury-description",children:(0,pl.fE)(t,t.Description)})]})})};var ic=e=>{const t=e.data;return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with InjuryDisplay.tsx"}),children:(0,Dn.jsxs)("div",{className:"rules-content-main",children:[(0,Dn.jsx)(Jo,{title:"Injuries",description:"Whenever one of your ELITE models is taken Out of Action during a Battle, you will have to roll D66 for each such model after the battle ends. Consult the Trauma Chart table below to see what happened to your model. Unless rules state otherwise, each Trauma causes a Battle Scar, so mark this on your Warband roster sheet. You can only have one of each type of Battle Scar per ELITE, unless explicitly stated in its entry. If a model rolls a result that would cause it to gain a Battle Scar that it cannot gain again, re-roll on the chart until a viable result is achieved."}),(0,Dn.jsx)("h1",{children:"Injuries"}),(0,Dn.jsx)("p",{children:"Whenever one of your ELITE models is taken Out of Action during a Battle, you will have to roll D66 for each such model after the battle ends. Consult the Trauma Chart table below to see what happened to your model. Unless rules state otherwise, each Trauma causes a Battle Scar, so mark this on your Warband roster sheet. You can only have one of each type of Battle Scar per ELITE, unless explicitly stated in its entry. If a model rolls a result that would cause it to gain a Battle Scar that it cannot gain again, re-roll on the chart until a viable result is achieved."}),(0,Dn.jsx)("br",{}),(0,Dn.jsxs)("div",{className:"RulesInjuriesTable rules-injury-table rules-card",children:[(0,Dn.jsx)("div",{className:"rules-card-title rules-injury-table-title",children:"Elites Injury Chart"}),(0,Dn.jsx)("div",{className:"rules-card-content rules-card-table-content rules-injury-table-content",children:(0,Dn.jsxs)("table",{className:"rules-card-table rules-injury-table-content-table",children:[(0,Dn.jsx)("thead",{children:(0,Dn.jsxs)("tr",{children:[(0,Dn.jsx)("th",{children:"Score D66"}),(0,Dn.jsx)("th",{children:"Injury"})]})}),(0,Dn.jsx)("tbody",{children:t.map((e=>(0,Dn.jsxs)("tr",{children:[(0,Dn.jsx)("td",{className:"label-cell text-center",children:e.HeldItem.TableVal}),(0,Dn.jsx)("td",{children:(0,Dn.jsx)(oc,{injury:e.HeldItem})})]},e.HeldItem.ID)))})]})})]})]})})};var rc=e=>{const a=e.data,[n,o]=(0,t.useState)([]),[i,r]=(0,t.useState)(0);return(0,t.useEffect)((()=>{!async function(){const e=new jn.J;if(null!=a.RestrictedSelection){const t=await e.runEvent("getLocationRestrictionsPresentable",a,[],[],a.RestrictedSelection);o(t),r((e=>e+1))}else{const t=await e.runEvent("getLocationRestrictions",a,[],[],null);a.RestrictedSelection=t;const n=await e.runEvent("getLocationRestrictionsPresentable",a,[],[],a.RestrictedSelection);o(n),r((e=>e+1))}}()}),[]),(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with ExplorationLocationDisplay.tsx"}),children:(0,Dn.jsxs)("div",{className:"RulesExplorationLocation exploration-location",children:[(0,Dn.jsx)("div",{className:"exploration-location-name",children:a.Name}),(0,Dn.jsx)("p",{className:"exploration-location-description",children:(0,pl.fE)(a,a.Description)}),a.MyOptions.length>0&&(0,Dn.jsx)("ul",{className:"exploration-location-options",children:a.MyOptions.map((e=>(0,Dn.jsx)(t.Fragment,{children:e.Selections.map((t=>(0,Dn.jsxs)("li",{className:"exploration-location-option",children:[(0,Dn.jsx)("strong",{children:t.value.Name+": "}),(0,pl.fE)(t.value,t.value.Description)]},e.Selections.indexOf(t).toString())))},a.Name+"-"+e.RefID)))}),n.length>0&&(0,Dn.jsx)("div",{className:"exploration-location-limits",children:n.join(", ")})]},i)})};var sc=e=>{const t=e.data;let a;return a=t.Name?t.Name.toString():"",(0,Dn.jsxs)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with ExplorationTableDisplay.tsx"}),children:[(0,Dn.jsx)(Jo,{title:a,description:"Find "+t.Name+" for explorations in your Trench Crusade campaign games. "}),(0,Dn.jsx)("h1",{children:t.Name}),(0,Dn.jsxs)("div",{className:"RulesExplotationTable rules-exploration-table rules-card",children:[(0,Dn.jsx)("div",{className:"rules-card-title rules-exploration-table-title",children:t.Name}),(0,Dn.jsx)("div",{className:"rules-card-content rules-card-table-content rules-exploration-table-content",children:(0,Dn.jsxs)("table",{className:"rules-card-table rules-exploration-table-content-table",children:[(0,Dn.jsx)("thead",{children:(0,Dn.jsxs)("tr",{children:[(0,Dn.jsx)("th",{children:"Score"}),(0,Dn.jsx)("th",{children:"Location"})]})}),(0,Dn.jsx)("tbody",{children:t.ExplorationLocations.map((e=>(0,Dn.jsxs)("tr",{children:[(0,Dn.jsx)("td",{className:"label-cell text-center",children:e.TableValue}),(0,Dn.jsx)("td",{children:(0,Dn.jsx)(rc,{data:e})})]},e.ID)))})]})})]})]})};var lc=e=>{const t=e.data,a=t.Skills.some((e=>-1!==e.TableVal));return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with ExplorationTableDisplay.tsx"}),children:(0,Dn.jsxs)("div",{className:"RulesSkillTable rules-skill-table rules-card",children:[(0,Dn.jsx)("div",{className:"rules-card-title rules-skill-table-title",children:t.Name}),(0,Dn.jsx)("div",{className:"rules-card-content rules-card-table-content rules-skill-table-content",children:(0,Dn.jsxs)("table",{className:"rules-card-table rules-skill-table-content-table",children:[(0,Dn.jsx)("thead",{children:(0,Dn.jsxs)("tr",{children:[a&&(0,Dn.jsx)("th",{children:"Score 2D6"}),(0,Dn.jsx)("th",{children:"Skill"})]})}),(0,Dn.jsx)("tbody",{children:t.Skills.map((e=>(0,Dn.jsxs)("tr",{children:[a&&(0,Dn.jsx)("td",{className:"label-cell text-center",children:-1!=e.TableVal&&(0,Dn.jsx)(Dn.Fragment,{children:e.TableVal})}),(0,Dn.jsxs)("td",{children:[(0,Dn.jsx)("div",{className:"skill-name",children:(0,Dn.jsx)("strong",{children:e.Name})}),(0,Dn.jsx)("div",{className:"skill-description",children:(0,Dn.jsx)(ac.A,{data:e})})]})]},e.ID)))})]})})]})})},cc=a(1409),dc=a(4684);var uc=e=>{const t=e.data;return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with InjuryDisplay.tsx"}),children:(0,Dn.jsxs)("div",{className:"RulesKeywordsTable rules-card",children:[(0,Dn.jsx)("div",{className:"rules-card-title rules-injury-table-title",children:"Keywords"}),(0,Dn.jsx)("div",{className:"rules-card-content rules-card-table-content rules-injury-table-content",children:(0,Dn.jsx)("table",{className:"rules-card-table rules-injury-table-content-table",children:(0,Dn.jsx)("tbody",{children:t.map((e=>(0,Dn.jsxs)("tr",{children:[(0,Dn.jsx)("td",{className:"label-cell text-center",children:e.HeldItem.Name}),(0,Dn.jsx)("td",{children:(0,za.h8)(e.HeldItem.Tags.type?e.HeldItem.Tags.type:"")}),(0,Dn.jsx)("td",{children:(0,Dn.jsx)(dc.A,{data:e.HeldItem})})]},e.HeldItem.ID)))})})})]})})},hc=a(2410),mc=a(709),pc=a(5187);var fc=e=>{let{item:t}=e;return(0,Dn.jsxs)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"}),children:[(0,Dn.jsx)(Jo,{title:"Warbands in Trench Crusade",description:"Each warband in Trench Crusade belongs to a faction fighting in the Great War. Use the faction lists that follow to recruit and equip your warband."}),(0,Dn.jsx)("h1",{className:"",children:"Warbands"}),(0,Dn.jsx)(hc.A,{link:"/compendium/warbands/starting-a-warband",title:"Starting a Warband"}),(0,Dn.jsx)("p",{children:"In this section, we will take a detailed look at six of the Warbands that can be used in games of Trench Crusade, and provide all of the information you need to recruit one. Once you have collected your Warband, you can use it to fight battles using the rules from the Trench Crusade Rulebook or this Compendium."}),(0,Dn.jsx)("div",{className:"spacer-20"}),(0,Dn.jsx)("div",{className:"rules-faction-masonry",children:t.Collection.itemcollection.filter(((e,t,a)=>a.findIndex((t=>t.HeldItem.ID===e.HeldItem.ID))===t)).map((e=>(0,Dn.jsx)(Kl,{slug:e.HeldItem.GetBaseFac().GetURL(),title:e.HeldItem.GetBaseFac().Name,id:e.HeldItem.GetBaseFac().ID,children:e.HeldItem.SubModelsList.filter((e=>"base"!=e.var_name)).map((t=>(0,Dn.jsx)(Kl,{id:t.faction.ID,slug:t.faction.GetURL(),parentSlug:e.HeldItem.GetBaseFac().GetURL(),title:t.faction.Name?t.faction.Name:""},t.faction.ID)))},e.HeldItem.GetBaseFac().ID)))})]})};var gc=e=>{let{item:t}=e;const a=(0,zt.Zp)();return(0,Dn.jsxs)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"}),children:[(0,Dn.jsx)(Jo,{title:"Trench Crusade Scenarios",description:"These are the official Trench Crusade Scenarios. You can select one from the list below or use the random scenario generator."}),(0,Dn.jsx)("h1",{children:"Trench Crusade Scenarios"}),(0,Dn.jsx)("p",{children:"These are the official Trench Crusade Scenarios. You can select one from the list below."}),(0,Dn.jsx)(hc.A,{link:"/compendium/scenarios/rules",title:"Scenario Rules"}),(0,Dn.jsx)("div",{className:"spacer-20"}),(0,Dn.jsx)("h2",{children:"Scenarios Table"}),(0,Dn.jsxs)("table",{className:"table_headed table_headed-highlight",children:[(0,Dn.jsx)("thead",{children:(0,Dn.jsxs)("tr",{children:[(0,Dn.jsx)("th",{children:"Scenario"}),(0,Dn.jsx)("th",{children:"Source"})]})}),(0,Dn.jsx)("tbody",{children:t.Collection.itemcollection.filter(((e,t,a)=>a.findIndex((t=>t.HeldItem.ID===e.HeldItem.ID))===t)).map((e=>(0,Dn.jsxs)("tr",{children:[(0,Dn.jsx)("td",{className:"font-normal",children:(0,Dn.jsx)(yn.A,{classes:"font-normal",link:"/compendium/scenarios/"+e.HeldItem.GetURL(),runfunc:()=>{a("/compendium/scenarios/"+e.HeldItem.GetURL())},children:e.HeldItem.Name})}),(0,Dn.jsx)("td",{children:e.HeldItem.Source})]},e.HeldItem.ID)))})]})]})};var yc=e=>{let{item:t}=e;const a=(0,zt.Zp)();return(0,Dn.jsxs)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"}),children:[(0,Dn.jsx)(Jo,{title:"Patrons",description:"These are the official Trench Crusade Patrons. You can select one from the list below or use the official PDF."}),(0,Dn.jsx)("h1",{children:"Patrons"}),(0,Dn.jsx)("p",{children:"These are the official Trench Crusade Patrons. You may choose one Patron that matches your warband."}),(0,Dn.jsx)("div",{className:"spacer-20"}),(0,Dn.jsx)("h2",{children:"Patrons Table"}),(0,Dn.jsxs)("table",{className:"table_headed table_headed-highlight",children:[(0,Dn.jsx)("thead",{children:(0,Dn.jsxs)("tr",{children:[(0,Dn.jsx)("th",{children:"Patron"}),(0,Dn.jsx)("th",{children:"Available to"})]})}),(0,Dn.jsx)("tbody",{children:t.Collection.itemcollection.map((e=>(0,Dn.jsxs)("tr",{children:[(0,Dn.jsx)("td",{className:"font-normal",children:(0,Dn.jsx)(yn.A,{classes:"font-normal",link:"/compendium/campaigns/patrons/"+e.HeldItem.GetURL(),runfunc:()=>{a("/compendium/campaigns/patrons/"+e.HeldItem.GetURL())},children:e.HeldItem.Name})}),(0,Dn.jsx)("td",{children:e.HeldItem.Factions.map((e=>(0,Dn.jsx)("span",{children:e.Name+", "},e.ID)))})]},e.HeldItem.ID)))})]})]})},_c=a(2995),bc=a(7551),vc=a(9001),wc=a(595),xc=a(7520),kc=a(5593),Cc=a(3944);const jc={gamerule:{searchId:"core-rules",width:9,titlename:"Game Rules",laconic:"How to play a game of Trench Crusade",menushowitems:!0,textboxOptions(e){return[]},defaultpage(e){const t=(0,zt.zy)().pathname.includes("/core-rules")?["introduction","core"]:(0,zt.zy)().pathname.includes("/warbands")?["starting_a_warband"]:(0,zt.zy)().pathname.includes("/comprehensive-rules")?["comprehensive"]:(0,zt.zy)().pathname.includes("/scenarios")?["scenarios"]:[],a=t.length>0?e.Collection.itemcollection.filter((e=>t.includes(e.HeldItem.Tags.order))):e.Collection.itemcollection,n=[],o=[];for(let r=0;r<a.length;r++)o.includes(a[r].HeldItem.ID)||(o.push(a[r].HeldItem.ID),n.push(a[r]));let i="core-rules";return t.includes("comprehensive")&&(i="comprehensive-rules"),t.includes("starting_a_warband")&&(i="warbands/starting-a-warband"),(0,Dn.jsxs)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"}),children:[(0,Dn.jsx)(Jo,{title:"Gameplay Rules",description:"All the rules for Trench Crusade in one place. Below are the official Playtest Rules version 1.6 for the tabletop game Trench Crusade."}),t.includes("starting_a_warband")&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("h1",{children:"Starting a Warband"}),(0,Dn.jsxs)("p",{children:["Your Warband represents one of the innumerable small combat formations that fight to the death in the battle-scarred hinterlands known simply as No Man's Land. Every Warband is unique, and it will be up to you to decide which warriors to include and how they are equipped. You will first pick which of the six Factions your Warband belong to. Each Faction has its own Faction List, that provides information on the models that the Warband can include, the battlekit that they can carry, and any special rules that apply when you use the Warband in a game of Trench Crusade. Each model that you include and any Battlekit you take will cost a certain number of ducats, represented by the "," ",(0,Dn.jsx)(il.A,{type:0})," ","  symbol, or a certain number of Glory Points, represented by the \u263c symbol. Usually you will have 700 "," ",(0,Dn.jsx)(il.A,{type:0})," ","  to spend on your Warband, and you will need to consider carefully how to spend each one of them!"]}),(0,Dn.jsx)("p",{children:"The six Factions included in this book are very different and have their own way of fighting."}),(0,Dn.jsx)("p",{children:"Each Faction includes a varied selection of models that you can use. All of the information you need to use the model is included in the Warband Entry for the model. Each Faction also includes an Armoury Table that lists the Battlekit you can take for the models, and descriptions of any unique Battlekit that is only used by that Warband (you'll find rules for any other Battlekit in the Standard Battlekit section of the Trench Crusade Rulebook). Last but far from least, each Faction List includes information on one or more Variant Warbands that you can choose to use instead of the standard Warband list. Variant Warbands are unusual forces that have their own special rules and include specially trained and equipped warriors."}),(0,Dn.jsxs)("p",{children:["As well as the Faction Lists, this book includes a selection of Mercenary Warriors that can be hired by Warbands. Mercenaries cost Glory Points (shown as "," ",(0,Dn.jsx)(il.A,{type:1})," ",") to hire rather than Ducats. Your Warband can earn "," ",(0,Dn.jsx)(il.A,{type:1})," "," during a Campaign (see the Campaign rules in the Trench Crusade rulebook), or you and your opponent can agree to supplement the Ducats  you can spend on your Warband with a number of Glory Points. We've found that allowing each player to spend 6 "," ",(0,Dn.jsx)(il.A,{type:1})," "," is a good number to use for one-off games between two experienced players."]}),(0,Dn.jsx)("p",{children:"If you are new to Trench Crusade, then picking which Faction you will use for your first few games and deciding which models to take can be a little bit daunting. Before you decide, we recommend that you read through the lore for each of the Factions and take a look at the photographs of the models for the Warbands on the Trench Crusade website. Then just use the Faction that inspires and excites you the most. You can use the same principle when you pick the models and their Battlekit; if you just 'trust your gut' you will rarely go too far wrong. Once you've played a couple games with your starting models, you start to consider what new models you'd like to add to your Warband, and if you want to hire any Mercenaries."})]}),t.includes("scenarios")&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("h1",{children:"Scenario Rules"}),(0,Dn.jsx)("p",{children:"This section of the rulebook includes a selection of scenarios you can use for games of Trench Crusade. Each scenario provides the information you need to set up and play a game, any special rules you will need to play the scenario, and details of how the winner of the game is decided."})]}),t.includes("comprehensive")&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("h1",{children:"Comprehensive Rules"}),(0,Dn.jsx)("p",{children:"The Comprehensive Rules section of the Trench Crusade rulebook expands on the Core Rules. It explains the rules in greater depth, adds additional rules, and provides examples of how the rules function, but does not alter the Core Rules in any way. The Comprehensive Rules are followed by supplemental sections that explain how to create a Warband and Scenarios that will allow you to play a wide variety of different sorts of Trench Crusade games."})]}),t.includes("introduction")&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("h1",{children:"Core Rules"}),(0,Dn.jsx)("p",{children:"The Core Rules section of the Trench Crusade provides an overview of how to play a game of Trench Crusade. These rules are expanded upon in the Comprehensive Rules section of the compendium."}),(0,Dn.jsx)("p",{children:"The first section of the rulebook is called the Core Rules, and explains how to play Trench Crusade in a quick and easy to use format. The Core Rules are followed by the Comprehensive Rules section, which provides more detailed explanations of the rules and additional information about how they work. If you are using the Core Rules and encounter a situation that you are not sure how to resolve, read the Comprehensive Rules to find the answer."})]}),0==t.length&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("h1",{children:"Gameplay Rules"}),(0,Dn.jsx)("p",{children:"All the rules for Trench Crusade in one place. Below are the official Playtest Rules version 1.6 for the tabletop game Trench Crusade."})]}),(0,Dn.jsx)("div",{className:"row",children:(0,Dn.jsx)("div",{className:"col-12",children:(0,Dn.jsx)(Cc.A,{title:"Contents",children:n.map((e=>(0,Dn.jsx)(hc.A,{link:"/compendium/"+i+"/"+e.HeldItem.GetURL(),title:e.HeldItem.Name},e.HeldItem.ID)))})})})]})},returnDisplay(e){return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"}),children:e instanceof xc.g&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(Jo,{title:e.GetTrueName(),description:e.GetDescription()}),(0,Dn.jsx)("h1",{className:"",children:e.Name}),(0,Dn.jsx)(tc,{data:e})]})})},returnFilterSelect(e,t,a){return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"})})}},errata:{searchId:"errata-faq",width:9,titlename:"Errata Rules",laconic:"Errata & Unfinished/Beta Rules",menushowitems:!0,textboxOptions(e){return[]},defaultpage(e){return(0,Dn.jsxs)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"}),children:[(0,Dn.jsx)(Jo,{title:"Rules Errata & FAQ",description:"Sometimes the rules for Trench Crusade change, get balanced or clarified. These changes can be found here."}),(0,Dn.jsx)("h1",{children:"Rules Errata & FAQ"}),(0,Dn.jsx)("p",{children:"Sometimes the rules for Trench Crusade change, get balanced or clarified. These changes can be found here."}),(0,Dn.jsx)("div",{className:"row",children:(0,Dn.jsx)("div",{className:"col-12",children:e.Collection.itemcollection.filter((e=>"er_faqcommunity"!=e.HeldItem.ID)).map((e=>(0,Dn.jsx)(hc.A,{link:"/compendium/errata-faq/"+e.HeldItem.ID,title:e.HeldItem.Name},e.HeldItem.ID)))})}),(0,Dn.jsx)("p",{children:"Not all clarifications exist in officially published documents. Some questions are answered in the official Discord server, or are otherwise considered the accepted consensus when an official one isn't given. Any official comments from developers are collected, but should not be treated as gospel and may be subject to change."}),(0,Dn.jsx)(hc.A,{link:"/compendium/errata-faq/community-faq",title:"Community Questions & Answers"})]})},returnDisplay(e){return e instanceof xc.g?(0,Dn.jsxs)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"}),children:[(0,Dn.jsx)(Jo,{title:e.GetTrueName(),description:e.GetDescription()}),e instanceof xc.g&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("h1",{className:"",children:e.Name}),(0,Dn.jsx)(tc,{data:e})]})]}):(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"})})},returnFilterSelect(e,t,a){return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"})})}},glossary:{searchId:"glossary",width:7,titlename:"Glossary",laconic:"Commonly used terms & mechanics",menushowitems:!1,textboxOptions(e){return[]},returnDisplay(e){return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"})})},returnFilterSelect(e,t,a){return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"}),children:(0,Dn.jsxs)("div",{children:[(0,Dn.jsx)("div",{children:(0,Dn.jsx)(ps,{name:"Tags",data:e.ReturnTagFilters()})}),(0,Dn.jsxs)("div",{children:[(0,Dn.jsx)("div",{className:""}),(0,Dn.jsx)(fs,{name:"Source",data:e.ReturnMiscFilters().filter((e=>"source"==e.Group))})]})]})})}},keyword:{searchId:"keyword",width:7,titlename:"Keywords",laconic:"Shared definitions that describe game rules.",menushowitems:!1,textboxOptions(e){return[]},returnDisplay(e){return(0,Dn.jsxs)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"}),children:[(0,Dn.jsx)(Jo,{title:"Keywords",description:"All Keywords for Trench Crusade in one Place. "}),(0,Dn.jsx)(uc,{data:e})]})},returnFilterSelect(e,t,a){return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"}),children:(0,Dn.jsxs)("div",{children:[(0,Dn.jsx)("div",{children:e.ReturnTextFilters().filter((e=>"name"!=e.Group)).map((e=>(0,Dn.jsx)("div",{children:(0,Dn.jsx)(hs,{data:e})},e.Group)))}),(0,Dn.jsx)("div",{children:(0,Dn.jsx)(ps,{name:"Tags",data:e.ReturnTagFilters()})}),(0,Dn.jsxs)("div",{children:[(0,Dn.jsx)("div",{className:""}),(0,Dn.jsx)(fs,{name:"Source",data:e.ReturnMiscFilters().filter((e=>"source"==e.Group))})]})]})})}},model:{searchId:"model",width:9,titlename:"Models",laconic:"Who and what partake in battles",menushowitems:!1,textboxOptions(e){const t=[];for(let a=0;a<e.Collection.itemcollection.length;a++)for(let n=0;n<e.Collection.itemcollection[a].HeldItem.SubModelsList.length;n++){const o=e.Collection.itemcollection[a].HeldItem.SubModelsList[n].model.Name;t.push(o||"")}return t},returnDisplay(e){return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"}),children:e instanceof _c.u&&(0,Dn.jsx)(ys,{data:e})})},returnFilterSelect(e,t,a){return(0,Dn.jsxs)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"}),children:[(0,Dn.jsxs)("div",{children:[(0,Dn.jsx)("div",{className:""}),(0,Dn.jsx)(fs,{name:"Keywords",data:e.ReturnMiscFilters().filter((e=>"keywords"==e.Group))})]}),(0,Dn.jsxs)("div",{children:[(0,Dn.jsx)("div",{className:""}),(0,Dn.jsx)(fs,{name:"Source",data:e.ReturnMiscFilters().filter((e=>"source"==e.Group))})]})]})}},armoury:{searchId:"armoury",width:8,titlename:"Battlekit",laconic:"Items you can find in the armoury",categoryparam:"category",menushowitems:!1,textboxOptions(e){const t=[];for(let a=0;a<e.Collection.itemcollection.length;a++){const n=e.Collection.itemcollection[a].HeldItem.Name;t.push(n||"")}return t},returnDisplay(e){return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"}),children:e instanceof bc.Equipment&&(0,Dn.jsx)(cc.A,{equipment:e})})},topDisplay(){return(0,Dn.jsxs)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"}),children:[(0,Dn.jsx)(hc.A,{link:"/compendium/comprehensive-rules/model-battlekit",title:"Battlekit Rules"}),(0,Dn.jsx)("p",{children:"Here you can compare any and all items. This glossary page contains a list of all Battlekit items in Trench Crusade. You can search for an item by name, or use the filters below to only show what fits your chosen criteria."})]})},returnFilterSelect(e,t,a){return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"}),children:(0,Dn.jsxs)("div",{className:"returnFilterSelect",children:[(0,Dn.jsx)("div",{children:(0,Dn.jsx)(ps,{name:"Tags",data:e.ReturnTagFilters()})}),(0,Dn.jsxs)("div",{children:[(0,Dn.jsx)("div",{className:""}),(0,Dn.jsx)(fs,{name:"Category",data:e.ReturnMiscFilters().filter((e=>"category"==e.Group))})]}),(0,Dn.jsxs)("div",{children:[(0,Dn.jsx)("div",{className:""}),(0,Dn.jsx)(fs,{name:"Keywords",data:e.ReturnMiscFilters().filter((e=>"keywords"==e.Group))})]}),(0,Dn.jsxs)("div",{children:[(0,Dn.jsx)("div",{className:""}),(0,Dn.jsx)(fs,{name:"Source",data:e.ReturnMiscFilters().filter((e=>"source"==e.Group))})]}),(0,Dn.jsx)("div",{children:e.ReturnRangeFilters().filter((e=>"distance"==e.Group)).map((e=>(0,Dn.jsxs)("div",{children:[(0,Dn.jsx)("div",{className:""}),(0,Dn.jsx)(ms,{name:"Range",data:e})]},e.Group)))})]})})}},faction:{searchId:"warbands",width:9,titlename:"Factions",laconic:"Assorted groups and nations participating in the war",menushowitems:!0,textboxOptions(e){return[]},returnDisplay(e){return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"}),children:e instanceof pc.X&&(0,Dn.jsx)(Dn.Fragment,{children:(0,Dn.jsx)(Jl,{data:e})})})},defaultpage(e){return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"}),children:(0,Dn.jsx)(fc,{item:e})})},returnFilterSelect(e,t,a){return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"})})}},scenario:{searchId:"scenarios",width:9,titlename:"Scenarios",laconic:"Unfortunate situations a warband can find itself in",menushowitems:!0,textboxOptions(e){return[]},returnDisplay(e){return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"}),children:e instanceof vc.N&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(Jo,{title:e.GetTrueName(),description:e.GetDescription(),ogImage:e.ImgLink}),(0,Dn.jsx)("h1",{children:e.Name}),(0,Dn.jsx)(Xl,{data:e})]})})},defaultpage(e){return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"}),children:(0,Dn.jsx)(gc,{item:e})})},returnFilterSelect(e,t,a){return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"})})}},campaignrule:{searchId:"campaigns/campaign-rules",width:9,titlename:"Campaign Rules",laconic:"Rules for playing an extended campaign",menushowitems:!0,textboxOptions(e){return[]},returnDisplay(e){return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"}),children:e instanceof xc.g&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(Jo,{title:e.GetTrueName(),description:e.GetDescription()}),(0,Dn.jsx)("h1",{children:e.Name}),(0,Dn.jsx)(tc,{data:e})]})})},defaultpage(e){return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"}),children:(0,Dn.jsxs)("div",{className:"rules-content-main",children:[(0,Dn.jsx)(Jo,{title:"Campaign Rules",description:"All the rules for Trench Crusade in one place. Below are the official Playtest Rules version 1.6 for the tabletop game Trench Crusade."}),(0,Dn.jsx)("h1",{children:"Campaign Rules"}),(0,Dn.jsx)("p",{children:"These rules govern playing a series of linked games with your friends. At least 2 players are required to complete a campaign, but the more players you can muster, the better! You can also play games against players who are not part of the campaign. Rules on how to do this are explained here."}),(0,Dn.jsx)(Cc.A,{title:"Contents",children:(0,Dn.jsx)(Dn.Fragment,{children:e.Collection.itemcollection.filter((e=>"br_introduction"!=e.HeldItem.ID)).map((e=>(0,Dn.jsx)(hc.A,{link:"/compendium/campaigns/campaign-rules/"+e.HeldItem.GetURL(),title:e.HeldItem.Name},e.HeldItem.ID)))})})]})})},returnFilterSelect(e,t,a){return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"})})}},explorationtable:{searchId:"campaigns/exploration-locations",width:9,titlename:"Exploration",laconic:"Locations you can find during a campaign",menushowitems:!0,textboxOptions(e){return[]},returnDisplay(e){return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"}),children:e instanceof wc.C&&(0,Dn.jsx)(sc,{data:e})})},defaultpage(e){return(0,Dn.jsxs)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"}),children:[(0,Dn.jsx)(Jo,{title:"Exploration Locations",description:"After you have modified the Exploration roll result, consult the appropriate Exploration Table to see if you have found something of special Interest. You have to match the number on the table exactly with your dice \u2013 rolling too high or too low means you did not find the Note that each player can find any of the locations only once during the campaign, though it is completely legal for two different players to discover the same location during the same campaign."}),(0,Dn.jsx)("h1",{children:"Exploration Locations"}),(0,Dn.jsxs)("p",{children:["After you have modified the Exploration roll result, consult the appropriate Exploration Table to see if you have found something of special Interest. You have to match the number on the table exactly with your dice \u2013 rolling too high or too low means you did not find the Note that each player can find any of the locations only once during the campaign, though it is completely legal for two different players to discover the same location during the same campaign. We encourage players to maintain a War Journal that tracks the locations they find during the campaign. To find out which Exploration Table you should use, consult the following chart:",(0,Dn.jsx)("br",{}),(0,Dn.jsx)("br",{}),"Consult the page below to check the rules for explorations during campaign play."]}),(0,Dn.jsx)("div",{className:"row",children:(0,Dn.jsx)("div",{className:"col-12 col-md-6",children:(0,Dn.jsx)(hc.A,{title:"Exploration Rules",link:"/compendium/campaigns/campaign-rules/exploration-step"})})}),(0,Dn.jsx)("div",{className:"spacer-20"}),(0,Dn.jsx)("h2",{children:"Exploration Locations Table"}),(0,Dn.jsxs)("table",{className:"table_headed table_headed-highlight",children:[(0,Dn.jsxs)("tr",{className:"table_headrow",children:[(0,Dn.jsx)("th",{children:"Number of Battles Fought"}),(0,Dn.jsx)("th",{children:"Possible Locations"})]}),(0,Dn.jsxs)("tr",{children:[(0,Dn.jsx)("td",{children:"1-2"}),(0,Dn.jsx)("td",{children:(0,Dn.jsx)(ta,{to:"/compendium/campaigns/exploration-locations/common-locations",className:"",children:"Common Exploration Locations"})})]}),(0,Dn.jsxs)("tr",{children:[(0,Dn.jsx)("td",{children:"3-5"}),(0,Dn.jsxs)("td",{children:[(0,Dn.jsx)(ta,{to:"/compendium/campaigns/exploration-locations/common-locations",className:"",children:"Common"})," or ",(0,Dn.jsx)(ta,{to:"/compendium/campaigns/exploration-locations/rare-locations",className:"",children:"Rare Exploration Locations"})]})]}),(0,Dn.jsxs)("tr",{children:[(0,Dn.jsx)("td",{children:"6-9"}),(0,Dn.jsx)("td",{children:(0,Dn.jsx)(ta,{to:"/compendium/campaigns/exploration-locations/rare-locations",className:"",children:"Rare Exploration Locations"})})]}),(0,Dn.jsxs)("tr",{children:[(0,Dn.jsx)("td",{children:"10+"}),(0,Dn.jsxs)("td",{children:[(0,Dn.jsx)(ta,{to:"/compendium/campaigns/exploration-locations/rare-locations",className:"",children:"Rare"})," or ",(0,Dn.jsx)(ta,{to:"/compendium/campaigns/exploration-locations/legendary-locations",className:"",children:"Legendary Exploration Locations"})]})]})]})]})},returnFilterSelect(e,t,a){return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"})})}},injury:{searchId:"injury",width:10,titlename:"Injuries",laconic:"Wounds suffered after a battle",menushowitems:!1,hidefilter:!0,textboxOptions(e){return[]},returnDisplay(e){return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"}),children:(0,Dn.jsx)(ic,{data:e})})},returnFilterSelect(e,t,a){return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"})})}},skillgroup:{searchId:"skillgroup",width:9,showtitle:!0,titlename:"Skills",hidefilter:!0,laconic:"Unique abilities and talents a model can gain",menushowitems:!1,textboxOptions(e){return[]},returnDisplay(e){return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"}),children:e instanceof kc.Z&&(0,Dn.jsx)(Dn.Fragment,{children:(0,Dn.jsx)(lc,{data:e})})})},returnFilterSelect(e,t,a){return(0,Dn.jsxs)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"}),children:[(0,Dn.jsx)("div",{children:(0,Dn.jsx)(ps,{name:"Tags",data:e.ReturnTagFilters()})}),(0,Dn.jsxs)("div",{children:[(0,Dn.jsx)("div",{className:""}),(0,Dn.jsx)(fs,{name:"Source",data:e.ReturnMiscFilters().filter((e=>"source"==e.Group))})]})]})}},patron:{searchId:"campaigns/patrons",width:9,titlename:"Patrons",laconic:"Forces a warband must appease in campaigns",menushowitems:!0,textboxOptions(e){return[]},defaultpage(e){return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"}),children:(0,Dn.jsx)(yc,{item:e})})},returnDisplay(e){return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"}),children:e instanceof mc.V&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(Jo,{title:e.GetTrueName(),description:e.GetMetaDescription()}),(0,Dn.jsx)("h1",{children:e.Name}),(0,Dn.jsx)(nc,{data:e})]})})},returnFilterSelect(e,t,a){return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with DisplayPageStatic.tsx"})})}}};var Sc=e=>(0,Dn.jsxs)("div",{className:"rules-page-links",children:[void 0!=e.prev_page&&(0,Dn.jsxs)(yn.A,{link:e.display_path+(void 0!=e.prev_page?e.prev_page.HeldItem.GetURL():""),runfunc:function(){e.func(e.prev_page)},classes:"rules-page-link rules-page-link-prev",children:[(0,Dn.jsxs)("span",{className:"page-link-label",children:[(0,Dn.jsx)(Gn.g,{icon:Pn.Wzs,className:"icon-inline-left-l"}),"Previous"]}),(0,Dn.jsx)("span",{className:"page-name",children:void 0!=e.prev_page?e.prev_page.HeldItem.Name:""})]}),void 0!=e.next_page&&(0,Dn.jsxs)(yn.A,{link:e.display_path+(void 0!=e.next_page?e.next_page.HeldItem.GetURL():""),runfunc:function(){e.func(e.next_page)},classes:"rules-page-link rules-page-link-next",children:[(0,Dn.jsxs)("span",{className:"page-link-label",children:["Next",(0,Dn.jsx)(Gn.g,{icon:Pn.XkK,className:"icon-inline-right-l"})]}),(0,Dn.jsx)("span",{className:"page-name",children:void 0!=e.next_page?e.next_page.HeldItem.Name:""})]})]});var Ic=e=>{const{id:a,itemid:n}=(0,zt.g)(),o=e.controller,i=(e.urlindex&&e.urlindex,o.Collection),r=jc[o.TypeName],{state:s}=(0,zt.zy)(),[l,c]=((0,zt.zy)().pathname,(0,t.useState)(null)),[d,u]=(0,t.useState)(!0),[h,m]=(0,t.useState)(0),[p,f]=(0,t.useState)("Loading");function g(){const e=location.pathname.split("/").filter(Boolean),t=n?e.indexOf(n):-1,a=t>=0?e.length-t-1:0;if(a>2||"faction"!=o.TypeName&&a>3)return;if(void 0==n)return null;const r=n;for(let n=0;n<i.itemcollection.length;n++)if(i.itemcollection[n].HeldItem.MatchURL(r))return i.itemcollection[n]}function y(){const e=[],t=[];for(let a=0;a<i.itemcollection.length;a++){const n=i.itemcollection[a];n&&n.HeldItem&&!t.includes(n.HeldItem.ID)&&(t.push(n.HeldItem.ID),e.push(n))}return e}(0,t.useEffect)((()=>{!async function(){await o.initCollection(),f("No Items Found"),c(g()),u(!1),m((e=>e+1))}()}),[]),(0,t.useEffect)((()=>{c(null),c(g()),u(!1),m(h+1)}),[s]);const _=(0,zt.Zp)();return void 0==l&&null!==l?(0,Dn.jsx)(Yl,{}):(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with PagedDisplayCompendium.tsx"}),children:(0,Dn.jsxs)("div",{className:"PagedCompendiumDisplay",children:[(0,Dn.jsxs)("div",{className:"rules-content-main",children:[null==l&&0==d&&r.defaultpage&&(0,Dn.jsx)(Dn.Fragment,{children:r.defaultpage(o)}),(void 0==l||null==l)&&0==d&&!r.defaultpage&&(0,Dn.jsx)("h1",{className:"",children:p}),void 0!=l&&null!=l&&(0,Dn.jsx)("div",{className:"",children:r.returnDisplay(l.HeldItem)})]}),(0,Dn.jsx)(Sc,{prev_page:function(){if(!l)return;const e=y(),t=e.findIndex((e=>e.HeldItem.ID===l.HeldItem.ID));return t<=0||void 0!=l.HeldItem.Tags.order&&l.HeldItem.Tags.order!=e[t-1].HeldItem.Tags.order?void 0:e[t-1]}(),next_page:function(){if(!l)return;const e=y(),t=e.findIndex((e=>e.HeldItem.ID===l.HeldItem.ID));return-1===t||t>=e.length-1||void 0!=l.HeldItem.Tags.order&&l.HeldItem.Tags.order!=e[t+1].HeldItem.Tags.order?void 0:e[t+1]}(),display_path:(r.searchId.includes("/compendium")?"":"/compendium/")+r.searchId+"/",func:function(e){void 0!=e&&(i.UpdateTargetItem(e),_((r.searchId.includes("/compendium")?"":"/compendium/")+r.searchId+"/"+e.HeldItem.GetURL(),{state:Date.now().toString()}))}})]},h)})};a(446);function Ac(e){return Ac="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ac(e)}function Nc(e){var t=function(e,t){if("object"!=Ac(e)||!e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var n=a.call(e,t||"default");if("object"!=Ac(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==Ac(t)?t:t+""}function Ec(e,t,a){return(t=Nc(t))in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}var Tc="label";function Dc(e){return"string"===typeof e?e:Tc}function Rc(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var Mc=0;function Oc(e){return"function"===typeof e}function qc(e){return"string"===typeof e}function Gc(){}function Pc(e,t){var a={};return t.forEach((function(t){a[t]=e[t]})),a}var Fc=function(e,t){return qc(e)||!Rc(e,"paginationOption")&&!Rc(e,"customOption")?(a=Oc(t)?t(e):qc(e)?e:e[t],qc(a)||as()(!1),a):e[Dc(t)];var a};var Lc=function(e,t){var a=t.allowNew,n=t.labelKey,o=t.text;return!(!a||!o.trim())&&(Oc(a)?a(e,t):!e.some((function(e){return Fc(e,n)===o})))},Wc=a(122),Bc=a.n(Wc);function Hc(e,t){if(!qc(e))return e[t]}var Uc=[{base:"A",letters:"A\u24b6\uff21\xc0\xc1\xc2\u1ea6\u1ea4\u1eaa\u1ea8\xc3\u0100\u0102\u1eb0\u1eae\u1eb4\u1eb2\u0226\u01e0\xc4\u01de\u1ea2\xc5\u01fa\u01cd\u0200\u0202\u1ea0\u1eac\u1eb6\u1e00\u0104\u023a\u2c6f"},{base:"AA",letters:"\ua732"},{base:"AE",letters:"\xc6\u01fc\u01e2"},{base:"AO",letters:"\ua734"},{base:"AU",letters:"\ua736"},{base:"AV",letters:"\ua738\ua73a"},{base:"AY",letters:"\ua73c"},{base:"B",letters:"B\u24b7\uff22\u1e02\u1e04\u1e06\u0243\u0182\u0181"},{base:"C",letters:"C\u24b8\uff23\u0106\u0108\u010a\u010c\xc7\u1e08\u0187\u023b\ua73e"},{base:"D",letters:"D\u24b9\uff24\u1e0a\u010e\u1e0c\u1e10\u1e12\u1e0e\u0110\u018b\u018a\u0189\ua779\xd0"},{base:"DZ",letters:"\u01f1\u01c4"},{base:"Dz",letters:"\u01f2\u01c5"},{base:"E",letters:"E\u24ba\uff25\xc8\xc9\xca\u1ec0\u1ebe\u1ec4\u1ec2\u1ebc\u0112\u1e14\u1e16\u0114\u0116\xcb\u1eba\u011a\u0204\u0206\u1eb8\u1ec6\u0228\u1e1c\u0118\u1e18\u1e1a\u0190\u018e"},{base:"F",letters:"F\u24bb\uff26\u1e1e\u0191\ua77b"},{base:"G",letters:"G\u24bc\uff27\u01f4\u011c\u1e20\u011e\u0120\u01e6\u0122\u01e4\u0193\ua7a0\ua77d\ua77e"},{base:"H",letters:"H\u24bd\uff28\u0124\u1e22\u1e26\u021e\u1e24\u1e28\u1e2a\u0126\u2c67\u2c75\ua78d"},{base:"I",letters:"I\u24be\uff29\xcc\xcd\xce\u0128\u012a\u012c\u0130\xcf\u1e2e\u1ec8\u01cf\u0208\u020a\u1eca\u012e\u1e2c\u0197"},{base:"J",letters:"J\u24bf\uff2a\u0134\u0248"},{base:"K",letters:"K\u24c0\uff2b\u1e30\u01e8\u1e32\u0136\u1e34\u0198\u2c69\ua740\ua742\ua744\ua7a2"},{base:"L",letters:"L\u24c1\uff2c\u013f\u0139\u013d\u1e36\u1e38\u013b\u1e3c\u1e3a\u0141\u023d\u2c62\u2c60\ua748\ua746\ua780"},{base:"LJ",letters:"\u01c7"},{base:"Lj",letters:"\u01c8"},{base:"M",letters:"M\u24c2\uff2d\u1e3e\u1e40\u1e42\u2c6e\u019c"},{base:"N",letters:"N\u24c3\uff2e\u01f8\u0143\xd1\u1e44\u0147\u1e46\u0145\u1e4a\u1e48\u0220\u019d\ua790\ua7a4"},{base:"NJ",letters:"\u01ca"},{base:"Nj",letters:"\u01cb"},{base:"O",letters:"O\u24c4\uff2f\xd2\xd3\xd4\u1ed2\u1ed0\u1ed6\u1ed4\xd5\u1e4c\u022c\u1e4e\u014c\u1e50\u1e52\u014e\u022e\u0230\xd6\u022a\u1ece\u0150\u01d1\u020c\u020e\u01a0\u1edc\u1eda\u1ee0\u1ede\u1ee2\u1ecc\u1ed8\u01ea\u01ec\xd8\u01fe\u0186\u019f\ua74a\ua74c"},{base:"OI",letters:"\u01a2"},{base:"OO",letters:"\ua74e"},{base:"OU",letters:"\u0222"},{base:"OE",letters:"\x8c\u0152"},{base:"oe",letters:"\x9c\u0153"},{base:"P",letters:"P\u24c5\uff30\u1e54\u1e56\u01a4\u2c63\ua750\ua752\ua754"},{base:"Q",letters:"Q\u24c6\uff31\ua756\ua758\u024a"},{base:"R",letters:"R\u24c7\uff32\u0154\u1e58\u0158\u0210\u0212\u1e5a\u1e5c\u0156\u1e5e\u024c\u2c64\ua75a\ua7a6\ua782"},{base:"S",letters:"S\u24c8\uff33\u1e9e\u015a\u1e64\u015c\u1e60\u0160\u1e66\u1e62\u1e68\u0218\u015e\u2c7e\ua7a8\ua784"},{base:"T",letters:"T\u24c9\uff34\u1e6a\u0164\u1e6c\u021a\u0162\u1e70\u1e6e\u0166\u01ac\u01ae\u023e\ua786"},{base:"TZ",letters:"\ua728"},{base:"U",letters:"U\u24ca\uff35\xd9\xda\xdb\u0168\u1e78\u016a\u1e7a\u016c\xdc\u01db\u01d7\u01d5\u01d9\u1ee6\u016e\u0170\u01d3\u0214\u0216\u01af\u1eea\u1ee8\u1eee\u1eec\u1ef0\u1ee4\u1e72\u0172\u1e76\u1e74\u0244"},{base:"V",letters:"V\u24cb\uff36\u1e7c\u1e7e\u01b2\ua75e\u0245"},{base:"VY",letters:"\ua760"},{base:"W",letters:"W\u24cc\uff37\u1e80\u1e82\u0174\u1e86\u1e84\u1e88\u2c72"},{base:"X",letters:"X\u24cd\uff38\u1e8a\u1e8c"},{base:"Y",letters:"Y\u24ce\uff39\u1ef2\xdd\u0176\u1ef8\u0232\u1e8e\u0178\u1ef6\u1ef4\u01b3\u024e\u1efe"},{base:"Z",letters:"Z\u24cf\uff3a\u0179\u1e90\u017b\u017d\u1e92\u1e94\u01b5\u0224\u2c7f\u2c6b\ua762"},{base:"a",letters:"a\u24d0\uff41\u1e9a\xe0\xe1\xe2\u1ea7\u1ea5\u1eab\u1ea9\xe3\u0101\u0103\u1eb1\u1eaf\u1eb5\u1eb3\u0227\u01e1\xe4\u01df\u1ea3\xe5\u01fb\u01ce\u0201\u0203\u1ea1\u1ead\u1eb7\u1e01\u0105\u2c65\u0250"},{base:"aa",letters:"\ua733"},{base:"ae",letters:"\xe6\u01fd\u01e3"},{base:"ao",letters:"\ua735"},{base:"au",letters:"\ua737"},{base:"av",letters:"\ua739\ua73b"},{base:"ay",letters:"\ua73d"},{base:"b",letters:"b\u24d1\uff42\u1e03\u1e05\u1e07\u0180\u0183\u0253"},{base:"c",letters:"c\u24d2\uff43\u0107\u0109\u010b\u010d\xe7\u1e09\u0188\u023c\ua73f\u2184"},{base:"d",letters:"d\u24d3\uff44\u1e0b\u010f\u1e0d\u1e11\u1e13\u1e0f\u0111\u018c\u0256\u0257\ua77a"},{base:"dz",letters:"\u01f3\u01c6"},{base:"e",letters:"e\u24d4\uff45\xe8\xe9\xea\u1ec1\u1ebf\u1ec5\u1ec3\u1ebd\u0113\u1e15\u1e17\u0115\u0117\xeb\u1ebb\u011b\u0205\u0207\u1eb9\u1ec7\u0229\u1e1d\u0119\u1e19\u1e1b\u0247\u025b\u01dd"},{base:"f",letters:"f\u24d5\uff46\u1e1f\u0192\ua77c"},{base:"g",letters:"g\u24d6\uff47\u01f5\u011d\u1e21\u011f\u0121\u01e7\u0123\u01e5\u0260\ua7a1\u1d79\ua77f"},{base:"h",letters:"h\u24d7\uff48\u0125\u1e23\u1e27\u021f\u1e25\u1e29\u1e2b\u1e96\u0127\u2c68\u2c76\u0265"},{base:"hv",letters:"\u0195"},{base:"i",letters:"i\u24d8\uff49\xec\xed\xee\u0129\u012b\u012d\xef\u1e2f\u1ec9\u01d0\u0209\u020b\u1ecb\u012f\u1e2d\u0268\u0131"},{base:"j",letters:"j\u24d9\uff4a\u0135\u01f0\u0249"},{base:"k",letters:"k\u24da\uff4b\u1e31\u01e9\u1e33\u0137\u1e35\u0199\u2c6a\ua741\ua743\ua745\ua7a3"},{base:"l",letters:"l\u24db\uff4c\u0140\u013a\u013e\u1e37\u1e39\u013c\u1e3d\u1e3b\u017f\u0142\u019a\u026b\u2c61\ua749\ua781\ua747"},{base:"lj",letters:"\u01c9"},{base:"m",letters:"m\u24dc\uff4d\u1e3f\u1e41\u1e43\u0271\u026f"},{base:"n",letters:"n\u24dd\uff4e\u01f9\u0144\xf1\u1e45\u0148\u1e47\u0146\u1e4b\u1e49\u019e\u0272\u0149\ua791\ua7a5"},{base:"nj",letters:"\u01cc"},{base:"o",letters:"o\u24de\uff4f\xf2\xf3\xf4\u1ed3\u1ed1\u1ed7\u1ed5\xf5\u1e4d\u022d\u1e4f\u014d\u1e51\u1e53\u014f\u022f\u0231\xf6\u022b\u1ecf\u0151\u01d2\u020d\u020f\u01a1\u1edd\u1edb\u1ee1\u1edf\u1ee3\u1ecd\u1ed9\u01eb\u01ed\xf8\u01ff\u0254\ua74b\ua74d\u0275"},{base:"oi",letters:"\u01a3"},{base:"ou",letters:"\u0223"},{base:"oo",letters:"\ua74f"},{base:"p",letters:"p\u24df\uff50\u1e55\u1e57\u01a5\u1d7d\ua751\ua753\ua755"},{base:"q",letters:"q\u24e0\uff51\u024b\ua757\ua759"},{base:"r",letters:"r\u24e1\uff52\u0155\u1e59\u0159\u0211\u0213\u1e5b\u1e5d\u0157\u1e5f\u024d\u027d\ua75b\ua7a7\ua783"},{base:"s",letters:"s\u24e2\uff53\xdf\u015b\u1e65\u015d\u1e61\u0161\u1e67\u1e63\u1e69\u0219\u015f\u023f\ua7a9\ua785\u1e9b"},{base:"t",letters:"t\u24e3\uff54\u1e6b\u1e97\u0165\u1e6d\u021b\u0163\u1e71\u1e6f\u0167\u01ad\u0288\u2c66\ua787"},{base:"tz",letters:"\ua729"},{base:"u",letters:"u\u24e4\uff55\xf9\xfa\xfb\u0169\u1e79\u016b\u1e7b\u016d\xfc\u01dc\u01d8\u01d6\u01da\u1ee7\u016f\u0171\u01d4\u0215\u0217\u01b0\u1eeb\u1ee9\u1eef\u1eed\u1ef1\u1ee5\u1e73\u0173\u1e77\u1e75\u0289"},{base:"v",letters:"v\u24e5\uff56\u1e7d\u1e7f\u028b\ua75f\u028c"},{base:"vy",letters:"\ua761"},{base:"w",letters:"w\u24e6\uff57\u1e81\u1e83\u0175\u1e87\u1e85\u1e98\u1e89\u2c73"},{base:"x",letters:"x\u24e7\uff58\u1e8b\u1e8d"},{base:"y",letters:"y\u24e8\uff59\u1ef3\xfd\u0177\u1ef9\u0233\u1e8f\xff\u1ef7\u1e99\u1ef5\u01b4\u024f\u1eff"},{base:"z",letters:"z\u24e9\uff5a\u017a\u1e91\u017c\u017e\u1e93\u1e95\u01b6\u0225\u0240\u2c6c\ua763"}].reduce((function(e,t){var a=t.base;return t.letters.split("").forEach((function(t){e[t]=a})),e}),{}),Kc="\u0300-\u036f",zc="\u3099\u309a";function Vc(e){return e.normalize("NFD").replace(new RegExp("[".concat(Kc).concat(zc,"]"),"g"),"").replace(/[^\u0000-\u007E]/g,(function(e){return Uc[e]||e}))}var Yc={};function Jc(e,t){if(!e&&-1!==t.indexOf("deprecated")){if(Yc[t])return;Yc[t]=!0}for(var a=arguments.length,n=new Array(a>2?a-2:0),o=2;o<a;o++)n[o-2]=arguments[o];vi().apply(void 0,[e,"[react-bootstrap-typeahead] ".concat(t)].concat(n))}function $c(e,t,a){var n=e,o=t;return a.caseSensitive||(n=n.toLowerCase(),o=o.toLowerCase()),a.ignoreDiacritics&&(n=Vc(n),o=Vc(o)),-1!==o.indexOf(n)}function Zc(e,t){var a=t.filterBy,n=t.labelKey,o=t.multiple,i=t.selected,r=t.text;if(o&&i.some((function(t){return Bc()(t,e)})))return!1;if(Oc(n))return $c(r,n(e),t);var s=a.slice();return qc(n)&&-1===s.indexOf(n)&&s.unshift(n),qc(e)?(Jc(s.length<=1,"You cannot filter by properties when `option` is a string."),$c(r,e,t)):s.some((function(a){var n=Hc(e,a);return qc(n)||(Jc(!1,"Fields passed to `filterBy` should have string values. Value will be converted to a string; results may be unexpected."),n=String(n)),$c(r,n,t)}))}function Qc(e){return null!=e.selectionStart}var Xc="i",ed=/[\u0300-\u036F]/;function td(e,t){var a=new RegExp(function(e){return"string"!==typeof e&&as()(!1),e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}(Vc(t)),Xc),n=a.exec(Vc(e));if(!n)return null;var o=n.index,i=n[0].length;if(ed.test(e)){for(var r=0;r<=o;r++)ed.test(e[r])&&(o+=1);for(var s=o;s<=o+i;s++)ed.test(e[s])&&(i+=1)}return{end:o+i,start:o}}var ad=function(e){var t=e.activeIndex,a=e.initialItem,n=e.isFocused,o=e.isMenuShown,i=e.labelKey,r=e.multiple,s=e.selected,l=e.text;if(!l||!n||!o||!a||!qc(a)&&Rc(a,"customOption")||!qc(a)&&a.disabled||t>-1||s.length&&!r)return"";var c=Fc(a,i),d=td(c.toLowerCase(),l.toLowerCase());return d&&0===d.start?l+c.slice(d.end,c.length):""},nd=a(8587);function od(e,t){if(null==e)return{};var a,n,o=(0,nd.A)(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)a=i[n],-1===t.indexOf(a)&&{}.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}function id(){var e=arguments.length>1?arguments[1]:void 0;return"".concat(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"","-item-").concat(e)}var rd=["activeIndex","id","isFocused","isMenuShown","multiple","onClick","onFocus","placeholder"];function sd(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function ld(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?sd(Object(a),!0).forEach((function(t){Ec(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):sd(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}var cd=function(e){var t=e.activeIndex,a=e.id,n=e.isFocused,o=e.isMenuShown,i=e.multiple,r=e.onClick,s=e.onFocus,l=e.placeholder,c=od(e,rd);return function(){var e,d=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},u=Rc(d,"className")?String(d.className):void 0;return ld(ld(ld(ld({autoComplete:"off",placeholder:l,type:"text"},d),c),{},{"aria-activedescendant":t>=0?id(a,t):void 0,"aria-autocomplete":"both","aria-expanded":o,"aria-haspopup":"listbox","aria-multiselectable":i||void 0,"aria-owns":o?a:void 0,className:si()((e={},Ec(e,u||"",!i),Ec(e,"focus",n),e))},i&&{inputClassName:u}),{},{onClick:r,onFocus:s,role:"combobox"})}};var dd=function(e){var t=e.activeItem,a=e.labelKey,n=e.multiple,o=e.selected,i=e.text;return t?Fc(t,a):!n&&o.length&&o[0]?Fc(o[0],a):i};var ud=function(e){var t=e.allowNew,a=e.highlightOnlyResult,n=e.results;return!(!a||t)&&(1===n.length&&!Hc(n[0],"disabled"))};var hd=function(e,t){return!t||t>=e.length?e:e.slice(0,t)};function md(e,t){var a=t[e];return!!a&&!!Hc(a,"disabled")}function pd(e,t,a){for(var n=e;md(n,a);)n+="ArrowUp"===t?-1:1;return n}function fd(e){e.preventDefault()}function gd(e){return"lg"===e}function yd(e){return"sm"===e}var _d=["className","isInvalid","isValid","size"];function bd(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function vd(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?bd(Object(a),!0).forEach((function(t){Ec(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):bd(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function wd(e){var t=e.className,a=e.isInvalid,n=e.isValid,o=e.size;return vd(vd({},od(e,_d)),{},{className:si()("form-control","rbt-input",{"form-control-lg":gd(o),"form-control-sm":yd(o),"is-invalid":a,"is-valid":n},t)})}var xd=[{alt:"onBlur",prop:"onBlur"},{alt:"onInputChange",prop:"onChange"},{alt:"onFocus",prop:"onFocus"},{alt:"onKeyDown",prop:"onKeyDown"}],kd=Un().oneOf(["lg","sm"]);function Cd(e,t){return function(a,n,o){Un().checkPropTypes(Ec({},n,e),a,"prop",o),Oc(t)&&t(a,n,o)}}function jd(e,t,a){Jc(null!=e[t],"The prop `".concat(t,"` is required to make `").concat(a,"` ")+"accessible for users of assistive technologies such as screen readers.")}var Sd=Un().oneOfType([Un().object,Un().string]);Un().number,Un().bool.isRequired,Un().number,Un().func.isRequired,Un().arrayOf(Sd),Un().node,Un().node,Un().bool;function Id(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Ad(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,Nc(n.key),n)}}function Nd(e,t,a){return t&&Ad(e.prototype,t),a&&Ad(e,a),Object.defineProperty(e,"prototype",{writable:!1}),e}function Ed(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}var Td=a(3662);function Dd(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&(0,Td.A)(e,t)}function Rd(e,t){if(t&&("object"==Ac(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return Ed(e)}function Md(e){return Md=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Md(e)}var Od=a(8168),qd={activeIndex:-1,hintText:"",id:"",initialItem:null,inputNode:null,isOnlyResult:!1,onActiveItemChange:Gc,onAdd:Gc,onInitialItemChange:Gc,onMenuItemClick:Gc,setItem:Gc},Gd=(0,t.createContext)(qd),Pd=function(){return(0,t.useContext)(Gd)};function Fd(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function Ld(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?Fd(Object(a),!0).forEach((function(t){Ec(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):Fd(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}var Wd=["activeIndex","disabled","id","inputRef","isFocused","isMenuShown","multiple","onBlur","onChange","onClick","onFocus","onKeyDown","placeholder"],Bd=["activeIndex","hideMenu","isMenuShown","labelKey","onClear","onHide","onRemove","results","selected","text","toggleMenu"],Hd=["activeIndex","id","initialItem","inputNode","onActiveItemChange","onAdd","onInitialItemChange","onMenuItemClick","setItem"],Ud=function(e){var a=e.allowNew,n=e.children,o=e.initialItem,i=e.isMenuShown,r=e.onAdd,s=e.onInitialItemChange,l=e.onKeyDown,c=e.onMenuToggle,d=e.results,u=e.selectHint,h=ad(e);(0,t.useEffect)((function(){a||d.length||s()}));var m=(0,t.useRef)(!0);(0,t.useEffect)((function(){m.current?m.current=!1:c(i)}),[i,c]);var p=Ld(Ld({},Pc(e,Bd)),{},{getInputProps:cd(Ld(Ld({},Pc(e,Wd)),{},{onKeyDown:function(t){if(l(t),o){var a="Enter"===t.key&&ud(e),n=h&&function(e,t){var a=!1;return"ArrowRight"===e.key&&(a=!Qc(e.currentTarget)||e.currentTarget.selectionStart===e.currentTarget.value.length),"Tab"===e.key&&(e.preventDefault(),a=!0),t?t(a,e):a}(t,u);(a||n)&&r(o)}},value:dd(e)}))}),f=Ld(Ld({},Pc(e,Hd)),{},{hintText:h,isOnlyResult:ud(e)});return t.createElement(Gd.Provider,{value:f},Oc(n)?n(p):n)};function Kd(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function zd(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?Kd(Object(a),!0).forEach((function(t){Ec(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):Kd(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function Vd(e){var t=e.defaultInputValue,a=e.defaultOpen,n=e.defaultSelected,o=e.maxResults,i=e.multiple,r=e.selected?e.selected.slice():n.slice(),s=t;return!i&&r.length&&(s=Fc(r[0],e.labelKey),r.length>1&&(r=r.slice(0,1))),{activeIndex:-1,activeItem:void 0,initialItem:void 0,isFocused:!1,selected:r,showMenu:a,shownResults:o,text:s}}function Yd(e,t){return zd(zd({},Vd(t)),{},{isFocused:e.isFocused,selected:[],text:""})}function Jd(e){return zd(zd({},e),{},{isFocused:!0,showMenu:!0})}function $d(e,t){var a=Vd(t),n=a.activeIndex,o=a.activeItem,i=a.initialItem,r=a.shownResults;return zd(zd({},e),{},{activeIndex:n,activeItem:o,initialItem:i,showMenu:!1,shownResults:r})}function Zd(e,t){return e.showMenu?$d(e,t):zd(zd({},e),{},{showMenu:!0})}var Qd=["onChange"];function Xd(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function eu(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?Xd(Object(a),!0).forEach((function(t){Ec(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):Xd(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function tu(e){var t=function(){if("undefined"===typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"===typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(xC){return!1}}();return function(){var a,n=Md(e);if(t){var o=Md(this).constructor;a=Reflect.construct(n,arguments,o)}else a=n.apply(this,arguments);return Rd(this,a)}}var au={allowNew:Un().oneOfType([Un().bool,Un().func]),autoFocus:Un().bool,caseSensitive:Cd(Un().bool,(function(e){var t=e.caseSensitive,a=e.filterBy;Jc(!t||"function"!==typeof a,"Your `filterBy` function will override the `caseSensitive` prop.")})),defaultInputValue:Cd(Un().string,(function(e){var t=e.defaultInputValue,a=e.defaultSelected,n=e.multiple,o=e.selected,i=a.length?"defaultSelected":"selected";Jc(!(!n&&t&&(a.length||o&&o.length)),"`defaultInputValue` will be overridden by the value from `".concat(i,"`."))})),defaultOpen:Un().bool,defaultSelected:Cd(Un().arrayOf(Sd),(function(e){var t=e.defaultSelected;Jc(e.multiple||t.length<=1,"You are passing multiple options to the `defaultSelected` prop of a Typeahead in single-select mode. The selections will be truncated to a single selection.")})),filterBy:Un().oneOfType([Un().arrayOf(Un().string.isRequired),Un().func]),highlightOnlyResult:Cd(Un().bool,(function(e){var t=e.allowNew;Jc(!(e.highlightOnlyResult&&t),"`highlightOnlyResult` will not work with `allowNew`.")})),id:Cd(Un().oneOfType([Un().number,Un().string]),jd),ignoreDiacritics:Cd(Un().bool,(function(e){var t=e.filterBy;Jc(e.ignoreDiacritics||"function"!==typeof t,"Your `filterBy` function will override the `ignoreDiacritics` prop.")})),labelKey:Cd(Un().oneOfType([Un().string,Un().func]),(function(e){var t=e.allowNew;Jc(!(Oc(e.labelKey)&&t),"`labelKey` must be a string when `allowNew={true}`.")})),maxResults:Un().number,minLength:Un().number,multiple:Un().bool,onBlur:Un().func,onChange:Un().func,onFocus:Un().func,onInputChange:Un().func,onKeyDown:Un().func,onMenuToggle:Un().func,onPaginate:Un().func,open:Un().bool,options:Un().arrayOf(Sd).isRequired,paginate:Un().bool,selected:Cd(Un().arrayOf(Sd),(function(e){var t=e.multiple,a=e.onChange,n=e.selected;Jc(t||!n||n.length<=1,"You are passing multiple options to the `selected` prop of a Typeahead in single-select mode. This may lead to unexpected behaviors or errors."),Jc(!n||n&&Oc(a),"You provided a `selected` prop without an `onChange` handler. If you want the typeahead to be uncontrolled, use `defaultSelected`. Otherwise, set `onChange`.")}))},nu={allowNew:!1,autoFocus:!1,caseSensitive:!1,defaultInputValue:"",defaultOpen:!1,defaultSelected:[],filterBy:[],highlightOnlyResult:!1,ignoreDiacritics:!0,labelKey:Tc,maxResults:100,minLength:0,multiple:!1,onBlur:Gc,onFocus:Gc,onInputChange:Gc,onKeyDown:Gc,onMenuToggle:Gc,onPaginate:Gc,paginate:!0};var ou=function(e){Dd(n,e);var a=tu(n);function n(){var e;Id(this,n);for(var t=arguments.length,o=new Array(t),i=0;i<t;i++)o[i]=arguments[i];return Ec(Ed(e=a.call.apply(a,[this].concat(o))),"state",Vd(e.props)),Ec(Ed(e),"inputNode",null),Ec(Ed(e),"isMenuShown",!1),Ec(Ed(e),"items",[]),Ec(Ed(e),"blur",(function(){e.inputNode&&e.inputNode.blur(),e.hideMenu()})),Ec(Ed(e),"clear",(function(){e.setState(Yd)})),Ec(Ed(e),"focus",(function(){e.inputNode&&e.inputNode.focus()})),Ec(Ed(e),"getInput",(function(){return e.inputNode})),Ec(Ed(e),"inputRef",(function(t){e.inputNode=t})),Ec(Ed(e),"setItem",(function(t,a){e.items[a]=t})),Ec(Ed(e),"hideMenu",(function(){e.setState($d)})),Ec(Ed(e),"toggleMenu",(function(){e.setState(Zd)})),Ec(Ed(e),"_handleActiveIndexChange",(function(t){e.setState((function(e){return{activeIndex:t,activeItem:t>=0?e.activeItem:void 0}}))})),Ec(Ed(e),"_handleActiveItemChange",(function(t){Bc()(t,e.state.activeItem)||e.setState({activeItem:t})})),Ec(Ed(e),"_handleBlur",(function(t){t.persist(),e.setState({isFocused:!1},(function(){return e.props.onBlur(t)}))})),Ec(Ed(e),"_handleChange",(function(t){e.props.onChange&&e.props.onChange(t)})),Ec(Ed(e),"_handleClear",(function(){e.inputNode&&function(e,t){var a=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,"value");a&&a.set&&a.set.call(e,t);var n=new Event("input",{bubbles:!0});e.dispatchEvent(n)}(e.inputNode,""),e.setState(Yd,(function(){e.props.multiple&&e._handleChange([])}))})),Ec(Ed(e),"_handleClick",(function(t){var a;t.persist();var n=null===(a=e.props.inputProps)||void 0===a?void 0:a.onClick;e.setState(Jd,(function(){return Oc(n)&&n(t)}))})),Ec(Ed(e),"_handleFocus",(function(t){t.persist(),e.setState(Jd,(function(){return e.props.onFocus(t)}))})),Ec(Ed(e),"_handleInitialItemChange",(function(t){Bc()(t,e.state.initialItem)||e.setState({initialItem:t})})),Ec(Ed(e),"_handleInputChange",(function(t){t.persist();var a=t.currentTarget.value,n=e.props,o=n.multiple,i=n.onInputChange,r=e.state.selected.length&&!o;e.setState((function(e,t){var n=Vd(t),o=n.activeIndex,i=n.activeItem,s=n.shownResults;return{activeIndex:o,activeItem:i,selected:r?[]:e.selected,showMenu:!0,shownResults:s,text:a}}),(function(){i(a,t),r&&e._handleChange([])}))})),Ec(Ed(e),"_handleKeyDown",(function(t){var a=e.state.activeItem;if(!e.isMenuShown)return"ArrowUp"!==t.key&&"ArrowDown"!==t.key||e.setState({showMenu:!0}),void e.props.onKeyDown(t);switch(t.key){case"ArrowUp":case"ArrowDown":t.preventDefault(),e._handleActiveIndexChange(function(e,t,a){var n=e;return(n=pd(n+="ArrowUp"===t?-1:1,t,a))===a.length?n=-1:-2===n&&(n=pd(n=a.length-1,t,a)),n}(e.state.activeIndex,t.key,e.items));break;case"Enter":t.preventDefault(),a&&e._handleMenuItemSelect(a,t);break;case"Escape":case"Tab":e.hideMenu()}e.props.onKeyDown(t)})),Ec(Ed(e),"_handleMenuItemSelect",(function(t,a){Hc(t,"paginationOption")?e._handlePaginate(a):e._handleSelectionAdd(t)})),Ec(Ed(e),"_handlePaginate",(function(t){t.persist(),e.setState((function(e,t){return{shownResults:e.shownResults+t.maxResults}}),(function(){return e.props.onPaginate(t,e.state.shownResults)}))})),Ec(Ed(e),"_handleSelectionAdd",(function(t){var a,n,o,i=e.props,r=i.multiple,s=i.labelKey,l=t;!qc(l)&&l.customOption&&(l=eu(eu({},l),{},{id:(o="new-id-",Mc+=1,(null==o?"":String(o))+Mc)})),r?(a=e.state.selected.concat(l),n=""):(a=[l],n=Fc(l,s)),e.setState((function(e,t){return eu(eu({},$d(e,t)),{},{initialItem:l,selected:a,text:n})}),(function(){return e._handleChange(a)}))})),Ec(Ed(e),"_handleSelectionRemove",(function(t){var a=e.state.selected.filter((function(e){return!Bc()(e,t)}));e.focus(),e.setState((function(e,t){return eu(eu({},$d(e,t)),{},{selected:a})}),(function(){return e._handleChange(a)}))})),e}return Nd(n,[{key:"componentDidMount",value:function(){this.props.autoFocus&&this.focus()}},{key:"componentDidUpdate",value:function(e,t){var a=this.props,n=a.labelKey,o=a.multiple,i=a.selected;!function(e,t){var a,n,o,i=!e&&t;i?(a="uncontrolled",n="controlled",o="an"):(a="controlled",n="uncontrolled",o="a"),Jc(!(i||e&&!t),"You are changing ".concat(o," ").concat(a," typeahead to be ").concat(n,". ")+"Input elements should not switch from ".concat(a," to ").concat(n," (or vice versa). ")+"Decide between using a controlled or uncontrolled element for the lifetime of the component.")}(i,e.selected),i&&!Bc()(i,t.selected)&&(this.setState({selected:i}),o||this.setState({text:i.length?Fc(i[0],n):""}))}},{key:"render",value:function(){var e=this.props,a=(e.onChange,eu(eu({},od(e,Qd)),this.state)),n=a.filterBy,o=a.labelKey,i=a.options,r=a.paginate,s=a.shownResults,l=a.text;this.isMenuShown=function(e){var t=e.open,a=e.minLength,n=e.showMenu,o=e.text;return t||!1===t?t:!(o.length<a)&&n}(a),this.items=[];var c=[];if(this.isMenuShown){var d=Oc(n)?n:Zc;c=i.filter((function(e){return d(e,a)}));var u,h=r&&c.length>s;if(c=hd(c,s),Lc(c,a)&&c.push(Ec({customOption:!0},Dc(o),l)),h)c.push((Ec(u={},Dc(o),""),Ec(u,"paginationOption",!0),u))}return t.createElement(Ud,(0,Od.A)({},a,{hideMenu:this.hideMenu,inputNode:this.inputNode,inputRef:this.inputRef,isMenuShown:this.isMenuShown,onActiveItemChange:this._handleActiveItemChange,onAdd:this._handleSelectionAdd,onBlur:this._handleBlur,onChange:this._handleInputChange,onClear:this._handleClear,onClick:this._handleClick,onFocus:this._handleFocus,onHide:this.hideMenu,onInitialItemChange:this._handleInitialItemChange,onKeyDown:this._handleKeyDown,onMenuItemClick:this._handleMenuItemSelect,onRemove:this._handleSelectionRemove,results:c,setItem:this.setItem,toggleMenu:this.toggleMenu}))}}]),n}(t.Component);Ec(ou,"propTypes",au),Ec(ou,"defaultProps",nu);var iu=ou,ru=["className","label","onClick","onKeyDown","size"],su={label:Un().string,onClick:Un().func,onKeyDown:Un().func,size:kd},lu=function(e){var a=e.className,n=e.label,o=void 0===n?"Clear":n,i=e.onClick,r=e.onKeyDown,s=e.size,l=od(e,ru);return t.createElement("button",(0,Od.A)({},l,{"aria-label":o,className:si()("close","btn-close","rbt-close",{"rbt-close-lg":gd(s),"rbt-close-sm":yd(s)},a),onClick:function(e){e.stopPropagation(),i&&i(e)},onKeyDown:function(e){"Backspace"===e.key&&e.preventDefault(),r&&r(e)},type:"button"}),t.createElement("span",{"aria-hidden":"true",className:"rbt-close-content"},"\xd7"),t.createElement("span",{className:"sr-only visually-hidden"},o))};lu.propTypes=su;var cu=lu,du={label:Un().string},uu=function(e){var a=e.label,n=void 0===a?"Loading...":a;return t.createElement("div",{className:"rbt-loader spinner-border spinner-border-sm",role:"status"},t.createElement("span",{className:"sr-only visually-hidden"},n))};uu.propTypes=du;var hu=uu;function mu(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}function pu(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,o,i,r,s=[],l=!0,c=!1;try{if(i=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;l=!1}else for(;!(l=(n=i.call(a)).done)&&(s.push(n.value),s.length!==t);l=!0);}catch(e){c=!0,o=e}finally{try{if(!l&&null!=a.return&&(r=a.return(),Object(r)!==r))return}finally{if(c)throw o}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return mu(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?mu(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}const fu=Math.min,gu=Math.max,yu=Math.round,_u=Math.floor,bu=e=>({x:e,y:e}),vu={left:"right",right:"left",bottom:"top",top:"bottom"},wu={start:"end",end:"start"};function xu(e,t){return"function"===typeof e?e(t):e}function ku(e){return e.split("-")[0]}function Cu(e){return e.split("-")[1]}function ju(e){return"y"===e?"height":"width"}function Su(e){return["top","bottom"].includes(ku(e))?"y":"x"}function Iu(e){return"x"===Su(e)?"y":"x"}function Au(e){return e.replace(/start|end/g,(e=>wu[e]))}function Nu(e){return e.replace(/left|right|bottom|top/g,(e=>vu[e]))}function Eu(e){return{...e,top:e.y,left:e.x,right:e.x+e.width,bottom:e.y+e.height}}function Tu(e,t,a){let{reference:n,floating:o}=e;const i=Su(t),r=Iu(t),s=ju(r),l=ku(t),c="y"===i,d=n.x+n.width/2-o.width/2,u=n.y+n.height/2-o.height/2,h=n[s]/2-o[s]/2;let m;switch(l){case"top":m={x:d,y:n.y-o.height};break;case"bottom":m={x:d,y:n.y+n.height};break;case"right":m={x:n.x+n.width,y:u};break;case"left":m={x:n.x-o.width,y:u};break;default:m={x:n.x,y:n.y}}switch(Cu(t)){case"start":m[r]-=h*(a&&c?-1:1);break;case"end":m[r]+=h*(a&&c?-1:1)}return m}async function Du(e,t){var a;void 0===t&&(t={});const{x:n,y:o,platform:i,rects:r,elements:s,strategy:l}=e,{boundary:c="clippingAncestors",rootBoundary:d="viewport",elementContext:u="floating",altBoundary:h=!1,padding:m=0}=xu(t,e),p=function(e){return"number"!==typeof e?function(e){return{top:0,right:0,bottom:0,left:0,...e}}(e):{top:e,right:e,bottom:e,left:e}}(m),f=s[h?"floating"===u?"reference":"floating":u],g=Eu(await i.getClippingRect({element:null==(a=await(null==i.isElement?void 0:i.isElement(f)))||a?f:f.contextElement||await(null==i.getDocumentElement?void 0:i.getDocumentElement(s.floating)),boundary:c,rootBoundary:d,strategy:l})),y="floating"===u?{...r.floating,x:n,y:o}:r.reference,_=await(null==i.getOffsetParent?void 0:i.getOffsetParent(s.floating)),b=await(null==i.isElement?void 0:i.isElement(_))&&await(null==i.getScale?void 0:i.getScale(_))||{x:1,y:1},v=Eu(i.convertOffsetParentRelativeRectToViewportRelativeRect?await i.convertOffsetParentRelativeRectToViewportRelativeRect({elements:s,rect:y,offsetParent:_,strategy:l}):y);return{top:(g.top-v.top+p.top)/b.y,bottom:(v.bottom-g.bottom+p.bottom)/b.y,left:(g.left-v.left+p.left)/b.x,right:(v.right-g.right+p.right)/b.x}}function Ru(e){return qu(e)?(e.nodeName||"").toLowerCase():"#document"}function Mu(e){var t;return(null==e||null==(t=e.ownerDocument)?void 0:t.defaultView)||window}function Ou(e){var t;return null==(t=(qu(e)?e.ownerDocument:e.document)||window.document)?void 0:t.documentElement}function qu(e){return e instanceof Node||e instanceof Mu(e).Node}function Gu(e){return e instanceof Element||e instanceof Mu(e).Element}function Pu(e){return e instanceof HTMLElement||e instanceof Mu(e).HTMLElement}function Fu(e){return"undefined"!==typeof ShadowRoot&&(e instanceof ShadowRoot||e instanceof Mu(e).ShadowRoot)}function Lu(e){const{overflow:t,overflowX:a,overflowY:n,display:o}=Ku(e);return/auto|scroll|overlay|hidden|clip/.test(t+n+a)&&!["inline","contents"].includes(o)}function Wu(e){return["table","td","th"].includes(Ru(e))}function Bu(e){const t=Hu(),a=Ku(e);return"none"!==a.transform||"none"!==a.perspective||!!a.containerType&&"normal"!==a.containerType||!t&&!!a.backdropFilter&&"none"!==a.backdropFilter||!t&&!!a.filter&&"none"!==a.filter||["transform","perspective","filter"].some((e=>(a.willChange||"").includes(e)))||["paint","layout","strict","content"].some((e=>(a.contain||"").includes(e)))}function Hu(){return!("undefined"===typeof CSS||!CSS.supports)&&CSS.supports("-webkit-backdrop-filter","none")}function Uu(e){return["html","body","#document"].includes(Ru(e))}function Ku(e){return Mu(e).getComputedStyle(e)}function zu(e){return Gu(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function Vu(e){if("html"===Ru(e))return e;const t=e.assignedSlot||e.parentNode||Fu(e)&&e.host||Ou(e);return Fu(t)?t.host:t}function Yu(e){const t=Vu(e);return Uu(t)?e.ownerDocument?e.ownerDocument.body:e.body:Pu(t)&&Lu(t)?t:Yu(t)}function Ju(e,t,a){var n;void 0===t&&(t=[]),void 0===a&&(a=!0);const o=Yu(e),i=o===(null==(n=e.ownerDocument)?void 0:n.body),r=Mu(o);return i?t.concat(r,r.visualViewport||[],Lu(o)?o:[],r.frameElement&&a?Ju(r.frameElement):[]):t.concat(o,Ju(o,[],a))}function $u(e){const t=Ku(e);let a=parseFloat(t.width)||0,n=parseFloat(t.height)||0;const o=Pu(e),i=o?e.offsetWidth:a,r=o?e.offsetHeight:n,s=yu(a)!==i||yu(n)!==r;return s&&(a=i,n=r),{width:a,height:n,$:s}}function Zu(e){return Gu(e)?e:e.contextElement}function Qu(e){const t=Zu(e);if(!Pu(t))return bu(1);const a=t.getBoundingClientRect(),{width:n,height:o,$:i}=$u(t);let r=(i?yu(a.width):a.width)/n,s=(i?yu(a.height):a.height)/o;return r&&Number.isFinite(r)||(r=1),s&&Number.isFinite(s)||(s=1),{x:r,y:s}}const Xu=bu(0);function eh(e){const t=Mu(e);return Hu()&&t.visualViewport?{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}:Xu}function th(e,t,a,n){void 0===t&&(t=!1),void 0===a&&(a=!1);const o=e.getBoundingClientRect(),i=Zu(e);let r=bu(1);t&&(n?Gu(n)&&(r=Qu(n)):r=Qu(e));const s=function(e,t,a){return void 0===t&&(t=!1),!(!a||t&&a!==Mu(e))&&t}(i,a,n)?eh(i):bu(0);let l=(o.left+s.x)/r.x,c=(o.top+s.y)/r.y,d=o.width/r.x,u=o.height/r.y;if(i){const e=Mu(i),t=n&&Gu(n)?Mu(n):n;let a=e,o=a.frameElement;for(;o&&n&&t!==a;){const e=Qu(o),t=o.getBoundingClientRect(),n=Ku(o),i=t.left+(o.clientLeft+parseFloat(n.paddingLeft))*e.x,r=t.top+(o.clientTop+parseFloat(n.paddingTop))*e.y;l*=e.x,c*=e.y,d*=e.x,u*=e.y,l+=i,c+=r,a=Mu(o),o=a.frameElement}}return Eu({width:d,height:u,x:l,y:c})}const ah=[":popover-open",":modal"];function nh(e){return ah.some((t=>{try{return e.matches(t)}catch(xC){return!1}}))}function oh(e){return th(Ou(e)).left+zu(e).scrollLeft}function ih(e,t,a){let n;if("viewport"===t)n=function(e,t){const a=Mu(e),n=Ou(e),o=a.visualViewport;let i=n.clientWidth,r=n.clientHeight,s=0,l=0;if(o){i=o.width,r=o.height;const e=Hu();(!e||e&&"fixed"===t)&&(s=o.offsetLeft,l=o.offsetTop)}return{width:i,height:r,x:s,y:l}}(e,a);else if("document"===t)n=function(e){const t=Ou(e),a=zu(e),n=e.ownerDocument.body,o=gu(t.scrollWidth,t.clientWidth,n.scrollWidth,n.clientWidth),i=gu(t.scrollHeight,t.clientHeight,n.scrollHeight,n.clientHeight);let r=-a.scrollLeft+oh(e);const s=-a.scrollTop;return"rtl"===Ku(n).direction&&(r+=gu(t.clientWidth,n.clientWidth)-o),{width:o,height:i,x:r,y:s}}(Ou(e));else if(Gu(t))n=function(e,t){const a=th(e,!0,"fixed"===t),n=a.top+e.clientTop,o=a.left+e.clientLeft,i=Pu(e)?Qu(e):bu(1);return{width:e.clientWidth*i.x,height:e.clientHeight*i.y,x:o*i.x,y:n*i.y}}(t,a);else{const a=eh(e);n={...t,x:t.x-a.x,y:t.y-a.y}}return Eu(n)}function rh(e,t){const a=Vu(e);return!(a===t||!Gu(a)||Uu(a))&&("fixed"===Ku(a).position||rh(a,t))}function sh(e,t,a){const n=Pu(t),o=Ou(t),i="fixed"===a,r=th(e,!0,i,t);let s={scrollLeft:0,scrollTop:0};const l=bu(0);if(n||!n&&!i)if(("body"!==Ru(t)||Lu(o))&&(s=zu(t)),n){const e=th(t,!0,i,t);l.x=e.x+t.clientLeft,l.y=e.y+t.clientTop}else o&&(l.x=oh(o));return{x:r.left+s.scrollLeft-l.x,y:r.top+s.scrollTop-l.y,width:r.width,height:r.height}}function lh(e,t){return Pu(e)&&"fixed"!==Ku(e).position?t?t(e):e.offsetParent:null}function ch(e,t){const a=Mu(e);if(!Pu(e)||nh(e))return a;let n=lh(e,t);for(;n&&Wu(n)&&"static"===Ku(n).position;)n=lh(n,t);return n&&("html"===Ru(n)||"body"===Ru(n)&&"static"===Ku(n).position&&!Bu(n))?a:n||function(e){let t=Vu(e);for(;Pu(t)&&!Uu(t);){if(Bu(t))return t;t=Vu(t)}return null}(e)||a}const dh={convertOffsetParentRelativeRectToViewportRelativeRect:function(e){let{elements:t,rect:a,offsetParent:n,strategy:o}=e;const i="fixed"===o,r=Ou(n),s=!!t&&nh(t.floating);if(n===r||s&&i)return a;let l={scrollLeft:0,scrollTop:0},c=bu(1);const d=bu(0),u=Pu(n);if((u||!u&&!i)&&(("body"!==Ru(n)||Lu(r))&&(l=zu(n)),Pu(n))){const e=th(n);c=Qu(n),d.x=e.x+n.clientLeft,d.y=e.y+n.clientTop}return{width:a.width*c.x,height:a.height*c.y,x:a.x*c.x-l.scrollLeft*c.x+d.x,y:a.y*c.y-l.scrollTop*c.y+d.y}},getDocumentElement:Ou,getClippingRect:function(e){let{element:t,boundary:a,rootBoundary:n,strategy:o}=e;const i=[..."clippingAncestors"===a?function(e,t){const a=t.get(e);if(a)return a;let n=Ju(e,[],!1).filter((e=>Gu(e)&&"body"!==Ru(e))),o=null;const i="fixed"===Ku(e).position;let r=i?Vu(e):e;for(;Gu(r)&&!Uu(r);){const t=Ku(r),a=Bu(r);a||"fixed"!==t.position||(o=null),(i?!a&&!o:!a&&"static"===t.position&&o&&["absolute","fixed"].includes(o.position)||Lu(r)&&!a&&rh(e,r))?n=n.filter((e=>e!==r)):o=t,r=Vu(r)}return t.set(e,n),n}(t,this._c):[].concat(a),n],r=i[0],s=i.reduce(((e,a)=>{const n=ih(t,a,o);return e.top=gu(n.top,e.top),e.right=fu(n.right,e.right),e.bottom=fu(n.bottom,e.bottom),e.left=gu(n.left,e.left),e}),ih(t,r,o));return{width:s.right-s.left,height:s.bottom-s.top,x:s.left,y:s.top}},getOffsetParent:ch,getElementRects:async function(e){const t=this.getOffsetParent||ch,a=this.getDimensions;return{reference:sh(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,...await a(e.floating)}}},getClientRects:function(e){return Array.from(e.getClientRects())},getDimensions:function(e){const{width:t,height:a}=$u(e);return{width:t,height:a}},getScale:Qu,isElement:Gu,isRTL:function(e){return"rtl"===Ku(e).direction}};function uh(e,t,a,n){void 0===n&&(n={});const{ancestorScroll:o=!0,ancestorResize:i=!0,elementResize:r="function"===typeof ResizeObserver,layoutShift:s="function"===typeof IntersectionObserver,animationFrame:l=!1}=n,c=Zu(e),d=o||i?[...c?Ju(c):[],...Ju(t)]:[];d.forEach((e=>{o&&e.addEventListener("scroll",a,{passive:!0}),i&&e.addEventListener("resize",a)}));const u=c&&s?function(e,t){let a,n=null;const o=Ou(e);function i(){var e;clearTimeout(a),null==(e=n)||e.disconnect(),n=null}return function r(s,l){void 0===s&&(s=!1),void 0===l&&(l=1),i();const{left:c,top:d,width:u,height:h}=e.getBoundingClientRect();if(s||t(),!u||!h)return;const m={rootMargin:-_u(d)+"px "+-_u(o.clientWidth-(c+u))+"px "+-_u(o.clientHeight-(d+h))+"px "+-_u(c)+"px",threshold:gu(0,fu(1,l))||1};let p=!0;function f(e){const t=e[0].intersectionRatio;if(t!==l){if(!p)return r();t?r(!1,t):a=setTimeout((()=>{r(!1,1e-7)}),100)}p=!1}try{n=new IntersectionObserver(f,{...m,root:o.ownerDocument})}catch(xC){n=new IntersectionObserver(f,m)}n.observe(e)}(!0),i}(c,a):null;let h,m=-1,p=null;r&&(p=new ResizeObserver((e=>{let[n]=e;n&&n.target===c&&p&&(p.unobserve(t),cancelAnimationFrame(m),m=requestAnimationFrame((()=>{var e;null==(e=p)||e.observe(t)}))),a()})),c&&!l&&p.observe(c),p.observe(t));let f=l?th(e):null;return l&&function t(){const n=th(e);!f||n.x===f.x&&n.y===f.y&&n.width===f.width&&n.height===f.height||a();f=n,h=requestAnimationFrame(t)}(),a(),()=>{var e;d.forEach((e=>{o&&e.removeEventListener("scroll",a),i&&e.removeEventListener("resize",a)})),null==u||u(),null==(e=p)||e.disconnect(),p=null,l&&cancelAnimationFrame(h)}}const hh=function(e){return void 0===e&&(e={}),{name:"flip",options:e,async fn(t){var a,n;const{placement:o,middlewareData:i,rects:r,initialPlacement:s,platform:l,elements:c}=t,{mainAxis:d=!0,crossAxis:u=!0,fallbackPlacements:h,fallbackStrategy:m="bestFit",fallbackAxisSideDirection:p="none",flipAlignment:f=!0,...g}=xu(e,t);if(null!=(a=i.arrow)&&a.alignmentOffset)return{};const y=ku(o),_=ku(s)===s,b=await(null==l.isRTL?void 0:l.isRTL(c.floating)),v=h||(_||!f?[Nu(s)]:function(e){const t=Nu(e);return[Au(e),t,Au(t)]}(s));h||"none"===p||v.push(...function(e,t,a,n){const o=Cu(e);let i=function(e,t,a){const n=["left","right"],o=["right","left"],i=["top","bottom"],r=["bottom","top"];switch(e){case"top":case"bottom":return a?t?o:n:t?n:o;case"left":case"right":return t?i:r;default:return[]}}(ku(e),"start"===a,n);return o&&(i=i.map((e=>e+"-"+o)),t&&(i=i.concat(i.map(Au)))),i}(s,f,p,b));const w=[s,...v],x=await Du(t,g),k=[];let C=(null==(n=i.flip)?void 0:n.overflows)||[];if(d&&k.push(x[y]),u){const e=function(e,t,a){void 0===a&&(a=!1);const n=Cu(e),o=Iu(e),i=ju(o);let r="x"===o?n===(a?"end":"start")?"right":"left":"start"===n?"bottom":"top";return t.reference[i]>t.floating[i]&&(r=Nu(r)),[r,Nu(r)]}(o,r,b);k.push(x[e[0]],x[e[1]])}if(C=[...C,{placement:o,overflows:k}],!k.every((e=>e<=0))){var j,S;const e=((null==(j=i.flip)?void 0:j.index)||0)+1,t=w[e];if(t)return{data:{index:e,overflows:C},reset:{placement:t}};let a=null==(S=C.filter((e=>e.overflows[0]<=0)).sort(((e,t)=>e.overflows[1]-t.overflows[1]))[0])?void 0:S.placement;if(!a)switch(m){case"bestFit":{var I;const e=null==(I=C.map((e=>[e.placement,e.overflows.filter((e=>e>0)).reduce(((e,t)=>e+t),0)])).sort(((e,t)=>e[1]-t[1]))[0])?void 0:I[0];e&&(a=e);break}case"initialPlacement":a=s}if(o!==a)return{reset:{placement:a}}}return{}}}},mh=function(e){return void 0===e&&(e={}),{name:"size",options:e,async fn(t){const{placement:a,rects:n,platform:o,elements:i}=t,{apply:r=(()=>{}),...s}=xu(e,t),l=await Du(t,s),c=ku(a),d=Cu(a),u="y"===Su(a),{width:h,height:m}=n.floating;let p,f;"top"===c||"bottom"===c?(p=c,f=d===(await(null==o.isRTL?void 0:o.isRTL(i.floating))?"start":"end")?"left":"right"):(f=c,p="end"===d?"top":"bottom");const g=m-l[p],y=h-l[f],_=!t.middlewareData.shift;let b=g,v=y;if(u){const e=h-l.left-l.right;v=d||_?fu(y,e):e}else{const e=m-l.top-l.bottom;b=d||_?fu(g,e):e}if(_&&!d){const e=gu(l.left,0),t=gu(l.right,0),a=gu(l.top,0),n=gu(l.bottom,0);u?v=h-2*(0!==e||0!==t?e+t:gu(l.left,l.right)):b=m-2*(0!==a||0!==n?a+n:gu(l.top,l.bottom))}await r({...t,availableWidth:v,availableHeight:b});const w=await o.getDimensions(i.floating);return h!==w.width||m!==w.height?{reset:{rects:!0}}:{}}}},ph=(e,t,a)=>{const n=new Map,o={platform:dh,...a},i={...o.platform,_c:n};return(async(e,t,a)=>{const{placement:n="bottom",strategy:o="absolute",middleware:i=[],platform:r}=a,s=i.filter(Boolean),l=await(null==r.isRTL?void 0:r.isRTL(t));let c=await r.getElementRects({reference:e,floating:t,strategy:o}),{x:d,y:u}=Tu(c,n,l),h=n,m={},p=0;for(let f=0;f<s.length;f++){const{name:a,fn:i}=s[f],{x:g,y:y,data:_,reset:b}=await i({x:d,y:u,initialPlacement:n,placement:h,strategy:o,middlewareData:m,rects:c,platform:r,elements:{reference:e,floating:t}});d=null!=g?g:d,u=null!=y?y:u,m={...m,[a]:{...m[a],..._}},b&&p<=50&&(p++,"object"===typeof b&&(b.placement&&(h=b.placement),b.rects&&(c=!0===b.rects?await r.getElementRects({reference:e,floating:t,strategy:o}):b.rects),({x:d,y:u}=Tu(c,h,l))),f=-1)}return{x:d,y:u,placement:h,strategy:o,middlewareData:m}})(e,t,{...o,platform:i})};var fh="undefined"!==typeof document?t.useLayoutEffect:t.useEffect;function gh(e,t){if(e===t)return!0;if(typeof e!==typeof t)return!1;if("function"===typeof e&&e.toString()===t.toString())return!0;let a,n,o;if(e&&t&&"object"===typeof e){if(Array.isArray(e)){if(a=e.length,a!==t.length)return!1;for(n=a;0!==n--;)if(!gh(e[n],t[n]))return!1;return!0}if(o=Object.keys(e),a=o.length,a!==Object.keys(t).length)return!1;for(n=a;0!==n--;)if(!{}.hasOwnProperty.call(t,o[n]))return!1;for(n=a;0!==n--;){const a=o[n];if(("_owner"!==a||!e.$$typeof)&&!gh(e[a],t[a]))return!1}return!0}return e!==e&&t!==t}function yh(e){if("undefined"===typeof window)return 1;return(e.ownerDocument.defaultView||window).devicePixelRatio||1}function _h(e,t){const a=yh(e);return Math.round(t*a)/a}function bh(e){const a=t.useRef(e);return fh((()=>{a.current=e})),a}const vh=(e,t)=>({...hh(e),options:[e,t]}),wh=(e,t)=>({...mh(e),options:[e,t]});function xh(e){var t=[];return e.flip&&t.push(vh()),"right"!==e.align&&"left"!==e.align&&t.push(wh({apply:function(e){var t=e.rects,a=e.elements;Object.assign(a.floating.style,{width:"".concat(t.reference.width,"px")})}})),t}function kh(e){var t="right"===e.align?"end":"start",a=e.dropup?"top":"bottom";return"".concat(a,"-").concat(t)}var Ch=function(e,a){var n=pu((0,t.useState)(null),2),o=n[0],i=n[1],r=function(e){void 0===e&&(e={});const{placement:a="bottom",strategy:n="absolute",middleware:o=[],platform:i,elements:{reference:r,floating:s}={},transform:l=!0,whileElementsMounted:c,open:d}=e,[u,h]=t.useState({x:0,y:0,strategy:n,placement:a,middlewareData:{},isPositioned:!1}),[m,p]=t.useState(o);gh(m,o)||p(o);const[f,g]=t.useState(null),[y,_]=t.useState(null),b=t.useCallback((e=>{e!==k.current&&(k.current=e,g(e))}),[]),v=t.useCallback((e=>{e!==C.current&&(C.current=e,_(e))}),[]),w=r||f,x=s||y,k=t.useRef(null),C=t.useRef(null),j=t.useRef(u),S=null!=c,I=bh(c),A=bh(i),N=bh(d),E=t.useCallback((()=>{if(!k.current||!C.current)return;const e={placement:a,strategy:n,middleware:m};A.current&&(e.platform=A.current),ph(k.current,C.current,e).then((e=>{const t={...e,isPositioned:!1!==N.current};T.current&&!gh(j.current,t)&&(j.current=t,Ut.flushSync((()=>{h(t)})))}))}),[m,a,n,A,N]);fh((()=>{!1===d&&j.current.isPositioned&&(j.current.isPositioned=!1,h((e=>({...e,isPositioned:!1}))))}),[d]);const T=t.useRef(!1);fh((()=>(T.current=!0,()=>{T.current=!1})),[]),fh((()=>{if(w&&(k.current=w),x&&(C.current=x),w&&x){if(I.current)return I.current(w,x,E);E()}}),[w,x,E,I,S]);const D=t.useMemo((()=>({reference:k,floating:C,setReference:b,setFloating:v})),[b,v]),R=t.useMemo((()=>({reference:w,floating:x})),[w,x]),M=t.useMemo((()=>{const e={position:n,left:0,top:0};if(!R.floating)return e;const t=_h(R.floating,u.x),a=_h(R.floating,u.y);return l?{...e,transform:"translate("+t+"px, "+a+"px)",...yh(R.floating)>=1.5&&{willChange:"transform"}}:{position:n,left:t,top:a}}),[n,l,R.floating,u.x,u.y]);return t.useMemo((()=>({...u,update:E,refs:D,elements:R,floatingStyles:M})),[u,E,D,R,M])}({elements:{floating:o,reference:e},middleware:xh(a),placement:kh(a),strategy:a.positionFixed?"fixed":"absolute",whileElementsMounted:uh});return{innerRef:i,style:r.floatingStyles}},jh=["referenceElement","isMenuShown"],Sh="undefined"===typeof Element?Gc:Element,Ih={align:Un().oneOf(["justify","left","right"]),children:Un().func.isRequired,dropup:Un().bool,flip:Un().bool,isMenuShown:Un().bool,positionFixed:Un().bool,referenceElement:Un().instanceOf(Sh)},Ah=function(e){var t=e.referenceElement,a=e.isMenuShown,n=od(e,jh),o=Ch(t,n);return a?n.children(o):null};Ah.propTypes=Ih;var Nh=Ah,Eh=a(5345);var Th=function(e,a){var n=(0,t.useRef)(null);return(0,Eh.A)(n,e,a),n},Dh=["children","onRootClose"];var Rh=function(e){var t=e.children,a=e.onRootClose,n=od(e,Dh);return t(Th(a,n))},Mh=["onBlur","onClick","onFocus","onRemove","option"];function Oh(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function qh(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?Oh(Object(a),!0).forEach((function(t){Ec(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):Oh(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}Un().func,Un().func,Un().func,Un().func,Sd.isRequired;function Gh(e){var a=e.onBlur,n=e.onClick,o=e.onFocus,i=e.onRemove,r=e.option,s=od(e,Mh),l=pu((0,t.useState)(!1),2),c=l[0],d=l[1],u=function(e){d(!1),a&&a(e)},h=function(){i&&i(r)},m=Th(u,qh(qh({},s),{},{disabled:!c}));return{active:c,onBlur:u,onClick:function(e){d(!0),n&&n(e)},onFocus:function(e){d(!0),o&&o(e)},onKeyDown:function(e){"Backspace"===e.key&&c&&(e.preventDefault(),h())},onRemove:Oc(i)?h:void 0,ref:m}}var Ph=["active","children","className","onRemove","tabIndex"],Fh=["children","option","readOnly"],Lh=["ref"];function Wh(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function Bh(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?Wh(Object(a),!0).forEach((function(t){Ec(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):Wh(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}var Hh=(0,t.forwardRef)((function(e,a){var n=e.active,o=e.children,i=e.className,r=e.onRemove,s=e.tabIndex,l=od(e,Ph);return t.createElement("div",(0,Od.A)({},l,{className:si()("rbt-token","rbt-token-removeable",{"rbt-token-active":!!n},i),ref:a,tabIndex:s||0}),o,t.createElement(cu,{className:"rbt-token-remove-button",label:"Remove",onClick:r,tabIndex:-1}))})),Uh=function(e){var a=e.children,n=e.className,o=e.disabled,i=e.href,r=si()("rbt-token",{"rbt-token-disabled":o},n);return i&&!o?t.createElement("a",{className:r,href:i},a):t.createElement("div",{className:r},a)},Kh=function(e){var a=e.children,n=e.option,o=e.readOnly,i=od(e,Fh),r=Gh(Bh(Bh({},i),{},{option:n})),s=r.ref,l=od(r,Lh),c=t.createElement("div",{className:"rbt-token-label"},a);return i.disabled||o||!Oc(l.onRemove)?t.createElement(Uh,i,c):t.createElement(Hh,(0,Od.A)({},i,l,{ref:s}),c)};function zh(e,t){var a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return a&&(a=a.replace(a[0],a[0].toUpperCase())),["Top","Right","Bottom","Left"].map((function(n){return e["".concat(t).concat(n).concat(a)]})).join(" ")}var Vh=function(){var e=Pd(),a=e.hintText,n=e.inputNode,o=(0,t.useRef)(null);return(0,t.useEffect)((function(){var e=function(){o.current&&n&&(o.current.scrollLeft=n.scrollLeft)};return null===n||void 0===n||n.addEventListener("scroll",e),function(){null===n||void 0===n||n.removeEventListener("scroll",e)}}),[n]),(0,t.useEffect)((function(){n&&o.current&&function(e,t){var a=window.getComputedStyle(e);t.style.borderStyle=zh(a,"border","style"),t.style.borderWidth=zh(a,"border","width"),t.style.fontSize=a.fontSize,t.style.fontWeight=a.fontWeight,t.style.height=a.height,t.style.lineHeight=a.lineHeight,t.style.margin=zh(a,"margin"),t.style.padding=zh(a,"padding")}(n,o.current)})),{hintRef:o,hintText:a}},Yh=function(e){var a=e.children,n=e.className,o=Vh(),i=o.hintRef,r=o.hintText;return t.createElement("div",{className:n,style:{display:"flex",flex:1,height:"100%",position:"relative"}},a,t.createElement("input",{"aria-hidden":!0,className:"rbt-input-hint",ref:i,readOnly:!0,style:{backgroundColor:"transparent",borderColor:"transparent",boxShadow:"none",color:"rgba(0, 0, 0, 0.54)",left:0,pointerEvents:"none",position:"absolute",top:0,width:"100%"},tabIndex:-1,value:r}))},Jh=(0,t.forwardRef)((function(e,a){return t.createElement("input",(0,Od.A)({},e,{className:si()("rbt-input-main",e.className),ref:a}))})),$h=["children","className","inputClassName","inputRef","referenceElementRef","selected"];var Zh=function(e){var a=t.useRef(null),n=t.useRef(null),o=wd(e),i=o.children,r=o.className,s=o.inputClassName,l=(o.inputRef,o.referenceElementRef),c=o.selected,d=od(o,$h);function u(t){if(e.disabled)t.currentTarget.blur();else{var a=n.current;!a||t.currentTarget.contains(t.target)&&t.currentTarget!==t.target||(Qc(a)&&(a.selectionStart=a.value.length),a.focus())}}return t.createElement("div",{className:si()("rbt-input-multi",{disabled:e.disabled},r),onClick:u,onFocus:u,ref:l,tabIndex:-1},t.createElement("div",{className:"rbt-input-wrapper",ref:a},i,t.createElement(Yh,null,t.createElement(Jh,(0,Od.A)({},d,{className:s,onKeyDown:function(t){if("Backspace"===t.key&&c.length&&!e.value){var n;t.preventDefault();var o=null===(n=a.current)||void 0===n?void 0:n.children;if(null!==o&&void 0!==o&&o.length){var i=o[o.length-2];null===i||void 0===i||i.focus()}}e.onKeyDown&&e.onKeyDown(t)},ref:function(t){n.current=t,e.inputRef(t)},style:{backgroundColor:"transparent",border:0,boxShadow:"none",cursor:"inherit",outline:"none",padding:0,width:"100%",zIndex:1}})))))},Qh=["inputRef","referenceElementRef"],Xh=function(e){var a=e.inputRef,n=e.referenceElementRef,o=od(e,Qh);return t.createElement(Yh,null,t.createElement(Jh,(0,Od.A)({},wd(o),{ref:function(e){a(e),n(e)}})))},em={children:Un().string.isRequired,highlightClassName:Un().string,search:Un().string.isRequired},tm=function(e){var a=e.children,n=e.highlightClassName,o=void 0===n?"rbt-highlight-text":n,i=e.search;if(!i||!a)return t.createElement(t.Fragment,null,a);for(var r=0,s=a,l=[];s;){var c=td(s,i);if(!c){l.push(s);break}var d=s.slice(0,c.start);d&&l.push(d);var u=s.slice(c.start,c.end);l.push(t.createElement("mark",{className:o,key:r},u)),r+=1,s=s.slice(c.end)}return t.createElement(t.Fragment,null,l)};tm.propTypes=em;var am=tm;const nm=e=>"object"==typeof e&&null!=e&&1===e.nodeType,om=(e,t)=>(!t||"hidden"!==e)&&"visible"!==e&&"clip"!==e,im=(e,t)=>{if(e.clientHeight<e.scrollHeight||e.clientWidth<e.scrollWidth){const a=getComputedStyle(e,null);return om(a.overflowY,t)||om(a.overflowX,t)||(e=>{const t=(e=>{if(!e.ownerDocument||!e.ownerDocument.defaultView)return null;try{return e.ownerDocument.defaultView.frameElement}catch(e){return null}})(e);return!!t&&(t.clientHeight<e.scrollHeight||t.clientWidth<e.scrollWidth)})(e)}return!1},rm=(e,t,a,n,o,i,r,s)=>i<e&&r>t||i>e&&r<t?0:i<=e&&s<=a||r>=t&&s>=a?i-e-n:r>t&&s<a||i<e&&s>a?r-t+o:0,sm=e=>{const t=e.parentElement;return null==t?e.getRootNode().host||null:t},lm=(e,t)=>{var a,n,o,i;if("undefined"==typeof document)return[];const{scrollMode:r,block:s,inline:l,boundary:c,skipOverflowHiddenElements:d}=t,u="function"==typeof c?c:e=>e!==c;if(!nm(e))throw new TypeError("Invalid target");const h=document.scrollingElement||document.documentElement,m=[];let p=e;for(;nm(p)&&u(p);){if(p=sm(p),p===h){m.push(p);break}null!=p&&p===document.body&&im(p)&&!im(document.documentElement)||null!=p&&im(p,d)&&m.push(p)}const f=null!=(n=null==(a=window.visualViewport)?void 0:a.width)?n:innerWidth,g=null!=(i=null==(o=window.visualViewport)?void 0:o.height)?i:innerHeight,{scrollX:y,scrollY:_}=window,{height:b,width:v,top:w,right:x,bottom:k,left:C}=e.getBoundingClientRect(),{top:j,right:S,bottom:I,left:A}=(e=>{const t=window.getComputedStyle(e);return{top:parseFloat(t.scrollMarginTop)||0,right:parseFloat(t.scrollMarginRight)||0,bottom:parseFloat(t.scrollMarginBottom)||0,left:parseFloat(t.scrollMarginLeft)||0}})(e);let N="start"===s||"nearest"===s?w-j:"end"===s?k+I:w+b/2-j+I,E="center"===l?C+v/2-A+S:"end"===l?x+S:C-A;const T=[];for(let D=0;D<m.length;D++){const e=m[D],{height:t,width:a,top:n,right:o,bottom:i,left:c}=e.getBoundingClientRect();if("if-needed"===r&&w>=0&&C>=0&&k<=g&&x<=f&&(e===h&&!im(e)||w>=n&&k<=i&&C>=c&&x<=o))return T;const d=getComputedStyle(e),u=parseInt(d.borderLeftWidth,10),p=parseInt(d.borderTopWidth,10),j=parseInt(d.borderRightWidth,10),S=parseInt(d.borderBottomWidth,10);let I=0,A=0;const R="offsetWidth"in e?e.offsetWidth-e.clientWidth-u-j:0,M="offsetHeight"in e?e.offsetHeight-e.clientHeight-p-S:0,O="offsetWidth"in e?0===e.offsetWidth?0:a/e.offsetWidth:0,q="offsetHeight"in e?0===e.offsetHeight?0:t/e.offsetHeight:0;if(h===e)I="start"===s?N:"end"===s?N-g:"nearest"===s?rm(_,_+g,g,p,S,_+N,_+N+b,b):N-g/2,A="start"===l?E:"center"===l?E-f/2:"end"===l?E-f:rm(y,y+f,f,u,j,y+E,y+E+v,v),I=Math.max(0,I+_),A=Math.max(0,A+y);else{I="start"===s?N-n-p:"end"===s?N-i+S+M:"nearest"===s?rm(n,i,t,p,S+M,N,N+b,b):N-(n+t/2)+M/2,A="start"===l?E-c-u:"center"===l?E-(c+a/2)+R/2:"end"===l?E-o+j+R:rm(c,o,a,u,j+R,E,E+v,v);const{scrollLeft:r,scrollTop:d}=e;I=0===q?0:Math.max(0,Math.min(d+I/q,e.scrollHeight-t/q+M)),A=0===O?0:Math.max(0,Math.min(r+A/O,e.scrollWidth-a/O+R)),N+=d-I,E+=r-A}T.push({el:e,top:I,left:A})}return T},cm=e=>!1===e?{block:"end",inline:"nearest"}:(e=>e===Object(e)&&0!==Object.keys(e).length)(e)?e:{block:"start",inline:"nearest"};var dm=["label","onClick","option","position"];function um(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function hm(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?um(Object(a),!0).forEach((function(t){Ec(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):um(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}Sd.isRequired,Un().number;function mm(e){var a=e.label,n=e.onClick,o=e.option,i=e.position,r=od(e,dm),s=Pd(),l=s.activeIndex,c=s.id,d=s.isOnlyResult,u=s.onActiveItemChange,h=s.onInitialItemChange,m=s.onMenuItemClick,p=s.setItem,f=(0,t.useRef)(null);(0,t.useEffect)((function(){0===i&&h(o)})),(0,t.useEffect)((function(){if(i===l){u(o);var e=f.current;e&&function(e,t){if(!e.isConnected||!(e=>{let t=e;for(;t&&t.parentNode;){if(t.parentNode===document)return!0;t=t.parentNode instanceof ShadowRoot?t.parentNode.host:t.parentNode}return!1})(e))return;const a=(e=>{const t=window.getComputedStyle(e);return{top:parseFloat(t.scrollMarginTop)||0,right:parseFloat(t.scrollMarginRight)||0,bottom:parseFloat(t.scrollMarginBottom)||0,left:parseFloat(t.scrollMarginLeft)||0}})(e);if((e=>"object"==typeof e&&"function"==typeof e.behavior)(t))return t.behavior(lm(e,t));const n="boolean"==typeof t||null==t?void 0:t.behavior;for(const{el:o,top:i,left:r}of lm(e,cm(t))){const e=i-a.top+a.bottom,t=r-a.left+a.right;o.scroll({top:e,left:t,behavior:n})}}(e,{boundary:e.parentNode,scrollMode:"if-needed"})}}),[l,u,o,i]);var g=(0,t.useCallback)((function(e){m(o,e),n&&n(e)}),[n,m,o]),y=d||l===i;return p(o,i),hm(hm({},r),{},{active:y,"aria-label":a,"aria-selected":y,id:id(c,i),onClick:g,onMouseDown:fd,ref:f,role:"option"})}var pm=["active","children","className","disabled","onClick"],fm=(0,t.forwardRef)((function(e,a){var n=e.active,o=e.children,i=e.className,r=e.disabled,s=e.onClick,l=od(e,pm);return t.createElement("a",(0,Od.A)({},l,{className:si()("dropdown-item",{active:n,disabled:r},i),href:l.href||"#",onClick:function(e){e.preventDefault(),!r&&s&&s(e)},ref:a}),o)}));function gm(e){return t.createElement(fm,mm(e))}var ym=["emptyLabel","innerRef","maxHeight","style"];function _m(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function bm(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?_m(Object(a),!0).forEach((function(t){Ec(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):_m(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}var vm={"aria-label":Un().string,emptyLabel:Un().node,id:Cd(Un().oneOfType([Un().number,Un().string]),jd),maxHeight:Un().string},wm=function(e){var a=e.emptyLabel,n=void 0===a?"No matches found.":a,o=e.innerRef,i=e.maxHeight,r=void 0===i?"300px":i,s=e.style,l=od(e,ym),c=0===t.Children.count(l.children)?t.createElement(fm,{disabled:!0,role:"option"},n):l.children;return t.createElement("div",(0,Od.A)({},l,{"aria-label":l["aria-label"]||"menu-options",className:si()("rbt-menu","dropdown-menu","show",l.className),onMouseDown:fd,ref:o,role:"listbox",style:bm(bm({},s),{},{display:"block",maxHeight:r,overflow:"auto"})}),c)};wm.propTypes=vm,wm.Divider=function(){return t.createElement("div",{className:"dropdown-divider",role:"separator"})},wm.Header=function(e){return t.createElement("div",(0,Od.A)({},e,{className:"dropdown-header",role:"heading"}))};var xm=wm,km=["labelKey","newSelectionPrefix","options","paginationText","renderMenuItemChildren","text"],Cm={newSelectionPrefix:Un().node,paginationText:Un().node,renderMenuItemChildren:Un().func};function jm(e,a){return t.createElement(am,{search:a.text},Fc(e,a.labelKey))}var Sm=function(e){var a=e.labelKey,n=e.newSelectionPrefix,o=void 0===n?"New selection: ":n,i=e.options,r=e.paginationText,s=void 0===r?"Display additional results...":r,l=e.renderMenuItemChildren,c=void 0===l?jm:l,d=e.text,u=od(e,km);return t.createElement(xm,(0,Od.A)({},u,{key:d}),i.map((function(n,i){var r=Fc(n,a),l={disabled:!!Hc(n,"disabled"),label:r,option:n,position:i};return Hc(n,"customOption")?t.createElement(gm,(0,Od.A)({},l,{className:"rbt-menu-custom-option",key:i,label:r}),o,t.createElement(am,{search:d},r)):Hc(n,"paginationOption")?t.createElement(t.Fragment,{key:"pagination-option-divider"},t.createElement(xm.Divider,null),t.createElement(gm,(0,Od.A)({},l,{className:"rbt-menu-pagination-option",label:qc(s)?s:""}),s)):t.createElement(gm,(0,Od.A)({},l,{key:i}),c(n,e,i))})))};Sm.propTypes=Cm;var Im=Sm;function Am(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function Nm(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?Am(Object(a),!0).forEach((function(t){Ec(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):Am(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function Em(e){var t=function(){if("undefined"===typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"===typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(xC){return!1}}();return function(){var a,n=Md(e);if(t){var o=Md(this).constructor;a=Reflect.construct(n,arguments,o)}else a=n.apply(this,arguments);return Rd(this,a)}}var Tm={clearButton:Un().bool,inputProps:Cd(Un().object,(function(e){var t=e.inputProps;t&&"[object Object]"===Object.prototype.toString.call(t)&&xd.forEach((function(e){var a=e.alt,n=e.prop,o=a?" Use the top-level `".concat(a,"` prop instead."):null;Jc(!t[n],"The `".concat(n,"` property of `inputProps` will be ignored.").concat(o))}))})),isInvalid:Un().bool,isLoading:Un().bool,isValid:Un().bool,renderInput:Un().func,renderMenu:Un().func,renderToken:Un().func,size:kd},Dm=function(e,a,n){return t.createElement(Im,(0,Od.A)({},a,{labelKey:n.labelKey,options:e,text:n.text}))},Rm=function(e,a,n){return t.createElement(Kh,{disabled:a.disabled,key:n,onRemove:a.onRemove,option:e,tabIndex:a.tabIndex},Fc(e,a.labelKey))},Mm=["align","dropup","flip","positionFixed"];var Om=function(e){Dd(n,e);var a=Em(n);function n(){var e;Id(this,n);for(var o=arguments.length,i=new Array(o),r=0;r<o;r++)i[r]=arguments[r];return Ec(Ed(e=a.call.apply(a,[this].concat(i))),"_referenceElement",null),Ec(Ed(e),"referenceElementRef",(function(t){e._referenceElement=t})),Ec(Ed(e),"_renderInput",(function(a,n){var o=e.props,i=o.isInvalid,r=o.isValid,s=o.multiple,l=o.renderInput,c=o.renderToken,d=o.size;if(Oc(l))return l(a,n);var u=Nm(Nm({},a),{},{isInvalid:i,isValid:r,size:d});if(!s)return t.createElement(Xh,u);var h=n.labelKey,m=n.onRemove,p=n.selected;return t.createElement(Zh,(0,Od.A)({},u,{placeholder:p.length?"":a.placeholder,selected:p}),p.map((function(e,t){return(c||Rm)(e,Nm(Nm({},u),{},{labelKey:h,onRemove:m}),t)})))})),Ec(Ed(e),"_renderMenu",(function(t,a,n){var o=e.props,i=o.emptyLabel,r=o.id,s=o.maxHeight,l=o.newSelectionPrefix,c=o.paginationText,d=o.renderMenu,u=o.renderMenuItemChildren;return(d||Dm)(t,Nm(Nm({},a),{},{emptyLabel:i,id:r,maxHeight:s,newSelectionPrefix:l,paginationText:c,renderMenuItemChildren:u}),n)})),Ec(Ed(e),"_renderAux",(function(a){var n,o=a.onClear,i=a.selected,r=e.props,s=r.clearButton,l=r.disabled,c=r.isLoading,d=r.size;return c?n=t.createElement(hu,null):s&&!l&&i.length&&(n=t.createElement(cu,{onClick:o,onMouseDown:fd,size:d})),n?t.createElement("div",{className:si()("rbt-aux",{"rbt-aux-lg":gd(d)})},n):null})),e}return Nd(n,[{key:"render",value:function(){var e=this,a=this.props,n=a.children,o=a.className,i=a.instanceRef,r=a.open,s=a.options,l=a.style;return t.createElement(iu,(0,Od.A)({},this.props,{options:s,ref:i}),(function(a){var i=a.hideMenu,s=a.isMenuShown,c=a.results,d=e._renderAux(a);return t.createElement(Rh,{disabled:r||!s,onRootClose:i},(function(i){return t.createElement("div",{className:si()("rbt",{"has-aux":!!d,"is-invalid":e.props.isInvalid,"is-valid":e.props.isValid},o),ref:i,style:Nm(Nm({},l),{},{outline:"none",position:"relative"}),tabIndex:-1},e._renderInput(Nm(Nm({},a.getInputProps(e.props.inputProps)),{},{referenceElementRef:e.referenceElementRef}),a),t.createElement(Nh,(0,Od.A)({},function(e){return Pc(e,Mm)}(e.props),{isMenuShown:s,referenceElement:e._referenceElement}),(function(t){return e._renderMenu(c,t,a)})),d,Oc(n)?n(a):n)}))}))}}]),n}(t.Component);Ec(Om,"propTypes",Tm),Ec(Om,"defaultProps",{isLoading:!1});var qm=(0,t.forwardRef)((function(e,a){return t.createElement(Om,(0,Od.A)({},e,{instanceRef:a}))}));const Gm=t.forwardRef(((e,t)=>{let{className:a,bsPrefix:n,as:o="span",...i}=e;return n=(0,hi.oU)(n,"input-group-text"),(0,Dn.jsx)(o,{ref:t,className:si()(a,n),...i})}));Gm.displayName="InputGroupText";var Pm=Gm;const Fm=t.forwardRef(((e,a)=>{let{bsPrefix:n,size:o,hasValidation:i,className:r,as:s="div",...l}=e;n=(0,hi.oU)(n,"input-group");const c=(0,t.useMemo)((()=>({})),[]);return(0,Dn.jsx)(Qr.Provider,{value:c,children:(0,Dn.jsx)(s,{ref:a,...l,className:si()(r,n,o&&`${n}-${o}`,i&&"has-validation")})})}));Fm.displayName="InputGroup";var Lm=Object.assign(Fm,{Text:Pm,Radio:e=>(0,Dn.jsx)(Pm,{children:(0,Dn.jsx)(pi,{type:"radio",...e})}),Checkbox:e=>(0,Dn.jsx)(Pm,{children:(0,Dn.jsx)(pi,{type:"checkbox",...e})})});var Wm=e=>{const a=e.controller,n=a.FilterManager,o=e.runfunction,i=jc[a.TypeName],[r,s]=(0,t.useState)(i.textboxOptions(a)),[l,c]=(0,t.useState)(!1);function d(e,t){e.Val=t}return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with FilterBox.tsx"}),children:void 0==i.hidefilter&&(0,Dn.jsxs)("div",{className:"FilterBox",children:[n.ReturnTextFilters().filter((e=>"name"==e.Group)).map((e=>{return(0,Dn.jsx)(t.Fragment,{children:(a=e,(0,Dn.jsx)("div",{className:"ReturnTextFilterParam",children:(0,Dn.jsxs)(Lm,{children:[(0,Dn.jsx)(qm,{id:"basic-typeahead-single",labelKey:"name",onInputChange:e=>d(a,e),options:r,placeholder:a.Val,selected:[],onChange:e=>{e.length>0&&(d(a,e[0].toString()),o(),setTimeout((()=>{const e=document.querySelector('.rbt input[type="text"]');null===e||void 0===e||e.blur()}),0))},onKeyDown:e=>{"Enter"===e.key&&o()}}),(0,Dn.jsx)(ss.A,{variant:"secondary",className:"search-btn",onClick:()=>{d(a,""),o()},children:(0,Dn.jsx)(Gn.g,{icon:Pn.yYc,className:""})})]})}))},e.Group);var a})),(0,Dn.jsx)(hl.A,{headline:"Filters",headlineIcon:Pn.mRM,content:(0,Dn.jsxs)("div",{className:"ReturnFilterBoxInner",children:[i.returnFilterSelect(n,o,o),(0,Dn.jsx)(ss.A,{variant:"primary",onClick:o,children:"Apply Filter"})]})})]})})};var Bm=e=>{const a=e.controller,{category:n}=(0,zt.g)(),o=a.Collection,i=jc[a.TypeName],r=(0,zt.zy)().pathname.split("/");const[s,l]=(0,t.useState)([]),[c,d]=(0,t.useState)(!1),[u,h]=(0,t.useState)(0),[m,p]=(0,t.useState)("Loading");async function f(){await a.updateSearch(),l(o.ReturnItems()),h(u+1)}function g(){return"Weapons & Equipment"==i.titlename&&r.length>3?(0,za.h8)(r[3]):i.titlename}return(0,t.useEffect)((()=>{!async function(){if(i.categoryparam&&void 0!=n){const e=n;a.FilterManager.ResetFilters();let t=!1;for(let n=0;n<a.FilterManager.MiscOptions.length;n++){const o=a.FilterManager.MiscOptions[n];o.Group==i.categoryparam&&o.Name==e&&(t=!0,o.DoInclude=!0,o.IsActive=!0)}t?await a.updateSearch():d(!0)}else await a.initCollection();p("No Items Found"),l(o.itemcollection),h((e=>e+1))}()}),[]),c?(0,Dn.jsx)(Yl,{}):(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with FilteredDisplayCompendium.tsx"}),children:(0,Dn.jsxs)("div",{className:"rules-content-main",children:[(0,Dn.jsx)(Jo,{title:i.titlename+" Glossary",description:"The complete Glossary for all "+g()+" in the game Trench Crusade"}),(0,Dn.jsx)("h1",{children:g()+" Glossary"}),(0,Dn.jsx)("div",{children:i.topDisplay&&(0,Dn.jsx)("div",{children:i.topDisplay()})}),(0,Dn.jsx)("div",{className:"FilterableCompendiumDisplay-filter",children:(0,Dn.jsx)(Wm,{controller:a,runfunction:f})}),(0,Dn.jsx)("div",{className:"spacer-20"}),(0,Dn.jsx)("div",{className:"FilterableCompendiumDisplay-items",children:(0,Dn.jsx)("div",{className:"FilterableCompendiumDisplay",children:(0,Dn.jsx)("div",{className:"filter-items-wrap",children:s.map((e=>(0,Dn.jsx)("div",{className:"filter-item",children:(0,Dn.jsx)(Dn.Fragment,{children:i.returnDisplay(e.HeldItem)})},e.HeldItem.ID)))})})},u)]})})};var Hm=e=>{let{data:a,level:n=0,onNavigate:o,parentPath:i="compendium"}=e;const r=(0,zt.zy)().pathname;async function s(e){const t=[];e.children&&t.push(...e.children);const n=await async function(e){const t=[];if(e.controller){const n=jc[e.controller.TypeName];1==n.menushowitems&&await e.controller.initCollection();const o={},i=e.controller.Collection.itemcollection;for(let e=0;e<i.length;e++){const r=i[e];if(null==a.order||!r.HeldItem.Tags||!r.HeldItem.Tags.order||a.order.includes(r.HeldItem.Tags.order))if("warbands"==n.searchId){const e=[];for(let t=0;t<r.HeldItem.SubModelsList.length;t++)if("base"!=r.HeldItem.SubModelsList[t].var_name){const a=r.HeldItem.SubModelsList[t].faction;0==e.filter((e=>e.slug==a.GetURL())).length&&e.push({title:void 0!=a.Name?a.Name:"",slug:a.GetURL()})}0==t.filter((e=>e.slug==r.HeldItem.GetURL())).length&&t.push({title:r.HeldItem.Name,slug:r.HeldItem.GetURL(),children:e})}else{let e=!1;r.HeldItem.Tags&&r.HeldItem.Tags.fin_order&&(void 0==o[r.HeldItem.Tags.fin_order]?o[r.HeldItem.Tags.fin_order]=[r]:o[r.HeldItem.Tags.fin_order].push(r),e=!0),e||0==t.filter((e=>e.slug==r.HeldItem.GetURL())).length&&t.push({title:r.HeldItem.Name,slug:r.HeldItem.GetURL()})}}Object.keys(o).forEach((e=>{const a=o[e],n={},i=[];for(let t=0;t<a.length;t++){let e=!1;a[t].HeldItem.Tags&&a[t].HeldItem.Tags.fin_sub_order&&(void 0==n[a[t].HeldItem.Tags.fin_sub_order]?n[a[t].HeldItem.Tags.fin_sub_order]=[a[t]]:n[a[t].HeldItem.Tags.fin_sub_order].push(a[t]),e=!0),e||i.push({title:a[t].HeldItem.Name,slug:a[t].HeldItem.GetURL()})}Object.keys(n).forEach((e=>{const t=n[e],a=[];for(let n=0;n<t.length;n++)a.push({title:t[n].HeldItem.Name,slug:t[n].HeldItem.GetURL()});i.push({title:(0,za.h8)(e),slug:e,children:a})})),t.push({title:(0,za.h8)(e),slug:e,children:i})}))}else"armoury"==e.slug&&(t.push({title:"Ranged Weapons",slug:"ranged"}),t.push({title:"Melee Weapons",slug:"melee"}),t.push({title:"Armour",slug:"armour"}),t.push({title:"Equipment",slug:"equipment"}));return t}(e);return t.push(...n),e.subchildren&&t.push(...e.subchildren),v(t),t}const[l,c]=(0,t.useState)({}),d=(0,zt.Zp)();const u=l[a.slug]||1==a.open,h=void 0!=a.superslug?a.superslug:""!=a.slug?`${i}/${a.slug}`:`${i}`,m=""!=a.slug?`${i}/${a.slug}`:`${i}`,p=(0,zt.zy)(),[f,g]=(0,t.useState)(!1),[y,_]=(0,t.useState)(0),[b,v]=(0,t.useState)([]);return(0,t.useEffect)((()=>{g(r.substring(1)==h),r.substring(1).includes(h)?(c((e=>({...e,[a.slug]:!0}))),_(y+1)):c((e=>({...e,[a.slug]:!1})))}),[p]),(0,t.useEffect)((()=>{!async function(){await s(a),_(y+1)}()}),[]),(0,Dn.jsxs)("li",{className:"menu-list-item "+(a.children?"has-children":""),children:[(0,Dn.jsx)("div",{className:"menu-list-item-anchor-wrap",children:(0,Dn.jsx)(yn.A,{link:`/${h}`,runfunc:()=>{d(`/${h}`,{state:Date.now().toString()}),o&&o()},classes:1==f?"current":"",children:a.title})}),(0,Dn.jsx)("div",{children:(a.children&&a.children.length>0||b.length>0)&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("span",{className:"collapse-chevron-wrap",onClick:()=>{return e=a.slug,void c((t=>({...t,[e]:!t[e]})));var e},children:(0,Dn.jsx)(Gn.g,{icon:u?Pn.w2A:Pn.Jt$})}),(0,Dn.jsx)(ll.A,{in:u,children:(0,Dn.jsx)("div",{children:(0,Dn.jsx)(Um,{data:b,level:n+1,parentPath:m,onNavigate:o})})})]})})]},a.slug)};var Um=e=>{let{data:t,level:a=0,onNavigate:n,parentPath:o="compendium"}=e;(0,zt.Zp)();return(0,Dn.jsx)("ul",{className:`menu-list level-${a}`,children:t.map(((e,t)=>(0,Dn.jsx)(Hm,{data:e,level:a,parentPath:o,onNavigate:n},t)))})};var Km=e=>{let{controller:a,onBack:n,onNavigate:o}=e;const i=(0,zt.Zp)();const[r,s]=(0,t.useState)([{title:"Core Rules",slug:"core-rules",controller:a.GameRulesCollectionController,order:["introduction","core"]},{title:"Warbands",slug:"warbands",controller:a.FactionCollectionController,children:[{title:"Starting a Warband",slug:"starting-a-warband",controller:a.GameRulesCollectionController,order:["starting_a_warband"]}]},{title:"Comprehensive Rules",slug:"comprehensive-rules",controller:a.GameRulesCollectionController,order:["comprehensive"],subchildren:[{title:"Keywords Glossary",slug:"keyword"},{title:"Units / Models Glossary",slug:"model"}]},{title:"Battlekit",slug:"battlekit",children:[{title:"Ranged Weapons",slug:"ranged"},{title:"Grenades",slug:"grenade"},{title:"Melee Weapons",slug:"melee"},{title:"Armour",slug:"armour"},{title:"Shields",slug:"shield"},{title:"Equipment",slug:"equipment"},{title:"Special Battlekit",slug:"special"}]},{title:"Campaigns",slug:"campaigns",children:[{title:"Campaign Rules",slug:"campaign-rules",controller:a.CampaignRulesCollectionController},{title:"Patrons",slug:"patrons",controller:a.PatronCollectionController},{title:"Exploration Locations",slug:"exploration-locations",controller:a.ExplorationTableCollectionController},{title:"Skills",slug:"skills"},{title:"Injuries",slug:"injury"}]},{title:"Scenarios",slug:"scenarios",controller:a.ScenarioCollectionController,children:[{title:"Rules",slug:"rules",controller:a.GameRulesCollectionController,order:["scenarios"]},{title:"Random Scenario",slug:"random"}]},{title:"Errata & FAQ",slug:"errata-faq",controller:a.ErrataRulesCollectionController}]);return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with RulesMenuBody.tsx"}),children:(0,Dn.jsxs)("div",{className:"RulesMenuBody menu-body",children:[(0,Dn.jsxs)("div",{className:"rules-menu-header",children:[n&&(0,Dn.jsx)("div",{onClick:n,className:"home-link",children:(0,Dn.jsx)(Gn.g,{icon:Pn.Wzs})}),!n&&(0,Dn.jsx)(yn.A,{link:"/compendium",runfunc:()=>{i("/",{state:Date.now().toString()})},classes:"home-link",children:(0,Dn.jsx)(Gn.g,{icon:Pn.Wzs})}),(0,Dn.jsx)(yn.A,{link:"/compendium",runfunc:()=>{i("/compendium"),o&&o()},classes:"compendium-link",children:"Rules Compendium"})]}),(0,Dn.jsx)("div",{children:r.map(((e,t)=>(0,Dn.jsx)(Um,{data:[e],onNavigate:o},t)))})]})})};var zm=e=>{const a=e.controller,n=a.Collection,o=jc[a.TypeName],[i,r]=(0,t.useState)([]),[s,l]=(0,t.useState)(0),[c,d]=(0,t.useState)("Loading");return(0,t.useEffect)((()=>{!async function(){await a.initCollection(),d("No Items Found"),r(n.itemcollection),l((e=>e+1))}()}),[]),(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with FilteredDisplayCompendium.tsx"}),children:(0,Dn.jsx)("div",{children:(0,Dn.jsxs)(Dn.Fragment,{children:[(void 0==i||null==i||0==i.length)&&(0,Dn.jsx)("h1",{className:"",children:c}),void 0!=i&&null!=i&&i.length>0&&(0,Dn.jsx)(Dn.Fragment,{children:o.returnDisplay(i)})]})},s)})};var Vm=()=>{(0,zt.zy)(),(0,zt.Zp)();return(0,Dn.jsxs)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with DefaultGame.tsx"}),children:[(0,Dn.jsx)(Jo,{title:"Gameplay Rules",description:"All the game rules for Trench Crusade in one place"}),(0,Dn.jsxs)("div",{className:"rules-content-main",children:[(0,Dn.jsx)("h1",{children:"Gameplay Rules"}),(0,Dn.jsx)("div",{className:"spacer-20"}),(0,Dn.jsxs)("div",{className:"row ",children:[(0,Dn.jsx)("div",{className:"col-12 col-md-6",children:(0,Dn.jsx)($o,{imageId:2845,linkUrl:"/compendium/core-rules/game-introduction",linkText:"Game Rules"})}),(0,Dn.jsx)("div",{className:"col-12 col-md-6",children:(0,Dn.jsx)($o,{imageId:162,linkUrl:"/compendium/core-rules/keyword",linkText:"Keywords"})}),(0,Dn.jsx)("div",{className:"col-12 col-md-6",children:(0,Dn.jsx)($o,{imageId:166,linkUrl:"/compendium/core-rules/model",linkText:"Units & Models"})})]})]})]})};var Ym=()=>{(0,zt.zy)(),(0,zt.Zp)();return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with DefaultGame.tsx"}),children:(0,Dn.jsxs)("div",{className:"rules-content-main",children:[(0,Dn.jsx)(Jo,{title:"Campaign Rules",description:"Here you can find the campaign rules. When in doubt consult the official campaign rules pdf."}),(0,Dn.jsx)("h1",{children:"Campaigns"}),(0,Dn.jsx)("p",{className:"",children:"These rules govern playing a series of linked games with your friends. At least 2 players are required to complete a campaign, but the more players you can muster, the better! You can also play games against players who are not part of the campaign. Rules on how to do this are explained here."}),(0,Dn.jsx)("div",{className:"spacer-20"}),(0,Dn.jsxs)("div",{className:"row ",children:[(0,Dn.jsx)("div",{className:"col-12 col-md-6",children:(0,Dn.jsx)($o,{imageId:2849,linkUrl:"/compendium/campaigns/campaign-rules",linkText:"Campaign Rules"})}),(0,Dn.jsx)("div",{className:"col-12 col-md-6",children:(0,Dn.jsx)($o,{imageId:2852,linkUrl:"/compendium/campaigns/patrons",linkText:"Patrons"})}),(0,Dn.jsx)("div",{className:"col-12 col-md-6",children:(0,Dn.jsx)($o,{imageId:2848,linkUrl:"/compendium/campaigns/exploration-locations",linkText:"Exploration"})}),(0,Dn.jsx)("div",{className:"col-12 col-md-6",children:(0,Dn.jsx)($o,{imageId:2850,linkUrl:"/compendium/campaigns/skills",linkText:"Skills"})}),(0,Dn.jsx)("div",{className:"col-12 col-md-6",children:(0,Dn.jsx)($o,{imageId:2851,linkUrl:"/compendium/campaigns/injury",linkText:"Injuries"})})]})]})})};var Jm=()=>{const e=(0,zt.Zp)(),a=(0,zt.zy)().pathname.split("/"),{state:n}=(0,zt.zy)(),[o,i]=(0,t.useState)([]);return(0,t.useEffect)((()=>{!async function(){const e=a,t=[];let n="";for(let a=1;a<e.length;a++){if(0===e[a].length)continue;n+="/",n+=e[a];let o=(0,za.ze)(e[a]);(0,za.rr)(e[a])&&(o=await(0,za.gg)(e[a])),o=o.replace(/-/g," "),t.unshift({title:o,url:n})}i(t)}()}),[n]),(0,Dn.jsx)("div",{className:"RulesBreadCrumbs",children:(0,Dn.jsx)("div",{className:"container",children:(0,Dn.jsx)("nav",{className:"RulesBreadCrumbs-inner",children:o.slice().reverse().map(((a,n,o)=>(0,Dn.jsxs)(t.Fragment,{children:[(0,Dn.jsx)(yn.A,{link:a.url,runfunc:()=>{e(`${a.url}`)},classes:"breadcrumb-item",children:a.title}),n<o.length-1&&(0,Dn.jsx)("span",{className:"breadcrumb-separator",children:" / "})]},a.url+"_"+n.toString()+"_"+a.title)))})})})},$m=a(6892);var Zm=()=>{const[e]=(0,t.useState)(function(){const e=pn.o.getInstance();return e.RandomScenarioManager=new $m.o,e.RandomScenarioManager}());const[a,n]=(0,t.useState)(0),[o,i]=(0,t.useState)(null),r=()=>{n((e=>e+1))},[s,l]=(0,t.useState)(!1),[c,d]=(0,t.useState)(""),{settings:u,updateSettings:h,loading:m,saving:p}=(0,cl.t)(),[f,g]=(0,t.useState)(!1),[y,_]=(0,t.useState)(!1),[b,v]=(0,t.useState)(!1),[w,x]=(0,t.useState)(!1),[k,C]=(0,t.useState)(!1),[j,S]=(0,t.useState)(!0),I=(0,zt.zy)(),[A,N]=(0,t.useState)(null),[E,T]=(0,t.useState)(null),[D,R]=(0,t.useState)(null),[M,O]=(0,t.useState)([null,null,null,null]),[q,G]=(0,t.useState)(null),[P,F]=(0,t.useState)(null),[L,W]=(0,t.useState)(null),[B,H]=(0,t.useState)(null),[U,K]=(0,t.useState)([[],[],[],[]]);async function z(t){const a=t?e.GenerateScenarioCode(t):null;await e.ConstructNewScenario(a||null),i(e.GetScenario()),r()}(0,t.useEffect)((()=>{if(e.CurrentScenario){const t=e.GenerateScenarioCode(e.CurrentScenario.id);t&&(N(t.dep),T(t.obj),R(t.vic),O([t.gl_a_1,t.gl_a_2,t.gl_b_1,t.gl_b_2]),d(e.CurrentScenario.id))}}),[o,e.CurrentScenario]),(0,t.useEffect)((()=>{if(null!==A){const t=e.ListOfDeployments.find((e=>e.id_num_code===A));t&&(G((0,za.vD)(t.deployment.description,null)),F(Number(t.img_link)))}}),[A,e.ListOfDeployments]),(0,t.useEffect)((()=>{if(null!==E){const t=e.ListOfObjectives.find((e=>e.id_num_code===E));if(t){const e=[...(0,za.vD)(t.description,null),...(0,za.vD)(t.battlefield.field_size,null),...(0,za.vD)(t.battlefield.extra_features,null)];W(e)}}}),[E,e.ListOfObjectives]),(0,t.useEffect)((()=>{if(null!==D){const t=e.ListOfVictories.find((e=>e.id_num_code===D));t&&H((0,za.vD)(t.victory_conditions.description,null))}}),[D,e.ListOfVictories]),(0,t.useEffect)((()=>{const t=[[],[],[],[]];M.forEach(((a,n)=>{if(null!==a){const o=(n<2?e.ListOfDeedsGroupA:e.ListOfDeedsGroupB).find((e=>e.GeneratedCode===a));o&&(t[n]=o.Description)}})),K(t)}),[M,e.ListOfDeedsGroupA,e.ListOfDeedsGroupB]),(0,t.useEffect)((()=>{const e=new URLSearchParams(I.search).get("id");d(e||""),z(e)}),[I.search]);return(0,Dn.jsxs)("div",{className:"RandomScenarioGenerator",children:[(0,Dn.jsx)("h1",{children:"Random Scenario Generator"}),(0,Dn.jsxs)("div",{className:"actions",children:[(0,Dn.jsxs)("div",{className:"btn btn-primary mb-3 me-1",onClick:()=>z(null),children:["New",(0,Dn.jsx)(Gn.g,{icon:Pn.tW,className:"ms-2"})]}),(0,Dn.jsxs)("div",{className:"btn btn-secondary mb-3 me-1",onClick:()=>{const t=Ua+"/compendium/scenarios/random?id="+(e.CurrentScenario?e.CurrentScenario.id:c);navigator.share?navigator.share({title:"Ternch Crusade Random Scenario Generator",text:"Let's play play together",url:t}).then((()=>Us.success("Shared successfully"))).catch((e=>console.log("Error sharing",e))):navigator.clipboard.writeText(t).then((()=>{Us.success("Link copied to clipboard!")})).catch((e=>{Us.error("Failed to copy: "+e)}))},children:["Share",(0,Dn.jsx)(Gn.g,{icon:Pn.t5Z,className:"ms-2"})]}),(0,Dn.jsxs)("div",{className:"btn btn-secondary mb-3 ",onClick:()=>C(!0),children:["Load",(0,Dn.jsx)(Gn.g,{icon:Pn.cbP,className:"ms-2"})]})]}),(0,Dn.jsxs)("div",{className:"random-scenario-summary",children:[(0,Dn.jsx)("div",{className:"random-scenario-summary-headline",children:(0,Dn.jsx)("h2",{children:"Scenario Briefing"})}),(0,Dn.jsxs)("div",{className:"row",children:[(0,Dn.jsx)("div",{className:""+(s?"col-md-12":"col-md-6"),children:(0,Dn.jsxs)("div",{className:"zoom-image",onClick:()=>l(!s),children:[(0,Dn.jsx)(Zl,{imageId:e.GetImageID()}),(0,Dn.jsx)("div",{className:"zoom-image-indicator",children:(0,Dn.jsx)(Gn.g,{icon:Pn.$UM,className:"zoom-icon"})})]})}),(0,Dn.jsxs)("div",{className:""+(s?"col-md-12":"col-md-6"),children:[(0,Dn.jsxs)("div",{className:"random-scenario-summary-element",onClick:()=>g(!0),children:[(0,Dn.jsx)("div",{className:"element-title",children:"Deployment"}),(0,Dn.jsx)("div",{className:"element-value",children:e.GetDeployment()}),e.LockDeployment?(0,Dn.jsx)(Gn.g,{icon:Pn.DW4,className:"lock-icon",onClick:t=>{t.stopPropagation(),e.LockDeployment=!e.LockDeployment,r()}}):(0,Dn.jsx)(Gn.g,{icon:Pn.KKb,className:"lock-icon",onClick:t=>{t.stopPropagation(),e.LockDeployment=!e.LockDeployment,r()}})]}),(0,Dn.jsxs)("div",{className:"random-scenario-summary-element",onClick:()=>_(!0),children:[(0,Dn.jsx)("div",{className:"element-title",children:"Battlefield Archetype"}),(0,Dn.jsx)("div",{className:"element-value",children:e.GetArchetype()}),e.LockObjectives?(0,Dn.jsx)(Gn.g,{icon:Pn.DW4,className:"lock-icon",onClick:t=>{t.stopPropagation(),e.LockObjectives=!e.LockObjectives,r()}}):(0,Dn.jsx)(Gn.g,{icon:Pn.KKb,className:"lock-icon",onClick:t=>{t.stopPropagation(),e.LockObjectives=!e.LockObjectives,r()}})]}),(0,Dn.jsxs)("div",{className:"random-scenario-summary-element",onClick:()=>v(!0),children:[(0,Dn.jsx)("div",{className:"element-title",children:"Victory Conditions"}),(0,Dn.jsx)("div",{className:"element-value",children:e.GetVictory()}),e.LockVictories?(0,Dn.jsx)(Gn.g,{icon:Pn.DW4,className:"lock-icon",onClick:t=>{t.stopPropagation(),e.LockVictories=!e.LockVictories,r()}}):(0,Dn.jsx)(Gn.g,{icon:Pn.KKb,className:"lock-icon",onClick:t=>{t.stopPropagation(),e.LockVictories=!e.LockVictories,r()}})]}),(0,Dn.jsxs)("div",{className:"random-scenario-summary-element",onClick:()=>x(!0),children:[(0,Dn.jsx)("div",{className:"element-title",children:"Glorious Deeds"}),e.GetDeeds().map((e=>(0,Dn.jsx)("div",{className:"element-value",children:e},e))),e.LockDeeds?(0,Dn.jsx)(Gn.g,{icon:Pn.DW4,className:"lock-icon",onClick:t=>{t.stopPropagation(),e.LockDeeds=!e.LockDeeds,r()}}):(0,Dn.jsx)(Gn.g,{icon:Pn.KKb,className:"lock-icon",onClick:t=>{t.stopPropagation(),e.LockDeeds=!e.LockDeeds,r()}})]})]})]}),(0,Dn.jsxs)("div",{className:"scenario-code",children:["Scenario Code: ",e.CurrentScenario?e.CurrentScenario.id:"NULL",(0,Dn.jsx)("span",{className:"copy",onClick:()=>{(()=>{var t;null!==(t=e.CurrentScenario)&&void 0!==t&&t.id&&navigator.clipboard.writeText(e.CurrentScenario.id).then((()=>{Us.success("Scenario code copied!")})).catch((e=>{Us.error("Failed to copy: "+e)}))})()},children:(0,Dn.jsx)(Gn.g,{icon:Pn.jPR})})]})]}),null!=o&&(0,Dn.jsxs)("div",{className:"main-content",children:[(0,Dn.jsx)("h2",{children:"Battlefield Archetype"}),(0,Dn.jsx)("h3",{children:e.GetArchetype()}),u.show_lore&&(0,Dn.jsx)("div",{className:"lore",children:(0,pl.fE)(o,o.Description)}),o.BattlefieldSize&&(0,Dn.jsx)(Dn.Fragment,{children:(0,pl.fE)(o,o.BattlefieldSize)}),o.BattlefieldExtra&&(0,Dn.jsx)(Dn.Fragment,{children:(0,pl.fE)(o,o.BattlefieldExtra)}),(0,Dn.jsx)("h2",{children:"Victory Conditions"}),(0,Dn.jsx)("h3",{className:"",children:e.GetVictory()}),(0,pl.fE)(o,o.VictoryDesc),(0,Dn.jsx)("h2",{children:"Game Length"}),(0,pl.fE)(o,o.BattlelengthDesc),(0,Dn.jsx)("h2",{children:"Deployment"}),(0,Dn.jsx)("h3",{children:e.GetDeployment()}),(0,pl.fE)(o,o.DeploymentDesc),(0,pl.fE)(o,o.InfiltratorDesc),(0,Dn.jsx)("h2",{className:"mb-3",children:"Glorious Deeds"}),o.Deeds.map((e=>(0,Dn.jsx)(t.Fragment,{children:(0,Dn.jsx)($l.A,{data:e})},"faction_rule_"+o.ID+"_rule_id_"+e.ID))),o.SpecialRules.length>0&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("h2",{children:"Special Rules"}),o.SpecialRules.map((e=>(0,Dn.jsxs)("div",{className:"rules-text-item",children:[(0,Dn.jsx)(tl,{content:e.Name?e.Name:"",level:2}),(0,pl.fE)(e,e.Description)]},e.ID)))]})]}),(0,Dn.jsxs)(Il.A,{show:f,onHide:()=>g(!1),centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Deployment"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:e=>{e.stopPropagation(),g(!1)}})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsxs)(Hi.Group,{controlId:"random-deployment-select",className:"mb-3",children:[(0,Dn.jsx)(Hi.Label,{children:"Choose Deployment"}),(0,Dn.jsx)(Hi.Select,{value:null!==A&&void 0!==A?A:"",onChange:e=>N(Number(e.target.value)),children:e.ListOfDeployments.map((e=>(0,Dn.jsx)("option",{value:e.id_num_code,children:e.name},e.id_num_code)))})]}),P&&(0,Dn.jsx)(Zl,{imageId:P}),(0,Dn.jsx)("div",{className:"mt-3",children:q&&(0,pl.fE)(null,q)})]}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:e=>{e.stopPropagation(),g(!1)},children:"Cancel"}),(0,Dn.jsx)(ss.A,{variant:"primary",onClick:()=>{if(e.CurrentScenario&&null!==A){const t=e.GenerateScenarioCode(e.CurrentScenario.id);if(t){const a={...t,dep:A};z(e.GenerateCodeFromScenario(a))}}g(!1)},children:"Save"})]})]}),(0,Dn.jsxs)(Il.A,{show:y,onHide:()=>_(!1),centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Battlefield Archetype"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:e=>{e.stopPropagation(),_(!1)}})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsxs)(Hi.Group,{controlId:"random-battlefield-select",className:"mb-3",children:[(0,Dn.jsx)(Hi.Label,{children:"Choose Battlefield Archetype"}),(0,Dn.jsx)(Hi.Select,{value:null!==E&&void 0!==E?E:"",onChange:e=>T(Number(e.target.value)),children:e.ListOfObjectives.map((e=>(0,Dn.jsx)("option",{value:e.id_num_code,children:e.name},e.id_num_code)))})]}),L&&(0,pl.fE)(null,L)]}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:e=>{e.stopPropagation(),_(!1)},children:"Cancel"}),(0,Dn.jsx)(ss.A,{variant:"primary",onClick:()=>{if(e.CurrentScenario&&null!==E){const t=e.GenerateScenarioCode(e.CurrentScenario.id);if(t){const a={...t,obj:E};z(e.GenerateCodeFromScenario(a))}}_(!1)},children:"Save"})]})]}),(0,Dn.jsxs)(Il.A,{show:b,onHide:()=>v(!1),centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Victory Conditions"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:e=>{e.stopPropagation(),v(!1)}})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsxs)(Hi.Group,{controlId:"random-victory-select",className:"mb-3",children:[(0,Dn.jsx)(Hi.Label,{children:"Choose Victory Conditions"}),(0,Dn.jsx)(Hi.Select,{value:null!==D&&void 0!==D?D:"",onChange:e=>R(Number(e.target.value)),children:e.ListOfVictories.map((e=>(0,Dn.jsx)("option",{value:e.id_num_code,children:e.name},e.id_num_code)))})]}),B&&(0,pl.fE)(null,B)]}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:e=>{e.stopPropagation(),v(!1)},children:"Cancel"}),(0,Dn.jsx)(ss.A,{variant:"primary",onClick:()=>{if(e.CurrentScenario&&null!==D){const t=e.GenerateScenarioCode(e.CurrentScenario.id);if(t){const a={...t,vic:D};z(e.GenerateCodeFromScenario(a))}}v(!1)},children:"Save"})]})]}),(0,Dn.jsxs)(Il.A,{show:w,onHide:()=>x(!1),centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Glorious Deeds"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:e=>{e.stopPropagation(),x(!1)}})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsx)("h4",{children:"Category A"}),[0,1].map((a=>{var n;return(0,Dn.jsxs)(t.Fragment,{children:[(0,Dn.jsxs)(Hi.Group,{controlId:`random-deeds-select-${a}`,className:"mb-3",children:[(0,Dn.jsx)(Hi.Label,{children:`Choose Glorious Deed ${a+1}`}),(0,Dn.jsx)(Hi.Select,{value:null!==(n=M[a])&&void 0!==n?n:"",onChange:e=>{const t=[...M];t[a]=Number(e.target.value),O(t)},children:e.ListOfDeedsGroupA.map((e=>(0,Dn.jsx)("option",{value:e.GeneratedCode,disabled:M.slice(0,2).includes(e.GeneratedCode)&&M[a]!==e.GeneratedCode,children:e.Name},e.GeneratedCode)))})]}),U[a]&&(0,pl.fE)(null,U[a])]},a)})),(0,Dn.jsx)("hr",{}),(0,Dn.jsx)("h4",{children:"Category B"}),[2,3].map((a=>{var n;return(0,Dn.jsxs)(t.Fragment,{children:[(0,Dn.jsxs)(Hi.Group,{controlId:`random-deeds-select-${a}`,className:"mb-3",children:[(0,Dn.jsx)(Hi.Label,{children:`Choose Glorious Deed ${a+1}`}),(0,Dn.jsx)(Hi.Select,{value:null!==(n=M[a])&&void 0!==n?n:"",onChange:e=>{const t=[...M];t[a]=Number(e.target.value),O(t)},children:e.ListOfDeedsGroupB.map((e=>(0,Dn.jsx)("option",{value:e.GeneratedCode,disabled:M.slice(2,4).includes(e.GeneratedCode)&&M[a]!==e.GeneratedCode,children:e.Name},e.GeneratedCode)))})]}),U[a]&&(0,pl.fE)(null,U[a])]},a)}))]}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:e=>{e.stopPropagation(),x(!1)},children:"Cancel"}),(0,Dn.jsx)(ss.A,{variant:"primary",onClick:()=>{if(e.CurrentScenario&&M.every((e=>null!==e))){const t=e.GenerateScenarioCode(e.CurrentScenario.id);if(t){const a={...t,gl_a_1:M[0],gl_a_2:M[1],gl_b_1:M[2],gl_b_2:M[3]};z(e.GenerateCodeFromScenario(a))}}x(!1)},disabled:M.some((e=>null===e)),children:"Save"})]})]}),(0,Dn.jsxs)(Il.A,{show:k,onHide:()=>C(!1),centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Load Scenario"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:e=>{e.stopPropagation(),C(!1)}})]}),(0,Dn.jsx)(Il.A.Body,{children:(0,Dn.jsxs)(Hi.Group,{className:"mb-3",children:[(0,Dn.jsx)(Hi.Label,{children:"Enter Scenario Code"}),(0,Dn.jsxs)(Lm,{hasValidation:!0,children:[(0,Dn.jsx)(Hi.Control,{type:"text",placeholder:"123-1123",value:c,onChange:e=>{let t=e.target.value.toUpperCase().replace(/[^0-9A-Z-]/g,"");if(4===t.length&&t.endsWith("-"))return d(t),void S(!1);const a=t.replace(/-/g,"");t=a.length>3?a.substring(0,3)+"-"+a.substring(3,7):a,d(t);let n=0===t.length||8===t.length;8===t.length&&(t[4]===t[5]&&(n=!1),t[6]===t[7]&&(n=!1)),S(n)},isInvalid:!j&&c.length>0,className:"font-monospace text-uppercase",maxLength:13}),(0,Dn.jsxs)(ss.A,{variant:"primary",onClick:()=>(e=>{z(e),C(!1)})(c),disabled:!j||0==c.length,children:[(0,Dn.jsx)(Gn.g,{icon:Pn.cbP,className:"me-2"}),"Load"]}),(0,Dn.jsx)(Hi.Control.Feedback,{type:"invalid",children:"Invalid Code. Format 123-4321 expected"})]})]})})]})]},a)};var Qm=e=>{const[a,n]=(0,t.useState)(0),{state:o,pathname:i}=(0,zt.zy)();pn.o.getInstance();return(0,t.useEffect)((()=>{n(a+1)}),[o]),i.match("/.*/$")?(0,Dn.jsx)(Yl,{}):(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with CompendiumRoute.tsx"}),children:(0,Dn.jsxs)("div",{className:"CompendiumRoute",children:[(0,Dn.jsx)(Jm,{}),(0,Dn.jsx)("div",{className:"container main-content",children:(0,Dn.jsxs)("div",{className:"row",children:[(0,Dn.jsx)("div",{className:"col-lg-3 col-sm-12",children:(0,Dn.jsx)(Km,{controller:e.controller})}),(0,Dn.jsx)("div",{className:"col-lg-9 col-sm-12",children:(0,Dn.jsxs)(zt.BV,{children:[(0,Dn.jsx)(zt.qh,{path:fa,element:(0,Dn.jsx)(Vm,{})}),(0,Dn.jsx)(zt.qh,{path:ga,element:(0,Dn.jsx)(Ym,{})}),(0,Dn.jsx)(zt.qh,{path:"/warbands/starting-a-warband/:itemid?",element:(0,Dn.jsx)(Ic,{controller:e.controller.GameRulesCollectionController})}),(0,Dn.jsx)(zt.qh,{path:"/core-rules/:itemid?",element:(0,Dn.jsx)(Ic,{controller:e.controller.GameRulesCollectionController,urlindex:2})}),(0,Dn.jsx)(zt.qh,{path:"/comprehensive-rules"+va,element:(0,Dn.jsx)(zm,{controller:e.controller.KeywordCollectionController})}),(0,Dn.jsx)(zt.qh,{path:"/comprehensive-rules"+xa,element:(0,Dn.jsx)(Bm,{controller:e.controller.ModelCollectionController})}),(0,Dn.jsx)(zt.qh,{path:"/comprehensive-rules/:itemid?",element:(0,Dn.jsx)(Ic,{controller:e.controller.GameRulesCollectionController})}),(0,Dn.jsx)(zt.qh,{path:"/scenarios/random",element:(0,Dn.jsx)(Zm,{})}),(0,Dn.jsx)(zt.qh,{path:"/scenarios"+ya,element:(0,Dn.jsx)(Ic,{controller:e.controller.GameRulesCollectionController})}),(0,Dn.jsx)(zt.qh,{path:"/campaigns"+_a,element:(0,Dn.jsx)(Ic,{controller:e.controller.CampaignRulesCollectionController})}),(0,Dn.jsx)(zt.qh,{path:ba,element:(0,Dn.jsx)(Ic,{controller:e.controller.ErrataRulesCollectionController})}),(0,Dn.jsx)(zt.qh,{path:wa,element:(0,Dn.jsx)(Ic,{controller:e.controller.FactionCollectionController})}),(0,Dn.jsx)(zt.qh,{path:Ca,element:(0,Dn.jsx)(Ic,{controller:e.controller.ScenarioCollectionController})}),(0,Dn.jsx)(zt.qh,{path:"/campaigns"+ja,element:(0,Dn.jsx)(Ic,{controller:e.controller.ExplorationTableCollectionController})}),(0,Dn.jsx)(zt.qh,{path:"/campaigns"+Ia,element:(0,Dn.jsx)(Ic,{controller:e.controller.PatronCollectionController})}),(0,Dn.jsx)(zt.qh,{path:"/campaigns"+Sa,element:(0,Dn.jsx)(zm,{controller:e.controller.InjuryCollectionController})}),(0,Dn.jsx)(zt.qh,{path:"/campaigns"+Aa,element:(0,Dn.jsx)(Bm,{controller:e.controller.SkillGroupCollectionController})}),(0,Dn.jsx)(zt.qh,{path:ka,element:(0,Dn.jsx)(Bm,{controller:e.controller.EquipmentCollectionController})}),(0,Dn.jsx)(zt.qh,{path:ua,element:(0,Dn.jsx)(ii,{controller:e.controller})}),(0,Dn.jsx)(zt.qh,{path:"*",element:(0,Dn.jsx)(Yl,{})})]})},a)]})})]})})},Xm=a.p+"static/media/trench-companion-logo-white-v2.e60c2cc5740a76d1e2ad.png",ep=a.p+"static/media/trench-companion-logo-black-v2.2df919b0370e1b3cade3.png";var tp=e=>{const a=(0,zt.Zp)(),{settings:n}=(0,cl.t)(),o="dark"===n.color_theme;function i(){a("/",{state:Date.now().toString()})}function r(){a(ha,{state:Date.now().toString()})}const{isLoggedIn:s,userId:l,authToken:c,loadingUser:d,SiteUser:u,logout:h}=(0,ti.A)(),[m,p]=(0,t.useState)(!1);return(0,t.useEffect)((()=>{const e=()=>{m&&p(!1)};return window.addEventListener("scroll",e),()=>{window.removeEventListener("scroll",e)}}),[m]),(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with BaseHeader.tsx"}),children:(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("button",{className:"open-offcanvas-nav-btn",onClick:()=>e.showstate(),children:(0,Dn.jsx)(Gn.g,{icon:Pn.ckx,className:""})}),(0,Dn.jsx)(yn.A,{link:"/",runfunc:()=>i(),classes:"logo-wrap",children:(0,Dn.jsx)("img",{src:o?Xm:ep,alt:"Trench Companion Logo",className:"logo",onClick:()=>i()})}),s?(0,Dn.jsx)(Fn.A,{placement:"bottom-end",trigger:["click","focus"],rootClose:!0,show:m,onToggle:e=>p(e),overlay:(0,Dn.jsx)(qn.A,{children:(0,Dn.jsxs)(qn.A.Body,{bsPrefix:"profile",className:"popover header-user-popover",id:"header-user-popover",children:[(0,Dn.jsx)("div",{className:"user-name",children:null===u||void 0===u?void 0:u.GetNickname()}),(0,Dn.jsxs)(yn.A,{classes:"element",link:`/profile/${l}`,runfunc:()=>{const e=`/profile/${l}`;p(!1),a(e)},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.X46,className:"me-2"}),"Profile",u&&(null===u||void 0===u?void 0:u.numNotificationsProfile())>0&&(0,Dn.jsx)("span",{className:"notification-num-inline",children:null===u||void 0===u?void 0:u.numNotificationsProfile()})]}),(0,Dn.jsxs)(yn.A,{classes:"element",link:"/warband",runfunc:()=>{p(!1),a("/warband")},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.YEm,className:"me-2"}),"Warbands",u&&(null===u||void 0===u?void 0:u.numNotificationsWarbands())>0&&(0,Dn.jsx)("span",{className:"notification-num-inline",children:null===u||void 0===u?void 0:u.numNotificationsWarbands()})]}),(0,Dn.jsxs)(yn.A,{classes:"element",link:"/campaigns",runfunc:()=>{p(!1),a("/campaigns")},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.Q9Y,className:"me-2"}),"Campaigns"]}),(0,Dn.jsxs)(yn.A,{classes:"element",link:"/games",runfunc:()=>{p(!1),a("/games")},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.s6x,className:"me-2"}),"Games"]}),(0,Dn.jsxs)(yn.A,{classes:"element",link:`/profile/${l}/settings`,runfunc:()=>{const e=`/profile/${l}/settings`;p(!1),a(e)},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.dB,className:"me-2"}),"Settings"]}),(0,Dn.jsxs)("div",{className:"element",onClick:async()=>{h(),r(),window.location.reload()},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.yBu,className:"me-2"}),"Log out"]})]})}),children:(0,Dn.jsxs)("div",{className:"header-login-btn",children:[u&&(null===u||void 0===u?void 0:u.numNotificationsGlobal())>0&&(0,Dn.jsx)("span",{className:"notification-num",children:null===u||void 0===u?void 0:u.numNotificationsGlobal()}),(0,Dn.jsx)(Gn.g,{icon:Pn.X46,className:""})]})}):(0,Dn.jsx)(yn.A,{link:ha,runfunc:()=>r(),classes:"header-login-btn",children:(0,Dn.jsx)(Gn.g,{icon:Pn.X46,className:""})})]})})};const ap=new WeakMap,np=(e,t)=>{if(!e||!t)return;const a=ap.get(t)||new Map;ap.set(t,a);let n=a.get(e);return n||(n=t.matchMedia(e),n.refCount=0,a.set(n.media,n)),n};function op(e){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"undefined"===typeof window?void 0:window;const n=np(e,a),[o,i]=(0,t.useState)((()=>!!n&&n.matches));return(0,Jr.A)((()=>{let t=np(e,a);if(!t)return i(!1);let n=ap.get(a);const o=()=>{i(t.matches)};return t.refCount++,t.addListener(o),o(),()=>{t.removeListener(o),t.refCount--,t.refCount<=0&&(null==n||n.delete(t.media)),t=void 0}}),[e]),o}const ip=function(e){const a=Object.keys(e);function n(e,t){return e===t?t:e?`${e} and ${t}`:t}function o(t){const n=function(e){return a[Math.min(a.indexOf(e)+1,a.length-1)]}(t);let o=e[n];return o="number"===typeof o?o-.2+"px":`calc(${o} - 0.2px)`,`(max-width: ${o})`}return function(a,i,r){let s;"object"===typeof a?(s=a,r=i,i=!0):s={[a]:i=i||!0};let l=(0,t.useMemo)((()=>Object.entries(s).reduce(((t,a)=>{let[i,r]=a;return"up"!==r&&!0!==r||(t=n(t,function(t){let a=e[t];return"number"===typeof a&&(a=`${a}px`),`(min-width: ${a})`}(i))),"down"!==r&&!0!==r||(t=n(t,o(i))),t}),"")),[JSON.stringify(s)]);return op(l,r)}}({xs:0,sm:576,md:768,lg:992,xl:1200,xxl:1400});var rp=ip,sp=a(8170),lp=a(8072);const cp=t.forwardRef(((e,t)=>{let{className:a,bsPrefix:n,as:o="div",...i}=e;return n=(0,hi.oU)(n,"offcanvas-body"),(0,Dn.jsx)(o,{ref:t,className:si()(a,n),...i})}));cp.displayName="OffcanvasBody";var dp=cp,up=a(6555),hp=a(3492),mp=a(4910);const pp={[up.ns]:"show",[up._K]:"show"},fp=t.forwardRef(((e,a)=>{let{bsPrefix:n,className:o,children:i,in:r=!1,mountOnEnter:s=!1,unmountOnExit:l=!1,appear:c=!1,...d}=e;return n=(0,hi.oU)(n,"offcanvas"),(0,Dn.jsx)(mp.A,{ref:a,addEndListener:hp.A,in:r,mountOnEnter:s,unmountOnExit:l,appear:c,...d,childRef:i.ref,children:(e,a)=>t.cloneElement(i,{...a,className:si()(o,i.props.className,(e===up.ns||e===up.ze)&&`${n}-toggling`,pp[e])})})}));fp.displayName="OffcanvasToggling";var gp=fp,yp=a(1602),_p=a(1833);const bp=t.forwardRef(((e,t)=>{let{bsPrefix:a,className:n,closeLabel:o="Close",closeButton:i=!1,...r}=e;return a=(0,hi.oU)(a,"offcanvas-header"),(0,Dn.jsx)(_p.A,{ref:t,...r,className:si()(n,a),closeLabel:o,closeButton:i})}));bp.displayName="OffcanvasHeader";var vp=bp;const wp=(0,a(4488).A)("h5"),xp=t.forwardRef(((e,t)=>{let{className:a,bsPrefix:n,as:o=wp,...i}=e;return n=(0,hi.oU)(n,"offcanvas-title"),(0,Dn.jsx)(o,{ref:t,className:si()(a,n),...i})}));xp.displayName="OffcanvasTitle";var kp=xp,Cp=a(11);function jp(e){return(0,Dn.jsx)(gp,{...e})}function Sp(e){return(0,Dn.jsx)(lp.A,{...e})}const Ip=t.forwardRef(((e,a)=>{let{bsPrefix:n,className:o,children:i,"aria-labelledby":r,placement:s="start",responsive:l,show:c=!1,backdrop:d=!0,keyboard:u=!0,scroll:h=!1,onEscapeKeyDown:m,onShow:p,onHide:f,container:g,autoFocus:y=!0,enforceFocus:_=!0,restoreFocus:b=!0,restoreFocusOptions:v,onEntered:w,onExit:x,onExiting:k,onEnter:C,onEntering:j,onExited:S,backdropClassName:I,manager:A,renderStaticNode:N=!1,...E}=e;const T=(0,t.useRef)();n=(0,hi.oU)(n,"offcanvas");const{onToggle:D}=(0,t.useContext)(es)||{},[R,M]=(0,t.useState)(!1),O=rp(l||"xs","up");(0,t.useEffect)((()=>{M(l?c&&!O:c)}),[c,l,O]);const q=(0,Or.A)((()=>{null==D||D(),null==f||f()})),G=(0,t.useMemo)((()=>({onHide:q})),[q]);const P=(0,t.useCallback)((e=>(0,Dn.jsx)("div",{...e,className:si()(`${n}-backdrop`,I)})),[I,n]),F=e=>(0,Dn.jsx)("div",{...e,...E,className:si()(o,l?`${n}-${l}`:n,`${n}-${s}`),"aria-labelledby":r,children:i});return(0,Dn.jsxs)(Dn.Fragment,{children:[!R&&(l||N)&&F({}),(0,Dn.jsx)(yp.A.Provider,{value:G,children:(0,Dn.jsx)(sp.A,{show:R,ref:a,backdrop:d,container:g,keyboard:u,autoFocus:y,enforceFocus:_&&!h,restoreFocus:b,restoreFocusOptions:v,onEscapeKeyDown:m,onShow:p,onHide:q,onEnter:function(e){e&&(e.style.visibility="visible");for(var t=arguments.length,a=new Array(t>1?t-1:0),n=1;n<t;n++)a[n-1]=arguments[n];null==C||C(e,...a)},onEntering:j,onEntered:w,onExit:x,onExiting:k,onExited:function(e){e&&(e.style.visibility="");for(var t=arguments.length,a=new Array(t>1?t-1:0),n=1;n<t;n++)a[n-1]=arguments[n];null==S||S(...a)},manager:A||(h?(T.current||(T.current=new Cp.A({handleContainerOverflow:!1})),T.current):(0,Cp.R)()),transition:jp,backdropTransition:Sp,renderBackdrop:P,renderDialog:F})})]})}));Ip.displayName="Offcanvas";var Ap=Object.assign(Ip,{Body:dp,Header:vp,Title:kp});var Np=e=>{let{controller:a,onBack:n,onNavigate:o}=e;const i=(0,zt.Zp)(),[r,s]=(0,t.useState)(!0);const[l,c]=(0,t.useState)([{title:"New Warband",slug:"new"}]),[d,u]=(0,t.useState)(0);return(0,t.useEffect)((()=>{let e=!0;return async function(){s(!0);const t=[],a=pn.o.getInstance(),n=await a.UserWarbandManager.GetItemsAllData();for(let e=0;e<n.length;e++)t.push({title:n[e].warband_data.name,slug:"detail/"+n[e].id});e&&(c([{title:"New Warband",slug:"new"},{title:"Your Warbands",slug:"",open:!0,children:t}]),u(d+1),s(!1))}(),()=>{e=!1}}),[]),(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with RulesMenuBody.tsx"}),children:(0,Dn.jsxs)("div",{className:"WBBMenuBody menu-body",children:[(0,Dn.jsxs)("div",{className:"rules-menu-header",children:[(0,Dn.jsx)("div",{onClick:n,className:"home-link",children:(0,Dn.jsx)(Gn.g,{icon:Pn.Wzs})}),(0,Dn.jsx)(yn.A,{classes:"compendium-link",link:"/warband",runfunc:()=>{i("/warband"),o&&o()},children:"Warband Manager"})]}),r?(0,Dn.jsx)("div",{className:"LoadingOverlay-wrap-50vh",children:(0,Dn.jsx)(Zo,{message:"Loading Warbands"})}):(0,Dn.jsx)(Um,{data:l,parentPath:"warband",onNavigate:o},"warbands"+d.toString())]})})};var Ep=()=>{const[e,a]=(0,t.useState)(false),{settings:n,updateSettings:o,loading:i,saving:r}=(0,cl.t)(),s=i||r,l="dark"===n.color_theme,c=n.show_lore,d=n.show_base_sizes;return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with RulesMenuSettings.tsx"}),children:(0,Dn.jsxs)("div",{className:"OffcanvasMenuSettings",children:[(0,Dn.jsxs)("div",{className:"OffcanvasMenuSettings-title",onClick:()=>{a(!e)},children:["Settings",(0,Dn.jsx)("span",{className:"collapse-icon-wrap",children:(0,Dn.jsx)(Gn.g,{icon:Pn.dB,className:e?"fa-spin":""})})]}),(0,Dn.jsx)(ll.A,{in:e,children:(0,Dn.jsxs)("div",{className:"OffcanvasMenuSettings-content",children:[(0,Dn.jsx)("div",{className:"spacer-20"}),(0,Dn.jsxs)("div",{className:"form-check form-switch mb-2",children:[(0,Dn.jsx)("input",{className:"form-check-input",type:"checkbox",role:"switch",id:"theme-switch",checked:l,onChange:()=>{o({color_theme:l?"light":"dark"})},disabled:s}),(0,Dn.jsx)("label",{className:"form-check-label",htmlFor:"theme-switch",children:"Dark Mode"})]}),(0,Dn.jsxs)("div",{className:"form-check form-switch mb-2",children:[(0,Dn.jsx)("input",{className:"form-check-input",type:"checkbox",role:"switch",id:"lore-switch",checked:c,onChange:()=>{o({show_lore:!c})},disabled:s}),(0,Dn.jsx)("label",{className:"form-check-label",htmlFor:"lore-switch",children:"Show Lore"})]}),(0,Dn.jsxs)("div",{className:"form-check form-switch mb-2",children:[(0,Dn.jsx)("input",{className:"form-check-input",type:"checkbox",role:"switch",id:"basesizes-switch",checked:d,onChange:()=>{o({show_base_sizes:!d})},disabled:s}),(0,Dn.jsx)("label",{className:"form-check-label",htmlFor:"basesizes-switch",children:"Show Base Sizes"})]}),s&&(0,Dn.jsx)(Zo,{message:"loading",className:"small"}),(0,Dn.jsx)("div",{className:"spacer-20"})]})})]})})},Tp=a(3834);var Dp=e=>{let{controller:a,onBack:n,onNavigate:o}=e;const i=(0,zt.Zp)(),{isLoggedIn:r,login:s,SiteUser:l}=(0,ti.A)(),[c,d]=(0,t.useState)(!0);const[u,h]=(0,t.useState)([{title:"New Warband",slug:"new"}]),[m,p]=(0,t.useState)(0);return(0,t.useEffect)((()=>{let e=!0;return async function(){var t;d(!0);const a=[],n=null!==(t=null===l||void 0===l?void 0:l.GetCampaignIDList())&&void 0!==t?t:[];for(let e=0;e<n.length;e++){const t=await Tp.x.GetCampaignSummaryPublicByID(n[e]);t&&a.push({title:t.campaign_name,slug:""+t.campaign_id})}e&&(h([{title:"New Campaign",slug:"new"},{title:"Your Campaigns",slug:"",open:!0,children:a}]),p((e=>e+1)),d(!1))}(),()=>{e=!1}}),[]),(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with RulesMenuBody.tsx"}),children:(0,Dn.jsxs)("div",{className:"WBBMenuBody menu-body",children:[(0,Dn.jsxs)("div",{className:"rules-menu-header",children:[(0,Dn.jsx)("div",{onClick:n,className:"home-link",children:(0,Dn.jsx)(Gn.g,{icon:Pn.Wzs})}),(0,Dn.jsx)(yn.A,{classes:"compendium-link",link:"/campaigns",runfunc:()=>{i("/campaigns"),o&&o()},children:"Campaign Manager"})]}),c?(0,Dn.jsx)("div",{className:"LoadingOverlay-wrap-50vh",children:(0,Dn.jsx)(Zo,{message:"Loading Campaigns"})}):(0,Dn.jsx)(Um,{data:u,parentPath:"campaigns",onNavigate:o},"campaigns"+m.toString())]})})},Rp=a(2654);const Mp="app-version";function Op(){try{const e=localStorage.getItem(Mp);if(!e)return null;const t=JSON.parse(e);return t&&"string"===typeof t.version&&"number"===typeof t.time?t:null}catch{return null}}function qp(e){const t={version:e,time:Date.now()};try{return localStorage.setItem(Mp,JSON.stringify(t)),t}catch{return null}}function Gp(){window.location.replace(window.location.href)}function Pp(e){let{endpoint:a,checkIntervalMinutes:n=20,maxAgeMinutes:o=60,onlyWhenVisible:i=!0}=e;const[r,s]=(0,t.useState)(!1),l=(0,t.useMemo)((()=>`${_n.a.URL}/wp-json/synod/v1/app/version`),[a]),c=(0,t.useRef)(!1),d=(0,t.useRef)(null),u=async function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],{isMount:t}=arguments.length>1?arguments[1]:void 0;if(!c.current){c.current=!0;try{if(i&&"visible"!==document.visibilityState&&!e)return;const a=Op(),n=Date.now(),r=a?n-a.time:Number.POSITIVE_INFINITY;if(!(e||r>=6e4*o))return;const c=await async function(e){try{const t=e.includes("?")?`${e}&t=${Date.now()}`:`${e}?t=${Date.now()}`,a=await fetch(t,{cache:"no-store"});if(!a.ok)return null;return((await a.json()).version||"").trim()||null}catch{return null}}(l);if(!c)return;if(t)return qp(c),void s(!1);if(!a)return qp(c),void s(!1);if(c!==a.version)return s(!0),void function(){const e=Op();e&&qp(e.version)}();qp(c),s(!1)}finally{c.current=!1}}};return(0,t.useEffect)((()=>{u(!0,{isMount:!0});const e=6e4*Math.max(1,n);d.current=window.setInterval((()=>{u(!1,{isMount:!1})}),e);const t=()=>{"visible"===document.visibilityState&&u(!1,{isMount:!1})},a=()=>u(!1,{isMount:!1});return document.addEventListener("visibilitychange",t),window.addEventListener("online",a),()=>{d.current&&clearInterval(d.current),document.removeEventListener("visibilitychange",t),window.removeEventListener("online",a)}}),[l,n,o,i]),r?(0,Dn.jsxs)(Il.A,{show:!0,className:"WbbModalAddItem",centered:!0,children:[(0,Dn.jsx)(Il.A.Header,{closeButton:!1,children:(0,Dn.jsx)(Il.A.Title,{children:"Update"})}),(0,Dn.jsx)(Il.A.Body,{children:(0,Dn.jsxs)("div",{className:"p-3",children:[(0,Dn.jsxs)(Rp.A,{type:"info",className:"mb-3",children:[(0,Dn.jsx)("h4",{children:"New version available"}),(0,Dn.jsxs)("p",{children:["A new version of the app is available. Please reload the app to use the new version.",(0,Dn.jsx)("br",{}),"If you have added the app to your home screen, you might need to kill the app and open it again."]})]}),(0,Dn.jsxs)("button",{onClick:Gp,className:"btn btn-primary w-100 p-3",children:[(0,Dn.jsx)(Gn.g,{icon:Pn.lLb,className:"me-2"}),"Reload now"]})]})})]}):null}var Fp=e=>{var a;const n=e.closeFunc,o=e.showState,{isLoggedIn:i,userId:r,logout:s}=(0,ti.A)(),l=(0,zt.Zp)();function c(){l(ha,{state:Date.now().toString()})}const{settings:d}=(0,cl.t)(),u="dark"===d.color_theme,h=[{title:"Support us",link:Ga},{title:"Collaboration",link:Fa}],m=(0,zt.zy)(),[p,f]=(0,t.useState)("main");(0,t.useEffect)((()=>{const e=m.pathname;e.startsWith("/compendium")?f("compendium"):e.startsWith("/warband")?f("wbb"):e.startsWith("/campaigns")?f(i?"cm":"main"):f("main")}),[m]);const g=(null===(a=Op())||void 0===a?void 0:a.version)||"";return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with OffcanvasMenu.tsx"}),children:(0,Dn.jsxs)(Ap,{className:"OffcanvasMainMenu",show:o,onHide:n,responsive:e.responseshow,children:[(0,Dn.jsx)(Ap.Header,{className:"",children:(0,Dn.jsxs)(Ap.Title,{className:"",children:[(0,Dn.jsx)("div",{className:"logo-wrap",children:(0,Dn.jsx)("img",{src:u?Xm:ep,alt:"Trench Companion Logo",className:"logo",onClick:()=>{l("/"),n()}})}),(0,Dn.jsx)("div",{className:"offcanvas-close",onClick:n,children:(0,Dn.jsx)(Gn.g,{icon:Pn.yYc,className:""})})]})}),(0,Dn.jsxs)(Ap.Body,{children:["main"===p&&(0,Dn.jsxs)("div",{className:"menu-lvl-1",children:[g&&(0,Dn.jsxs)("div",{className:"menu-version-tag",children:["App Version: v",g]}),(0,Dn.jsxs)(yn.A,{classes:"menu-lvl-1-item-main",link:oa,runfunc:()=>{f("compendium")},children:[(0,Dn.jsx)("span",{className:"title",children:"Compendium"}),(0,Dn.jsx)(Wn,{imageId:2844,className:"",size:"large",imageKey:"2844-menu"})]}),(0,Dn.jsxs)(yn.A,{classes:"menu-lvl-1-item-main",link:ra,runfunc:()=>{f("wbb")},children:[(0,Dn.jsx)("span",{className:"title",children:"Warband Builder"}),(0,Dn.jsx)(Wn,{imageId:2840,className:"",size:"large",imageKey:"2840-menu"})]}),(0,Dn.jsxs)(yn.A,{classes:"menu-lvl-1-item-main",link:la,runfunc:()=>{i?f("cm"):(f("main"),l("/campaigns"))},children:[(0,Dn.jsx)("span",{className:"title",children:"Campaign Manager"}),(0,Dn.jsx)(Wn,{imageId:2841,className:"",size:"large",imageKey:"2841-menu"})]}),(0,Dn.jsxs)(yn.A,{classes:"menu-lvl-1-item-main minor",link:da,runfunc:()=>{l(da),n()},children:[(0,Dn.jsx)("span",{className:"title",children:"Your Games"}),(0,Dn.jsx)(Wn,{imageId:110229,className:"",size:"large",imageKey:"110229-menu"})]}),(0,Dn.jsxs)(yn.A,{classes:"menu-lvl-1-item-main minor",link:Ba,runfunc:()=>{l(Ba),n()},children:[(0,Dn.jsx)("span",{className:"title",children:"Blog"}),(0,Dn.jsx)(Wn,{imageId:37014,className:"",size:"large",imageKey:"37014-menu"})]}),!i&&(0,Dn.jsxs)(yn.A,{link:ha,runfunc:()=>{c(),n()},classes:"menu-lvl-1-item-secondary",children:[(0,Dn.jsx)(Gn.g,{icon:Pn.X46,className:"icon-inline-left-l"}),"Login"]}),i&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsxs)(yn.A,{link:"/profile/"+r,runfunc:()=>{l("/profile/"+r),n()},classes:"menu-lvl-1-item-secondary",children:[(0,Dn.jsx)(Gn.g,{icon:Pn.X46,className:"icon-inline-left-l"}),"Profile"]}),(0,Dn.jsxs)("a",{href:ha,className:"menu-lvl-1-item-secondary",onClick:()=>{s(),c(),window.location.reload(),n()},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.yBu,className:"icon-inline-left-l"}),"Log Out"]})]}),h.length>0&&(0,Dn.jsx)(Dn.Fragment,{children:h.map(((e,t)=>(0,Dn.jsx)(yn.A,{classes:"menu-lvl-1-item-secondary",link:e.link,runfunc:()=>{l(e.link),n()},children:e.title},t)))})]}),"compendium"===p&&(0,Dn.jsx)(Km,{controller:e.controller,onBack:()=>f("main"),onNavigate:()=>n()}),"wbb"===p&&(0,Dn.jsx)(Np,{controller:e.controller,onBack:()=>f("main"),onNavigate:()=>n()}),"cm"===p&&(0,Dn.jsx)(Dp,{controller:e.controller,onBack:()=>f("main"),onNavigate:()=>n()}),(0,Dn.jsx)(Ep,{})]})]})})};var Lp=e=>{const[a,n]=(0,t.useState)(0),o=(0,t.useRef)(null),i=(0,zt.zy)();(0,t.useEffect)((()=>{const e=()=>{o.current&&n(o.current.clientHeight+10)};window.addEventListener("load",e,!1),window.addEventListener("resize",e,!1),e()}),[i]);(0,zt.Zp)();const[r,s]=(0,t.useState)(!1),[l,c]=(0,t.useState)(!1),d=function(e){const[a,n]=(0,t.useState)(!1),o=(0,t.useRef)(0),i=(0,t.useRef)(0),r=(0,t.useRef)(0),s=(0,t.useRef)(!1),l=(0,t.useRef)(55);return(0,t.useEffect)((()=>{if(null!==e&&void 0!==e&&e.current){const t=Math.max(1,Math.round(e.current.getBoundingClientRect().height));l.current=t,document.documentElement.style.setProperty("--header-height",`${t}px`)}}),[null===e||void 0===e?void 0:e.current]),(0,t.useEffect)((()=>{const t=l.current,c=Math.max(24,l.current),d=()=>{if(i.current=0,r.current=0,null!==e&&void 0!==e&&e.current){const t=Math.max(1,Math.round(e.current.getBoundingClientRect().height));l.current=t,document.documentElement.style.setProperty("--header-height",`${t}px`)}},u=()=>{s.current||(s.current=!0,requestAnimationFrame((()=>{const e=document.documentElement,l=window.scrollY,d=window.innerHeight,u=e.scrollHeight;if(!(u-d>1))return a&&n(!1),o.current=l,void(s.current=!1);const h=l-o.current;return l<=8?(i.current=0,r.current=0,a&&n(!1),o.current=l,void(s.current=!1)):u-(l+d)<=c?(a||n(!0),i.current=0,r.current=0,o.current=l,void(s.current=!1)):Math.abs(h)<5?(o.current=l,void(s.current=!1)):(h>0?(r.current+=h,i.current=0,!a&&r.current>=12&&(n(!0),r.current=0)):(i.current+=-h,r.current=0,a&&i.current>=t&&(n(!1),i.current=0)),o.current=l,void(s.current=!1))})))};return window.addEventListener("scroll",u,{passive:!0}),window.addEventListener("resize",d),()=>{window.removeEventListener("scroll",u),window.removeEventListener("resize",d)}}),[a,e]),a}((0,t.useRef)(null));return(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with SuperHeader.tsx"}),children:(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("div",{className:"header-main-spacer"}),(0,Dn.jsx)("div",{ref:o,className:"header-main "+(d?"is-hidden":""),children:(0,Dn.jsx)(tp,{showstate:()=>s(!0),controller:e.controller,showsettings:()=>c(!0)})}),(0,Dn.jsx)(Fp,{controller:e.controller,closeFunc:()=>s(!1),responseshow:"",showState:r})]})})};var Wp=e=>{let{content:t,size:a="regular",position:n="top-right"}=e;return(0,Dn.jsx)("span",{className:`UserNotification ${a} ${n}`,children:t})};var Bp=e=>{let{item:a,manager:n,parentfunc:o}=e;const i=(0,zt.Zp)(),[r,s]=(0,t.useState)(!1),[l,c]=(0,t.useState)(null),[d,u]=(0,t.useState)(!1),[h,m]=(0,t.useState)(!1),{userId:p,isLoggedIn:f}=(0,ti.A)();(0,t.useEffect)((()=>{!async function(){const e=await a.warband_data.GetCampaignName();c(e)}()}),[a]);const g=()=>{u(!1)};return(0,Dn.jsx)("div",{className:"col-12 col-lg-6",children:(0,Dn.jsxs)("div",{className:"WbbWarbandListItem "+(h?"is-loading":""),children:[h&&(0,Dn.jsx)(Zo,{message:"Loading"}),(0,Dn.jsxs)(yn.A,{classes:"WbbWarbandListItem-link",link:`/warband/detail/${a.id}`,runfunc:()=>{i("/warband/detail/"+a.id)},children:[(0,Dn.jsx)("div",{className:"warband-item-text-wrap",children:(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("div",{className:"item-name",children:a.warband_data.Name}),(0,Dn.jsx)("div",{className:"item-faction",children:a.warband_data.Faction.MyFaction?a.warband_data.Faction.MyFaction.SelfDynamicProperty.OptionChoice.Name:""}),(0,Dn.jsxs)("div",{className:"item-cost",children:[(0,Dn.jsx)(il.A,{amount:a.warband_data.GetRatingDucats(),type:"d"})," | ",(0,Dn.jsx)(il.A,{amount:a.warband_data.GetRatingGlory(),type:"g"})]}),(0,Dn.jsxs)("div",{className:"item-campaign",children:[(0,Dn.jsx)("div",{className:"d-inline-block position-relative",children:a.warband_data.GetCampaignInvites().length>0&&!a.warband_data.GetCampaignId()&&p&&a.warband_data.IsOwner(p)?(0,Dn.jsxs)(Dn.Fragment,{children:["Campaign Invite pending",(0,Dn.jsx)(Wp,{content:"!",size:"small"})]}):(0,Dn.jsx)(Dn.Fragment,{children:l})}),(0,Dn.jsx)("br",{}),"Round: "+a.warband_data.GetCampaignCycleView()]})]})}),(0,Dn.jsx)("div",{className:"warband-item-image-wrap",children:(0,Dn.jsx)(Ul,{factionSlug:a.warband_data.Faction.MyFaction?a.warband_data.Faction.MyFaction.SelfDynamicProperty.OptionChoice.ID:"",className:"warband-item-image",size:"large"})})]}),(0,Dn.jsx)(Fn.A,{trigger:"click",placement:"left",show:r,onToggle:e=>{s(!r)},rootClose:!0,overlay:(0,Dn.jsx)(qn.A,{children:(0,Dn.jsx)(qn.A.Body,{className:"popover Wbb-item-actions-popover",children:(0,Dn.jsxs)("div",{className:"actions",children:[(0,Dn.jsxs)("div",{className:"action action-copy",onClick:async function(){return s(!1),m(!0),await n.DuplicateItem(a.warband_data),o(),m(!1),!0},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.jPR,className:"icon-inline-left-l"}),"Copy Warband"]}),(0,Dn.jsxs)("div",{className:"action action-delete",onClick:()=>{s(!1),u(!0)},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.yLS,className:"icon-inline-left-l"}),"Delete Warband"]})]})})}),children:(0,Dn.jsx)("div",{className:"Wbb-item-actions",onClick:e=>e.stopPropagation(),children:(0,Dn.jsx)(Gn.g,{icon:Pn.nx5,className:""})})}),(0,Dn.jsxs)(Il.A,{show:d,onHide:g,centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Delete Warband"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:g})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsxs)("p",{children:[(0,Dn.jsx)("strong",{children:"Warband Name: "}),a.warband_data.Name]}),(0,Dn.jsx)("p",{children:"Are you sure you want to delete this warband? This action cannot be undone."})]}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:g,children:"Cancel"}),(0,Dn.jsx)(ss.A,{variant:"primary",onClick:()=>{u(!1),m(!0),n.DeletePack(a.id).then((()=>o()))},children:"Delete"})]})]})]})})};function Hp(e){return void 0!=Up[e]&&null!=Up[e]?Up[e]:e}const Up={fc_hereticlegion:"fc_hereticlegion",fc_trenchpilgrim:"fc_trenchpilgrim",fc_ironsultanate:"fc_ironsultanate",fc_newantioch:"fc_newantioch",fc_blackgrail:"fc_cultoftheblackgrail",fc_court:"fc_courtofthesevenheadedserpent",fv_navalraidingparty:"fc_hereticlegion_fv_hereticnavalraidingparty",fv_trenchghosts:"fc_hereticlegion_fv_trenchghosts",fv_knightsofavarice:"fc_hereticlegion_fv_knightsofavarice",fv_processionofthesacredaffliction:"fc_trenchpilgrim_fv_processionofthesacredaffliction",fv_warpilgramigeofstmethodius:"fc_trenchpilgrim_fv_warpilgimageofsaintmethodius",fv_cavalcadeofthetenthplague:"fc_trenchpilgrim_fv_cavalcadeofthetenthplague",fv_fidaiofalamutthecabalofassassins:"fc_ironsultanate_fv_fidaiofalamut",fv_houseofwisdom:"fc_ironsultanate_fv_houseofwisdom",fv_defendersoftheironwall:"fc_ironsultanate_fv_defendersoftheironwall",fv_papalstatesinterventionforce:"fc_newantioch_fv_papalstatesinterventionforce",fv_eirerangers:"fc_newantioch_fc_eirerangers",fv_stostruppenofthefreestateofprussia:"fc_newantioch_fc_stortruppenofthefreestateofprussia",fv_kingdomofalbaassaultdetachment:"fc_newantioch_fv_kingdomofalbaassaultdetatchment",fv_expeditionaryforcesofabyssinia:"fc_newantioch_fv_expeditionaryforcedofabyssinia",fv_theredbrigade:"fc_newantioch_fv_redbrigade",fv_dirgeofthegreathegemon:"fc_cultoftheblackgrail_fv_dirgeofthegreathegemon",em_extradice:"es_extradice",em_duplicate:"es_duplicate",em_split:"es_split",em_reroll:"es_reroll",em_setdice:"es_setdice",em_seek:"es_seek",em_circleback:"es_circleback",em_combine:"es_combine",em_lucky:"es_lucky",lc_moonshinestash:"el_moonshinestash",lc_heavyweaponscache:"el_heavyweaponscache",lc_trenchshrine:"el_trenchshrine",lc_ruinedhouse:"el_ruinedhouse",lc_ruinedchurch:"el_ruinedchurchmasjidsynagogue",lc_survivor:"el_survivor",lc_fallensoldier:"el_fallensoldier",lc_trenchmerchant:"el_trenchmerchant",lc_mapanddocumentbag:"el_mapanddocumentbag",lc_snipersnest:"el_snipersnest",lc_fallenknight:"el_fallenknight",lc_warbandstrongbox:"el_warbandstrongbox",lc_angelicinstrument:"el_angelicinstrument",lc_abandonedprophecyradiopost:"el_abandonedpropheticradiostation",lc_potofmanna:"el_potofmanna",lc_ransackedalchemistworkshop:"el_ransackedalchemistworkshop",lc_battlefieldofcorpses:"el_battlefieldofcorpses",lc_hiddenpassages:"el_hiddenpassages",lc_blacknetworkcontact:"el_blacknetworkcontact",lc_treasureoftheholies:"el_treasureoftheholies",lc_lockofsamsonshair:"el_lockofsamsonshair",lc_sampleofholydna:"el_sampleofholydna",lc_golgothatektites:"el_golgothatektites",lc_fruitfromthetreeofgoodandevilknowledge:"el_fruitfromthetreeofgoodandevilknowledge",lc_esotericlibrary:"el_esotericlibrary",lc_jabireanalchemicalbook:"el_jabireanalchemicalbooks",lc_skullofasaint:"el_skullofasaint",lc_blackmarket:"el_blackmarket",lc_bookofgolems:"el_bookofgolems",lc_stashofdrugsanderotica:"el_stashofdrugsanderotica",lc_saintsreliquary:"el_saintsreliquary",lc_highrankingcaptive:"el_highrankingcaptain",lc_abandonedresurrectionmachine:"el_abandonedressurectionmachine",md_hereticpriest_fv_knightsofavarice:"md_hereticpriest_mammonpriest",md_hereticdeathcommando:"md_deathcommando",md_hereticchorister:"md_heretichorister",md_barbedwirebanshee:"md_heretichorister_barbedwirebanshee",md_anointedheavyinfantry:"md_annointedheavyinfantry",md_artillerywitch_fv_knightsofavarice:"md_artillerywitch_gaswitch",md_warprophet_fv_cavalcadeofthetenthplague:"md_warprophet_tenthplague",md_anchoriteshrine_warpilgramageofstmethodius:"md_anchoriteshrine_saintmethodius",md_silahdar:"md_yuzbasicaptain_mv_silahdar",md_sultanatemasterassassin:"md_sultanateassassin_mv_masterassassin",md_azebs:"md_azeb",md_kavass:"md_azeb_mv_kavass",md_assassinacolyte:"md_azeb_mv_acolyte",md_janissaries_defendersoftheironwall:"md_janissaries_mv_officer",md_faris:"md_janissaries_mv_faris",md_lionsofjabir:"md_lionofjabir",md_dervish:"md_janissaries_mv_dervish",md_homunculus:"md_takwincreation",md_lieutenant_fv_kingdomofalbaassaultdetachment:"md_lieutenant_alba",md_lieutenant_fv_eirerangers:"md_lieutenant_eire",md_trenchcleric_palalinterventionforce:"md_trenchcleric_lector",md_trenchcleric_expiditiaryforces_holywarriors:"md_trenchcleric_ethiopia",md_trenchcleric_eirerangers:"md_trenchcleric_erie",md_shocktroopers:"md_shocktrooper",md_shocktroopersstostruppenofthefreestateofprussia:"md_shocktrooper",md_mechanisedheavyinfantry_fv_kingdomofalbaassaultdetachment:"md_mechanisedheavyinfantry_alba",md_lordoftumours:"md_lordoftumors",md_plagueknight_fv_dirgeofthegreathegemon:"md_plagueknight",md_executor:"md_plagueknight_executor",md_houndoftheblackgrail:"md_houndsoftheblackgrail",md_flythrall:"md_grailthrall_flythrall",md_thebereaved:"md_grailthrall_bereaved",md_theflybereaved:"md_grailthrall_flybereaved",md_wardog:"md_trenchdog",md_guarddog:"md_trenchdog_guarddog",md_mercydog:"md_trenchdog_mercydog",md_martyrdomdog:"md_trenchdog_martyrdomdog",md_hellhound:"md_trenchdog_hellhound",md_witchburnergeneral:"md_witchburner",md_wretched:"md_wretched_court",md_wretchedheretic:"md_wretched",md_sipahi:"md_mamlukfaris_mv_sipahi",eq_pistol:"eq_pistolrevolver",eq_silencedpistol:"eq_silenecedpistol",eq_trenchknife:"eq_knifedagger",eq_polearm:"eq_trenchpolearm",eq_greataxe:"eq_greatswordaxe",eq_greatmaul:"eq_doublehandedbluntweapon",eq_sacrificialblade:"eq_sacrificialknife",eq_incendiarybullets:"eq_incendiaryammunition",eq_goldencalfalter:"eq_goldencalfaltar",eq_flail:"eq_scourgewhipflail",eq_ironcapirote:"eq_ironcapriote",eq_seigejezzail:"eq_siegejezzail",eq_bowofalumat:"eq_bowofalamut",eq_parasitegrenade:"eq_parasitegrenades",eq_masterworkjezzail:"eq_masterworksjezzail",eq_beelzebubsambrace:"eq_beelzebubsembrace",eq_wargavel:"eq_gavelofjustice",eq_tenderizermaul:"eq_sineatertenderizermaul",eq_promotion:"eq_battlefieldtitle",eq_elixerofalkhidr:"eq_exlixerofalkhidr",eq_markofcain:"eq_themarkofcain",eq_infernalarmour:"eq_infernalironarmour",eq_warriorscrown:"eq_anfarro",eq_exploration_saintsreliquary:"eq_saintsreliquary",eq_sultanategrandcannon_defendersoftheironwall:"eq_sultanategrandcannon",ij_dead:"in_dead",ij_captured:"in_captured",ij_severenervedamage:"in_severenervedamage",ij_handwound:"in_handwound",ij_lostaneye:"in_lostaneye",ij_chestwound:"in_chestwound",ij_insomniac:"in_insomniac",ij_headwound:"in_headwound",ij_shellshocked:"in_shellshocked",ij_darkmemory:"in_darkmemory",ij_paranoid:"in_paranoid",ij_lostarm:"in_lostarm",ij_legwound:"in_legwound",ij_expensivetreatment:"in_expensivetreatment",ij_possessed:"in_possessed",ij_muscledamage:"in_muscledamage",ij_minorwound:"in_minorwound",ij_fullrecovery:"in_fullrecovery",ij_hardened:"in_hardened",ij_bitterlessons:"in_bitterlessons",ij_robbed:"in_robbed",ij_facialscar:"in_facialscar",sk_closequarterscombat:"sk_closequartercombat",sk_toughasnails:"sk_hardasnails",sk_gunsligner:"sk_gunslinger",sk_shadowalker:"sk_shadowwalker",sk_blessingsofthewarriorsaint:"sk_blessingsofawarriorsaint",sk_jannisarytraining:"sk_janissarytraining",sk_sultansfavour:"sk_sultanfavour",sk_cockroachvitatlity:"sk_cockroachvitality",sk_knightoftheflies:"sk_knightofthefly",sk_godwithgod:"sk_walkwithgod",sk_knowledgeofsciences:"sk_knowledgeofscience",sk_specialassaulttraininggrail:"sk_feastondisease",sk_mendellistchemicals:"sk_mendelistchemicals",sk_specialassaulttrainingantioch:"sk_specialassaulttraining",up_heretictroopertolegionnareranged:"up_heretictrooper_hereticlegionnaire",up_heretictroopertolegionnaremelee:"up_heretictrooper_hereticlegionnaire",up_heretictroopersarcopaghusmine:"up_trenchghost_sarcophagusmine",up_kavassmelee:"up_meleemight",up_trenchpilgrimressurection:"up_resurrection",up_fiercelion:"up_fierceandbrave",up_azebskirmisher:"up_skirmisher",up_machinearmour:"up_machinearmour",up_trenchmole:"up_infiltrator",up_vanguards:"up_vanguard",up_gunslinger:"up_gunsblazing",up_brigadedog_fireteam:"up_trenchdog_fireteam",up_infiltratornaval:"up_infiltrator",up_artofassassinationhallucinogendisguise:"up_hallucinogendisguise",up_artofassassinationsecretpaths:"up_secretpaths",up_artofassassinationthunderboltofalumat:"up_thunderboltofalamut",up_artofassassinationmirageoftime:"up_mirageoftime",up_homunculuswings:"up_alchemicalformulae_wings",up_homunculusregenerativetissue:"up_alchemicalformulae_regenerativetissue",up_homunculuselementalresistance:"up_alchemicalformulae_elementalresistance",up_homunculusmassivesize:"up_alchemicalformulae_massive_size",up_homunculusenslavedmind:"up_alchemicalformulae_enslavedmind",up_homunculushumanhands:"up_alchemicalformulae_humanhands",up_homunculusinhumanstrength:"up_alchemicalformulae_inhumanstrength",up_homunculusterrifyingappearance:"up_alchemicalformulae_terrifyingappearance",up_homunculusadditionalarm:"up_alchemicalformulae_additionalarm",up_homunculustwoheads:"up_alchemicalformulae_twoheads",up_homunculushypnoticeyes:"up_alchemicalformulae_hypnoticeyes",up_homunculushawkeyes:"up_alchemicalformulae_hawkeyes",up_homunculusstartlingspeed:"up_alchemicalformulae_startlingspeed",up_homunculussealofsolomon:"up_alchemicalformulae_sealofsolomon",up_homunculusgargantuansize:"up_alchemicalformulae_gargantuansize",up_alchemistsecretsmedicine:"up_secrets_medicine",up_alchemistsecretscartographyandgeometry:"up_secrets_cartographyandgeography",up_alchemistsecretssecretsoftawkin:"up_secrets_secretsoftakwin",up_alchemistsecretschemistryandalchemy:"up_secrets_chemistryandalchemy",up_alchemistsecretsphilosiphypoetryandtheology:"up_secrets_philosophypoetrytheology",up_zealotstrengthpilgrim:"up_zealotstrength",up_furyofthelord:"rl_wrathofgod",up_houndinfection:"up_infectioushound",up_goetic_chargeofhatred:"up_goetic_wrath_chargeofhatred",up_goetic_lessermarkofcain:"up_goetic_wrath_lessermarkofcain",up_goetic_blindrage:"up_goetic_wrath_blindrage",up_goetic_enviouseyes:"up_goetic_envy_enviouseyes",up_goetic_covetedposition:"up_goetic_envy_covetedposition",up_goetic_whatisyoursismine:"up_goetic_envy_whatisyoursismine",up_goetic_forbiddenpleasures:"up_goetic_lust_forbiddenpleasures",up_goetic_exquisitepain:"up_goetic_lust_exquisitepain",up_goetic_callofflesh:"up_goetic_lust_callofflesh",up_goetic_prouddefiance:"up_goetic_pride_prouddefiance",up_goetic_iwillnotkneel:"up_goetic_pride_tooproudtofall",up_goetic_lightofthemorningstar:"up_goetic_pride_lightofsamael",up_goetic_morpheanmind:"up_goetic_sloth_morpheanmind",up_goetic_charmofacedia:"up_goetic_sloth_charmofacedia",up_goetic_daemoniummerdianum:"up_goetic_sloth_daemoniummeridianum",up_goetic_bellyofthebeast:"up_goetic_gluttony_bellyofthebeast",up_goetic_uncaringgluttony:"up_goetic_gluttony_uncaringgluttony",up_goetic_eateroftheflesh:"up_goetic_gluttony_eateroftheflesh",up_knightcompanionoftheflyranged:"up_plagueknightcompanionofthefly_base",up_knightcompanionoftheflymelee:"up_plagueknightcompanionofthefly_base",up_knightoftherottencross:"up_plagueknightrottencross",up_knightplaguealmoner:"up_plagueknightalmoner",up_goetic_bodyofgold:"up_goetic_greed_bodyofgold",up_goetic_blackheart:"up_goetic_greed_blackheart",up_goetic_universalgreed:"up_goetic_greed_universalgreed",up_dog_fireteam:"up_trenchdog_fireteam"};var Kp=a(2919),zp=a(7401);class Vp{constructor(){this.UserWarbandManager=void 0;const e=pn.o.getInstance();this.UserWarbandManager=e.UserWarbandManager}static getInstance(){return Vp.instance||(Vp.instance=new Vp),Vp.instance}async readFileOnUpload(e){return await this.UserWarbandManager.GetItemsAll(),new Promise((t=>{if(!e)return void t(!1);const a=new FileReader;a.onloadend=async()=>{try{const e=await this.ConvertImportToWarband(a.result?a.result.toString():"");t(e)}catch(xC){t(!1)}},a.readAsText(e)}))}async ConvertImportToWarband(e){const t=JSON.parse(e),a=Hp(t.Faction.ID),n=t.DucatTotal+t.PayChest+t.DucatLost,o=t.GloryTotal,i=t.Name,r=await this.UserWarbandManager.NewItem(i,a,n,o,!1,"ver_default");if(null==r)return!1;r.warband_data.Debts.ducats+=t.DucatLost,r.warband_data.Debts.glory+=t.GloryLost;const s=await r.warband_data.GetFactionEquipmentOptions(!0,!1,!0,!1),l=await Za.EquipmentFactory.GetAllFactionEquipment(!0,[],[]);for(let u=0;u<t.Armoury.length;u++){const e=Hp(t.Armoury[u].ID),a="ducats"==t.Armoury[u].CostType?0:1;await this.BuildEquipment(e,r.warband_data,t.Armoury[u].Cost,a,s,l)}const c=await r.warband_data.GetFighterOptions(!1),d=await $a.ModelFactory.GetAllFactionModel([],[]);for(let u=0;u<t.Members.length;u++){const e=Hp(t.Members[u].Model.ID),a="ducats"==t.Members[u].Model.CostType?0:1;await this.BuildModel(e,r.warband_data,t.Members[u].Model.Cost,a,c,d,t.Members[u],s,l)}for(let u=0;u<t.Locations.length;u++){const e=Hp(t.Locations[u].id);await this.BuildLocation(e,r.warband_data)}return await this.BuildExplorationSkills(t.Modifiers,r.warband_data),r.warband_data.SaveNote(t.Notes,"notes"),await this.UserWarbandManager.UpdateItemInfo(r.id),!0}async BuildLocation(e,t){try{const a=await tn.ExplorationFactory.CreateNewExplorationLocation(e,t,!0);await t.Exploration.AddExplorationLocation(a,[])}catch(xC){console.log(xC)}}async BuildEquipment(e,t,a,n,o,i){const r=o.map((e=>e.EquipmentItem.ID));try{let s=null;if(r.includes(e)){for(let t=0;t<o.length;t++)if(o[t].EquipmentItem.ID==e){s=o[t];break}}else for(let t=0;t<i.length;t++)if(i[t].EquipmentItem.ID==e){s=i[t];break}if(null!=s){let e=!1;0==a&&(e=!0),a>0&&(s.Cost=a),s.CostType=n,await t.AddStash(s,e,null)}}catch(xC){console.log(xC),console.log(e)}}async BuildModel(e,t,a,n,o,i,r,s,l){const c=o.map((e=>e.Model.ID));try{let d=null;if(c.includes(e)){for(let t=0;t<o.length;t++)if(o[t].Model.ID==e){d=o[t];break}}else for(let t=0;t<i.length;t++)if(i[t].Model.ID==e){d=i[t];break}if(null!=d){let e=!1;0==a&&(e=!0),a>0&&(d.Cost=a),d.CostType=n;const o=await t.AddFighter([d],e);for(let a=0;a<o.length;a++)await this.BuildModelFull(o[a],t,r,s,l)}}catch(xC){console.log(xC),console.log(e)}}async BuildModelFull(e,t,a,n,o){const i=e.HeldObject;for(let d=0;d<a.Injuries.length;d++){const e=Hp(a.Injuries[d].ID);await this.BuildInjury(e,i)}for(let d=0;d<a.Equipment.length;d++){const e=Hp(a.Equipment[d].ID),t="ducats"==a.Equipment[d].CostType?0:1;await this.BuildModelEquipment(e,i,a.Equipment[d].Cost,t,n,o)}for(let d=0;d<a.Skills.length;d++){const e=Hp(a.Skills[d].id);await this.BuildSkill(e,i)}const r=await i.GetWarbandUpgradeCollections(),s=[],l=Object.keys(r);for(let d=0;d<l.length;d++)for(let e=0;e<r[l[d]].upgrades.length;e++)s.push(r[l[d]].upgrades[e]);const c=await zp.UpgradeFactory.GetAllModelUpgrade();for(let d=0;d<a.Upgrades.length;d++){const e=Hp(a.Upgrades[d].ID);await this.BuildModelUpgrade(e,i,a.Upgrades[d].Cost,s,c)}i.Name=a.Name,i.Elite=a.Elite,i.Experience=a.Experience,i.SaveNote(a.Notes,"notes"),1==a.Reserve&&(i.State="reserved")}async BuildInjury(e,t){try{const a=await an.InjuryFactory.CreateNewInjury(e,t);await t.AddInjury(a)}catch(xC){console.log(xC)}}async BuildSkill(e,t){try{const a=await nn.SkillFactory.CreateNewSkill(e,t);await t.AddSkill(a)}catch(xC){console.log(xC)}}async BuildModelUpgrade(e,t,a,n,o){const i=n.map((e=>e.upgrade.UpgradeObject.ID));try{if(i.includes(e)){for(let a=0;a<n.length;a++)if(n[a].upgrade.UpgradeObject.ID==e){await t.AddUpgrade(n[a]);break}}else for(let n=0;n<o.length;n++)if(o[n].UpgradeObject.ID==e){const e={allowed:!0,cost:a,cur_count:0,discount:0,max_count:1,purchase:null,upgrade:o[n]};await t.AddUpgrade(e);break}}catch(xC){console.log(xC),console.log(e)}}async BuildModelEquipment(e,t,a,n,o,i){const r=o.map((e=>e.EquipmentItem.ID));try{let s=null;if(r.includes(e)){for(let t=0;t<o.length;t++)if(o[t].EquipmentItem.ID==e){s=o[t];break}}else for(let t=0;t<i.length;t++)if(i[t].EquipmentItem.ID==e){s=i[t];break}null!=s&&(s.Cost=a,s.CostType=n,await t.AddEquipment(s))}catch(xC){console.log(xC),console.log(e)}}async BuildExplorationSkills(e,t){let a=!1;for(let n=0;n<e.length;n++){const o=Hp(e[n].id);if("es_reroll"!=o||0!=a)try{const e=await nn.SkillFactory.CreateNewSkill(o,t),a=new Kp.WarbandProperty(e,t,null,null);await a.HandleDynamicProps(e,t,null,null),t.Exploration.Skills.push(a)}catch(xC){console.log(xC)}else a=!0}}}Vp.instance=void 0;const Yp={updated:{label:"Last Updated",defaultDir:"desc",labels:{asc:"Oldest first",desc:"Newest first"}},faction:{label:"Faction Name",defaultDir:"asc",labels:{asc:"A-Z",desc:"Z-A"}},round:{label:"Campaign Round",defaultDir:"desc",labels:{asc:"Ascending",desc:"Descending"}},ducats:{label:"Ducat Value",defaultDir:"desc",labels:{asc:"Low to high",desc:"High to low"}},campaign:{label:"Campaign Connected",defaultDir:"desc",labels:{asc:"Connected last",desc:"Connected first"}}};var Jp=e=>{const a=e.manager,n=(0,zt.Zp)(),{userId:o,isLoggedIn:i,SiteUser:r}=(0,ti.A)(),[s,l]=(0,t.useState)([]),[c,d]=(0,t.useState)(void 0),[u,h]=(0,t.useState)(0),[m,p]=(0,t.useState)(!1),[f,g]=(0,t.useState)(!1),[y,_]=(0,t.useState)(!1),[b,v]=(0,t.useState)(!1),[w,x]=(0,t.useState)("updated"),[k,C]=(0,t.useState)("desc"),[j,S]=(0,t.useState)(null),[I,A]=(0,t.useState)(null),[N,E]=(0,t.useState)(!1),{settings:T}=(0,cl.t)(),D=async function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e&&p(!0),await a.GetItemsAll(),l([...a.CurWarbands()]),h((e=>e+1)),e&&p(!1)};function R(){D(!1)}(0,t.useEffect)((()=>{D(!0)}),[]);const M=()=>{n("/warband/new")},O=(0,t.useMemo)((()=>{const e=new Set;return s.forEach((t=>{const a=t.warband_data.GetFactionName();a&&e.add(a)})),Array.from(e).sort()}),[s]),q=(0,t.useMemo)((()=>{let e=[...s];return j&&(e=e.filter((e=>e.warband_data.GetFactionName()===j))),I&&("with"===I?e=e.filter((e=>!!e.warband_data.GetCampaignId())):"without"===I&&(e=e.filter((e=>!e.warband_data.GetCampaignId())))),e.sort(((e,t)=>{switch(w){case"faction":return e.warband_data.GetFactionName().localeCompare(t.warband_data.GetFactionName());case"round":return e.warband_data.GetCampaignCycleView()-t.warband_data.GetCampaignCycleView();case"ducats":return e.warband_data.GetTotalValueDucats()-t.warband_data.GetTotalValueDucats();case"campaign":return(e.warband_data.GetCampaignId()?1:0)-(t.warband_data.GetCampaignId()?1:0);default:return e.id-t.id}})),"desc"===k?e.reverse():e}),[s,w,k,j,I]),[G,P]=(0,t.useState)(!1),[F,L]=(0,t.useState)(!1),[W,B]=(0,t.useState)(!1);const[H,U]=(0,t.useState)(!1),K=null!==j||null!==I?"btn-secondary":"btn-primary",z=null!==j?"btn-primary":"btn-secondary",V=null!==I?"btn-primary":"btn-secondary ";return(0,Dn.jsxs)("div",{className:"WbbOverviewPage",children:[(0,Dn.jsxs)("div",{className:"container",children:[(0,Dn.jsxs)("div",{className:"headline-wrap",children:[(0,Dn.jsx)(Jo,{title:"Your Warbands",description:"Manage your warbands in Trench Companion, the official resource for Trench Crusade."}),(0,Dn.jsx)("h1",{children:"Your Warbands"}),(0,Dn.jsxs)("div",{className:"btn-group warband-actions-btn-group",role:"group","aria-label":"Global warband actions",children:[(0,Dn.jsxs)(yn.A,{classes:"btn btn-primary btn-new-warband",runfunc:M,link:"/warband/new",children:[(0,Dn.jsx)(Gn.g,{icon:Pn.QLR,className:"icon-inline-left-l"}),(0,Dn.jsx)("span",{className:"new-warband-label",children:"New Warband"})]}),(0,Dn.jsxs)("div",{className:"btn-group",role:"group",children:[(0,Dn.jsx)("button",{type:"button",className:"btn btn-primary dropdown-toggle",onClick:()=>P(!G)}),G&&(0,Dn.jsx)("ul",{className:"dropdown-menu dropdown-menu-end show","aria-labelledby":"wbb-global-actions-group",children:(0,Dn.jsx)("li",{className:"dropdown-item",onClick:()=>{P(!1),L(!0)},children:"Import Compendium Warband"})})]})]})]}),(0,Dn.jsx)("div",{className:"warbands-sortings",children:(0,Dn.jsxs)("div",{className:"sorting-row",children:[(0,Dn.jsxs)("div",{className:"toggle-filters-mobile btn btn-primary btn-sm",onClick:()=>E((e=>!e)),children:["Filter",(0,Dn.jsx)(Gn.g,{icon:Pn.mRM,className:"ms-2"})]}),(0,Dn.jsxs)("div",{className:"filter-wrap "+(N?"":"filter-hide"),children:[(0,Dn.jsx)("hr",{className:"filter-wrap-mobile-spacer"}),(0,Dn.jsx)("button",{className:`btn btn-sm filter-trigger me-2 ${K}`,onClick:()=>{S(null),A(null)},children:"All"}),(0,Dn.jsx)(Fn.A,{trigger:"click",placement:"bottom-end",show:y,onToggle:e=>_(e),rootClose:!0,overlay:(0,Dn.jsx)(qn.A,{className:"popover-sort-filter-warbands",id:"popover-filter-factions",children:(0,Dn.jsxs)(qn.A.Body,{children:[(0,Dn.jsx)("div",{className:"fw-bold mb-2",children:"Filter by Faction"}),0===O.length&&(0,Dn.jsx)("div",{className:"text-muted small",children:"No factions found."}),(0,Dn.jsx)(Hi.Check,{type:"radio",id:"filter-fac-all",label:"Show all",name:"filterFactionGroup",checked:null===j,onChange:()=>S(null)}),O.length>0&&(0,Dn.jsx)("hr",{className:"my-2"}),O.map((e=>(0,Dn.jsx)(Hi.Check,{type:"radio",id:`filter-fac-${e}`,label:e,name:"filterFactionGroup",value:e,checked:j===e,onChange:()=>S(e)},e)))]})}),children:(0,Dn.jsxs)("button",{className:`btn btn-sm filter-trigger me-2 ${z}`,children:["Faction",(0,Dn.jsx)(Gn.g,{icon:Pn.Jt$,className:"ms-2"})]})}),(0,Dn.jsx)(Fn.A,{trigger:"click",placement:"bottom-end",show:b,onToggle:e=>v(e),rootClose:!0,overlay:(0,Dn.jsx)(qn.A,{className:"popover-sort-filter-warbands",id:"popover-filter-campaign",children:(0,Dn.jsxs)(qn.A.Body,{children:[(0,Dn.jsx)("div",{className:"fw-bold mb-2",children:"Filter by Campaign"}),(0,Dn.jsx)(Hi.Check,{type:"radio",id:"filter-camp-all",label:"Show all",name:"filterCampaignGroup",checked:null===I,onChange:()=>A(null)}),(0,Dn.jsx)("hr",{className:"my-2"}),(0,Dn.jsx)(Hi.Check,{type:"radio",id:"filter-camp-with",label:"In a Campaign",name:"filterCampaignGroup",value:"with",checked:"with"===I,onChange:()=>A("with")}),(0,Dn.jsx)(Hi.Check,{type:"radio",id:"filter-camp-without",label:"Not in Campaign",name:"filterCampaignGroup",value:"without",checked:"without"===I,onChange:()=>A("without")})]})}),children:(0,Dn.jsxs)("button",{className:`btn btn-sm filter-trigger me-2 ${V}`,children:["Campaign",(0,Dn.jsx)(Gn.g,{icon:Pn.Jt$,className:"ms-2"})]})})]}),(0,Dn.jsx)(Fn.A,{trigger:"click",placement:"bottom-end",show:f,onToggle:e=>g(e),rootClose:!0,overlay:(0,Dn.jsx)(qn.A,{className:"popover-sort-filter-warbands",id:"popover-sort-warbands",children:(0,Dn.jsxs)(qn.A.Body,{children:[(0,Dn.jsxs)("div",{className:"mb-3",children:[(0,Dn.jsx)("div",{className:"fw-bold mb-2",children:"Criteria"}),Object.keys(Yp).map((e=>(0,Dn.jsx)(Hi.Check,{type:"radio",id:`sort-${e}`,label:Yp[e].label,name:"sortCriteriaGroup",value:e,checked:w===e,onChange:e=>{return t=e.target.value,x(t),void C(Yp[t].defaultDir);var t}},e)))]}),(0,Dn.jsx)("hr",{}),(0,Dn.jsxs)("div",{children:[(0,Dn.jsx)("div",{className:"fw-bold mb-2",children:"Direction"}),(0,Dn.jsx)(Hi.Check,{type:"radio",id:"sort-asc",label:Yp[w].labels.asc,name:"sortDirectionGroup",value:"asc",checked:"asc"===k,onChange:e=>C(e.target.value)}),(0,Dn.jsx)(Hi.Check,{type:"radio",id:"sort-desc",label:Yp[w].labels.desc,name:"sortDirectionGroup",value:"desc",checked:"desc"===k,onChange:e=>C(e.target.value)})]})]})}),children:(0,Dn.jsxs)("button",{className:"btn btn-primary btn-sm sort-trigger "+(f?"btn-secondary":"btn-primary"),children:["Sort",(0,Dn.jsx)(Gn.g,{icon:Pn.OM7,className:"ms-2"})]})})]})}),(0,Dn.jsxs)("div",{className:"row",children:[!m&&!i&&(0,Dn.jsx)("div",{className:"col-12 col-lg-6",children:(0,Dn.jsxs)("div",{className:"login-alert",children:[(0,Dn.jsx)("h3",{children:"You are not logged in"}),(0,Dn.jsx)("p",{children:"Log in or create an account in order to save your warbands permanently across devices."}),(0,Dn.jsxs)("a",{href:"/login",className:"btn btn-primary",children:[(0,Dn.jsx)(Gn.g,{icon:Pn.X46,className:"icon-inline-left-l"}),"Login"]})]})}),m?(0,Dn.jsx)("div",{className:"warbands-loading-wrap",children:(0,Dn.jsx)(Zo,{message:"Loading your warbands"})}):(0,Dn.jsxs)(Dn.Fragment,{children:[0===q.length&&s.length>0&&(0,Dn.jsx)("div",{className:"col-12 mb-3",children:(0,Dn.jsx)(Rp.A,{type:"info",className:"mb-3",children:"No warbands match your filter criteria."})}),q.map((e=>(0,Dn.jsx)(Bp,{item:e,manager:a,parentfunc:R},e.warband_data.ID)))]}),!m&&(0,Dn.jsx)("div",{className:"col-12 col-lg-6",children:(0,Dn.jsx)(yn.A,{runfunc:M,link:"/warband/new",classes:"WbbWarbandListItem-new",children:(0,Dn.jsxs)("div",{className:"WbbWarbandListItem-new-inner",children:[(0,Dn.jsx)(Gn.g,{icon:Pn.QLR,className:"icon-inline-left-l"}),"New Warband"]})})})]},u)]}),(0,Dn.jsxs)(Il.A,{show:F,onHide:()=>L(!1),centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Import Compendium Warband"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:()=>L(!1)})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsxs)("div",{className:"mb-3",children:[(0,Dn.jsx)("label",{htmlFor:"import-file-select",className:"form-label",children:"Select a file"}),(0,Dn.jsx)("input",{className:"form-control",type:"file",id:"import-file-select",accept:".json",onChange:e=>d(e.target.files?e.target.files[0]:void 0)})]}),(0,Dn.jsxs)(Rp.A,{type:"info",className:"my-3",children:[(0,Dn.jsx)("div",{className:"fw-bold mb-2",children:"How to import compendium Warbands"}),(0,Dn.jsx)("p",{children:"You can import your warbands from the old trench compendium by following these steps:"}),(0,Dn.jsxs)("ol",{children:[(0,Dn.jsx)("li",{children:"Download your warband as JSON from the compendium"}),(0,Dn.jsx)("li",{children:"Upload the JSON file above"}),(0,Dn.jsx)("li",{children:'Click "Import Warband" below'}),(0,Dn.jsx)("li",{children:"Check if the warband imported all details correctly"})]})]}),(0,Dn.jsx)("div",{className:"mb-3",children:(0,Dn.jsxs)("button",{onClick:()=>async function(){B(!0),1==await Vp.getInstance().readFileOnUpload(c)?(D(!1),L(!1),Us.success("Warband successfully imported")):Us.error("Error: Warband could not be imported."),B(!1)}(),className:"btn btn-primary",children:[W?(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"fa-spin me-2"}):(0,Dn.jsx)(Gn.g,{icon:Pn.JmV,className:"me-2"}),"Import Warband"]})})]})]})]})};const $p=e=>{let{item:t,trueitem:a,selectedFaction:n,onSelect:o}=e;const i=null!=n&&n.ID===a.ID;return(0,Dn.jsxs)("div",{className:"WbbFactionSelectItem",children:[(0,Dn.jsxs)("div",{className:"faction-item "+(i?"selected":""),onClick:()=>o(a),children:[(0,Dn.jsx)("div",{className:"faction-name",children:a.Name}),(0,Dn.jsx)("div",{className:"faction-image-wrap",children:(0,Dn.jsx)(Ul,{factionSlug:a.GetID(),className:"faction-image"})})]}),void 0!=t&&(0,Dn.jsx)(Dn.Fragment,{children:t.SubModelsList.filter((e=>"base"!=e.var_name)).length>0&&t.SubModelsList.filter((e=>"base"!=e.var_name)).map((e=>(0,Dn.jsx)($p,{trueitem:e.faction,selectedFaction:n,onSelect:o},e.faction.ID)))})]})};var Zp=$p;var Qp=e=>{let{chosenfaction:a,onBack:n,manager:o}=e;const i=(0,zt.Zp)(),{isLoggedIn:r,authToken:s,userSettings:l,reloadIsLoggedIn:c,SiteUser:d}=(0,ti.A)(),[u,h]=(0,t.useState)(""),[m,p]=(0,t.useState)(700),[f,g]=(0,t.useState)(0),[y,_]=(0,t.useState)(!1),[b,v]=(0,t.useState)(0),[w,x]=(0,t.useState)("ver_default"),{settings:k}=(0,cl.t)();(0,t.useEffect)((()=>{!async function(){const e=new jn.J,t=await e.runEvent("getStartingDucats",a,[],700,null),n=await e.runEvent("getStartingGlory",a,[],0,null);p(t),g(n),v(b+1)}()}),[a]);const[C,j]=(0,t.useState)(!1);return(0,Dn.jsx)("div",{className:"WbbCreateNewDetailsForm",children:(0,Dn.jsxs)("div",{className:"row",children:[(0,Dn.jsx)("div",{className:"col-12 col-xl-5",children:(0,Dn.jsxs)("form",{className:"warband-options-wrap",onSubmit:e=>{e.preventDefault(),j(!0),C||async function(){const e=await o.NewItem(u,a.ID,m,f,y,w);null==e?alert("Warband creation was unsuccessful"):i("/warband/detail/"+e.id)}()},children:[(0,Dn.jsx)("h2",{className:"mb-3",children:a.Name}),(0,Dn.jsxs)("div",{className:"mb-3",children:[(0,Dn.jsx)("label",{className:"form-label",children:"Warband Name"}),(0,Dn.jsx)("input",{className:"form-control",type:"text",value:u,onChange:e=>h(e.target.value),placeholder:"Your awesome warband name"}),(0,Dn.jsx)("div",{className:"form-text",children:"You can change the name of your warband at any time."})]}),(0,Dn.jsxs)("div",{className:"mb-3",children:[(0,Dn.jsx)("label",{className:"form-label",children:"Starting Ducats"}),(0,Dn.jsx)("input",{className:"form-control",type:"number",value:m,onChange:e=>p(parseInt(e.target.value)),placeholder:"Unlimited"})]}),(0,Dn.jsxs)("div",{className:"mb-3",children:[(0,Dn.jsx)("label",{className:"form-label",children:"Starting Glory"}),(0,Dn.jsx)("input",{className:"form-control",type:"number",value:f,onChange:e=>g(parseInt(e.target.value)),placeholder:"Unlimited"})]}),(0,Dn.jsxs)("div",{className:"mb-3",children:[(0,Dn.jsxs)("div",{className:"form-check form-switch",children:[(0,Dn.jsx)("input",{className:"form-check-input",type:"checkbox",id:"removeRestrictions",checked:y,onChange:e=>_(e.target.checked)}),(0,Dn.jsx)("label",{className:"form-check-label",htmlFor:"removeRestrictions",children:"Remove Restrictions"})]}),(0,Dn.jsx)("div",{className:"form-text",children:"If restrictions are removed, the builder will not check limitations on number, cost, available hands, and other rules on equipment and model selection."})]}),(0,Dn.jsx)("button",{className:"btn btn-primary",disabled:""===u.trim()||C,children:C?(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"icon-inline-left-l fa-spin"}),"Creating Warband"]}):(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(Gn.g,{icon:Pn.QLR,className:"icon-inline-left-l"}),"Create Warband"]})})]})},b),(0,Dn.jsx)("div",{className:"col-12 col-xl-7",children:(0,Dn.jsx)("div",{className:"faction-image-wrap",children:(0,Dn.jsx)(Ul,{factionSlug:a.ID,size:"full"})})})]})})};var Xp=e=>{const a=e.manager,n=(0,zt.Zp)(),[o,i]=(0,t.useState)(null),[r,s]=(0,t.useState)(1),[l,c]=(0,t.useState)([]),[d,u]=(0,t.useState)(0);(0,t.useEffect)((()=>{!async function(){const e=mn.getInstance();await e.FactionCollectionController.initCollection(),c(e.FactionCollectionController.Collection.itemcollection),u((e=>e+1))}()}),[]);const h=e=>{i(e),s(2),window.scrollTo({top:0})},m=()=>{s(1),i(null),window.scrollTo({top:0})};return(0,Dn.jsxs)("div",{className:"WbbCreateNewPage",children:[(0,Dn.jsx)(Jo,{title:"New Warband",description:"Create a new warband for your Trench Crusade games."}),1===r&&(0,Dn.jsxs)("div",{className:"container",children:[(0,Dn.jsxs)("div",{className:"headline-wrap",children:[(0,Dn.jsxs)("h1",{children:[(0,Dn.jsx)("a",{className:"headline-back-btn",href:"/warband",onClick:()=>n("/warband"),children:(0,Dn.jsx)(Gn.g,{icon:Pn.Wzs,className:""})}),"New Warband"]}),(0,Dn.jsx)("h2",{className:"sub-headline",children:"Select Faction"})]}),(0,Dn.jsx)("div",{className:"wbb-faction-masonry",children:l.map((e=>(0,Dn.jsx)(Zp,{item:e.HeldItem,trueitem:e.HeldItem.GetBaseFac(),onSelect:h,selectedFaction:o},e.HeldItem.ID)))}),(0,Dn.jsx)("div",{className:"bottom-actions",children:(0,Dn.jsx)(yn.A,{link:"warband",classes:"btn btn-secondary",runfunc:()=>n("/warband"),children:(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(Gn.g,{icon:Pn.Wzs,className:"icon-inline-left-l"}),"Your Warbands"]})})}),(0,Dn.jsx)(oi,{format:"compendium-wide",className:"my-4"})]}),2===r&&o&&(0,Dn.jsxs)("div",{className:"container",children:[(0,Dn.jsxs)("div",{className:"headline-wrap",children:[(0,Dn.jsxs)("h1",{children:[(0,Dn.jsx)("span",{className:"headline-back-btn",onClick:m,children:(0,Dn.jsx)(Gn.g,{icon:Pn.Wzs,className:""})}),"New Warband"]}),(0,Dn.jsx)("h2",{className:"sub-headline",children:"Warband Name"})]}),(0,Dn.jsx)(Qp,{chosenfaction:o,onBack:m,manager:a}),(0,Dn.jsx)(oi,{format:"compendium-wide",className:"my-4"})]})]})},ef=a(722),tf=a(4475),af=a(9914);const nf=(0,t.createContext)(void 0),of=e=>{let{children:a,warband:n}=e;const[o,i]=(0,t.useState)(n),[r,s]=(0,t.useState)(null),[l,c]=(0,t.useState)(0),[d,u]=(0,t.useState)(!1);(0,t.useEffect)((()=>{(async()=>{if(o&&o.warband_data&&o.warband_data.UserID>0){const e=await af.e.CreatePublicUserByID(o.warband_data.UserID);e&&s(e)}else s(null)})()}),[o]);const h=()=>{null!=o&&o.warband_data.DumpCache(),c((e=>e+1))};return(0,Dn.jsx)(nf.Provider,{value:{warband:o,warbandUser:r,setWarband:i,reloadWbDisplay:h,reloadWbData:async()=>{if(o){const e=tf.y.getInstance();delete e.warbandDataCache[o.id],delete e.callWarbandCache[o.id];const t=await ef.Y.GetWarbandPublicByID(o.id);t&&(i(t),h())}},updateKey:l,modalIsOpen:d,setModalIsOpen:u},children:a})},rf=()=>{const e=(0,t.useContext)(nf);if(!e)throw new Error("useWarband must be used within WarbandProvider");return e};var sf=e=>{let{onClick:a,isActive:n}=e;const{warband:o}=rf();return null==o?(0,Dn.jsx)("div",{children:"Loading..."}):(0,Dn.jsxs)("div",{className:"WbbEditViewStash warband-meta "+(n?"active":""),onClick:a,children:[(0,Dn.jsx)("div",{className:"meta-headline",children:"Arsenal"}),(0,Dn.jsxs)("div",{className:"stash-value",children:[(0,Dn.jsx)("div",{className:"cost-ducats",children:(0,Dn.jsx)(il.A,{amount:o.warband_data.GetStashValueDucats(),type:0})}),(0,Dn.jsx)("div",{className:"cost-Glory",children:(0,Dn.jsx)(il.A,{amount:o.warband_data.GetStashValueGlory(),type:1})})]}),(0,Dn.jsxs)("div",{className:"stash-contents",children:[(0,Dn.jsxs)("div",{className:"contents-currency",children:[(0,Dn.jsx)("strong",{children:"Strongbox: "}),(0,Dn.jsx)(il.A,{amount:o.warband_data.GetStashedDucats()>1e11?"Unlimited":o.warband_data.GetStashedDucats(),type:0})," | ",(0,Dn.jsx)(il.A,{amount:o.warband_data.GetStashedGlory()>1e11?"Unlimited":o.warband_data.GetStashedGlory(),type:1})]}),(null===o||void 0===o?void 0:o.warband_data.Equipment.length)>0?(0,Dn.jsx)("div",{className:"stash-item-list",children:null===o||void 0===o?void 0:o.warband_data.Equipment.map(((e,a)=>(0,Dn.jsxs)(t.Fragment,{children:[e.GetItemName(),a<(null===o||void 0===o?void 0:o.warband_data.Equipment.length)-1&&(0,Dn.jsx)(Dn.Fragment,{children:", "})]},a)))}):(0,Dn.jsx)("div",{className:"stash-item-list",children:"No items in your arsenal"})]})]})},lf=a(4201);const cf=(0,t.createContext)(void 0),df=e=>{let{children:a}=e;const[n,o]=(0,t.useState)(null);return(0,Dn.jsx)(cf.Provider,{value:{activePopoverId:n,setActivePopoverId:o},children:a})},uf=()=>{const e=(0,t.useContext)(cf);if(!e)throw new Error("usePopover must be used within PopoverProvider");return e};var hf=e=>{let{show:a,onClose:n,onSubmit:o,warband:i,contextItem:r}=e;const[s,l]=(0,t.useState)(null),[c,d]=(0,t.useState)([]),[u,h]=(0,t.useState)(0),{updateKey:m}=rf();(0,t.useEffect)((()=>{!async function(){const e=[];if(void 0!=r.purchase&&void 0!=r.equipment&&null!=i){const t=i.GetFighters();for(let a=0;a<t.length;a++)if(r.purchase.CustomInterface.tags.is_custom)e.push(t[a].purchase);else{await t[a].model.CanAddItem(r.purchase.PurchaseInterface)&&e.push(t[a].purchase)}}d(e),h(u+1)}()}),[m]);return(0,Dn.jsx)("div",{onClick:e=>e.stopPropagation(),children:(0,Dn.jsxs)(Il.A,{className:"WbbModal WbbModalSelect",show:a,onHide:n,centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Move Battlekit to Fighter"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:()=>n()})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsx)("div",{className:"mb-3",children:(0,Dn.jsx)("div",{className:"goetic-selection-wrap",children:null===i||void 0===i?void 0:i.Models.map((e=>(0,Dn.jsx)("div",{className:`select-item ${s===e?"selected":""} ${c.includes(e)?"":" disabled"}`,onClick:()=>{c.includes(e)&&l(e)},children:e.HeldObject.GetFighterName()==e.HeldObject.GetModelName()?(0,Dn.jsx)(Dn.Fragment,{children:e.HeldObject.GetFighterName()}):(0,Dn.jsxs)(Dn.Fragment,{children:[e.HeldObject.GetModelName()," - ",e.HeldObject.GetFighterName()]})},e.HeldObject.ID+e.HeldObject.ID)))},u)}),s?(0,Dn.jsx)(Rp.A,{type:"info",className:"my-3 mx-3",children:(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsxs)("div",{children:["Moving ",void 0!=r.equipment?r.equipment.GetTrueName():""," to"]}),(0,Dn.jsx)("div",{children:s.HeldObject.GetFighterName()==s.HeldObject.GetModelName()?(0,Dn.jsx)(Dn.Fragment,{children:s.HeldObject.GetFighterName()}):(0,Dn.jsxs)(Dn.Fragment,{children:[s.HeldObject.GetModelName()," - ",s.HeldObject.GetFighterName()]})})]})}):(0,Dn.jsx)(Rp.A,{type:"warning",className:"my-3 mx-3",children:(0,Dn.jsx)("strong",{children:"Choose a target fighter"})})]}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:n,children:"Cancel"}),(0,Dn.jsx)(ss.A,{variant:"primary",onClick:()=>{null!=s&&o(s),n()},children:"Move Equipment"})]})]})})};const mf=(0,t.createContext)(void 0),pf=e=>{let{children:a,isOwner:n}=e;const[o,i]=(0,t.useState)(n?"edit":"view"),r=e=>{i(n||"edit"!==e?e:"view")},s=(0,t.useMemo)((()=>({mode:o,setMode:r,view_mode:"view"===o,edit_mode:"edit"===o,play_mode:"play"===o,print_mode:"print"===o,isOwner:n})),[o,n]);return(0,t.useEffect)((()=>(s.play_mode?document.body.classList.add("play-mode"):document.body.classList.remove("play-mode"),()=>{document.body.classList.remove("play-mode")})),[s.play_mode]),(0,Dn.jsx)(mf.Provider,{value:s,children:a})},ff=()=>{const e=(0,t.useContext)(mf);if(!e)throw new Error("useWbbMode must be used within WbbModeProvider");return e};var gf=a(9652);var yf=()=>(0,Dn.jsxs)(Rp.A,{type:"info",className:"mt-3",children:[(0,Dn.jsx)("div",{className:"fw-bold",children:"You can use the following markdown"}),(0,Dn.jsxs)("div",{className:"mt-2",children:[(0,Dn.jsxs)("div",{children:["**Bold text**"," \u2192 ",(0,Dn.jsx)("strong",{children:"Bold text"})]}),(0,Dn.jsxs)("div",{children:["*Italic text*"," \u2192 ",(0,Dn.jsx)("em",{children:"Italic text"})]}),(0,Dn.jsxs)("div",{children:["[Linktext](https://example.com)"," \u2192 ",(0,Dn.jsx)("a",{href:"/",rel:"nofollow noreferrer noopener",target:"_blank",children:"Linktext"})]})]})]}),_f=a(5968);class bf{constructor(e){this.CurGame=void 0,this.CampaignID=void 0,this.WarbandID=void 0,this.Edit=void 0,this.AbortRef=void 0,this.Cache={},this.MemoSelectedWarbandObjs=[],this.MemoWarbandsAvailable=[],this.CurGame=e.game,this.CampaignID=e.campaign_id?e.campaign_id:null,this.WarbandID=e.warband_id?e.warband_id:null,this.AbortRef=null,this.Edit=e.edit}HasGame(){return null!=this.CurGame}UpdateSelf(e){this.CurGame=e.game,this.CampaignID=e.campaign_id?e.campaign_id:null,this.WarbandID=e.warband_id?e.warband_id:null,this.Cache={},this.MemoSelectedWarbandObjs=null,this.MemoWarbandsAvailable=null}RefreshWarbandObjs(){this.MemoSelectedWarbandObjs=this.CalcSelectedWarbandObjs()}RefreshWarbandAvailable(){this.MemoWarbandsAvailable=null}CalcSelectedWarbandObjs(){return this.GetWarbands().filter((e=>null!==e)).map((e=>{const t=this.ReturnWarbandsAvailable().find((t=>t.warband_id===e));if(t)return t;if(this.Edit&&this.CurGame){const t=this.CurGame.Warbands.find((t=>Number(t.id)===Number(e)));if(t){var a;const e=this.CurGame.Players.find((e=>Number(e.id)===Number(t.user_id)));return{warband_id:Number(t.id),warband_user_id:Number(t.user_id),warband_name:(0,za.Sm)(t.name),warband_user_name:null!==(a=null===e||void 0===e?void 0:e.name)&&void 0!==a?a:`User #${t.user_id}`,campaign_id:this.CurGame.CampaignID,campaign_name:""}}}return null})).filter((e=>!!e))}UpdateDeeds(e){var t;const a=null!==(t=e.Deeds)&&void 0!==t?t:[],n=[];for(let r=0;r<a.length;r++){var o,i;const e=a[r];n.push({deedId:String(e.ID),customName:"",warbandId:null!==(o=null===(i=this.GetDeedsAssigned()[r])||void 0===i?void 0:i.warbandId)&&void 0!==o?o:null})}if(this.GetDeedsAssigned().length>a.length)for(let r=a.length;r<this.GetDeedsAssigned().length;r++)n.push(this.GetDeedsAssigned()[r]);this.Cache.TempAssignedDeeds=n}GetScenario(){var e;if(null!=this.Cache.TempScenario)return this.Cache.TempScenario;if(null==this.CurGame)return"";if(null==this.CurGame.GameData)return"";const t=null!==(e=this.CurGame.GameData.scenario_id)&&void 0!==e?e:this.CurGame.GameData;return t?String(t):""}GetDate(){return null==this.CurGame?1e3*Math.floor(Date.now()/1e3):this.CurGame.Date}GetWarbands(){return null!=this.Cache.TempWarbands?this.Cache.TempWarbands:null==this.CurGame||null==this.CurGame.WarbandIDs.length?[null]:this.CurGame.WarbandIDs.map(Number)}GetWinner(){return null!=this.Cache.TempWinner?this.Cache.TempWinner:null==this.CurGame||null==this.CurGame.GameData||void 0==this.CurGame.GameData.winner?null:this.CurGame.GameData.winner}GetRanked(){return null!=this.Cache.TempRanked?this.Cache.TempRanked:null!=this.CurGame&&(null!=this.CurGame.GameData&&(null!=this.CurGame.GameData.ranked&&this.CurGame.GameData.ranked))}GetVPs(){if(null!=this.Cache.TempVPs)return this.Cache.TempVPs;const e=this.CurGame&&this.CurGame.GameData&&this.CurGame.GameData.vp?this.CurGame.GameData.vp:{},t=Object.entries(null!==e&&void 0!==e?e:{}).map((e=>{let[t,a]=e;return[Number(t),Number(a)]}));return Object.fromEntries(t)}GetKills(){if(null!=this.Cache.TempKills)return this.Cache.TempKills;const e=this.CurGame&&this.CurGame.GameData&&this.CurGame.GameData.kills?this.CurGame.GameData.kills:{},t=Object.entries(null!==e&&void 0!==e?e:{}).map((e=>{let[t,a]=e;return[Number(t),Number(a)]}));return Object.fromEntries(t)}GetNotes(){return null!=this.Cache.TempNotes?this.Cache.TempNotes:null==this.CurGame?"":this.CurGame.Notes}GetCampaign(){return void 0!=this.Cache.TempCampaignID?this.Cache.TempCampaignID:null==this.CurGame?null:this.CurGame.CampaignID}GetDeeds(){return null==this.CurGame||null==this.CurGame.GameData||null==this.CurGame.GameData.deeds?[]:this.CurGame.GameData.deeds}GetDeedsAssigned(){if(null!=this.Cache.TempAssignedDeeds)return this.Cache.TempAssignedDeeds;if(this.GetDeeds().length<=0)return[];const e=this.GetDeeds().map((e=>{var t,a;return{deedId:"custom"===e.id?"custom":String(e.id),customName:"custom"===e.id&&null!==(t=e.name)&&void 0!==t?t:"",warbandId:null!==(a=e.warband)&&void 0!==a?a:null}}));return e}GetSelectedIDs(){return this.GetWarbands().filter((e=>null!==e))}CanSubmit(){const e=Math.floor(new Date(this.GetDate()).getTime()/1e3),t=Math.floor(Date.now()/1e3),a=Number.isFinite(e)&&e<=t,n=this.GetSelectedIDs().length>=2,o=this.GetWinner(),i="draw"===o||"number"===typeof o&&this.GetSelectedIDs().includes(o),r=!!(this.GetScenario().length>0),s=this.GetSelectedIDs().every((e=>{const t=this.GetVPs()[e];return""!==t&&Number.isFinite(Number(t))}));return n&&i&&r&&s&&a}OwnsSomeWarband(e){return null!=e&&this.CalcSelectedWarbandObjs().some((t=>Number(t.warband_user_id)===Number(e)))}ReturnWarbandsAvailable(){return null!=this.MemoWarbandsAvailable?this.MemoWarbandsAvailable:[]}async GetWarbandsAvailable(){this.AbortRef&&this.AbortRef.abort();const e=new AbortController;this.AbortRef=e;let t=(await _f.T.GetReportableWarbands(this.CampaignID,this.WarbandID,this.AbortRef)).map((e=>{var t;return{...e,warband_name:(0,za.Sm)(e.warband_name),campaign_name:(0,za.Sm)(null!==(t=e.campaign_name)&&void 0!==t?t:"")}}));return this.CampaignID&&(t=t.filter((e=>Number(e.campaign_id)===Number(this.CampaignID)))),this.MemoWarbandsAvailable=t,t}GetSelectedWarbandIDs(){return this.GetWarbands().filter((e=>null!==e))}SelectedPlayerIDs(){return Array.from(new Set(this.CalcSelectedWarbandObjs().map((e=>e.warband_user_id)).filter((e=>"number"===typeof e))))}CanBeRanked(){return 2===this.SelectedPlayerIDs().length}async TryToSubmit(e,t){if(this.GetSelectedIDs().length<=1)return"Select at least two warbands for a game";if(!this.OwnsSomeWarband(e))return"You can only report games that include at least one of your own warbands.";if(!localStorage.getItem("jwtToken"))return"Not logged in";const a=this.GetWarbands().filter((e=>null!==e)),n=Array.from(new Set(this.CalcSelectedWarbandObjs().map((e=>e.warband_user_id)))),o={};a.forEach((e=>{const t=this.GetVPs()[e];""!==t&&Number.isFinite(Number(t))&&(o[e]=Number(t))}));const i={};a.forEach((e=>{const t=this.GetKills()[e];""!==t&&Number.isFinite(Number(t))&&(i[e]=Number(t))}));const r=this.Cache.TempScenario?String(this.Cache.TempScenario):"custom",s=[];this.GetDeedsAssigned().forEach((e=>{const{deedId:n,warbandId:o,customName:i}=e;if(!n)return;let r;if("custom"===n)r=(null===i||void 0===i?void 0:i.trim())||void 0;else{const e=t.find((e=>e.id===n));e&&(r=e.name)}let l=null;null!=o&&a.includes(o)&&(l=o);const c={id:n,warband:l};r&&(c.name=r),s.push(c)}));const l=pn.o.getInstance().UserWarbandManager;if(!l)throw new Error("WarbandManager not initialized");const c=await this.GetWarbandsAvailable(),d=await Promise.all(a.map((async e=>{var t,a;const n=await l.GetWarbandExportData(e),o=c.find((t=>t.warband_id===e)),i=null!==(t=null===o||void 0===o?void 0:o.warband_user_id)&&void 0!==t?t:0,r=null!==(a=null===o||void 0===o?void 0:o.warband_name)&&void 0!==a?a:"";return{warbandId:e,warbandName:r,warbandExport:n,warbandPlayerId:i}}))),u=this.GetWinner(),h=this.GetRanked(),m=2===this.SelectedPlayerIDs().length,p={winner:u,kills:i,vp:o,scenario_id:r,date:this.Cache.TempDateUnix,deeds:s,warbands:d,ranked:!!m&&h},f={warband_ids:a,player_ids:n,date:this.Cache.TempDateUnix,data:p,notes:this.GetNotes()};this.Edit&&this.CurGame&&(f.game_report_id=this.CurGame.ID),this.GetCampaign()&&(f.campaign_id=this.GetCampaign());const g=await(this.Edit?await _f.T.updateGameReport(f):await _f.T.createGameReport(f));return null!=g?null===g||void 0===g?void 0:g.game_report_id:"Unknown API error"}AllHaveCampaign(){return this.CalcSelectedWarbandObjs().length>0&&this.CalcSelectedWarbandObjs().every((e=>null!=e.campaign_id))}UniqueCampaignIDs(){return new Set(this.CalcSelectedWarbandObjs().map((e=>e.campaign_id)).filter((e=>null!=e)))}OnlyIDs(){return 1===this.UniqueCampaignIDs().size?this.UniqueCampaignIDs().values().next().value:void 0}SameCampaign(){var e,t;const a=this.OnlyIDs();return this.AllHaveCampaign()&&"number"===typeof this.OnlyIDs()?{id:void 0!=a?a:null,name:null!==(e=null===(t=this.CalcSelectedWarbandObjs().find((e=>e.campaign_id===this.OnlyIDs())))||void 0===t?void 0:t.campaign_name)&&void 0!==e?e:""}:null}SameCampaignIDUndefinedOnly(){var e,t;const a=this.OnlyIDs(),n=this.AllHaveCampaign()&&"number"===typeof this.OnlyIDs()?{id:void 0!=a?a:null,name:null!==(e=null===(t=this.CalcSelectedWarbandObjs().find((e=>e.campaign_id===this.OnlyIDs())))||void 0===t?void 0:t.campaign_name)&&void 0!==e?e:""}:null;return null==n?void 0:null!=n.id?n.id:void 0}AddWarbandRow(){const e=this.GetWarbands().filter((e=>null!==e)).length;e>=this.ReturnWarbandsAvailable().length||(this.Cache.TempWarbands=[...this.GetWarbands(),null])}RemoveWarbandRow(e){const t=this.GetWarbands().slice();t.splice(e,1),this.Cache.TempWarbands=t.length?t:[null]}UpdateWarbandAt(e,t){const a=t?Number(t):null,n=this.GetWarbands().map(((t,n)=>n===e?a:t));this.Cache.TempWarbands=n}GetOptionsForRow(e){const t=new Set(this.GetWarbands().map(((t,a)=>a===e?null:t)).filter((e=>null!==e)));return this.ReturnWarbandsAvailable().filter((a=>!t.has(a.warband_id)||a.warband_id===this.GetWarbands()[e]))}AllSelectedIDs(){return this.GetWarbands().filter((e=>null!==e))}CanAddMore(){return this.ReturnWarbandsAvailable().length>this.AllSelectedIDs().length}GetForcedCampaignID(){var e;return null!==(e=this.CampaignID)&&void 0!==e?e:null}GetForcedCampaignName(){var e;if(!this.GetForcedCampaignID())return null;const t=this.SameCampaign();if(t&&t.id===this.GetForcedCampaignID()&&t.name)return t.name;const a=this.ReturnWarbandsAvailable().find((e=>Number(e.campaign_id)===Number(this.GetForcedCampaignID())&&e.campaign_name));return null!==(e=null===a||void 0===a?void 0:a.campaign_name)&&void 0!==e?e:null}GetWarbandDisplay(e){const t=this.ReturnWarbandsAvailable().find((t=>Number(t.warband_id)===Number(e)));if(t)return{name:t.warband_name,user:t.warband_user_name};if(this.Edit&&this.CurGame){const t=this.CurGame.Warbands.find((t=>Number(t.id)===Number(e)));if(t){var a;const e=this.CurGame.Players.find((e=>Number(e.id)===Number(t.user_id)));return{name:(0,za.Sm)(t.name),user:null!==(a=null===e||void 0===e?void 0:e.name)&&void 0!==a?a:`User #${t.user_id}`}}}return null}}var vf=e=>{var a,n,o,i,r,s;let{show:l,onClose:c,campaignId:d,warbandId:u,edit:h=!1,currentGame:m=null}=e;const{authToken:p,userId:f,isLoggedIn:g}=(0,ti.A)(),y=null!=f?Number(f):null,[_]=(0,t.useState)(new bf({game:m,campaign_id:d,warband_id:u,edit:!!h&&!(null==m)}));const[b,v]=(0,t.useState)(0);function w(){v((e=>e+1))}function x(e){_.Cache.TempWinner=e,w()}function k(e){_.Cache.TempRanked=e,w()}function C(e){_.Cache.TempCampaignID=e,w()}function j(e){_.Cache.TempAssignedDeeds=e,w()}function S(e){_.Cache.TempDateInput=e,N(e)}function I(e){_.Cache.TempDateUnix=e,T(e)}const[A,N]=(0,t.useState)((()=>(0,za.oS)(new Date))),[E,T]=(0,t.useState)((()=>Math.floor(Date.now()/1e3))),[D,R]=(0,t.useState)(!1),[M,O]=(0,t.useState)(!1),[q,G]=(0,t.useState)(!0),[P,F]=(0,t.useState)(!1),[L,W]=(0,t.useState)(null),[B,H]=(0,t.useState)([]),U=(0,t.useRef)(!1),K=(0,zt.Zp)();(0,t.useEffect)((()=>{_.RefreshWarbandObjs()}),[b,_.ReturnWarbandsAvailable(),_.Edit,m]),(0,t.useEffect)((()=>{_.UpdateSelf({game:m,campaign_id:d,warband_id:u,edit:!!h&&!(null==m)}),l&&_.Edit&&_.HasGame()&&function(){if(null==_.CurGame)return;const e=new Date(_.GetDate());T(Math.floor(e.getTime()/1e3)),N((0,za.oS)(e)),R(!0)}()}),[l,h,m,d,u]),(0,t.useEffect)((()=>{if(l&&!_.Edit){const e=new Date;S((0,za.oS)(e)),I(Math.floor(e.getTime()/1e3)),k(!1),R(!1)}}),[l,_.Edit]),(0,t.useEffect)((()=>{if(!l)return;return(async()=>{G(!0),W(null);const e=_.GetWarbandsAvailable(),t=_.AbortRef;try{await e}catch(xC){var a;if("AbortError"!==xC.name)W(null!==(a=null===xC||void 0===xC?void 0:xC.message)&&void 0!==a?a:"Failed to load warbands")}finally{_.AbortRef!==t||null!==t&&void 0!==t&&t.signal.aborted||G(!1)}})(),()=>{var e;null!=_.AbortRef&&(null===(e=_.AbortRef)||void 0===e||e.abort())}}),[l,d,u,p]),(0,t.useEffect)((()=>{l||(U.current=!1)}),[l]),(0,t.useEffect)((()=>{if(!l)return;if(_.Edit)return;if(U.current)return;if(!_.ReturnWarbandsAvailable().length)return;const e=[..._.GetWarbands()];if(u){const t=_.ReturnWarbandsAvailable().some((e=>Number(e.warband_id)===Number(u)));t&&(e[0]=u)}var t;t=e,_.Cache.TempWarbands=t,w(),U.current=!0}),[l,_.Edit,_.ReturnWarbandsAvailable(),u,b]),(0,t.useEffect)((()=>{if(_.CampaignID)return;const e=_.SameCampaign(),t=_.GetCampaign();e?t!==e.id&&C(e.id):null!==t&&C(null)}),[null===(a=_.SameCampaign())||void 0===a?void 0:a.id,b]),(0,t.useEffect)((()=>{const e=_.GetWinner();"number"!==typeof e||_.AllSelectedIDs().includes(e)||x(null)}),[b]),(0,t.useEffect)((()=>{_.CanBeRanked()?D||_.Edit||_.GetRanked()||k(!0):_.GetRanked()&&k(!1)}),[D,_.Edit,b]);const z=Math.floor(Date.now()/1e3),V=Number.isFinite(E)&&E<=z;(0,t.useEffect)((()=>{O(_.CanSubmit())}),[b,V]);const Y=t.useMemo((()=>{var e;return null!==(e=B.find((e=>String(e.ID)===String(_.GetScenario()))))&&void 0!==e?e:null}),[B,_.GetScenario()]);(0,t.useEffect)((()=>{let e=!0;return(async()=>{const t=await Xa.ScenarioFactory.GetAllScenarios();e&&H(t)})(),()=>{e=!1}}),[]);const J=t.useMemo((()=>{const e=new Map;for(const o of B)for(const i of null!==(t=o.Deeds)&&void 0!==t?t:[]){var t,a,n;const r=String(i.ID);if(!r)continue;if(e.has(r))continue;const s=null!==(a=null!==(n=i.Name)&&void 0!==n?n:"function"===typeof i.GetName?i.GetName():void 0)&&void 0!==a?a:"Unnamed Deed",l=`${s} \u2014 ${o.Name}`;e.set(r,{id:r,label:l,name:s})}return Array.from(e.values())}),[B]),$=(e,t)=>{j(_.GetDeedsAssigned().map(((a,n)=>n===e?{...a,...t}:a)))};(0,t.useEffect)((()=>{var e;Y&&(_.Edit&&(null!==(e=_.GetDeeds().length)&&void 0!==e?e:0)>0||(_.UpdateDeeds(Y),w()))}),[Y,_.Edit,m]);return g?(0,Dn.jsxs)(Il.A,{show:l,onHide:c,className:"Modal_GameEdit",backdrop:"static",keyboard:!1,centered:!0,fullscreen:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:_.Edit?"Edit Game Report":"Create Game Report"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:c})]}),(0,Dn.jsx)(Il.A.Body,{children:(0,Dn.jsx)("div",{className:"container",children:q?(0,Dn.jsx)("div",{className:"LoadingOverlay-wrap-100vh",children:(0,Dn.jsx)(Zo,{message:"Loading Warbands"})}):(0,Dn.jsxs)(Dn.Fragment,{children:[L&&(0,Dn.jsx)("div",{className:"text-danger",children:L}),(0,Dn.jsx)("h2",{children:"Warbands"}),(0,Dn.jsxs)("div",{className:"warbands-list",children:[_.GetWarbands().map(((e,t)=>{const a=_.GetOptionsForRow(t),n=q||0===a.length;return(0,Dn.jsxs)("div",{className:"warbands-element mb-3",children:[(0,Dn.jsxs)("label",{className:"form-label d-block",children:[`Warband ${t+1}`," ",(0,Dn.jsx)("span",{className:"required-asterisk",children:"*"})]}),(0,Dn.jsxs)("div",{className:"warband-selection",children:[(0,Dn.jsxs)("select",{className:"form-select",value:null!==e&&void 0!==e?e:"",onChange:e=>{_.UpdateWarbandAt(t,e.target.value),w()},disabled:n,children:[(0,Dn.jsx)("option",{value:"",children:a.length?"-":"No options available"}),a.map((e=>(0,Dn.jsx)("option",{value:e.warband_id,children:`${e.warband_user_name} | ${e.warband_name}`},e.warband_id)))]}),t>0&&(0,Dn.jsx)("div",{className:"remove-wb",onClick:()=>{_.RemoveWarbandRow(t),w()},"aria-label":`Remove Warband ${t+1}`,children:(0,Dn.jsx)(Gn.g,{icon:Pn.yLS})})]})]},t)})),_.GetWarbands().length<2&&(0,Dn.jsx)(Rp.A,{type:"warning",className:"mb-3",children:"You need to select at least two warbands to report a game."}),(0,Dn.jsxs)("button",{type:"button",className:"btn btn-primary w-100 btn-sm",onClick:()=>{_.AddWarbandRow(),w()},disabled:!_.CanAddMore()||q||0===_.ReturnWarbandsAvailable().length,title:_.CanAddMore()?void 0:"All warbands already selected",children:[(0,Dn.jsx)(Gn.g,{icon:Pn.QLR,className:"me-2"}),"Add Warband"]}),_.GetSelectedWarbandIDs().length>1&&!_.OwnsSomeWarband(y)&&(0,Dn.jsxs)(Rp.A,{type:"warning",className:"my-3",children:[(0,Dn.jsx)("div",{className:"fw-bold",children:"No own warband selected"}),(0,Dn.jsx)("div",{children:"You can only report games that include at least one of your own warbands."})]})]}),(0,Dn.jsx)("hr",{}),(0,Dn.jsx)("h2",{children:"Game"}),(0,Dn.jsxs)("div",{className:"row",children:[(0,Dn.jsx)("div",{className:"col-12 col-md-6",children:(0,Dn.jsxs)("div",{className:"mb-3",children:[(0,Dn.jsx)("label",{className:"form-label",children:"Campaign"}),(0,Dn.jsxs)("select",{className:"form-select",value:null!==(n=_.GetCampaign())&&void 0!==n?n:null!==(o=_.GetForcedCampaignID())&&void 0!==o?o:"",onChange:e=>{if(_.GetForcedCampaignID())return;const t=e.target.value;C(""===t?null:Number(t))},disabled:q||!!_.GetForcedCampaignID(),children:[!_.GetForcedCampaignID()&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("option",{value:"",children:"One-off (No campaign)"}),_.SameCampaign()&&(null===(i=_.SameCampaign())||void 0===i?void 0:i.id)&&(0,Dn.jsx)("option",{value:_.SameCampaignIDUndefinedOnly(),children:(null===(r=_.SameCampaign())||void 0===r?void 0:r.name)||`Campaign #${null===(s=_.SameCampaign())||void 0===s?void 0:s.id}`})]}),_.GetForcedCampaignID()&&(0,Dn.jsx)("option",{value:null!=_.GetForcedCampaignID()?_.GetForcedCampaignID():void 0,children:_.GetForcedCampaignName()||`Campaign #${_.GetForcedCampaignID()}`})]})]})}),(0,Dn.jsx)("div",{className:"col-12 col-md-6",children:(0,Dn.jsxs)("div",{className:"mb-3",children:[(0,Dn.jsxs)("label",{className:"form-label",children:["Scenario ",(0,Dn.jsx)("span",{className:"required-asterisk",children:"*"})]}),(0,Dn.jsxs)("select",{className:"form-select",value:_.GetScenario(),onChange:e=>{return t=e.target.value,_.Cache.TempScenario=t,void w();var t},children:[(0,Dn.jsx)("option",{value:"",children:"Select a Scenario"}),(0,Dn.jsx)("option",{value:"custom",children:"Custom Scenario"}),B.map((e=>(0,Dn.jsx)("option",{value:e.ID,children:e.Name},e.ID)))]})]})}),(0,Dn.jsx)("div",{className:"col-12 col-md-6",children:(0,Dn.jsxs)("div",{className:"mb-3",children:[(0,Dn.jsxs)("label",{className:"form-label",children:["Winner ",(0,Dn.jsx)("span",{className:"required-asterisk",children:"*"})]}),(0,Dn.jsxs)("select",{className:"form-select",value:null===_.GetWinner()?"":"draw"===_.GetWinner()?"draw":String(_.GetWinner()),onChange:e=>{const t=e.target.value;x(""===t?null:"draw"===t?"draw":Number(t))},disabled:q||0===_.GetSelectedIDs().length,children:[(0,Dn.jsx)("option",{value:"",children:"Select winner"}),(0,Dn.jsx)("option",{value:"draw",children:"Draw"}),_.GetWarbands().map((e=>{const t=_.ReturnWarbandsAvailable().find((t=>t.warband_id===e));return t&&e?(0,Dn.jsx)("option",{value:e,children:t.warband_name},e):null}))]})]})}),(0,Dn.jsx)("div",{className:"col-12 col-md-6",children:(0,Dn.jsx)("div",{className:"mb-3",children:(0,Dn.jsxs)(Hi.Group,{className:"mb-3",controlId:"gameDate",children:[(0,Dn.jsxs)(Hi.Label,{children:["Date & Time ",(0,Dn.jsx)("span",{className:"required-asterisk",children:"*"})]}),(0,Dn.jsx)(Hi.Control,{type:"datetime-local",value:A,onChange:e=>{const t=e.currentTarget.value,a=(0,za.nZ)(t);if(null!==a){const e=new Date,n=Math.floor(e.getTime()/1e3);if(a>n){S((0,za.oS)(e)),I(n)}else S(t),I(a)}else S(t)},step:60,disabled:q,max:(0,za.oS)(new Date)}),(0,Dn.jsxs)(Hi.Text,{className:"text-muted",children:["Stored as UNIX seconds: ",E]}),!V&&(0,Dn.jsx)("div",{className:"text-danger small",children:"Date cannot be in the future."})]})})}),(0,Dn.jsx)("div",{className:"col-12 col-md-6",children:(0,Dn.jsxs)(Hi.Group,{className:"mb-3",controlId:"gameRanked",children:[(0,Dn.jsx)(Hi.Label,{children:"Ranked Game"}),(0,Dn.jsx)(Hi.Check,{type:"switch",id:"ranked-switch",label:"Count this game as Ranked (affects MMR)",checked:_.GetRanked(),disabled:!_.CanBeRanked()||q,onChange:e=>{R(!0),k(e.currentTarget.checked)}}),(0,Dn.jsx)(Hi.Text,{className:"",children:_.CanBeRanked()?"Ranked games will update the players' MMR.":"Ranked games are only available for games with exactly 2 different players."})]})})]}),(0,Dn.jsx)("h2",{children:"Glorious Deeds"}),(0,Dn.jsxs)("div",{className:"row ",children:[_.GetDeedsAssigned().map(((e,t)=>{var a;return(0,Dn.jsx)("div",{className:"col-12",children:(0,Dn.jsxs)("div",{className:"row mb-3 ",children:[(0,Dn.jsxs)("div",{className:"col-12 col-md-6",children:[(0,Dn.jsxs)("label",{className:"form-label",children:[`Deed ${t+1}`,(0,Dn.jsx)("div",{className:"d-inline px-2 ms-1",onClick:()=>(e=>{j(_.GetDeedsAssigned().filter(((t,a)=>a!==e)))})(t),children:(0,Dn.jsx)(Gn.g,{icon:Pn.yLS,className:"icon-danger"})})]}),(0,Dn.jsxs)("div",{className:"row",children:[(0,Dn.jsx)("div",{className:"col",children:(0,Dn.jsxs)("select",{className:"form-select",value:e.deedId,onChange:e=>$(t,{deedId:e.target.value}),children:[(0,Dn.jsx)("option",{value:"",children:"No Deed"}),(0,Dn.jsx)("option",{value:"custom",children:"Custom Deed"}),J.map((e=>(0,Dn.jsx)("option",{value:e.id,children:e.label},e.id)))]})}),"custom"===e.deedId&&(0,Dn.jsx)("div",{className:"col",children:(0,Dn.jsx)("input",{type:"text",className:"form-control",placeholder:"Custom Deed Name (optional)",value:e.customName,onChange:e=>$(t,{customName:e.target.value})})})]})]}),(0,Dn.jsxs)("div",{className:"col-12 col-md-6",children:[(0,Dn.jsx)("label",{className:"form-label",children:"Assigned Warband"}),(0,Dn.jsxs)("select",{className:"form-select",value:null!==(a=e.warbandId)&&void 0!==a?a:"",onChange:e=>$(t,{warbandId:e.target.value?Number(e.target.value):null}),disabled:0===_.GetSelectedWarbandIDs().length,children:[(0,Dn.jsx)("option",{value:"",children:0===_.GetSelectedWarbandIDs().length?"Select warbands first":"No warband"}),_.GetSelectedWarbandIDs().map((e=>{const t=_.GetWarbandDisplay(e);return t?(0,Dn.jsxs)("option",{value:e,children:[t.name," \u2014 ",t.user]},e):null}))]})]})]})},t)})),(0,Dn.jsx)("div",{className:"col-12",children:(0,Dn.jsxs)("button",{type:"button",className:"btn btn-secondary",onClick:()=>{j([..._.GetDeedsAssigned(),{deedId:"",customName:"",warbandId:null}])},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.QLR,className:"me-2"}),"Add Deed"]})})]}),(0,Dn.jsx)("h2",{className:"mt-3",children:"Scores"}),(0,Dn.jsxs)("div",{className:"warband-score",children:[_.GetWarbands().map((e=>{var t,a;if(!e)return null;const n=_.GetWarbandDisplay(e);return n?(0,Dn.jsxs)("div",{className:"warband-score",children:[(0,Dn.jsxs)("div",{className:"fw-semibold mb-1",children:[n.name," \u2014 ",n.user]}),(0,Dn.jsxs)("div",{className:"row",children:[(0,Dn.jsx)("div",{className:"col-12 col-md-6",children:(0,Dn.jsxs)(Hi.Group,{className:"mb-3",controlId:`vp_${e}`,children:[(0,Dn.jsxs)(Hi.Label,{children:["Victory Points ",(0,Dn.jsx)("span",{className:"required-asterisk",children:"*"})]}),(0,Dn.jsx)(Hi.Control,{type:"number",inputMode:"numeric",min:0,placeholder:"-",value:null!==(t=_.GetVPs()[e])&&void 0!==t?t:"",onChange:t=>{const a=t.currentTarget.value;!function(e){_.Cache.TempVPs=e,w()}({..._.GetVPs(),[e]:""===a?"":Number(a)})}})]})}),(0,Dn.jsx)("div",{className:"col-12 col-md-6",children:(0,Dn.jsxs)(Hi.Group,{className:"mb-3",controlId:`kills_${e}`,children:[(0,Dn.jsx)(Hi.Label,{children:"Kills"}),(0,Dn.jsx)(Hi.Control,{type:"number",inputMode:"numeric",min:0,placeholder:"0",value:null!==(a=_.GetKills()[e])&&void 0!==a?a:"",onChange:t=>{const a=t.currentTarget.value;!function(e){_.Cache.TempKills=e,w()}({..._.GetKills(),[e]:""===a?"":Number(a)})}})]})})]})]},e):null})),_.GetSelectedWarbandIDs().length<1&&(0,Dn.jsxs)(Rp.A,{type:"info",className:"mb-3",children:[(0,Dn.jsx)("div",{className:"fw-bold",children:"No warbands selected"}),(0,Dn.jsx)("div",{children:"You must first select a warband to enter a game score."})]})]}),(0,Dn.jsx)("h2",{children:"Notes"}),(0,Dn.jsx)("textarea",{className:"w-100",id:"game-report-notes",rows:12,value:_.GetNotes(),onChange:e=>{return t=e.target.value,_.Cache.TempNotes=t,void w();var t}}),(0,Dn.jsx)(yf,{}),(0,Dn.jsx)("div",{className:"actions-wrap",children:P?(0,Dn.jsx)(Dn.Fragment,{children:(0,Dn.jsxs)(ss.A,{variant:"primary",disabled:!0,children:[(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"fa-spin me-2"}),"Saving Report"]})}):(0,Dn.jsx)(Dn.Fragment,{children:(0,Dn.jsxs)(ss.A,{variant:"primary",onClick:()=>(async()=>{F(!0);try{const e=await _.TryToSubmit(y,J);if("string"===typeof e)return void W(e);_.Edit?(Us.success("Game successfully Updated"),window.location.reload()):(K(`/games/${e}`),Us.success("Game successfully reported")),F(!1),c()}catch(xC){var e;Us.error("Game could not be reported"),console.log(xC),W(null!==(e=null===xC||void 0===xC?void 0:xC.message)&&void 0!==e?e:"Failed to submit game report.")}finally{F(!1)}})(),disabled:!M,children:[(0,Dn.jsx)(Gn.g,{icon:Pn.jkA,className:"me-2"}),"Save Report"]})})})]})})})]}):null};var wf=e=>{var a,n;let{id:o,type:i,item:r,context:s=null,contextuallimit:l={}}=e;if("equipment_model"==i&&(void 0==s||null==s))return(0,Dn.jsx)(Dn.Fragment,{children:"Model context not found."});const c=(0,zt.Zp)(),d=e=>t=>{t.stopPropagation(),e()},{activePopoverId:u,setActivePopoverId:h}=uf(),{warband:m,reloadWbDisplay:p,modalIsOpen:f,setModalIsOpen:g,updateKey:y}=rf(),{play_mode:_,edit_mode:b,view_mode:v,print_mode:w,setMode:x,isOwner:k}=ff(),[C,j]=(0,t.useState)(""),[S,I]=(0,t.useState)("full"),[A,N]=(0,t.useState)(!1),[E,T]=(0,t.useState)(""),[D,R]=(0,t.useState)(!1),[M,O]=(0,t.useState)(!0),[q,G]=(0,t.useState)(!1),[P,F]=(0,t.useState)(!0),[L,W]=(0,t.useState)(!1),[B,H]=(0,t.useState)(!1),[U,K]=(0,t.useState)(!1),[z,V]=(0,t.useState)(!1);(0,t.useEffect)((()=>{$("fighter"===i&&null!==r&&void 0!==r&&r.model?r.model.GetFighterName():""),r&&"object"===typeof r&&r.warband_data&&"function"===typeof r.warband_data.BuildExport&&("full"===S?T(r.warband_data.BuildExport(!0,!0,D,M,q,P,L,B,U,z).join("\n")):"compact"===S?T(r.warband_data.BuildExport(!1,!0,D,M,q,P,L,B,U,z).join("\n")):"tts-json"===S&&async function(){const e=await r.warband_data.BuildExportJSON();T(e.join("\n"))}())}),[S,r,y,D,M,q,P,L,B,U,z]);const Y=u===o,[J,$]=t.useState("fighter"===i&&null!==r&&void 0!==r&&r.model?r.model.GetFighterName():""),[Z,Q]=(0,t.useState)(!1),[X,ee]=(0,t.useState)(!1),[te,ae]=(0,t.useState)(!1),[ne,oe]=(0,t.useState)(!1),[ie,re]=(0,t.useState)("medium"),[se,le]=(0,t.useState)("");(0,t.useEffect)((()=>{(0,gf.O)(r,ie).then(le)}),[r,ie]);const[ce,de]=(0,t.useState)(!1),[ue,he]=(0,t.useState)(!1),me=()=>{he(!0)},[pe,fe]=(0,t.useState)(!1),[ge,ye]=(0,t.useState)(!1),[_e,be]=(0,t.useState)(!1),[ve,we]=(0,t.useState)(!1),[xe,ke]=(0,t.useState)(!1),[Ce,je]=(0,t.useState)(!1),[Se,Ie]=(0,t.useState)(!1),[Ae,Ne]=(0,t.useState)(!1),[Ee,Te]=(0,t.useState)(!1),[De,Re]=(0,t.useState)(""),[Me,Oe]=(0,t.useState)(!1);return(0,t.useEffect)((()=>{const e=()=>{x("edit"),document.body.removeAttribute("data-print")};return window.addEventListener("afterprint",e),()=>{window.removeEventListener("afterprint",e)}}),[]),(0,t.useEffect)((()=>{Z||X||te||ce||ue||pe||_e||ge||ve||xe||Ce||Se||Ee||ne||Me||Ae?(h(null),g(!0)):g(!!Y)}),[Z,X,te,ce,ue,pe,_e,ge,ve,xe,Ce,Se,Ee,Ae,Me,ne,Y]),(0,Dn.jsxs)("div",{onClick:e=>e.stopPropagation(),children:[(0,Dn.jsx)(Fn.A,{trigger:"click",placement:"left",show:Y,onToggle:()=>{h(Y?null:o)},rootClose:!0,overlay:(0,Dn.jsx)(qn.A,{children:(0,Dn.jsx)(qn.A.Body,{className:"popover Wbb-item-actions-popover",children:(0,Dn.jsxs)("div",{className:"actions",children:["fighter"===i&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsxs)("div",{className:"action action-rename",onClick:d((()=>{ee(!0)})),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.MT7,className:"icon-inline-left-l"}),"Rename Fighter"]}),(0,Dn.jsxs)("div",{className:"action action-export",onClick:d((()=>{oe(!0)})),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.o1d,className:"icon-inline-left-l"}),"TTS Export"]}),(0,Dn.jsxs)("div",{className:"action action-copy",onClick:d((()=>{null===m||void 0===m||m.warband_data.DuplicateFighter(r).then((e=>{0==e.includes(" Sucessfully Duplicated")?Us.error(e):null===m||void 0===m||m.warband_data.RebuildProperties().then((()=>{pn.o.getInstance().UserWarbandManager.UpdateItemInfo(m?m.id:-999).then((()=>p()))}))}))})),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.jPR,className:"icon-inline-left-l"}),"Copy Fighter"]}),(0,Dn.jsxs)("div",{className:"action action-refund",onClick:d((()=>{ae(!0)})),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.V3T,className:"icon-inline-left-l"}),"Refund Fighter"]}),(0,Dn.jsxs)("div",{className:"action action-delete",onClick:d((()=>{Q(!0)})),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.yLS,className:"icon-inline-left-l"}),"Delete Fighter"]})]}),"modifier"===i&&(0,Dn.jsx)(Dn.Fragment,{children:(0,Dn.jsxs)("div",{className:"action action-delete",onClick:()=>{de(!0)},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.yLS,className:"icon-inline-left-l"}),"Delete Modifier"]})}),"exploration"===i&&(0,Dn.jsx)(Dn.Fragment,{children:(0,Dn.jsxs)("div",{className:"action action-delete",onClick:me,children:[(0,Dn.jsx)(Gn.g,{icon:Pn.yLS,className:"icon-inline-left-l"}),"Delete Exploration"]})}),"exploration_temp"===i&&(0,Dn.jsx)(Dn.Fragment,{children:(0,Dn.jsxs)("div",{className:"action action-delete",onClick:me,children:[(0,Dn.jsx)(Gn.g,{icon:Pn.yLS,className:"icon-inline-left-l"}),"Delete Exploration"]})}),("equipment"===i||"equipment_model"===i)&&(0,Dn.jsxs)(Dn.Fragment,{children:[0==r.purchase.ModelPurchase&&(0,Dn.jsx)(Dn.Fragment,{children:(!l.noswap||1!=l.noswap)&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsxs)("div",{className:"action action-move-to-fighter",onClick:d((()=>{we(!0)})),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.CeG,className:"icon-inline-left-l"}),"Move to Fighter"]}),void 0==r.equipment.Tags.deployed_equipment&&"equipment_model"!=i&&!!l.yesdeploy&&1==l.yesdeploy&&(0,Dn.jsxs)("div",{className:"action action-move-to-fighter",onClick:d((()=>{h(null),null===m||void 0===m||m.warband_data.DeployItem(r);pn.o.getInstance().UserWarbandManager.UpdateItemInfo(m?m.id:-999).then((()=>p()))})),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.CeG,className:"icon-inline-left-l"}),"Deploy Equipment Item"]}),void 0!=r.equipment.Tags.deployed_equipment&&"equipment_model"!=i&&(0,Dn.jsxs)("div",{className:"action action-move-to-fighter",onClick:d((()=>{h(null),null===m||void 0===m||m.warband_data.UnDeployItem(r);pn.o.getInstance().UserWarbandManager.UpdateItemInfo(m?m.id:-999).then((()=>p()))})),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.CeG,className:"icon-inline-left-l"}),"Undeploy Equipment Item"]}),"equipment_model"===i&&(0,Dn.jsxs)("div",{className:"action action-move-to-stash",onClick:d((()=>{h(null),void 0!=s&&null!=s&&s.model.DeleteStash(r).then((()=>{null===m||void 0===m||m.warband_data.UnDeployItem(r),null===m||void 0===m||m.warband_data.DirectAddStash(r).then((()=>{pn.o.getInstance().UserWarbandManager.UpdateItemInfo(m?m.id:-999).then((()=>p()))}))}))})),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.INu,className:"icon-inline-left-l"}),"Move to Stash"]})]})}),(0,Dn.jsxs)("div",{className:"action action-sell",onClick:d((()=>{be(!0)})),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.wq_,className:"icon-inline-left-l"}),"Sell Item"]}),0==r.purchase.ModelPurchase&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsxs)("div",{className:"action action-copy",onClick:d((()=>{void 0==s||null==s?null===m||void 0===m||m.warband_data.CopyStash(r).then((e=>{if(0==e.includes(" Sucessfully Duplicated"))Us.error(e);else{pn.o.getInstance().UserWarbandManager.UpdateItemInfo(m?m.id:-999).then((()=>p()))}})):s.model.CopyStash(r).then((e=>{if(0==e.includes(" Sucessfully Duplicated"))Us.error(e);else{pn.o.getInstance().UserWarbandManager.UpdateItemInfo(m?m.id:-999).then((()=>p()))}}))})),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.jPR,className:"icon-inline-left-l"}),"Copy Item"]}),(0,Dn.jsxs)("div",{className:"action action-refund",onClick:d((()=>{ye(!0)})),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.V3T,className:"icon-inline-left-l"}),"Refund Item"]}),(0,Dn.jsxs)("div",{className:"action action-delete",onClick:d((()=>{fe(!0)})),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.yLS,className:"icon-inline-left-l"}),"Delete Item"]})]})]}),"advancement"===i&&(0,Dn.jsx)(Dn.Fragment,{children:(0,Dn.jsxs)("div",{className:"action action-delete",onClick:()=>{ke(!0)},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.yLS,className:"icon-inline-left-l"}),"Delete Advancement"]})}),"injury"===i&&(0,Dn.jsx)(Dn.Fragment,{children:(0,Dn.jsxs)("div",{className:"action action-delete",onClick:()=>{je(!0)},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.yLS,className:"icon-inline-left-l"}),"Remove Injury"]})}),"warband"===i&&(0,Dn.jsxs)(Dn.Fragment,{children:[_&&(0,Dn.jsxs)("div",{className:"action",onClick:()=>{h(null),x("edit")},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.hpd,className:"icon-inline-left-l"}),"Enter Edit Mode"]}),(b||v)&&(0,Dn.jsxs)("div",{className:"action",onClick:()=>{h(null),x("play")},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.xNJ,className:"icon-inline-left-l"}),"Enter Play Mode"]}),(0,Dn.jsxs)("div",{className:"action",onClick:()=>{window.location.reload()},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.lLb,className:"icon-inline-left-l"}),"Refresh Data"]}),k&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsxs)("div",{className:"action",onClick:()=>{Ie(!0)},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.MT7,className:"icon-inline-left-l"}),"Rename Warband"]}),(0,Dn.jsxs)("div",{className:"action",onClick:()=>{Oe(!0)},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.s6x,className:"icon-inline-left-l"}),"Report Game"]})]}),(0,Dn.jsxs)("div",{className:"action",onClick:()=>{Ne(!0)},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.o1d,className:"icon-inline-left-l"}),"Export Warband"]}),(0,Dn.jsxs)("div",{className:"action",onClick:()=>{h(null),(()=>{x("print"),document.body.setAttribute("data-print","print");const e=new URL(window.location.href);e.searchParams.set("print","true"),window.history.pushState({},"",e.toString())})()},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.JxU,className:"icon-inline-left-l"}),"Print Warband"]}),k&&(0,Dn.jsxs)("div",{className:"action",onClick:()=>Te(!0),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.yLS,className:"icon-inline-left-l"}),"Delete Warband"]})]})]})})}),children:(0,Dn.jsx)("div",{className:"Wbb-item-actions",onClick:e=>e.stopPropagation(),children:(0,Dn.jsx)(Gn.g,{icon:Pn.nx5})})}),Z&&(0,Dn.jsxs)(Il.A,{show:Z,onHide:()=>Q(!1),centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Delete Fighter"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:e=>{e.stopPropagation(),Q(!1)}})]}),(0,Dn.jsxs)(Il.A.Body,{children:["Are you sure you want to delete ",void 0!=r.model&&(0,Dn.jsx)("strong",{children:r.model.CurModel.GetTrueName()+" - "+r.model.GetTrueName()}),"?",(0,Dn.jsx)("p",{className:"mt-4 small",children:(0,Dn.jsxs)("i",{children:["This will remove the fighter from your roster.",(0,Dn.jsxs)("ul",{children:[(0,Dn.jsx)("li",{children:"All Equipment will be removed."}),(0,Dn.jsx)("li",{children:"The costs will not be refunded"}),(0,Dn.jsx)("li",{children:"You will not be able to recover this fighter."})]})]})})]}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:e=>{e.stopPropagation(),Q(!1)},children:"Cancel"}),(0,Dn.jsx)(ss.A,{variant:"danger",onClick:d((()=>{Q(!1),null===m||void 0===m||m.warband_data.DeleteFighterWithDebt(r,1).then((()=>{pn.o.getInstance().UserWarbandManager.UpdateItemInfo(m?m.id:-999).then((()=>p()))}))})),children:"Delete"})]})]}),te&&(0,Dn.jsxs)(Il.A,{show:te,onHide:()=>ae(!1),centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Refund Fighter"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:e=>{e.stopPropagation(),ae(!1)}})]}),(0,Dn.jsxs)(Il.A.Body,{children:["Are you sure you want to refund ",void 0!=r.model&&(0,Dn.jsx)("strong",{children:r.model.CurModel.GetTrueName()+" - "+r.model.GetTrueName()}),(0,Dn.jsx)("p",{className:"mt-4 small",children:(0,Dn.jsx)("i",{children:"This will remove the fighter from your roster and refund all costs for the fighter and its equipment."})})]}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:e=>{e.stopPropagation(),ae(!1)},children:"Cancel"}),(0,Dn.jsx)(ss.A,{variant:"danger",onClick:d((()=>{ae(!0),null===m||void 0===m||m.warband_data.DeleteFighter(r).then((()=>null===m||void 0===m?void 0:m.warband_data.RebuildProperties().then((()=>{pn.o.getInstance().UserWarbandManager.UpdateItemInfo(m?m.id:-999).then((()=>p()))}))))})),children:"Refund"})]})]}),X&&(0,Dn.jsxs)(Il.A,{show:X,onHide:()=>ee(!1),centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Rename Fighter"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:e=>{e.stopPropagation(),ee(!1)}})]}),(0,Dn.jsx)(Il.A.Body,{children:(0,Dn.jsxs)("div",{className:"mb-3",children:[(0,Dn.jsx)("label",{className:"form-label",children:"Fighter Name"}),(0,Dn.jsx)("input",{type:"text",className:"form-control",placeholder:"Fighter Name",value:J,onChange:e=>$(e.target.value)})]})}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:e=>{e.stopPropagation(),ee(!1)},children:"Cancel"}),(0,Dn.jsx)(ss.A,{variant:"primary",onClick:d((()=>{ee(!1),r.model.RenameSelf(J),null===m||void 0===m||m.warband_data.RebuildProperties().then((()=>{pn.o.getInstance().UserWarbandManager.UpdateItemInfo(m?m.id:-999).then((()=>p()))}))})),children:"Rename"})]})]}),ne&&(0,Dn.jsxs)(Il.A,{show:ne,onHide:()=>oe(!1),centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Export Fighter"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:e=>{e.stopPropagation(),oe(!1)}})]}),(0,Dn.jsx)(Il.A.Body,{children:(0,Dn.jsxs)("div",{className:"WbbExportWarband",children:[(0,Dn.jsx)("div",{className:"mb-1",children:(0,Dn.jsx)("label",{children:"Export Style"})}),(0,Dn.jsxs)("div",{className:"btn-group",role:"group",children:[(0,Dn.jsx)("button",{type:"button",className:"btn btn-secondary "+("short"==ie?"active":""),onClick:()=>re("short"),children:"Short"}),(0,Dn.jsx)("button",{type:"button",className:"btn btn-secondary "+("medium"==ie?"active":""),onClick:()=>re("medium"),children:"Medium"}),(0,Dn.jsx)("button",{type:"button",className:"btn btn-secondary "+("full"==ie?"active":""),onClick:()=>re("full"),children:"Full"})]}),(0,Dn.jsx)("hr",{}),(0,Dn.jsx)("button",{className:"btn btn-primary btn-copy mb-3 w-100 "+(A?"copy-success":""),onClick:()=>{se&&(navigator.clipboard.writeText(se),N(!0),setTimeout((()=>N(!1)),4e3))},children:A?(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(Gn.g,{icon:Pn.e68,className:"icon-inline-left-l"}),"Copied"]}):(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(Gn.g,{icon:Pn.jPR,className:"icon-inline-left-l"}),"Copy to Clipboard"]})}),(0,Dn.jsx)("div",{className:"export-wrap",children:void 0!=r.model&&(0,Dn.jsx)("pre",{style:{margin:0,padding:0,lineHeight:"1",width:"100%",whiteSpace:"pre-wrap",wordBreak:"break-word"},children:se})})]})}),(0,Dn.jsx)(Il.A.Footer,{children:(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:e=>{e.stopPropagation(),oe(!1)},children:"Close"})})]}),ce&&(0,Dn.jsxs)(Il.A,{show:ce,onHide:()=>de(!1),centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Delete Modifier"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:()=>de(!1)})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsx)("div",{className:"mb-3",children:"Are you sure you want to delete this modifier?"}),(0,Dn.jsxs)("div",{children:[(0,Dn.jsx)("strong",{children:r.Name}),"?"]})]}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:()=>de(!1),children:"Cancel"}),(0,Dn.jsx)(ss.A,{variant:"danger",onClick:()=>{de(!1),null===m||void 0===m||m.warband_data.Deletemod(r).then((()=>{pn.o.getInstance().UserWarbandManager.UpdateItemInfo(m?m.id:-999).then((()=>p()))}))},children:"Delete"})]})]}),ue&&(0,Dn.jsxs)(Il.A,{show:ue,onHide:()=>he(!1),centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Delete Exploration Location"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:()=>he(!1)})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsxs)("div",{className:"mb-3",children:["Are you sure you want to delete this exploration location?",(0,Dn.jsx)("br",{}),(0,Dn.jsx)("br",{}),(0,Dn.jsx)("strong",{children:r.Name?r.Name:null===(a=r.base_item)||void 0===a||null===(n=a.location)||void 0===n?void 0:n.Name}),"?"]}),(0,Dn.jsxs)(Rp.A,{type:"danger",className:"mx-2 my-3",children:[(0,Dn.jsx)("h5",{children:"Caution"}),(0,Dn.jsxs)("p",{children:["This will only remove the location.",(0,Dn.jsx)("br",{}),(0,Dn.jsx)("br",{}),"Any effects the location had on your warband and any equipment or modifiers you gained will not be removed."]})]})]}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:()=>he(!1),children:"Cancel"}),(0,Dn.jsx)(ss.A,{variant:"danger",onClick:()=>{he(!1),"exploration_temp"==i?void 0!=m&&m.warband_data.Exploration.DeleteTempLocation(r).then((()=>{pn.o.getInstance().UserWarbandManager.UpdateItemInfo(m?m.id:-999).then((()=>p()))})):null===m||void 0===m||m.warband_data.DeleteLocation(r).then((()=>{pn.o.getInstance().UserWarbandManager.UpdateItemInfo(m?m.id:-999).then((()=>p()))}))},children:"Delete"})]})]}),ge&&(0,Dn.jsxs)(Il.A,{show:ge,onHide:()=>ye(!1),centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Refund Battlekit"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:()=>ye(!1)})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsx)("div",{className:"mb-3",children:"Are you sure you want to refund this Battlekit?"}),r.equipment&&(0,Dn.jsxs)("div",{children:[(0,Dn.jsx)("strong",{children:r.equipment.Name}),"?"]}),(0,Dn.jsx)("br",{}),(0,Dn.jsx)("p",{children:(0,Dn.jsxs)("i",{children:["This will remove the equipment and refund its costs.","This will remove this item from your roster and refund ",Math.ceil(r.purchase.GetTotalDucats(!1,!0))+" "," ",(0,Dn.jsx)(il.A,{type:0})," "," and "+Math.ceil(r.purchase.GetTotalGlory(!1,!0))+" "," ",(0,Dn.jsx)(il.A,{type:1})," ",""]})})]}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:()=>ye(!1),children:"Cancel"}),(0,Dn.jsx)(ss.A,{variant:"danger",onClick:()=>{ye(!1),void 0==s||null==s?null===m||void 0===m||m.warband_data.DeleteStash(r).then((()=>{pn.o.getInstance().UserWarbandManager.UpdateItemInfo(m?m.id:-999).then((()=>p()))})):s.model.DeleteStash(r).then((()=>{pn.o.getInstance().UserWarbandManager.UpdateItemInfo(m?m.id:-999).then((()=>p()))}))},children:"Refund"})]})]}),pe&&(0,Dn.jsxs)(Il.A,{show:pe,onHide:()=>fe(!1),centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Delete Equipment"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:()=>fe(!1)})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsx)("div",{className:"mb-3",children:"Are you sure you want to delete this Equipment?"}),r.equipment&&(0,Dn.jsxs)("div",{children:[(0,Dn.jsx)("strong",{children:r.equipment.Name}),"?"]}),(0,Dn.jsx)("br",{}),(0,Dn.jsxs)("p",{children:[(0,Dn.jsx)(Gn.g,{icon:Pn.zpE,className:"icon-inline-left-l icon-wraning"}),(0,Dn.jsx)("i",{children:"This will remove the equipment and NOT refund its costs."})]})]}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:()=>fe(!1),children:"Cancel"}),(0,Dn.jsx)(ss.A,{variant:"danger",onClick:()=>{fe(!1),void 0==s||null==s?null===m||void 0===m||m.warband_data.DeleteStashWithDebt(r,1).then((()=>{pn.o.getInstance().UserWarbandManager.UpdateItemInfo(m?m.id:-999).then((()=>p()))})):s.model.DeleteStashWithDebt(r,1).then((()=>{pn.o.getInstance().UserWarbandManager.UpdateItemInfo(m?m.id:-999).then((()=>p()))}))},children:"Delete"})]})]}),_e&&(0,Dn.jsxs)(Il.A,{show:_e,onHide:()=>be(!1),centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Sell Battlekit"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:e=>{e.stopPropagation(),be(!1)}})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsx)("div",{className:"mb-3",children:"Are you sure you want to sell this Battlekit?"}),(0,Dn.jsx)("p",{children:void 0!=r.purchase&&(0,Dn.jsxs)("i",{children:["This will remove this item from your roster and refund half its cost rounded up.",(0,Dn.jsx)("br",{}),"You will receive: ",Math.ceil(r.purchase.GetTotalDucats(!1,!0)/(r.purchase.FullSell?1:2))+" "," ",(0,Dn.jsx)(il.A,{type:0})," "," and "+r.purchase.GetTotalGlory()+" "," ",(0,Dn.jsx)(il.A,{type:1})," ",""]})})]}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:e=>{e.stopPropagation(),be(!1)},children:"Cancel"}),(0,Dn.jsx)(ss.A,{variant:"primary",onClick:d((()=>{void 0==s||null==s?null===m||void 0===m||m.warband_data.DeleteStashWithDebt(r,.5).then((()=>{pn.o.getInstance().UserWarbandManager.UpdateItemInfo(m?m.id:-999).then((()=>p()))})):s.model.DeleteStashWithDebt(r,.5).then((()=>{pn.o.getInstance().UserWarbandManager.UpdateItemInfo(m?m.id:-999).then((()=>p()))})),be(!1)})),children:"Sell Equipment"})]})]}),ve&&(0,Dn.jsx)(hf,{show:ve,onClose:()=>we(!1),onSubmit:e=>{null!=e&&(void 0==s||null==s?(null===m||void 0===m||m.warband_data.UnDeployItem(r),null===m||void 0===m||m.warband_data.DeleteStash(r).then((()=>{e.HeldObject.DirectAddStash(r).then((()=>{pn.o.getInstance().UserWarbandManager.UpdateItemInfo(m?m.id:-999).then((()=>p()))}))}))):s.model.DeleteStash(r).then((()=>{null===m||void 0===m||m.warband_data.UnDeployItem(r),e.HeldObject.DirectAddStash(r).then((()=>{pn.o.getInstance().UserWarbandManager.UpdateItemInfo(m?m.id:-999).then((()=>p()))}))})),we(!1))},warband:m?m.warband_data:null,contextItem:r}),xe&&(0,Dn.jsxs)(Il.A,{show:xe,onHide:()=>ke(!1),centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Delete Advancement"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:e=>{e.stopPropagation(),ke(!1)}})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsx)("div",{className:"mb-3",children:"Are you sure you want to delete this Advancement?"}),(0,Dn.jsxs)("div",{children:[(0,Dn.jsx)("strong",{children:r.Name}),"?"]})]}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:e=>{e.stopPropagation(),ke(!1)},children:"Cancel"}),(0,Dn.jsx)(ss.A,{variant:"danger",onClick:d((()=>{ke(!1),void 0!=s&&null!=s&&s.model.DeleteSkill(r).then((()=>{pn.o.getInstance().UserWarbandManager.UpdateItemInfo(m?m.id:-999).then((()=>p()))}))})),children:"Delete"})]})]}),Ce&&(0,Dn.jsxs)(Il.A,{show:Ce,onHide:()=>je(!1),centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Delete Injury"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:()=>je(!1)})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsx)("div",{className:"mb-3",children:"Are you sure you want to delete this Injury?"}),(0,Dn.jsx)("div",{className:"mb-3",children:"Removing an injury will reduce the number of Scars the model suffers."}),(0,Dn.jsxs)("div",{children:[(0,Dn.jsx)("strong",{children:r.Name}),"?"]})]}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:()=>je(!1),children:"Cancel"}),(0,Dn.jsx)(ss.A,{variant:"danger",onClick:()=>{je(!1),void 0!=s&&null!=s&&s.model.DeleteInjury(r).then((()=>{pn.o.getInstance().UserWarbandManager.UpdateItemInfo(m?m.id:-999).then((()=>p()))}))},children:"Delete"})]})]}),k&&(0,Dn.jsxs)(Il.A,{show:Se,onHide:()=>Ie(!1),centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Rename Warband"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:()=>Ie(!1)})]}),(0,Dn.jsx)(Il.A.Body,{children:(0,Dn.jsxs)("div",{className:"mb-3",children:[(0,Dn.jsx)("label",{className:"form-label",children:"Warband Name"}),(0,Dn.jsx)("input",{type:"text",className:"form-control",placeholder:"Warband Name",defaultValue:null===m||void 0===m?void 0:m.warband_data.GetWarbandName(),onChange:e=>{j(e.target.value)}})]})}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:()=>Ie(!1),children:"Cancel"}),(0,Dn.jsx)(ss.A,{variant:"primary",onClick:()=>{Ie(!1),null===m||void 0===m||m.warband_data.SetWarbandName(C);pn.o.getInstance().UserWarbandManager.UpdateItemInfo(m?m.id:-999).then((()=>p()))},children:"Rename"})]})]}),k&&(0,Dn.jsxs)(Il.A,{show:Ee,onHide:()=>Te(!1),centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Delete Warband"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:()=>Te(!1)})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsx)("p",{children:"Do you really want to delete this warband?"}),(0,Dn.jsxs)("div",{className:"mb-3",children:[(0,Dn.jsx)("label",{className:"form-label small",htmlFor:"delete-warband-confirm",children:"Type 'Confirm' to delete your warband."}),(0,Dn.jsx)("input",{type:"text",id:"delete-warband-confirm",className:"form-control",placeholder:"",value:De,onChange:e=>Re(e.target.value)})]})]}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:()=>Te(!1),children:"Cancel"}),(0,Dn.jsx)(ss.A,{variant:"primary",onClick:()=>{if("Confirm"==De){pn.o.getInstance().UserWarbandManager.DeletePack(r.id).then((()=>c("/warband",{state:Date.now().toString()})))}},disabled:"Confirm"!==De,children:"Delete"})]})]}),Ae&&(0,Dn.jsxs)(Il.A,{show:Ae,onHide:()=>Ne(!1),centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Export Warband"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:()=>Ne(!1)})]}),(0,Dn.jsx)(Il.A.Body,{children:(0,Dn.jsxs)("div",{className:"WbbExportWarband",children:[(0,Dn.jsx)("div",{className:"mb-1",children:(0,Dn.jsx)("label",{children:"Export Style"})}),(0,Dn.jsxs)("div",{className:"btn-group",role:"group",children:[(0,Dn.jsx)("button",{type:"button",className:"btn btn-secondary "+("full"==S?"active":""),onClick:()=>I("full"),children:"Full"}),(0,Dn.jsx)("button",{type:"button",className:"btn btn-secondary "+("compact"==S?"active":""),onClick:()=>I("compact"),children:"Compact"}),(0,Dn.jsx)("button",{type:"button",className:"btn btn-secondary "+("tts-text"==S?"active":""),onClick:()=>I("tts-text"),children:"TTS Text"}),(0,Dn.jsx)("button",{type:"button",className:"btn btn-secondary "+("tts-json"==S?"active":""),onClick:()=>I("tts-json"),children:"TTS JSON"})]}),("full"==S||"compact"==S)&&(0,Dn.jsxs)("div",{className:"export-options",children:[(0,Dn.jsx)("div",{className:"fw-bold mb-2",children:"Options"}),(0,Dn.jsxs)("div",{className:"row",children:[(0,Dn.jsx)("div",{className:"col-12 col-md-6",children:(0,Dn.jsx)(Hi.Check,{type:"checkbox",id:"export-show-hashtags",label:"Mark Headlines",checked:M,onChange:e=>O(e.target.checked)})}),(0,Dn.jsx)("div",{className:"col-12 col-md-6",children:(0,Dn.jsx)(Hi.Check,{type:"checkbox",id:"export-show-labels",label:"Show labels",checked:P,onChange:e=>F(e.target.checked)})}),(0,Dn.jsx)("div",{className:"col-12 col-md-6",children:(0,Dn.jsx)(Hi.Check,{type:"checkbox",id:"export-show-zero-costs",label:"Show 0 costs",checked:q,onChange:e=>G(e.target.checked)})}),(0,Dn.jsx)("div",{className:"col-12 col-md-6",children:(0,Dn.jsx)(Hi.Check,{type:"checkbox",id:"export-full-currency",label:"Full currency names",checked:L,onChange:e=>W(e.target.checked)})}),(0,Dn.jsx)("div",{className:"col-12 col-md-6",children:(0,Dn.jsx)(Hi.Check,{type:"checkbox",id:"export-separate-cost-line",label:"Separate Cost Line",checked:z,onChange:e=>V(e.target.checked)})}),(0,Dn.jsx)("div",{className:"col-12 col-md-6",children:(0,Dn.jsx)(Hi.Check,{type:"checkbox",id:"export-show-fighter-names",label:"Fighter Names",checked:B,onChange:e=>H(e.target.checked)})}),(0,Dn.jsx)("div",{className:"col-12 col-md-6",children:(0,Dn.jsx)(Hi.Check,{type:"checkbox",id:"export-show-dots",label:"Show leading dots",checked:D,onChange:e=>R(e.target.checked)})}),(0,Dn.jsx)("div",{className:"col-12 col-md-6",children:(0,Dn.jsx)(Hi.Check,{type:"checkbox",id:"export-discord-formatting",label:"Discord Formatting",checked:U,onChange:e=>K(e.target.checked)})})]})]}),(0,Dn.jsx)("hr",{}),"tts-text"!==S?(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("button",{className:"btn btn-primary btn-copy mb-3 w-100 "+(A?"copy-success":""),onClick:()=>{E&&(navigator.clipboard.writeText(E),N(!0),setTimeout((()=>N(!1)),4e3))},children:A?(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(Gn.g,{icon:Pn.e68,className:"icon-inline-left-l"}),"Copied"]}):(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(Gn.g,{icon:Pn.jPR,className:"icon-inline-left-l"}),"Copy to Clipboard"]})}),"tts-json"===S&&(0,Dn.jsxs)(Rp.A,{type:"info",className:"mt-3 mb-3",children:[(0,Dn.jsx)("div",{className:"fw-bold mb-2",children:(0,Dn.jsx)("strong",{children:"Tabletop simulator JSON export"})}),(0,Dn.jsx)("p",{children:"You can use the following mod to import your warband into TTS. Follow the instructions in the mod for more details."}),(0,Dn.jsxs)("a",{href:"https://steamcommunity.com/sharedfiles/filedetails/?id=3491693177 ",rel:"noopener noreferrer nofollow",target:"_blank",className:"btn btn-primary btn-sm",children:["Trench Crusade - Scriber",(0,Dn.jsx)(Gn.g,{icon:Pn.XkK,className:"ms-2"})]}),(0,Dn.jsx)("div",{className:"fw-bold mt-3 mb-2",children:"Support and Feedback"}),(0,Dn.jsxs)("p",{children:["The TTS Importer is a third party steam tool. If you have questions or would like to leave feedback for the importer, you can use ",(0,Dn.jsx)("a",{href:"https://steamcommunity.com/workshop/filedetails/discussion/3491693177/597411554294572558/",rel:"noreferrer noopener nofollow",target:"_blank",children:"Steam"})," or ",(0,Dn.jsx)("a",{href:"https://discord.com/channels/1302770150336106576/1394658842775912519/1394658842775912519",rel:"noreferrer noopener nofollow",target:"_blank",children:"Discord"}),"."]})]}),(0,Dn.jsx)("div",{className:"export-wrap",children:r.warband_data&&(0,Dn.jsx)("pre",{style:{margin:0,padding:0,lineHeight:"1",width:"100%",whiteSpace:"pre-wrap",wordBreak:"break-word"},children:(0,Dn.jsx)("div",{children:E})})})]}):(0,Dn.jsxs)(Rp.A,{type:"info",className:"mt-3 mb-3",children:[(0,Dn.jsx)("div",{className:"fw-bold",children:(0,Dn.jsx)("strong",{children:"Tabletop simulator Text export"})}),(0,Dn.jsx)("p",{children:"If you want to use the text export for your fighters, you need to copy paste the details for each fighter into the TTS models description."})]})]})}),(0,Dn.jsx)(Il.A.Footer,{children:(0,Dn.jsx)(ss.A,{variant:"primary",onClick:()=>Ne(!1),children:"Close"})})]}),Me&&(0,Dn.jsx)(vf,{show:Me,onClose:()=>{Oe(!1)},warbandId:null===m||void 0===m?void 0:m.id})]})};var xf=e=>{let{title:t,value:a,onClick:n,overrideplay:o}=e;const{play_mode:i,edit_mode:r,view_mode:s,print_mode:l,mode:c,setMode:d}=ff();return(0,Dn.jsxs)("div",{className:"WbbOptionBox",onClick:e=>{e.stopPropagation()},children:[t&&(0,Dn.jsx)("div",{className:"WbbOptionBox-title",children:t}),(0,Dn.jsxs)("div",{className:"WbbOptionBox-body",children:[(0,Dn.jsx)("div",{className:"WbbOptionBox-value",children:""===a?(0,Dn.jsx)(Dn.Fragment,{children:"-"}):(0,Dn.jsx)(Dn.Fragment,{children:a})}),r&&1!=o&&(0,Dn.jsxs)("div",{className:"btn btn-primary",onClick:n,children:[(0,Dn.jsx)(Gn.g,{icon:Pn.hpd,className:"icon-inline-left"}),"Change"]})]})]})},kf=a(5792);var Cf=e=>{let{show:a,onClose:n,currentChoice:o,onSubmit:i,choiceparent:r}=e;const[s,l]=(0,t.useState)(o),[c,d]=(0,t.useState)(null),u=e=>{i(e),n()};const h=r.Option.Selections.length>0&&r.Option.Selections.every((e=>"FactionEquipmentRelationship"===function(e){var t,a,n,o;return null!==(t=null!==(a=null!==(n=null===e||void 0===e?void 0:e.__typename)&&void 0!==n?n:null===e||void 0===e?void 0:e.type)&&void 0!==a?a:null===e||void 0===e?void 0:e.kind)&&void 0!==t?t:null===e||void 0===e||null===(o=e.constructor)||void 0===o?void 0:o.name}(null===e||void 0===e?void 0:e.value)));return(0,Dn.jsx)("div",{onClick:e=>{e.stopPropagation()},children:(0,Dn.jsxs)(Il.A,{show:a,onHide:n,className:"WbbModal WbbModalSelect WbbEditSelectionModal",centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Edit Option"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:n})]}),(0,Dn.jsx)(Il.A.Body,{children:(0,Dn.jsx)("div",{className:"select-items-wrap",children:r.Option.Selections.map(((e,a)=>(0,Dn.jsx)(t.Fragment,{children:h?(0,Dn.jsx)(kf.A,{id:e.id,title:e.value.Name,opened:c===e.id,selected:(null===s||void 0===s?void 0:s.id)===e.id&&!c,available:!0,onClick:()=>{d(e.id===c?null:e.id)},equipment:e.value.EquipmentItem,isSubmitting:!1,onSubmit:()=>{u(e)},submitBtnString:"Choose Equipment",cost:e.value.Cost,costType:(0,za.Ie)(e.value.CostType)},`select-item-${e.id}`):(0,Dn.jsx)("div",{className:"select-item "+(s===e?"selected":""),onClick:()=>l(e),children:e.display_str},e.id+e.display_str)},a)))})}),!h&&(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:n,children:"Cancel"}),s?(0,Dn.jsx)(ss.A,{variant:"primary",onClick:()=>u(s),disabled:s===o,children:"Save Option"}):(0,Dn.jsx)(ss.A,{variant:"primary",disabled:s===o,children:"Save Option"})]})]})})};var jf=e=>{let{choice:a,property:n,hypeproperty:o,overrideplay:i,hidedesc:r=!1,leadtext:s}=e;const{warband:l,reloadWbDisplay:c,updateKey:d}=rf(),[u,h]=(0,t.useState)(!1),[m,p]=(0,t.useState)((0,Dn.jsx)(Dn.Fragment,{})),[f,g]=(0,t.useState)(!1),[y,_]=(0,t.useState)(0),{play_mode:b,edit_mode:v,view_mode:w,print_mode:x,setMode:k}=ff();return(0,t.useEffect)((()=>{!async function(){if(await n.RegenerateOptions(),null!=a.SelectedChoice){const e=new jn.J,t=await e.runEvent("returnWbbOptionDisplay",n,[],null,a.SelectedChoice),o=await e.runEvent("showWbbOptionOptions",n,[],!1,a.SelectedChoice);g(o),null!=t&&(p(t),_((e=>e+1)))}}()}),[d]),(0,Dn.jsxs)("div",{className:"WbbOptionSelect",children:[(0,Dn.jsx)(xf,{title:a.Option.Name,value:(void 0!=s?s:"")+a.GetSelectedTitle(),onClick:()=>h(!0),overrideplay:i||a.Option.AutoSelect||!a.CanChange()&&null!=a.SelectedChoice}),v&&(0,Dn.jsx)(Cf,{show:u,onClose:()=>h(!1),currentChoice:a.GetSelected(),onSubmit:e=>{null!=e&&1!=i&&a.UserUpdateSelection(e?e.id:null).then((()=>{void 0!=o?o.RegenerateSubProperties().then((()=>o.RegenerateOptions().then((()=>{pn.o.getInstance().UserWarbandManager.UpdateItemInfo(l?l.id:-999).then((()=>c()))})))):n.RegenerateSubProperties().then((()=>n.RegenerateOptions().then((()=>{pn.o.getInstance().UserWarbandManager.UpdateItemInfo(l?l.id:-999).then((()=>c()))}))))}))},choiceparent:a}),!r&&(0,Dn.jsx)("div",{className:"SingleOptionSetDisplay-Details",children:m},y)]},d)};var Sf=e=>{const a=e.item.HeldObject.MyEquipment.SelfDynamicProperty.OptionChoice,n=e.item.HeldObject,[o]=(0,t.useState)(a.Stats),[i]=(0,t.useState)(e.item.ItemCost),[r]=(0,t.useState)(e.item.CostType),{updateKey:s}=rf(),[l,c]=(0,t.useState)(0);(0,t.useEffect)((()=>{c((e=>e+1))}),[s]);const d=n.GetRange();let u="";void 0!=o.hands_melee&&(u+=o.hands_melee.toString()+" Hands");let h="";return void 0!=o.hands_ranged&&(h+=o.hands_ranged.toString()+" Hands"),(0,Dn.jsx)("div",{children:o&&(""!=d||""!=u||a.Modifiers.length>0||""!=h||null!=i&&null!=r)&&(0,Dn.jsx)("table",{className:"WbbEquipmentStats",children:(0,Dn.jsxs)("tbody",{children:[""!=d&&(0,Dn.jsxs)("tr",{children:[(0,Dn.jsx)("td",{className:"label-cell",children:"Range"}),(0,Dn.jsx)("td",{children:d})]}),(""!=u||""!=h)&&(0,Dn.jsxs)("tr",{children:[(0,Dn.jsx)("td",{className:"label-cell",children:"Hands"}),(0,Dn.jsxs)("td",{children:[(0,Dn.jsx)("div",{children:""!=h&&h+" (Ranged)"}),(0,Dn.jsx)("div",{children:""!=u&&u+" (Melee)"})]})]}),a.Modifiers.length>0&&(0,Dn.jsxs)("tr",{children:[(0,Dn.jsx)("td",{className:"label-cell",children:"Modifiers"}),(0,Dn.jsx)("td",{children:(0,Dn.jsx)("div",{children:a.Modifiers.join(", ")})})]}),null!=r&&null!=i&&(0,Dn.jsxs)("tr",{children:[(0,Dn.jsx)("td",{className:"label-cell",children:"Cost"}),(0,Dn.jsx)("td",{children:(0,Dn.jsx)(il.A,{amount:i,type:r})})]})]})})},l)},If=a(6252);var Af=e=>{const a=e.item.HeldObject.MyEquipment.SelfDynamicProperty.OptionChoice,{settings:n}=(0,cl.t)(),{updateKey:o}=rf(),[i,r]=(0,t.useState)(0);return(0,t.useEffect)((()=>{r((e=>e+1))}),[o]),(0,Dn.jsxs)("div",{className:"WbbEquipmentMain",children:[e.keywords.length>0&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("div",{className:"text-label mb-2",children:"Keywords"}),(0,Dn.jsx)(If.A,{className:"mb-2",keywords:e.keywords})]}),(a.Description.length>0||a.Abilities.length>0)&&(0,Dn.jsxs)("div",{className:"text-element text-rules",children:[(0,pl.fE)(a,a.Description),a.Abilities.map((e=>(0,Dn.jsx)(t.Fragment,{children:(0,Dn.jsx)(_l.A,{data:e})},"equip_ability_"+a.ID+"_ability_id_"+e.ID)))]}),a.Lore.length>0&&n.show_lore&&(0,Dn.jsxs)("div",{className:"text-element text-lore",children:[(0,Dn.jsx)("div",{className:"text-label",children:"Lore"}),(0,pl.fE)(a,a.Lore)]})]},i)},Nf=a(5855);var Ef=e=>{let{item:a,fighter:n}=e;const{warband:o,updateKey:i}=rf(),{play_mode:r,edit_mode:s,view_mode:l,print_mode:c,mode:d,setMode:u}=ff(),[h,m]=(0,t.useState)(!1),[p,f]=(0,t.useState)(a.Sellable),[g,y]=(0,t.useState)(!1),[_,b]=(0,t.useState)([]),[v,w]=(0,t.useState)(""),[x,k]=(0,t.useState)(0),C=a.HeldObject.MyEquipment.SelfDynamicProperty.OptionChoice;return(0,t.useEffect)((()=>{!async function(){if(null!==n&&void 0!=n)await a.HeldObject.BuildNewProperties(n.model,a);else{const e=await a.HeldObject.GetKeywords();b(e)}const e=a.HeldObject.EquipmentCache;null!=e&&(f(e.CanRemove),y(e.CanSwap),b(e.KeywordsCache),w(a.HeldObject.GetRange())),k((e=>e+1))}()}),[i,a,n]),(0,Dn.jsxs)(t.Fragment,{children:[(0,Dn.jsxs)("div",{className:`WbbEquipmentListItem ${r?"play-mode":""} ${c?"print-mode":""} `,onClick:r?void 0:()=>m(!0),children:[(0,Dn.jsxs)("div",{className:"equipment-name",children:[C.GetTrueName(),void 0!=a.CustomInterface&&a.CustomInterface.tags.is_custom?" (Manually Added)":""]}),(!r||c)&&(0,Dn.jsx)("div",{className:"equipment-cost",children:a.ItemCost>0&&(0,Dn.jsx)(il.A,{amount:a.ItemCost,type:a.CostType})}),(!r||c)&&(0,Dn.jsx)("div",{className:"equipment-modifiers",children:C.GetModifiers()}),p&&s&&(null==n||"dead"!=n.model.State)&&(0,Dn.jsx)(wf,{id:`equipment-${null==n||void 0==n?null===o||void 0===o?void 0:o.warband_data.Equipment.indexOf(a):n.model.Equipment.indexOf(a)}`,type:null==n||void 0==n?"equipment":"equipment_model",item:{purchase:a,equipment:a.HeldObject},context:null==n||void 0==n?null:n,contextuallimit:{noswap:g,yesdeploy:_.map((e=>e.ID)).includes("kw_deployable")}}),r&&(0,Dn.jsxs)("div",{className:"equipment-details",children:[(0,Dn.jsxs)("table",{children:[""!=v&&(0,Dn.jsxs)("tr",{children:[(0,Dn.jsx)("td",{children:"Range"}),(0,Dn.jsx)("td",{children:v})]}),C.Category&&(0,Dn.jsxs)("tr",{children:[(0,Dn.jsx)("td",{children:"Type"}),(0,Dn.jsx)("td",{children:(0,za.h8)(C.Category)})]}),C.GetModifiers()&&(0,Dn.jsxs)("tr",{children:[(0,Dn.jsx)("td",{children:"Modifiers"}),(0,Dn.jsx)("td",{children:C.GetModifiers()})]})]}),_.length>0&&(0,Dn.jsx)("div",{className:"keywords-wrap",children:(0,Dn.jsx)(If.A,{keywords:_})}),C.Abilities.length>0&&(0,Dn.jsx)("div",{className:"abilities",children:C.Abilities.map(((e,a)=>(0,Dn.jsxs)("div",{className:"ability",children:[(0,Dn.jsx)("span",{className:"ability-name",children:e.Name+": "}),(0,Dn.jsx)("span",{className:"ability-description",children:e.Description.map(((e,a)=>(0,Dn.jsx)(t.Fragment,{children:(0,Dn.jsx)(Nf.A,{data:e,parent:C})},+a)))})]},a)))}),C.GetDescription()&&(0,Dn.jsx)("div",{className:"rules-wrap",children:(0,Dn.jsx)("div",{className:"rules",children:C.GetDescription()})})]}),a.HeldObject.MyEquipment.SelfDynamicProperty.Selections.length>0&&(0,Dn.jsx)(Dn.Fragment,{children:a.HeldObject.MyEquipment.SelfDynamicProperty.Selections.map((e=>(0,Dn.jsx)(jf,{property:a.HeldObject.MyEquipment,choice:e},a.HeldObject.MyEquipment.SelfDynamicProperty.Selections.indexOf(e))))})]}),(0,Dn.jsxs)(Il.A,{show:h,onHide:()=>m(!1),className:"WbbEquipmentListItem-Detail",centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:C.GetTrueName()}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:e=>{e.stopPropagation(),m(!1)}})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsx)(Sf,{item:a,fighter:n}),(0,Dn.jsx)(Af,{item:a,keywords:_})]})]})]},x)};var Tf=e=>{let{title:a,children:n,initiallyOpen:o=!1,nopad:i=!1}=e;const[r,s]=(0,t.useState)(o);return(0,Dn.jsxs)("div",{className:"WbbFighterCollapse fighter-card-collapse",children:[(0,Dn.jsxs)("div",{className:"fighter-card-collapse-title",onClick:()=>s(!r),children:[(0,Dn.jsx)("span",{children:a}),(0,Dn.jsx)("span",{className:"collapse-chevron-wrap",children:(0,Dn.jsx)(Gn.g,{icon:r?Pn.w2A:Pn.Jt$,className:""})})]}),(0,Dn.jsx)(ll.A,{in:r,children:(0,Dn.jsx)("div",{className:"fighter-card-collapse-content",children:(0,Dn.jsx)("div",{className:i?"":"fighter-card-collapse-content-inner",children:n})})})]})};var Df=e=>{let{advancement:a,fighter:n}=e;const{play_mode:o,edit_mode:i,view_mode:r,print_mode:s,setMode:l}=ff(),c=a.SelfDynamicProperty.OptionChoice,[d,u]=(0,t.useState)(!1);return(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsxs)("div",{className:"WbbEditViewAdvancement "+(o?"play-mode":""),onClick:o?void 0:()=>u(!0),children:[(0,Dn.jsxs)("span",{className:"advancement-title",children:[a.Name,o&&(0,Dn.jsx)(Dn.Fragment,{children:": "})]}),(0,Dn.jsx)("span",{className:"advancement-description",children:(0,pl.fE)(c,c.Description)}),a.SelfDynamicProperty.Selections.length>0&&(0,Dn.jsx)(Dn.Fragment,{children:a.SelfDynamicProperty.Selections.map((e=>(0,Dn.jsx)(jf,{property:a,choice:e},a.SelfDynamicProperty.Selections.indexOf(e))))}),i&&(0,Dn.jsx)(wf,{id:`advancement-${a.ID}`,type:"advancement",item:a,context:n})]}),(0,Dn.jsxs)(Il.A,{show:d,onHide:()=>u(!1),className:"WbbEditViewAdvancement-Modal",centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:a.Name}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:e=>{e.stopPropagation(),u(!1)}})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsx)("div",{className:"advancement-description",children:(0,pl.fE)(c,c.Description)}),a.SelfDynamicProperty.Selections.length>0&&(0,Dn.jsx)(Dn.Fragment,{children:a.SelfDynamicProperty.Selections.map((e=>(0,Dn.jsx)(jf,{property:a,choice:e},a.SelfDynamicProperty.Selections.indexOf(e))))})]})]})]})};var Rf=e=>{let{injury:a,fighter:n}=e;const{play_mode:o,edit_mode:i,view_mode:r,print_mode:s,setMode:l}=ff(),c=a.SelfDynamicProperty.OptionChoice,[d,u]=(0,t.useState)(!1);return(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsxs)("div",{className:"WbbEditViewInjury "+(o?"play-mode":""),onClick:o?void 0:()=>u(!0),children:[(0,Dn.jsxs)("span",{className:"injury-title",children:[a.Name,o&&(0,Dn.jsx)(Dn.Fragment,{children:": "})]}),(0,Dn.jsx)("span",{className:"injury-description",children:(0,pl.fE)(c,c.Description)}),a.SelfDynamicProperty.Selections.length>0&&(0,Dn.jsx)(Dn.Fragment,{children:a.SelfDynamicProperty.Selections.map((e=>(0,Dn.jsx)(jf,{property:a,choice:e},a.SelfDynamicProperty.Selections.indexOf(e))))}),!o&&(0,Dn.jsx)(wf,{id:`injury-${a.ID}`,type:"injury",item:a,context:n})]}),(0,Dn.jsxs)(Il.A,{show:d,onHide:()=>u(!1),className:"WbbEditViewInjury-Modal",centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:a.Name}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:e=>{e.stopPropagation(),u(!1)}})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsx)("div",{className:"injury-description",children:(0,pl.fE)(c,c.Description)}),a.SelfDynamicProperty.Selections.length>0&&(0,Dn.jsx)(Dn.Fragment,{children:a.SelfDynamicProperty.Selections.map((e=>(0,Dn.jsx)(jf,{property:a,choice:e},a.SelfDynamicProperty.Selections.indexOf(e))))})]})]})]})};function Mf(e,a){var n,o;const[i,r]=(0,t.useState)(!1),s=null!==(n=null===a||void 0===a?void 0:a.preDelay)&&void 0!==n?n:100,l=null!==(o=null===a||void 0===a?void 0:a.postDelay)&&void 0!==o?o:1e3;return{handleSubmit:()=>{r(!0),setTimeout((()=>{e(),setTimeout((()=>{r(!1)}),l)}),s)},isSubmitting:i}}var Of=e=>{let{show:a,onClose:n,onSubmit:o,fighter:i,category:r}=e;const[s,l]=(0,t.useState)(null),{warband:c}=rf(),[d,u]=(0,t.useState)([]),[h,m]=(0,t.useState)({}),[p,f]=(0,t.useState)(0),{handleSubmit:g,isSubmitting:y}=Mf((e=>{const t=d.find((e=>e.ID===s));t&&(o(t),n())}));return(0,t.useEffect)((()=>{!async function(){const e=await i.model.GetModelEquipmentOptions();if(void 0!=e){const t=c?c.warband_data.EquipmentRelCache:{},a=Object.keys(t),n=await i.model.GetSpecialCache(),o=Object.keys(n),s={};for(let e=0;e<a.length;e++)t[a[e]].facrel.EquipmentItem.Category==r&&(s[a[e]]=t[a[e]]);for(let e=0;e<o.length;e++)n[o[e]].facrel.EquipmentItem.Category==r&&(s[o[e]]=n[o[e]]);u(e.filter((e=>e.EquipmentItem.Category==r))),m(s),f(p+1)}}()}),[a]),(0,Dn.jsxs)(Il.A,{show:a,onHide:n,className:"WbbModal WbbModalSelect WbbModalAddEquipment",centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Select Equipment"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:n})]}),(0,Dn.jsx)(Il.A.Body,{children:Object.keys(h).map(((e,t)=>(0,Dn.jsx)(kf.A,{id:h[e].facrel.ID,title:h[e].facrel.EquipmentItem.GetTrueName(),opened:s===h[e].facrel.ID,available:d.some((t=>t.GetID()===h[e].facrel.GetID())),onClick:()=>{l((t=>t===h[e].facrel.ID?null:h[e].facrel.ID))},equipment:h[e].facrel.EquipmentItem,isSubmitting:y,onSubmit:g,submitBtnString:"Add Equipment",cost:h[e].cost,costType:(0,za.Ie)(h[e].facrel.CostType),limit:h[e].limit>0?"Limit: "+h[e].count_cur+"/"+h[e].limit:"",restrictions:h[e].restrictions,unavailableString:h[e].failure.length>0?h[e].failure:i.model.GetFailureOfItem(h[e].facrel.GetID())},`select-item-${t}`)))}),(0,Dn.jsx)(Il.A.Footer,{children:(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:n,children:"Cancel"})})]},p)};var qf=e=>{let{title:a,children:n,initiallyOpen:o=!1,nopad:i=!1}=e;const[r,s]=(0,t.useState)(o);return(0,Dn.jsxs)("div",{className:"WbbGeneralCollapse",children:[(0,Dn.jsxs)("div",{className:"WbbGeneralCollapse-title",onClick:()=>s(!r),children:[(0,Dn.jsx)("span",{children:a}),(0,Dn.jsx)("span",{className:"collapse-chevron-wrap",children:(0,Dn.jsx)(Gn.g,{icon:r?Pn.w2A:Pn.Jt$,className:""})})]}),(0,Dn.jsx)(ll.A,{in:r,children:(0,Dn.jsx)("div",{className:"WbbGeneralCollapse-content",children:(0,Dn.jsx)("div",{className:i?"":"WbbGeneralCollapse-content-inner",children:n})})})]})};var Gf=e=>{let{show:a,onClose:n,onSubmit:o,fighter:i}=e;const[r,s]=(0,t.useState)(null),{warband:l}=rf(),[c,d]=(0,t.useState)([]),[u,h]=(0,t.useState)(0),{handleSubmit:m,isSubmitting:p}=Mf((()=>{const e=function(e){for(let t=0;t<c.length;t++)for(let a=0;a<c[t].list.length;a++)if(c[t].list[a].ID==e)return c[t].list[a];return null}(r);e&&(o(e),s(null),n())}));return(0,t.useEffect)((()=>{!async function(){const e=await i.model.GetModelSkillOptions();void 0!=e&&(d(e),h(u+1))}()}),[a]),(0,Dn.jsxs)(Il.A,{show:a,onHide:n,className:"WbbModal WbbModalSelect WbbModalAddAdvancement",centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Select Advancement"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:n})]}),(0,Dn.jsxs)(Il.A.Body,{children:[null==(null===l||void 0===l?void 0:l.warband_data.GetPatron())&&(0,Dn.jsx)("div",{className:"alert alert-warning my-4 mx-4",children:"No patron selected"}),c.map(((e,a)=>(0,Dn.jsx)(qf,{title:(0,za.h8)(e.skillgroup.GetTrueName()),initiallyOpen:!1,nopad:!0,children:(0,Dn.jsx)(Dn.Fragment,{children:e.list.map(((e,a)=>(0,Dn.jsxs)(t.Fragment,{children:[(0,Dn.jsx)("div",{className:"select-item "+(r===e.ID?"selected":""),onClick:()=>{return t=e.ID,void s(r==t?null:t);var t},children:(0,Dn.jsxs)("div",{className:"item-name",children:[-1!=e.TableVal&&(0,Dn.jsx)(Dn.Fragment,{children:e.TableVal+" - "}),e.GetTrueName()]})},e.ID),r===e.ID&&(0,Dn.jsx)("div",{className:"select-item-details",children:(0,pl.fE)(e,e.Description)})]},a)))})},e.skillgroup.ID+""+a)))]}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:n,children:"Cancel"}),(0,Dn.jsxs)(ss.A,{variant:"primary",onClick:m,disabled:!r||p,children:[p?(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"icon-inline-left fa-spin "}):(0,Dn.jsx)(Gn.g,{icon:Pn.QLR,className:"icon-inline-left"}),"Add Advancement"]})]})]})};var Pf=e=>{let{show:a,onClose:n,onSubmit:o,fighter:i}=e;const[r,s]=(0,t.useState)(null),[l,c]=(0,t.useState)([]),[d,u]=(0,t.useState)(0),{handleSubmit:h,isSubmitting:m}=Mf((()=>{const e=l.find((e=>e.ID===r));e&&(o(e),s(null),n())}));return(0,t.useEffect)((()=>{!async function(){const e=await i.model.GetModelInjuryOptions();void 0!=e&&(c(e),u(d+1))}()}),[a]),(0,Dn.jsxs)(Il.A,{show:a,onHide:n,className:"WbbModal WbbModalSelect WbbModalAddInjury",centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Select Injury"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:n})]}),(0,Dn.jsx)(Il.A.Body,{children:l.map(((e,a)=>(0,Dn.jsxs)(t.Fragment,{children:[(0,Dn.jsx)("div",{className:"select-item "+(r===e.ID?"selected":""),onClick:()=>{return t=e.ID,void s(r==t?null:t);var t},children:(0,Dn.jsx)("span",{className:"item-name",children:e.TableVal+" - "+e.Name})},e.ID),r===e.ID&&(0,Dn.jsx)("div",{className:"select-item-details",children:(0,pl.fE)(e,e.Description)})]},a)))},d),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:n,children:"Cancel"}),(0,Dn.jsxs)(ss.A,{variant:"primary",onClick:h,disabled:!r||m,children:[m?(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"icon-inline-left fa-spin "}):(0,Dn.jsx)(Gn.g,{icon:Pn.QLR,className:"icon-inline-left"}),"Add Injury"]})]})]})};var Ff=e=>{let{show:a,onClose:n,onSubmit:o,fighter:i,maxXP:r}=e;const[s,l]=(0,t.useState)(i.GetExperiencePoints());(0,t.useEffect)((()=>{l(i.GetExperiencePoints())}),[i.GetExperiencePoints()]);const{handleSubmit:c,isSubmitting:d}=Mf((()=>{o(s),n()}));return(0,Dn.jsxs)(Il.A,{show:a,onHide:n,className:"WbbEditFighterExperience",centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Set Experience Points"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:n})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsx)("div",{children:"Fighter"}),(0,Dn.jsxs)("div",{className:"mb-3",children:[(0,Dn.jsx)("strong",{children:i.GetModelName()})," - ",i.GetFighterName()]}),(0,Dn.jsxs)("label",{className:"form-label",children:["Experience Points: ",i.GetExperiencePoints(),s!=i.GetExperiencePoints()&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(Gn.g,{icon:Pn.dmS,className:"icon-inline-right "}),(0,Dn.jsxs)("span",{className:""+(s>i.GetExperiencePoints()?"plusxp":"minusxp"),children:[" ",s]})]})]}),(0,Dn.jsx)("div",{className:"xp-boxes",children:Array.from({length:r},((e,t)=>{const a=t+1,n=i.boldXpIndices.includes(a),o=a<=i.GetExperiencePoints(),r=a>i.GetExperiencePoints()&&a<=s,l=a<=i.GetExperiencePoints()&&a>s;return(0,Dn.jsxs)("div",{className:"xp-box "+(n?"xp-box-bold":""),children:[l?(0,Dn.jsx)(Gn.g,{icon:Pn.GRI,className:"minusxp"}):(0,Dn.jsx)(Dn.Fragment,{children:o&&(0,Dn.jsx)(Gn.g,{icon:Pn.e68})}),r&&(0,Dn.jsx)(Gn.g,{icon:Pn.e68,className:"plusxp"})]},a)}))}),(0,Dn.jsxs)("div",{className:"mt-3",children:[(0,Dn.jsx)("button",{className:"btn btn-secondary me-3 pe-3 ps-3",onClick:()=>l(Math.max(0,s-1)),children:(0,Dn.jsx)(Gn.g,{icon:Pn.EZy})}),(0,Dn.jsx)("button",{className:"btn btn-secondary pe-3 ps-3",onClick:()=>l(s+1),children:(0,Dn.jsx)(Gn.g,{icon:Pn.QLR})})]})]}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:n,children:"Cancel"}),(0,Dn.jsxs)(ss.A,{variant:"primary",onClick:c,disabled:d,children:[d&&(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"icon-inline-left fa-spin "}),"Save Experience"]})]})]})};var Lf=e=>{let{show:a,onClose:n,onSubmit:o,maxScars:i,fighter:r}=e;const[s,l]=(0,t.useState)(r.GetBattleScars());(0,t.useEffect)((()=>{l(r.GetBattleScars())}),[a,r.GetBattleScars()]);const{handleSubmit:c,isSubmitting:d}=Mf((()=>{o(s),n()}));return(0,Dn.jsxs)(Il.A,{show:a,onHide:n,className:"WbbModal WbbEditBattleScars",centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Edit Battle Scars"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:n})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsx)("div",{children:"Fighter"}),(0,Dn.jsxs)("div",{className:"mb-3",children:[(0,Dn.jsx)("strong",{children:r.GetModelName()})," - ",r.GetFighterName()]}),(0,Dn.jsxs)("label",{className:"form-label",children:["Battle Scars: ",r.GetBattleScars(),s!=r.GetBattleScars()&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(Gn.g,{icon:Pn.dmS,className:"icon-inline-right "}),(0,Dn.jsxs)("span",{className:""+(s>r.GetBattleScars()?"plusscar":"minusscar"),children:[" ",s]})]})]}),(0,Dn.jsx)("div",{className:"battle-scar-boxes",children:Array.from({length:i},((e,t)=>{const a=t+1,n=a<=r.GetBattleScars(),o=a===i,l=a>r.GetBattleScars()&&a<=s,c=a<=r.GetBattleScars()&&a>s;return(0,Dn.jsxs)("div",{className:"battle-scar-box",children:[o&&(0,Dn.jsx)(Gn.g,{icon:Pn.B0L,className:"final-icon"}),c?(0,Dn.jsx)(Gn.g,{icon:Pn.GRI,className:"minusscar"}):(0,Dn.jsx)(Dn.Fragment,{children:n&&(0,Dn.jsx)(Gn.g,{icon:Pn.GRI})}),l&&(0,Dn.jsx)(Gn.g,{icon:Pn.GRI,className:"plusscar"})]},a)}))}),(0,Dn.jsxs)("div",{className:"mt-3",children:[(0,Dn.jsx)("button",{className:"btn btn-secondary me-3 pe-3 ps-3",onClick:()=>l(Math.max(0,s-1)),children:(0,Dn.jsx)(Gn.g,{icon:Pn.EZy})}),(0,Dn.jsx)("button",{className:"btn btn-secondary pe-3 ps-3",onClick:()=>l(s+1),children:(0,Dn.jsx)(Gn.g,{icon:Pn.QLR})})]})]}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:n,children:"Cancel"}),(0,Dn.jsxs)(ss.A,{variant:"primary",onClick:c,disabled:s<0||d,children:[d&&(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"icon-inline-left fa-spin "}),"Save Battle Scars"]})]})]})};var Wf=e=>{var a,n,o,i,r,s,l;let{option:c,owner:d,category:u}=e;const[h,m]=(0,t.useState)(!1),[p,f]=(0,t.useState)(!1),[g,y]=(0,t.useState)(0),[_,b]=(0,t.useState)(null!=c.purchase),[v,w]=(0,t.useState)(c.allowed),[x,k]=(0,t.useState)(v||null!=c.purchase),{warband:C,reloadWbDisplay:j,updateKey:S}=rf(),I=()=>{null!=c.purchase?1==c.purchase.Sellable&&(b(!1),d.DeleteUpgrade(c.purchase).then((()=>{c.purchase=null,y(g+1),d.CalcGivenPurchase(c.upgrade,u).then((()=>{pn.o.getInstance().UserWarbandManager.UpdateItemInfo(C?C.id:-999).then((()=>{j()}))}))}))):(b(!0),d.AddUpgrade(c).then((e=>{c.purchase=e,y(g+1),d.CalcGivenPurchase(c.upgrade,u).then((()=>{pn.o.getInstance().UserWarbandManager.UpdateItemInfo(C?C.id:-999).then((()=>{j()}))}))})))},{play_mode:A,edit_mode:N,view_mode:E,print_mode:T,mode:D,setMode:R}=ff();return(0,t.useEffect)((()=>{m(!(!A&&!T))}),[D]),(0,t.useEffect)((()=>{!async function(){w((await d.CalcGivenPurchase(c.upgrade,u)).allowed),c.purchase&&f(c.purchase.HeldObject.HaveEmptyOptions())}()}),[]),(0,t.useEffect)((()=>{k(v||null!=c.purchase&&0!=c.purchase.Sellable)})),(0,Dn.jsxs)("div",{className:"WbbOptionItem",children:[(E||N)&&(0,Dn.jsxs)("div",{className:"option-title",onClick:e=>{x&&N&&I()},children:[(0,Dn.jsx)("span",{className:"input-wrap",children:(0,Dn.jsx)("input",{className:"form-check-input",type:"checkbox",id:c.upgrade.ID,checked:_,disabled:!x||E,onClick:e=>e.stopPropagation(),onChange:I},g.toString()+S.toString())}),(0,Dn.jsx)("span",{className:"option-name",children:c.upgrade.UpgradeObject.Name}),c.upgrade.Cost>0&&(0,Dn.jsxs)("span",{className:"option-cost",children:[" - ",(0,Dn.jsx)(il.A,{amount:c.discount<0&&null==c.purchase?c.cost-c.discount:c.cost,type:c.upgrade.CostType})]}),p&&(0,Dn.jsx)(Gn.g,{icon:Pn.JAe,className:"icon-inline-right-l icon-wraning"}),c.max_count>0&&(0,Dn.jsxs)("span",{className:"option-limit",children:[" - ",c.cur_count,"/",c.max_count]}),(0,Dn.jsx)("span",{className:"collapse-chevron-wrap",onClick:e=>{e.stopPropagation(),m(!h)},children:(0,Dn.jsx)(Gn.g,{icon:h?Pn.w2A:Pn.Jt$})})]},g.toString()+S.toString()),(A||T)&&(0,Dn.jsxs)("div",{className:"option-title",onClick:()=>{m(!h)},children:[(0,Dn.jsx)("span",{className:"option-name",children:c.upgrade.UpgradeObject.Name}),(0,Dn.jsx)("span",{className:"collapse-chevron-wrap",children:(0,Dn.jsx)(Gn.g,{icon:h?Pn.w2A:Pn.Jt$})})]}),(0,Dn.jsx)(ll.A,{in:h,children:(0,Dn.jsx)("div",{className:"option-details",children:(0,Dn.jsxs)("div",{className:"option-details-inner",children:[null!=(null===(a=c.purchase)||void 0===a?void 0:a.HeldObject)&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,pl.fE)(null===(n=c.purchase)||void 0===n?void 0:n.HeldObject,(null===(o=c.purchase)||void 0===o?void 0:o.HeldObject).SelfDynamicProperty.OptionChoice.Description),(null===(i=c.purchase)||void 0===i?void 0:i.HeldObject).SelfDynamicProperty.Selections.length>0&&(0,Dn.jsx)(Dn.Fragment,{children:(null===(r=c.purchase)||void 0===r?void 0:r.HeldObject).SelfDynamicProperty.Selections.map((e=>{var t,a;return(0,Dn.jsx)(jf,{property:null===(t=c.purchase)||void 0===t?void 0:t.HeldObject,choice:e},(null===(a=c.purchase)||void 0===a?void 0:a.HeldObject).SelfDynamicProperty.Selections.indexOf(e))}))}),(null===(s=c.purchase)||void 0===s?void 0:s.HeldObject).SelfDynamicProperty.Selections.filter((e=>null==e.SelectedChoice)).length>0&&(0,Dn.jsx)(Dn.Fragment,{children:(0,Dn.jsxs)(Rp.A,{type:"info",className:"mt-3",children:[(0,Dn.jsx)("div",{className:"fw-bold",children:"Selection missing"}),(0,Dn.jsx)("div",{children:"Not all selections have been made"})]})})]}),null==(null===(l=c.purchase)||void 0===l?void 0:l.HeldObject)&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,pl.fE)(c.upgrade,c.upgrade.UpgradeObject.Description),c.upgrade.UpgradeObject.MyOptions.length>0&&(0,Dn.jsxs)(Rp.A,{type:"info",className:"mt-3",children:[(0,Dn.jsx)("div",{className:"fw-bold",children:"Selection missing"}),(0,Dn.jsx)("div",{children:"This upgrade is not selected"})]})]})]})},S)})]},S.toString()+g.toString())};var Bf=e=>{let{ability:t}=e;const{play_mode:a,edit_mode:n,view_mode:o,print_mode:i,setMode:r}=ff();return(0,Dn.jsxs)("div",{className:"WbbAbilityDisplay",children:[(0,Dn.jsx)("span",{className:"ability-name",children:t.Name+": "}),(0,Dn.jsxs)("span",{className:"ability-description",children:[(0,pl.fE)(t,t.SelfDynamicProperty.OptionChoice.Description),t.SelfDynamicProperty.Selections.length>0&&(0,Dn.jsx)(Dn.Fragment,{children:t.SelfDynamicProperty.Selections.map((e=>(0,Dn.jsx)(jf,{property:t,choice:e},t.SelfDynamicProperty.Selections.indexOf(e))))})]})]})},Hf=a(6014);var Uf=e=>{let{show:a,onClose:n,currentStatus:o,onSubmit:i,special_list:r}=e;const[s,l]=(0,t.useState)(o),c=void 0!=r?r:["active","reserved","lost","dead"],{handleSubmit:d,isSubmitting:u}=Mf((()=>{i(s),n()}));return(0,Dn.jsxs)(Il.A,{show:a,onHide:n,className:"WbbModal WbbModalSelect WbbEditFighterStatus",centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Edit Fighter Status"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:n})]}),(0,Dn.jsx)(Il.A.Body,{children:c.map((e=>(0,Dn.jsx)("div",{className:"select-item "+(s===e?"selected":""),onClick:()=>l(e),children:(0,Dn.jsxs)("span",{children:[o===e&&(0,Dn.jsx)(Gn.g,{icon:Pn.SGM,className:"icon-inline-left-l"}),(0,za.h8)(e)]})},e)))}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:n,children:"Cancel"}),(0,Dn.jsxs)(ss.A,{variant:"primary",onClick:d,disabled:s===o||u,children:[u&&(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"icon-inline-left fa-spin "}),"Update Status"]})]})]})};var Kf=e=>{let{show:a,fighter:n,onClose:o,currentStatus:i,options:r,onSubmit:s}=e;const[l,c]=(0,t.useState)(i),{handleSubmit:d,isSubmitting:u}=Mf((()=>{l&&(s(l),o())}));return(0,Dn.jsxs)(Il.A,{show:a,onHide:o,className:"WbbModal WbbModalSelect WbbEditFighterStatProfile",centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Edit Fighter Stat Profile"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:o})]}),(0,Dn.jsx)(Il.A.Body,{children:r.map((e=>(0,Dn.jsx)("div",{className:"select-item "+(l===e?"selected":""),onClick:()=>c(e),children:(0,Dn.jsxs)("span",{children:[i===e&&(0,Dn.jsx)(Gn.g,{icon:Pn.SGM,className:"icon-inline-left-l"}),e?(0,fl.DF)(e):"-"]})},e.toString())))}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:o,children:"Cancel"}),(0,Dn.jsxs)(ss.A,{variant:"primary",onClick:d,disabled:l===i||u,children:[u&&(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"icon-inline-left fa-spin "}),"Update Stat Profile"]})]})]})};var zf=e=>{let{fighter:a,options:n}=e;const{warband:o,updateKey:i,reloadWbDisplay:r}=rf(),[s,l]=(0,t.useState)(!1),[c,d]=(0,t.useState)(null);return(0,t.useEffect)((()=>{for(let e=0;e<a.model.Stat_Selections.length;e++)for(let t=0;t<n.length;t++)(0,fl.DF)(a.model.Stat_Selections[e])==(0,fl.DF)(n[t])&&d(a.model.Stat_Selections[e])}),[i]),(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsxs)("div",{className:"fighter-status",children:[(0,Dn.jsx)("div",{className:"fighter-status-string",children:c?(0,fl.DF)(c):"-"}),(0,Dn.jsxs)("div",{className:"btn btn-primary",onClick:()=>l(!0),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.hpd,className:"icon-inline-left-l"}),"Change"]})]}),(0,Dn.jsx)(Kf,{show:s,fighter:a,onClose:()=>l(!1),currentStatus:c,options:n,onSubmit:e=>{a.model.UpdateStatOption(e,c);pn.o.getInstance().UserWarbandManager.UpdateItemInfo(o?o.id:-999).then((()=>r()))}})]})};var Vf=e=>{let{initialText:a,title:n,onSave:o}=e;const{play_mode:i,edit_mode:r,view_mode:s,print_mode:l,mode:c,setMode:d}=ff(),[u,h]=(0,t.useState)(a),[m,p]=(0,t.useState)(!1);return(0,Dn.jsxs)("div",{className:"WbbTextarea",children:[(0,Dn.jsxs)("div",{className:"WbbTextarea-title",children:[n,r&&(0,Dn.jsx)(Dn.Fragment,{children:m?(0,Dn.jsxs)("div",{className:"btn btn-primary",onClick:()=>{p(!1),o(u)},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.jkA,className:"icon-inline-left"}),"Save"]}):(0,Dn.jsxs)("div",{className:"btn btn-primary btn-sm",onClick:()=>p(!0),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.hpd,className:"icon-inline-left"}),"Edit"]})})]}),m?(0,Dn.jsx)("textarea",{name:`${n.toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,"")}-textarea`,rows:10,value:u,onChange:e=>h(e.target.value)}):(0,Dn.jsx)(Dn.Fragment,{children:""!=u?(0,Dn.jsx)("div",{className:"WbbTextarea-text",children:u.split("\n").map(((e,a)=>(0,Dn.jsxs)(t.Fragment,{children:[e,(0,Dn.jsx)("br",{})]},a)))}):(0,Dn.jsx)("div",{className:"WbbTextarea-text",children:(0,Dn.jsxs)("i",{children:["No ",n]})})})]})};var Yf=e=>{let{onAdd:t,addItem:a=!0,fighter:n=null,battlekit:o,title:i}=e;const{edit_mode:r}=ff(),s=!!r&&(!n||!n||"dead"!=n.model.State)&&a;return(0,Dn.jsxs)("div",{className:"WbbBattlekitCategory battlekit-category",children:[(0,Dn.jsxs)("div",{className:"battlekit-cat-headline",onClick:()=>{s?t():n&&"dead"==n.model.State&&Us.error("Error: Fighter is dead")},children:[(0,Dn.jsx)("div",{className:"battlekit-cat-name",children:i}),s&&(0,Dn.jsx)("div",{className:"battlekit-cat-add-btn",children:(0,Dn.jsx)(Gn.g,{icon:Pn.QLR})})]}),(0,Dn.jsx)("div",{className:"battlekit-cat-items",children:o.map(((e,t)=>(0,Dn.jsx)(Ef,{item:e,fighter:n},t)))})]})};var Jf=e=>{let{warbandmember:a,onClose:n,active:o=!1}=e;const{warband:i,updateKey:r,reloadWbDisplay:s}=rf(),{settings:l}=(0,cl.t)(),c=a.model,[d,u]=(0,t.useState)({stats:{},canchange:!0,upgrades:{},abilities:[],statchoices:[],allmodelequip:[],xpLimit:0,scarLimit:3,keywordsList:[],modelslug:c.GetModelSlug(),keyvar:0}),{play_mode:h,edit_mode:m,view_mode:p,print_mode:f,mode:g,setMode:y}=ff();(0,t.useEffect)((()=>{null!==i&&void 0!==i&&i.warband_data.Models.includes(a.purchase)?async function(){const e=await c.BuildNewProperties(),t=await c.GetWarbandUpgradeCollections(),a=await c.GetXPLimit(),n=await c.getContextuallyAvailableKeywords(),o=c.GetModelSlug(),i=await c.GetAllEquipForShow(),r=await c.GetStatOptions(),s=await c.CanChangeRank(),l=await c.GetStats(),d=await c.GetMaxScars();u((c=>({stats:l,canchange:s,upgrades:t,abilities:e,statchoices:r,allmodelequip:i,xpLimit:a,scarLimit:d,keywordsList:n,modelslug:o,keyvar:c.keyvar+1})))}():n()}),[r,c,g]);const[_,b]=(0,t.useState)(!1),[v,w]=(0,t.useState)(!1),x=e=>{c.AddEquipment(e).then((()=>{pn.o.getInstance().UserWarbandManager.UpdateItemInfo(i?i.id:-999).then((()=>s()))}))},[k,C]=(0,t.useState)(!1),[j,S]=(0,t.useState)(!1),[I,A]=(0,t.useState)(!1),[N,E]=(0,t.useState)(!1),[T,D]=(0,t.useState)(!1),[R,M]=(0,t.useState)(!1),[O,q]=(0,t.useState)(!1),[G,P]=(0,t.useState)(!1),[F,L]=(0,t.useState)(!1),[W,B]=(0,t.useState)(!1),H=e=>d.allmodelequip.filter((t=>{const a=t.equipment.MyEquipment.SelfDynamicProperty.OptionChoice;return a&&a.Category===e})).map((e=>e.purchase)),U=H("ranged"),K=H("grenade"),z=H("melee"),V=H("armour"),Y=H("shield"),J=H("equipment"),$=H("special");return(0,Dn.jsxs)("div",{className:`WbbDetailView WbbFighterDetailView fighter-card ${h?"play-mode":""}  ${o?"show":"hide"}`,children:[(0,Dn.jsxs)("div",{className:"title",children:[(0,Dn.jsx)("div",{className:"title-back",onClick:n,children:(0,Dn.jsx)(Gn.g,{icon:Pn.Wzs,className:""})}),(0,Dn.jsxs)("div",{className:"title-text fighter-name",children:[c.GetModelName(),c.GetFighterName()!=c.GetModelName()&&(0,Dn.jsx)(Dn.Fragment,{children:" - "+c.GetFighterName()})]}),(0,Dn.jsxs)("div",{className:"fighter-cost",children:[a.purchase.GetTotalDucats()>0&&(0,Dn.jsx)(il.A,{amount:a.purchase.GetTotalDucats(),type:"d"}),a.purchase.GetTotalDucats()>0&&a.purchase.GetTotalGlory()>0&&(0,Dn.jsx)(Dn.Fragment,{children:" | "}),a.purchase.GetTotalGlory()>0&&(0,Dn.jsx)(il.A,{amount:a.purchase.GetTotalGlory(),type:"g"})]}),m&&(0,Dn.jsx)(wf,{id:"fighter-detail-"+c.ID,type:"fighter",item:a})]}),(0,Dn.jsxs)("div",{className:`fighter-card-main-area ${c.IsDead()?"state-dead":""} ${c.IsReserve()?"state-reserve":""} ${c.IsLost()?"state-lost":""}`,children:[""!=c.GetModelSlug()&&(0,Dn.jsx)("div",{className:"fighter-image-wrap full",children:(0,Dn.jsx)(Hf.A,{modelSlug:d.modelslug,size:"medium",className:"fighter-image"})}),(0,Dn.jsxs)("div",{className:"fighter-card-meta fighter-card-meta-above",children:[(0,Dn.jsxs)("div",{className:"fighter-meta-entry-simple",children:[(0,Dn.jsx)("span",{className:"fighter-meta-label",children:"Name: "}),(0,Dn.jsx)("span",{className:"fighter-meta-value",children:c.GetFighterName()==c.GetModelName()?"-":c.GetFighterName()})]}),(0,Dn.jsxs)("div",{className:"fighter-meta-entry-simple",children:[(0,Dn.jsx)("span",{className:"fighter-meta-label",children:"Type: "}),(0,Dn.jsx)("span",{className:"fighter-meta-value",children:c.GetModelName()})]}),(0,Dn.jsxs)("div",{className:"fighter-meta-entry-simple",children:[(0,Dn.jsx)("span",{className:"fighter-meta-label",children:"Base Cost: "}),(0,Dn.jsx)("span",{className:"fighter-meta-value",children:(0,Dn.jsx)(il.A,{amount:a.purchase.ItemCost,type:a.purchase.CostType})})]}),l.show_base_sizes&&(0,Dn.jsxs)("div",{className:"fighter-meta-entry-simple",children:[(0,Dn.jsx)("span",{className:"fighter-meta-label",children:"Base: "}),(0,Dn.jsx)("span",{className:"fighter-meta-value",children:d.stats.base?d.stats.base.join("x")+"mm":"-"})]}),(0,Dn.jsxs)("div",{className:"fighter-meta-entry-simple",children:[(0,Dn.jsx)("span",{className:"fighter-meta-label",children:"Image: "}),(0,Dn.jsx)("span",{className:"fighter-meta-value",children:(0,Dn.jsx)(vl.A,{modelSlug:c.GetModelSlug()})})]})]}),(0,Dn.jsxs)("div",{className:"fighter-card-stats",children:[(0,Dn.jsx)(lf.A,{title:"Movement",value:(0,fl.NJ)(d.stats),base:c.CurModel.Stats.movement,raw:d.stats.movement}),void 0!=d.stats.melee&&(0,Dn.jsx)(lf.A,{title:"Melee",value:(0,fl.A)(d.stats),base:c.CurModel.Stats.melee,raw:d.stats.melee}),void 0!=d.stats.ranged&&(0,Dn.jsx)(lf.A,{title:"Ranged",value:(0,fl.Lp)(d.stats),base:c.CurModel.Stats.ranged,raw:d.stats.ranged}),(0,Dn.jsx)(lf.A,{title:"Armour",value:(0,fl.aR)(d.stats),base:void 0!=c.CurModel.Stats.armour||null!=c.CurModel.Stats.armour?c.CurModel.Stats.armour:0,raw:d.stats.armour?-1*d.stats.armour:0})]}),(0,Dn.jsx)("div",{className:"fighter-card-meta mb-1 fw-bold",children:"Keywords"}),(0,Dn.jsx)("div",{className:"fighter-card-meta KeywordList-wrap",children:(0,Dn.jsx)("span",{className:"fighter-meta-value",children:(0,Dn.jsx)(If.A,{keywords:d.keywordsList})})})]}),(0,Dn.jsxs)("div",{className:"fighter-card-info-wrap",children:[Object.keys(d.upgrades).length>0&&!h&&(0,Dn.jsx)(Dn.Fragment,{children:Object.keys(d.upgrades).filter((e=>m||d.upgrades[e].upgrades.filter((e=>null!=e.purchase)).length>0)).map(((e,a)=>(0,Dn.jsx)(t.Fragment,{children:(d.upgrades[e].limit>0||"goetic"!=e)&&(0,Dn.jsxs)("div",{className:"WbbFighterDetailSection",children:[(0,Dn.jsx)("h3",{children:(0,za.h8)(e)}),"upgrades"!=e&&(0,Dn.jsxs)("p",{children:[(0,Dn.jsx)("strong",{children:"Limit: "}),c.GetFighterName()+" can choose up to "+d.upgrades[e].limit.toString()+" "+(0,za.h8)(e)+".","goetic"==e&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("br",{}),(0,Dn.jsx)("strong",{children:"Note: "}),"You must choose the goetic powers on recruitment and cannot change them or add new ones during the quartermaster step."]})]}),(0,Dn.jsx)("div",{children:d.upgrades[e].upgrades.filter((e=>m||null!=e.purchase)).map(((t,a)=>(0,Dn.jsx)(Wf,{option:t,owner:c,category:e},a.toString()+r.toString())))},d.keyvar)]},r)},a)))}),!h&&(0,Dn.jsxs)("div",{className:"WbbFighterDetailSection",children:[(0,Dn.jsx)("h3",{children:"Battlekit"}),(0,Dn.jsxs)("p",{children:[" ",(0,pl.fE)(c,c.CurModel.Description)]}),c.ModelEquipments.filter((e=>e.SelfDynamicProperty.Selections.length>0)).map(((e,a)=>(0,Dn.jsx)(t.Fragment,{children:e.SelfDynamicProperty.Selections.map((t=>(0,Dn.jsx)(jf,{property:e,choice:t},e.SelfDynamicProperty.Selections.indexOf(t))))},a))),(0,Dn.jsx)(Yf,{onAdd:()=>b(!0),fighter:a,battlekit:U,addItem:!0,title:"Ranged Weapons"}),(0,Dn.jsx)(Yf,{onAdd:()=>w(!0),fighter:a,battlekit:K,addItem:!0,title:"Grenades"}),(0,Dn.jsx)(Yf,{onAdd:()=>C(!0),fighter:a,battlekit:z,addItem:!0,title:"Melee Weapons"}),(0,Dn.jsx)(Yf,{onAdd:()=>E(!0),fighter:a,battlekit:V,addItem:!0,title:"Armour"}),(0,Dn.jsx)(Yf,{onAdd:()=>D(!0),fighter:a,battlekit:Y,addItem:!0,title:"Shields"}),(0,Dn.jsx)(Yf,{onAdd:()=>S(!0),fighter:a,battlekit:J,addItem:!0,title:"Equipment"}),(0,Dn.jsx)(Yf,{onAdd:()=>A(!0),fighter:a,battlekit:$,addItem:!0,title:"Special"}),(0,Dn.jsx)(Of,{show:_,onClose:()=>b(!1),onSubmit:x,fighter:a,category:"ranged"}),(0,Dn.jsx)(Of,{show:v,onClose:()=>w(!1),onSubmit:x,fighter:a,category:"grenade"}),(0,Dn.jsx)(Of,{show:k,onClose:()=>C(!1),onSubmit:x,fighter:a,category:"melee"}),(0,Dn.jsx)(Of,{show:N,onClose:()=>E(!1),onSubmit:x,fighter:a,category:"armour"}),(0,Dn.jsx)(Of,{show:T,onClose:()=>D(!1),onSubmit:x,fighter:a,category:"shield"}),(0,Dn.jsx)(Of,{show:j,onClose:()=>S(!1),onSubmit:x,fighter:a,category:"equipment"}),(0,Dn.jsx)(Of,{show:I,onClose:()=>A(!1),onSubmit:x,fighter:a,category:"special"})]},r),!h&&(0,Dn.jsxs)("div",{className:"WbbFighterDetailSection",children:[(0,Dn.jsx)("h3",{children:"Campaign"}),(c.IsElite()||c.GetExperiencePoints()>0)&&(0,Dn.jsxs)("div",{className:"experience",children:[(0,Dn.jsx)("div",{className:"fw-bold mt-3 mb-3",children:"Experience"}),m&&"dead"!=c.State&&c.IsElite()&&(0,Dn.jsxs)("div",{className:"btn btn-primary btn-sm edit-xp-btn",onClick:()=>{M(!0)},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.hpd,className:"icon-inline-left-l"}),"Edit"]}),(0,Dn.jsx)("div",{className:"xp-boxes",onClick:m&&c.IsElite()?()=>M(!0):void 0,children:Array.from({length:d.xpLimit},((e,t)=>{const a=t+1,n=c.boldXpIndices.includes(a),o=a<=c.GetExperiencePoints();return(0,Dn.jsx)("div",{className:"xp-box"+(n?" xp-box-bold":""),children:o&&(0,Dn.jsx)(Gn.g,{icon:Pn.e68})},a)}))})]}),(c.IsElite()||c.Injuries.length>0)&&(0,Dn.jsxs)("div",{className:"battle-scars",children:[(0,Dn.jsx)("div",{className:"fw-bold mt-3 mb-3",children:"Battle Scars"}),c.IsElite()&&m&&"dead"!=c.State&&(0,Dn.jsxs)("div",{className:"btn btn-primary btn-sm edit-btn",onClick:()=>q(!0),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.hpd,className:"icon-inline-left-l"}),"Edit"]}),(0,Dn.jsx)("div",{className:"battle-scar-boxes",onClick:m&&c.IsElite()?()=>q(!0):void 0,children:Array.from({length:d.scarLimit},((e,t)=>{const a=t+1,n=a<=c.GetBattleScars(),o=a===d.scarLimit;return(0,Dn.jsxs)("div",{className:"battle-scar-box",children:[o&&(0,Dn.jsx)(Gn.g,{icon:Pn.B0L,className:"final-icon"}),n&&(0,Dn.jsx)(Gn.g,{icon:Pn.GRI})]},a)}))})]}),(c.IsElite()||c.Skills.length>0)&&(0,Dn.jsxs)("div",{className:"WbbBattlekitCategory battlekit-category",children:[(0,Dn.jsxs)("div",{className:"battlekit-cat-headline",onClick:()=>{c.IsElite()&&m&&"dead"!=c.State?P(!0):"dead"==c.State&&Us.error("Error: Fighter is dead")},children:[(0,Dn.jsx)("div",{className:"battlekit-cat-name",children:"Advancements"}),c.IsElite()&&m&&"dead"!=c.State&&(0,Dn.jsx)("div",{className:"battlekit-cat-add-btn",children:(0,Dn.jsx)(Gn.g,{icon:Pn.QLR})})]}),(0,Dn.jsx)("div",{className:"battlekit-cat-items",children:c.GetSkillsList().map((e=>(0,Dn.jsx)(Df,{advancement:e,fighter:a},e.ID+c.ID)))})]}),(c.IsElite()||c.Injuries.length>0)&&(0,Dn.jsxs)("div",{className:"WbbBattlekitCategory battlekit-category",children:[(0,Dn.jsxs)("div",{className:"battlekit-cat-headline",onClick:()=>{c.IsElite()&&m&&"dead"!=c.State?L(!0):"dead"==c.State&&Us.error("Error: Fighter is dead")},children:[(0,Dn.jsx)("div",{className:"battlekit-cat-name",children:"Injuries"}),c.IsElite()&&m&&"dead"!=c.State&&(0,Dn.jsx)("div",{className:"battlekit-cat-add-btn",children:(0,Dn.jsx)(Gn.g,{icon:Pn.QLR})})]}),(0,Dn.jsx)("div",{className:"battlekit-cat-items",children:c.GetInjuriesList().map((e=>(0,Dn.jsx)(Rf,{injury:e,fighter:a},e.ID+c.ID)))})]}),(0,Dn.jsx)("div",{className:"fw-bold mb-2",children:"Fighter Status"}),(0,Dn.jsxs)("div",{className:"fighter-status  mb-3",children:[(0,Dn.jsx)("div",{className:"fighter-status-string",children:(0,za.h8)(c.State)}),m&&(0,Dn.jsxs)("div",{className:"btn btn-primary",onClick:()=>B(!0),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.hpd,className:"icon-inline-left-l"}),"Change"]})]}),!c.IsDog()&&("ver_pre_163"!=(null===i||void 0===i?void 0:i.warband_data.Tags.tc_version)||!c.IsMercenary())&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("div",{className:"fw-bold mb-2",children:"Fighter Rank"}),(0,Dn.jsxs)("div",{className:"fighter-status mb-3",children:[(0,Dn.jsxs)("div",{className:"fighter-status-string",children:[c.IsElite()?"Elite":"Troop",void 0!=d.stats.potential&&1==d.stats.potential&&(0,Dn.jsxs)("small",{children:[(0,Dn.jsx)("br",{}),"limited potential"]})]}),d.canchange&&m&&"dead"!=c.State&&(0,Dn.jsxs)("div",{className:"btn btn-primary",onClick:()=>(c.ChangeRank(),void pn.o.getInstance().UserWarbandManager.UpdateItemInfo(i?i.id:-999).then((()=>s()))),children:[(0,Dn.jsx)(Gn.g,{icon:c.IsElite()?Pn.Jt$:Pn.w2A,className:"icon-inline-left-l"}),c.IsElite()?"Demote":"Promote"]}),!d.canchange&&(0,Dn.jsx)("small",{children:"Cannot be promoted"})]})]}),R&&(0,Dn.jsx)(Ff,{show:R,onClose:()=>M(!1),fighter:c,maxXP:d.xpLimit,onSubmit:e=>{c.SetExperience(e).then((()=>{pn.o.getInstance().UserWarbandManager.UpdateItemInfo(i?i.id:-999).then((()=>s()))}))}}),O&&(0,Dn.jsx)(Lf,{show:O,onClose:()=>q(!1),fighter:c,maxScars:d.scarLimit,onSubmit:e=>{c.SetScars(e).then((()=>{pn.o.getInstance().UserWarbandManager.UpdateItemInfo(i?i.id:-999).then((()=>s()))}))}}),G&&(0,Dn.jsx)(Gf,{show:G,onClose:()=>P(!1),onSubmit:e=>{c.AddSkill(e).then((()=>{null===i||void 0===i||i.warband_data.RebuildProperties().then((()=>{pn.o.getInstance().UserWarbandManager.UpdateItemInfo(i?i.id:-999).then((()=>s()))}))}))},fighter:a}),F&&(0,Dn.jsx)(Pf,{show:F,onClose:()=>L(!1),onSubmit:e=>{c.AddInjury(e).then((()=>{null===i||void 0===i||i.warband_data.RebuildProperties().then((()=>{pn.o.getInstance().UserWarbandManager.UpdateItemInfo(i?i.id:-999).then((()=>s()))}))}))},fighter:a}),W&&(0,Dn.jsx)(Uf,{show:W,onClose:()=>B(!1),currentStatus:c.State,special_list:c.IsDog()?["dead","dog"]:void 0,onSubmit:e=>{if("active"==e||"reserved"==e||"lost"==e||"dead"==e||"dog"==e)if(c.State=e,"dead"==e)c.Kill().then((()=>{pn.o.getInstance().UserWarbandManager.UpdateItemInfo(i?i.id:-999).then((()=>s()))}));else{pn.o.getInstance().UserWarbandManager.UpdateItemInfo(i?i.id:-999).then((()=>s()))}}})]}),!h&&d.abilities.length>0&&(0,Dn.jsxs)("div",{className:"WbbFighterDetailSection",children:[(0,Dn.jsx)("h3",{children:"Abilities"}),(0,Dn.jsx)("div",{children:d.abilities.map(((e,t)=>(0,Dn.jsx)(Bf,{ability:e},t)))},d.keyvar)]}),!h&&(0,Dn.jsxs)("div",{className:"WbbFighterDetailSection",children:[(0,Dn.jsx)("h3",{children:"Notes & Lore"}),(0,Dn.jsxs)("div",{children:[(0,Dn.jsx)(Vf,{initialText:a.model.GetWarbandNotes(),title:"Notes",onSave:e=>{a.model.SaveNote(e,"notes");pn.o.getInstance().UserWarbandManager.UpdateItemInfo(i?i.id:-999).then((()=>s()))}}),(0,Dn.jsx)(Vf,{initialText:a.model.GetLore(),title:"Lore",onSave:e=>{a.model.SaveNote(e,"lore");pn.o.getInstance().UserWarbandManager.UpdateItemInfo(i?i.id:-999).then((()=>s()))}})]},d.keyvar)]}),m&&d.statchoices.length>0&&(0,Dn.jsx)(Tf,{title:"Profile Options",initiallyOpen:!1,children:(0,Dn.jsx)(Dn.Fragment,{children:d.statchoices.map(((e,t)=>(0,Dn.jsx)(zf,{fighter:a,options:e},d.statchoices.indexOf(e)+"-"+t)))})}),!h&&(0,Dn.jsx)(Ml,{model_slug:c.CurModel.ID})]}),h&&(0,Dn.jsxs)("div",{className:"fighter-card-play-mode-info",children:[(0,Dn.jsxs)("div",{className:"play-mode-equipment-wrap",children:[d.allmodelequip.filter((e=>"ranged"==e.equipment.MyEquipment.SelfDynamicProperty.OptionChoice.Category)).length>0&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("h3",{children:"Ranged Weapons"}),d.allmodelequip.filter((e=>"ranged"==e.equipment.MyEquipment.SelfDynamicProperty.OptionChoice.Category)).map((e=>(0,Dn.jsx)(Ef,{item:e.purchase,fighter:a},d.allmodelequip.indexOf(e))))]}),d.allmodelequip.filter((e=>"grenade"==e.equipment.MyEquipment.SelfDynamicProperty.OptionChoice.Category)).length>0&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("h3",{children:"Grenades"}),d.allmodelequip.filter((e=>"grenade"==e.equipment.MyEquipment.SelfDynamicProperty.OptionChoice.Category)).map((e=>(0,Dn.jsx)(Ef,{item:e.purchase,fighter:a},d.allmodelequip.indexOf(e))))]}),d.allmodelequip.filter((e=>"melee"==e.equipment.MyEquipment.SelfDynamicProperty.OptionChoice.Category)).length>0&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("h3",{children:"Melee Weapons"}),d.allmodelequip.filter((e=>"melee"==e.equipment.MyEquipment.SelfDynamicProperty.OptionChoice.Category)).map((e=>(0,Dn.jsx)(Ef,{item:e.purchase,fighter:a},d.allmodelequip.indexOf(e))))]}),d.allmodelequip.filter((e=>"armour"==e.equipment.MyEquipment.SelfDynamicProperty.OptionChoice.Category)).length>0&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("h3",{children:"Armour"}),d.allmodelequip.filter((e=>"armour"==e.equipment.MyEquipment.SelfDynamicProperty.OptionChoice.Category)).map((e=>(0,Dn.jsx)(Ef,{item:e.purchase,fighter:a},d.allmodelequip.indexOf(e))))]}),d.allmodelequip.filter((e=>"shield"==e.equipment.MyEquipment.SelfDynamicProperty.OptionChoice.Category)).length>0&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("h3",{children:"Shields"}),d.allmodelequip.filter((e=>"shield"==e.equipment.MyEquipment.SelfDynamicProperty.OptionChoice.Category)).map((e=>(0,Dn.jsx)(Ef,{item:e.purchase,fighter:a},d.allmodelequip.indexOf(e))))]}),d.allmodelequip.filter((e=>"equipment"==e.equipment.MyEquipment.SelfDynamicProperty.OptionChoice.Category)).length>0&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("h3",{children:"Equipment"}),d.allmodelequip.filter((e=>"equipment"==e.equipment.MyEquipment.SelfDynamicProperty.OptionChoice.Category)).map((e=>(0,Dn.jsx)(Ef,{item:e.purchase,fighter:a},d.allmodelequip.indexOf(e))))]}),d.allmodelequip.filter((e=>"special"==e.equipment.MyEquipment.SelfDynamicProperty.OptionChoice.Category)).length>0&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("h3",{children:"Special Battlekit"}),d.allmodelequip.filter((e=>"special"==e.equipment.MyEquipment.SelfDynamicProperty.OptionChoice.Category)).map((e=>(0,Dn.jsx)(Ef,{item:e.purchase,fighter:a},d.allmodelequip.indexOf(e))))]})]}),d.abilities.length>0&&(0,Dn.jsxs)("div",{className:"play-mode-abilities-wrap",children:[(0,Dn.jsx)("h3",{children:"Abilities"}),d.abilities.map(((e,t)=>(0,Dn.jsx)(Bf,{ability:e},t)))]}),Object.keys(d.upgrades).length>0&&(0,Dn.jsx)(Dn.Fragment,{children:Object.keys(d.upgrades).filter((e=>m||d.upgrades[e].upgrades.filter((e=>null!=e.purchase)).length>0)).map(((e,t)=>(0,Dn.jsxs)("div",{className:"play-mode-upgrades-wrap",children:["upgrades"==e?(0,Dn.jsx)("h3",{children:"Upgrades"}):(0,Dn.jsx)("h3",{children:(0,za.h8)(e)}),d.upgrades[e].upgrades.filter((e=>m||null!=e.purchase)).map(((t,a)=>(0,Dn.jsx)(Wf,{option:t,owner:c,category:e},a.toString()+r.toString())))]},d.keyvar)))}),c.GetSkillsList().length>0&&(0,Dn.jsxs)("div",{className:"play-mode-advancements-wrap",children:[(0,Dn.jsx)("h3",{children:"Advancements"}),c.GetSkillsList().map((e=>(0,Dn.jsx)(Df,{advancement:e,fighter:a},e.ID+c.ID)))]}),c.GetInjuriesList().length>0&&(0,Dn.jsxs)("div",{className:"play-mode-injuries-wrap",children:[(0,Dn.jsx)("h3",{children:"Injuries"}),c.GetInjuriesList().map((e=>(0,Dn.jsx)(Rf,{injury:e,fighter:a},e.ID+c.ID)))]}),""!=a.model.GetLore()||""!=a.model.GetWarbandNotes()&&(0,Dn.jsxs)("div",{className:"play-mode-notes-wrap",children:[(0,Dn.jsx)("h3",{children:"Notes & Lore"}),""!=a.model.GetWarbandNotes()&&(0,Dn.jsx)(Vf,{initialText:a.model.GetWarbandNotes(),title:"Notes",onSave:e=>{a.model.SaveNote(e,"notes");pn.o.getInstance().UserWarbandManager.UpdateItemInfo(i?i.id:-999).then((()=>s()))}}),""!=a.model.GetLore()&&(0,Dn.jsx)(Vf,{initialText:a.model.GetLore(),title:"Lore",onSave:e=>{a.model.SaveNote(e,"lore");pn.o.getInstance().UserWarbandManager.UpdateItemInfo(i?i.id:-999).then((()=>s()))}})]})]},d.keyvar)]})};const $f=(0,t.createContext)(void 0),Zf=e=>{let{children:a,campaignId:n,hydrate:o=!1,dataonly:i=!1}=e;const r=t.useRef(o),[s,l]=(0,t.useState)(null),[c,d]=(0,t.useState)(null),[u,h]=(0,t.useState)(!0),[m,p]=(0,t.useState)(null),[f,g]=(0,t.useState)(0),y=(0,t.useRef)(null),_=(0,t.useRef)(null),b=(0,t.useCallback)((async()=>{y.current&&y.current.abort();const e=new AbortController;y.current=e,h(!0),p(null);try{if(tf.y.getInstance().clearCampaignCache(n),i){const e=await Tp.x.GetCampaignSummaryPublicByID(n,{force:!0});l(null),d(e)}else{const e=await Tp.x.GetCampaignPublicByID(n,{force:!0},r.current);l(e),d(e?e.GetRawData():null)}g((e=>e+1))}catch(xC){var t;"AbortError"!==(null===xC||void 0===xC?void 0:xC.name)&&p(null!==(t=null===xC||void 0===xC?void 0:xC.message)&&void 0!==t?t:"Failed to load campaign.")}finally{e.signal.aborted||h(!1)}}),[n,i]);(0,t.useEffect)((()=>{if(n)return b(),()=>{y.current&&y.current.abort()}}),[n]);const v=(0,t.useCallback)((async()=>{if(n&&s&&!i)try{tf.y.getInstance().clearCampaignCache(n);const e=await Tp.x.GetCampaignSummaryPublicByID(n,{force:!0});e&&(await Tp.x.ResetCampaign(s,void 0,e),g((e=>e+1)))}catch(xC){console.error("Failed to poll for campaign updates:",xC)}}),[n,s,i]);(0,t.useEffect)((()=>{if(!i)return _.current=setInterval(v,18e4),()=>{_.current&&clearInterval(_.current)}}),[v,i]);const w=(0,t.useCallback)((async()=>{if(s&&!s.isHydrated){h(!0);try{await Tp.x.Rehydratecampaign(s),g((e=>e+1))}catch(xC){console.error("Failed to hydrate campaign:",xC)}finally{h(!1)}}}),[s]),x=(0,t.useCallback)((async()=>{var e,t,a;const o=pn.o.getInstance().UserCampaignManager,i=null!==(e=null!==(t=null!==(a=o.ListOfCampaigns.find((e=>e.GetId()===n)))&&void 0!==a?a:o.ListOfAdminCampaigns.find((e=>e.GetId()===n)))&&void 0!==t?t:o.ListOfWarbandCampaigns.find((e=>e.GetId()===n)))&&void 0!==e?e:null;i?(l(i),d(i.GetRawData())):await b(),g((e=>e+1))}),[n,b]);return(0,Dn.jsx)($f.Provider,{value:{campaign:null!==s&&void 0!==s?s:null,loading:u,reloadCmDisplay:x,reloadCmData:b,updateCampaignKey:f,error:m,ensureHydrated:w},children:a})},Qf=()=>{const e=(0,t.useContext)($f);return null!==e&&void 0!==e?e:null},Xf=()=>{const e=(0,t.useContext)($f);if(!e)throw new Error("useCampaign must be used within a CampaignProvider");return e};var eg=e=>{let{className:t="",name:a="",userId:n=!1,link:o=!1,statusString:i="",isPremium:r=!1}=e;const s=(0,zt.Zp)();let l="";return(i.toLowerCase().includes("supporter")||r)&&(l="premium"),o&&n?(0,Dn.jsx)(yn.A,{classes:`UserName ${l} ${t}`,link:`/profile/${n}`,runfunc:()=>{s(`/profile/${n}`,{state:Date.now().toString()})},children:a}):(0,Dn.jsx)("div",{className:`UserName ${l} ${t}`,children:a})};var tg=e=>{var a;let{onClick:n,isActive:o}=e;const{warband:i,updateKey:r,warbandUser:s}=rf(),l=Qf(),c=null!==(a=null===l||void 0===l?void 0:l.campaign)&&void 0!==a?a:null;if(null==i)return(0,Dn.jsx)("div",{children:"Loading..."});const[d,u]=(0,t.useState)([]),[h,m]=(0,t.useState)(0);return(0,t.useEffect)((()=>{!async function(){const e=await(null===i||void 0===i?void 0:i.warband_data.GetValidationErrors());e&&(u(e),m(h+1))}()}),[r]),(0,Dn.jsxs)("div",{className:"WbbEditViewWarband warband-meta "+(o?"active":""),onClick:n,children:[(0,Dn.jsx)("div",{className:"meta-headline",children:"Warband"}),s&&(0,Dn.jsxs)("div",{className:"meta-item",children:[(0,Dn.jsx)("strong",{children:"User: "}),(0,Dn.jsx)(eg,{name:s.GetNickname(),link:!0,userId:s.GetUserId(),statusString:s.GetUserStatus()})]}),(0,Dn.jsxs)("div",{className:"meta-item",children:[(0,Dn.jsx)("strong",{children:"Faction:"})," ",i.warband_data.GetFactionName()]}),(0,Dn.jsxs)("div",{className:"meta-item",children:[(0,Dn.jsx)("strong",{children:"Rating:"})," ",(0,Dn.jsx)(il.A,{amount:i.warband_data.GetRatingDucats(),type:0}),"| ",(0,Dn.jsx)(il.A,{amount:i.warband_data.GetRatingGlory(),type:1})]}),(0,Dn.jsxs)("div",{className:"meta-item",children:[(0,Dn.jsx)("strong",{children:"Fielded: "}),"Elite: ",i.warband_data.GetNumElite(),", ","Troop: ",i.warband_data.GetNumTroop(),", ","Mercenary: ",i.warband_data.GetNumMercenary(),", ","Total: ",i.warband_data.GetNumFielded(),c?(0,Dn.jsx)(Dn.Fragment,{children:`/${c.GetMaxFieldedCurrent()}`}):(0,Dn.jsx)(Dn.Fragment,{children:`/${i.warband_data.GetCampaignMaxFieldStrength()}`})]}),(0,Dn.jsx)("div",{children:d.length>0&&(0,Dn.jsxs)("div",{className:"meta-item meta-item-vaidation-error",children:[(0,Dn.jsx)(Gn.g,{icon:Pn.JAe,className:"icon-inline-left-l"}),"The warband is not valid"]})},h)]})};var ag=e=>{var t;let{onClick:a,isActive:n}=e;const{warband:o,updateKey:i}=rf();if(null==o)return(0,Dn.jsx)("div",{children:"Loading..."});const{userId:r,isLoggedIn:s}=(0,ti.A)(),l=Qf(),c=null!==(t=null===l||void 0===l?void 0:l.campaign)&&void 0!==t?t:null;return(0,Dn.jsxs)("div",{className:"WbbEditViewCampaign warband-meta "+(n?"active":""),onClick:a,children:[(0,Dn.jsxs)("div",{className:"meta-headline "+(c?"has-campaign":""),children:["Campaign",r&&o.warband_data.IsOwner(r)&&o.warband_data.GetCampaignInvites().length>0&&(0,Dn.jsx)(Wp,{content:"!",size:"small"}),c&&(0,Dn.jsxs)(Dn.Fragment,{children:[" - ",c.GetName()]})]}),(0,Dn.jsxs)("div",{className:"meta-item",children:[(0,Dn.jsx)("strong",{children:"Victory Points: "}),o.warband_data.GetVictoryPoints()]}),c&&(0,Dn.jsxs)("div",{className:"meta-item",children:[(0,Dn.jsx)("strong",{children:`Threshold round: ${o.warband_data.GetCampaignCycleView()}: `}),(0,Dn.jsx)(il.A,{type:"d",amount:c.GetThresholdValueForRound(o.warband_data.GetCampaignCycleView())})]}),(0,Dn.jsxs)("div",{className:"meta-item",children:[(0,Dn.jsx)("strong",{children:"Campaign Round: "}),o.warband_data.GetCampaignCycleView(),c&&(0,Dn.jsxs)(Dn.Fragment,{children:["/",c.GetCurrentRound()]}),c?(0,Dn.jsx)(Dn.Fragment,{children:` (max round: ${c.GetMaxRound()})`}):(0,Dn.jsx)(Dn.Fragment,{children:` (max round: ${o.warband_data.GetCampaignCycleMax()})`})]})]},i)};var ng=e=>{let{show:a,onClose:n,onSubmit:o,category:i,exploration:r}=e;const[s,l]=(0,t.useState)(null),{warband:c,updateKey:d}=rf(),[u,h]=(0,t.useState)([]),[m,p]=(0,t.useState)({}),[f,g]=(0,t.useState)(0),{handleSubmit:y,isSubmitting:_}=Mf((e=>{const t=u.find((e=>e.ID===s));t&&(o(t),n())}));return(0,t.useEffect)((()=>{!async function(){if(0==Object.keys(m).length){const e=await(null===c||void 0===c?void 0:c.warband_data.GetFactionEquipmentOptions(r));let t=[];const a=c?c.warband_data.EquipmentRelCache:{},n=Object.keys(a),o={};if(void 0!=e){if(i.length>0){t=e.filter((e=>e.EquipmentItem.Category==i&&!(0,za.Kg)(e.Tags,"exploration_only")));for(let e=0;e<n.length;e++)a[n[e]].facrel.EquipmentItem.Category!=i||(0,za.Kg)(a[n[e]].facrel.Tags,"exploration_only")||(o[n[e]]=a[n[e]])}else{t=e.filter((e=>(0,za.Kg)(e.Tags,"exploration_only")));for(let e=0;e<n.length;e++)(0,za.Kg)(a[n[e]].facrel.Tags,"exploration_only")&&(o[n[e]]=a[n[e]])}p(o),h(t),g(f+1)}}}()}),[a]),(0,Dn.jsxs)(Il.A,{show:a,onHide:n,className:"WbbModal WbbModalSelect WbbModalAddItemToStash",centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Add Item to Stash"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:n})]}),(0,Dn.jsx)(Il.A.Body,{children:(0,Dn.jsx)("div",{className:"select-items-wrap",children:Object.keys(m).map(((e,t)=>(0,Dn.jsx)(kf.A,{id:m[e].facrel.ID,title:m[e].facrel.EquipmentItem.GetTrueName(),opened:s===m[e].facrel.ID,available:u.map((e=>e.ID)).includes(e),onClick:()=>{l((t=>t===m[e].facrel.ID?null:m[e].facrel.ID))},equipment:m[e].facrel.EquipmentItem,isSubmitting:_,onSubmit:y,submitBtnString:"Add to stash",cost:m[e].cost,costType:(0,za.Ie)(m[e].facrel.CostType),limit:m[e].limit>0?"Limit: "+m[e].count_cur+"/"+m[e].limit:"",restrictions:m[e].restrictions,unavailableString:m[e].failure.length>0?m[e].failure:void 0},`select-item-${m[e].facrel.ID}`)))})}),(0,Dn.jsx)(Il.A.Footer,{children:(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:n,children:"Cancel"})})]},f)};var og=e=>{let{show:a,onClose:n,currentChoice:o,onSubmit:i,choiceparent:r}=e;const[s,l]=(0,t.useState)(o);return(0,Dn.jsxs)(Il.A,{show:a,onHide:n,className:"WbbEditGoeticSelectionModal",centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Edit Option"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:n})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsx)("h6",{children:"Select Option"}),(0,Dn.jsxs)("div",{className:"goetic-selection-wrap",children:[r.Options.map((e=>(0,Dn.jsx)("div",{className:"select-item "+(s===e?"selected":""),onClick:()=>l(e),children:e.display_str},e.id+e.display_str))),0==r.Options.length&&(0,Dn.jsx)("div",{className:"select-item",children:"No options are currently available to select"})]})]}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:n,children:"Cancel"}),(0,Dn.jsx)(ss.A,{variant:"primary",onClick:()=>{i(s),n()},disabled:s===o,children:"Update Selection"})]})]})};var ig=e=>{let{property:a,dochange:n}=e;const{warband:o,reloadWbDisplay:i,updateKey:r}=rf(),[s,l]=(0,t.useState)(a.SelectItem),[c,d]=(0,t.useState)(!1),[u,h]=(0,t.useState)(0);return(0,Dn.jsxs)("div",{className:"WbbOptionSelect",children:[(0,Dn.jsx)(xf,{title:a.GetTrueName(),value:s?s.GetTrueName():"-",onClick:()=>d(!0),overrideplay:null!=s}),(0,Dn.jsx)(og,{show:c,onClose:()=>d(!1),currentChoice:s?{display_str:s.GetTrueName(),id:s.ID,value:s}:null,onSubmit:e=>{null!=e&&a.OnSelect(e).then((()=>{l(a.SelectItem);pn.o.getInstance().UserWarbandManager.UpdateItemInfo(o?o.id:-999).then((()=>i()))}))},choiceparent:a})]},r)};var rg=e=>{let{show:a,onClose:n,currentcount:o,costtype:i,onSubmit:r}=e;const[s,l]=(0,t.useState)("0"),[c,d]=(0,t.useState)(!1),u=parseInt(s)||0,h=c?-u:u,m=c&&u>o;return(0,Dn.jsxs)(Il.A,{show:a,onHide:n,className:"WbbModalEdit WbbEditStashAmountModal",centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsxs)(Il.A.Title,{children:["Edit Stashed ",(0,za.Ie)(i)]}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:n})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsxs)("div",{className:"btn-group w-100 mb-4",role:"group",children:[(0,Dn.jsx)("button",{type:"button",className:"btn "+(c?"btn-secondary inactive":"btn-primary"),onClick:()=>d(!1),children:"Add"}),(0,Dn.jsx)("button",{type:"button",className:"btn "+(c?"btn-primary":"btn-secondary inactive"),onClick:()=>d(!0),children:"Deduct"})]}),(0,Dn.jsxs)("div",{className:"mb-3",children:["Stashed "+(0,za.Ie)(i)+": ",o,0!==u&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(Gn.g,{icon:Pn.dmS,className:"icon-inline-right mb-1 mx-2"}),(0,Dn.jsxs)("span",{className:(c?"minus-text":"plus-text")+" fw-bold",children:[" ",o+h]}),m&&(0,Dn.jsx)(Gn.g,{icon:Pn.zpE,className:"icon-inline-left-l text-warning"})]})]}),(0,Dn.jsxs)("div",{className:"mb-3",children:[(0,Dn.jsx)("label",{htmlFor:"add-cost-input",children:c?"Amount to deduct":"Amount to add"}),(0,Dn.jsx)("input",{type:"number",id:"add-cost-input",className:"form-control mt-1",value:s,min:"0",onFocus:e=>e.target.select(),onChange:e=>{const t=e.target.value.replace(/[^0-9]/g,"");l(t)},onBlur:()=>{""===s.trim()&&l("0")}}),m&&(0,Dn.jsxs)("div",{className:"alert alert-warning my-3",children:[(0,Dn.jsx)("strong",{children:"Caution"}),(0,Dn.jsx)("div",{className:"small mt-1",children:"You can only deduct "+o+" "+(0,za.Ie)(i)+" from your stash."})]})]})]}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:n,children:"Cancel"}),(0,Dn.jsxs)(ss.A,{variant:c?"danger":"primary",onClick:()=>{r(h,i),n()},disabled:0===u||m,children:[c?"Deduct":"Add"," ",(0,za.Ie)(i)]})]})]})},sg=a(947),lg=a(8154);var cg=e=>{let{title:a,children:n,initiallyOpen:o=!1}=e;const[i,r]=(0,t.useState)(o);return(0,Dn.jsxs)("div",{className:"WbbDetailViewCollapse",children:[(0,Dn.jsxs)("div",{className:"WbbDetailViewCollapse-title",onClick:()=>r(!i),children:[(0,Dn.jsx)("span",{children:a}),(0,Dn.jsx)("span",{className:"collapse-chevron-wrap",children:(0,Dn.jsx)(Gn.g,{icon:i?Pn.w2A:Pn.Jt$,className:""})})]}),(0,Dn.jsx)(ll.A,{in:i,children:(0,Dn.jsx)("div",{className:"WbbDetailViewCollapse-content",children:(0,Dn.jsx)("div",{className:"WbbDetailViewCollapse-inner",children:n})})})]})};var dg=e=>{let{onClose:a}=e;const{warband:n,updateKey:o,reloadWbDisplay:i}=rf(),{play_mode:r,edit_mode:s,view_mode:l,print_mode:c,setMode:d}=ff();if(null==n)return(0,Dn.jsx)("div",{children:"Loading..."});const[u,h]=(0,t.useState)(0),[m,p]=(0,t.useState)(!1),[f,g]=(0,t.useState)(!1),[y,_]=(0,t.useState)(!1),[b,v]=(0,t.useState)(!1),[w,x]=(0,t.useState)(!1),[k,C]=(0,t.useState)(!1),[j,S]=(0,t.useState)(!1),[I,A]=(0,t.useState)(!1),[N,E]=(0,t.useState)(!1),[T,D]=(0,t.useState)(!1),R=e=>{n&&n.warband_data.AddStash(e).then((()=>{pn.o.getInstance().UserWarbandManager.UpdateItemInfo(n?n.id:-999).then((()=>i()))}))},M=(e,t)=>{n&&n.warband_data.AwaitedAddStashValue(e,t).then((()=>{pn.o.getInstance().UserWarbandManager.UpdateItemInfo(n?n.id:-999).then((()=>i()))}))},O=e=>n?n.warband_data.Equipment.filter((t=>{const a=t.HeldObject,n=void 0===a.Tags.deployed_equipment,o=a.GetEquipmentItem().Category===e,i=!(0,za.Kg)(a.Tags,"exploration_only")&&!(0,za.Kg)(a.GetEquipmentItem().Tags,"exploration_only");return n&&o&&i})):[],q=O("ranged"),G=O("grenade"),P=O("melee"),F=O("armour"),L=O("shield"),W=O("equipment"),B=O("special"),H=n?n.warband_data.Equipment.filter((e=>{const t=e.HeldObject,a=void 0===t.Tags.deployed_equipment,n=(0,za.Kg)(t.Tags,"exploration_only")||(0,za.Kg)(t.GetEquipmentItem().Tags,"exploration_only");return a&&n})):[];return(0,t.useEffect)((()=>{h(u+1)}),[o]),(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with Stashed Items.tsx"}),children:(0,Dn.jsxs)("div",{className:"WbbDetailView WbbStashDetailView",children:[(0,Dn.jsxs)("div",{className:"title",children:[(0,Dn.jsx)("div",{className:"title-back",onClick:a,children:(0,Dn.jsx)(Gn.g,{icon:Pn.Wzs,className:""})}),(0,Dn.jsx)("div",{className:"title-text",children:"Arsenal"})]}),(0,Dn.jsxs)("div",{className:"detail-view-content",children:[(0,Dn.jsxs)("div",{className:"stash-summary mb-3",children:[(0,Dn.jsxs)("div",{children:[(0,Dn.jsx)("strong",{children:"Strongbox: "}),(0,Dn.jsx)(il.A,{amount:n.warband_data.GetStashedDucats()>1e11?"Unlimited":n.warband_data.GetStashedDucats(),type:0})," | ",(0,Dn.jsx)(il.A,{amount:n.warband_data.GetStashedGlory()>1e11?"Unlimited":n.warband_data.GetStashedGlory(),type:1})]}),(0,Dn.jsxs)("div",{children:[(0,Dn.jsx)("strong",{children:"Value of items: "}),(0,Dn.jsx)(il.A,{amount:n.warband_data.GetStashedItemsValueDucats(),type:0})," | ",(0,Dn.jsx)(il.A,{amount:n.warband_data.GetStashedItemsValueGlory(),type:1})]}),s&&(0,Dn.jsxs)("div",{className:"mt-2",children:[n.warband_data.GetStashedDucats()<1e11&&(0,Dn.jsxs)("div",{className:"btn btn-primary",onClick:()=>E(!0),style:{marginRight:"0.5rem"},children:[(0,Dn.jsx)(sg.A,{className:"me-1"}),"Edit Ducats"]}),n.warband_data.GetStashedGlory()<1e11&&(0,Dn.jsxs)("div",{className:"btn btn-primary",onClick:()=>D(!0),children:[(0,Dn.jsx)(lg.A,{className:"me-1"}),"Edit Glory"]})]})]},u),(0,Dn.jsx)("div",{className:"stash-items-title",children:"Stashed Items"}),(0,Dn.jsxs)("div",{className:"stash-items-wrap",children:[(0,Dn.jsx)(Yf,{onAdd:()=>p(!0),battlekit:q,title:"Ranged Weapons"}),(0,Dn.jsx)(Yf,{onAdd:()=>g(!0),battlekit:G,title:"Grenades"}),(0,Dn.jsx)(Yf,{onAdd:()=>v(!0),battlekit:P,title:"Melee Weapons"}),(0,Dn.jsx)(Yf,{onAdd:()=>x(!0),battlekit:F,title:"Armour"}),(0,Dn.jsx)(Yf,{onAdd:()=>_(!0),battlekit:L,title:"Shields"}),(0,Dn.jsx)(Yf,{onAdd:()=>C(!0),battlekit:W,title:"Equipment"}),(0,Dn.jsx)(Yf,{onAdd:()=>S(!0),battlekit:B,title:"Special"}),(0,Dn.jsx)(Yf,{onAdd:()=>A(!0),battlekit:H,title:"Exploration Items"}),s&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(ng,{show:m,onClose:()=>p(!1),onSubmit:R,category:"ranged",exploration:!1}),(0,Dn.jsx)(ng,{show:f,onClose:()=>g(!1),onSubmit:R,category:"grenade",exploration:!1}),(0,Dn.jsx)(ng,{show:b,onClose:()=>v(!1),onSubmit:R,category:"melee",exploration:!1}),(0,Dn.jsx)(ng,{show:w,onClose:()=>x(!1),onSubmit:R,category:"armour",exploration:!1}),(0,Dn.jsx)(ng,{show:y,onClose:()=>_(!1),onSubmit:R,category:"shield",exploration:!1}),(0,Dn.jsx)(ng,{show:k,onClose:()=>C(!1),onSubmit:R,category:"equipment",exploration:!1}),(0,Dn.jsx)(ng,{show:j,onClose:()=>S(!1),onSubmit:R,category:"special",exploration:!0}),(0,Dn.jsx)(ng,{show:I,onClose:()=>A(!1),onSubmit:R,category:"",exploration:!0}),(0,Dn.jsx)(rg,{show:N,onClose:()=>E(!1),currentcount:n.warband_data.GetStashedDucats(),costtype:0,onSubmit:M}),(0,Dn.jsx)(rg,{show:T,onClose:()=>D(!1),currentcount:n.warband_data.GetStashedGlory(),costtype:1,onSubmit:M})]})]}),(null===n||void 0===n?void 0:n.warband_data.GetConsumablesEquipment().length)>0&&(0,Dn.jsx)("div",{className:"WbbDetailViewCollapse-wrap mt-3",children:(0,Dn.jsxs)(cg,{title:"One-Off Purchases",initiallyOpen:!1,children:[(0,Dn.jsxs)(Rp.A,{type:"info",className:"mb-3",children:[(0,Dn.jsx)("div",{className:"fw-bold",children:"About this list"}),"One-Off Purchases are transactions your warband made by gaining items from exploration or other means that award items once.",(0,Dn.jsx)("br",{}),(0,Dn.jsx)("br",{}),"This list is meant to be a history of mostly free transactions, so you can track where each item in your warband came from."]}),(0,Dn.jsx)("div",{className:"stash-items-category",children:null===n||void 0===n?void 0:n.warband_data.GetConsumablesEquipment().map(((e,t)=>(0,Dn.jsx)(ig,{property:e,dochange:!1},t)))})]})})]},o)]})})};var ug=e=>{let{warbprop:t,index:a,isinner:n}=e;const{warband:o,updateKey:i}=rf();return null==o?(0,Dn.jsx)("div",{children:"Loading..."}):(0,Dn.jsxs)("div",{className:"WbbEditViewModifier "+(void 0!=n?"inner":""),children:[(0,Dn.jsx)("div",{className:"modifier-title",children:(0,Dn.jsx)("span",{className:"title-name",children:t.GetTrueName()})}),t.SelfDynamicProperty.Selections.length>0&&(0,Dn.jsx)(Dn.Fragment,{children:t.SelfDynamicProperty.Selections.map((e=>(0,Dn.jsx)(jf,{property:t,choice:e},t.SelfDynamicProperty.Selections.indexOf(e))))}),(0,Dn.jsx)("div",{className:"modifier-body",children:null!=t.GetOwnDescription()&&(0,Dn.jsx)(Dn.Fragment,{children:(0,pl.fE)(t,t.GetOwnDescription())})})]},i)};var hg=e=>{let{warbprop:a,index:n,isinner:o}=e;const{warband:i,updateKey:r}=rf();if(null==i)return(0,Dn.jsx)("div",{children:"Loading..."});const{play_mode:s,edit_mode:l,view_mode:c,print_mode:d,setMode:u}=ff(),[h,m]=(0,t.useState)(!1);return(0,Dn.jsxs)("div",{className:"WbbEditViewExtraModifier "+(void 0!=o?"inner":""),children:[(0,Dn.jsxs)("div",{className:"WbbEditViewExtraModifier-title",onClick:()=>m(!h),children:[(0,Dn.jsx)("div",{className:"WbbEditViewExtraModifier-name",children:a.GetTrueName()}),l&&null!==i&&void 0!==i&&i.warband_data.HasModifier(a)?(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("span",{className:"collapse-chevron-wrap mx-4",children:(0,Dn.jsx)(Gn.g,{icon:h?Pn.w2A:Pn.Jt$,className:""})}),(0,Dn.jsx)(wf,{id:`WbbEditViewExtraModifier-${a.ID}`,type:"modifier",item:a})]}):(0,Dn.jsx)("span",{className:"collapse-chevron-wrap",children:(0,Dn.jsx)(Gn.g,{icon:h?Pn.w2A:Pn.Jt$,className:""})})]}),(0,Dn.jsx)(ll.A,{in:h,children:(0,Dn.jsx)("div",{children:(0,Dn.jsxs)("div",{className:"WbbEditViewExtraModifier-body",children:[a.SelfDynamicProperty.Selections.length>0&&(0,Dn.jsx)(Dn.Fragment,{children:a.SelfDynamicProperty.Selections.map((e=>(0,Dn.jsx)(jf,{property:a,choice:e},a.SelfDynamicProperty.Selections.indexOf(e))))}),null!=a.GetOwnDescription()&&(0,Dn.jsx)(Dn.Fragment,{children:(0,pl.fE)(a,a.GetOwnDescription())})]})})})]},r)};var mg=e=>{let{show:a,onClose:n,onSubmit:o}=e;const[i,r]=(0,t.useState)(null),[s,l]=(0,t.useState)(1),[c,d]=(0,t.useState)(0),{warband:u}=rf(),[h,m]=(0,t.useState)([]),[p,f]=(0,t.useState)(0),[g,y]=(0,t.useState)("all"),_=(Array.from(new Set(h.flatMap((e=>{var t;return(null===(t=e.Models)||void 0===t?void 0:t.map((e=>{var t;return null===(t=e.Faction)||void 0===t?void 0:t.Name})))||[]})).filter(Boolean))),new Map);h.forEach((e=>{var t;null===(t=e.Models)||void 0===t||t.forEach((e=>{var t;null===(t=e.Factions)||void 0===t||t.forEach((e=>{e.ID&&e.Name&&_.set(e.ID,e.Name)}))}))}));const b=Array.from(_.entries()),v="all"===g?h:h.filter((e=>{var t;return null===(t=e.Models)||void 0===t?void 0:t.some((e=>{var t;return null===(t=e.Factions)||void 0===t?void 0:t.some((e=>e.ID===g))}))}));(0,t.useEffect)((()=>{!async function(){const e=await $a.ModelFactory.GetAllModels();void 0!=e&&(m(e),f(p+1))}()}),[a]);return(0,Dn.jsxs)(Il.A,{show:a,onHide:n,className:"WbbModal WbbModalSelect WbbModalSelect_Fighter WbbModalAddFighterCustom",centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Add Custom Fighter"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:n})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsxs)("div",{className:"my-3 mx-3",children:[(0,Dn.jsx)("label",{htmlFor:"factionSelect",className:"form-label",children:"Filter by Faction"}),(0,Dn.jsxs)("select",{id:"factionSelect",className:"form-select",value:g,onChange:e=>y(e.target.value),children:[(0,Dn.jsx)("option",{value:"all",children:"All"}),b.map((e=>{let[t,a]=e;return(0,Dn.jsx)("option",{value:t,children:a},t)}))]})]}),(0,Dn.jsx)("div",{className:"my-4"}),v.map((e=>(0,Dn.jsxs)("div",{className:"select-item "+(i===e.ID?"selected":""),onClick:()=>{return t=e.ID,void r(t);var t},children:[(0,Dn.jsx)("div",{className:"model-image-wrap",children:(0,Dn.jsx)(Hf.A,{modelSlug:e.GetSlug(),size:"small",className:"model-image"})}),(0,Dn.jsx)("span",{className:"item-name",children:e.GetName()+(void 0!=e.Tags.held_variant_name?" ("+(0,za.h8)(e.Tags.held_variant_name.toString())+")":"")})]},e.ID))),(0,Dn.jsxs)("div",{className:"px-3",children:[(0,Dn.jsx)("input",{type:"number",id:"add-cost-input",className:"form-control my-3",defaultValue:0,onChange:e=>l(parseInt(e.target.value)||0),min:0}),(0,Dn.jsx)("div",{className:"my-3",children:(0,Dn.jsxs)("div",{className:"mt-2",style:{width:"100%"},children:[(0,Dn.jsxs)(ss.A,{className:"btn btn-primary "+(0==c?"perma-active":""),onClick:()=>d(0),style:{width:"50%"},active:0==c,children:[(0,Dn.jsx)(Gn.g,{icon:Pn.wq_,className:"icon-inline-left-l"}),"Spend Ducats"]}),(0,Dn.jsxs)(ss.A,{className:"btn btn-primary "+(1==c?"perma-active":""),onClick:()=>d(1),style:{width:"50%"},active:1==c,children:[(0,Dn.jsx)(Gn.g,{icon:Pn.iHh,className:"icon-inline-left-l"}),"Spend Glory"]})]})})]})]}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:n,children:"Cancel"}),(0,Dn.jsx)(ss.A,{variant:"primary",onClick:()=>{if(i){const e=h.filter((e=>e.ID===i));e.length>0&&(o(e[0],s,c),r(null),n())}},disabled:!i,children:"Add Fighter"})]})]})};var pg=e=>{let{show:a,onClose:n,onSubmit:o}=e;const[i,r]=(0,t.useState)(null),[s,l]=(0,t.useState)(1),[c,d]=(0,t.useState)(0),{warband:u}=rf(),[h,m]=(0,t.useState)([]),[p,f]=(0,t.useState)(0),[g,y]=(0,t.useState)("all"),[_,b]=(0,t.useState)("all");(0,t.useEffect)((()=>{!async function(){const e=await Za.EquipmentFactory.GetAllEquipment();void 0!=e&&(m(e),f(p+1))}()}),[a]);const v=new Map;h.forEach((e=>{var t;null===(t=e.EquipmentItems)||void 0===t||t.forEach((e=>{var t;null===(t=e.Factions)||void 0===t||t.forEach((e=>{e.ID&&e.Name&&v.set(e.ID,e.Name)}))}))}));const w=Array.from(v.entries()),x={melee:"Melee Weapons",ranged:"Ranged Weapons",armour:"Armour",equipment:"Equipment",field:"Field Equipment"},k=Array.from(new Set(h.map((e=>e.Category)).filter(Boolean))),C=h.filter((e=>{var t;const a="all"===_||e.Category===_,n="all"===g||(null===(t=e.EquipmentItems)||void 0===t?void 0:t.some((e=>{var t;return null===(t=e.Factions)||void 0===t?void 0:t.some((e=>e.ID===g))})));return a&&n}));return(0,Dn.jsxs)(Il.A,{show:a,onHide:n,className:"WbbModal WbbModalSelect WbbEquipmentAddCustomStash",centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Add Item to Stash"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:n})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsxs)("div",{className:"my-3 mx-3",children:[(0,Dn.jsx)("label",{htmlFor:"factionSelect",className:"form-label",children:"Filter by Faction"}),(0,Dn.jsxs)("select",{id:"factionSelect",className:"form-select",value:g,onChange:e=>y(e.target.value),children:[(0,Dn.jsx)("option",{value:"all",children:"Show all"}),w.map((e=>{let[t,a]=e;return(0,Dn.jsx)("option",{value:t,children:a},t)}))]})]}),(0,Dn.jsxs)("div",{className:"my-3 mx-3",children:[(0,Dn.jsx)("label",{htmlFor:"categorySelect",className:"form-label",children:"Filter by Category"}),(0,Dn.jsxs)("select",{id:"categorySelect",className:"form-select",value:_,onChange:e=>b(e.target.value),children:[(0,Dn.jsx)("option",{value:"all",children:"Show all"}),k.map((e=>(0,Dn.jsx)("option",{value:e,children:x[e]||e},e)))]})]}),(0,Dn.jsx)("div",{className:"my-4"}),C.length>0?(0,Dn.jsx)(Dn.Fragment,{children:C.map((e=>(0,Dn.jsx)("div",{className:"select-item "+(i===e.ID?"selected":""),onClick:()=>r(e.ID),children:(0,Dn.jsx)("span",{className:"item-name",children:e.GetTrueName()})},e.ID)))}):(0,Dn.jsx)(Dn.Fragment,{children:"No items found for the selected filters."}),(0,Dn.jsx)("hr",{}),(0,Dn.jsxs)("div",{className:"px-3",children:[(0,Dn.jsx)("input",{type:"number",id:"add-cost-input",className:"form-control my-3",defaultValue:0,onChange:e=>l(parseInt(e.target.value)||0)}),(0,Dn.jsxs)("div",{className:"my-3",children:[(0,Dn.jsxs)(ss.A,{className:"btn btn-primary "+(0==c?"perma-active":""),onClick:()=>d(0),style:{width:"50%"},active:0==c,children:[(0,Dn.jsx)(Gn.g,{icon:Pn.wq_,className:"icon-inline-left-l"}),"Spend Ducats"]}),(0,Dn.jsxs)(ss.A,{className:"btn btn-primary "+(1==c?"perma-active":""),onClick:()=>d(1),style:{width:"50%"},active:1==c,children:[(0,Dn.jsx)(Gn.g,{icon:Pn.iHh,className:"icon-inline-left-l"}),"Spend Glory"]})]})]})]}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:n,children:"Cancel"}),(0,Dn.jsx)(ss.A,{variant:"primary",onClick:()=>{const e=h.find((e=>e.ID===i));e&&(o(e,s,c),r(null),n())},disabled:!i||!C.some((e=>e.ID===i)),children:"Add item"})]})]},p)};var fg=e=>{var a,n;let{game:o,className:i="",viewUserId:r=null,contextUserId:s=null}=e;if(!o||!o.GameData)return null;const{userId:l}=(0,ti.A)(),c=(0,zt.Zp)(),[d,u]=(0,t.useState)("");(0,t.useEffect)((()=>{var e;const t=null===(e=o.GameData)||void 0===e?void 0:e.scenario_id;if(!t)return void u("Custom Scenario");let a=!1;return(async()=>{try{const e=await Xa.ScenarioFactory.CreateNewScenario(t,null);a||u(e.Name?e.Name:"Custom Scenario")}catch(xC){console.error("Failed to load scenario",xC),a||u("Custom Scenario")}})(),()=>{a=!0}}),[null===(a=o.GameData)||void 0===a?void 0:a.scenario_id]);const h=new Date(1e3*o.Date).toLocaleDateString(void 0,{year:"numeric",month:"2-digit",day:"2-digit"}),m=()=>{var e;const t=null===(e=o.GameData)||void 0===e?void 0:e.winner;if("draw"===t||null==t)return"Draw";const a=o.Warbands.find((e=>e.id===t));return a?a.name:"-"},p=(0,t.useMemo)((()=>{const e=new Map;for(const t of o.Players)e.set(Number(t.id),t);return e}),[o.Players]),f=r&&Array.isArray(o.MissingSignoffs)&&o.MissingSignoffs.includes(r),g=(0,t.useMemo)((()=>{var e;const t=null===(e=o.GameData)||void 0===e?void 0:e.winner;if("number"!==typeof t)return!1;const a=o.Warbands.find((e=>Number(e.id)===Number(t)));return!!a&&Number(a.user_id)===Number(s)}),[null===(n=o.GameData)||void 0===n?void 0:n.winner,o.Warbands,s]),y=e=>e>0?`+${e}`:e<0?`${e}`:"\xb10";return(0,Dn.jsxs)(yn.A,{classes:`GameListItem ${i} ${o.Verified?"verified":"unverified"}`,link:`/games/${o.ID}`,runfunc:()=>{c(`/games/${o.ID}`)},children:[(0,Dn.jsxs)("div",{className:"GameListItem-head",children:[(0,Dn.jsxs)("div",{className:"GameListItem-date",children:[h,!o.Verified&&f&&(0,Dn.jsx)(Gn.g,{icon:Pn.lEd,className:"ms-2 icon-danger"}),!o.Verified&&!f&&(0,Dn.jsx)(Gn.g,{icon:Pn.JAe,className:"ms-2 icon-wraning"})]}),(0,Dn.jsx)("div",{className:"GameListItem-scenario",children:d})]}),(0,Dn.jsxs)("div",{className:"GameListItem-content",children:[(0,Dn.jsx)("div",{className:"GameListItem-center",children:"Draw"==m()?(0,Dn.jsx)("div",{className:"draw",children:"Draw"}):(0,Dn.jsx)(Dn.Fragment,{children:s?(0,Dn.jsxs)(Dn.Fragment,{children:[g?(0,Dn.jsx)("div",{className:"win-context",children:"Win"}):(0,Dn.jsx)("div",{className:"loss-context",children:"Loss"}),(()=>{const e=(()=>{var e,t,a,n;if(!o||!s)return null;if(!o.GameRatings)return null;let i=null;if("string"===typeof o.GameRatings)try{i=JSON.parse(o.GameRatings)}catch{return null}else i=o.GameRatings;const r=i[String(s)];if(!r)return null;const l=null!==(e=r.r0)&&void 0!==e?e:0,c=null!==(t=r.dr)&&void 0!==t?t:0,d=null!==(a=r.m0)&&void 0!==a?a:0,u=null!==(n=r.dm)&&void 0!==n?n:0;return{ratingDelta:c,ratingBefore:l,ratingAfter:l+c,mmrDelta:u,mmrBefore:d,mmrAfter:d+u}})();if(!e)return null;const{ratingDelta:t,mmrDelta:a}=e;return(0,Dn.jsxs)("div",{className:"rating-change",children:[(0,Dn.jsxs)("div",{className:"rating-change-el",children:[y(t)," TR"]}),(0,Dn.jsxs)("div",{className:"rating-change-el",children:[y(a)," MMR"]})]})})()]}):(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("div",{className:"winner-general",children:"Winner"}),(0,Dn.jsx)("div",{className:"winner-name",children:m()})]})})}),(0,Dn.jsx)("div",{className:"GameListItem-forces",children:o.Warbands.map(((e,t)=>{var a;const n=null!==(a=p.get(Number(e.user_id)))&&void 0!==a?a:null;return n?(0,Dn.jsxs)("div",{className:"GameListItem-force",children:[(0,Dn.jsx)("div",{className:"force-bg-img-wrap",children:(0,Dn.jsx)(Ul,{className:"force-bg-img",factionSlug:e.faction_slug,size:"medium_large"})}),(0,Dn.jsxs)("div",{className:"force-content",children:[(0,Dn.jsx)("div",{className:"force-player-name",children:n.name}),(0,Dn.jsx)("div",{className:"force-warband-name",children:e.name}),(0,Dn.jsx)("div",{className:"force-warband-faction",children:e.faction})]})]},t):null}))})]}),l&&l==r&&(0,Dn.jsxs)(Dn.Fragment,{children:[!o.Verified&&f&&(0,Dn.jsxs)("div",{className:"GameListItem-verification GameListItem-verification-self",children:[(0,Dn.jsx)(Gn.g,{icon:Pn.lEd,className:"me-2"}),"You need to verify this game."]}),!o.Verified&&!f&&(0,Dn.jsxs)("div",{className:"GameListItem-verification GameListItem-verification-others",children:[(0,Dn.jsx)(Gn.g,{icon:Pn.JAe,className:"me-2"}),"Your opponent needs to verify this game."]})]})]})},gg=a(8933);var yg=()=>{const{warband:e,setWarband:a,updateKey:n}=rf();if(null==e)return(0,Dn.jsx)("div",{children:"Loading..."});const[o,i]=(0,t.useState)(!1),{userId:r}=(0,ti.A)(),[s,l]=(0,t.useState)([]),[c,d]=(0,t.useState)(!0),[u,h]=(0,t.useState)(null),m=(0,t.useRef)(null);return(0,t.useEffect)((()=>{if(Number.isNaN(e.warband_data.GetPostId()))return h("Missing or invalid warband id"),void d(!1);m.current&&m.current.abort();const t=new AbortController;m.current=t;return(async()=>{try{d(!0),h(null);const t=await gg.T.GetReportsByWarband(e.warband_data.GetPostId());l(t.slice())}catch(xC){var a;if("AbortError"===(null===xC||void 0===xC?void 0:xC.name))return;h(null!==(a=null===xC||void 0===xC?void 0:xC.message)&&void 0!==a?a:"Error Loading Games.")}finally{t.signal.aborted||d(!1)}})(),()=>{var e;return null===(e=m.current)||void 0===e?void 0:e.abort()}}),[e.warband_data.GetPostId()]),(0,Dn.jsxs)("div",{className:"WbbWbHistory",children:[(0,Dn.jsxs)("div",{className:"btn btn-primary w-100 mb-3",onClick:()=>{i(!0)},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.s6x,className:"me-2"}),"Add Game Report"]}),c&&(0,Dn.jsx)("div",{className:"LoadingOverlay-wrap-150",children:(0,Dn.jsx)(Zo,{message:"Loading Games"})}),u&&(0,Dn.jsx)("div",{className:"text-danger",children:u}),!c&&!u&&0===s.length&&(0,Dn.jsx)("div",{className:"p-2 text-center",children:"No games found"}),!c&&!u&&s.length>0&&(0,Dn.jsx)(Dn.Fragment,{children:s.map(((t,a)=>(0,Dn.jsx)(fg,{game:t,viewUserId:e.warband_data.UserID==r?r:null,contextUserId:e.warband_data.UserID},a)))}),(0,Dn.jsx)(vf,{show:o,onClose:()=>{i(!1)},warbandId:null===e||void 0===e?void 0:e.id})]})};var _g=e=>{let{show:t,onClose:a,onConfirm:n,body:o,title:i="Confirmation"}=e;return(0,Dn.jsxs)(Il.A,{show:t,onHide:a,centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:i}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:e=>{e.stopPropagation(),a()}})]}),(0,Dn.jsxs)(Il.A.Body,{children:[o,(0,Dn.jsxs)("div",{className:"mt-4 d-flex justify-content-end",children:[(0,Dn.jsx)("button",{className:"btn btn-secondary me-2",onClick:a,children:"Cancel"}),(0,Dn.jsx)("button",{className:"btn btn-danger",onClick:()=>{n(),a()},children:"Confirm"})]})]})]})};var bg=e=>{var a,n,o,i;let{onClose:r}=e;const{warband:s,setWarband:l,reloadWbDisplay:c,updateKey:d,warbandUser:u}=rf();if(null==s)return(0,Dn.jsx)("div",{children:"Loading..."});const{play_mode:h,edit_mode:m,view_mode:p,print_mode:f,setMode:g}=ff(),y=Qf(),_=null!==(a=null===y||void 0===y?void 0:y.campaign)&&void 0!==a?a:null,[b,v]=(0,t.useState)(s.warband_data.IsWarbandCustom()),[w,x]=(0,t.useState)(s.warband_data.IsWarbandExplorationOnly()),[k,C]=(0,t.useState)(!1),[j,S]=(0,t.useState)(!1),[I,A]=(0,t.useState)(!1),[N,E]=(0,t.useState)([]),[T,D]=(0,t.useState)(0);(0,t.useEffect)((()=>{!async function(){const e=await(null===s||void 0===s?void 0:s.warband_data.GetValidationErrors());e&&(E(e),D(T+1))}()}),[d]),(0,t.useEffect)((()=>{1==w?s.warband_data.Restrictions.includes("open_exploration")||(s.warband_data.Restrictions.push("open_exploration"),s.warband_data.DumpCache()):s.warband_data.Restrictions.includes("open_exploration")&&(s.warband_data.Restrictions=s.warband_data.Restrictions.filter((e=>"open_exploration"!==e)),s.warband_data.DumpCache())}),[w]);const R=Number(null!==(n=s.warband_data.GetNumReserved())&&void 0!==n?n:0),M=Number(null!==(o=s.warband_data.GetNumLost())&&void 0!==o?o:0),O=Number(null!==(i=s.warband_data.GetNumDead())&&void 0!==i?i:0),q=[R>0&&`Reserved: ${R}`,M>0&&`Lost: ${M}`,O>0&&`Dead: ${O}`].filter(Boolean).join(", ");return(0,Dn.jsxs)("div",{className:"WbbDetailView WbbWarbandDetailView",children:[(0,Dn.jsxs)("div",{className:"title",children:[(0,Dn.jsx)("div",{className:"title-back",onClick:r,children:(0,Dn.jsx)(Gn.g,{icon:Pn.Wzs,className:""})}),(0,Dn.jsx)("div",{className:"title-text",children:"Warband"})]}),(0,Dn.jsxs)("div",{className:"detail-view-content",children:[(0,Dn.jsx)("div",{className:"detail-section-title",children:"Warband Details"}),(0,Dn.jsxs)("div",{className:"detail-section-text",children:[u&&(0,Dn.jsxs)("div",{className:"detail-section-text-element",children:[(0,Dn.jsx)("strong",{children:"User: "}),(0,Dn.jsx)(eg,{name:u.GetNickname(),link:!0,userId:u.GetUserId(),statusString:u.GetUserStatus()})]}),(0,Dn.jsxs)("div",{className:"detail-section-text-element",children:[(0,Dn.jsx)("strong",{children:"Faction: "}),s.warband_data.GetFactionName()]}),(0,Dn.jsxs)("div",{className:"detail-section-text-element",children:[(0,Dn.jsx)("strong",{children:"Name: "}),s.warband_data.GetWarbandName()]}),(0,Dn.jsxs)("div",{className:"detail-section-text-element",children:[(0,Dn.jsx)("strong",{children:"Rating: "}),(0,Dn.jsx)(il.A,{amount:s.warband_data.GetRatingDucats(),type:0})," | ",(0,Dn.jsx)(il.A,{amount:s.warband_data.GetRatingGlory(),type:1})]}),(0,Dn.jsxs)("div",{className:"detail-section-text-element",children:[(0,Dn.jsx)("strong",{children:"Value: "}),(0,Dn.jsx)(il.A,{amount:s.warband_data.GetTotalValueDucats(),type:0})," | ",(0,Dn.jsx)(il.A,{amount:s.warband_data.GetTotalValueGlory(),type:1})]}),(0,Dn.jsxs)("div",{className:"detail-section-text-element",children:[(0,Dn.jsx)("strong",{children:"Fighters: "}),"Elite: ",s.warband_data.GetNumElite()," | ","Troop: ",s.warband_data.GetNumTroop()," | ","Mercenary: ",s.warband_data.GetNumMercenary()," | ","Fielded: ",s.warband_data.GetNumFielded(),_?(0,Dn.jsx)(Dn.Fragment,{children:`/${_.GetMaxFieldedCurrent()}`}):(0,Dn.jsx)(Dn.Fragment,{children:`/${s.warband_data.GetCampaignMaxFieldStrength()}`})]}),q&&(0,Dn.jsxs)("div",{className:"detail-section-text-element",children:[(0,Dn.jsx)("strong",{children:"Other: "}),q]}),N.length>0&&(0,Dn.jsxs)(Rp.A,{type:"warning",className:"my-3",children:[(0,Dn.jsx)("h6",{children:"The warband is not valid"}),(0,Dn.jsx)("ul",{className:"my-1 px-3",children:N.map(((e,t)=>(0,Dn.jsx)("li",{children:e},t)))})]}),1==s.warband_data.IsWarbandCustom()&&(0,Dn.jsxs)(Rp.A,{type:"info",className:"my-3",children:[(0,Dn.jsx)("h6",{children:"Unrestriced Warband"}),(0,Dn.jsx)("div",{children:"This warband is in unrestricted mode."})]})]}),(0,Dn.jsxs)("div",{className:"WbbDetailViewCollapse-wrap",children:[(s.warband_data.Faction.MyFaction?s.warband_data.Faction.MyFaction.SelfDynamicProperty.Selections.length:0)>0&&(0,Dn.jsx)(cg,{title:"Warband Options",initiallyOpen:!0,children:(s.warband_data.Faction.MyFaction?s.warband_data.Faction.MyFaction.SelfDynamicProperty.Selections.length:0)>0&&(0,Dn.jsx)(Dn.Fragment,{children:(s.warband_data.Faction.MyFaction?s.warband_data.Faction.MyFaction.SelfDynamicProperty.Selections:[]).map((e=>(0,Dn.jsx)(jf,{property:s.warband_data.Faction.MyFaction,choice:e},s.warband_data.Faction.MyFaction?s.warband_data.Faction.MyFaction.SelfDynamicProperty.Selections.indexOf(e):0)))})}),(null===s||void 0===s?void 0:s.warband_data.GetWarbandFactionOptionsModifiersList().length)>0&&(0,Dn.jsx)(cg,{title:"Faction Selections",initiallyOpen:!0,children:null===s||void 0===s?void 0:s.warband_data.GetWarbandFactionOptionsModifiersList().map((e=>(0,Dn.jsx)(hg,{warbprop:e,isinner:!0,index:null===s||void 0===s?void 0:s.warband_data.GetWarbandFactionOptionsModifiersList().indexOf(e)},e.GetTrueName())))}),(null===s||void 0===s?void 0:s.warband_data.GetWarbandFactionModifiersList().length)>0&&(0,Dn.jsx)(cg,{title:"Faction Special Rules",initiallyOpen:!0,children:null===s||void 0===s?void 0:s.warband_data.GetWarbandFactionModifiersList().map((e=>(0,Dn.jsx)(ug,{warbprop:e,isinner:!0,index:null===s||void 0===s?void 0:s.warband_data.GetWarbandFactionModifiersList().indexOf(e)},e.GetTrueName())))}),(0,Dn.jsxs)(cg,{title:"Notes & Lore",initiallyOpen:!1,children:[(0,Dn.jsx)(Vf,{initialText:s.warband_data.GetWarbandNotes(),title:"Warband Notes",onSave:e=>{null===s||void 0===s||s.warband_data.SaveNote(e,"notes");pn.o.getInstance().UserWarbandManager.UpdateItemInfo(s?s.id:-999).then((()=>c()))}}),(0,Dn.jsx)(Vf,{initialText:s.warband_data.GetLore(),title:"Warband Lore",onSave:e=>{null===s||void 0===s||s.warband_data.SaveNote(e,"lore");pn.o.getInstance().UserWarbandManager.UpdateItemInfo(s?s.id:-999).then((()=>c()))}})]}),(0,Dn.jsx)(cg,{title:"History",initiallyOpen:!1,children:(0,Dn.jsx)(yg,{})}),m&&(0,Dn.jsxs)(cg,{title:"Advanced Options",initiallyOpen:!1,children:["ver_default"!=s.warband_data.getVersionTag()&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsxs)("div",{className:"mb-3",children:[(0,Dn.jsx)("div",{className:"fw-bold mb-1",children:"You are using the playtest rules"}),(0,Dn.jsx)("div",{className:"form-text mb-3",children:"Your warband was created using the Playtest rules v1.63. You can upgrade your warband to use the official 1.0 rules. Once you upgrade your warband, you can not downgrade your warband."}),(0,Dn.jsxs)("div",{className:"btn btn-primary",onClick:()=>S(!0),children:["Upgrade to 1.0 ruleset",(0,Dn.jsx)(Gn.g,{icon:Pn.ZW_,className:"ms-2"})]}),(0,Dn.jsx)(_g,{show:j,onClose:()=>S(!1),onConfirm:()=>{if(s){s.warband_data.ID;pn.o.getInstance().UserWarbandManager.UpdateWarbandVersion(s).then((()=>{window.location.reload()}))}},title:"Confirm Upgrade",body:(0,Dn.jsxs)(Rp.A,{type:"danger",children:["Do you want to upgrade your warband to 1.0?",(0,Dn.jsx)("div",{className:"fw-bold",children:"This action can not be undone."})]})})]}),(0,Dn.jsx)("hr",{})]}),(0,Dn.jsxs)("div",{className:"form-check form-switch",children:[(0,Dn.jsx)("input",{className:"form-check-input",type:"checkbox",id:"customModeToggle",checked:w,onChange:e=>x(e.target.checked)}),(0,Dn.jsx)("label",{className:"form-check-label",htmlFor:"customModeToggle",children:"Enable Open Exploration"})]}),(0,Dn.jsx)("div",{className:"form-text mb-3",children:"Allowing for Open Exlporation means your warband will no longer be restricted by the need for certain items to be purchased during the Exploration Phase, perfect for one-off games."}),(0,Dn.jsxs)("div",{className:"form-check form-switch",children:[(0,Dn.jsx)("input",{className:"form-check-input",type:"checkbox",id:"customModeToggle",checked:b,onChange:e=>v(e.target.checked)}),(0,Dn.jsx)("label",{className:"form-check-label",htmlFor:"customModeToggle",children:"Enable Advanced Options"})]}),(0,Dn.jsx)("div",{className:"form-text",children:"These options allow you to add custom fighters and items to your warband. They are not part of the official rules and should be used with caution."}),b&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("hr",{}),(0,Dn.jsxs)("div",{className:"btn btn-add-element btn-block mb-3",onClick:()=>C(!0),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.QLR,className:"icon-inline-left-l"}),"Add Custom Fighter"]}),(0,Dn.jsxs)("div",{className:"btn btn-add-element btn-block mb-3",onClick:()=>A(!0),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.QLR,className:"icon-inline-left-l"}),"Add Custom Item"]})]})]})]}),k&&(0,Dn.jsx)(mg,{show:k,onClose:()=>C(!1),onSubmit:(e,t,a)=>{s&&s.warband_data.AddCustomFighter(e,t,a).then((()=>{pn.o.getInstance().UserWarbandManager.UpdateItemInfo(s?s.id:-999).then((()=>c()))}))}}),I&&(0,Dn.jsx)(pg,{show:I,onClose:()=>A(!1),onSubmit:(e,t,a)=>{s&&s.warband_data.CustomStash(e,t,a).then((()=>{pn.o.getInstance().UserWarbandManager.UpdateItemInfo(s?s.id:-999).then((()=>c()))}))}})]})]})};var vg=e=>{let{show:a,onClose:n,currentVP:o,onSubmit:i}=e;const[r,s]=(0,t.useState)(o);return(0,Dn.jsxs)(Il.A,{show:a,onHide:n,className:"WbbEditVictoryPointsModal",centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Edit Victory Points"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:n})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsxs)("div",{className:"mb-3",children:["Victory Points: "+o,void 0!=r&&r>=0&&r!=o&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(Gn.g,{icon:Pn.dmS,className:"icon-inline-right mb-1"}),(0,Dn.jsxs)("span",{className:(r&&r>o?"plus-text":"minus-text")+" mx-1",children:[" ",r]})]})]}),(0,Dn.jsx)("label",{htmlFor:"set-victory-points-input",children:"Set Victory Points"}),(0,Dn.jsx)("input",{id:"set-victory-points-input",type:"number",className:"form-control",value:null!==r&&void 0!==r?r:"",onChange:e=>{const t=e.target.value;s(""===t?void 0:parseInt(t))},onFocus:e=>e.target.select()}),"number"===typeof r&&r<0&&(0,Dn.jsxs)("div",{className:"alert alert-warning my-3",children:[(0,Dn.jsx)("strong",{children:"Caution"}),(0,Dn.jsx)("div",{className:"small",children:"You cannot have negative Victory points"})]})]}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:n,children:"Cancel"}),(0,Dn.jsx)(ss.A,{variant:"primary",onClick:()=>{void 0!=r&&(i(r),n())},disabled:r===o,children:"Update VP"})]})]})};var wg=e=>{let{show:a,onClose:n,currentPatron:o,onSubmit:i}=e;const[r,s]=(0,t.useState)(o),[l,c]=(0,t.useState)([]),{warband:d,reloadWbDisplay:u,updateKey:h}=rf(),[m,p]=(0,t.useState)(0);(0,t.useEffect)((()=>{!async function(){let e=[];d&&(e=await(null===d||void 0===d?void 0:d.warband_data.GetPatronList())),c(e),p(m+1)}()}),[a]);return(0,Dn.jsxs)(Il.A,{show:a,onHide:n,className:"WbbModal WbbModalSelect WbbEditPatronSelectionModal",centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Edit Patron"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:n})]}),(0,Dn.jsx)(Il.A.Body,{children:(0,Dn.jsx)("div",{className:"patron-selection-wrap",children:l.map((e=>(0,Dn.jsx)("div",{className:"select-item "+(r===e?"selected":""),onClick:()=>s(e),children:(0,Dn.jsxs)("span",{children:[o===e&&(0,Dn.jsx)(Gn.g,{icon:Pn.SGM,className:"icon-inline-left-l"}),e.GetTrueName()]})},e.GetID())))})},m),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:n,children:"Cancel"}),(0,Dn.jsx)(ss.A,{variant:"primary",onClick:()=>{i(r?r.ID:""),n()},disabled:r===o,children:"Update Patron"})]})]})};var xg=e=>{let{show:a,onClose:n,currentCampaignCycle:o,currentCampaignCycleMax:i,onSubmit:r}=e;const[s,l]=(0,t.useState)(o),[c,d]=(0,t.useState)(i),[u,h]=(0,t.useState)(a),[m,p]=(0,t.useState)(!1);t.useEffect((()=>{a&&(h(!0),p(!1))}),[a]);const f=()=>{h(!1),p(!1),n()},g=()=>{f(),l(o)};return(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsxs)(Il.A,{show:u,onHide:g,className:"WbbModalEdit WbbEditCampaignCycleModal",centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Edit Warband Round"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:g})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsxs)("div",{className:"mb-3",children:["Current Round: "+o,void 0!=s&&s>0&&s!=o&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(Gn.g,{icon:Pn.dmS,className:"icon-inline-right mb-1"}),(0,Dn.jsxs)("span",{className:(s&&s>o?"plus-text":"minus-text")+" mx-1",children:[" ",s]})]})]}),(0,Dn.jsx)("label",{htmlFor:"set-campaign-round-input",children:"Set Warband Round"}),(0,Dn.jsx)("input",{id:"set-campaign-round-input",type:"number",className:"form-control",value:null!==s&&void 0!==s?s:"",onChange:e=>{const t=e.target.value;l(""===t?void 0:parseInt(t))},onFocus:e=>e.target.select(),min:0}),(!s||s<0)&&(0,Dn.jsxs)("div",{className:"alert alert-warning my-3",children:[(0,Dn.jsx)("strong",{children:"Caution"}),(0,Dn.jsx)("div",{className:"small",children:"You need to select a valid number for the campaign cycle"})]})]}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:g,children:"Cancel"}),(0,Dn.jsx)(ss.A,{variant:"primary",disabled:s===o||!s||s<1,onClick:()=>{s&&(r(s,c),f(),n())},children:"Update Round"})]})]}),(0,Dn.jsxs)(Il.A,{show:m,onHide:g,className:"WbbEditCampaignCycleModal",centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsxs)(Il.A.Title,{children:["Advance to Cylce "+(c+1)," "]}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:g})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsx)("div",{className:"cycle-hint-above",children:"Do you want to advance to the next Campaign cycle?"}),(0,Dn.jsx)("br",{}),(0,Dn.jsx)("div",{className:"cycle-hint-below",children:(0,Dn.jsxs)("ul",{children:[(0,Dn.jsx)("li",{children:"The Warband details of the previous round will be copied."}),(0,Dn.jsx)("li",{children:"The previous rounds cannot be edited after you advance to the next round."}),(0,Dn.jsx)("li",{children:"Make sure you have tracked all advancements, injuries, exploration etc. before advancing to the next round."})]})})]}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:g,children:"Cancel"}),(0,Dn.jsxs)(ss.A,{variant:"primary",onClick:()=>{r(c+1,c+1),l(c+1),d(c+1),f(),n()},children:["Advance to cycle "+(c+1),(0,Dn.jsx)(Gn.g,{icon:Pn.XkK,className:"icon-inline-right"})]})]})]})]})};var kg=e=>{let{show:a,onClose:n,currentFails:o,onSubmit:i}=e;const[r,s]=(0,t.useState)(o);return(0,Dn.jsxs)(Il.A,{show:a,onHide:n,className:"WbbModalEdit WbbEditFailedPromotionModal",centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Edit Failed Promotions"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:n})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsx)("h6",{children:"Set Failed Promotions"}),(0,Dn.jsxs)("label",{className:"form-label",children:[o,r!=o&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(Gn.g,{icon:Pn.dmS,className:"icon-inline-right "}),(0,Dn.jsxs)("span",{className:""+(r>o?"plusscar":"minusscar"),children:[" ",r]})]})]}),(0,Dn.jsx)("div",{className:"failed-promo-boxes",children:Array.from({length:6},((e,t)=>{const a=t+1,n=a<=o,i=6===a,s=a>o&&a<=r,l=a<=o&&a>r;return(0,Dn.jsxs)("div",{className:"failed-promo-box",children:[i&&(0,Dn.jsx)(Gn.g,{icon:Pn.C97,className:"final-icon"}),l?(0,Dn.jsx)(Gn.g,{icon:Pn.e68,className:"minusfailed"}):(0,Dn.jsx)(Dn.Fragment,{children:n&&(0,Dn.jsx)(Gn.g,{icon:Pn.e68})}),s&&(0,Dn.jsx)(Gn.g,{icon:Pn.e68,className:"plusfailed"})]},a)}))}),(0,Dn.jsxs)("div",{className:"mt-3",children:[(0,Dn.jsx)("button",{className:"btn btn-secondary me-3 pe-3 ps-3",onClick:()=>s(Math.max(0,r-1)),children:(0,Dn.jsx)(Gn.g,{icon:Pn.EZy})}),(0,Dn.jsx)("button",{className:"btn btn-secondary pe-3 ps-3",onClick:()=>s(r+1),children:(0,Dn.jsx)(Gn.g,{icon:Pn.QLR})})]}),(0,Dn.jsx)("p",{className:"my-3 small",children:(0,Dn.jsx)("i",{children:"If in total you fail 5 Promotion rolls in a row (regardless how the dice are distributed amongst the models), the 6th one will always succeed. This re-sets the counter."})})]}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:n,children:"Cancel"}),(0,Dn.jsx)(ss.A,{variant:"primary",onClick:()=>{i(r),n()},disabled:r===o,children:"Update Failed Promotions"})]})]})};var Cg=()=>{const{userId:e}=(0,ti.A)(),[a,n]=(0,t.useState)(!1),{campaign:o,loading:i,reloadCmData:r}=Xf(),{warband:s,reloadWbDisplay:l,reloadWbData:c}=rf(),d=(0,zt.Zp)();if(!e||!s||!s.warband_data.IsOwner(e))return null;if(!i&&o&&!o.IsInvitedWarband(s.warband_data.GetPostId()))return null;if(!i&&!o)return null;if(i)return(0,Dn.jsx)("div",{className:"WbbCampaignInvite",children:(0,Dn.jsx)(Zo,{message:"Loading Campaign Invites",className:"small"})});return(0,Dn.jsxs)("div",{className:"WbbCampaignInvite",children:[(0,Dn.jsx)("div",{className:"fw-bold",children:"Campaign invite"}),(0,Dn.jsx)(yn.A,{classes:"WbbCampaignInvite-link",link:`/campaigns/${null===o||void 0===o?void 0:o.GetId()}`,runfunc:()=>{d(`/campaigns/${null===o||void 0===o?void 0:o.GetId()}`)},children:null===o||void 0===o?void 0:o.GetName()}),(0,Dn.jsx)("div",{className:"small",children:"This warband is invited to a campaign. Click below to join or decline the invitation."}),a?(0,Dn.jsx)(Zo,{message:"Loading",className:"small"}):(0,Dn.jsxs)("div",{className:"WbbCampaignInvite-actions",children:[(0,Dn.jsxs)(ss.A,{variant:"primary",className:"btn-sm me-3",onClick:async()=>{if(o){n(!0);try{const e=pn.o.getInstance();await e.UserCampaignManager.RunInit(),await e.UserCampaignManager.CampaignWarbandAccept(o.GetId(),s.warband_data.GetPostId()),Us.success("Joined Campaign"),window.location.reload()}catch(xC){Us.error("Failed to join campaign."),console.error(xC),n(!1)}}},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.e68,className:"me-2"}),"Join"]}),(0,Dn.jsxs)(ss.A,{variant:"secondary",className:"btn-sm",onClick:async()=>{if(o){n(!0);try{const e=pn.o.getInstance();await e.UserCampaignManager.RunInit(),await e.UserCampaignManager.CampaignWarbandReject(o.GetId(),s.warband_data.GetPostId()),Us.success("Invite declined"),window.location.reload()}catch(xC){Us.error("Failed to decline invite."),console.error(xC),n(!1)}}},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.GRI,className:"me-2"}),"Decline"]})]})]})};var jg=e=>{let{useNav:t=!0,player:a}=e;const{campaign:n}=Xf(),o=(0,zt.Zp)();return t?(0,Dn.jsxs)("div",{className:"CMPlayerSmall",children:[(0,Dn.jsx)(yn.A,{classes:"player-image-wrap",link:`/profile/${a.Id}`,runfunc:()=>{o(`/profile/${a.Id}`,{state:Date.now().toString()})},children:(0,Dn.jsx)(Wn,{imageId:a.AvatarId,className:""})}),(0,Dn.jsx)(yn.A,{classes:"CMHistoryPlayer-name",link:`/profile/${a.Id}`,runfunc:()=>{o(`/profile/${a.Id}`,{state:Date.now().toString()})},children:a.Name})]}):(0,Dn.jsxs)("div",{className:"CMPlayerSmall",children:[(0,Dn.jsx)("div",{className:"player-image-wrap",children:(0,Dn.jsx)(Wn,{imageId:a.AvatarId,className:""})}),(0,Dn.jsx)("div",{className:"CMHistoryPlayer-name",children:a.Name})]})};var Sg=e=>{let{id:a,type:n,item:o}=e;const{campaign:i,reloadCmDisplay:r,updateCampaignKey:s}=Xf();if(!i)return null;const l=(0,zt.Zp)(),[c,d]=(0,t.useState)(!1),{userId:u}=(0,ti.A)(),{activePopoverId:h,setActivePopoverId:m}=uf(),p=h===a,f=e=>t=>{t.stopPropagation(),e()},[g,y]=(0,t.useState)(!1),[_,b]=(0,t.useState)(i.GetName()),[v,w]=(0,t.useState)(!1),[x,k]=(0,t.useState)(""),[C,j]=(0,t.useState)(!1),[S,I]=(0,t.useState)(!1),[A,N]=(0,t.useState)(o.Title),[E,T]=(0,t.useState)(o.Html),[D,R]=(0,t.useState)(!1),[M,O]=(0,t.useState)(!1),[q,G]=(0,t.useState)(!1),[P,F]=(0,t.useState)(!1);return(0,t.useEffect)((()=>{(C||S||D||P||M||g||v)&&m(null)}),[C,S,D,P,M,g,v]),u&&(i.IsAdmin(u)||"player-self"==n||"warband"==n)&&("announcement"!==n||u&&i.IsAdmin(u))?"player"===n&&i.IsAdmin(o.Id)?null:"warband"!==n||o.PlayerId===u||i.IsAdmin(u)?(0,Dn.jsxs)("div",{className:"CMContextualPopover",children:[(0,Dn.jsx)(Fn.A,{trigger:"click",placement:"left",show:p,onToggle:()=>{m(p?null:a)},rootClose:!0,overlay:(0,Dn.jsx)(qn.A,{id:`cm-popover-${a}`,className:"CM-item-actions-popover",children:(0,Dn.jsx)(qn.A.Body,{className:"popover CM-item-actions-popover",children:(0,Dn.jsxs)("div",{className:"actions",children:["campaign"===n&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsxs)("div",{className:"action",onClick:f((()=>y(!0))),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.MT7,className:"icon-inline-left-l"}),"Rename Campaign"]}),(0,Dn.jsxs)("div",{className:"action",onClick:f((()=>w(!0))),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.yLS,className:"icon-inline-left-l"}),"Delete Campaign"]})]}),"announcement"===n&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsxs)("div",{className:"action",onClick:f((()=>j(!0))),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.MT7,className:"icon-inline-left-l"}),"Edit Announcement"]}),(0,Dn.jsxs)("div",{className:"action",onClick:f((()=>I(!0))),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.yLS,className:"icon-inline-left-l"}),"Delete Announcement"]})]}),"player"===n&&(0,Dn.jsxs)(Dn.Fragment,{children:[!i.IsAdmin(o.Id)&&(0,Dn.jsxs)("div",{className:"action",onClick:f((()=>R(!0))),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.yLS,className:"icon-inline-left-l"}),"Remove Player"]}),!i.IsAdmin(o.Id)&&(0,Dn.jsxs)("div",{className:"action",onClick:f((()=>O(!0))),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.zqi,className:"icon-inline-left-l"}),"Make Admin"]})]}),"player-self"===n&&(0,Dn.jsx)(Dn.Fragment,{children:(0,Dn.jsxs)("div",{className:"action",onClick:f((()=>G(!0))),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.yLS,className:"icon-inline-left-l"}),"Leave Campaign"]})}),"warband"===n&&(0,Dn.jsx)(Dn.Fragment,{children:(0,Dn.jsxs)("div",{className:"action",onClick:f((()=>F(!0))),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.yLS,className:"icon-inline-left-l"}),"Remove Warband"]})}),"warband-invite"===n&&(0,Dn.jsx)(Dn.Fragment,{children:(0,Dn.jsxs)("div",{className:"action",onClick:f((()=>(()=>{if(null!=i&&"warband-invite"==n){d(!0),m(null);const e=pn.o.getInstance();e.UserCampaignManager.RunInit().then((()=>{e.UserCampaignManager.CampaignWarbandReject(i.GetId(),o.id).then((()=>{r(),d(!1),Us.success("Cancelled warband invite")}))}))}})())),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.GRI,className:"icon-inline-left-l"}),"Cancel Invite"]})}),"player-invite"===n&&(0,Dn.jsx)(Dn.Fragment,{children:(0,Dn.jsxs)("div",{className:"action",onClick:f((()=>(()=>{if(null!=i&&"player-invite"==n){d(!0),m(null);const e=pn.o.getInstance();e.UserCampaignManager.RunInit().then((()=>{e.UserCampaignManager.CampaignInviteCancel(i.GetId(),o.Id).then((()=>{r(),d(!1),Us.success("Cancelled player invite")}))}))}})())),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.GRI,className:"icon-inline-left-l"}),"Cancel Invite"]})})]})})}),children:c?(0,Dn.jsx)("div",{className:"CM-item-actions",children:(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"fa-spin"})}):(0,Dn.jsx)("div",{className:"CM-item-actions",onClick:e=>e.stopPropagation(),children:(0,Dn.jsx)(Gn.g,{icon:Pn.nx5})})}),(0,Dn.jsxs)(Il.A,{show:g,onHide:()=>y(!1),className:"CMManagePanel_EditCampaignName_Modal",centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Edit Campaign Name"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:e=>{e.stopPropagation(),y(!1)}})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsx)("label",{className:"form-label",children:"Campaign Name"}),(0,Dn.jsx)("input",{className:"form-control form-control-sm mb-3",type:"text",value:_,onChange:e=>b(e.target.value),placeholder:"Campaign Name",required:!0})]}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:e=>{e.stopPropagation(),y(!1)},children:"Cancel"}),c?(0,Dn.jsxs)(ss.A,{variant:"primary",disabled:!0,children:[(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"fa-spin icon-inline-left"}),"Saving"]}):(0,Dn.jsxs)(ss.A,{variant:"primary",onClick:f((()=>{if(null!=i&&"campaign"==n){d(!0),m(null);const e=pn.o.getInstance();e.UserCampaignManager.RunInit().then((()=>{e.UserCampaignManager.UpdateCampaign(i.GetId(),_,i.GetDescription()).then((()=>{r(),d(!1),y(!1),Us.success("Campaign name changed")}))}))}})),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.jkA,className:"icon-inline-left"}),"Save"]})]})]}),(0,Dn.jsxs)(Il.A,{show:v,onHide:()=>w(!1),centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Delete Campaign"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:e=>{e.stopPropagation(),w(!1)}})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsx)(Rp.A,{type:"danger",children:"Do you really want to delete this campaign? This action can not be undone."}),(0,Dn.jsxs)("div",{className:"mt-3",children:[(0,Dn.jsx)("label",{className:"form-label small",htmlFor:"delete-warband-confirm",children:"Type 'Confirm' to delete your warband."}),(0,Dn.jsx)("input",{type:"text",id:"delete-warband-confirm",className:"form-control",placeholder:"Confirm",value:x,onChange:e=>k(e.target.value)})]})]}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:e=>{e.stopPropagation(),w(!1)},children:"Cancel"}),c?(0,Dn.jsxs)(ss.A,{variant:"danger",disabled:!0,children:[(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"fa-spin icon-inline-left"}),"Deleting"]}):(0,Dn.jsxs)(ss.A,{variant:"danger",onClick:f((()=>{if(null!=i&&"campaign"==n){d(!0),m(null);const e=pn.o.getInstance();e.UserCampaignManager.RunInit().then((()=>{e.UserCampaignManager.DeleteCampaign(i.GetId()).then((e=>{e&&200===e.status?(Us.success("Campaign deleted"),l(la,{state:{refresh:!0}})):Us.error("Failed to delete campaign"),d(!1),w(!1)})).catch((()=>{Us.error("An error occurred while deleting the campaign"),d(!1),w(!1)}))}))}})),disabled:"Confirm"!==x,children:[(0,Dn.jsx)(Gn.g,{icon:Pn.yLS,className:"icon-inline-left"}),"Delete Campaign"]})]})]}),(0,Dn.jsxs)(Il.A,{show:C,onHide:()=>j(!1),className:"CMManagePanel_CreateAnnouncement_Modal",centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Edit Announcement"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:e=>{e.stopPropagation(),j(!1)}})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsx)("label",{className:"form-label",children:"Announcement title"}),(0,Dn.jsx)("input",{className:"form-control form-control-sm mb-3",type:"text",value:A,onChange:e=>N(e.target.value),placeholder:"Announcement title",required:!0}),(0,Dn.jsx)("label",{htmlFor:"announcement-textarea",children:"Announcement text"}),(0,Dn.jsx)("textarea",{id:"announcement-textarea",className:"form-control mt-2",value:E,onChange:e=>T(e.target.value),rows:10,placeholder:"Enter your message here..."})]}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:e=>{e.stopPropagation(),j(!1)},children:"Cancel"}),c?(0,Dn.jsxs)(ss.A,{variant:"primary",disabled:!0,children:[(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"fa-spin icon-inline-left"}),"Saving"]}):(0,Dn.jsxs)(ss.A,{variant:"primary",onClick:f((()=>{if(null!=i&&"announcement"==n){d(!0),m(null);const e=pn.o.getInstance();e.UserCampaignManager.RunInit().then((()=>{e.UserCampaignManager.EditAnnouncement(i.GetId(),o,A,E).then((()=>{r(),d(!1),j(!1),Us.success("Saved announcement")}))}))}})),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.jkA,className:"icon-inline-left"}),"Save"]})]})]}),(0,Dn.jsxs)(Il.A,{show:S,onHide:()=>I(!1),centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Delete Announcement"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:e=>{e.stopPropagation(),I(!1)}})]}),(0,Dn.jsxs)(Il.A.Body,{children:["Are you sure you want to delete this announcement?",(0,Dn.jsx)("div",{className:"announcement-titl mt-3",children:(0,Dn.jsx)("strong",{children:o.Title})}),(0,Dn.jsx)("div",{className:"small announcement-date",children:o.DateStr}),(0,Dn.jsx)("p",{className:"small mt-2",children:o.Html})]}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:e=>{e.stopPropagation(),I(!1)},children:"Cancel"}),c?(0,Dn.jsxs)(ss.A,{variant:"danger",disabled:!0,children:[(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"fa-spin icon-inline-left"}),"Deleting"]}):(0,Dn.jsxs)(ss.A,{variant:"danger",onClick:f((()=>{if(null!=i&&"announcement"==n){d(!0),m(null);const e=pn.o.getInstance();e.UserCampaignManager.RunInit().then((()=>{e.UserCampaignManager.DeleteAnnouncement(i.GetId(),o).then((()=>{r(),d(!1),I(!1),Us.success("Deleted announcement")}))}))}})),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.yLS,className:"icon-inline-left"}),"Delete"]})]})]}),(0,Dn.jsxs)(Il.A,{show:D,onHide:()=>R(!1),centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Remove Player"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:e=>{e.stopPropagation(),R(!1)}})]}),(0,Dn.jsxs)(Il.A.Body,{children:["Are you sure you want to remove this player from your campaign?",(0,Dn.jsx)("div",{className:"my-3",children:(0,Dn.jsx)("strong",{children:o.Nickname})})]}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:e=>{e.stopPropagation(),R(!1)},children:"Cancel"}),c?(0,Dn.jsxs)(ss.A,{variant:"danger",disabled:!0,children:[(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"fa-spin icon-inline-left"}),"Removing Player"]}):(0,Dn.jsxs)(ss.A,{variant:"danger",onClick:f((()=>{if(null!=i&&"player"==n){d(!0),m(null);const e=pn.o.getInstance();e.UserCampaignManager.RunInit().then((()=>{e.UserCampaignManager.ForceRemovePlayer(i.GetId(),o.Id).then((()=>{r(),d(!1),R(!1),Us.success("Removed player from campaign")}))}))}})),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.yLS,className:"icon-inline-left"}),"Remove Player"]})]})]}),(0,Dn.jsxs)(Il.A,{show:q,onHide:()=>G(!1),centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Leave Campaign"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:e=>{e.stopPropagation(),G(!1)}})]}),(0,Dn.jsx)(Il.A.Body,{children:"Are you sure you want to leave this campaign?"}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:e=>{e.stopPropagation(),G(!1)},children:"Cancel"}),c?(0,Dn.jsxs)(ss.A,{variant:"primary",disabled:!0,children:[(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"fa-spin icon-inline-left"}),"Leaving Campaign"]}):(0,Dn.jsxs)(ss.A,{variant:"primary",onClick:f((()=>{if(null!=i&&"player-self"==n){d(!0),m(null);const e=pn.o.getInstance();e.UserCampaignManager.RunInit().then((()=>{e.UserCampaignManager.ForceRemovePlayer(i.GetId(),o.Id).then((()=>{r(),d(!1),G(!1),Us.success("You have left the campaign")}))}))}})),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.yLS,className:"icon-inline-left"}),"Leave Campaign"]})]})]}),(0,Dn.jsxs)(Il.A,{show:M,onHide:()=>O(!1),centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Remove Player"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:e=>{e.stopPropagation(),O(!1)}})]}),(0,Dn.jsxs)(Il.A.Body,{children:["Are you sure you want to make this player the admin of your campaign?",(0,Dn.jsxs)(Rp.A,{type:"danger",className:"mt-3",children:[(0,Dn.jsx)("h5",{className:"mb-3",children:(0,Dn.jsx)("strong",{children:"Caution"})}),(0,Dn.jsxs)("div",{children:["You will transfer your admin rights to this player:",(0,Dn.jsx)("br",{}),(0,Dn.jsx)("br",{}),(0,Dn.jsx)("strong",{children:o.Nickname}),(0,Dn.jsx)("br",{}),(0,Dn.jsx)("br",{}),"You will still stay a player in this campaign but will lose your admin status if you do."]})]})]}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:e=>{e.stopPropagation(),O(!1)},children:"Cancel"}),c?(0,Dn.jsxs)(ss.A,{variant:"primary",disabled:!0,children:[(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"fa-spin icon-inline-left"}),"Changing Admin"]}):(0,Dn.jsxs)(ss.A,{variant:"danger",onClick:f((()=>{if(null!=i&&"player"==n){d(!0),m(null);const e=pn.o.getInstance();e.UserCampaignManager.RunInit().then((()=>{e.UserCampaignManager.ChangeCampaignAdmin(i.GetId(),o.Id).then((()=>{r(),d(!1),O(!1),Us.success("Admin Changed")}))}))}})),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.zqi,className:"icon-inline-left"}),"Change Admin"]})]})]}),(0,Dn.jsxs)(Il.A,{show:P,onHide:()=>F(!1),centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Remove Warband"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:e=>{e.stopPropagation(),F(!1)}})]}),(0,Dn.jsxs)(Il.A.Body,{children:["Are you sure you want to remove this warband from the campaign?",(0,Dn.jsx)("div",{className:"my-3",children:(0,Dn.jsx)("strong",{children:o.WarbandName})})]}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:e=>{e.stopPropagation(),F(!1)},children:"Cancel"}),c?(0,Dn.jsxs)(ss.A,{variant:"danger",disabled:!0,children:[(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"fa-spin icon-inline-left"}),"Removing Warband"]}):(0,Dn.jsxs)(ss.A,{variant:"danger",onClick:f((()=>{if(null!=i&&"warband"==n){d(!0),m(null);const e=pn.o.getInstance();e.UserCampaignManager.RunInit().then((()=>{e.UserCampaignManager.ForceRemoveWarband(i.GetId(),o.Id).then((e=>{e&&200===e.status?(r(),d(!1),F(!1),Us.success("Removed warband from campaign")):(d(!1),F(!1),Us.error("Failed to remove warband from campaign"))})).catch((()=>{d(!1),F(!1),Us.error("An error occurred while removing the warband")}))}))}})),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.yLS,className:"icon-inline-left"}),"Remove Warband"]})]})]})]}):null:null};var Ig=e=>{let{announcement:a}=e;const{campaign:n}=Xf(),[o,i]=(0,t.useState)(!1),r=a.MarkupHtml.length>200;return(0,Dn.jsxs)("div",{className:"CMHistoryAnnouncement",children:[(0,Dn.jsxs)("h3",{className:"CMHistoryAnnouncement-title",children:[a.Title,(0,Dn.jsx)(Sg,{id:`announcement-${a.Id}`,type:"announcement",item:a})]}),(0,Dn.jsx)("div",{className:"CMHistoryAnnouncement-date",children:a.DateStr}),(0,Dn.jsx)(jg,{player:a.Author}),(0,Dn.jsxs)("div",{className:"CMHistoryAnnouncement-message-wrap",children:[(0,Dn.jsx)("p",{className:`CMHistoryAnnouncement-message ${r?"is-long":""} ${o?"is-expanded":""}`,dangerouslySetInnerHTML:{__html:a.MarkupHtml}}),!o&&r&&(0,Dn.jsxs)("span",{className:"show-more small",onClick:()=>i(!0),children:["Show more",(0,Dn.jsx)(Gn.g,{icon:Pn.Jt$,className:"ms-2"})]}),o&&r&&(0,Dn.jsxs)("span",{className:"show-less small",onClick:()=>i(!1),children:["Show less",(0,Dn.jsx)(Gn.g,{icon:Pn.w2A,className:"ms-2"})]})]})]})};var Ag=()=>{var e,t;const a=Qf(),n=null!==(e=null===a||void 0===a?void 0:a.campaign)&&void 0!==e?e:null,o=null!==(t=null===a||void 0===a?void 0:a.loading)&&void 0!==t?t:null;if(!n)return null;const i=n.GetLatestAnnouncement();return i?o?(0,Dn.jsx)("div",{className:"LoadingOverlay-wrap-150",children:(0,Dn.jsx)(Zo,{message:"Loading Campaign"})}):(0,Dn.jsx)("div",{className:"WbbCampaignLatestAnnouncement",children:(0,Dn.jsx)(Ig,{announcement:i})}):(0,Dn.jsx)("div",{className:"WbbCampaignLatestAnnouncement",children:(0,Dn.jsxs)(Rp.A,{type:"info",children:[(0,Dn.jsx)("div",{className:"fw-bold mb-3",children:"No Announcement"}),(0,Dn.jsx)("div",{children:"There are no announcements in this campaign."})]})})};var Ng=()=>{var e,t;const a=Qf(),n=null!==(e=null===a||void 0===a?void 0:a.campaign)&&void 0!==e?e:null,{warband:o,reloadWbDisplay:i,updateKey:r}=rf();if(!n||null===o||void 0===o||!o.warband_data)return null;const s=n.GetWarbandGames(null===o||void 0===o||null===(t=o.warband_data)||void 0===t?void 0:t.GetPostId());return(0,Dn.jsx)("div",{className:"WbbCampaignGames",children:s&&0!==s.length?(0,Dn.jsx)(Dn.Fragment,{children:s.map(((e,t)=>(0,Dn.jsx)(fg,{game:e},t)))}):(0,Dn.jsxs)(Rp.A,{type:"info",children:[(0,Dn.jsx)("h6",{children:"No Campaign Games"}),(0,Dn.jsx)("div",{children:"There are no reported campaign games for this warband in its current campaign"})]})})};var Eg=e=>{let{onClose:t,openPostGame:a}=e;const{warband:n,reloadWbDisplay:o,updateKey:i}=rf();if(null==n)return(0,Dn.jsx)("div",{children:"Loading..."});const r=n.warband_data.GetCampaignId();return(0,Dn.jsxs)("div",{className:"WbbDetailView WbbCampaignDetailView",children:[(0,Dn.jsxs)("div",{className:"title",children:[(0,Dn.jsx)("div",{className:"title-back",onClick:t,children:(0,Dn.jsx)(Gn.g,{icon:Pn.Wzs,className:""})}),(0,Dn.jsx)("div",{className:"title-text",children:"Campaign"})]}),(0,Dn.jsxs)("div",{className:"detail-view-content",children:[n.warband_data.GetCampaignInvites().length>0&&(0,Dn.jsx)(Dn.Fragment,{children:n.warband_data.GetCampaignInvites().map(((e,t)=>(0,Dn.jsx)(Zf,{campaignId:Number(e),hydrate:!1,children:(0,Dn.jsx)(Cg,{})},t)))}),r?(0,Dn.jsx)(Zf,{campaignId:r,hydrate:!0,children:(0,Dn.jsx)(Tg,{openPostGame:a})}):(0,Dn.jsx)(Tg,{openPostGame:a})]})]},i)};const Tg=e=>{var a,n;let{openPostGame:o}=e;const i=Qf(),r=null!==(a=null===i||void 0===i?void 0:i.campaign)&&void 0!==a?a:null,s=null!==(n=null===i||void 0===i?void 0:i.updateCampaignKey)&&void 0!==n?n:null,l=(0,zt.Zp)(),{warband:c,reloadWbDisplay:d,updateKey:u}=rf();if(null==c)return(0,Dn.jsx)("div",{children:"Loading..."});const{play_mode:h,edit_mode:m,view_mode:p,print_mode:f,mode:g,setMode:y}=ff(),[_,b]=(0,t.useState)(c.warband_data.GetVictoryPoints()),[v,w]=(0,t.useState)(700),[x,k]=(0,t.useState)(!1),[C,j]=(0,t.useState)(0),[S,I]=(0,t.useState)(c?null===c||void 0===c?void 0:c.warband_data.GetPatron():null),[A,N]=(0,t.useState)(!1),[E,T]=(0,t.useState)(c?null===c||void 0===c?void 0:c.warband_data.GetCampaignNotes():"");(0,t.useEffect)((()=>{!async function(){const e=await(null===c||void 0===c?void 0:c.warband_data.GetCampaignTresholdValue());void 0!=e&&w(e),j(C+1)}()}),[u]);const[D,R]=(0,t.useState)(c.warband_data.GetCampaignCycleView()),[M,O]=(0,t.useState)(c.warband_data.GetCampaignCycleMax()),[q,G]=(0,t.useState)(!1),[P,F]=(0,t.useState)(c.warband_data.Context.FailedPromotions),[L,W]=(0,t.useState)(!1),[B,H]=(0,t.useState)(!1);(0,t.useEffect)((()=>{b(c.warband_data.GetVictoryPoints()),R(c.warband_data.GetCampaignCycleView()),O(c.warband_data.GetCampaignCycleMax()),F(c.warband_data.Context.FailedPromotions),T(c.warband_data.GetCampaignNotes()),I(c.warband_data.GetPatron())}),[u,c]);const U=c.warband_data.GetPatron();return(0,Dn.jsxs)(t.Fragment,{children:[r&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("h6",{className:"fw-bold mb-2",children:"Campaign"}),(0,Dn.jsxs)("div",{className:"detail-section-text-element",children:[(0,Dn.jsx)("strong",{children:"Campaign: "}),(0,Dn.jsx)(yn.A,{classes:"campaign-name",link:`/campaigns/${r.GetId()}`,runfunc:()=>{l(`/campaigns/${r.GetId()}`)},children:r.GetName()})]}),(0,Dn.jsxs)("div",{className:"detail-section-text-element",children:[(0,Dn.jsx)("strong",{children:"Players: "}),0===r.GetPlayers().length?(0,Dn.jsx)("span",{children:"None"}):r.GetPlayers().map(((e,a)=>(0,Dn.jsxs)(t.Fragment,{children:[a>0&&", ",(0,Dn.jsx)(yn.A,{classes:"player-link",link:`/profile/${e.Id}`,runfunc:()=>{l(`/profile/${e.Id}`)},children:e.Nickname||`Player #${e.Id}`})]},e.Id)))]}),(0,Dn.jsxs)("div",{className:"detail-section-text-element",children:[(0,Dn.jsx)("strong",{children:"Campaign Round: "}),r.GetCurrentRound()]}),(0,Dn.jsxs)("div",{className:"detail-section-text-element",children:[(0,Dn.jsx)("strong",{children:"Your Warband Round: "}),c.warband_data.GetCampaignCycleView()]}),(0,Dn.jsxs)("div",{className:"detail-section-text-element",children:[(0,Dn.jsx)("strong",{children:"Current Threshold: "}),(0,Dn.jsx)(il.A,{amount:r.GetThresholdValueForRound(c.warband_data.GetCampaignCycleView()),type:"d"})]}),(0,Dn.jsxs)("div",{className:"detail-section-text-element",children:[(0,Dn.jsx)("strong",{children:"Next Threshold: "}),(0,Dn.jsx)(il.A,{amount:r.GetThresholdValueForRound(c.warband_data.GetCampaignCycleView()+1),type:"d"})]}),(0,Dn.jsxs)("div",{className:"detail-section-text-element",children:[(0,Dn.jsx)("strong",{children:"Current field limit: "}),r.GetMaxFieldedCurrent()+" Models"]}),(0,Dn.jsxs)("div",{className:"btn btn-primary btn-sm mt-3 mb-2 me-2",onClick:()=>{H(!0)},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.QLR,className:"me-2"}),"Add Campaign Game"]}),(0,Dn.jsx)(vf,{show:B,onClose:()=>{H(!1)},campaignId:r.GetId(),warbandId:c.warband_data.GetPostId()})]}),!r&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsxs)(Rp.A,{type:"tip",className:"mb-2",children:[(0,Dn.jsx)("div",{className:"fw-bold",children:"No campaign connected"}),(0,Dn.jsxs)("div",{className:"small",children:["For the best experience, you can create or join a campaign with your warband",(0,Dn.jsx)("br",{}),"You can connect your friends and warbands in a campaign and set custom threshold values and more. ",(0,Dn.jsx)(yn.A,{classes:"",link:"/campaigns",runfunc:()=>{l("/campaigns")},children:"Create a Campaign >"})]})]}),(0,Dn.jsx)("h6",{className:"fw-bold mb-2",children:"Campaign Values"}),(0,Dn.jsxs)("div",{className:"detail-section-text-element",children:[(0,Dn.jsx)("strong",{children:"Warband Round: "}),c.warband_data.GetCampaignCycleView()]}),(0,Dn.jsxs)("div",{className:"detail-section-text-element",children:[(0,Dn.jsx)("strong",{children:"Threshold Value: "}),(0,Dn.jsx)(il.A,{amount:v,type:"d"})]}),(0,Dn.jsxs)("div",{className:"detail-section-text-element",children:[(0,Dn.jsx)("strong",{children:"Max field strength: "}),c.warband_data.GetCampaignMaxFieldStrength()+" Models"]}),(0,Dn.jsxs)("div",{className:"detail-section-text-element",children:[(0,Dn.jsx)("strong",{children:"Patron: "}),null!=U?(0,Dn.jsx)(Dn.Fragment,{children:null===U||void 0===U?void 0:U.GetTrueName()}):(0,Dn.jsx)(Dn.Fragment,{children:"No patron set"})]})]}),(0,Dn.jsx)(xf,{title:"Campaign Victory Points",value:_,onClick:()=>k(!0)}),(0,Dn.jsx)(vg,{show:x,onClose:()=>k(!1),currentVP:_,onSubmit:e=>{b(e),null===c||void 0===c||c.warband_data.SetVP(e);pn.o.getInstance().UserWarbandManager.UpdateItemInfo(c?c.id:-999).then((()=>{I(c?null===c||void 0===c?void 0:c.warband_data.GetPatron():null),d(),j(C+1)}))}}),(0,Dn.jsx)(xf,{title:"Patron",value:S?S.GetTrueName():"",onClick:()=>N(!0)}),(0,Dn.jsx)(wg,{show:A,onClose:()=>N(!1),currentPatron:S,onSubmit:e=>{null===c||void 0===c||c.warband_data.UpdateSelfPatron(e).then((()=>{pn.o.getInstance().UserWarbandManager.UpdateItemInfo(c?c.id:-999).then((()=>{I(c?null===c||void 0===c?void 0:c.warband_data.GetPatron():null),d(),j(C+1)}))}))}}),(0,Dn.jsx)(xf,{title:"Warband Round",value:D,onClick:()=>G(!0)}),(0,Dn.jsx)(xg,{show:q,onClose:()=>G(!1),currentCampaignCycle:D,currentCampaignCycleMax:M,onSubmit:(e,t)=>{R(e),O(t),null===c||void 0===c||c.warband_data.SetCurrentCycle(e);pn.o.getInstance().UserWarbandManager.UpdateItemInfo(c?c.id:-999).then((()=>{d(),j(C+1)}))}}),(0,Dn.jsxs)("div",{className:"WbbFighterDetailView",children:[(0,Dn.jsx)("div",{className:"WbbOptionBox",children:(0,Dn.jsx)("div",{className:"WbbOptionBox-title",children:"Failed Promotions"})}),(0,Dn.jsxs)("div",{className:"failed-promo",children:[m&&(0,Dn.jsxs)("div",{className:"btn btn-primary btn-sm edit-btn",onClick:()=>W(!0),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.hpd,className:"icon-inline-left-l"}),"Edit"]}),(0,Dn.jsx)("div",{className:"failed-promo-boxes",onClick:m?()=>W(!0):void 0,children:Array.from({length:6},((e,t)=>{const a=t+1,n=a<=P,o=6===a;return(0,Dn.jsxs)("div",{className:"failed-promo-box",children:[o&&(0,Dn.jsx)(Gn.g,{icon:Pn.C97,className:"final-icon"}),n&&(0,Dn.jsx)(Gn.g,{icon:Pn.e68})]},a)}))})]})]}),m&&(0,Dn.jsx)(kg,{show:L,onClose:()=>W(!1),currentFails:P,onSubmit:e=>{F(e),null===c||void 0===c||c.warband_data.SetCurrentFailedPromotions(e);pn.o.getInstance().UserWarbandManager.UpdateItemInfo(c?c.id:-999).then((()=>{d(),j(C+1)}))}}),(0,Dn.jsx)(Vf,{initialText:E,title:"Campaign Notes",onSave:e=>{null===c||void 0===c||c.warband_data.SaveNote(e,"campaign"),T(e);pn.o.getInstance().UserWarbandManager.UpdateItemInfo(c?c.id:-999).then((()=>d()))}}),r&&(0,Dn.jsxs)("div",{className:"WbbDetailViewCollapse-wrap",children:[(0,Dn.jsx)(cg,{title:"Latest Announcement",initiallyOpen:!0,children:(0,Dn.jsx)(Ag,{})}),(0,Dn.jsx)(cg,{title:"Campaign Games",initiallyOpen:!1,children:(0,Dn.jsx)(Ng,{})})]})]},`${C}_${u}_${s}`)};var Dg=()=>{const{warband:e,updateKey:t}=rf();return null==e?(0,Dn.jsx)("div",{children:"Loading..."}):(0,Dn.jsx)("h1",{children:e.warband_data.GetWarbandName()},t)};var Rg=e=>{let{show:a,onClose:n,onSubmit:o}=e;const[i,r]=(0,t.useState)(null),{warband:s}=rf(),[l,c]=(0,t.useState)([]),[d,u]=(0,t.useState)({}),[h,m]=(0,t.useState)(0);(0,t.useEffect)((()=>{!async function(){const e=await(null===s||void 0===s?void 0:s.warband_data.GetEliteFighterOptions());if(void 0!=e){c(e);const t=s?s.warband_data.ModelRelCache:{},a=Object.keys(t),n={};for(let e=0;e<a.length;e++)t[a[e]].facrel.Model.getKeywordIDs().includes("kw_elite")&&!t[a[e]].facrel.IsMercenary()&&(n[a[e]]=t[a[e]]);u(n),m(h+1)}}()}),[a]);const{handleSubmit:p,isSubmitting:f}=Mf((()=>{if(i){const e=l.filter((e=>e.ID===i));o(e),r(null),n()}}));return(0,Dn.jsxs)(Il.A,{show:a,onHide:n,className:"WbbModal WbbModalSelect WbbModalSelect_Fighter WbbModalAddFighterElite",centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Add Elite"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:n})]}),(0,Dn.jsx)(Il.A.Body,{children:Object.keys(d).map(((e,t)=>(0,Dn.jsxs)("div",{className:`select-item ${i===d[e].facrel.ID?"selected":""} ${l.includes(d[e].facrel)?"":"disabled"}`,onClick:()=>{l.includes(d[e].facrel)&&r(d[e].facrel.ID)},children:[(0,Dn.jsx)("div",{className:"model-image-wrap",children:(0,Dn.jsx)(Hf.A,{modelSlug:d[e].facrel.GetSlug(),size:"small",className:"model-image"})}),(0,Dn.jsx)("span",{className:"item-name",children:d[e].facrel.Model.GetTrueName()+(d[e].facrel.Captain?" (Leader)":"")}),(0,Dn.jsx)("span",{className:"item-cost",children:(0,Dn.jsx)(il.A,{amount:d[e].facrel.Cost,type:d[e].facrel.CostType})})]},d[e].facrel.ID)))}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:n,children:"Cancel"}),(0,Dn.jsxs)(ss.A,{variant:"primary",onClick:p,disabled:!i||f,children:[f?(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"icon-inline-left fa-spin "}):(0,Dn.jsx)(Gn.g,{icon:Pn.QLR,className:"icon-inline-left"}),"Add Elite"]})]})]},h)};var Mg=e=>{let{show:a,onClose:n,onSubmit:o}=e;const[i,r]=(0,t.useState)(null),{warband:s}=rf(),[l,c]=(0,t.useState)([]),[d,u]=(0,t.useState)({}),[h,m]=(0,t.useState)(0);(0,t.useEffect)((()=>{!async function(){const e=await(null===s||void 0===s?void 0:s.warband_data.GetMercenaryFighterOptions());if(void 0!=e){c(e);const t=s?s.warband_data.ModelRelCache:{},a=Object.keys(t),n={};for(let e=0;e<a.length;e++)1==t[a[e]].facrel.Mercenary&&(n[a[e]]=t[a[e]]);u(n),m(h+1)}}()}),[a]);const{handleSubmit:p,isSubmitting:f}=Mf((()=>{if(i){const e=l.filter((e=>e.ID===i));o(e),r(null),n()}}));return(0,Dn.jsxs)(Il.A,{show:a,onHide:n,className:"WbbModal WbbModalSelect WbbModalSelect_Fighter  WbbModalAddFighterMercenary",centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Add Mercenary"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:n})]}),(0,Dn.jsxs)(Il.A.Body,{children:[Object.keys(d).map(((e,t)=>(0,Dn.jsxs)("div",{className:`select-item ${i===d[e].facrel.ID?"selected":""} ${l.includes(d[e].facrel)?"":"disabled"}`,onClick:()=>{l.includes(d[e].facrel)&&r(d[e].facrel.ID)},children:[(0,Dn.jsx)("div",{className:"model-image-wrap",children:(0,Dn.jsx)(Hf.A,{modelSlug:d[e].facrel.GetSlug(),size:"small",className:"model-image"})}),(0,Dn.jsx)("span",{className:"item-name",children:d[e].facrel.Model.GetName()}),(0,Dn.jsx)("span",{className:"item-cost",children:(0,Dn.jsx)(il.A,{amount:d[e].facrel.Cost,type:d[e].facrel.CostType})})]},d[e].facrel.ID))),(0,Dn.jsx)(Rp.A,{type:"tip",className:"mx-3 my-3",children:"Trench Dogs and their variants are considered Exploration-Items, not regular mercenaries."})]}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:n,children:"Cancel"}),(0,Dn.jsxs)(ss.A,{variant:"primary",onClick:p,disabled:!i||f,children:[f?(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"icon-inline-left fa-spin "}):(0,Dn.jsx)(Gn.g,{icon:Pn.QLR,className:"icon-inline-left"}),"Add Mercenary"]})]})]})};var Og=e=>{let{show:a,onClose:n,onSubmit:o}=e;const[i,r]=(0,t.useState)(null),{warband:s}=rf(),[l,c]=(0,t.useState)([]),[d,u]=(0,t.useState)({}),[h,m]=(0,t.useState)(0);(0,t.useEffect)((()=>{!async function(){const e=await(null===s||void 0===s?void 0:s.warband_data.GetTroopFighterOptions());if(void 0!=e){c(e);const t=s?s.warband_data.ModelRelCache:{},a=Object.keys(t),n={};for(let e=0;e<a.length;e++)0!=t[a[e]].facrel.Mercenary||t[a[e]].facrel.Model.getKeywordIDs().includes("kw_elite")||(n[a[e]]=t[a[e]]);u(n),m(h+1)}}()}),[a]);const{handleSubmit:p,isSubmitting:f}=Mf((()=>{if(i){const e=l.filter((e=>e.ID===i));o(e),r(null),n()}}));return(0,Dn.jsxs)(Il.A,{show:a,onHide:n,className:"WbbModal WbbModalSelect WbbModalSelect_Fighter WbbModalAddFighterTroop",centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Add Troop"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:n})]}),(0,Dn.jsx)(Il.A.Body,{children:Object.keys(d).map(((e,t)=>(0,Dn.jsxs)("div",{className:`select-item ${i===d[e].facrel.ID?"selected":""} ${l.includes(d[e].facrel)?"":"disabled"}`,onClick:()=>{l.includes(d[e].facrel)&&r(d[e].facrel.ID)},children:[(0,Dn.jsx)("div",{className:"model-image-wrap",children:(0,Dn.jsx)(Hf.A,{modelSlug:d[e].facrel.GetSlug(),size:"small",className:"model-image"})}),(0,Dn.jsx)("span",{className:"item-name",children:d[e].facrel.Model.GetName()}),(0,Dn.jsx)("span",{className:"item-cost",children:(0,Dn.jsx)(il.A,{amount:d[e].facrel.Cost,type:d[e].facrel.CostType})})]},d[e].facrel.ID)))}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:n,children:"Cancel"}),(0,Dn.jsxs)(ss.A,{variant:"primary",onClick:p,disabled:!i||f,children:[f?(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"icon-inline-left fa-spin "}):(0,Dn.jsx)(Gn.g,{icon:Pn.QLR,className:"icon-inline-left"}),"Add Fighter"]})]})]})};var qg=e=>{let{showAddFighterEliteModal:t,showAddFighterTroopModal:a,showAddFighterMercenaryModal:n,onCloseTroop:o,onCloseElite:i,onCloseMercenary:r}=e;const{warband:s,updateKey:l,reloadWbDisplay:c}=rf(),d=e=>{s&&s.warband_data.AddFighter(e).then((()=>{pn.o.getInstance().UserWarbandManager.UpdateItemInfo(s?s.id:-999).then((()=>c()))}))};return(0,Dn.jsxs)(Dn.Fragment,{children:[a&&(0,Dn.jsx)(Og,{show:a,onClose:()=>o(),onSubmit:d}),t&&(0,Dn.jsx)(Rg,{show:t,onClose:()=>i(),onSubmit:d}),n&&(0,Dn.jsx)(Mg,{show:n,onClose:()=>r(),onSubmit:d})]})};const Gg="undefined"!==typeof window&&"undefined"!==typeof window.document&&"undefined"!==typeof window.document.createElement;function Pg(e){const t=Object.prototype.toString.call(e);return"[object Window]"===t||"[object global]"===t}function Fg(e){return"nodeType"in e}function Lg(e){var t,a;return e?Pg(e)?e:Fg(e)&&null!=(t=null==(a=e.ownerDocument)?void 0:a.defaultView)?t:window:window}function Wg(e){const{Document:t}=Lg(e);return e instanceof t}function Bg(e){return!Pg(e)&&e instanceof Lg(e).HTMLElement}function Hg(e){return e instanceof Lg(e).SVGElement}function Ug(e){return e?Pg(e)?e.document:Fg(e)?Wg(e)?e:Bg(e)||Hg(e)?e.ownerDocument:document:document:document}const Kg=Gg?t.useLayoutEffect:t.useEffect;function zg(e){const a=(0,t.useRef)(e);return Kg((()=>{a.current=e})),(0,t.useCallback)((function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return null==a.current?void 0:a.current(...t)}),[])}function Vg(e,a){void 0===a&&(a=[e]);const n=(0,t.useRef)(e);return Kg((()=>{n.current!==e&&(n.current=e)}),a),n}function Yg(e,a){const n=(0,t.useRef)();return(0,t.useMemo)((()=>{const t=e(n.current);return n.current=t,t}),[...a])}function Jg(e){const a=zg(e),n=(0,t.useRef)(null),o=(0,t.useCallback)((e=>{e!==n.current&&(null==a||a(e,n.current)),n.current=e}),[]);return[n,o]}function $g(e){const a=(0,t.useRef)();return(0,t.useEffect)((()=>{a.current=e}),[e]),a.current}let Zg={};function Qg(e,a){return(0,t.useMemo)((()=>{if(a)return a;const t=null==Zg[e]?0:Zg[e]+1;return Zg[e]=t,e+"-"+t}),[e,a])}function Xg(e){return function(t){for(var a=arguments.length,n=new Array(a>1?a-1:0),o=1;o<a;o++)n[o-1]=arguments[o];return n.reduce(((t,a)=>{const n=Object.entries(a);for(const[o,i]of n){const a=t[o];null!=a&&(t[o]=a+e*i)}return t}),{...t})}}const ey=Xg(1),ty=Xg(-1);function ay(e){if(!e)return!1;const{KeyboardEvent:t}=Lg(e.target);return t&&e instanceof t}function ny(e){if(function(e){if(!e)return!1;const{TouchEvent:t}=Lg(e.target);return t&&e instanceof t}(e)){if(e.touches&&e.touches.length){const{clientX:t,clientY:a}=e.touches[0];return{x:t,y:a}}if(e.changedTouches&&e.changedTouches.length){const{clientX:t,clientY:a}=e.changedTouches[0];return{x:t,y:a}}}return function(e){return"clientX"in e&&"clientY"in e}(e)?{x:e.clientX,y:e.clientY}:null}const oy=Object.freeze({Translate:{toString(e){if(!e)return;const{x:t,y:a}=e;return"translate3d("+(t?Math.round(t):0)+"px, "+(a?Math.round(a):0)+"px, 0)"}},Scale:{toString(e){if(!e)return;const{scaleX:t,scaleY:a}=e;return"scaleX("+t+") scaleY("+a+")"}},Transform:{toString(e){if(e)return[oy.Translate.toString(e),oy.Scale.toString(e)].join(" ")}},Transition:{toString(e){let{property:t,duration:a,easing:n}=e;return t+" "+a+"ms "+n}}}),iy="a,frame,iframe,input:not([type=hidden]):not(:disabled),select:not(:disabled),textarea:not(:disabled),button:not(:disabled),*[tabindex]";function ry(e){return e.matches(iy)?e:e.querySelector(iy)}const sy={display:"none"};function ly(e){let{id:a,value:n}=e;return t.createElement("div",{id:a,style:sy},n)}function cy(e){let{id:a,announcement:n,ariaLiveType:o="assertive"}=e;return t.createElement("div",{id:a,style:{position:"fixed",top:0,left:0,width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0 0 0 0)",clipPath:"inset(100%)",whiteSpace:"nowrap"},role:"status","aria-live":o,"aria-atomic":!0},n)}const dy=(0,t.createContext)(null);const uy={draggable:"\n    To pick up a draggable item, press the space bar.\n    While dragging, use the arrow keys to move the item.\n    Press space again to drop the item in its new position, or press escape to cancel.\n  "},hy={onDragStart(e){let{active:t}=e;return"Picked up draggable item "+t.id+"."},onDragOver(e){let{active:t,over:a}=e;return a?"Draggable item "+t.id+" was moved over droppable area "+a.id+".":"Draggable item "+t.id+" is no longer over a droppable area."},onDragEnd(e){let{active:t,over:a}=e;return a?"Draggable item "+t.id+" was dropped over droppable area "+a.id:"Draggable item "+t.id+" was dropped."},onDragCancel(e){let{active:t}=e;return"Dragging was cancelled. Draggable item "+t.id+" was dropped."}};function my(e){let{announcements:a=hy,container:n,hiddenTextDescribedById:o,screenReaderInstructions:i=uy}=e;const{announce:r,announcement:s}=function(){const[e,a]=(0,t.useState)("");return{announce:(0,t.useCallback)((e=>{null!=e&&a(e)}),[]),announcement:e}}(),l=Qg("DndLiveRegion"),[c,d]=(0,t.useState)(!1);if((0,t.useEffect)((()=>{d(!0)}),[]),function(e){const a=(0,t.useContext)(dy);(0,t.useEffect)((()=>{if(!a)throw new Error("useDndMonitor must be used within a children of <DndContext>");return a(e)}),[e,a])}((0,t.useMemo)((()=>({onDragStart(e){let{active:t}=e;r(a.onDragStart({active:t}))},onDragMove(e){let{active:t,over:n}=e;a.onDragMove&&r(a.onDragMove({active:t,over:n}))},onDragOver(e){let{active:t,over:n}=e;r(a.onDragOver({active:t,over:n}))},onDragEnd(e){let{active:t,over:n}=e;r(a.onDragEnd({active:t,over:n}))},onDragCancel(e){let{active:t,over:n}=e;r(a.onDragCancel({active:t,over:n}))}})),[r,a])),!c)return null;const u=t.createElement(t.Fragment,null,t.createElement(ly,{id:o,value:i.draggable}),t.createElement(cy,{id:l,announcement:s}));return n?(0,Ut.createPortal)(u,n):u}var py;function fy(){}function gy(e,a){return(0,t.useMemo)((()=>({sensor:e,options:null!=a?a:{}})),[e,a])}function yy(){for(var e=arguments.length,a=new Array(e),n=0;n<e;n++)a[n]=arguments[n];return(0,t.useMemo)((()=>[...a].filter((e=>null!=e))),[...a])}!function(e){e.DragStart="dragStart",e.DragMove="dragMove",e.DragEnd="dragEnd",e.DragCancel="dragCancel",e.DragOver="dragOver",e.RegisterDroppable="registerDroppable",e.SetDroppableDisabled="setDroppableDisabled",e.UnregisterDroppable="unregisterDroppable"}(py||(py={}));const _y=Object.freeze({x:0,y:0});function by(e,t){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}function vy(e,t){let{data:{value:a}}=e,{data:{value:n}}=t;return a-n}function wy(e,t){let{data:{value:a}}=e,{data:{value:n}}=t;return n-a}function xy(e,t,a){return void 0===t&&(t=e.left),void 0===a&&(a=e.top),{x:t+.5*e.width,y:a+.5*e.height}}const ky=e=>{let{collisionRect:t,droppableRects:a,droppableContainers:n}=e;const o=xy(t,t.left,t.top),i=[];for(const r of n){const{id:e}=r,t=a.get(e);if(t){const a=by(xy(t),o);i.push({id:e,data:{droppableContainer:r,value:a}})}}return i.sort(vy)};function Cy(e,t){const a=Math.max(t.top,e.top),n=Math.max(t.left,e.left),o=Math.min(t.left+t.width,e.left+e.width),i=Math.min(t.top+t.height,e.top+e.height),r=o-n,s=i-a;if(n<o&&a<i){const a=t.width*t.height,n=e.width*e.height,o=r*s;return Number((o/(a+n-o)).toFixed(4))}return 0}const jy=e=>{let{collisionRect:t,droppableRects:a,droppableContainers:n}=e;const o=[];for(const i of n){const{id:e}=i,n=a.get(e);if(n){const a=Cy(n,t);a>0&&o.push({id:e,data:{droppableContainer:i,value:a}})}}return o.sort(wy)};function Sy(e,t){return e&&t?{x:e.left-t.left,y:e.top-t.top}:_y}function Iy(e){return function(t){for(var a=arguments.length,n=new Array(a>1?a-1:0),o=1;o<a;o++)n[o-1]=arguments[o];return n.reduce(((t,a)=>({...t,top:t.top+e*a.y,bottom:t.bottom+e*a.y,left:t.left+e*a.x,right:t.right+e*a.x})),{...t})}}const Ay=Iy(1);function Ny(e){if(e.startsWith("matrix3d(")){const t=e.slice(9,-1).split(/, /);return{x:+t[12],y:+t[13],scaleX:+t[0],scaleY:+t[5]}}if(e.startsWith("matrix(")){const t=e.slice(7,-1).split(/, /);return{x:+t[4],y:+t[5],scaleX:+t[0],scaleY:+t[3]}}return null}const Ey={ignoreTransform:!1};function Ty(e,t){void 0===t&&(t=Ey);let a=e.getBoundingClientRect();if(t.ignoreTransform){const{transform:t,transformOrigin:n}=Lg(e).getComputedStyle(e);t&&(a=function(e,t,a){const n=Ny(t);if(!n)return e;const{scaleX:o,scaleY:i,x:r,y:s}=n,l=e.left-r-(1-o)*parseFloat(a),c=e.top-s-(1-i)*parseFloat(a.slice(a.indexOf(" ")+1)),d=o?e.width/o:e.width,u=i?e.height/i:e.height;return{width:d,height:u,top:c,right:l+d,bottom:c+u,left:l}}(a,t,n))}const{top:n,left:o,width:i,height:r,bottom:s,right:l}=a;return{top:n,left:o,width:i,height:r,bottom:s,right:l}}function Dy(e){return Ty(e,{ignoreTransform:!0})}function Ry(e,t){const a=[];return e?function n(o){if(null!=t&&a.length>=t)return a;if(!o)return a;if(Wg(o)&&null!=o.scrollingElement&&!a.includes(o.scrollingElement))return a.push(o.scrollingElement),a;if(!Bg(o)||Hg(o))return a;if(a.includes(o))return a;const i=Lg(e).getComputedStyle(o);return o!==e&&function(e,t){void 0===t&&(t=Lg(e).getComputedStyle(e));const a=/(auto|scroll|overlay)/;return["overflow","overflowX","overflowY"].some((e=>{const n=t[e];return"string"===typeof n&&a.test(n)}))}(o,i)&&a.push(o),function(e,t){return void 0===t&&(t=Lg(e).getComputedStyle(e)),"fixed"===t.position}(o,i)?a:n(o.parentNode)}(e):a}function My(e){const[t]=Ry(e,1);return null!=t?t:null}function Oy(e){return Gg&&e?Pg(e)?e:Fg(e)?Wg(e)||e===Ug(e).scrollingElement?window:Bg(e)?e:null:null:null}function qy(e){return Pg(e)?e.scrollX:e.scrollLeft}function Gy(e){return Pg(e)?e.scrollY:e.scrollTop}function Py(e){return{x:qy(e),y:Gy(e)}}var Fy;function Ly(e){return!(!Gg||!e)&&e===document.scrollingElement}function Wy(e){const t={x:0,y:0},a=Ly(e)?{height:window.innerHeight,width:window.innerWidth}:{height:e.clientHeight,width:e.clientWidth},n={x:e.scrollWidth-a.width,y:e.scrollHeight-a.height};return{isTop:e.scrollTop<=t.y,isLeft:e.scrollLeft<=t.x,isBottom:e.scrollTop>=n.y,isRight:e.scrollLeft>=n.x,maxScroll:n,minScroll:t}}!function(e){e[e.Forward=1]="Forward",e[e.Backward=-1]="Backward"}(Fy||(Fy={}));const By={x:.2,y:.2};function Hy(e,t,a,n,o){let{top:i,left:r,right:s,bottom:l}=a;void 0===n&&(n=10),void 0===o&&(o=By);const{isTop:c,isBottom:d,isLeft:u,isRight:h}=Wy(e),m={x:0,y:0},p={x:0,y:0},f=t.height*o.y,g=t.width*o.x;return!c&&i<=t.top+f?(m.y=Fy.Backward,p.y=n*Math.abs((t.top+f-i)/f)):!d&&l>=t.bottom-f&&(m.y=Fy.Forward,p.y=n*Math.abs((t.bottom-f-l)/f)),!h&&s>=t.right-g?(m.x=Fy.Forward,p.x=n*Math.abs((t.right-g-s)/g)):!u&&r<=t.left+g&&(m.x=Fy.Backward,p.x=n*Math.abs((t.left+g-r)/g)),{direction:m,speed:p}}function Uy(e){if(e===document.scrollingElement){const{innerWidth:e,innerHeight:t}=window;return{top:0,left:0,right:e,bottom:t,width:e,height:t}}const{top:t,left:a,right:n,bottom:o}=e.getBoundingClientRect();return{top:t,left:a,right:n,bottom:o,width:e.clientWidth,height:e.clientHeight}}function Ky(e){return e.reduce(((e,t)=>ey(e,Py(t))),_y)}function zy(e,t){if(void 0===t&&(t=Ty),!e)return;const{top:a,left:n,bottom:o,right:i}=t(e);My(e)&&(o<=0||i<=0||a>=window.innerHeight||n>=window.innerWidth)&&e.scrollIntoView({block:"center",inline:"center"})}const Vy=[["x",["left","right"],function(e){return e.reduce(((e,t)=>e+qy(t)),0)}],["y",["top","bottom"],function(e){return e.reduce(((e,t)=>e+Gy(t)),0)}]];class Yy{constructor(e,t){this.rect=void 0,this.width=void 0,this.height=void 0,this.top=void 0,this.bottom=void 0,this.right=void 0,this.left=void 0;const a=Ry(t),n=Ky(a);this.rect={...e},this.width=e.width,this.height=e.height;for(const[o,i,r]of Vy)for(const e of i)Object.defineProperty(this,e,{get:()=>{const t=r(a),i=n[o]-t;return this.rect[e]+i},enumerable:!0});Object.defineProperty(this,"rect",{enumerable:!1})}}class Jy{constructor(e){this.target=void 0,this.listeners=[],this.removeAll=()=>{this.listeners.forEach((e=>{var t;return null==(t=this.target)?void 0:t.removeEventListener(...e)}))},this.target=e}add(e,t,a){var n;null==(n=this.target)||n.addEventListener(e,t,a),this.listeners.push([e,t,a])}}function $y(e,t){const a=Math.abs(e.x),n=Math.abs(e.y);return"number"===typeof t?Math.sqrt(a**2+n**2)>t:"x"in t&&"y"in t?a>t.x&&n>t.y:"x"in t?a>t.x:"y"in t&&n>t.y}var Zy,Qy;function Xy(e){e.preventDefault()}function e_(e){e.stopPropagation()}!function(e){e.Click="click",e.DragStart="dragstart",e.Keydown="keydown",e.ContextMenu="contextmenu",e.Resize="resize",e.SelectionChange="selectionchange",e.VisibilityChange="visibilitychange"}(Zy||(Zy={})),function(e){e.Space="Space",e.Down="ArrowDown",e.Right="ArrowRight",e.Left="ArrowLeft",e.Up="ArrowUp",e.Esc="Escape",e.Enter="Enter",e.Tab="Tab"}(Qy||(Qy={}));const t_={start:[Qy.Space,Qy.Enter],cancel:[Qy.Esc],end:[Qy.Space,Qy.Enter,Qy.Tab]},a_=(e,t)=>{let{currentCoordinates:a}=t;switch(e.code){case Qy.Right:return{...a,x:a.x+25};case Qy.Left:return{...a,x:a.x-25};case Qy.Down:return{...a,y:a.y+25};case Qy.Up:return{...a,y:a.y-25}}};class n_{constructor(e){this.props=void 0,this.autoScrollEnabled=!1,this.referenceCoordinates=void 0,this.listeners=void 0,this.windowListeners=void 0,this.props=e;const{event:{target:t}}=e;this.props=e,this.listeners=new Jy(Ug(t)),this.windowListeners=new Jy(Lg(t)),this.handleKeyDown=this.handleKeyDown.bind(this),this.handleCancel=this.handleCancel.bind(this),this.attach()}attach(){this.handleStart(),this.windowListeners.add(Zy.Resize,this.handleCancel),this.windowListeners.add(Zy.VisibilityChange,this.handleCancel),setTimeout((()=>this.listeners.add(Zy.Keydown,this.handleKeyDown)))}handleStart(){const{activeNode:e,onStart:t}=this.props,a=e.node.current;a&&zy(a),t(_y)}handleKeyDown(e){if(ay(e)){const{active:t,context:a,options:n}=this.props,{keyboardCodes:o=t_,coordinateGetter:i=a_,scrollBehavior:r="smooth"}=n,{code:s}=e;if(o.end.includes(s))return void this.handleEnd(e);if(o.cancel.includes(s))return void this.handleCancel(e);const{collisionRect:l}=a.current,c=l?{x:l.left,y:l.top}:_y;this.referenceCoordinates||(this.referenceCoordinates=c);const d=i(e,{active:t,context:a.current,currentCoordinates:c});if(d){const t=ty(d,c),n={x:0,y:0},{scrollableAncestors:o}=a.current;for(const a of o){const o=e.code,{isTop:i,isRight:s,isLeft:l,isBottom:c,maxScroll:u,minScroll:h}=Wy(a),m=Uy(a),p={x:Math.min(o===Qy.Right?m.right-m.width/2:m.right,Math.max(o===Qy.Right?m.left:m.left+m.width/2,d.x)),y:Math.min(o===Qy.Down?m.bottom-m.height/2:m.bottom,Math.max(o===Qy.Down?m.top:m.top+m.height/2,d.y))},f=o===Qy.Right&&!s||o===Qy.Left&&!l,g=o===Qy.Down&&!c||o===Qy.Up&&!i;if(f&&p.x!==d.x){const e=a.scrollLeft+t.x,i=o===Qy.Right&&e<=u.x||o===Qy.Left&&e>=h.x;if(i&&!t.y)return void a.scrollTo({left:e,behavior:r});n.x=i?a.scrollLeft-e:o===Qy.Right?a.scrollLeft-u.x:a.scrollLeft-h.x,n.x&&a.scrollBy({left:-n.x,behavior:r});break}if(g&&p.y!==d.y){const e=a.scrollTop+t.y,i=o===Qy.Down&&e<=u.y||o===Qy.Up&&e>=h.y;if(i&&!t.x)return void a.scrollTo({top:e,behavior:r});n.y=i?a.scrollTop-e:o===Qy.Down?a.scrollTop-u.y:a.scrollTop-h.y,n.y&&a.scrollBy({top:-n.y,behavior:r});break}}this.handleMove(e,ey(ty(d,this.referenceCoordinates),n))}}}handleMove(e,t){const{onMove:a}=this.props;e.preventDefault(),a(t)}handleEnd(e){const{onEnd:t}=this.props;e.preventDefault(),this.detach(),t()}handleCancel(e){const{onCancel:t}=this.props;e.preventDefault(),this.detach(),t()}detach(){this.listeners.removeAll(),this.windowListeners.removeAll()}}function o_(e){return Boolean(e&&"distance"in e)}function i_(e){return Boolean(e&&"delay"in e)}n_.activators=[{eventName:"onKeyDown",handler:(e,t,a)=>{let{keyboardCodes:n=t_,onActivation:o}=t,{active:i}=a;const{code:r}=e.nativeEvent;if(n.start.includes(r)){const t=i.activatorNode.current;return(!t||e.target===t)&&(e.preventDefault(),null==o||o({event:e.nativeEvent}),!0)}return!1}}];class r_{constructor(e,t,a){var n;void 0===a&&(a=function(e){const{EventTarget:t}=Lg(e);return e instanceof t?e:Ug(e)}(e.event.target)),this.props=void 0,this.events=void 0,this.autoScrollEnabled=!0,this.document=void 0,this.activated=!1,this.initialCoordinates=void 0,this.timeoutId=null,this.listeners=void 0,this.documentListeners=void 0,this.windowListeners=void 0,this.props=e,this.events=t;const{event:o}=e,{target:i}=o;this.props=e,this.events=t,this.document=Ug(i),this.documentListeners=new Jy(this.document),this.listeners=new Jy(a),this.windowListeners=new Jy(Lg(i)),this.initialCoordinates=null!=(n=ny(o))?n:_y,this.handleStart=this.handleStart.bind(this),this.handleMove=this.handleMove.bind(this),this.handleEnd=this.handleEnd.bind(this),this.handleCancel=this.handleCancel.bind(this),this.handleKeydown=this.handleKeydown.bind(this),this.removeTextSelection=this.removeTextSelection.bind(this),this.attach()}attach(){const{events:e,props:{options:{activationConstraint:t,bypassActivationConstraint:a}}}=this;if(this.listeners.add(e.move.name,this.handleMove,{passive:!1}),this.listeners.add(e.end.name,this.handleEnd),e.cancel&&this.listeners.add(e.cancel.name,this.handleCancel),this.windowListeners.add(Zy.Resize,this.handleCancel),this.windowListeners.add(Zy.DragStart,Xy),this.windowListeners.add(Zy.VisibilityChange,this.handleCancel),this.windowListeners.add(Zy.ContextMenu,Xy),this.documentListeners.add(Zy.Keydown,this.handleKeydown),t){if(null!=a&&a({event:this.props.event,activeNode:this.props.activeNode,options:this.props.options}))return this.handleStart();if(i_(t))return this.timeoutId=setTimeout(this.handleStart,t.delay),void this.handlePending(t);if(o_(t))return void this.handlePending(t)}this.handleStart()}detach(){this.listeners.removeAll(),this.windowListeners.removeAll(),setTimeout(this.documentListeners.removeAll,50),null!==this.timeoutId&&(clearTimeout(this.timeoutId),this.timeoutId=null)}handlePending(e,t){const{active:a,onPending:n}=this.props;n(a,e,this.initialCoordinates,t)}handleStart(){const{initialCoordinates:e}=this,{onStart:t}=this.props;e&&(this.activated=!0,this.documentListeners.add(Zy.Click,e_,{capture:!0}),this.removeTextSelection(),this.documentListeners.add(Zy.SelectionChange,this.removeTextSelection),t(e))}handleMove(e){var t;const{activated:a,initialCoordinates:n,props:o}=this,{onMove:i,options:{activationConstraint:r}}=o;if(!n)return;const s=null!=(t=ny(e))?t:_y,l=ty(n,s);if(!a&&r){if(o_(r)){if(null!=r.tolerance&&$y(l,r.tolerance))return this.handleCancel();if($y(l,r.distance))return this.handleStart()}return i_(r)&&$y(l,r.tolerance)?this.handleCancel():void this.handlePending(r,l)}e.cancelable&&e.preventDefault(),i(s)}handleEnd(){const{onAbort:e,onEnd:t}=this.props;this.detach(),this.activated||e(this.props.active),t()}handleCancel(){const{onAbort:e,onCancel:t}=this.props;this.detach(),this.activated||e(this.props.active),t()}handleKeydown(e){e.code===Qy.Esc&&this.handleCancel()}removeTextSelection(){var e;null==(e=this.document.getSelection())||e.removeAllRanges()}}const s_={cancel:{name:"pointercancel"},move:{name:"pointermove"},end:{name:"pointerup"}};class l_ extends r_{constructor(e){const{event:t}=e,a=Ug(t.target);super(e,s_,a)}}l_.activators=[{eventName:"onPointerDown",handler:(e,t)=>{let{nativeEvent:a}=e,{onActivation:n}=t;return!(!a.isPrimary||0!==a.button)&&(null==n||n({event:a}),!0)}}];const c_={move:{name:"mousemove"},end:{name:"mouseup"}};var d_;!function(e){e[e.RightClick=2]="RightClick"}(d_||(d_={}));(class extends r_{constructor(e){super(e,c_,Ug(e.event.target))}}).activators=[{eventName:"onMouseDown",handler:(e,t)=>{let{nativeEvent:a}=e,{onActivation:n}=t;return a.button!==d_.RightClick&&(null==n||n({event:a}),!0)}}];const u_={cancel:{name:"touchcancel"},move:{name:"touchmove"},end:{name:"touchend"}};var h_,m_;function p_(e){let{acceleration:a,activator:n=h_.Pointer,canScroll:o,draggingRect:i,enabled:r,interval:s=5,order:l=m_.TreeOrder,pointerCoordinates:c,scrollableAncestors:d,scrollableAncestorRects:u,delta:h,threshold:m}=e;const p=function(e){let{delta:t,disabled:a}=e;const n=$g(t);return Yg((e=>{if(a||!n||!e)return f_;const o={x:Math.sign(t.x-n.x),y:Math.sign(t.y-n.y)};return{x:{[Fy.Backward]:e.x[Fy.Backward]||-1===o.x,[Fy.Forward]:e.x[Fy.Forward]||1===o.x},y:{[Fy.Backward]:e.y[Fy.Backward]||-1===o.y,[Fy.Forward]:e.y[Fy.Forward]||1===o.y}}}),[a,t,n])}({delta:h,disabled:!r}),[f,g]=function(){const e=(0,t.useRef)(null),a=(0,t.useCallback)(((t,a)=>{e.current=setInterval(t,a)}),[]);return[a,(0,t.useCallback)((()=>{null!==e.current&&(clearInterval(e.current),e.current=null)}),[])]}(),y=(0,t.useRef)({x:0,y:0}),_=(0,t.useRef)({x:0,y:0}),b=(0,t.useMemo)((()=>{switch(n){case h_.Pointer:return c?{top:c.y,bottom:c.y,left:c.x,right:c.x}:null;case h_.DraggableRect:return i}}),[n,i,c]),v=(0,t.useRef)(null),w=(0,t.useCallback)((()=>{const e=v.current;if(!e)return;const t=y.current.x*_.current.x,a=y.current.y*_.current.y;e.scrollBy(t,a)}),[]),x=(0,t.useMemo)((()=>l===m_.TreeOrder?[...d].reverse():d),[l,d]);(0,t.useEffect)((()=>{if(r&&d.length&&b){for(const e of x){if(!1===(null==o?void 0:o(e)))continue;const t=d.indexOf(e),n=u[t];if(!n)continue;const{direction:i,speed:r}=Hy(e,n,b,a,m);for(const e of["x","y"])p[e][i[e]]||(r[e]=0,i[e]=0);if(r.x>0||r.y>0)return g(),v.current=e,f(w,s),y.current=r,void(_.current=i)}y.current={x:0,y:0},_.current={x:0,y:0},g()}else g()}),[a,w,o,g,r,s,JSON.stringify(b),JSON.stringify(p),f,d,x,u,JSON.stringify(m)])}(class extends r_{constructor(e){super(e,u_)}static setup(){return window.addEventListener(u_.move.name,e,{capture:!1,passive:!1}),function(){window.removeEventListener(u_.move.name,e)};function e(){}}}).activators=[{eventName:"onTouchStart",handler:(e,t)=>{let{nativeEvent:a}=e,{onActivation:n}=t;const{touches:o}=a;return!(o.length>1)&&(null==n||n({event:a}),!0)}}],function(e){e[e.Pointer=0]="Pointer",e[e.DraggableRect=1]="DraggableRect"}(h_||(h_={})),function(e){e[e.TreeOrder=0]="TreeOrder",e[e.ReversedTreeOrder=1]="ReversedTreeOrder"}(m_||(m_={}));const f_={x:{[Fy.Backward]:!1,[Fy.Forward]:!1},y:{[Fy.Backward]:!1,[Fy.Forward]:!1}};var g_,y_;!function(e){e[e.Always=0]="Always",e[e.BeforeDragging=1]="BeforeDragging",e[e.WhileDragging=2]="WhileDragging"}(g_||(g_={})),function(e){e.Optimized="optimized"}(y_||(y_={}));const __=new Map;function b_(e,t){return Yg((a=>e?a||("function"===typeof t?t(e):e):null),[t,e])}function v_(e){let{callback:a,disabled:n}=e;const o=zg(a),i=(0,t.useMemo)((()=>{if(n||"undefined"===typeof window||"undefined"===typeof window.ResizeObserver)return;const{ResizeObserver:e}=window;return new e(o)}),[n]);return(0,t.useEffect)((()=>()=>null==i?void 0:i.disconnect()),[i]),i}function w_(e){return new Yy(Ty(e),e)}function x_(e,a,n){void 0===a&&(a=w_);const[o,i]=(0,t.useState)(null);function r(){i((t=>{if(!e)return null;var o;if(!1===e.isConnected)return null!=(o=null!=t?t:n)?o:null;const i=a(e);return JSON.stringify(t)===JSON.stringify(i)?t:i}))}const s=function(e){let{callback:a,disabled:n}=e;const o=zg(a),i=(0,t.useMemo)((()=>{if(n||"undefined"===typeof window||"undefined"===typeof window.MutationObserver)return;const{MutationObserver:e}=window;return new e(o)}),[o,n]);return(0,t.useEffect)((()=>()=>null==i?void 0:i.disconnect()),[i]),i}({callback(t){if(e)for(const a of t){const{type:t,target:n}=a;if("childList"===t&&n instanceof HTMLElement&&n.contains(e)){r();break}}}}),l=v_({callback:r});return Kg((()=>{r(),e?(null==l||l.observe(e),null==s||s.observe(document.body,{childList:!0,subtree:!0})):(null==l||l.disconnect(),null==s||s.disconnect())}),[e]),o}const k_=[];function C_(e,a){void 0===a&&(a=[]);const n=(0,t.useRef)(null);return(0,t.useEffect)((()=>{n.current=null}),a),(0,t.useEffect)((()=>{const t=e!==_y;t&&!n.current&&(n.current=e),!t&&n.current&&(n.current=null)}),[e]),n.current?ty(e,n.current):_y}function j_(e){return(0,t.useMemo)((()=>e?function(e){const t=e.innerWidth,a=e.innerHeight;return{top:0,left:0,right:t,bottom:a,width:t,height:a}}(e):null),[e])}const S_=[];function I_(e){if(!e)return null;if(e.children.length>1)return e;const t=e.children[0];return Bg(t)?t:e}const A_=[{sensor:l_,options:{}},{sensor:n_,options:{}}],N_={current:{}},E_={draggable:{measure:Dy},droppable:{measure:Dy,strategy:g_.WhileDragging,frequency:y_.Optimized},dragOverlay:{measure:Ty}};class T_ extends Map{get(e){var t;return null!=e&&null!=(t=super.get(e))?t:void 0}toArray(){return Array.from(this.values())}getEnabled(){return this.toArray().filter((e=>{let{disabled:t}=e;return!t}))}getNodeFor(e){var t,a;return null!=(t=null==(a=this.get(e))?void 0:a.node.current)?t:void 0}}const D_={activatorEvent:null,active:null,activeNode:null,activeNodeRect:null,collisions:null,containerNodeRect:null,draggableNodes:new Map,droppableRects:new Map,droppableContainers:new T_,over:null,dragOverlay:{nodeRef:{current:null},rect:null,setRef:fy},scrollableAncestors:[],scrollableAncestorRects:[],measuringConfiguration:E_,measureDroppableContainers:fy,windowRect:null,measuringScheduled:!1},R_={activatorEvent:null,activators:[],active:null,activeNodeRect:null,ariaDescribedById:{draggable:""},dispatch:fy,draggableNodes:new Map,over:null,measureDroppableContainers:fy},M_=(0,t.createContext)(R_),O_=(0,t.createContext)(D_);function q_(){return{draggable:{active:null,initialCoordinates:{x:0,y:0},nodes:new Map,translate:{x:0,y:0}},droppable:{containers:new T_}}}function G_(e,t){switch(t.type){case py.DragStart:return{...e,draggable:{...e.draggable,initialCoordinates:t.initialCoordinates,active:t.active}};case py.DragMove:return null==e.draggable.active?e:{...e,draggable:{...e.draggable,translate:{x:t.coordinates.x-e.draggable.initialCoordinates.x,y:t.coordinates.y-e.draggable.initialCoordinates.y}}};case py.DragEnd:case py.DragCancel:return{...e,draggable:{...e.draggable,active:null,initialCoordinates:{x:0,y:0},translate:{x:0,y:0}}};case py.RegisterDroppable:{const{element:a}=t,{id:n}=a,o=new T_(e.droppable.containers);return o.set(n,a),{...e,droppable:{...e.droppable,containers:o}}}case py.SetDroppableDisabled:{const{id:a,key:n,disabled:o}=t,i=e.droppable.containers.get(a);if(!i||n!==i.key)return e;const r=new T_(e.droppable.containers);return r.set(a,{...i,disabled:o}),{...e,droppable:{...e.droppable,containers:r}}}case py.UnregisterDroppable:{const{id:a,key:n}=t,o=e.droppable.containers.get(a);if(!o||n!==o.key)return e;const i=new T_(e.droppable.containers);return i.delete(a),{...e,droppable:{...e.droppable,containers:i}}}default:return e}}function P_(e){let{disabled:a}=e;const{active:n,activatorEvent:o,draggableNodes:i}=(0,t.useContext)(M_),r=$g(o),s=$g(null==n?void 0:n.id);return(0,t.useEffect)((()=>{if(!a&&!o&&r&&null!=s){if(!ay(r))return;if(document.activeElement===r.target)return;const e=i.get(s);if(!e)return;const{activatorNode:t,node:a}=e;if(!t.current&&!a.current)return;requestAnimationFrame((()=>{for(const e of[t.current,a.current]){if(!e)continue;const t=ry(e);if(t){t.focus();break}}}))}}),[o,a,i,s,r]),null}function F_(e,t){let{transform:a,...n}=t;return null!=e&&e.length?e.reduce(((e,t)=>t({transform:e,...n})),a):a}const L_=(0,t.createContext)({..._y,scaleX:1,scaleY:1});var W_;!function(e){e[e.Uninitialized=0]="Uninitialized",e[e.Initializing=1]="Initializing",e[e.Initialized=2]="Initialized"}(W_||(W_={}));const B_=(0,t.memo)((function(e){var a,n,o,i;let{id:r,accessibility:s,autoScroll:l=!0,children:c,sensors:d=A_,collisionDetection:u=jy,measuring:h,modifiers:m,...p}=e;const f=(0,t.useReducer)(G_,void 0,q_),[g,y]=f,[_,b]=function(){const[e]=(0,t.useState)((()=>new Set)),a=(0,t.useCallback)((t=>(e.add(t),()=>e.delete(t))),[e]),n=(0,t.useCallback)((t=>{let{type:a,event:n}=t;e.forEach((e=>{var t;return null==(t=e[a])?void 0:t.call(e,n)}))}),[e]);return[n,a]}(),[v,w]=(0,t.useState)(W_.Uninitialized),x=v===W_.Initialized,{draggable:{active:k,nodes:C,translate:j},droppable:{containers:S}}=g,I=null!=k?C.get(k):null,A=(0,t.useRef)({initial:null,translated:null}),N=(0,t.useMemo)((()=>{var e;return null!=k?{id:k,data:null!=(e=null==I?void 0:I.data)?e:N_,rect:A}:null}),[k,I]),E=(0,t.useRef)(null),[T,D]=(0,t.useState)(null),[R,M]=(0,t.useState)(null),O=Vg(p,Object.values(p)),q=Qg("DndDescribedBy",r),G=(0,t.useMemo)((()=>S.getEnabled()),[S]),P=(F=h,(0,t.useMemo)((()=>({draggable:{...E_.draggable,...null==F?void 0:F.draggable},droppable:{...E_.droppable,...null==F?void 0:F.droppable},dragOverlay:{...E_.dragOverlay,...null==F?void 0:F.dragOverlay}})),[null==F?void 0:F.draggable,null==F?void 0:F.droppable,null==F?void 0:F.dragOverlay]));var F;const{droppableRects:L,measureDroppableContainers:W,measuringScheduled:B}=function(e,a){let{dragging:n,dependencies:o,config:i}=a;const[r,s]=(0,t.useState)(null),{frequency:l,measure:c,strategy:d}=i,u=(0,t.useRef)(e),h=function(){switch(d){case g_.Always:return!1;case g_.BeforeDragging:return n;default:return!n}}(),m=Vg(h),p=(0,t.useCallback)((function(e){void 0===e&&(e=[]),m.current||s((t=>null===t?e:t.concat(e.filter((e=>!t.includes(e))))))}),[m]),f=(0,t.useRef)(null),g=Yg((t=>{if(h&&!n)return __;if(!t||t===__||u.current!==e||null!=r){const t=new Map;for(let a of e){if(!a)continue;if(r&&r.length>0&&!r.includes(a.id)&&a.rect.current){t.set(a.id,a.rect.current);continue}const e=a.node.current,n=e?new Yy(c(e),e):null;a.rect.current=n,n&&t.set(a.id,n)}return t}return t}),[e,r,n,h,c]);return(0,t.useEffect)((()=>{u.current=e}),[e]),(0,t.useEffect)((()=>{h||p()}),[n,h]),(0,t.useEffect)((()=>{r&&r.length>0&&s(null)}),[JSON.stringify(r)]),(0,t.useEffect)((()=>{h||"number"!==typeof l||null!==f.current||(f.current=setTimeout((()=>{p(),f.current=null}),l))}),[l,h,p,...o]),{droppableRects:g,measureDroppableContainers:p,measuringScheduled:null!=r}}(G,{dragging:x,dependencies:[j.x,j.y],config:P.droppable}),H=function(e,t){const a=null!=t?e.get(t):void 0,n=a?a.node.current:null;return Yg((e=>{var a;return null==t?null:null!=(a=null!=n?n:e)?a:null}),[n,t])}(C,k),U=(0,t.useMemo)((()=>R?ny(R):null),[R]),K=function(){const e=!1===(null==T?void 0:T.autoScrollEnabled),t="object"===typeof l?!1===l.enabled:!1===l,a=x&&!e&&!t;if("object"===typeof l)return{...l,enabled:a};return{enabled:a}}(),z=function(e,t){return b_(e,t)}(H,P.draggable.measure);!function(e){let{activeNode:a,measure:n,initialRect:o,config:i=!0}=e;const r=(0,t.useRef)(!1),{x:s,y:l}="boolean"===typeof i?{x:i,y:i}:i;Kg((()=>{if(!s&&!l||!a)return void(r.current=!1);if(r.current||!o)return;const e=null==a?void 0:a.node.current;if(!e||!1===e.isConnected)return;const t=Sy(n(e),o);if(s||(t.x=0),l||(t.y=0),r.current=!0,Math.abs(t.x)>0||Math.abs(t.y)>0){const a=My(e);a&&a.scrollBy({top:t.y,left:t.x})}}),[a,s,l,o,n])}({activeNode:null!=k?C.get(k):null,config:K.layoutShiftCompensation,initialRect:z,measure:P.draggable.measure});const V=x_(H,P.draggable.measure,z),Y=x_(H?H.parentElement:null),J=(0,t.useRef)({activatorEvent:null,active:null,activeNode:H,collisionRect:null,collisions:null,droppableRects:L,draggableNodes:C,draggingNode:null,draggingNodeRect:null,droppableContainers:S,over:null,scrollableAncestors:[],scrollAdjustedTranslate:null}),$=S.getNodeFor(null==(a=J.current.over)?void 0:a.id),Z=function(e){let{measure:a}=e;const[n,o]=(0,t.useState)(null),i=v_({callback:(0,t.useCallback)((e=>{for(const{target:t}of e)if(Bg(t)){o((e=>{const n=a(t);return e?{...e,width:n.width,height:n.height}:n}));break}}),[a])}),r=(0,t.useCallback)((e=>{const t=I_(e);null==i||i.disconnect(),t&&(null==i||i.observe(t)),o(t?a(t):null)}),[a,i]),[s,l]=Jg(r);return(0,t.useMemo)((()=>({nodeRef:s,rect:n,setRef:l})),[n,s,l])}({measure:P.dragOverlay.measure}),Q=null!=(n=Z.nodeRef.current)?n:H,X=x?null!=(o=Z.rect)?o:V:null,ee=Boolean(Z.nodeRef.current&&Z.rect),te=Sy(ae=ee?null:V,b_(ae));var ae;const ne=j_(Q?Lg(Q):null),oe=function(e){const a=(0,t.useRef)(e),n=Yg((t=>e?t&&t!==k_&&e&&a.current&&e.parentNode===a.current.parentNode?t:Ry(e):k_),[e]);return(0,t.useEffect)((()=>{a.current=e}),[e]),n}(x?null!=$?$:H:null),ie=function(e,a){void 0===a&&(a=Ty);const[n]=e,o=j_(n?Lg(n):null),[i,r]=(0,t.useState)(S_);function s(){r((()=>e.length?e.map((e=>Ly(e)?o:new Yy(a(e),e))):S_))}const l=v_({callback:s});return Kg((()=>{null==l||l.disconnect(),s(),e.forEach((e=>null==l?void 0:l.observe(e)))}),[e]),i}(oe),re=F_(m,{transform:{x:j.x-te.x,y:j.y-te.y,scaleX:1,scaleY:1},activatorEvent:R,active:N,activeNodeRect:V,containerNodeRect:Y,draggingNodeRect:X,over:J.current.over,overlayNodeRect:Z.rect,scrollableAncestors:oe,scrollableAncestorRects:ie,windowRect:ne}),se=U?ey(U,j):null,le=function(e){const[a,n]=(0,t.useState)(null),o=(0,t.useRef)(e),i=(0,t.useCallback)((e=>{const t=Oy(e.target);t&&n((e=>e?(e.set(t,Py(t)),new Map(e)):null))}),[]);return(0,t.useEffect)((()=>{const t=o.current;if(e!==t){a(t);const r=e.map((e=>{const t=Oy(e);return t?(t.addEventListener("scroll",i,{passive:!0}),[t,Py(t)]):null})).filter((e=>null!=e));n(r.length?new Map(r):null),o.current=e}return()=>{a(e),a(t)};function a(e){e.forEach((e=>{const t=Oy(e);null==t||t.removeEventListener("scroll",i)}))}}),[i,e]),(0,t.useMemo)((()=>e.length?a?Array.from(a.values()).reduce(((e,t)=>ey(e,t)),_y):Ky(e):_y),[e,a])}(oe),ce=C_(le),de=C_(le,[V]),ue=ey(re,ce),he=X?Ay(X,re):null,me=N&&he?u({active:N,collisionRect:he,droppableRects:L,droppableContainers:G,pointerCoordinates:se}):null,pe=function(e,t){if(!e||0===e.length)return null;const[a]=e;return t?a[t]:a}(me,"id"),[fe,ge]=(0,t.useState)(null),ye=function(e,t,a){return{...e,scaleX:t&&a?t.width/a.width:1,scaleY:t&&a?t.height/a.height:1}}(ee?re:ey(re,de),null!=(i=null==fe?void 0:fe.rect)?i:null,V),_e=(0,t.useRef)(null),be=(0,t.useCallback)(((e,t)=>{let{sensor:a,options:n}=t;if(null==E.current)return;const o=C.get(E.current);if(!o)return;const i=e.nativeEvent,r=new a({active:E.current,activeNode:o,event:i,options:n,context:J,onAbort(e){if(!C.get(e))return;const{onDragAbort:t}=O.current,a={id:e};null==t||t(a),_({type:"onDragAbort",event:a})},onPending(e,t,a,n){if(!C.get(e))return;const{onDragPending:o}=O.current,i={id:e,constraint:t,initialCoordinates:a,offset:n};null==o||o(i),_({type:"onDragPending",event:i})},onStart(e){const t=E.current;if(null==t)return;const a=C.get(t);if(!a)return;const{onDragStart:n}=O.current,o={activatorEvent:i,active:{id:t,data:a.data,rect:A}};(0,Ut.unstable_batchedUpdates)((()=>{null==n||n(o),w(W_.Initializing),y({type:py.DragStart,initialCoordinates:e,active:t}),_({type:"onDragStart",event:o}),D(_e.current),M(i)}))},onMove(e){y({type:py.DragMove,coordinates:e})},onEnd:s(py.DragEnd),onCancel:s(py.DragCancel)});function s(e){return async function(){const{active:t,collisions:a,over:n,scrollAdjustedTranslate:o}=J.current;let r=null;if(t&&o){const{cancelDrop:s}=O.current;if(r={activatorEvent:i,active:t,collisions:a,delta:o,over:n},e===py.DragEnd&&"function"===typeof s){await Promise.resolve(s(r))&&(e=py.DragCancel)}}E.current=null,(0,Ut.unstable_batchedUpdates)((()=>{y({type:e}),w(W_.Uninitialized),ge(null),D(null),M(null),_e.current=null;const t=e===py.DragEnd?"onDragEnd":"onDragCancel";if(r){const e=O.current[t];null==e||e(r),_({type:t,event:r})}}))}}_e.current=r}),[C]),ve=(0,t.useCallback)(((e,t)=>(a,n)=>{const o=a.nativeEvent,i=C.get(n);if(null!==E.current||!i||o.dndKit||o.defaultPrevented)return;const r={active:i};!0===e(a,t.options,r)&&(o.dndKit={capturedBy:t.sensor},E.current=n,be(a,t))}),[C,be]),we=function(e,a){return(0,t.useMemo)((()=>e.reduce(((e,t)=>{const{sensor:n}=t;return[...e,...n.activators.map((e=>({eventName:e.eventName,handler:a(e.handler,t)})))]}),[])),[e,a])}(d,ve);!function(e){(0,t.useEffect)((()=>{if(!Gg)return;const t=e.map((e=>{let{sensor:t}=e;return null==t.setup?void 0:t.setup()}));return()=>{for(const e of t)null==e||e()}}),e.map((e=>{let{sensor:t}=e;return t})))}(d),Kg((()=>{V&&v===W_.Initializing&&w(W_.Initialized)}),[V,v]),(0,t.useEffect)((()=>{const{onDragMove:e}=O.current,{active:t,activatorEvent:a,collisions:n,over:o}=J.current;if(!t||!a)return;const i={active:t,activatorEvent:a,collisions:n,delta:{x:ue.x,y:ue.y},over:o};(0,Ut.unstable_batchedUpdates)((()=>{null==e||e(i),_({type:"onDragMove",event:i})}))}),[ue.x,ue.y]),(0,t.useEffect)((()=>{const{active:e,activatorEvent:t,collisions:a,droppableContainers:n,scrollAdjustedTranslate:o}=J.current;if(!e||null==E.current||!t||!o)return;const{onDragOver:i}=O.current,r=n.get(pe),s=r&&r.rect.current?{id:r.id,rect:r.rect.current,data:r.data,disabled:r.disabled}:null,l={active:e,activatorEvent:t,collisions:a,delta:{x:o.x,y:o.y},over:s};(0,Ut.unstable_batchedUpdates)((()=>{ge(s),null==i||i(l),_({type:"onDragOver",event:l})}))}),[pe]),Kg((()=>{J.current={activatorEvent:R,active:N,activeNode:H,collisionRect:he,collisions:me,droppableRects:L,draggableNodes:C,draggingNode:Q,draggingNodeRect:X,droppableContainers:S,over:fe,scrollableAncestors:oe,scrollAdjustedTranslate:ue},A.current={initial:X,translated:he}}),[N,H,me,he,C,Q,X,L,S,fe,oe,ue]),p_({...K,delta:j,draggingRect:he,pointerCoordinates:se,scrollableAncestors:oe,scrollableAncestorRects:ie});const xe=(0,t.useMemo)((()=>({active:N,activeNode:H,activeNodeRect:V,activatorEvent:R,collisions:me,containerNodeRect:Y,dragOverlay:Z,draggableNodes:C,droppableContainers:S,droppableRects:L,over:fe,measureDroppableContainers:W,scrollableAncestors:oe,scrollableAncestorRects:ie,measuringConfiguration:P,measuringScheduled:B,windowRect:ne})),[N,H,V,R,me,Y,Z,C,S,L,fe,W,oe,ie,P,B,ne]),ke=(0,t.useMemo)((()=>({activatorEvent:R,activators:we,active:N,activeNodeRect:V,ariaDescribedById:{draggable:q},dispatch:y,draggableNodes:C,over:fe,measureDroppableContainers:W})),[R,we,N,V,y,q,C,fe,W]);return t.createElement(dy.Provider,{value:b},t.createElement(M_.Provider,{value:ke},t.createElement(O_.Provider,{value:xe},t.createElement(L_.Provider,{value:ye},c)),t.createElement(P_,{disabled:!1===(null==s?void 0:s.restoreFocus)})),t.createElement(my,{...s,hiddenTextDescribedById:q}))})),H_=(0,t.createContext)(null),U_="button",K_="Draggable";function z_(e){let{id:a,data:n,disabled:o=!1,attributes:i}=e;const r=Qg(K_),{activators:s,activatorEvent:l,active:c,activeNodeRect:d,ariaDescribedById:u,draggableNodes:h,over:m}=(0,t.useContext)(M_),{role:p=U_,roleDescription:f="draggable",tabIndex:g=0}=null!=i?i:{},y=(null==c?void 0:c.id)===a,_=(0,t.useContext)(y?L_:H_),[b,v]=Jg(),[w,x]=Jg(),k=function(e,a){return(0,t.useMemo)((()=>e.reduce(((e,t)=>{let{eventName:n,handler:o}=t;return e[n]=e=>{o(e,a)},e}),{})),[e,a])}(s,a),C=Vg(n);Kg((()=>(h.set(a,{id:a,key:r,node:b,activatorNode:w,data:C}),()=>{const e=h.get(a);e&&e.key===r&&h.delete(a)})),[h,a]);return{active:c,activatorEvent:l,activeNodeRect:d,attributes:(0,t.useMemo)((()=>({role:p,tabIndex:g,"aria-disabled":o,"aria-pressed":!(!y||p!==U_)||void 0,"aria-roledescription":f,"aria-describedby":u.draggable})),[o,p,g,y,f,u.draggable]),isDragging:y,listeners:o?void 0:k,node:b,over:m,setNodeRef:v,setActivatorNodeRef:x,transform:_}}function V_(){return(0,t.useContext)(O_)}const Y_="Droppable",J_={timeout:25};function $_(e,t,a){const n=e.slice();return n.splice(a<0?n.length+a:a,0,n.splice(t,1)[0]),n}function Z_(e,t){return e.reduce(((e,a,n)=>{const o=t.get(a);return o&&(e[n]=o),e}),Array(e.length))}function Q_(e){return null!==e&&e>=0}const X_=e=>{let{rects:t,activeIndex:a,overIndex:n,index:o}=e;const i=$_(t,n,a),r=t[o],s=i[o];return s&&r?{x:s.left-r.left,y:s.top-r.top,scaleX:s.width/r.width,scaleY:s.height/r.height}:null},eb={scaleX:1,scaleY:1},tb=e=>{var t;let{activeIndex:a,activeNodeRect:n,index:o,rects:i,overIndex:r}=e;const s=null!=(t=i[a])?t:n;if(!s)return null;if(o===a){const e=i[r];return e?{x:0,y:a<r?e.top+e.height-(s.top+s.height):e.top-s.top,...eb}:null}const l=function(e,t,a){const n=e[t],o=e[t-1],i=e[t+1];if(!n)return 0;if(a<t)return o?n.top-(o.top+o.height):i?i.top-(n.top+n.height):0;return i?i.top-(n.top+n.height):o?n.top-(o.top+o.height):0}(i,o,a);return o>a&&o<=r?{x:0,y:-s.height-l,...eb}:o<a&&o>=r?{x:0,y:s.height+l,...eb}:{x:0,y:0,...eb}};const ab="Sortable",nb=t.createContext({activeIndex:-1,containerId:ab,disableTransforms:!1,items:[],overIndex:-1,useDragOverlay:!1,sortedRects:[],strategy:X_,disabled:{draggable:!1,droppable:!1}});function ob(e){let{children:a,id:n,items:o,strategy:i=X_,disabled:r=!1}=e;const{active:s,dragOverlay:l,droppableRects:c,over:d,measureDroppableContainers:u}=V_(),h=Qg(ab,n),m=Boolean(null!==l.rect),p=(0,t.useMemo)((()=>o.map((e=>"object"===typeof e&&"id"in e?e.id:e))),[o]),f=null!=s,g=s?p.indexOf(s.id):-1,y=d?p.indexOf(d.id):-1,_=(0,t.useRef)(p),b=!function(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let a=0;a<e.length;a++)if(e[a]!==t[a])return!1;return!0}(p,_.current),v=-1!==y&&-1===g||b,w=function(e){return"boolean"===typeof e?{draggable:e,droppable:e}:e}(r);Kg((()=>{b&&f&&u(p)}),[b,p,f,u]),(0,t.useEffect)((()=>{_.current=p}),[p]);const x=(0,t.useMemo)((()=>({activeIndex:g,containerId:h,disabled:w,disableTransforms:v,items:p,overIndex:y,useDragOverlay:m,sortedRects:Z_(p,c),strategy:i})),[g,h,w.draggable,w.droppable,v,p,y,c,m,i]);return t.createElement(nb.Provider,{value:x},a)}const ib=e=>{let{id:t,items:a,activeIndex:n,overIndex:o}=e;return $_(a,n,o).indexOf(t)},rb=e=>{let{containerId:t,isSorting:a,wasDragging:n,index:o,items:i,newIndex:r,previousItems:s,previousContainerId:l,transition:c}=e;return!(!c||!n)&&((s===i||o!==r)&&(!!a||r!==o&&t===l))},sb={duration:200,easing:"ease"},lb="transform",cb=oy.Transition.toString({property:lb,duration:0,easing:"linear"}),db={roleDescription:"sortable"};function ub(e){let{animateLayoutChanges:a=rb,attributes:n,disabled:o,data:i,getNewIndex:r=ib,id:s,strategy:l,resizeObserverConfig:c,transition:d=sb}=e;const{items:u,containerId:h,activeIndex:m,disabled:p,disableTransforms:f,sortedRects:g,overIndex:y,useDragOverlay:_,strategy:b}=(0,t.useContext)(nb),v=function(e,t){var a,n;if("boolean"===typeof e)return{draggable:e,droppable:!1};return{draggable:null!=(a=null==e?void 0:e.draggable)?a:t.draggable,droppable:null!=(n=null==e?void 0:e.droppable)?n:t.droppable}}(o,p),w=u.indexOf(s),x=(0,t.useMemo)((()=>({sortable:{containerId:h,index:w,items:u},...i})),[h,i,w,u]),k=(0,t.useMemo)((()=>u.slice(u.indexOf(s))),[u,s]),{rect:C,node:j,isOver:S,setNodeRef:I}=function(e){let{data:a,disabled:n=!1,id:o,resizeObserverConfig:i}=e;const r=Qg(Y_),{active:s,dispatch:l,over:c,measureDroppableContainers:d}=(0,t.useContext)(M_),u=(0,t.useRef)({disabled:n}),h=(0,t.useRef)(!1),m=(0,t.useRef)(null),p=(0,t.useRef)(null),{disabled:f,updateMeasurementsFor:g,timeout:y}={...J_,...i},_=Vg(null!=g?g:o),b=v_({callback:(0,t.useCallback)((()=>{h.current?(null!=p.current&&clearTimeout(p.current),p.current=setTimeout((()=>{d(Array.isArray(_.current)?_.current:[_.current]),p.current=null}),y)):h.current=!0}),[y]),disabled:f||!s}),v=(0,t.useCallback)(((e,t)=>{b&&(t&&(b.unobserve(t),h.current=!1),e&&b.observe(e))}),[b]),[w,x]=Jg(v),k=Vg(a);return(0,t.useEffect)((()=>{b&&w.current&&(b.disconnect(),h.current=!1,b.observe(w.current))}),[w,b]),(0,t.useEffect)((()=>(l({type:py.RegisterDroppable,element:{id:o,key:r,disabled:n,node:w,rect:m,data:k}}),()=>l({type:py.UnregisterDroppable,key:r,id:o}))),[o]),(0,t.useEffect)((()=>{n!==u.current.disabled&&(l({type:py.SetDroppableDisabled,id:o,key:r,disabled:n}),u.current.disabled=n)}),[o,r,n,l]),{active:s,rect:m,isOver:(null==c?void 0:c.id)===o,node:w,over:c,setNodeRef:x}}({id:s,data:x,disabled:v.droppable,resizeObserverConfig:{updateMeasurementsFor:k,...c}}),{active:A,activatorEvent:N,activeNodeRect:E,attributes:T,setNodeRef:D,listeners:R,isDragging:M,over:O,setActivatorNodeRef:q,transform:G}=z_({id:s,data:x,attributes:{...db,...n},disabled:v.draggable}),P=function(){for(var e=arguments.length,a=new Array(e),n=0;n<e;n++)a[n]=arguments[n];return(0,t.useMemo)((()=>e=>{a.forEach((t=>t(e)))}),a)}(I,D),F=Boolean(A),L=F&&!f&&Q_(m)&&Q_(y),W=!_&&M,B=W&&L?G:null,H=L?null!=B?B:(null!=l?l:b)({rects:g,activeNodeRect:E,activeIndex:m,overIndex:y,index:w}):null,U=Q_(m)&&Q_(y)?r({id:s,items:u,activeIndex:m,overIndex:y}):w,K=null==A?void 0:A.id,z=(0,t.useRef)({activeId:K,items:u,newIndex:U,containerId:h}),V=u!==z.current.items,Y=a({active:A,containerId:h,isDragging:M,isSorting:F,id:s,index:w,items:u,newIndex:z.current.newIndex,previousItems:z.current.items,previousContainerId:z.current.containerId,transition:d,wasDragging:null!=z.current.activeId}),J=function(e){let{disabled:a,index:n,node:o,rect:i}=e;const[r,s]=(0,t.useState)(null),l=(0,t.useRef)(n);return Kg((()=>{if(!a&&n!==l.current&&o.current){const e=i.current;if(e){const t=Ty(o.current,{ignoreTransform:!0}),a={x:e.left-t.left,y:e.top-t.top,scaleX:e.width/t.width,scaleY:e.height/t.height};(a.x||a.y)&&s(a)}}n!==l.current&&(l.current=n)}),[a,n,o,i]),(0,t.useEffect)((()=>{r&&s(null)}),[r]),r}({disabled:!Y,index:w,node:j,rect:C});return(0,t.useEffect)((()=>{F&&z.current.newIndex!==U&&(z.current.newIndex=U),h!==z.current.containerId&&(z.current.containerId=h),u!==z.current.items&&(z.current.items=u)}),[F,U,h,u]),(0,t.useEffect)((()=>{if(K===z.current.activeId)return;if(null!=K&&null==z.current.activeId)return void(z.current.activeId=K);const e=setTimeout((()=>{z.current.activeId=K}),50);return()=>clearTimeout(e)}),[K]),{active:A,activeIndex:m,attributes:T,data:x,rect:C,index:w,newIndex:U,items:u,isOver:S,isSorting:F,isDragging:M,listeners:R,node:j,overIndex:y,over:O,setNodeRef:P,setActivatorNodeRef:q,setDroppableNodeRef:I,setDraggableNodeRef:D,transform:null!=J?J:H,transition:function(){if(J||V&&z.current.newIndex===w)return cb;if(W&&!ay(N)||!d)return;if(F||Y)return oy.Transition.toString({...d,property:lb});return}()}}Qy.Down,Qy.Right,Qy.Up,Qy.Left;var hb=e=>{let{item:t,index:a,onClick:n,isActive:o}=e;const{warband:i}=rf(),{play_mode:r,edit_mode:s,view_mode:l,print_mode:c,mode:d,setMode:u}=ff(),h=t.model;return(0,Dn.jsx)("div",{className:`WbbEditViewFighter ${o?"active":""} ${r?"play-mode":""} ${h.IsDead()?"state-dead":""} ${h.IsReserve()?"state-reserve":""} ${h.IsLost()?"state-lost":""}`,onClick:n,children:(0,Dn.jsxs)("div",{className:"WbbEditViewFighter-main",children:[(0,Dn.jsx)("div",{className:"fighter-preview-image-wrap",children:(0,Dn.jsx)(Hf.A,{modelSlug:h.GetModelSlug(),size:"medium",className:"fighter-preview-image"})}),(0,Dn.jsx)("div",{className:"model-name",children:t.model.CurModel.GetName()}),(0,Dn.jsx)("div",{className:"fighter-name",children:t.model.GetFighterName()!=t.model.CurModel.GetName()&&(0,Dn.jsx)(Dn.Fragment,{children:t.model.GetFighterName()})}),(0,Dn.jsxs)("div",{className:"cost-wrap",children:[t.purchase.GetTotalDucats()>0&&(0,Dn.jsx)("div",{className:"cost-ducats",children:(0,Dn.jsx)(il.A,{amount:t.purchase.GetTotalDucats(),type:"d"})}),t.purchase.GetTotalGlory()>0&&(0,Dn.jsx)("div",{className:"cost-Glory",children:(0,Dn.jsx)(il.A,{amount:t.purchase.GetTotalGlory(),type:"g"})})]}),s&&(0,Dn.jsx)(wf,{id:`fighter-${i?i.warband_data.Models.indexOf(t.purchase):0}`,type:"fighter",item:t}),(0,Dn.jsx)("div",{className:"equipment-summary",children:""!=t.model.GetEquipmentAsString()?(0,Dn.jsx)(Dn.Fragment,{children:t.model.GetEquipmentAsString()}):(0,Dn.jsx)(Dn.Fragment,{children:"No Battlekit"})})]})})};var mb=e=>{var a,n;let{fighter:o}=e;const{warband:i}=rf(),r=(0,t.useRef)(null),[s,l]=(0,t.useState)(null);(0,t.useEffect)((()=>{let e=!0;return o.model.GetAllEquipForShow().then((function(){e&&l(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[])})).catch((()=>{e&&l([])})),()=>{e=!1}}),[null===o||void 0===o||null===(a=o.model)||void 0===a?void 0:a.ID]);let c="";if(i&&null!==s){i.warband_data;const e=("undefined"!==typeof window?window.location.origin:"https://trench-companion.com")+"/warband/detail/"+i.id,t=s.map((e=>{var t;const a=e.equipment.GetName(),n=e.purchase.ItemCost,o=(0,za.Ie)(e.purchase.CostType);null===e||void 0===e||null===(t=e.equipment)||void 0===t||t.ID;return{"@type":"Thing",name:a||"Equipment",additionalProperty:[{"@type":"PropertyValue",name:"Cost",value:n,unitText:o}]}})),a=o.model.GetSkillsList().map((e=>({"@type":"DefinedTerm",name:e.Name||"Skill",termCode:e.ID}))),n=o.model.GetInjuriesList().map((e=>({"@type":"DefinedTerm",name:e.Name||"Injury",termCode:e.ID}))),r={"@context":"https://schema.org","@type":"Thing","@id":`${e}#${o.model.ID}`,name:o.model.GetFighterName(),isPartOf:{"@id":e},...o.model.GetWarbandNotes()&&{description:o.model.GetWarbandNotes()},...o.model.GetLore()&&{text:o.model.GetLore()},inLanguage:"en",additionalProperty:[{"@type":"PropertyValue",name:"Type",value:o.model.GetMemberType()},{"@type":"PropertyValue",name:"Status",value:o.model.GetMemberState()},{"@type":"PropertyValue",name:"XP",value:o.model.GetExperiencePoints()},{"@type":"PropertyValue",name:"BattleScars",value:o.model.GetBattleScars()},{"@type":"PropertyValue",name:"Total Value (D)",value:o.purchase.GetTotalDucats(),unitText:"Ducats"},{"@type":"PropertyValue",name:"Total Value (G)",value:o.purchase.GetTotalGlory(),unitText:"Glory"}],hasPart:[{"@type":"ItemList",name:"Equipment",itemListElement:t},{"@type":"ItemList",name:"Advancements",itemListElement:a},{"@type":"ItemList",name:"Injuries",itemListElement:n}]};d=r,c=JSON.stringify(d).replace(/</g,"\\u003c").replace(/>/g,"\\u003e").replace(/&/g,"\\u0026")}var d;if((0,t.useEffect)((()=>{c&&null===r.current&&(r.current=c)}),[c]),!i)return null;if(null===s)return null;const u=null!==(n=r.current)&&void 0!==n?n:c;return(0,Dn.jsx)("script",{type:"application/ld+json",dangerouslySetInnerHTML:{__html:u}})};var pb=e=>{let{fighter:a,index:n,onClick:o,isActive:i}=e;const{attributes:r,listeners:s,setNodeRef:l,transform:c,transition:d,isDragging:u}=ub({id:a.model.ID}),h={transform:oy.Transform.toString(c),transition:d,cursor:u?"grabbing":"pointer",zIndex:u?"3":"2",boxShadow:u?"0px 0px 8px 1px rgba(0,0,0,0.5)":"none"};return(0,t.useEffect)((()=>{if(u){const e=window.getSelection();e&&e.removeAllRanges()}}),[u]),(0,Dn.jsxs)("div",{className:"WbbEditViewFighterSortable",ref:l,style:h,...r,...s,children:[(0,Dn.jsx)(hb,{item:a,index:n,onClick:o,isActive:i}),(0,Dn.jsx)(mb,{fighter:a})]})};var fb=e=>{let{onAdd:t,models:a,title:n,category:o="",openFighter:i,currentDetailType:r,currentDetailPayload:s}=e;const{warband:l,reloadWbDisplay:c,modalIsOpen:d}=rf(),{edit_mode:u}=ff(),h=yy(gy(l_,{activationConstraint:{distance:8}}));if((!a||a.length<1)&&!t)return(0,Dn.jsx)(Dn.Fragment,{});if((!a||a.length<1)&&!u)return(0,Dn.jsx)(Dn.Fragment,{});const m=!!u&&!!t;return(0,Dn.jsxs)("div",{className:"WbbFighterCategory "+(m?"can-add":""),children:[(0,Dn.jsxs)("div",{className:"fighters-cat-headline",onClick:()=>{m&&t&&t()},children:[(0,Dn.jsx)("div",{className:"fighters-cat-name",children:n}),m&&(0,Dn.jsx)("div",{className:"fighters-cat-add-btn",children:(0,Dn.jsx)(Gn.g,{icon:Pn.QLR})})]}),(0,Dn.jsx)("div",{className:"fighters-cat-items",children:a&&l&&(0,Dn.jsx)(B_,{sensors:h,collisionDetection:ky,onDragEnd:e=>{const{active:t,over:a}=e;if(!l)return;l.warband_data.ReorganiseFighters(t,a),c();pn.o.getInstance().UserWarbandManager.UpdateItemInfo(l.id)},children:(0,Dn.jsx)(ob,{items:a.map((e=>e.model.ID)),strategy:tb,disabled:d,children:a.map(((e,t)=>{const a="fighter"===r&&(null===s||void 0===s?void 0:s.purchase)&&e.purchase&&l.warband_data.Models.indexOf(s.purchase)===l.warband_data.Models.indexOf(e.purchase);return(0,Dn.jsx)(pb,{fighter:e,index:t,onClick:()=>i("fighter",e),isActive:a},e.model.ID)}))})})})]})};var gb=e=>{let{openDetail:a,detailType:n,detailPayload:o,setShowAddFighterEliteModal:i,setShowAddFighterTroopModal:r,setShowAddFighterMercenaryModal:s}=e;const{warband:l,updateKey:c,reloadWbDisplay:d,modalIsOpen:u}=rf(),{play_mode:h,edit_mode:m,view_mode:p,print_mode:f,setMode:g}=ff(),[y,_]=(yy(gy(l_,{activationConstraint:{distance:8}})),(0,t.useState)(0));(0,t.useEffect)((()=>{_(y+1)}),[c]);const b=null===l||void 0===l?void 0:l.warband_data.GetFighters().filter((e=>e.model.IsElite()&&"active"===e.model.State)),v=null===l||void 0===l?void 0:l.warband_data.GetFighters().filter((e=>e.model.IsTroop()&&"active"===e.model.State)),w=null===l||void 0===l?void 0:l.warband_data.GetFighters().filter((e=>e.model.IsMercenary()&&!e.model.IsElite()&&"active"===e.model.State)),x=null===l||void 0===l?void 0:l.warband_data.GetFighters().filter((e=>"dog"===e.model.State)),k=null===l||void 0===l?void 0:l.warband_data.GetFighters().filter((e=>"reserved"===e.model.State)),C=null===l||void 0===l?void 0:l.warband_data.GetFighters().filter((e=>"lost"===e.model.State)),j=null===l||void 0===l?void 0:l.warband_data.GetFighters().filter((e=>"dead"===e.model.State)),S=null===l||void 0===l?void 0:l.warband_data.GetStash().filter((e=>void 0!=e.equipment.Tags.deployed_equipment));return(0,Dn.jsx)("div",{children:l&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(fb,{title:"Elites",category:"elites",onAdd:()=>i(!0),models:b,openFighter:a,currentDetailType:n,currentDetailPayload:o}),(0,Dn.jsx)(fb,{title:"Troops",category:"troops",onAdd:()=>r(!0),models:v,openFighter:a,currentDetailType:n,currentDetailPayload:o}),(0,Dn.jsx)(fb,{title:"Mercenaries",category:"mercenaries",onAdd:()=>s(!0),models:w,openFighter:a,currentDetailType:n,currentDetailPayload:o}),(0,Dn.jsx)(fb,{title:"Dogs",category:"dogs",models:x,openFighter:a,currentDetailType:n,currentDetailPayload:o}),(0,Dn.jsx)(fb,{title:"Reserves",category:"reserves",models:k,openFighter:a,currentDetailType:n,currentDetailPayload:o}),(0,Dn.jsx)(fb,{title:"Lost & Captured",category:"lost",models:C,openFighter:a,currentDetailType:n,currentDetailPayload:o}),(0,Dn.jsx)(fb,{title:"Dead",category:"dead",models:j,openFighter:a,currentDetailType:n,currentDetailPayload:o}),S&&S.length>0&&(0,Dn.jsxs)("div",{className:"WbbFighterCategory",children:[(0,Dn.jsx)("div",{className:"fighters-cat-headline",children:(0,Dn.jsx)("div",{className:"fighters-cat-name",children:"Deployed Equipment"})}),S.map(((e,t)=>(0,Dn.jsx)(Ef,{item:e.purchase},t)))]})]})},y)};var yb=()=>{const{warband:e,updateKey:a,reloadWbDisplay:n}=rf(),[o,i]=(0,t.useState)(0),[r,s]=(0,t.useState)([]),[l,c]=(0,t.useState)([]),[d,u]=(0,t.useState)([]);return(0,t.useEffect)((()=>{!async function(){if(e){const t=await(null===e||void 0===e?void 0:e.warband_data.GetModifiersList()),a=await(null===e||void 0===e?void 0:e.warband_data.GetFireteams());s(t),c(a),u(null===e||void 0===e?void 0:e.warband_data.ModifiersLoc),i(o+1)}}()}),[a]),(0,Dn.jsxs)("div",{children:[r.length>0&&(0,Dn.jsxs)("div",{className:"WbbFighterCategory",children:[(0,Dn.jsx)("div",{className:"fighters-cat-headline",children:(0,Dn.jsx)("div",{className:"fighters-cat-name",children:"Modifiers"})}),r.map(((e,t)=>(0,Dn.jsx)(hg,{warbprop:e,index:r.indexOf(e)},e.GetTrueName()+t)))]}),l.length>0&&(0,Dn.jsxs)("div",{className:"WbbFighterCategory",children:[(0,Dn.jsx)("div",{className:"fighters-cat-headline",children:(0,Dn.jsx)("div",{className:"fighters-cat-name",children:"Fireteams"})}),l.map(((e,t)=>(0,Dn.jsx)(hg,{warbprop:e,index:r.indexOf(e)},e.GetTrueName()+t)))]}),d.length>0&&(0,Dn.jsxs)("div",{className:"WbbFighterCategory",children:[(0,Dn.jsx)("div",{className:"fighters-cat-headline",children:(0,Dn.jsx)("div",{className:"fighters-cat-name",children:"Exploration Choices"})}),d.map(((e,t)=>(0,Dn.jsx)(hg,{warbprop:e,index:r.indexOf(e)},e.GetTrueName()+t)))]})]},o)};var _b=()=>{const{warband:e,updateKey:t,warbandUser:a}=rf(),{play_mode:n,edit_mode:o,view_mode:i,print_mode:r,mode:s,setMode:l}=ff();return a&&i?(0,Dn.jsx)("div",{className:"WbbUserinfo"}):(0,Dn.jsx)(Dn.Fragment,{})};var bb=e=>{let{onClick:t,isActive:a}=e;const{warband:n}=rf();return null==n?(0,Dn.jsx)("div",{children:"Loading..."}):(0,Dn.jsx)("div",{className:"WbbEditViewExplorationLocations warband-meta "+(a?"active":""),onClick:t,children:(0,Dn.jsx)("div",{className:"meta-headline",children:"Exploration"})})};var vb=e=>{let{show:a,onClose:n,onSubmit:o}=e;const{warband:i,updateKey:r}=rf(),[s,l]=(0,t.useState)(null),[c,d]=(0,t.useState)(null),[u,h]=(0,t.useState)([]),[m,p]=(0,t.useState)([]),[f,g]=(0,t.useState)(!0),[y,_]=(0,t.useState)(0),{handleSubmit:b,isSubmitting:v}=Mf((()=>{if(s){const e=u.filter((e=>e.valid_locs.filter((e=>e.location.ID==s.location.ID)).length>0))[0].valid_locs.filter((e=>e.location.ID==s.location.ID))[0];o(e),l(null),n()}}));function w(e){return null!=x(e)}function x(e){for(let t=0;t<u.length;t++)for(let a=0;a<u[t].valid_locs.length;a++)if(u[t].valid_locs[a].location.ID==e.ID)return u[t].valid_locs[a];return null}return(0,t.useEffect)((()=>{!async function(){const e=await(null===i||void 0===i?void 0:i.warband_data.GetAvailableLocations()),t=await tn.ExplorationFactory.GetAllTables(null,!1);void 0!=e&&h(e),p(t),_(y+1)}()}),[r]),(0,t.useEffect)((()=>{!async function(){g(!(null!==s&&void 0!==s&&s.location.GetID())),_(y+1)}()}),[r,s]),(0,Dn.jsxs)(Il.A,{show:a,onHide:n,className:"WbbModal WbbModalSelect WbbModalSelect_Exploration WbbModalAddExplorationLocation",centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Select Exploration Location"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:n})]}),(0,Dn.jsx)(Il.A.Body,{children:m.map((e=>(0,Dn.jsx)(qf,{title:(0,za.h8)(e.GetTrueName()),initiallyOpen:!1,nopad:!0,children:e.ExplorationLocations.map((e=>(0,Dn.jsxs)(t.Fragment,{children:[(0,Dn.jsx)("div",{className:`select-item \n                                        ${(c?c.location.ID:"")===e.ID?"selected details-open":""}\n                                        ${w(e)?"":"disabled"}\n                                    `,onClick:()=>{!function(e){const t=x(e);null!=t&&(c==t?(d(null),l(null)):(d(t),w(e)?l(t):l(null)))}(e)},children:(0,Dn.jsx)("div",{className:"item-name",children:e.TableValue+" - "+e.GetTrueName()})},e.ID),(c?c.location.ID:"")===e.ID&&(0,Dn.jsxs)("div",{className:"select-item-details",children:[null!=e.Description&&(0,Dn.jsx)("div",{className:"exploration-description",children:(0,pl.fE)(location,e.Description)}),null!=c&&c.location.MyOptions.length>0&&(0,Dn.jsx)("ul",{className:"exploration-description-options",children:c.location.MyOptions.map(((e,a)=>(0,Dn.jsx)(t.Fragment,{children:e.Selections.map((e=>{return(0,Dn.jsx)(t.Fragment,{children:(0,Dn.jsxs)("li",{className:"exploration-description-option",children:[(0,Dn.jsx)("span",{className:"option-name",children:e.display_str}),(n=e.value,void 0!=n.Tags&&void 0!=n.Tags.validation_rules&&(0,Dn.jsx)("span",{className:"option-description",children:e.value.Tags.validation_rules})),(0,Dn.jsx)("span",{className:"option-description",children:(0,pl.fE)(e.value,e.value.Description)})]})},`options-${a}-choice-${e.id}`);var n}))},`options-${a}`)))})]})]},`location-${e.ID}`)))},e.ID)))}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:n,children:"Cancel"}),(0,Dn.jsxs)(ss.A,{variant:"primary",onClick:b,disabled:f||v,children:[v?(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"icon-inline-left fa-spin "}):(0,Dn.jsx)(Gn.g,{icon:Pn.QLR,className:"icon-inline-left"}),"Unlock Location"]})]})]})};var wb=e=>{let{property:a,doshow:n}=e;const{warband:o,reloadWbDisplay:i,updateKey:r}=rf(),[s,l]=(0,t.useState)(a.SelectItem),[c,d]=(0,t.useState)(0),u=e=>{n&&null!=e&&a.OnSelect(e).then((()=>{l(a.SelectItem);pn.o.getInstance().UserWarbandManager.UpdateItemInfo(o?o.id:-999).then((()=>i()))}))};return(0,Dn.jsxs)("div",{className:"WbbExploration_Selection_Fallen_Knight mb-3",children:[(0,Dn.jsx)("div",{className:"fw-bold mb-2",children:"Choose weapon to loot"}),a.Options.map((e=>(0,Dn.jsxs)("div",{className:"form-check",children:[(0,Dn.jsx)("input",{className:"form-check-input",type:"radio",name:"fallen-knight-option",value:e.id,checked:s===e.value,onClick:()=>u(e),readOnly:!0}),(0,Dn.jsx)("label",{className:"form-check-label ",onClick:()=>u(e),children:e.display_str})]},e.id)))]})};var xb=e=>{let{property:a,dochange:n}=e;const{play_mode:o,edit_mode:i,view_mode:r,print_mode:s,mode:l,setMode:c}=ff(),{warband:d,reloadWbDisplay:u,updateKey:h}=rf(),[m,p]=(0,t.useState)(!1),[f,g]=(0,t.useState)(a.SelectItem),y=0==a.FullOptions.length?a.Options:a.FullOptions,[_,b]=(0,t.useState)(null);function v(e){return 0==a.FullOptions.length||null!=function(e){for(let t=0;t<a.Options.length;t++)if(a.Options[t].id==e.id)return a.Options[t];return null}(e)}return(0,Dn.jsxs)("div",{className:"WbbExploration_Selection_SingleEquipment mb-3",children:[(0,Dn.jsx)("div",{className:"fw-bold mb-2",children:"Select Item"}),(0,Dn.jsxs)("div",{className:"equipment-select",children:[(0,Dn.jsx)("div",{className:"equipment-select-string",children:f?(0,Dn.jsx)(Dn.Fragment,{children:f.GetTrueName()}):(0,Dn.jsx)(Dn.Fragment,{children:"-"})}),i&&n&&(0,Dn.jsxs)("div",{className:"btn btn-primary",onClick:()=>p(!0),children:[(0,Dn.jsx)(Gn.g,{icon:f?Pn.$3Z:Pn.QLR,className:"icon-inline-left-l"}),f?"Change Item":"Select Item"]})]}),(0,Dn.jsxs)(Il.A,{show:m,onHide:()=>p(!1),className:"WbbModal WbbModalSelect WbbModalAddEquipment",centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Select Equipment"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:()=>p(!1)})]}),(0,Dn.jsx)(Il.A.Body,{children:y.map((e=>(0,Dn.jsx)(kf.A,{id:e.id,title:e.value.Name,opened:_===e.id,available:v(e),onClick:()=>{v(e)&&b(e.id===_?null:e.id)},equipment:e.value.EquipmentItem,isSubmitting:!1,onSubmit:()=>{var t;null!=(t=e)&&a.OnSelect(t).then((()=>{g(a.SelectItem),pn.o.getInstance().UserWarbandManager.UpdateItemInfo(d?d.id:-999).then((()=>u()))}))},submitBtnString:"Add Equipment",cost:e.value.Cost,costType:(0,za.Ie)(e.value.CostType)},`select-item-${e.id}`)))}),(0,Dn.jsx)(Il.A.Footer,{children:(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:()=>p(!1),children:"Cancel"})})]})]})};var kb=e=>{let{property:a,dochange:n}=e;const{warband:o,reloadWbDisplay:i,updateKey:r}=rf(),[s,l]=(0,t.useState)(a.SelectItem),c=0==a.FullOptions.length?a.Options:a.FullOptions,[d,u]=(0,t.useState)(null),[h,m]=(0,t.useState)(!1),[p,f]=(0,t.useState)(0),[g,y]=(0,t.useState)(null),_=e=>{null!=e?a.OnSelect(e).then((()=>{l(a.SelectItem);pn.o.getInstance().UserWarbandManager.UpdateItemInfo(o?o.id:-999).then((()=>i()))})):a.OnEmpty().then((()=>{l(null);pn.o.getInstance().UserWarbandManager.UpdateItemInfo(o?o.id:-999).then((()=>i()))}))};function b(e){return 0==a.FullOptions.length||null!=function(e){for(let t=0;t<a.Options.length;t++)if(a.Options[t].id==e.id)return a.Options[t];return null}(e)}return(0,Dn.jsxs)("div",{className:"WbbExploration_Selection_MultiEquipment",children:[null!=s?(0,Dn.jsxs)("div",{className:"item",children:[(0,Dn.jsx)("span",{children:function(){if(null!=s){for(let e=0;e<a.Options.length;e++)if(s.GetID()==a.Options[e].value.GetID())return a.Options[e].display_str;return s.GetPresentationName()}return""}()}),n&&(0,Dn.jsx)("span",{className:"remove",onClick:()=>{_(null)},children:(0,Dn.jsx)(Gn.g,{icon:Pn.yLS})})]}):(0,Dn.jsx)("div",{children:n&&(0,Dn.jsx)("div",{className:"btn btn-primary w-100",onClick:()=>m(!0),children:"Add Item"})}),null==s&&(0,Dn.jsxs)(Il.A,{show:h,onHide:()=>m(!1),className:"WbbModal WbbModalSelect WbbModalAddEquipment",centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Add Equipment"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:()=>m(!1)})]}),(0,Dn.jsx)(Il.A.Body,{children:c.map((e=>(0,Dn.jsx)(kf.A,{id:e.id,title:e.value.Name,opened:g===e.id,available:b(e),onClick:()=>{b(e)&&y(e.id===g?null:e.id)},equipment:e.value.EquipmentItem,isSubmitting:!1,onSubmit:()=>_(e),submitBtnString:"Add Equipment",cost:e.value.Cost,costType:(0,za.Ie)(e.value.CostType)},`select-item-${e.id}`)))}),(0,Dn.jsx)(Il.A.Footer,{children:(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:()=>m(!1),children:"Cancel"})})]})]})};var Cb=e=>{let{property:a,dochange:n}=e;const{play_mode:o,edit_mode:i,view_mode:r,print_mode:s,mode:l,setMode:c}=ff(),{warband:d,reloadWbDisplay:u,updateKey:h}=rf(),[m,p]=(0,t.useState)(!1),[f,g]=(0,t.useState)(a.SelectItem),[y,_]=(0,t.useState)(null),b=0==a.FullOptions.length?a.Options:a.FullOptions;function v(e){return 0==a.FullOptions.length||null!=function(e){for(let t=0;t<a.Options.length;t++)if(a.Options[t].id==e.id)return a.Options[t];return null}(e)}return(0,Dn.jsxs)("div",{className:"WbbExploration_Selection_GloryPurchase mb-3",children:[(0,Dn.jsx)("div",{className:"fw-bold mb-2",children:"Select Glory Purchase"}),(0,Dn.jsxs)("div",{className:"equipment-select",children:[(0,Dn.jsx)("div",{className:"equipment-select-string",children:f?(0,Dn.jsxs)(Dn.Fragment,{children:[f.GetTrueName(),null!=(null===f||void 0===f?void 0:f.Cost)&&null!=(null===f||void 0===f?void 0:f.CostType)&&(0,Dn.jsxs)("span",{className:"fw-normal",children:[" - ",f.Cost," ",(0,za.Ie)(f.CostType)]})]}):(0,Dn.jsx)(Dn.Fragment,{children:"-"})}),i&&n&&(0,Dn.jsxs)("div",{className:"btn btn-primary",onClick:()=>p(!0),children:[(0,Dn.jsx)(Gn.g,{icon:f?Pn.$3Z:Pn.QLR,className:"icon-inline-left-l"}),f?"Change Item":"Select Item"]})]}),(0,Dn.jsxs)(Il.A,{show:m,onHide:()=>p(!1),className:"WbbModal WbbModalSelect WbbModalAddEquipment",centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Select Equipment"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:()=>p(!1)})]}),(0,Dn.jsx)(Il.A.Body,{children:b.map((e=>(0,Dn.jsx)(kf.A,{id:e.id,title:e.value.Name,opened:y===e.id,available:v(e),onClick:()=>{v(e)&&_(e.id===y?null:e.id)},equipment:e.value.EquipmentItem,isSubmitting:!1,onSubmit:()=>{var t;null!=(t=e)&&a.OnSelect(t).then((()=>{g(a.SelectItem),pn.o.getInstance().UserWarbandManager.UpdateItemInfo(d?d.id:-999).then((()=>u()))}))},submitBtnString:"Add Equipment",cost:e.value.Cost,costType:(0,za.Ie)(e.value.CostType)},`select-item-${e.id}`)))}),(0,Dn.jsx)(Il.A.Footer,{children:(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:()=>p(!1),children:"Cancel"})})]})]})};var jb=e=>{let{property:a,dochange:n,updateparent:o}=e;const[i,r]=(0,t.useState)(function(){if(null!=a.SelectData)return a.SelectData;return}()),[s,l]=(0,t.useState)(w(i)),[c,d]=(0,t.useState)(0),{warband:u,reloadWbDisplay:h,updateKey:m}=rf(),[p,f]=(0,t.useState)(!1),[g,y]=(0,t.useState)(a.SelectItem),[_,b]=(0,t.useState)(0),v=function(e){null!=e?a.OnSelect(e).then((()=>{y(a.SelectItem),b(parseInt(e.value)),l(!0),r(parseInt(e.value)),d(c+1);pn.o.getInstance().UserWarbandManager.UpdateItemInfo(u?u.id:-999).then((()=>o()))})):(a.SelectData=null,a.SelectItem=null,o())};function w(e){for(let t=0;t<a.Options.length;t++)if(parseInt(a.Options[t].value)==parseInt(e))return!0;return!1}return(0,Dn.jsxs)("div",{className:"WbbExploration_Selection_DieRollResult mb-3",children:[(0,Dn.jsx)("div",{className:"fw-bold mb-2",children:void 0!=a.Tags.item_name?a.Tags.item_name:"Die Result"}),(0,Dn.jsx)("input",{type:"number",className:"form-control "+(s?"":"is-invalid"),min:function(){if(a.Options.length<=0)return 0;let e=a.Options[0].value;for(let t=0;t<a.Options.length;t++)parseInt(a.Options[t].value)<e&&(e=parseInt(a.Options[t].value));return e}(),disabled:!n,value:null!==i&&void 0!==i?i:"",onChange:e=>{!function(e){let t=!1;for(let n=0;n<a.Options.length;n++)parseInt(a.Options[n].value)==parseInt(e)&&(t=!0,v(a.Options[n]));0==t&&(v(null,e),r(parseInt(e)),l(w(e)))}(e.target.value)},onFocus:e=>e.target.select()})]})};var Sb=e=>{let{property:a,doshow:n,dochange:o,updatestate:i}=e;const{warband:r,reloadWbDisplay:s,updateKey:l}=rf(),[c,d]=(0,t.useState)(-1),[u,h]=(0,t.useState)(0);return(0,t.useEffect)((()=>{!async function(){const e=new jn.J,t=await e.runEvent("getConsumableSelectType",a,[null===r||void 0===r?void 0:r.warband_data],0,null);d(t),h(u+1)}()}),[l]),(0,Dn.jsxs)(t.Fragment,{children:[0==c&&(0,Dn.jsx)(ig,{property:a,dochange:o}),1==c&&(0,Dn.jsx)(wb,{property:a,doshow:n}),2==c&&(0,Dn.jsx)(xb,{property:a,dochange:o}),3==c&&(0,Dn.jsx)(kb,{property:a,dochange:o}),4==c&&(0,Dn.jsx)(Dn.Fragment,{children:(0,Dn.jsx)(Cb,{property:a,dochange:o})}),5==c&&(0,Dn.jsx)(Dn.Fragment,{children:(0,Dn.jsx)(jb,{property:a,dochange:o,updateparent:()=>i()})})]},u)};var Ib=e=>{let{location:a,initiallyOpen:n}=e;const{warband:o,updateKey:i}=rf();if(null==o)return(0,Dn.jsx)("div",{children:"Loading..."});const[r,s]=(0,t.useState)(null!==n&&void 0!==n&&n),[l,c]=(0,t.useState)([]),[d,u]=(0,t.useState)(0),{play_mode:h,edit_mode:m,view_mode:p,print_mode:f,setMode:g}=ff();return(0,t.useEffect)((()=>{!async function(){const e=new jn.J,t=await e.runEvent("getLocationSavedMessage",a,[null===o||void 0===o?void 0:o.warband_data],[],null);c(t),u(d+1)}()}),[i]),(0,Dn.jsxs)("div",{className:"WbbEditViewExploration",children:[(0,Dn.jsxs)("div",{className:"WbbEditViewExploration-title",onClick:()=>s(!r),children:[(0,Dn.jsx)("div",{className:"exploration-name",children:a.GetOwnName()}),(0,Dn.jsx)("span",{className:"collapse-chevron-wrap mx-4",children:(0,Dn.jsx)(Gn.g,{icon:r?Pn.w2A:Pn.Jt$,className:""})}),(0,Dn.jsx)(wf,{id:`exploration-${a.ID}`,type:"exploration",item:a})]}),(0,Dn.jsx)(ll.A,{in:r,children:(0,Dn.jsx)("div",{children:(0,Dn.jsxs)("div",{className:"exploration-body",children:[(0,Dn.jsx)("div",{className:"exploration-description",children:null!=a.GetOwnDescription()&&(0,Dn.jsx)(Dn.Fragment,{children:(0,pl.fE)(a,a.GetOwnDescription())})}),a.SelfDynamicProperty.OptionChoice.MyOptions.length>0&&(0,Dn.jsx)("ul",{className:"exploration-description-options",children:a.SelfDynamicProperty.OptionChoice.MyOptions.map(((e,t)=>(0,Dn.jsx)("div",{children:e.Selections.map(((t,a)=>{return(0,Dn.jsx)("div",{children:(0,Dn.jsxs)("li",{className:"exploration-description-option",children:[(0,Dn.jsx)("span",{className:"option-name",children:t.display_str}),(n=t.value,void 0!=n.Tags&&void 0!=n.Tags.validation_rules&&(0,Dn.jsx)("span",{className:"option-description",children:t.value.Tags.validation_rules})),(0,Dn.jsx)("span",{className:"option-description",children:(0,pl.fE)(t.value,t.value.Description)})]})},e.Selections.indexOf(t)+""+a);var n}))},a.SelfDynamicProperty.OptionChoice.MyOptions.indexOf(e)+""+t)))}),a.SelfDynamicProperty.Selections.length>0&&(0,Dn.jsx)(Dn.Fragment,{children:a.SelfDynamicProperty.Selections.map(((e,t)=>(0,Dn.jsx)("div",{children:(0,Dn.jsx)(jf,{leadtext:"Your Choice: ",property:a,hidedesc:!0,choice:e})},a.SelfDynamicProperty.Selections.indexOf(e)+""+t)))}),a.Consumables.length>0&&(0,Dn.jsx)("div",{className:"stash-items-wrap",children:(0,Dn.jsx)("div",{className:"stash-items-category",children:a.Consumables.map(((e,t)=>(0,Dn.jsx)(Sb,{property:e,doshow:!1,dochange:!1,updatestate:()=>{}},"parent-"+t)))})}),(0,Dn.jsx)("div",{children:a.SubProperties.length>0&&(0,Dn.jsx)(Dn.Fragment,{children:a.SubProperties.map(((e,t)=>(0,Dn.jsx)("div",{children:e.SelfDynamicProperty.Selections.length>0&&(0,Dn.jsx)(Dn.Fragment,{children:e.SelfDynamicProperty.Selections.map(((t,n)=>(0,Dn.jsx)("div",{children:void 0==t.Option.Tags.base_loc&&(0,Dn.jsx)(jf,{property:e,hidedesc:!0,choice:t,overrideplay:!0})},a.SelfDynamicProperty.Selections.indexOf(t)+""+n)))})},a.SubProperties.indexOf(e)+""+t)))})},"sub-props-"+d),l.length>0&&(0,Dn.jsx)("div",{className:"alert-exploration alert-exploration-info",children:(0,Dn.jsx)("span",{children:l.map(((e,t)=>(0,Dn.jsx)("span",{children:e+" "},"alert-"+t)))})},"alert-"+d)]})})})]})};var Ab=e=>{let{onChange:a,options:n,curSelection:o}=e;const i=function(){const e=[];for(let t=0;t<n.baseopt.Selections.length;t++){const a=n.baseopt.Selections[t],o=n.selection_valid.map((e=>e.id));e.push({option:{option_refID:n.baseopt.RefID,selection_ID:a.id},name:a.display_str,available:o.includes(a.id)})}return e}();const[r,s]=(0,t.useState)(o),[l,c]=(0,t.useState)(0),d=e=>{e.available&&(s(e.option),a&&a(e.option),c(l+1))};return(0,Dn.jsxs)("div",{className:"WbbExploration_OptionSelect_Radio",children:[(0,Dn.jsx)("div",{className:"fw-bold mb-2",children:"Choose Option"}),i.map((e=>(0,Dn.jsxs)("div",{className:"form-check",children:[(0,Dn.jsx)("input",{className:"form-check-input",type:"radio",name:"exploration-option",value:e.name,checked:(null===r||void 0===r?void 0:r.selection_ID)===e.option.selection_ID,disabled:!e.available,onClick:()=>d(e),readOnly:!0}),(0,Dn.jsx)("label",{className:"form-check-label ",onClick:()=>d(e),style:{cursor:e.available?"pointer":"not-allowed"},children:e.name})]},e.option.selection_ID)))]},l)},Nb=a(1072);var Eb=e=>{let{location:a,initiallyOpen:n,clear:o}=e;const{warband:i,reloadWbDisplay:r,updateKey:s}=rf();if(null==i)return(0,Dn.jsx)("div",{children:"Loading..."});const[l,c]=(0,t.useState)(null===n||void 0===n||n),[d,u]=(0,t.useState)(0),[h,m]=(0,t.useState)(0),[p,f]=(0,t.useState)([]),[g,y]=(0,t.useState)(_());function _(){var e,t;const n=null===(e=a.base_item.location)||void 0===e?void 0:e.GetID(),o=!(0,za.Kg)(a.base_item.location.Tags,"unforced"),i=null===(t=a.base_item)||void 0===t?void 0:t.options,r=(0,Nb.pV)(a.base_item),s=a.selected_options,l=(0,Nb.LW)(a.base_item);let c=!1;void 0!=i&&(c=!0);let d=!0;if(a.true_obj)for(let u=0;u<a.true_obj.Consumables.length;u++){const e=a.true_obj.Consumables[u];null==e.SelectData&&null==e.SelectItem&&void 0==e.Tags.relaxed_requirement&&(d=!1)}return!n||o&&c&&r.length>0&&s.length!=l.length||!d}function b(){i&&i.warband_data.Exploration.AddTempExplorationLocation(a,a.base_item.location,a.selected_options).then((()=>{v()}))}async function v(){if(a.true_obj){const e=new jn.J,t=await e.runEvent("getLocationMessage",a.true_obj,[],[],null);f(t)}y(_()),u(d+1)}(0,t.useEffect)((()=>{!async function(){0==(0,Nb.LW)(a.base_item).length&&void 0==a.true_obj?b():await v(),u(d+1)}()}),[h]);const{play_mode:w,edit_mode:x,view_mode:k,print_mode:C,setMode:j}=ff();function S(e){let t=!1;for(let n=0;n<a.selected_options.length;n++)a.selected_options[n].option_refID==e.option_refID&&(t=!0,a.selected_options[n].selection_ID=e.selection_ID);0==t&&a.selected_options.push(e),y(_()),m(h+1),b(),u(d+1)}function I(e){return void 0!=e.Tags&&void 0!=e.Tags.validation_rules}return(0,Dn.jsxs)("div",{className:"WbbEditViewExploration WbbEditViewExplorationUnstored",children:[(0,Dn.jsxs)("div",{className:"WbbEditViewExploration-title",onClick:()=>c(!l),children:[(0,Dn.jsxs)("div",{className:"exploration-name",children:[a.base_item.location.GetName(),(0,Dn.jsx)(Gn.g,{icon:Pn.JAe,className:"icon-inline-right-l icon-wraning"})]}),(0,Dn.jsx)("span",{className:"collapse-chevron-wrap mx-4",children:(0,Dn.jsx)(Gn.g,{icon:l?Pn.w2A:Pn.Jt$,className:""})}),(0,Dn.jsx)(wf,{id:`exploration-temp-${a.base_item.location.ID}`,type:"exploration_temp",item:a})]}),(0,Dn.jsx)(ll.A,{in:l,children:(0,Dn.jsx)("div",{children:(0,Dn.jsxs)("div",{className:"exploration-body",children:[(0,Dn.jsx)("div",{className:"exploration-description",children:null!=a.base_item.location.Description&&(0,Dn.jsx)(Dn.Fragment,{children:(0,pl.fE)(a.base_item.location,a.base_item.location.Description)})}),(0,Nb.LW)(a.base_item).length>0&&(0,Dn.jsx)("ul",{className:"exploration-description-options",children:(0,Nb.LW)(a.base_item).map(((e,t)=>(0,Dn.jsx)("div",{children:void 0!=e.baseopt.Tags.base_loc&&(0,Dn.jsx)(Dn.Fragment,{children:e.baseopt.Selections.map(((t,a)=>(0,Dn.jsxs)("li",{className:"exploration-description-option",children:[(0,Dn.jsx)("span",{className:"option-name",children:t.display_str}),I(t.value)&&(0,Dn.jsx)("span",{className:"option-description",children:t.value.Tags.validation_rules}),(0,Dn.jsx)("span",{className:"option-description",children:(0,pl.fE)(t.value,t.value.Description)})]},e.baseopt.Selections.indexOf(t)+""+a)))})},(0,Nb.LW)(a.base_item).indexOf(e)+""+t)))}),(0,Nb.LW)(a.base_item).length>0&&(0,Dn.jsx)(Dn.Fragment,{children:(0,Nb.LW)(a.base_item).map(((e,t)=>(0,Dn.jsx)(Ab,{options:e,curSelection:a.selected_options[t]?a.selected_options[t]:null,onChange:S},a.base_item.options.indexOf(e)+""+t)))}),void 0!=a.true_obj&&null!=a.true_obj&&(0,Dn.jsxs)("div",{children:[a.true_obj.SelfDynamicProperty.OptionChoice.MyOptions.length>0&&(0,Dn.jsx)("ul",{className:"exploration-description-options",children:a.true_obj.SelfDynamicProperty.OptionChoice.MyOptions.map(((e,t)=>(0,Dn.jsx)("div",{children:void 0==e.Tags.base_loc&&void 0==e.Tags.hide_info&&(0,Dn.jsx)(Dn.Fragment,{children:e.Selections.map(((t,a)=>(0,Dn.jsx)("div",{children:(0,Dn.jsxs)("li",{className:"exploration-description-option",children:[(0,Dn.jsx)("span",{className:"option-name",children:t.display_str}),I(t.value)&&(0,Dn.jsx)("span",{className:"option-description",children:t.value.Tags.validation_rules}),(0,Dn.jsx)("span",{className:"option-description",children:(0,pl.fE)(t.value,t.value.Description)})]})},e.Selections.indexOf(t)+""+a)))})},a.true_obj.SelfDynamicProperty.OptionChoice.MyOptions.indexOf(e)+""+t)))}),a.true_obj.Consumables.length>0&&(0,Dn.jsx)("div",{className:"exploration-consumable-list",children:a.true_obj.Consumables.map(((e,t)=>(0,Dn.jsx)(Sb,{property:e,doshow:!0,dochange:!0,updatestate:()=>{y(_())}},t)))})]}),p.length>0&&(0,Dn.jsx)("div",{className:"alert-exploration alert-exploration-info",children:(0,Dn.jsx)("span",{children:p.map(((e,t)=>(0,Dn.jsx)("span",{children:e+" "},t)))})}),(0,Dn.jsx)("button",{className:"btn btn-primary",onClick:()=>{i&&(void 0==a.true_obj?i.warband_data.Exploration.AddTempExplorationLocation(a,a.base_item.location,a.selected_options).then((()=>{i.warband_data.Exploration.AssignTempLocation(a).then((()=>{pn.o.getInstance().UserWarbandManager.UpdateItemInfo(i?i.id:-999).then((()=>{o(),r()}))}))})):i.warband_data.Exploration.AssignTempLocation(a).then((()=>{pn.o.getInstance().UserWarbandManager.UpdateItemInfo(i?i.id:-999).then((()=>{o(),r()}))})))},disabled:g,children:"Apply Exploration"})]})},d)})]})};var Tb=()=>{const{warband:e,updateKey:a,reloadWbDisplay:n}=rf(),{play_mode:o,edit_mode:i,view_mode:r,print_mode:s,setMode:l}=ff(),[c,d]=(0,t.useState)(0),[u,h]=(0,t.useState)([]),[m,p]=(0,t.useState)(e?e.warband_data.Exploration.CurLocation:[]),[f,g]=(0,t.useState)(!1);return(0,t.useEffect)((()=>{!async function(){if(e){const t=null===e||void 0===e?void 0:e.warband_data.GetLocations();h(t)}p(e?e.warband_data.Exploration.CurLocation:[]),d(c+1)}()}),[a]),(0,Dn.jsxs)("div",{children:[(u.length>0||i)&&(0,Dn.jsx)("h3",{className:"mb-3",children:"Exploration Locations"}),u.map(((e,t)=>(0,Dn.jsx)(Ib,{location:e},t))),m.map(((e,t)=>(0,Dn.jsx)(Eb,{location:e,clear:()=>p([])},t))),i&&(0,Dn.jsxs)("div",{className:"btn btn-add-element btn-block",onClick:()=>g(!0),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.QLR,className:"icon-inline-left-l"}),"Add Exploration Location"]}),i&&(0,Dn.jsx)(vb,{show:f,onClose:()=>g(!1),onSubmit:t=>{if(!e)return;e.warband_data.Exploration.CurLocation.push({base_item:t,selected_options:[]}),p(e.warband_data.Exploration.CurLocation);pn.o.getInstance().UserWarbandManager.UpdateItemInfo(e?e.id:-999).then((()=>{n()}))}})]},c)};var Db=e=>{let{Skill:t,ID:a,Sources:n}=e;return(0,Dn.jsxs)("div",{className:"WbbExplorationSkill","data-skill-id":a,children:[(0,Dn.jsxs)("div",{className:"WbbExplorationSkill-title",children:[(0,Dn.jsx)("span",{className:"WbbExplorationSkill-title-name",children:t.GetOwnName()}),(0,Dn.jsx)("span",{className:"WbbExplorationSkill-title-num",children:n.length})]}),(0,Dn.jsxs)("div",{className:"WbbExplorationSkill-content",children:[(0,Dn.jsxs)("div",{className:"WbbExplorationSkill-content-rules",children:[(0,Dn.jsx)("div",{children:(0,Dn.jsx)("strong",{children:"Rules"})}),(0,Dn.jsx)("div",{children:(0,pl.fE)(t,t.GetOwnDescription())})]}),(0,Dn.jsx)("hr",{}),(0,Dn.jsx)("div",{className:"WbbExplorationSkill-content-sources",children:n.map(((e,t)=>(0,Dn.jsx)("div",{className:"WbbExplorationSkill-content-source",children:e},t)))})]})]})};var Rb=()=>{const{warband:e,updateKey:a}=rf(),[n,o]=(0,t.useState)([]),[i,r]=(0,t.useState)(0);return(0,t.useEffect)((()=>{!async function(){const t=await(null===e||void 0===e?void 0:e.warband_data.GetExplorationSkillsInContext());void 0!=t&&(o(t),r(i+1))}()}),[a]),(0,Dn.jsx)("div",{className:"WbbExplorationSkills",children:n.map(((e,t)=>(0,Dn.jsx)(Db,{Skill:e.skill,ID:e.skill.ID,Sources:e.sources},t)))})};var Mb=e=>{let{onClose:t}=e;const{warband:a,updateKey:n}=rf();if(null==a)return(0,Dn.jsx)("div",{children:"Loading..."});const{play_mode:o,edit_mode:i,view_mode:r,print_mode:s,mode:l,setMode:c}=ff(),d=a.warband_data.GetCampaignCycleView();return(0,Dn.jsxs)("div",{className:"WbbDetailView WbbExplorationDetailView",children:[(0,Dn.jsxs)("div",{className:"title",children:[(0,Dn.jsx)("div",{className:"title-back",onClick:t,children:(0,Dn.jsx)(Gn.g,{icon:Pn.Wzs,className:""})}),(0,Dn.jsx)("div",{className:"title-text",children:"Exploration"})]}),(0,Dn.jsxs)("div",{className:"detail-view-content",children:[(0,Dn.jsxs)("div",{className:"WbbExplorationDetailView-summary",children:[(0,Dn.jsxs)("div",{children:[(0,Dn.jsx)("strong",{children:"Campaign round: "}),a.warband_data.GetCampaignCycleView()]}),(0,Dn.jsxs)("div",{children:[(0,Dn.jsx)("strong",{children:"Available exploration tables: "}),(e=>e<=2?"Common Exploration Locations":e<=5?"Common or Rare Exploration Locations":e<=9?"Rare Exploration Locations":"Rare or Legendary Exploration Locations")(d)]})]}),(0,Dn.jsxs)("div",{className:"WbbDetailViewCollapse-wrap",children:[(0,Dn.jsx)(cg,{title:"Exploration Skills",initiallyOpen:!1,children:(0,Dn.jsx)(Rb,{})}),(i||r)&&(0,Dn.jsx)(cg,{title:"Exploration Locations",initiallyOpen:!0,children:(0,Dn.jsx)(Tb,{})})]})]})]})};var Ob=()=>{var e;const{warband:a,updateKey:n,reloadWbDisplay:o}=rf(),i=(0,t.useRef)(null);if(!a)return null;const r=a.warband_data,s="undefined"!==typeof window?window.location.origin:"https://trench-companion.com",l=s+"/warband/detail/"+a.id,c=(0,t.useMemo)((()=>{var e;if(!r.GetFaction())return"";const t=function(e){if("string"!==typeof e)return"";const t=e.trim().replace(/^\/+|\/+$/g,"");if(!t)return"";const a=t.indexOf("_fv_");if(-1!==a){return`${t.slice(0,a)}/${t}`}return`/${t}/`}(null===(e=r.GetFaction())||void 0===e?void 0:e.ID);return`${s}/compendium/faction/${t}`}),[]);const d=r.GetFighters().map(((e,t)=>({"@type":"ListItem",position:t+1,item:{"@id":`${l}#${e.model.ID}`}}))),u=r.GetLocations().map(((e,t)=>({"@type":"ListItem",position:t+1,item:{"@id":`${l}#${e.ID}`}}))),h={"@context":"https://schema.org","@type":"WebPage","@id":l+"#webpage",url:l,inLanguage:"en",name:r.GetName(),mainEntity:{"@type":"Collection","@id":l,url:l,name:r.GetName(),identifier:"warband-"+a.id,mainEntityOfPage:{"@id":l+"#webpage"},about:{"@type":"Thing",name:r.GetFactionName(),url:c},...r.GetWarbandNotes()&&{description:r.GetWarbandNotes()},...r.GetLore()&&{text:r.GetLore()},additionalProperty:[{"@type":"PropertyValue",name:"Rating (Glory)",value:r.GetRatingDucats(),unitText:"Glory"},{"@type":"PropertyValue",name:"Rating (Ducats)",value:r.GetRatingGlory(),unitText:"Ducats"},{"@type":"PropertyValue",name:"Value (Ducats)",value:r.GetStashValueDucats(),unitText:"Ducats"},{"@type":"PropertyValue",name:"Value (Glory)",value:r.GetTotalValueDucats(),unitText:"Glory"},{"@type":"PropertyValue",name:"Victory Points",value:r.GetTotalValueGlory()},{"@type":"PropertyValue",name:"Failed Promotions",value:r.Context.FailedPromotions},{"@type":"PropertyValue",name:"Campaign Round",value:r.GetCampaignCycleView()},{"@type":"PropertyValue",name:"Campaign Notes",value:r.GetCampaignNotes()}],hasPart:[{"@type":"ItemList",name:"Members",itemListElement:d},{"@type":"ItemList",name:"Exploration Locations",itemListElement:u}]}},m=(p=h,JSON.stringify(p).replace(/</g,"\\u003c").replace(/>/g,"\\u003e").replace(/&/g,"\\u0026"));var p;(0,t.useEffect)((()=>{null===i.current&&(i.current=m)}),[m]);const f=null!==(e=i.current)&&void 0!==e?e:m;return(0,Dn.jsx)("script",{type:"application/ld+json",dangerouslySetInnerHTML:{__html:f}})};var qb=e=>{let{item:a,showWeaponAbilities:n=!0,showIcons:o=!0}=e;const[i,r]=(0,t.useState)([]),[s,l]=(0,t.useState)("");(0,t.useEffect)((()=>{let e=!0;return async function(){try{const t=await a.equipment.GetKeywords();if(!e)return;r(t)}catch(t){console.error("Failed to load equipment keywords",t),e&&r([])}}(),()=>{e=!1}}),[a]);const c=a.purchase.HeldObject.MyEquipment.SelfDynamicProperty.OptionChoice;return(0,Dn.jsxs)("div",{className:"WbbPrintViewBattlekit",children:[(0,Dn.jsxs)("div",{className:"WbbPrintViewBattlekit-main",children:[(0,Dn.jsxs)("div",{className:"WbbPrintViewBattlekit-left",children:[(0,Dn.jsxs)("div",{className:"WbbPrintViewBattlekit-name",children:[o&&(0,Dn.jsxs)(Dn.Fragment,{children:["melee"==a.equipment.MyEquipment.SelfDynamicProperty.OptionChoice.Category&&(0,Dn.jsx)(Gn.g,{icon:Pn.XWH,className:"me-1"}),"ranged"==a.equipment.MyEquipment.SelfDynamicProperty.OptionChoice.Category&&(0,Dn.jsx)(Gn.g,{icon:Pn.zTK,className:"me-1"}),"grenade"==a.equipment.MyEquipment.SelfDynamicProperty.OptionChoice.Category&&(0,Dn.jsx)(Gn.g,{icon:Pn.iyL,className:"me-1"}),"equipment"==a.equipment.MyEquipment.SelfDynamicProperty.OptionChoice.Category&&(0,Dn.jsx)(Gn.g,{icon:Pn.JV0,className:"me-1"}),"special"==a.equipment.MyEquipment.SelfDynamicProperty.OptionChoice.Category&&(0,Dn.jsx)(Gn.g,{icon:Pn.JV0,className:"me-1"}),"shield"==a.equipment.MyEquipment.SelfDynamicProperty.OptionChoice.Category&&(0,Dn.jsx)(Gn.g,{icon:Pn.V2x,className:"me-1"}),"armour"==a.equipment.MyEquipment.SelfDynamicProperty.OptionChoice.Category&&(0,Dn.jsx)(Gn.g,{icon:Pn.sjp,className:"me-1"})]}),a.equipment.GetTrueName()]}),a.equipment.GetRange()&&(0,Dn.jsxs)("div",{className:"WbbPrintViewBattlekit-range",children:["Range: ",s," ",a.equipment.GetRange()]})]}),(0,Dn.jsx)("div",{className:"WbbPrintViewBattlekit-keywords",children:i.length>0?(0,Dn.jsx)(If.A,{keywords:i}):(0,Dn.jsx)(Dn.Fragment,{children:"-"})})]}),n&&c.Abilities.length>0&&(0,Dn.jsx)("div",{className:"WbbPrintViewBattlekit-detail",children:c.Abilities.map(((e,a)=>(0,Dn.jsxs)("div",{className:"ability",children:[(0,Dn.jsx)("span",{className:"ability-name",children:e.Name+": "}),(0,Dn.jsx)("span",{className:"ability-description",children:e.Description.map(((e,a)=>(0,Dn.jsx)(t.Fragment,{children:(0,Dn.jsx)(Nf.A,{data:e,parent:c})},+a)))})]},a)))})]})};var Gb=e=>{let{ability:t,showModelAbilities:a=!0,showAbilitySelections:n=!1}=e;return a?(0,Dn.jsxs)("div",{className:"WbbPrintViewAbility",children:[(0,Dn.jsxs)("span",{className:"ability-name",children:["\u2727 ",t.Name+": "]}),(0,Dn.jsxs)("span",{className:"ability-description",children:[(0,pl.fE)(t,t.SelfDynamicProperty.OptionChoice.Description),t.SelfDynamicProperty.Selections.length>0&&n&&(0,Dn.jsx)(Dn.Fragment,{children:t.SelfDynamicProperty.Selections.map((e=>(0,Dn.jsx)(jf,{property:t,choice:e},t.SelfDynamicProperty.Selections.indexOf(e))))})]})]}):null};function Pb(e){return(e.equipment.MyEquipment.SelfDynamicProperty.OptionChoice.Category||"").toLowerCase()}const Fb={ranged:0,grenade:1,melee:2,equipment:3,shield:4,armour:5,special:6};var Lb=e=>{var a,n;let{fighter:o,showWeaponAbilities:i=!0,showModelAbilities:r=!0,showAbilitySelections:s=!0,showAdvInj:l=!0,showIcons:c=!0,showCompactAbilities:d=!1,showCompactAdvInj:u=!1,showCompactUp:h=!1,showModelCampaign:m=!0,showModelNotes:p=!1,showModelLore:f=!1}=e;const g=[2,4,7,10,14,18],[y,_]=(0,t.useState)([]),[b,v]=(0,t.useState)({}),{warband:w,updateKey:x}=rf(),[k,C]=(0,t.useState)({stats:{},canchange:!0,upgrades:{},abilities:[],statchoices:[],allmodelequip:[],xpLimit:0,scarLimit:3,keywordsList:[],modelslug:o.model.GetModelSlug(),keyvar:0}),j=(0,t.useMemo)((()=>k.allmodelequip&&0!==k.allmodelequip.length?[...k.allmodelequip].sort(((e,t)=>{var a,n;const o=Pb(e),i=Pb(t),r=null!==(a=Fb[o])&&void 0!==a?a:99,s=null!==(n=Fb[i])&&void 0!==n?n:99;if(r!==s)return r-s;const l=e.equipment.GetTrueName(),c=t.equipment.GetTrueName();return l.localeCompare(c)})):[]),[k.allmodelequip]);(0,t.useEffect)((()=>{!async function(){v(await o.model.GetStats()),_(await o.model.getContextuallyAvailableKeywords())}()}),[]),(0,t.useEffect)((()=>{null!==w&&void 0!==w&&w.warband_data.Models.includes(o.purchase)&&async function(){const e=await o.model.BuildNewProperties(),t=await o.model.GetWarbandUpgradeCollections(),a=await o.model.GetXPLimit(),n=await o.model.getContextuallyAvailableKeywords(),i=o.model.GetModelSlug(),r=await o.model.GetAllEquipForShow(),s=await o.model.GetStatOptions(),l=await o.model.CanChangeRank(),c=await o.model.GetStats(),d=await o.model.GetMaxScars();C((o=>({stats:c,canchange:l,upgrades:t,abilities:e,statchoices:s,allmodelequip:r,xpLimit:a,scarLimit:d,keywordsList:n,modelslug:i,keyvar:o.keyvar+1})))}()}),[x,o]);const[S,I]=(0,t.useState)([]),[A,N]=(0,t.useState)(""),E=t.useMemo((()=>null!==k&&void 0!==k&&k.upgrades?Object.keys(k.upgrades).map((e=>{const t=k.upgrades[e];if(!t||!Array.isArray(t.upgrades))return null;const a=t.upgrades.filter((e=>null!=e.purchase));return{key:e,limit:t.limit,upgrades:a}})).filter((e=>!!e&&e.upgrades.length>0&&(e.limit>0||"goetic"!==e.key))):[]),[k]);return(0,Dn.jsxs)("div",{className:"WbbPrintViewFighter",children:[(0,Dn.jsxs)("div",{className:"WbbPrintViewFighter-title",children:[(0,Dn.jsxs)("div",{className:"top-left",children:[(0,Dn.jsx)("div",{className:"model-name",children:o.model.CurModel.GetName()}),(0,Dn.jsx)("div",{className:"fighter-name",children:o.model.GetName()})]}),(0,Dn.jsxs)("div",{className:"top-right",children:[(0,Dn.jsx)(il.A,{type:"d",amount:o.purchase.GetTotalDucats()})," ",(0,Dn.jsx)(il.A,{type:"g",amount:o.purchase.GetTotalGlory()})]})]}),(0,Dn.jsxs)("div",{className:"WbbPrintViewFighter-stats-row",children:[(0,Dn.jsxs)("div",{className:"WbbPrintViewFighter-stats",children:[(0,Dn.jsxs)("div",{className:"stat-el",children:["Movement",(0,Dn.jsx)("div",{className:"stat-val",children:(0,fl.NJ)(b)})]}),(0,Dn.jsxs)("div",{className:"stat-el",children:["Melee",(0,Dn.jsx)("div",{className:"stat-val",children:(0,fl.A)(b)})]}),(0,Dn.jsxs)("div",{className:"stat-el",children:["Ranged",(0,Dn.jsx)("div",{className:"stat-val",children:(0,fl.Lp)(b)})]}),(0,Dn.jsxs)("div",{className:"stat-el",children:["Armour",(0,Dn.jsx)("div",{className:"stat-val",children:(0,fl.aR)(b)})]})]}),(0,Dn.jsxs)("div",{className:"WbbPrintViewFighter-keywords",children:["Keywords",(0,Dn.jsx)("div",{className:"WbbPrintViewFighter-keywords-el",children:y.map(((e,t)=>(0,Dn.jsxs)("span",{children:[e.Name,t<y.length-1&&", "]},`model_keyword_keyword_id_${e.ID}`)))})]})]}),(0,Dn.jsx)("div",{className:"WbbPrintViewFighter-battlekit",children:j.length>0&&(0,Dn.jsx)(Dn.Fragment,{children:j.map(((e,t)=>(0,Dn.jsx)(qb,{showWeaponAbilities:i,item:e,showIcons:c},t)))})}),E.length>0&&!h&&(0,Dn.jsx)("div",{className:"WbbPrintViewFighter-upgrades",children:E.map((e=>(0,Dn.jsx)("div",{className:"WbbPrintViewFighter-upgrade",children:e.upgrades.map(((e,t)=>{var a,n,o,i,r;return(0,Dn.jsxs)("div",{className:"upgrade",children:[(0,Dn.jsxs)("span",{className:"upgrade-name",children:["\u2739 ",e.upgrade.UpgradeObject.Name,": "]}),null!=(null===(a=e.purchase)||void 0===a?void 0:a.HeldObject)&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,pl.fE)(null===(n=e.purchase)||void 0===n?void 0:n.HeldObject,(null===(o=e.purchase)||void 0===o?void 0:o.HeldObject).SelfDynamicProperty.OptionChoice.Description),(null===(i=e.purchase)||void 0===i?void 0:i.HeldObject).SelfDynamicProperty.Selections.length>0&&(0,Dn.jsx)(Dn.Fragment,{children:(null===(r=e.purchase)||void 0===r?void 0:r.HeldObject).SelfDynamicProperty.Selections.map((t=>{var a,n;return(0,Dn.jsx)(jf,{property:null===(a=e.purchase)||void 0===a?void 0:a.HeldObject,choice:t},(null===(n=e.purchase)||void 0===n?void 0:n.HeldObject).SelfDynamicProperty.Selections.indexOf(t))}))})]})]},t)}))},e.key)))}),E.length>0&&h&&(0,Dn.jsx)("div",{className:"WbbPrintViewFighter-upgrades",children:(0,Dn.jsxs)("span",{className:"compact-element",children:["\u2739 ",E.flatMap((e=>e.upgrades.map((e=>e.upgrade.UpgradeObject.Name)))).join(", ")]})}),r&&!d&&k.abilities.length>0&&(0,Dn.jsx)("div",{className:"WbbPrintViewFighter-abilities",children:k.abilities.map(((e,t)=>(0,Dn.jsx)(Gb,{ability:e,showModelAbilities:r,showAbilitySelections:s},t)))}),r&&d&&k.abilities.length>0&&(0,Dn.jsxs)("div",{className:"WbbPrintViewFighter-abilities",children:[(0,Dn.jsx)("span",{className:"compact-element",children:"\u2727"}),(0,Dn.jsxs)("span",{className:"compact-element",children:[" ",k.abilities.map((e=>e.Name)).join(", ")]})]}),o.model.Skills.length>0&&l&&!u&&(0,Dn.jsx)("div",{className:"WbbPrintViewFighter-advancements",children:null===(a=o.model.Skills)||void 0===a?void 0:a.map(((e,t)=>{const a=e.SelfDynamicProperty.OptionChoice;return(0,Dn.jsxs)("div",{className:"WbbPrintViewFighter-injury",children:[(0,Dn.jsx)("span",{className:"advancement-name",children:"\u25b3 "+e.Name+": "}),(0,pl.fE)(a,a.Description)]},t)}))}),o.model.Skills.length>0&&l&&u&&(0,Dn.jsx)("div",{className:"WbbPrintViewFighter-advancements",children:(0,Dn.jsxs)("span",{className:"compact-element",children:["\u25b3 ",o.model.Skills.map((e=>e.Name)).join(", ")]})}),o.model.Injuries.length>0&&l&&!u&&(0,Dn.jsx)("div",{className:"WbbPrintViewFighter-injuries",children:null===(n=o.model.Injuries)||void 0===n?void 0:n.map(((e,t)=>{const a=e.SelfDynamicProperty.OptionChoice;return(0,Dn.jsxs)("div",{className:"WbbPrintViewFighter-injury",children:[(0,Dn.jsx)("span",{className:"injury-name",children:"\u25bd "+e.Name+": "}),(0,pl.fE)(a,a.Description)]},t)}))}),o.model.Injuries.length>0&&l&&u&&(0,Dn.jsx)("div",{className:"WbbPrintViewFighter-advancements",children:(0,Dn.jsxs)("span",{className:"compact-element",children:["\u25bd ",o.model.Injuries.map((e=>e.Name)).join(", ")]})}),f&&""!=o.model.GetLore()&&(0,Dn.jsxs)("div",{className:"model-lore",children:[(0,Dn.jsx)("span",{className:"text-label",children:"Lore: "}),o.model.GetLore()]}),p&&""!=o.model.GetWarbandNotes()&&(0,Dn.jsxs)("div",{className:"model-lore",children:[(0,Dn.jsx)("span",{className:"text-label",children:"Notes: "}),o.model.GetWarbandNotes()]}),(l||r)&&o.model.Injuries.length>0&&o.model.Skills.length>0&&k.abilities.length>0&&(!m||!o.model.IsElite())&&(0,Dn.jsx)("div",{className:"mt-2"}),m&&o.model.IsElite()&&(0,Dn.jsxs)("div",{className:"row row-campaign",children:[(0,Dn.jsx)("div",{className:"col-8",children:(0,Dn.jsxs)("div",{className:"xp-wrap",children:[(0,Dn.jsx)("div",{className:"xp-headline fw-bold",children:"Experience"}),(0,Dn.jsx)("div",{className:"xp-boxes",children:Array.from({length:18},((e,t)=>{const a=t+1,n=g.includes(a),i=a<=o.model.Experience;return(0,Dn.jsx)("div",{className:"xp-box"+(n?" xp-box-bold":""),children:i&&(0,Dn.jsx)(Gn.g,{icon:Pn.e68})},a)}))})]})}),(0,Dn.jsx)("div",{className:"col-4 col-scars",children:(0,Dn.jsxs)("span",{className:"battle-scars",children:[(0,Dn.jsx)("span",{className:"inline-label fw-bold",children:"Battle Scars"}),(0,Dn.jsx)("div",{className:"battle-scar-boxes",children:Array.from({length:k.scarLimit},((e,t)=>{const a=t+1,n=a<=o.model.GetBattleScars(),i=a===k.scarLimit;return(0,Dn.jsxs)("div",{className:"battle-scar-box",children:[i&&(0,Dn.jsx)(Gn.g,{icon:Pn.B0L,className:"final-icon"}),n&&(0,Dn.jsx)(Gn.g,{icon:Pn.GRI})]},a)}))})]})})]})]})};var Wb=()=>{const{warband:e,updateKey:a}=rf();if(!e)return(0,Dn.jsx)("div",{children:"Loading Warband..."});e.warband_data.GetFighters();const[n,o]=(0,t.useState)(null),[i,r]=(0,t.useState)(0),[s,l]=(0,t.useState)([]);return(0,t.useEffect)((()=>{!async function(){const t=await(null===e||void 0===e?void 0:e.warband_data.GetFactionBase());if(void 0!=t&&o(t),e){const t=null===e||void 0===e?void 0:e.warband_data.GetLocations();l(t)}r(i+1)}()}),[a]),(0,Dn.jsxs)("div",{className:"WbbPrintViewSimpleOverview",children:[(0,Dn.jsxs)("div",{className:"page-fill",children:[(0,Dn.jsx)("div",{className:"logo-wrap",children:(0,Dn.jsx)("img",{src:ep,alt:"Trench Companion Logo",className:"logo"})}),(0,Dn.jsx)("div",{className:"headline",children:"Warband Roster Sheet"}),(0,Dn.jsxs)("div",{className:"warband-name warband-box",children:[(0,Dn.jsx)("div",{className:"warband-label",children:"Warband Name"}),(0,Dn.jsx)("div",{className:"warband-value",children:e.warband_data.GetWarbandName()})]}),(0,Dn.jsxs)("div",{className:"row",children:[(0,Dn.jsx)("div",{className:"col-6",children:(0,Dn.jsxs)("div",{className:"warband-faction warband-box",children:[(0,Dn.jsx)("div",{className:"warband-label",children:"Faction"}),(0,Dn.jsxs)("div",{className:"warband-value",children:[null!=n&&(0,Dn.jsx)(Dn.Fragment,{children:n.GetTrueName()}),null==n&&(0,Dn.jsx)(Dn.Fragment,{children:e.warband_data.GetFactionName()})]})]})}),(0,Dn.jsx)("div",{className:"col-6",children:(0,Dn.jsxs)("div",{className:"warband-faction-variant warband-box",children:[(0,Dn.jsx)("div",{className:"warband-label",children:"Variant"}),(0,Dn.jsxs)("div",{className:"warband-value",children:[null!=n&&(0,Dn.jsx)(Dn.Fragment,{children:n.GetTrueName()!=e.warband_data.GetFactionName()?e.warband_data.GetFactionName():"Base"}),null==n&&(0,Dn.jsx)(Dn.Fragment,{children:"Base"}),e.warband_data.Faction.MyFaction.SelfDynamicProperty.Selections.map((t=>(0,Dn.jsxs)("div",{children:[t.Option.Name,null!=t.SelectedChoice&&(0,Dn.jsx)(Dn.Fragment,{children:" - "+t.SelectedChoice.display_str})]},e.warband_data.Faction.MyFaction.SelfDynamicProperty.Selections.indexOf(t))))]})]})})]}),(0,Dn.jsxs)("div",{className:"row",children:[(0,Dn.jsx)("div",{className:"col-3",children:(0,Dn.jsxs)("div",{className:"warband-ducats warband-box",children:[(0,Dn.jsx)("div",{className:"warband-label",children:"Pay Chest"}),(0,Dn.jsx)("div",{className:"warband-value",children:e.warband_data.GetStashedDucats()})]})}),(0,Dn.jsx)("div",{className:"col-3",children:(0,Dn.jsxs)("div",{className:"warband-glory warband-box",children:[(0,Dn.jsx)("div",{className:"warband-label",children:"Glory Points"}),(0,Dn.jsx)("div",{className:"warband-value",children:e.warband_data.GetStashedGlory()})]})}),(0,Dn.jsx)("div",{className:"col-3",children:(0,Dn.jsxs)("div",{className:"warband-campaign warband-box",children:[(0,Dn.jsx)("div",{className:"warband-label",children:"Victory Points"}),(0,Dn.jsx)("div",{className:"warband-value",children:e.warband_data.GetVictoryPoints()})]})}),(0,Dn.jsx)("div",{className:"col-3",children:(0,Dn.jsxs)("div",{className:"warband-rating warband-box",children:[(0,Dn.jsx)("div",{className:"warband-label",children:"Warband Rating"}),(0,Dn.jsxs)("div",{className:"warband-value",children:[e.warband_data.GetRatingDucats()," Ducats"," | ",e.warband_data.GetRatingGlory()," Glory"]})]})})]}),(0,Dn.jsxs)("div",{className:"row stretch-to-bottom",children:[(0,Dn.jsx)("div",{className:"col-6",children:(0,Dn.jsxs)("div",{className:"warband-notes warband-box ",children:[(0,Dn.jsx)("div",{className:"warband-label",children:"Notes"}),(0,Dn.jsx)("div",{className:"warband-value",children:e.warband_data.GetWarbandNotes()})]})}),(0,Dn.jsx)("div",{className:"col-6",children:(0,Dn.jsxs)("div",{className:"warband-stash warband-box",children:[(0,Dn.jsx)("div",{className:"warband-label",children:"Stash"}),(0,Dn.jsx)("div",{className:"warband-value",children:null===e||void 0===e?void 0:e.warband_data.Equipment.map(((a,n)=>(0,Dn.jsxs)(t.Fragment,{children:[a.GetItemName(),n<(null===e||void 0===e?void 0:e.warband_data.Equipment.length)-1&&(0,Dn.jsx)(Dn.Fragment,{children:", "})]},n)))})]})})]})]}),(0,Dn.jsx)("div",{className:"page-fill",children:(0,Dn.jsxs)("div",{className:"row stretch-to-bottom",children:[(0,Dn.jsx)("div",{className:"col-6",children:(0,Dn.jsxs)("div",{className:"warband-exploration warband-box ",children:[(0,Dn.jsx)("div",{className:"warband-label",children:"Exploration Locations"}),(0,Dn.jsx)("div",{className:"warband-value",children:s.length>0&&(0,Dn.jsx)(Dn.Fragment,{children:s.map(((e,t)=>(0,Dn.jsx)("div",{children:e.GetOwnName()},t)))})})]})}),(0,Dn.jsx)("div",{className:"col-6",children:(0,Dn.jsxs)("div",{className:"warband-exploration warband-box ",children:[(0,Dn.jsx)("div",{className:"warband-label",children:"Modifiers"}),(0,Dn.jsxs)("div",{className:"warband-value",children:[e.warband_data.Modifiers.map((t=>(0,Dn.jsxs)("div",{children:[t.SelfDynamicProperty.OptionChoice.GetTrueName(),t.SelfDynamicProperty.Selections.map((e=>(0,Dn.jsx)("div",{children:null!=e.SelectedChoice&&(0,Dn.jsx)(Dn.Fragment,{children:"- "+e.SelectedChoice.display_str})},t.SelfDynamicProperty.Selections.indexOf(e))))]},e.warband_data.Modifiers.indexOf(t)))),e.warband_data.Fireteams.map((t=>(0,Dn.jsxs)("div",{children:[t.SelfDynamicProperty.OptionChoice.GetTrueName(),t.SelfDynamicProperty.Selections.map((e=>(0,Dn.jsx)("div",{children:null!=e.SelectedChoice&&(0,Dn.jsx)(Dn.Fragment,{children:"- "+e.SelectedChoice.display_str})},t.SelfDynamicProperty.Selections.indexOf(e))))]},e.warband_data.Fireteams.indexOf(t))))]})]})})]})})]},i)},Bb=a(4062);var Hb=e=>{var a,n,o;let{fighter:i}=e;const r=[2,4,7,10,14,18],[s,l]=(0,t.useState)([]),[c,d]=(0,t.useState)({}),{warband:u,updateKey:h}=rf(),[m,p]=(0,t.useState)({stats:{},canchange:!0,upgrades:{},abilities:[],statchoices:[],allmodelequip:[],xpLimit:0,scarLimit:3,keywordsList:[],modelslug:i.model.GetModelSlug(),keyvar:0});return(0,t.useEffect)((()=>{!async function(){d(await i.model.GetStats()),l(await i.model.getContextuallyAvailableKeywords())}()}),[]),(0,t.useEffect)((()=>{null!==u&&void 0!==u&&u.warband_data.Models.includes(i.purchase)&&async function(){const e=await i.model.BuildNewProperties(),t=await i.model.GetWarbandUpgradeCollections(),a=await i.model.GetXPLimit(),n=await i.model.getContextuallyAvailableKeywords(),o=i.model.GetModelSlug(),r=await i.model.GetAllEquipForShow(),s=await i.model.GetStatOptions(),l=await i.model.CanChangeRank(),c=await i.model.GetStats(),d=await i.model.GetMaxScars();p((i=>({stats:c,canchange:l,upgrades:t,abilities:e,statchoices:s,allmodelequip:r,xpLimit:a,scarLimit:d,keywordsList:n,modelslug:o,keyvar:i.keyvar+1})))}()}),[h,i]),(0,Dn.jsxs)("div",{className:"WbbPrintViewSimpleFighter",children:[(0,Dn.jsx)("div",{className:"names-wrap",children:(0,Dn.jsxs)("div",{className:"row",children:[(0,Dn.jsxs)("div",{className:"col-4",children:[(0,Dn.jsx)("span",{className:"inline-label",children:"Name:"}),(0,Dn.jsx)("span",{className:"inline-value",children:i.model.GetName()})]}),(0,Dn.jsxs)("div",{className:"col-4",children:[(0,Dn.jsx)("span",{className:"inline-label",children:"Type:"}),(0,Dn.jsx)("span",{className:"inline-value",children:i.model.CurModel.GetName()})]}),(0,Dn.jsxs)("div",{className:"col-4",children:[(0,Dn.jsx)("span",{className:"inline-label",children:"Keywords:"}),(0,Dn.jsx)("span",{className:"inline-value",children:s.map(((e,t)=>(0,Dn.jsxs)("span",{children:[(0,Dn.jsx)(Bb.A,{titlename:e.Name,d_name:e.Name,d_type:"",d_method:()=>(0,Dn.jsx)(dc.A,{data:e})}),t<s.length-1&&", "]},`model_keyword_keyword_id_${e.ID}`)))})]})]})}),(0,Dn.jsxs)("div",{className:"stats-row",children:[(0,Dn.jsx)("div",{className:"stats-wrap",children:(0,Dn.jsx)("table",{children:(0,Dn.jsxs)("tbody",{children:[(0,Dn.jsxs)("tr",{className:"table-head-row",children:[(0,Dn.jsx)("td",{children:"Movement"}),(0,Dn.jsx)("td",{children:"Melee"}),(0,Dn.jsx)("td",{children:"Ranged"}),(0,Dn.jsx)("td",{children:"Armour"}),(0,Dn.jsx)("td",{children:"Value"})]}),(0,Dn.jsxs)("tr",{className:"table-stats-row",children:[(0,Dn.jsx)("td",{children:(0,fl.NJ)(c)}),(0,Dn.jsx)("td",{children:(0,fl.A)(c)}),(0,Dn.jsx)("td",{children:(0,fl.Lp)(c)}),(0,Dn.jsx)("td",{children:(0,fl.aR)(c)}),(0,Dn.jsxs)("td",{children:[i.purchase.GetTotalDucats()," Ducats"," | ",i.purchase.GetTotalGlory()," Glory Points"]})]})]})})}),i.model.IsElite()&&(0,Dn.jsxs)("div",{className:"xp-wrap",children:[(0,Dn.jsx)("div",{className:"xp-headline",children:"Experience"}),(0,Dn.jsx)("div",{className:"xp-boxes",children:Array.from({length:18},((e,t)=>{const a=t+1,n=r.includes(a),o=a<=i.model.Experience;return(0,Dn.jsx)("div",{className:"xp-box"+(n?" xp-box-bold":""),children:o&&(0,Dn.jsx)(Gn.g,{icon:Pn.e68})},a)}))})]})]}),(0,Dn.jsxs)("div",{className:"text-rows-wrap",children:[(0,Dn.jsxs)("div",{className:"text-row abilities",children:[(0,Dn.jsx)("span",{className:"inline-label",children:"Abilities:"}),(0,Dn.jsx)("span",{className:"inline-value",children:m.abilities.length>0&&(0,Dn.jsx)(Dn.Fragment,{children:m.abilities.map(((e,t)=>(0,Dn.jsx)("span",{children:e.Name},t))).reduce(((e,t)=>0===e.length?[t]:[...e,", ",t]),[])})})]}),(0,Dn.jsxs)("div",{className:"text-row equipment",children:[(0,Dn.jsx)("span",{className:"inline-label",children:"Equipment:"}),(0,Dn.jsx)("span",{className:"inline-value",children:i.model.GetEquipment().length>0&&(0,Dn.jsx)(Dn.Fragment,{children:null===(a=i.model.GetEquipment())||void 0===a?void 0:a.map(((e,t)=>{var a;return(0,Dn.jsxs)("span",{children:[e.equipment.Name,t<((null===(a=i.model.GetEquipment())||void 0===a?void 0:a.length)||0)-1&&", "]},t)}))})})]}),(0,Dn.jsxs)("div",{className:"text-row advancements",children:[(0,Dn.jsx)("span",{className:"inline-label",children:"Advancements:"}),(0,Dn.jsx)("span",{className:"inline-value",children:i.model.Skills.length>0&&(0,Dn.jsx)(Dn.Fragment,{children:null===(n=i.model.Skills)||void 0===n?void 0:n.map(((e,t)=>{var a;return(0,Dn.jsxs)("span",{children:[e.Name,t<((null===(a=i.model.Skills)||void 0===a?void 0:a.length)||0)-1&&", "]},t)}))})})]}),(0,Dn.jsxs)("div",{className:"text-row injuries",children:[(0,Dn.jsx)("span",{className:"inline-label",children:"Injuries:"}),(0,Dn.jsxs)("span",{className:"inline-value",children:[i.model.Injuries.length>0&&(0,Dn.jsx)(Dn.Fragment,{children:null===(o=i.model.Injuries)||void 0===o?void 0:o.map(((e,t)=>{var a;return(0,Dn.jsxs)("span",{children:[e.Name,t<((null===(a=i.model.Injuries)||void 0===a?void 0:a.length)||0)-1&&", "]},t)}))}),i.model.IsElite()&&(0,Dn.jsxs)("span",{className:"battle-scars",children:[(0,Dn.jsx)("span",{className:"inline-label",children:"Battle Scars"}),(0,Dn.jsx)("div",{className:"battle-scar-boxes",children:Array.from({length:3},((e,t)=>{const a=t+1,n=a<=i.model.GetBattleScars(),o=3===a;return(0,Dn.jsxs)("div",{className:"battle-scar-box",children:[o&&(0,Dn.jsx)(Gn.g,{icon:Pn.B0L,className:"final-icon"}),n&&(0,Dn.jsx)(Gn.g,{icon:Pn.GRI})]},a)}))})]})]})]})]})]})};var Ub,Kb=()=>{const{warband:e}=rf(),{play_mode:t,edit_mode:a,view_mode:n,print_mode:o,mode:i,setMode:r}=ff();if(!e||!o)return null;e.warband_data.GetFighters();return(0,Dn.jsxs)("div",{className:"WbbPrintViewSimple",children:[(0,Dn.jsx)("div",{className:"print-view-page-overview-wrap pbi-avoid",children:(0,Dn.jsx)(Wb,{})}),e.warband_data.HasElites()&&(0,Dn.jsxs)("div",{className:"print-view-page-elites-wrap pbi-avoid",children:[(0,Dn.jsx)("h2",{className:"page-headline",children:"Elites"}),e.warband_data.GetFighters().map(((e,t)=>(0,Dn.jsx)(Dn.Fragment,{children:e.model.IsElite()&&(0,Dn.jsx)(Hb,{fighter:e},"print-elites"+t)})))]}),e.warband_data.HasTroops()&&(0,Dn.jsxs)("div",{className:"print-view-troops-wrap pbi-avoid",children:[(0,Dn.jsx)("h2",{className:"page-headline",children:"Troops"}),e.warband_data.GetFighters().map(((e,t)=>(0,Dn.jsx)(Dn.Fragment,{children:e.model.IsTroop()&&(0,Dn.jsx)(Hb,{fighter:e},"print-troop"+t)})))]}),e.warband_data.HasMercenaries()&&(0,Dn.jsxs)("div",{className:"print-view-mercenaries-wrap pbi-avoid",children:[(0,Dn.jsx)("h2",{className:"page-headline",children:"Mercenaries"}),e.warband_data.GetFighters().map(((e,t)=>(0,Dn.jsx)(Dn.Fragment,{children:e.model.IsMercenary()&&(0,Dn.jsx)(Hb,{fighter:e},"print-mercenary"+t)})))]})]})},zb=Object.defineProperty,Vb=Object.getOwnPropertySymbols,Yb=Object.prototype.hasOwnProperty,Jb=Object.prototype.propertyIsEnumerable,$b=(e,t,a)=>t in e?zb(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a,Zb=(e,t)=>{for(var a in t||(t={}))Yb.call(t,a)&&$b(e,a,t[a]);if(Vb)for(var a of Vb(t))Jb.call(t,a)&&$b(e,a,t[a]);return e},Qb=(e,t)=>{var a={};for(var n in e)Yb.call(e,n)&&t.indexOf(n)<0&&(a[n]=e[n]);if(null!=e&&Vb)for(var n of Vb(e))t.indexOf(n)<0&&Jb.call(e,n)&&(a[n]=e[n]);return a};(e=>{const t=class t{constructor(e,a,n,i){if(this.version=e,this.errorCorrectionLevel=a,this.modules=[],this.isFunction=[],e<t.MIN_VERSION||e>t.MAX_VERSION)throw new RangeError("Version value out of range");if(i<-1||i>7)throw new RangeError("Mask value out of range");this.size=4*e+17;let r=[];for(let t=0;t<this.size;t++)r.push(!1);for(let t=0;t<this.size;t++)this.modules.push(r.slice()),this.isFunction.push(r.slice());this.drawFunctionPatterns();const s=this.addEccAndInterleave(n);if(this.drawCodewords(s),-1==i){let e=1e9;for(let t=0;t<8;t++){this.applyMask(t),this.drawFormatBits(t);const a=this.getPenaltyScore();a<e&&(i=t,e=a),this.applyMask(t)}}o(0<=i&&i<=7),this.mask=i,this.applyMask(i),this.drawFormatBits(i),this.isFunction=[]}static encodeText(a,n){const o=e.QrSegment.makeSegments(a);return t.encodeSegments(o,n)}static encodeBinary(a,n){const o=e.QrSegment.makeBytes(a);return t.encodeSegments([o],n)}static encodeSegments(e,n){let i,s,l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,c=arguments.length>3&&void 0!==arguments[3]?arguments[3]:40,d=arguments.length>4&&void 0!==arguments[4]?arguments[4]:-1,u=!(arguments.length>5&&void 0!==arguments[5])||arguments[5];if(!(t.MIN_VERSION<=l&&l<=c&&c<=t.MAX_VERSION)||d<-1||d>7)throw new RangeError("Invalid value");for(i=l;;i++){const a=8*t.getNumDataCodewords(i,n),o=r.getTotalBits(e,i);if(o<=a){s=o;break}if(i>=c)throw new RangeError("Data too long")}for(const a of[t.Ecc.MEDIUM,t.Ecc.QUARTILE,t.Ecc.HIGH])u&&s<=8*t.getNumDataCodewords(i,a)&&(n=a);let h=[];for(const t of e){a(t.mode.modeBits,4,h),a(t.numChars,t.mode.numCharCountBits(i),h);for(const e of t.getData())h.push(e)}o(h.length==s);const m=8*t.getNumDataCodewords(i,n);o(h.length<=m),a(0,Math.min(4,m-h.length),h),a(0,(8-h.length%8)%8,h),o(h.length%8==0);for(let t=236;h.length<m;t^=253)a(t,8,h);let p=[];for(;8*p.length<h.length;)p.push(0);return h.forEach(((e,t)=>p[t>>>3]|=e<<7-(7&t))),new t(i,n,p,d)}getModule(e,t){return 0<=e&&e<this.size&&0<=t&&t<this.size&&this.modules[t][e]}getModules(){return this.modules}drawFunctionPatterns(){for(let a=0;a<this.size;a++)this.setFunctionModule(6,a,a%2==0),this.setFunctionModule(a,6,a%2==0);this.drawFinderPattern(3,3),this.drawFinderPattern(this.size-4,3),this.drawFinderPattern(3,this.size-4);const e=this.getAlignmentPatternPositions(),t=e.length;for(let a=0;a<t;a++)for(let n=0;n<t;n++)0==a&&0==n||0==a&&n==t-1||a==t-1&&0==n||this.drawAlignmentPattern(e[a],e[n]);this.drawFormatBits(0),this.drawVersion()}drawFormatBits(e){const t=this.errorCorrectionLevel.formatBits<<3|e;let a=t;for(let n=0;n<10;n++)a=a<<1^1335*(a>>>9);const i=21522^(t<<10|a);o(i>>>15==0);for(let o=0;o<=5;o++)this.setFunctionModule(8,o,n(i,o));this.setFunctionModule(8,7,n(i,6)),this.setFunctionModule(8,8,n(i,7)),this.setFunctionModule(7,8,n(i,8));for(let o=9;o<15;o++)this.setFunctionModule(14-o,8,n(i,o));for(let o=0;o<8;o++)this.setFunctionModule(this.size-1-o,8,n(i,o));for(let o=8;o<15;o++)this.setFunctionModule(8,this.size-15+o,n(i,o));this.setFunctionModule(8,this.size-8,!0)}drawVersion(){if(this.version<7)return;let e=this.version;for(let a=0;a<12;a++)e=e<<1^7973*(e>>>11);const t=this.version<<12|e;o(t>>>18==0);for(let a=0;a<18;a++){const e=n(t,a),o=this.size-11+a%3,i=Math.floor(a/3);this.setFunctionModule(o,i,e),this.setFunctionModule(i,o,e)}}drawFinderPattern(e,t){for(let a=-4;a<=4;a++)for(let n=-4;n<=4;n++){const o=Math.max(Math.abs(n),Math.abs(a)),i=e+n,r=t+a;0<=i&&i<this.size&&0<=r&&r<this.size&&this.setFunctionModule(i,r,2!=o&&4!=o)}}drawAlignmentPattern(e,t){for(let a=-2;a<=2;a++)for(let n=-2;n<=2;n++)this.setFunctionModule(e+n,t+a,1!=Math.max(Math.abs(n),Math.abs(a)))}setFunctionModule(e,t,a){this.modules[t][e]=a,this.isFunction[t][e]=!0}addEccAndInterleave(e){const a=this.version,n=this.errorCorrectionLevel;if(e.length!=t.getNumDataCodewords(a,n))throw new RangeError("Invalid argument");const i=t.NUM_ERROR_CORRECTION_BLOCKS[n.ordinal][a],r=t.ECC_CODEWORDS_PER_BLOCK[n.ordinal][a],s=Math.floor(t.getNumRawDataModules(a)/8),l=i-s%i,c=Math.floor(s/i);let d=[];const u=t.reedSolomonComputeDivisor(r);for(let o=0,m=0;o<i;o++){let a=e.slice(m,m+c-r+(o<l?0:1));m+=a.length;const n=t.reedSolomonComputeRemainder(a,u);o<l&&a.push(0),d.push(a.concat(n))}let h=[];for(let t=0;t<d[0].length;t++)d.forEach(((e,a)=>{(t!=c-r||a>=l)&&h.push(e[t])}));return o(h.length==s),h}drawCodewords(e){if(e.length!=Math.floor(t.getNumRawDataModules(this.version)/8))throw new RangeError("Invalid argument");let a=0;for(let t=this.size-1;t>=1;t-=2){6==t&&(t=5);for(let o=0;o<this.size;o++)for(let i=0;i<2;i++){const r=t-i,s=0==(t+1&2)?this.size-1-o:o;!this.isFunction[s][r]&&a<8*e.length&&(this.modules[s][r]=n(e[a>>>3],7-(7&a)),a++)}}o(a==8*e.length)}applyMask(e){if(e<0||e>7)throw new RangeError("Mask value out of range");for(let t=0;t<this.size;t++)for(let a=0;a<this.size;a++){let n;switch(e){case 0:n=(a+t)%2==0;break;case 1:n=t%2==0;break;case 2:n=a%3==0;break;case 3:n=(a+t)%3==0;break;case 4:n=(Math.floor(a/3)+Math.floor(t/2))%2==0;break;case 5:n=a*t%2+a*t%3==0;break;case 6:n=(a*t%2+a*t%3)%2==0;break;case 7:n=((a+t)%2+a*t%3)%2==0;break;default:throw new Error("Unreachable")}!this.isFunction[t][a]&&n&&(this.modules[t][a]=!this.modules[t][a])}}getPenaltyScore(){let e=0;for(let o=0;o<this.size;o++){let a=!1,n=0,i=[0,0,0,0,0,0,0];for(let r=0;r<this.size;r++)this.modules[o][r]==a?(n++,5==n?e+=t.PENALTY_N1:n>5&&e++):(this.finderPenaltyAddHistory(n,i),a||(e+=this.finderPenaltyCountPatterns(i)*t.PENALTY_N3),a=this.modules[o][r],n=1);e+=this.finderPenaltyTerminateAndCount(a,n,i)*t.PENALTY_N3}for(let o=0;o<this.size;o++){let a=!1,n=0,i=[0,0,0,0,0,0,0];for(let r=0;r<this.size;r++)this.modules[r][o]==a?(n++,5==n?e+=t.PENALTY_N1:n>5&&e++):(this.finderPenaltyAddHistory(n,i),a||(e+=this.finderPenaltyCountPatterns(i)*t.PENALTY_N3),a=this.modules[r][o],n=1);e+=this.finderPenaltyTerminateAndCount(a,n,i)*t.PENALTY_N3}for(let o=0;o<this.size-1;o++)for(let a=0;a<this.size-1;a++){const n=this.modules[o][a];n==this.modules[o][a+1]&&n==this.modules[o+1][a]&&n==this.modules[o+1][a+1]&&(e+=t.PENALTY_N2)}let a=0;for(const t of this.modules)a=t.reduce(((e,t)=>e+(t?1:0)),a);const n=this.size*this.size,i=Math.ceil(Math.abs(20*a-10*n)/n)-1;return o(0<=i&&i<=9),e+=i*t.PENALTY_N4,o(0<=e&&e<=2568888),e}getAlignmentPatternPositions(){if(1==this.version)return[];{const e=Math.floor(this.version/7)+2,t=32==this.version?26:2*Math.ceil((4*this.version+4)/(2*e-2));let a=[6];for(let n=this.size-7;a.length<e;n-=t)a.splice(1,0,n);return a}}static getNumRawDataModules(e){if(e<t.MIN_VERSION||e>t.MAX_VERSION)throw new RangeError("Version number out of range");let a=(16*e+128)*e+64;if(e>=2){const t=Math.floor(e/7)+2;a-=(25*t-10)*t-55,e>=7&&(a-=36)}return o(208<=a&&a<=29648),a}static getNumDataCodewords(e,a){return Math.floor(t.getNumRawDataModules(e)/8)-t.ECC_CODEWORDS_PER_BLOCK[a.ordinal][e]*t.NUM_ERROR_CORRECTION_BLOCKS[a.ordinal][e]}static reedSolomonComputeDivisor(e){if(e<1||e>255)throw new RangeError("Degree out of range");let a=[];for(let t=0;t<e-1;t++)a.push(0);a.push(1);let n=1;for(let o=0;o<e;o++){for(let e=0;e<a.length;e++)a[e]=t.reedSolomonMultiply(a[e],n),e+1<a.length&&(a[e]^=a[e+1]);n=t.reedSolomonMultiply(n,2)}return a}static reedSolomonComputeRemainder(e,a){let n=a.map((e=>0));for(const o of e){const e=o^n.shift();n.push(0),a.forEach(((a,o)=>n[o]^=t.reedSolomonMultiply(a,e)))}return n}static reedSolomonMultiply(e,t){if(e>>>8!=0||t>>>8!=0)throw new RangeError("Byte out of range");let a=0;for(let n=7;n>=0;n--)a=a<<1^285*(a>>>7),a^=(t>>>n&1)*e;return o(a>>>8==0),a}finderPenaltyCountPatterns(e){const t=e[1];o(t<=3*this.size);const a=t>0&&e[2]==t&&e[3]==3*t&&e[4]==t&&e[5]==t;return(a&&e[0]>=4*t&&e[6]>=t?1:0)+(a&&e[6]>=4*t&&e[0]>=t?1:0)}finderPenaltyTerminateAndCount(e,t,a){return e&&(this.finderPenaltyAddHistory(t,a),t=0),t+=this.size,this.finderPenaltyAddHistory(t,a),this.finderPenaltyCountPatterns(a)}finderPenaltyAddHistory(e,t){0==t[0]&&(e+=this.size),t.pop(),t.unshift(e)}};t.MIN_VERSION=1,t.MAX_VERSION=40,t.PENALTY_N1=3,t.PENALTY_N2=3,t.PENALTY_N3=40,t.PENALTY_N4=10,t.ECC_CODEWORDS_PER_BLOCK=[[-1,7,10,15,20,26,18,20,24,30,18,20,24,26,30,22,24,28,30,28,28,28,28,30,30,26,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,10,16,26,18,24,16,18,22,22,26,30,22,22,24,24,28,28,26,26,26,26,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28],[-1,13,22,18,26,18,24,18,22,20,24,28,26,24,20,30,24,28,28,26,30,28,30,30,30,30,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,17,28,22,16,22,28,26,26,24,28,24,28,22,24,24,30,28,28,26,28,30,24,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30]],t.NUM_ERROR_CORRECTION_BLOCKS=[[-1,1,1,1,1,1,2,2,2,2,4,4,4,4,4,6,6,6,6,7,8,8,9,9,10,12,12,12,13,14,15,16,17,18,19,19,20,21,22,24,25],[-1,1,1,1,2,2,4,4,4,5,5,5,8,9,9,10,10,11,13,14,16,17,17,18,20,21,23,25,26,28,29,31,33,35,37,38,40,43,45,47,49],[-1,1,1,2,2,4,4,6,6,8,8,8,10,12,16,12,17,16,18,21,20,23,23,25,27,29,34,34,35,38,40,43,45,48,51,53,56,59,62,65,68],[-1,1,1,2,4,4,4,5,6,8,8,11,11,16,16,18,16,19,21,25,25,25,34,30,32,35,37,40,42,45,48,51,54,57,60,63,66,70,74,77,81]];function a(e,t,a){if(t<0||t>31||e>>>t!=0)throw new RangeError("Value out of range");for(let n=t-1;n>=0;n--)a.push(e>>>n&1)}function n(e,t){return 0!=(e>>>t&1)}function o(e){if(!e)throw new Error("Assertion error")}e.QrCode=t;const i=class e{constructor(e,t,a){if(this.mode=e,this.numChars=t,this.bitData=a,t<0)throw new RangeError("Invalid argument");this.bitData=a.slice()}static makeBytes(t){let n=[];for(const e of t)a(e,8,n);return new e(e.Mode.BYTE,t.length,n)}static makeNumeric(t){if(!e.isNumeric(t))throw new RangeError("String contains non-numeric characters");let n=[];for(let e=0;e<t.length;){const o=Math.min(t.length-e,3);a(parseInt(t.substring(e,e+o),10),3*o+1,n),e+=o}return new e(e.Mode.NUMERIC,t.length,n)}static makeAlphanumeric(t){if(!e.isAlphanumeric(t))throw new RangeError("String contains unencodable characters in alphanumeric mode");let n,o=[];for(n=0;n+2<=t.length;n+=2){let i=45*e.ALPHANUMERIC_CHARSET.indexOf(t.charAt(n));i+=e.ALPHANUMERIC_CHARSET.indexOf(t.charAt(n+1)),a(i,11,o)}return n<t.length&&a(e.ALPHANUMERIC_CHARSET.indexOf(t.charAt(n)),6,o),new e(e.Mode.ALPHANUMERIC,t.length,o)}static makeSegments(t){return""==t?[]:e.isNumeric(t)?[e.makeNumeric(t)]:e.isAlphanumeric(t)?[e.makeAlphanumeric(t)]:[e.makeBytes(e.toUtf8ByteArray(t))]}static makeEci(t){let n=[];if(t<0)throw new RangeError("ECI assignment value out of range");if(t<128)a(t,8,n);else if(t<16384)a(2,2,n),a(t,14,n);else{if(!(t<1e6))throw new RangeError("ECI assignment value out of range");a(6,3,n),a(t,21,n)}return new e(e.Mode.ECI,0,n)}static isNumeric(t){return e.NUMERIC_REGEX.test(t)}static isAlphanumeric(t){return e.ALPHANUMERIC_REGEX.test(t)}getData(){return this.bitData.slice()}static getTotalBits(e,t){let a=0;for(const n of e){const e=n.mode.numCharCountBits(t);if(n.numChars>=1<<e)return 1/0;a+=4+e+n.bitData.length}return a}static toUtf8ByteArray(e){e=encodeURI(e);let t=[];for(let a=0;a<e.length;a++)"%"!=e.charAt(a)?t.push(e.charCodeAt(a)):(t.push(parseInt(e.substring(a+1,a+3),16)),a+=2);return t}};i.NUMERIC_REGEX=/^[0-9]*$/,i.ALPHANUMERIC_REGEX=/^[A-Z0-9 $%*+.\/:-]*$/,i.ALPHANUMERIC_CHARSET="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:";let r=i;e.QrSegment=i})(Ub||(Ub={})),(e=>{let t;(e=>{const t=class{constructor(e,t){this.ordinal=e,this.formatBits=t}};t.LOW=new t(0,1),t.MEDIUM=new t(1,0),t.QUARTILE=new t(2,3),t.HIGH=new t(3,2);e.Ecc=t})(t=e.QrCode||(e.QrCode={}))})(Ub||(Ub={})),(e=>{let t;(e=>{const t=class{constructor(e,t){this.modeBits=e,this.numBitsCharCount=t}numCharCountBits(e){return this.numBitsCharCount[Math.floor((e+7)/17)]}};t.NUMERIC=new t(1,[10,12,14]),t.ALPHANUMERIC=new t(2,[9,11,13]),t.BYTE=new t(4,[8,16,16]),t.KANJI=new t(8,[8,10,12]),t.ECI=new t(7,[0,0,0]);e.Mode=t})(t=e.QrSegment||(e.QrSegment={}))})(Ub||(Ub={}));var Xb=Ub,ev={L:Xb.QrCode.Ecc.LOW,M:Xb.QrCode.Ecc.MEDIUM,Q:Xb.QrCode.Ecc.QUARTILE,H:Xb.QrCode.Ecc.HIGH},tv=128,av="L",nv="#FFFFFF",ov="#000000",iv=!1,rv=1,sv=4,lv=0,cv=.1;function dv(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;const a=[];return e.forEach((function(e,n){let o=null;e.forEach((function(i,r){if(!i&&null!==o)return a.push(`M${o+t} ${n+t}h${r-o}v1H${o+t}z`),void(o=null);if(r!==e.length-1)i&&null===o&&(o=r);else{if(!i)return;null===o?a.push(`M${r+t},${n+t} h1v1H${r+t}z`):a.push(`M${o+t},${n+t} h${r+1-o}v1H${o+t}z`)}}))})),a.join("")}function uv(e,t){return e.slice().map(((e,a)=>a<t.y||a>=t.y+t.h?e:e.map(((e,a)=>(a<t.x||a>=t.x+t.w)&&e))))}function hv(e){let{value:a,level:n,minVersion:o,includeMargin:i,marginSize:r,imageSettings:s,size:l,boostLevel:c}=e,d=t.useMemo((()=>{const e=(Array.isArray(a)?a:[a]).reduce(((e,t)=>(e.push(...Xb.QrSegment.makeSegments(t)),e)),[]);return Xb.QrCode.encodeSegments(e,ev[n],o,void 0,void 0,c)}),[a,n,o,c]);const{cells:u,margin:h,numCells:m,calculatedImageSettings:p}=t.useMemo((()=>{let e=d.getModules();const t=function(e,t){return null!=t?Math.max(Math.floor(t),0):e?sv:lv}(i,r),a=e.length+2*t,n=function(e,t,a,n){if(null==n)return null;const o=e.length+2*a,i=Math.floor(t*cv),r=o/t,s=(n.width||i)*r,l=(n.height||i)*r,c=null==n.x?e.length/2-s/2:n.x*r,d=null==n.y?e.length/2-l/2:n.y*r,u=null==n.opacity?1:n.opacity;let h=null;if(n.excavate){let e=Math.floor(c),t=Math.floor(d);h={x:e,y:t,w:Math.ceil(s+c-e),h:Math.ceil(l+d-t)}}return{x:c,y:d,h:l,w:s,excavation:h,opacity:u,crossOrigin:n.crossOrigin}}(e,l,t,s);return{cells:e,margin:t,numCells:a,calculatedImageSettings:n}}),[d,l,s,i,r]);return{qrcode:d,margin:h,cells:u,numCells:m,calculatedImageSettings:p}}var mv=function(){try{(new Path2D).addPath(new Path2D)}catch(xC){return!1}return!0}(),pv=t.forwardRef((function(e,a){const n=e,{value:o,size:i=tv,level:r=av,bgColor:s=nv,fgColor:l=ov,includeMargin:c=iv,minVersion:d=rv,boostLevel:u,marginSize:h,imageSettings:m}=n,p=Qb(n,["value","size","level","bgColor","fgColor","includeMargin","minVersion","boostLevel","marginSize","imageSettings"]),{style:f}=p,g=Qb(p,["style"]),y=null==m?void 0:m.src,_=t.useRef(null),b=t.useRef(null),v=t.useCallback((e=>{_.current=e,"function"===typeof a?a(e):a&&(a.current=e)}),[a]),[w,x]=t.useState(!1),{margin:k,cells:C,numCells:j,calculatedImageSettings:S}=hv({value:o,level:r,minVersion:d,boostLevel:u,includeMargin:c,marginSize:h,imageSettings:m,size:i});t.useEffect((()=>{if(null!=_.current){const e=_.current,t=e.getContext("2d");if(!t)return;let a=C;const n=b.current,o=null!=S&&null!==n&&n.complete&&0!==n.naturalHeight&&0!==n.naturalWidth;o&&null!=S.excavation&&(a=uv(C,S.excavation));const r=window.devicePixelRatio||1;e.height=e.width=i*r;const c=i/j*r;t.scale(c,c),t.fillStyle=s,t.fillRect(0,0,j,j),t.fillStyle=l,mv?t.fill(new Path2D(dv(a,k))):C.forEach((function(e,a){e.forEach((function(e,n){e&&t.fillRect(n+k,a+k,1,1)}))})),S&&(t.globalAlpha=S.opacity),o&&t.drawImage(n,S.x+k,S.y+k,S.w,S.h)}})),t.useEffect((()=>{x(!1)}),[y]);const I=Zb({height:i,width:i},f);let A=null;return null!=y&&(A=t.createElement("img",{src:y,key:y,style:{display:"none"},onLoad:()=>{x(!0)},ref:b,crossOrigin:null==S?void 0:S.crossOrigin})),t.createElement(t.Fragment,null,t.createElement("canvas",Zb({style:I,height:i,width:i,ref:v,role:"img"},g)),A)}));pv.displayName="QRCodeCanvas";var fv=t.forwardRef((function(e,a){const n=e,{value:o,size:i=tv,level:r=av,bgColor:s=nv,fgColor:l=ov,includeMargin:c=iv,minVersion:d=rv,boostLevel:u,title:h,marginSize:m,imageSettings:p}=n,f=Qb(n,["value","size","level","bgColor","fgColor","includeMargin","minVersion","boostLevel","title","marginSize","imageSettings"]),{margin:g,cells:y,numCells:_,calculatedImageSettings:b}=hv({value:o,level:r,minVersion:d,boostLevel:u,includeMargin:c,marginSize:m,imageSettings:p,size:i});let v=y,w=null;null!=p&&null!=b&&(null!=b.excavation&&(v=uv(y,b.excavation)),w=t.createElement("image",{href:p.src,height:b.h,width:b.w,x:b.x+g,y:b.y+g,preserveAspectRatio:"none",opacity:b.opacity,crossOrigin:b.crossOrigin}));const x=dv(v,g);return t.createElement("svg",Zb({height:i,width:i,viewBox:`0 0 ${_} ${_}`,ref:a,role:"img"},f),!!h&&t.createElement("title",null,h),t.createElement("path",{fill:s,d:`M0,0 h${_}v${_}H0z`,shapeRendering:"crispEdges"}),t.createElement("path",{fill:l,d:x,shapeRendering:"crispEdges"}),w)}));fv.displayName="QRCodeSVG";var gv=e=>{var a;let{showIcons:n=!0,showWBLore:o=!1,showWBNotes:i=!1,showFactionRules:r=!1}=e;const{warband:s}=rf();if(!s)return null;const[l,c]=(0,t.useState)([]),[d,u]=(0,t.useState)(s?s.warband_data.Exploration.CurLocation:[]);(0,t.useEffect)((()=>{!async function(){if(s){const e=null===s||void 0===s?void 0:s.warband_data.GetLocations();c(e)}u(s?s.warband_data.Exploration.CurLocation:[])}()}),[]);const h={ranged:0,grenade:1,melee:2,equipment:3,shield:4,armour:5,special:6},m=[...null!==(a=null===s||void 0===s?void 0:s.warband_data.Equipment)&&void 0!==a?a:[]].sort(((e,t)=>{var a,n,o,i;const r=((null===(a=e.GetCategory)||void 0===a?void 0:a.call(e))||"").toLowerCase(),s=((null===(n=t.GetCategory)||void 0===n?void 0:n.call(t))||"").toLowerCase(),l=null!==(o=h[r])&&void 0!==o?o:99,c=null!==(i=h[s])&&void 0!==i?i:99;return l!==c?l-c:e.GetItemName().localeCompare(t.GetItemName())})),[p,f]=(0,t.useState)(s.warband_data.Context.FailedPromotions);return(0,Dn.jsxs)("div",{className:"WbbPrintViewOverview",children:[(0,Dn.jsx)("h1",{children:s.warband_data.GetWarbandName()}),(0,Dn.jsxs)("h2",{children:["\u2629 ",s.warband_data.GetFactionName()," \u2629"]}),(0,Dn.jsxs)("div",{className:"overview-box",children:[(0,Dn.jsx)("div",{className:"title",children:"Warband"}),(0,Dn.jsxs)("div",{className:"print-warband-item",children:[(0,Dn.jsx)("strong",{children:"Rating: "}),(0,Dn.jsx)(il.A,{amount:s.warband_data.GetRatingDucats(),type:0})," | ",(0,Dn.jsx)(il.A,{amount:s.warband_data.GetRatingGlory(),type:1})]}),(0,Dn.jsxs)("div",{className:"print-warband-item",children:[(0,Dn.jsx)("strong",{children:"Fielded: "}),"Elite: ",s.warband_data.GetNumElite(),", ","Troop: ",s.warband_data.GetNumTroop(),", ","Mercenary: ",s.warband_data.GetNumMercenary(),", ","Total: ",s.warband_data.GetNumFielded()]}),r&&(0,Dn.jsxs)(Dn.Fragment,{children:[(null===s||void 0===s?void 0:s.warband_data.GetWarbandFactionModifiersList().length)>0&&(0,Dn.jsx)("div",{className:"my-2"}),null===s||void 0===s?void 0:s.warband_data.GetWarbandFactionModifiersList().map(((e,a)=>(0,Dn.jsx)(t.Fragment,{children:(0,Dn.jsxs)("div",{className:"warband-rule",children:[(0,Dn.jsx)("span",{className:"warband-rule-name",children:e.GetTrueName()+": "}),(0,pl.fE)(e,e.GetOwnDescription()),e.SelfDynamicProperty.Selections.length>0&&(0,Dn.jsx)(Dn.Fragment,{children:e.SelfDynamicProperty.Selections.map(((t,a)=>(0,Dn.jsx)(jf,{property:e,choice:t},a)))})]})},a)))]}),(0,Dn.jsx)("div",{className:"warband-qr-wrap",children:(0,Dn.jsx)(fv,{value:Ua+ra+"/detail/"+s.id,size:70})})]}),(0,Dn.jsxs)("div",{className:"overview-box",children:[(0,Dn.jsx)("div",{className:"title",children:"Arsenal"}),(0,Dn.jsxs)("div",{className:"strongbox",children:[(0,Dn.jsx)("strong",{children:"Strongbox: "}),(0,Dn.jsx)(il.A,{amount:s.warband_data.GetStashedDucats()>1e11?"Unlimited":s.warband_data.GetStashedDucats(),type:0})," | ",(0,Dn.jsx)(il.A,{amount:s.warband_data.GetStashedGlory()>1e11?"Unlimited":s.warband_data.GetStashedGlory(),type:1})]}),m.length>0?(0,Dn.jsx)("div",{className:"arsenal-item-list",children:m.map(((e,t)=>{const a=e.GetCategory();return(0,Dn.jsxs)("div",{className:"arsenal-item",children:["melee"===a&&n&&(0,Dn.jsx)(Gn.g,{icon:Pn.XWH,className:"me-1"}),"ranged"===a&&n&&(0,Dn.jsx)(Gn.g,{icon:Pn.zTK,className:"me-1"}),"grenade"===a&&n&&(0,Dn.jsx)(Gn.g,{icon:Pn.iyL,className:"me-1"}),"equipment"===a&&n&&(0,Dn.jsx)(Gn.g,{icon:Pn.JV0,className:"me-1"}),"shield"===a&&n&&(0,Dn.jsx)(Gn.g,{icon:Pn.V2x,className:"me-1"}),"armour"===a&&n&&(0,Dn.jsx)(Gn.g,{icon:Pn.sjp,className:"me-1"}),"special"===a&&n&&(0,Dn.jsx)(Gn.g,{icon:Pn.yy,className:"me-1"}),e.GetItemName()]},t)}))}):(0,Dn.jsx)("div",{className:"arsenal-item-list",children:(0,Dn.jsx)("div",{className:"arsenal-item",children:"No items in your arsenal"})})]}),(0,Dn.jsxs)("div",{className:"overview-box",children:[(0,Dn.jsx)("div",{className:"title",children:"Campaign"}),(0,Dn.jsxs)("div",{className:"print-warband-item",children:[(0,Dn.jsx)("strong",{children:"Victory Points: "}),s.warband_data.GetVictoryPoints()]}),(0,Dn.jsxs)("div",{className:"print-warband-item",children:[(0,Dn.jsx)("strong",{children:"Campaign Round: "}),s.warband_data.GetCampaignCycleView()," / ",s.warband_data.GetCampaignCycleMax()]}),""!=s.warband_data.GetWarbandNotes()&&i&&(0,Dn.jsxs)("div",{className:"print-warband-item",children:[(0,Dn.jsx)("strong",{children:"Warband Notes: "}),s.warband_data.GetWarbandNotes()]}),""!=s.warband_data.GetLore()&&o&&(0,Dn.jsxs)("div",{className:"print-warband-item",children:[(0,Dn.jsx)("strong",{children:"Warband Lore: "}),s.warband_data.GetLore()]}),(0,Dn.jsx)("div",{className:"fw-bold mt-2",children:"Failed Promotions"}),(0,Dn.jsx)("div",{className:"failed-promo-boxes",children:Array.from({length:6},((e,t)=>{const a=t+1,n=a<=p,o=6===a;return(0,Dn.jsxs)("div",{className:"failed-promo-box",children:[o&&(0,Dn.jsx)(Gn.g,{icon:Pn.C97,className:"final-icon"}),n&&(0,Dn.jsx)(Gn.g,{icon:Pn.e68})]},a)}))})]}),(l.length>0||d.length>0)&&(0,Dn.jsxs)("div",{className:"overview-box",children:[(0,Dn.jsx)("div",{className:"title",children:"Exploration Locations"}),l.length>0&&(0,Dn.jsx)("div",{className:"locations-list",children:l.map(((e,t)=>(0,Dn.jsxs)("div",{className:"locations-element",children:[(0,Dn.jsx)(Gn.g,{icon:Pn.Q9Y,className:"fa-solid me-2"}),e.GetOwnName()]},t)))}),d.length>0&&(0,Dn.jsx)("div",{className:"locations-list unsaved",children:d.map(((e,t)=>(0,Dn.jsxs)("div",{className:"locations-element unsaved",children:[(0,Dn.jsx)(Gn.g,{icon:Pn.Q9Y,className:"fa-regular me-2"}),e.base_item.location.GetName()]},t)))})]})]})};var yv=()=>{const{warband:e}=rf(),{play_mode:a,edit_mode:n,view_mode:o,print_mode:i,mode:r,setMode:s}=ff(),{userSettings:l,isLoggedIn:c,authToken:d}=(0,ti.A)(),[u,h]=t.useState("v1.0"),[m,p]=t.useState(!0),[f,g]=t.useState(!0),[y,_]=t.useState(!0),[b,v]=t.useState(!0),[w,x]=t.useState(!1),[k,C]=t.useState(!0),[j,S]=t.useState(!1),[I,A]=t.useState(!1),[N,E]=t.useState(!1),[T,D]=t.useState(!1),[R,M]=t.useState(!1),[O,q]=t.useState(!1),[G,P]=t.useState(!1),[F,L]=t.useState(!1),[W,B]=t.useState(!1),[H,U]=t.useState(!1);if(t.useEffect((()=>{if(!l||H)return;const e=l.print_settings||{};"v0.1.63"!==e.layout_variant&&"v1.0"!==e.layout_variant||h(e.layout_variant),"boolean"===typeof e.show_model_abilities&&p(e.show_model_abilities),"boolean"===typeof e.show_weapon_abilities&&g(e.show_weapon_abilities),"boolean"===typeof e.show_model_campaign&&_(e.show_model_campaign),"boolean"===typeof e.show_icons&&v(e.show_icons),"boolean"===typeof e.show_ability_selections&&x(e.show_ability_selections),"boolean"===typeof e.show_adv_inj&&C(e.show_adv_inj),"boolean"===typeof e.show_compact_abilities&&S(e.show_compact_abilities),"boolean"===typeof e.show_compact_adv_inj&&A(e.show_compact_adv_inj),"boolean"===typeof e.show_compact_up&&E(e.show_compact_up),"boolean"===typeof e.show_model_notes&&D(e.show_model_notes),"boolean"===typeof e.show_model_lore?M(e.show_model_lore):"boolean"===typeof l.show_lore&&M(l.show_lore),"boolean"===typeof e.show_wb_notes&&q(e.show_wb_notes),"boolean"===typeof e.show_wb_lore&&P(e.show_wb_lore),"boolean"===typeof e.show_faction_rules&&L(e.show_faction_rules),U(!0)}),[l,H]),!e)return null;const K=t.useCallback((()=>({layout_variant:u,show_model_abilities:m,show_weapon_abilities:f,show_model_campaign:y,show_icons:b,show_ability_selections:w,show_adv_inj:k,show_compact_abilities:j,show_compact_adv_inj:I,show_compact_up:N,show_model_notes:T,show_model_lore:R,show_wb_notes:O,show_wb_lore:G,show_faction_rules:F})),[u,m,f,y,b,w,k,j,I,N,T,R,O,G,F]),z=t.useCallback((async()=>{if(!c||!d)return;if(!H)return;const e={print_settings:K()},t=await fetch(`${_n.a.URL}/wp-json/synod/v1/user-settings/change`,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json",Authorization:`Bearer ${d}`},body:JSON.stringify(e)});t.ok||console.error("Failed to save print settings",await t.text())}),[d,c,H,K]);t.useEffect((()=>{if(!H)return;if(!c||!d)return;const e=window.setTimeout((()=>{z().catch((e=>console.error("Autosave failed",e)))}),7e3);return()=>window.clearTimeout(e)}),[H,c,d,z]);return(0,Dn.jsxs)("div",{className:"WbbPrintView",children:[(0,Dn.jsx)("div",{className:"container print-options screen-only",children:(0,Dn.jsxs)("div",{className:"row g-3 align-items-end",children:[(0,Dn.jsxs)("div",{className:"col-12",children:[(0,Dn.jsx)("label",{htmlFor:"printLayoutVariant",className:"form-label fw-bold mb-1",children:"Layout"}),(0,Dn.jsxs)("select",{id:"printLayoutVariant",className:"form-select form-select-sm",value:u,onChange:e=>h(e.target.value),children:[(0,Dn.jsx)("option",{value:"v1.0",children:"Detailed (v1.0)"}),(0,Dn.jsx)("option",{value:"v0.1.63",children:"Compact (v0.1.63)"})]})]}),"v0.1.63"!=u&&(0,Dn.jsxs)("div",{className:"col-12",children:[(0,Dn.jsxs)("div",{className:"row setting-row",children:[(0,Dn.jsx)("div",{className:"col-12",children:(0,Dn.jsx)("strong",{children:"Models"})}),(0,Dn.jsx)("div",{className:"col-6 col-md-4",children:(0,Dn.jsxs)("div",{className:"form-check form-check-inline",children:[(0,Dn.jsx)("input",{className:"form-check-input",type:"checkbox",id:"showModelAbilities",checked:m,onChange:e=>p(e.target.checked)}),(0,Dn.jsx)("label",{className:"form-check-label",htmlFor:"showModelAbilities",children:"Show Model Abilities"})]})}),(0,Dn.jsx)("div",{className:"col-6 col-md-4",children:(0,Dn.jsxs)("div",{className:"form-check form-check-inline",children:[(0,Dn.jsx)("input",{className:"form-check-input",type:"checkbox",id:"showModelCampaign",checked:y,onChange:e=>_(e.target.checked)}),(0,Dn.jsx)("label",{className:"form-check-label",htmlFor:"showModelCampaign",children:"Show Model Campaign Info"})]})}),(0,Dn.jsx)("div",{className:"col-6 col-md-4"})]}),(0,Dn.jsxs)("div",{className:"row setting-row",children:[(0,Dn.jsx)("div",{className:"col-12",children:(0,Dn.jsx)("strong",{children:"Battlekit"})}),(0,Dn.jsx)("div",{className:"col-6 col-md-4",children:(0,Dn.jsxs)("div",{className:"form-check form-check-inline",children:[(0,Dn.jsx)("input",{className:"form-check-input",type:"checkbox",id:"showIcons",checked:b,onChange:e=>v(e.target.checked)}),(0,Dn.jsx)("label",{className:"form-check-label",htmlFor:"showIcons",children:"Show Battlekit Icons"})]})}),(0,Dn.jsx)("div",{className:"col-6 col-md-4",children:(0,Dn.jsxs)("div",{className:"form-check form-check-inline",children:[(0,Dn.jsx)("input",{className:"form-check-input",type:"checkbox",id:"showWeaponAbilities",checked:f,onChange:e=>g(e.target.checked)}),(0,Dn.jsx)("label",{className:"form-check-label",htmlFor:"showWeaponAbilities",children:"Show Weapon Abilities text"})]})})]}),(0,Dn.jsxs)("div",{className:"row setting-row",children:[(0,Dn.jsx)("div",{className:"col-12",children:(0,Dn.jsx)("strong",{children:"Abilities & Upgrades"})}),(0,Dn.jsx)("div",{className:"col-6 col-md-4",children:(0,Dn.jsxs)("div",{className:"form-check form-check-inline",children:[(0,Dn.jsx)("input",{className:"form-check-input",type:"checkbox",id:"showAdvInj",checked:k,onChange:e=>C(e.target.checked)}),(0,Dn.jsx)("label",{className:"form-check-label",htmlFor:"showAdvInj",children:"Show Advancements & Injuries"})]})}),(0,Dn.jsx)("div",{className:"col-6 col-md-4",children:(0,Dn.jsxs)("div",{className:"form-check form-check-inline",children:[(0,Dn.jsx)("input",{className:"form-check-input",type:"checkbox",id:"showAbilitySelections",checked:w,onChange:e=>x(e.target.checked)}),(0,Dn.jsx)("label",{className:"form-check-label",htmlFor:"showAbilitySelections",children:"Show Advanced Ability Selections"})]})}),(0,Dn.jsx)("div",{className:"col-6 col-md-4",children:(0,Dn.jsxs)("div",{className:"form-check form-check-inline",children:[(0,Dn.jsx)("input",{className:"form-check-input",type:"checkbox",id:"showFactionRules",checked:F,onChange:e=>L(e.target.checked)}),(0,Dn.jsx)("label",{className:"form-check-label",htmlFor:"showFactionRules",children:"Show Faction Rules"})]})})]}),(0,Dn.jsxs)("div",{className:"row setting-row",children:[(0,Dn.jsx)("div",{className:"col-12",children:(0,Dn.jsx)("strong",{children:"Compact / Detailed"})}),(0,Dn.jsx)("div",{className:"col-6 col-md-4",children:(0,Dn.jsxs)("div",{className:"form-check form-check-inline",children:[(0,Dn.jsx)("input",{className:"form-check-input",type:"checkbox",id:"showCompactAdvInj",checked:I,onChange:e=>A(e.target.checked)}),(0,Dn.jsx)("label",{className:"form-check-label",htmlFor:"showCompactAdvInj",children:"Compact Advancements & Injuries"})]})}),(0,Dn.jsx)("div",{className:"col-6 col-md-4",children:(0,Dn.jsxs)("div",{className:"form-check form-check-inline",children:[(0,Dn.jsx)("input",{className:"form-check-input",type:"checkbox",id:"showCompactAbilities",checked:j,onChange:e=>S(e.target.checked)}),(0,Dn.jsx)("label",{className:"form-check-label",htmlFor:"showCompactAbilities",children:"Compact Abilities"})]})}),(0,Dn.jsx)("div",{className:"col-6 col-md-4",children:(0,Dn.jsxs)("div",{className:"form-check form-check-inline",children:[(0,Dn.jsx)("input",{className:"form-check-input",type:"checkbox",id:"showCompactUp",checked:N,onChange:e=>E(e.target.checked)}),(0,Dn.jsx)("label",{className:"form-check-label",htmlFor:"showCompactUp",children:"Compact Upgrades"})]})})]}),(0,Dn.jsxs)("div",{className:"row setting-row",children:[(0,Dn.jsx)("div",{className:"col-12",children:(0,Dn.jsx)("strong",{children:"Notes & Lore"})}),(0,Dn.jsx)("div",{className:"col-6 col-md-4",children:(0,Dn.jsxs)("div",{className:"form-check form-check-inline",children:[(0,Dn.jsx)("input",{className:"form-check-input",type:"checkbox",id:"showModelNotes",checked:T,onChange:e=>D(e.target.checked)}),(0,Dn.jsx)("label",{className:"form-check-label",htmlFor:"showModelNotes",children:"Model Notes"})]})}),(0,Dn.jsx)("div",{className:"col-6 col-md-4",children:(0,Dn.jsxs)("div",{className:"form-check form-check-inline",children:[(0,Dn.jsx)("input",{className:"form-check-input",type:"checkbox",id:"showModelLore",checked:R,onChange:e=>M(e.target.checked)}),(0,Dn.jsx)("label",{className:"form-check-label",htmlFor:"showModelLore",children:"Model Lore"})]})}),(0,Dn.jsx)("div",{className:"col-6 col-md-4",children:(0,Dn.jsxs)("div",{className:"form-check form-check-inline",children:[(0,Dn.jsx)("input",{className:"form-check-input",type:"checkbox",id:"showWBNotes",checked:O,onChange:e=>q(e.target.checked)}),(0,Dn.jsx)("label",{className:"form-check-label",htmlFor:"showWBNotes",children:"Warband Notes"})]})}),(0,Dn.jsx)("div",{className:"col-6 col-md-4",children:(0,Dn.jsxs)("div",{className:"form-check form-check-inline",children:[(0,Dn.jsx)("input",{className:"form-check-input",type:"checkbox",id:"showWBLore",checked:G,onChange:e=>P(e.target.checked)}),(0,Dn.jsx)("label",{className:"form-check-label",htmlFor:"showWBLore",children:"Warband Lore"})]})})]}),(0,Dn.jsx)("div",{className:"",children:(0,Dn.jsxs)("div",{className:"btn btn-primary",onClick:()=>{(async()=>{try{await z()}catch(xC){console.error("Failed to save print settings before print",xC)}setTimeout((()=>window.print()),200)})()},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.JxU,className:"me-2"}),"Print"]})})]})]})}),"v0.1.63"==u&&(0,Dn.jsx)(Kb,{}),(0,Dn.jsx)(gv,{showIcons:b,showWBNotes:O,showWBLore:G,showFactionRules:F}),e.warband_data.HasElites()&&(0,Dn.jsx)("div",{className:"WbbPrintView-elites-wrap pbi-avoid",children:e.warband_data.GetFighters().map(((e,a)=>(0,Dn.jsx)(t.Fragment,{children:e.model.IsElite()&&e.model.IsActive()&&(0,Dn.jsx)(Lb,{fighter:e,showWeaponAbilities:f,showModelAbilities:m,showIcons:b,showAbilitySelections:w,showCompactAbilities:j,showCompactAdvInj:I,showAdvInj:k,showCompactUp:N,showModelCampaign:y,showModelNotes:T,showModelLore:R})},"print-elites"+a)))}),e.warband_data.HasTroops()&&(0,Dn.jsx)("div",{className:"WbbPrintView-elites-wrap pbi-avoid",children:e.warband_data.GetFighters().map(((e,a)=>(0,Dn.jsx)(t.Fragment,{children:e.model.IsTroop()&&e.model.IsActive()&&(0,Dn.jsx)(Lb,{fighter:e,showWeaponAbilities:f,showModelAbilities:m,showIcons:b,showAbilitySelections:w,showCompactAbilities:j,showCompactAdvInj:I,showAdvInj:k,showCompactUp:N,showModelCampaign:y,showModelNotes:T,showModelLore:R})},"print-elites"+a)))}),e.warband_data.HasMercenaries()&&(0,Dn.jsx)("div",{className:"WbbPrintView-elites-wrap pbi-avoid",children:e.warband_data.GetFighters().map(((e,a)=>(0,Dn.jsx)(t.Fragment,{children:e.model.IsMercenary()&&e.model.IsActive()&&(0,Dn.jsx)(Lb,{fighter:e,showWeaponAbilities:f,showModelAbilities:m,showIcons:b,showAbilitySelections:w,showCompactAbilities:j,showCompactAdvInj:I,showCompactUp:N,showAdvInj:k,showModelCampaign:y,showModelNotes:T,showModelLore:R})},"print-elites"+a)))})]})};var _v=e=>{var a;let{warbandData:n}=e;(0,zt.Zp)(),(0,zt.zy)();const[o,i]=(0,t.useState)(null),[r,s]=(0,t.useState)(!1);(0,t.useEffect)((()=>{n&&i(n)}),[n]);const[l,c]=(0,t.useState)(null),[d,u]=(0,t.useState)(null),h=function(e){u(arguments.length>1&&void 0!==arguments[1]?arguments[1]:null),c(e),null===l&&window.history.pushState({detailOpen:!0},"")},m=()=>{u(null),c(null),window.history.replaceState({},"")};(0,t.useEffect)((()=>{const e=e=>{null!==l&&m()};return window.addEventListener("popstate",e),()=>window.removeEventListener("popstate",e)}),[l]);const p=(0,t.useRef)(null);(0,t.useEffect)((()=>{if(!l)return;window.innerWidth<=767&&p.current&&window.scrollTo(0,0)}),[l]);const[f,g]=(0,t.useState)(!1),[y,_]=(0,t.useState)(!1),[b,v]=(0,t.useState)(!1),{settings:w}=(0,cl.t)(),{mode:x,play_mode:k,edit_mode:C,view_mode:j,print_mode:S,setMode:I}=ff(),A=()=>{"true"===new URLSearchParams(window.location.search).get("print")?(I("print"),document.body.setAttribute("data-print","print")):(S&&I("edit"),document.body.removeAttribute("data-print"))};(0,t.useEffect)((()=>{const e=()=>{A()};return window.addEventListener("popstate",e),()=>{window.removeEventListener("popstate",e)}}),[]),(0,t.useEffect)((()=>{const e=window.history.pushState;return window.history.pushState=function(){for(var t=arguments.length,a=new Array(t),n=0;n<t;n++)a[n]=arguments[n];e.apply(this,a),A()},()=>{window.history.pushState=e}}),[]);const N=null!==(a=null===o||void 0===o?void 0:o.warband_data.GetCampaignId())&&void 0!==a?a:null,E=(0,Dn.jsx)(Dn.Fragment,{children:null!==o&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(Jo,{title:(null===o||void 0===o?void 0:o.warband_data.GetWarbandName())+" - Warband Manager",description:"Manage your warband with Trench Companion, the official resource for Trench Crusade."}),!S&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("div",{className:"warband-title "+(l?"details-open":""),children:(0,Dn.jsxs)("div",{className:"container",children:[(0,Dn.jsx)(Dg,{}),(0,Dn.jsx)(wf,{id:"warband-actions",type:"warband",item:o})]})}),(0,Dn.jsx)("div",{className:"WbbEditView-hero",children:(0,Dn.jsx)(Ul,{factionSlug:o.warband_data.GetFactionSlug(),size:"full"})}),(0,Dn.jsxs)("div",{className:"container WbbEditViewMain",children:[(0,Dn.jsxs)("div",{className:"warband-wrap "+(l?"details-open":""),children:[(0,Dn.jsx)(_b,{}),(0,Dn.jsx)(tg,{onClick:()=>h("warband",null),isActive:"warband"===l}),(C||j)&&(0,Dn.jsx)(sf,{onClick:()=>h("stash",null),isActive:"stash"===l}),(C||j)&&(0,Dn.jsx)(ag,{onClick:()=>h("campaign",null),isActive:"campaign"===l}),(C||j)&&(0,Dn.jsx)(bb,{onClick:()=>h("exploration",null),isActive:"exploration"===l}),(0,Dn.jsx)(gb,{openDetail:h,detailType:l,detailPayload:d,setShowAddFighterEliteModal:_,setShowAddFighterTroopModal:g,setShowAddFighterMercenaryModal:v}),(0,Dn.jsx)(yb,{})]}),(0,Dn.jsxs)("div",{className:"selected-item-wrap",ref:p,children:[o.warband_data.GetFighters().map(((e,t)=>{var a;return(0,Dn.jsx)(Jf,{active:"fighter"===l&&(null===d||void 0===d||null===(a=d.model)||void 0===a?void 0:a.ID)==e.model.ID,warbandmember:e,onClose:m},e.model.ID)})),"warband"===l&&(0,Dn.jsx)(bg,{onClose:m}),"stash"===l&&(0,Dn.jsx)(dg,{onClose:m}),"campaign"===l&&(0,Dn.jsx)(Eg,{onClose:m,openPostGame:()=>h("post-game",null)}),"exploration"===l&&(0,Dn.jsx)(Mb,{onClose:m},l),null===l&&(0,Dn.jsx)("div",{className:"selected-item-empty"})]})]}),(0,Dn.jsx)(qg,{showAddFighterEliteModal:y,showAddFighterTroopModal:f,showAddFighterMercenaryModal:b,onCloseMercenary:()=>v(!1),onCloseElite:()=>_(!1),onCloseTroop:()=>g(!1)})]}),S&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("div",{className:"container",children:(0,Dn.jsxs)("div",{className:"exit-print-view",onClick:()=>{I("edit"),document.body.setAttribute("data-theme",w.color_theme),document.body.removeAttribute("data-print");const e=new URL(window.location.href);e.searchParams.delete("print"),window.history.pushState({},"",e.toString())},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.Wzs,className:"icon-inline-left-l"}),"Back to Warband"]})}),(0,Dn.jsx)(yv,{})]})]})});return(0,Dn.jsx)("div",{className:"WbbEditView "+(S?"print-mode":""),children:null!==o?(0,Dn.jsxs)(of,{warband:o,children:[(0,Dn.jsx)(df,{children:N?(0,Dn.jsx)(Zf,{campaignId:N,hydrate:!1,children:E}):E}),(0,Dn.jsx)(Ob,{})]}):(0,Dn.jsx)("div",{className:"WbbLoadingOverlay",children:(0,Dn.jsxs)("div",{className:"loading-inner",children:[(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"fa-spin"}),(0,Dn.jsx)("div",{className:"text",children:"Loading"})]})})})};var bv=e=>{const a=e.manager,{itemid:n}=(0,zt.g)(),[o,i]=((0,zt.zy)(),(0,t.useState)(null)),[r,s]=(0,t.useState)(!1),[l,c]=(0,t.useState)(!1);return(0,t.useEffect)((()=>{let e=!0;return n&&async function(){s(!1),i(null);try{if(await a.GetItemsAll(),!e)return;const t=n;if(!t||isNaN(Number(t)))return null;const o=a.GetItemByID(t);if(o)c(!0),i(o);else{const e=await ef.Y.GetWarbandPublicByID(Number(n));c(!1),i(null!==e&&void 0!==e?e:null)}}catch(xC){console.error(xC),e&&i(null)}finally{e&&s(!0)}}(),()=>{e=!1}}),[n]),r?o?(0,Dn.jsx)("div",{className:"WbbEditPage",children:(0,Dn.jsx)(pf,{isOwner:l,children:(0,Dn.jsx)(_v,{warbandData:o,manager:a})})}):(0,Dn.jsx)(Yl,{}):(0,Dn.jsx)("div",{className:"LoadingOverlay-wrap-100vh",children:(0,Dn.jsx)(Zo,{message:"Loading your warband"})})};var vv=e=>{const[a,n]=(0,t.useState)(0),{state:o}=(0,zt.zy)();(0,t.useEffect)((()=>{n(a+1)}),[o]);return(0,zt.zy)().pathname.match("/.*/$")?(0,Dn.jsx)(Yl,{}):(0,Dn.jsx)(gn.tH,{fallback:(0,Dn.jsx)("div",{children:"Something went wrong with WarbandRoute.tsx"}),children:(0,Dn.jsx)("div",{className:"WarbandRoute",children:(0,Dn.jsxs)(zt.BV,{children:[(0,Dn.jsx)(zt.qh,{path:ua,element:(0,Dn.jsx)(Jp,{manager:e.controller.UserWarbandManager})}),(0,Dn.jsx)(zt.qh,{path:Ea,element:(0,Dn.jsx)(bv,{manager:e.controller.UserWarbandManager})}),(0,Dn.jsx)(zt.qh,{path:Na,element:(0,Dn.jsx)(Xp,{manager:e.controller.UserWarbandManager})}),(0,Dn.jsx)(zt.qh,{path:"*",element:(0,Dn.jsx)(Yl,{})})]})},a)})};var wv=()=>{const{pathname:e}=(0,zt.zy)();return(0,t.useEffect)((()=>{window.scrollTo({top:0,left:0,behavior:"instant"})}),[e]),null};function xv(e,t){return function(){return e.apply(t,arguments)}}const{toString:kv}=Object.prototype,{getPrototypeOf:Cv}=Object,jv=(Sv=Object.create(null),e=>{const t=kv.call(e);return Sv[t]||(Sv[t]=t.slice(8,-1).toLowerCase())});var Sv;const Iv=e=>(e=e.toLowerCase(),t=>jv(t)===e),Av=e=>t=>typeof t===e,{isArray:Nv}=Array,Ev=Av("undefined");const Tv=Iv("ArrayBuffer");const Dv=Av("string"),Rv=Av("function"),Mv=Av("number"),Ov=e=>null!==e&&"object"===typeof e,qv=e=>{if("object"!==jv(e))return!1;const t=Cv(e);return(null===t||t===Object.prototype||null===Object.getPrototypeOf(t))&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)},Gv=Iv("Date"),Pv=Iv("File"),Fv=Iv("Blob"),Lv=Iv("FileList"),Wv=Iv("URLSearchParams");function Bv(e,t){let a,n,{allOwnKeys:o=!1}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(null!==e&&"undefined"!==typeof e)if("object"!==typeof e&&(e=[e]),Nv(e))for(a=0,n=e.length;a<n;a++)t.call(null,e[a],a,e);else{const n=o?Object.getOwnPropertyNames(e):Object.keys(e),i=n.length;let r;for(a=0;a<i;a++)r=n[a],t.call(null,e[r],r,e)}}function Hv(e,t){t=t.toLowerCase();const a=Object.keys(e);let n,o=a.length;for(;o-- >0;)if(n=a[o],t===n.toLowerCase())return n;return null}const Uv="undefined"!==typeof globalThis?globalThis:"undefined"!==typeof self?self:"undefined"!==typeof window?window:global,Kv=e=>!Ev(e)&&e!==Uv;const zv=(Vv="undefined"!==typeof Uint8Array&&Cv(Uint8Array),e=>Vv&&e instanceof Vv);var Vv;const Yv=Iv("HTMLFormElement"),Jv=(e=>{let{hasOwnProperty:t}=e;return(e,a)=>t.call(e,a)})(Object.prototype),$v=Iv("RegExp"),Zv=(e,t)=>{const a=Object.getOwnPropertyDescriptors(e),n={};Bv(a,((a,o)=>{let i;!1!==(i=t(a,o,e))&&(n[o]=i||a)})),Object.defineProperties(e,n)},Qv="abcdefghijklmnopqrstuvwxyz",Xv="0123456789",ew={DIGIT:Xv,ALPHA:Qv,ALPHA_DIGIT:Qv+Qv.toUpperCase()+Xv};const tw=Iv("AsyncFunction");var aw={isArray:Nv,isArrayBuffer:Tv,isBuffer:function(e){return null!==e&&!Ev(e)&&null!==e.constructor&&!Ev(e.constructor)&&Rv(e.constructor.isBuffer)&&e.constructor.isBuffer(e)},isFormData:e=>{let t;return e&&("function"===typeof FormData&&e instanceof FormData||Rv(e.append)&&("formdata"===(t=jv(e))||"object"===t&&Rv(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){let t;return t="undefined"!==typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&Tv(e.buffer),t},isString:Dv,isNumber:Mv,isBoolean:e=>!0===e||!1===e,isObject:Ov,isPlainObject:qv,isUndefined:Ev,isDate:Gv,isFile:Pv,isBlob:Fv,isRegExp:$v,isFunction:Rv,isStream:e=>Ov(e)&&Rv(e.pipe),isURLSearchParams:Wv,isTypedArray:zv,isFileList:Lv,forEach:Bv,merge:function e(){const{caseless:t}=Kv(this)&&this||{},a={},n=(n,o)=>{const i=t&&Hv(a,o)||o;qv(a[i])&&qv(n)?a[i]=e(a[i],n):qv(n)?a[i]=e({},n):Nv(n)?a[i]=n.slice():a[i]=n};for(let o=0,i=arguments.length;o<i;o++)arguments[o]&&Bv(arguments[o],n);return a},extend:function(e,t,a){let{allOwnKeys:n}=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return Bv(t,((t,n)=>{a&&Rv(t)?e[n]=xv(t,a):e[n]=t}),{allOwnKeys:n}),e},trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,a,n)=>{e.prototype=Object.create(t.prototype,n),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),a&&Object.assign(e.prototype,a)},toFlatObject:(e,t,a,n)=>{let o,i,r;const s={};if(t=t||{},null==e)return t;do{for(o=Object.getOwnPropertyNames(e),i=o.length;i-- >0;)r=o[i],n&&!n(r,e,t)||s[r]||(t[r]=e[r],s[r]=!0);e=!1!==a&&Cv(e)}while(e&&(!a||a(e,t))&&e!==Object.prototype);return t},kindOf:jv,kindOfTest:Iv,endsWith:(e,t,a)=>{e=String(e),(void 0===a||a>e.length)&&(a=e.length),a-=t.length;const n=e.indexOf(t,a);return-1!==n&&n===a},toArray:e=>{if(!e)return null;if(Nv(e))return e;let t=e.length;if(!Mv(t))return null;const a=new Array(t);for(;t-- >0;)a[t]=e[t];return a},forEachEntry:(e,t)=>{const a=(e&&e[Symbol.iterator]).call(e);let n;for(;(n=a.next())&&!n.done;){const a=n.value;t.call(e,a[0],a[1])}},matchAll:(e,t)=>{let a;const n=[];for(;null!==(a=e.exec(t));)n.push(a);return n},isHTMLForm:Yv,hasOwnProperty:Jv,hasOwnProp:Jv,reduceDescriptors:Zv,freezeMethods:e=>{Zv(e,((t,a)=>{if(Rv(e)&&-1!==["arguments","caller","callee"].indexOf(a))return!1;const n=e[a];Rv(n)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+a+"'")}))}))},toObjectSet:(e,t)=>{const a={},n=e=>{e.forEach((e=>{a[e]=!0}))};return Nv(e)?n(e):n(String(e).split(t)),a},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(e,t,a){return t.toUpperCase()+a})),noop:()=>{},toFiniteNumber:(e,t)=>(e=+e,Number.isFinite(e)?e:t),findKey:Hv,global:Uv,isContextDefined:Kv,ALPHABET:ew,generateString:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:16,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ew.ALPHA_DIGIT,a="";const{length:n}=t;for(;e--;)a+=t[Math.random()*n|0];return a},isSpecCompliantForm:function(e){return!!(e&&Rv(e.append)&&"FormData"===e[Symbol.toStringTag]&&e[Symbol.iterator])},toJSONObject:e=>{const t=new Array(10),a=(e,n)=>{if(Ov(e)){if(t.indexOf(e)>=0)return;if(!("toJSON"in e)){t[n]=e;const o=Nv(e)?[]:{};return Bv(e,((e,t)=>{const i=a(e,n+1);!Ev(i)&&(o[t]=i)})),t[n]=void 0,o}}return e};return a(e,0)},isAsyncFn:tw,isThenable:e=>e&&(Ov(e)||Rv(e))&&Rv(e.then)&&Rv(e.catch)};function nw(e,t,a,n,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),a&&(this.config=a),n&&(this.request=n),o&&(this.response=o)}aw.inherits(nw,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:aw.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const ow=nw.prototype,iw={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach((e=>{iw[e]={value:e}})),Object.defineProperties(nw,iw),Object.defineProperty(ow,"isAxiosError",{value:!0}),nw.from=(e,t,a,n,o,i)=>{const r=Object.create(ow);return aw.toFlatObject(e,r,(function(e){return e!==Error.prototype}),(e=>"isAxiosError"!==e)),nw.call(r,e.message,t,a,n,o),r.cause=e,r.name=e.name,i&&Object.assign(r,i),r};var rw=nw;function sw(e){return aw.isPlainObject(e)||aw.isArray(e)}function lw(e){return aw.endsWith(e,"[]")?e.slice(0,-2):e}function cw(e,t,a){return e?e.concat(t).map((function(e,t){return e=lw(e),!a&&t?"["+e+"]":e})).join(a?".":""):t}const dw=aw.toFlatObject(aw,{},null,(function(e){return/^is[A-Z]/.test(e)}));var uw=function(e,t,a){if(!aw.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const n=(a=aw.toFlatObject(a,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!aw.isUndefined(t[e])}))).metaTokens,o=a.visitor||c,i=a.dots,r=a.indexes,s=(a.Blob||"undefined"!==typeof Blob&&Blob)&&aw.isSpecCompliantForm(t);if(!aw.isFunction(o))throw new TypeError("visitor must be a function");function l(e){if(null===e)return"";if(aw.isDate(e))return e.toISOString();if(!s&&aw.isBlob(e))throw new rw("Blob is not supported. Use a Buffer instead.");return aw.isArrayBuffer(e)||aw.isTypedArray(e)?s&&"function"===typeof Blob?new Blob([e]):Buffer.from(e):e}function c(e,a,o){let s=e;if(e&&!o&&"object"===typeof e)if(aw.endsWith(a,"{}"))a=n?a:a.slice(0,-2),e=JSON.stringify(e);else if(aw.isArray(e)&&function(e){return aw.isArray(e)&&!e.some(sw)}(e)||(aw.isFileList(e)||aw.endsWith(a,"[]"))&&(s=aw.toArray(e)))return a=lw(a),s.forEach((function(e,n){!aw.isUndefined(e)&&null!==e&&t.append(!0===r?cw([a],n,i):null===r?a:a+"[]",l(e))})),!1;return!!sw(e)||(t.append(cw(o,a,i),l(e)),!1)}const d=[],u=Object.assign(dw,{defaultVisitor:c,convertValue:l,isVisitable:sw});if(!aw.isObject(e))throw new TypeError("data must be an object");return function e(a,n){if(!aw.isUndefined(a)){if(-1!==d.indexOf(a))throw Error("Circular reference detected in "+n.join("."));d.push(a),aw.forEach(a,(function(a,i){!0===(!(aw.isUndefined(a)||null===a)&&o.call(t,a,aw.isString(i)?i.trim():i,n,u))&&e(a,n?n.concat(i):[i])})),d.pop()}}(e),t};function hw(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,(function(e){return t[e]}))}function mw(e,t){this._pairs=[],e&&uw(e,this,t)}const pw=mw.prototype;pw.append=function(e,t){this._pairs.push([e,t])},pw.toString=function(e){const t=e?function(t){return e.call(this,t,hw)}:hw;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")};var fw=mw;function gw(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function yw(e,t,a){if(!t)return e;const n=a&&a.encode||gw,o=a&&a.serialize;let i;if(i=o?o(t,a):aw.isURLSearchParams(t)?t.toString():new fw(t,a).toString(n),i){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+i}return e}var _w=class{constructor(){this.handlers=[]}use(e,t,a){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!a&&a.synchronous,runWhen:a?a.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){aw.forEach(this.handlers,(function(t){null!==t&&e(t)}))}},bw={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},vw={isBrowser:!0,classes:{URLSearchParams:"undefined"!==typeof URLSearchParams?URLSearchParams:fw,FormData:"undefined"!==typeof FormData?FormData:null,Blob:"undefined"!==typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]};const ww="undefined"!==typeof window&&"undefined"!==typeof document,xw=(kw="undefined"!==typeof navigator&&navigator.product,ww&&["ReactNative","NativeScript","NS"].indexOf(kw)<0);var kw;const Cw="undefined"!==typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"===typeof self.importScripts;var jw={...e,...vw};var Sw=function(e){function t(e,a,n,o){let i=e[o++];if("__proto__"===i)return!0;const r=Number.isFinite(+i),s=o>=e.length;if(i=!i&&aw.isArray(n)?n.length:i,s)return aw.hasOwnProp(n,i)?n[i]=[n[i],a]:n[i]=a,!r;n[i]&&aw.isObject(n[i])||(n[i]=[]);return t(e,a,n[i],o)&&aw.isArray(n[i])&&(n[i]=function(e){const t={},a=Object.keys(e);let n;const o=a.length;let i;for(n=0;n<o;n++)i=a[n],t[i]=e[i];return t}(n[i])),!r}if(aw.isFormData(e)&&aw.isFunction(e.entries)){const a={};return aw.forEachEntry(e,((e,n)=>{t(function(e){return aw.matchAll(/\w+|\[(\w*)]/g,e).map((e=>"[]"===e[0]?"":e[1]||e[0]))}(e),n,a,0)})),a}return null};const Iw={transitional:bw,adapter:["xhr","http"],transformRequest:[function(e,t){const a=t.getContentType()||"",n=a.indexOf("application/json")>-1,o=aw.isObject(e);o&&aw.isHTMLForm(e)&&(e=new FormData(e));if(aw.isFormData(e))return n?JSON.stringify(Sw(e)):e;if(aw.isArrayBuffer(e)||aw.isBuffer(e)||aw.isStream(e)||aw.isFile(e)||aw.isBlob(e))return e;if(aw.isArrayBufferView(e))return e.buffer;if(aw.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let i;if(o){if(a.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return uw(e,new jw.classes.URLSearchParams,Object.assign({visitor:function(e,t,a,n){return jw.isNode&&aw.isBuffer(e)?(this.append(t,e.toString("base64")),!1):n.defaultVisitor.apply(this,arguments)}},t))}(e,this.formSerializer).toString();if((i=aw.isFileList(e))||a.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return uw(i?{"files[]":e}:e,t&&new t,this.formSerializer)}}return o||n?(t.setContentType("application/json",!1),function(e,t,a){if(aw.isString(e))try{return(t||JSON.parse)(e),aw.trim(e)}catch(xC){if("SyntaxError"!==xC.name)throw xC}return(a||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=this.transitional||Iw.transitional,a=t&&t.forcedJSONParsing,n="json"===this.responseType;if(e&&aw.isString(e)&&(a&&!this.responseType||n)){const a=!(t&&t.silentJSONParsing)&&n;try{return JSON.parse(e)}catch(xC){if(a){if("SyntaxError"===xC.name)throw rw.from(xC,rw.ERR_BAD_RESPONSE,this,null,this.response);throw xC}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:jw.classes.FormData,Blob:jw.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};aw.forEach(["delete","get","head","post","put","patch"],(e=>{Iw.headers[e]={}}));var Aw=Iw;const Nw=aw.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]);const Ew=Symbol("internals");function Tw(e){return e&&String(e).trim().toLowerCase()}function Dw(e){return!1===e||null==e?e:aw.isArray(e)?e.map(Dw):String(e)}function Rw(e,t,a,n,o){return aw.isFunction(n)?n.call(this,t,a):(o&&(t=a),aw.isString(t)?aw.isString(n)?-1!==t.indexOf(n):aw.isRegExp(n)?n.test(t):void 0:void 0)}class Mw{constructor(e){e&&this.set(e)}set(e,t,a){const n=this;function o(e,t,a){const o=Tw(t);if(!o)throw new Error("header name must be a non-empty string");const i=aw.findKey(n,o);(!i||void 0===n[i]||!0===a||void 0===a&&!1!==n[i])&&(n[i||t]=Dw(e))}const i=(e,t)=>aw.forEach(e,((e,a)=>o(e,a,t)));return aw.isPlainObject(e)||e instanceof this.constructor?i(e,t):aw.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim())?i((e=>{const t={};let a,n,o;return e&&e.split("\n").forEach((function(e){o=e.indexOf(":"),a=e.substring(0,o).trim().toLowerCase(),n=e.substring(o+1).trim(),!a||t[a]&&Nw[a]||("set-cookie"===a?t[a]?t[a].push(n):t[a]=[n]:t[a]=t[a]?t[a]+", "+n:n)})),t})(e),t):null!=e&&o(t,e,a),this}get(e,t){if(e=Tw(e)){const a=aw.findKey(this,e);if(a){const e=this[a];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),a=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let n;for(;n=a.exec(e);)t[n[1]]=n[2];return t}(e);if(aw.isFunction(t))return t.call(this,e,a);if(aw.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=Tw(e)){const a=aw.findKey(this,e);return!(!a||void 0===this[a]||t&&!Rw(0,this[a],a,t))}return!1}delete(e,t){const a=this;let n=!1;function o(e){if(e=Tw(e)){const o=aw.findKey(a,e);!o||t&&!Rw(0,a[o],o,t)||(delete a[o],n=!0)}}return aw.isArray(e)?e.forEach(o):o(e),n}clear(e){const t=Object.keys(this);let a=t.length,n=!1;for(;a--;){const o=t[a];e&&!Rw(0,this[o],o,e,!0)||(delete this[o],n=!0)}return n}normalize(e){const t=this,a={};return aw.forEach(this,((n,o)=>{const i=aw.findKey(a,o);if(i)return t[i]=Dw(n),void delete t[o];const r=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,((e,t,a)=>t.toUpperCase()+a))}(o):String(o).trim();r!==o&&delete t[o],t[r]=Dw(n),a[r]=!0})),this}concat(){for(var e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];return this.constructor.concat(this,...t)}toJSON(e){const t=Object.create(null);return aw.forEach(this,((a,n)=>{null!=a&&!1!==a&&(t[n]=e&&aw.isArray(a)?a.join(", "):a)})),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map((e=>{let[t,a]=e;return t+": "+a})).join("\n")}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e){const t=new this(e);for(var a=arguments.length,n=new Array(a>1?a-1:0),o=1;o<a;o++)n[o-1]=arguments[o];return n.forEach((e=>t.set(e))),t}static accessor(e){const t=(this[Ew]=this[Ew]={accessors:{}}).accessors,a=this.prototype;function n(e){const n=Tw(e);t[n]||(!function(e,t){const a=aw.toCamelCase(" "+t);["get","set","has"].forEach((n=>{Object.defineProperty(e,n+a,{value:function(e,a,o){return this[n].call(this,t,e,a,o)},configurable:!0})}))}(a,e),t[n]=!0)}return aw.isArray(e)?e.forEach(n):n(e),this}}Mw.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),aw.reduceDescriptors(Mw.prototype,((e,t)=>{let{value:a}=e,n=t[0].toUpperCase()+t.slice(1);return{get:()=>a,set(e){this[n]=e}}})),aw.freezeMethods(Mw);var Ow=Mw;function qw(e,t){const a=this||Aw,n=t||a,o=Ow.from(n.headers);let i=n.data;return aw.forEach(e,(function(e){i=e.call(a,i,o.normalize(),t?t.status:void 0)})),o.normalize(),i}function Gw(e){return!(!e||!e.__CANCEL__)}function Pw(e,t,a){rw.call(this,null==e?"canceled":e,rw.ERR_CANCELED,t,a),this.name="CanceledError"}aw.inherits(Pw,rw,{__CANCEL__:!0});var Fw=Pw;var Lw=jw.hasStandardBrowserEnv?{write(e,t,a,n,o,i){const r=[e+"="+encodeURIComponent(t)];aw.isNumber(a)&&r.push("expires="+new Date(a).toGMTString()),aw.isString(n)&&r.push("path="+n),aw.isString(o)&&r.push("domain="+o),!0===i&&r.push("secure"),document.cookie=r.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function Ww(e,t){return e&&!/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)?function(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}var Bw=jw.hasStandardBrowserEnv?function(){const e=/(msie|trident)/i.test(navigator.userAgent),t=document.createElement("a");let a;function n(a){let n=a;return e&&(t.setAttribute("href",n),n=t.href),t.setAttribute("href",n),{href:t.href,protocol:t.protocol?t.protocol.replace(/:$/,""):"",host:t.host,search:t.search?t.search.replace(/^\?/,""):"",hash:t.hash?t.hash.replace(/^#/,""):"",hostname:t.hostname,port:t.port,pathname:"/"===t.pathname.charAt(0)?t.pathname:"/"+t.pathname}}return a=n(window.location.href),function(e){const t=aw.isString(e)?n(e):e;return t.protocol===a.protocol&&t.host===a.host}}():function(){return!0};var Hw=function(e,t){e=e||10;const a=new Array(e),n=new Array(e);let o,i=0,r=0;return t=void 0!==t?t:1e3,function(s){const l=Date.now(),c=n[r];o||(o=l),a[i]=s,n[i]=l;let d=r,u=0;for(;d!==i;)u+=a[d++],d%=e;if(i=(i+1)%e,i===r&&(r=(r+1)%e),l-o<t)return;const h=c&&l-c;return h?Math.round(1e3*u/h):void 0}};function Uw(e,t){let a=0;const n=Hw(50,250);return o=>{const i=o.loaded,r=o.lengthComputable?o.total:void 0,s=i-a,l=n(s);a=i;const c={loaded:i,total:r,progress:r?i/r:void 0,bytes:s,rate:l||void 0,estimated:l&&r&&i<=r?(r-i)/l:void 0,event:o};c[t?"download":"upload"]=!0,e(c)}}var Kw="undefined"!==typeof XMLHttpRequest&&function(e){return new Promise((function(t,a){let n=e.data;const o=Ow.from(e.headers).normalize();let i,r,{responseType:s,withXSRFToken:l}=e;function c(){e.cancelToken&&e.cancelToken.unsubscribe(i),e.signal&&e.signal.removeEventListener("abort",i)}if(aw.isFormData(n))if(jw.hasStandardBrowserEnv||jw.hasStandardBrowserWebWorkerEnv)o.setContentType(!1);else if(!1!==(r=o.getContentType())){const[e,...t]=r?r.split(";").map((e=>e.trim())).filter(Boolean):[];o.setContentType([e||"multipart/form-data",...t].join("; "))}let d=new XMLHttpRequest;if(e.auth){const t=e.auth.username||"",a=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";o.set("Authorization","Basic "+btoa(t+":"+a))}const u=Ww(e.baseURL,e.url);function h(){if(!d)return;const n=Ow.from("getAllResponseHeaders"in d&&d.getAllResponseHeaders());!function(e,t,a){const n=a.config.validateStatus;a.status&&n&&!n(a.status)?t(new rw("Request failed with status code "+a.status,[rw.ERR_BAD_REQUEST,rw.ERR_BAD_RESPONSE][Math.floor(a.status/100)-4],a.config,a.request,a)):e(a)}((function(e){t(e),c()}),(function(e){a(e),c()}),{data:s&&"text"!==s&&"json"!==s?d.response:d.responseText,status:d.status,statusText:d.statusText,headers:n,config:e,request:d}),d=null}if(d.open(e.method.toUpperCase(),yw(u,e.params,e.paramsSerializer),!0),d.timeout=e.timeout,"onloadend"in d?d.onloadend=h:d.onreadystatechange=function(){d&&4===d.readyState&&(0!==d.status||d.responseURL&&0===d.responseURL.indexOf("file:"))&&setTimeout(h)},d.onabort=function(){d&&(a(new rw("Request aborted",rw.ECONNABORTED,e,d)),d=null)},d.onerror=function(){a(new rw("Network Error",rw.ERR_NETWORK,e,d)),d=null},d.ontimeout=function(){let t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded";const n=e.transitional||bw;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),a(new rw(t,n.clarifyTimeoutError?rw.ETIMEDOUT:rw.ECONNABORTED,e,d)),d=null},jw.hasStandardBrowserEnv&&(l&&aw.isFunction(l)&&(l=l(e)),l||!1!==l&&Bw(u))){const t=e.xsrfHeaderName&&e.xsrfCookieName&&Lw.read(e.xsrfCookieName);t&&o.set(e.xsrfHeaderName,t)}void 0===n&&o.setContentType(null),"setRequestHeader"in d&&aw.forEach(o.toJSON(),(function(e,t){d.setRequestHeader(t,e)})),aw.isUndefined(e.withCredentials)||(d.withCredentials=!!e.withCredentials),s&&"json"!==s&&(d.responseType=e.responseType),"function"===typeof e.onDownloadProgress&&d.addEventListener("progress",Uw(e.onDownloadProgress,!0)),"function"===typeof e.onUploadProgress&&d.upload&&d.upload.addEventListener("progress",Uw(e.onUploadProgress)),(e.cancelToken||e.signal)&&(i=t=>{d&&(a(!t||t.type?new Fw(null,e,d):t),d.abort(),d=null)},e.cancelToken&&e.cancelToken.subscribe(i),e.signal&&(e.signal.aborted?i():e.signal.addEventListener("abort",i)));const m=function(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}(u);m&&-1===jw.protocols.indexOf(m)?a(new rw("Unsupported protocol "+m+":",rw.ERR_BAD_REQUEST,e)):d.send(n||null)}))};const zw={http:null,xhr:Kw};aw.forEach(zw,((e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(xC){}Object.defineProperty(e,"adapterName",{value:t})}}));const Vw=e=>`- ${e}`,Yw=e=>aw.isFunction(e)||null===e||!1===e;var Jw=e=>{e=aw.isArray(e)?e:[e];const{length:t}=e;let a,n;const o={};for(let i=0;i<t;i++){let t;if(a=e[i],n=a,!Yw(a)&&(n=zw[(t=String(a)).toLowerCase()],void 0===n))throw new rw(`Unknown adapter '${t}'`);if(n)break;o[t||"#"+i]=n}if(!n){const e=Object.entries(o).map((e=>{let[t,a]=e;return`adapter ${t} `+(!1===a?"is not supported by the environment":"is not available in the build")}));let a=t?e.length>1?"since :\n"+e.map(Vw).join("\n"):" "+Vw(e[0]):"as no adapter specified";throw new rw("There is no suitable adapter to dispatch the request "+a,"ERR_NOT_SUPPORT")}return n};function $w(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Fw(null,e)}function Zw(e){$w(e),e.headers=Ow.from(e.headers),e.data=qw.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1);return Jw(e.adapter||Aw.adapter)(e).then((function(t){return $w(e),t.data=qw.call(e,e.transformResponse,t),t.headers=Ow.from(t.headers),t}),(function(t){return Gw(t)||($w(e),t&&t.response&&(t.response.data=qw.call(e,e.transformResponse,t.response),t.response.headers=Ow.from(t.response.headers))),Promise.reject(t)}))}const Qw=e=>e instanceof Ow?e.toJSON():e;function Xw(e,t){t=t||{};const a={};function n(e,t,a){return aw.isPlainObject(e)&&aw.isPlainObject(t)?aw.merge.call({caseless:a},e,t):aw.isPlainObject(t)?aw.merge({},t):aw.isArray(t)?t.slice():t}function o(e,t,a){return aw.isUndefined(t)?aw.isUndefined(e)?void 0:n(void 0,e,a):n(e,t,a)}function i(e,t){if(!aw.isUndefined(t))return n(void 0,t)}function r(e,t){return aw.isUndefined(t)?aw.isUndefined(e)?void 0:n(void 0,e):n(void 0,t)}function s(a,o,i){return i in t?n(a,o):i in e?n(void 0,a):void 0}const l={url:i,method:i,data:i,baseURL:r,transformRequest:r,transformResponse:r,paramsSerializer:r,timeout:r,timeoutMessage:r,withCredentials:r,withXSRFToken:r,adapter:r,responseType:r,xsrfCookieName:r,xsrfHeaderName:r,onUploadProgress:r,onDownloadProgress:r,decompress:r,maxContentLength:r,maxBodyLength:r,beforeRedirect:r,transport:r,httpAgent:r,httpsAgent:r,cancelToken:r,socketPath:r,responseEncoding:r,validateStatus:s,headers:(e,t)=>o(Qw(e),Qw(t),!0)};return aw.forEach(Object.keys(Object.assign({},e,t)),(function(n){const i=l[n]||o,r=i(e[n],t[n],n);aw.isUndefined(r)&&i!==s||(a[n]=r)})),a}const ex="1.6.7",tx={};["object","boolean","number","function","string","symbol"].forEach(((e,t)=>{tx[e]=function(a){return typeof a===e||"a"+(t<1?"n ":" ")+e}}));const ax={};tx.transitional=function(e,t,a){function n(e,t){return"[Axios v1.6.7] Transitional option '"+e+"'"+t+(a?". "+a:"")}return(a,o,i)=>{if(!1===e)throw new rw(n(o," has been removed"+(t?" in "+t:"")),rw.ERR_DEPRECATED);return t&&!ax[o]&&(ax[o]=!0,console.warn(n(o," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(a,o,i)}};var nx={assertOptions:function(e,t,a){if("object"!==typeof e)throw new rw("options must be an object",rw.ERR_BAD_OPTION_VALUE);const n=Object.keys(e);let o=n.length;for(;o-- >0;){const i=n[o],r=t[i];if(r){const t=e[i],a=void 0===t||r(t,i,e);if(!0!==a)throw new rw("option "+i+" must be "+a,rw.ERR_BAD_OPTION_VALUE)}else if(!0!==a)throw new rw("Unknown option "+i,rw.ERR_BAD_OPTION)}},validators:tx};const ox=nx.validators;class ix{constructor(e){this.defaults=e,this.interceptors={request:new _w,response:new _w}}async request(e,t){try{return await this._request(e,t)}catch(a){if(a instanceof Error){let e;Error.captureStackTrace?Error.captureStackTrace(e={}):e=new Error;const t=e.stack?e.stack.replace(/^.+\n/,""):"";a.stack?t&&!String(a.stack).endsWith(t.replace(/^.+\n.+\n/,""))&&(a.stack+="\n"+t):a.stack=t}throw a}}_request(e,t){"string"===typeof e?(t=t||{}).url=e:t=e||{},t=Xw(this.defaults,t);const{transitional:a,paramsSerializer:n,headers:o}=t;void 0!==a&&nx.assertOptions(a,{silentJSONParsing:ox.transitional(ox.boolean),forcedJSONParsing:ox.transitional(ox.boolean),clarifyTimeoutError:ox.transitional(ox.boolean)},!1),null!=n&&(aw.isFunction(n)?t.paramsSerializer={serialize:n}:nx.assertOptions(n,{encode:ox.function,serialize:ox.function},!0)),t.method=(t.method||this.defaults.method||"get").toLowerCase();let i=o&&aw.merge(o.common,o[t.method]);o&&aw.forEach(["delete","get","head","post","put","patch","common"],(e=>{delete o[e]})),t.headers=Ow.concat(i,o);const r=[];let s=!0;this.interceptors.request.forEach((function(e){"function"===typeof e.runWhen&&!1===e.runWhen(t)||(s=s&&e.synchronous,r.unshift(e.fulfilled,e.rejected))}));const l=[];let c;this.interceptors.response.forEach((function(e){l.push(e.fulfilled,e.rejected)}));let d,u=0;if(!s){const e=[Zw.bind(this),void 0];for(e.unshift.apply(e,r),e.push.apply(e,l),d=e.length,c=Promise.resolve(t);u<d;)c=c.then(e[u++],e[u++]);return c}d=r.length;let h=t;for(u=0;u<d;){const e=r[u++],t=r[u++];try{h=e(h)}catch(m){t.call(this,m);break}}try{c=Zw.call(this,h)}catch(m){return Promise.reject(m)}for(u=0,d=l.length;u<d;)c=c.then(l[u++],l[u++]);return c}getUri(e){return yw(Ww((e=Xw(this.defaults,e)).baseURL,e.url),e.params,e.paramsSerializer)}}aw.forEach(["delete","get","head","options"],(function(e){ix.prototype[e]=function(t,a){return this.request(Xw(a||{},{method:e,url:t,data:(a||{}).data}))}})),aw.forEach(["post","put","patch"],(function(e){function t(t){return function(a,n,o){return this.request(Xw(o||{},{method:e,headers:t?{"Content-Type":"multipart/form-data"}:{},url:a,data:n}))}}ix.prototype[e]=t(),ix.prototype[e+"Form"]=t(!0)}));var rx=ix;class sx{constructor(e){if("function"!==typeof e)throw new TypeError("executor must be a function.");let t;this.promise=new Promise((function(e){t=e}));const a=this;this.promise.then((e=>{if(!a._listeners)return;let t=a._listeners.length;for(;t-- >0;)a._listeners[t](e);a._listeners=null})),this.promise.then=e=>{let t;const n=new Promise((e=>{a.subscribe(e),t=e})).then(e);return n.cancel=function(){a.unsubscribe(t)},n},e((function(e,n,o){a.reason||(a.reason=new Fw(e,n,o),t(a.reason))}))}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}static source(){let e;const t=new sx((function(t){e=t}));return{token:t,cancel:e}}}var lx=sx;const cx={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(cx).forEach((e=>{let[t,a]=e;cx[a]=t}));var dx=cx;const ux=function e(t){const a=new rx(t),n=xv(rx.prototype.request,a);return aw.extend(n,rx.prototype,a,{allOwnKeys:!0}),aw.extend(n,a,null,{allOwnKeys:!0}),n.create=function(a){return e(Xw(t,a))},n}(Aw);ux.Axios=rx,ux.CanceledError=Fw,ux.CancelToken=lx,ux.isCancel=Gw,ux.VERSION=ex,ux.toFormData=uw,ux.AxiosError=rw,ux.Cancel=ux.CanceledError,ux.all=function(e){return Promise.all(e)},ux.spread=function(e){return function(t){return e.apply(null,t)}},ux.isAxiosError=function(e){return aw.isObject(e)&&!0===e.isAxiosError},ux.mergeConfig=Xw,ux.AxiosHeaders=Ow,ux.formToJSON=e=>Sw(aw.isHTMLForm(e)?new FormData(e):e),ux.getAdapter=Jw,ux.HttpStatusCode=dx,ux.default=ux;var hx=ux;class mx extends Error{}function px(e){let t=e.replace(/-/g,"+").replace(/_/g,"/");switch(t.length%4){case 0:break;case 2:t+="==";break;case 3:t+="=";break;default:throw new Error("base64 string is not of the correct length")}try{return function(e){return decodeURIComponent(atob(e).replace(/(.)/g,((e,t)=>{let a=t.charCodeAt(0).toString(16).toUpperCase();return a.length<2&&(a="0"+a),"%"+a})))}(t)}catch(a){return atob(t)}}mx.prototype.name="InvalidTokenError";var fx=e=>{let{onLoginSuccess:a}=e;const[n,o]=(0,t.useState)(""),[i,r]=(0,t.useState)(""),[s,l]=(0,t.useState)(""),[c,d]=(0,t.useState)(!1),{isLoggedIn:u,login:h}=(0,ti.A)();return(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("h1",{className:"mt-3",children:"Login"}),s&&(0,Dn.jsxs)("div",{className:"alert alert-danger small",role:"alert",children:[(0,Dn.jsx)("strong",{children:"Login failed"}),(0,Dn.jsx)("br",{}),"Incorrect email or password."]}),!u&&(0,Dn.jsxs)("form",{onSubmit:async e=>{if(e.preventDefault(),d(!0),l(""),!n||!i)return l("Please fill out all fields"),void d(!1);try{const t=(await hx.post(`${_n.a.URL}/wp-json/jwt-auth/v1/token`,{username:n,password:i})).data.token,o=function(t,a){if("string"!==typeof t)throw new mx("Invalid token specified: must be a string");a||(a={});const n=!0===a.header?0:1,o=t.split(".")[n];if("string"!==typeof o)throw new mx(`Invalid token specified: missing part #${n+1}`);let i;try{i=px(o)}catch(e){throw new mx(`Invalid token specified: invalid base64 for part #${n+1} (${e.message})`)}try{return JSON.parse(i)}catch(e){throw new mx(`Invalid token specified: invalid json for part #${n+1} (${e.message})`)}}(t),r=o.data.user.id;h(t,r),a&&a()}catch(r){var t,o;l((null===(t=r.response)||void 0===t||null===(o=t.data)||void 0===o?void 0:o.message)||"Login failed")}finally{d(!1)}},children:[(0,Dn.jsxs)("div",{className:"mb-3",children:[(0,Dn.jsx)("label",{htmlFor:"synod-login-email",className:"form-label",children:"Email address"}),(0,Dn.jsx)("input",{type:"email",id:"synod-login-email",value:n,onChange:e=>o(e.target.value),placeholder:"Your Email",className:"form-control"})]}),(0,Dn.jsxs)("div",{className:"mb-3",children:[(0,Dn.jsx)("label",{htmlFor:"synod-login-password",className:"form-label",children:"Password"}),(0,Dn.jsx)("input",{type:"password",id:"synod-login-password",value:i,onChange:e=>r(e.target.value),placeholder:"Password",className:"form-control"})]}),(0,Dn.jsx)("div",{className:"mb-3",children:(0,Dn.jsx)("button",{type:"submit",className:"btn btn-primary",children:c?(0,Dn.jsxs)(Dn.Fragment,{children:["Loading",(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"fa-spin icon-inline-right-l"})]}):"Login"})})]}),u&&(0,Dn.jsx)("div",{className:"alert alert-success mt-3 mb-3",children:"You are logged in"})]})};var gx=()=>{const[e,a]=(0,t.useState)(""),[n,o]=(0,t.useState)(""),[i,r]=(0,t.useState)(""),[s,l]=(0,t.useState)(""),[c,d]=(0,t.useState)(""),[u,h]=(0,t.useState)(!1);return(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("h1",{className:"mt-3",children:"Sign Up"}),s&&(0,Dn.jsx)("p",{style:{color:"red"},children:s}),c&&(0,Dn.jsx)("p",{style:{color:"green"},children:c}),(0,Dn.jsxs)("form",{onSubmit:async t=>{if(t.preventDefault(),h(!0),!e||!i)return l("Please fill out all fields"),void h(!1);try{201===(await hx.post(_n.a.URL+"/wp-json/wp/v2/users/register",{username:e,email:e,password:i,nickname:n})).status&&d("User registered successfully. Please log in.")}catch(a){l("An error occurred while registering.")}finally{h(!1)}},children:[(0,Dn.jsxs)("div",{className:"mb-3",children:[(0,Dn.jsx)("label",{htmlFor:"synod-register-email",className:"form-label",children:"Email address"}),(0,Dn.jsx)("input",{type:"email",id:"synod-register-email",value:e,onChange:e=>a(e.target.value),placeholder:"Email",className:"form-control"})]}),(0,Dn.jsxs)("div",{className:"mb-3",children:[(0,Dn.jsx)("label",{htmlFor:"synod-register-nickname",className:"form-label",children:"Nickname"}),(0,Dn.jsx)("input",{type:"text",id:"synod-register-nickname",value:n,onChange:e=>o(e.target.value),placeholder:"Nickname",className:"form-control"})]}),(0,Dn.jsxs)("div",{className:"mb-3",children:[(0,Dn.jsx)("label",{htmlFor:"synod-register-password",className:"form-label",children:"Password"}),(0,Dn.jsx)("input",{type:"password",id:"synod-register-password",value:i,onChange:e=>r(e.target.value),placeholder:"Password",className:"form-control"})]}),(0,Dn.jsx)("div",{className:"mb-3",children:(0,Dn.jsx)("button",{type:"submit",className:"btn btn-primary",children:u?(0,Dn.jsxs)(Dn.Fragment,{children:["Loading",(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"fa-spin icon-inline-right-l"})]}):(0,Dn.jsx)(Dn.Fragment,{children:"Sign up"})})})]})]})};var yx=()=>{const[e,a]=(0,t.useState)(""),[n,o]=(0,t.useState)(""),[i,r]=(0,t.useState)(""),[s,l]=(0,t.useState)(""),[c,d]=(0,t.useState)(""),[u,h]=(0,t.useState)(""),[m,p]=(0,t.useState)(!1),[f,g]=(0,t.useState)(!1);return(0,Dn.jsxs)("div",{children:[(0,Dn.jsx)("h1",{className:"mt-3",children:"Forgot Password"}),(0,Dn.jsx)("p",{children:"Have you forgotten your password or want to change it? Request a reset code below."}),(0,Dn.jsx)("h2",{className:"mt-3",children:"Get Reset Code"}),(0,Dn.jsxs)("form",{onSubmit:async t=>{t.preventDefault(),d(""),h(""),p(!0);try{await hx.post(`${_n.a.URL}/wp-json/wp/v2/users/lostpassword`,{user_login:e});d("Password reset email sent. Check your inbox.")}catch(o){var a,n;h((null===(a=o.response)||void 0===a||null===(n=a.data)||void 0===n?void 0:n.message)||"Something went wrong")}finally{p(!1)}},children:[(0,Dn.jsx)("label",{htmlFor:"synod-login-forgot-email",className:"form-label",children:"Email address"}),(0,Dn.jsx)("div",{className:"mb-3",children:(0,Dn.jsx)("input",{type:"text",id:"synod-login-forgot-email",className:"form-control",value:e,onChange:e=>a(e.target.value),placeholder:"Email or Username"})}),(0,Dn.jsx)("div",{className:"mb-3",children:(0,Dn.jsx)("button",{type:"submit",className:"btn btn-primary",children:m?(0,Dn.jsxs)(Dn.Fragment,{children:["Loading",(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"fa-spin icon-inline-right-l"})]}):(0,Dn.jsx)(Dn.Fragment,{children:"Get Reset Code"})})})]}),(0,Dn.jsx)("h2",{className:"mt-3",children:"Reset Password"}),(0,Dn.jsxs)("form",{onSubmit:async e=>{e.preventDefault(),d(""),h(""),g(!0);try{await hx.post(`${_n.a.URL}/wp-json/wp/v2/users/reset_password`,{login:s,key:n,password:i});d("Password reset successful!")}catch(o){var t,a;h((null===(t=o.response)||void 0===t||null===(a=t.data)||void 0===a?void 0:a.message)||"Password reset failed")}finally{g(!1)}},children:[(0,Dn.jsxs)("div",{className:"mb-3",children:[(0,Dn.jsx)("label",{htmlFor:"synod-login-reset-email",className:"form-label",children:"Email address"}),(0,Dn.jsx)("input",{type:"text",id:"synod-login-reset-email",value:s,onChange:e=>l(e.target.value),placeholder:"Username",className:"form-control"})]}),(0,Dn.jsxs)("div",{className:"mb-3",children:[(0,Dn.jsx)("label",{htmlFor:"synod-login-reset-code",className:"form-label",children:"Reset Code"}),(0,Dn.jsx)("input",{type:"text",id:"synod-login-reset-code",value:n,onChange:e=>o(e.target.value),placeholder:"Reset Code from Email",className:"form-control"})]}),(0,Dn.jsxs)("div",{className:"mb-3",children:[(0,Dn.jsx)("label",{htmlFor:"synod-login-reset-pw",className:"form-label",children:"New Password"}),(0,Dn.jsx)("input",{type:"password",id:'"synod-login-reset-pw',value:i,onChange:e=>r(e.target.value),placeholder:"New Password",className:"form-control"})]}),(0,Dn.jsx)("div",{className:"mb-3",children:(0,Dn.jsx)("button",{type:"submit",className:"btn btn-primary",children:f?(0,Dn.jsxs)(Dn.Fragment,{children:["Loading",(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"fa-spin icon-inline-right-l"})]}):(0,Dn.jsx)(Dn.Fragment,{children:"Reset Password"})})})]}),c&&(0,Dn.jsx)("p",{style:{color:"green"},children:c}),u&&(0,Dn.jsx)("p",{style:{color:"red"},children:u})]})};var _x=e=>{let{show:a,onClose:n}=e;const[o,i]=(0,t.useState)(),[r,s]=(0,t.useState)([]),[l,c]=(0,t.useState)(!1);(0,t.useEffect)((()=>{!async function(){const e=pn.o.getInstance();s(await e.UserWarbandManager.GrabLocalItems()),i(e.UserWarbandManager)}()}),[]);return(0,Dn.jsxs)(Il.A,{show:a,onHide:n,className:"Modal_LoginWarbandMerge",centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Upload Warbands"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:n})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsxs)(Rp.A,{type:"warning",className:"mb-3",children:[(0,Dn.jsx)("h5",{children:"Upload warbands from this device?"}),(0,Dn.jsxs)("p",{children:["You have saved warbands on this device, that are not uploaded to the cloud. Do you want to remove them from your device and save your local warbands to your user profile?",(0,Dn.jsx)("br",{}),(0,Dn.jsx)("br",{}),"If you do not upload these warbands, they will only be available on this device when you log out."]}),(0,Dn.jsx)("div",{className:"fw-bold",children:"Your local Warbands:"}),(0,Dn.jsx)("ul",{children:r.map(((e,t)=>(0,Dn.jsx)("li",{children:e.warband_data.GetTrueName()},t)))})]}),l?(0,Dn.jsxs)("button",{className:"btn btn-primary w-100 mb-3",disabled:!0,children:[(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"fa-spin me-2"}),"Uploading"]}):(0,Dn.jsxs)("button",{className:"btn btn-primary w-100 mb-3",onClick:()=>{c(!0),pn.o.getInstance().UserWarbandManager.UploadWarbands().then((()=>{n()}))},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.jkA,className:"me-2"}),"Upload warbands"]})]})]})},bx=a(3135);var vx=()=>{const[e,a]=(0,t.useState)(!0),[n,o]=(0,t.useState)(!1),[i,r]=(0,t.useState)(!1),[s]=(0,t.useState)(bx.h.HasLocalWarbands()),[l,c]=(0,t.useState)(0),[d,u]=(0,t.useState)(!1),{userId:h,login:m,logout:p,authToken:f}=(0,ti.A)(),g=async function(){a(!0),o(!1),r(!1)},y=(0,zt.Zp)();function _(){return!!f&&!!h}return(0,t.useEffect)((()=>{_()&&h&&!s&&(y(`/profile/${h}`,{state:Date.now().toString()}),window.location.reload())}),[h]),(0,Dn.jsxs)("div",{className:"SynodLoginPage",children:[(0,Dn.jsx)(Zl,{imageId:2854,className:"login-bg",size:"full"}),(0,Dn.jsx)("div",{className:"container",children:(0,Dn.jsxs)("div",{className:"row",children:[e&&(0,Dn.jsxs)("div",{className:"synod-login-wrap synod-login-form",children:[(0,Dn.jsx)(fx,{onLoginSuccess:()=>{s?u(!0):h&&y(`/profile/${h}`)}}),!_()&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("div",{className:"login-btn-spacer",children:"or"}),(0,Dn.jsx)("button",{className:"show-signup-btn btn btn-secondary",onClick:async function(){a(!1),o(!0),r(!1)},children:"Sign Up instead"})]}),_()&&(0,Dn.jsx)("button",{className:"btn btn-secondary",onClick:p,children:"Logout"}),(0,Dn.jsx)("div",{className:"reset-toggle",onClick:async function(){a(!1),o(!1),r(!0)},children:"Reset your password?"})]}),n&&(0,Dn.jsxs)("div",{className:"synod-signup-wrap synod-login-form",children:[(0,Dn.jsx)(gx,{}),(0,Dn.jsx)("div",{className:"login-btn-spacer",children:"or"}),(0,Dn.jsx)("button",{className:"show-signup-btn  btn btn-secondary",onClick:g,children:"Log In instead"})]}),i&&(0,Dn.jsxs)("div",{className:"synod-reset-wrap synod-login-form",children:[(0,Dn.jsx)(yx,{}),(0,Dn.jsx)("div",{className:"login-btn-spacer",children:"or"}),(0,Dn.jsx)("button",{className:"show-signup-btn  btn btn-secondary",onClick:g,children:"Log In instead"})]})]})}),(0,Dn.jsx)(_x,{show:d,onClose:()=>{u(!1),h&&(y(`/profile/${h}`),window.location.reload())}})]})};const wx=e=>{let{children:a}=e;const[n,o]=(0,t.useState)(null),[i,r]=(0,t.useState)(void 0),[s,l]=(0,t.useState)(null),[c,d]=(0,t.useState)(!0),[u,h]=(0,t.useState)(!1);(0,t.useEffect)((()=>{const e=localStorage.getItem("jwtToken"),t=localStorage.getItem("synodUserId"),a=localStorage.getItem("lastrecordedlogindate");if(e&&t&&a){const n=new Date(a),i=new Date;Math.ceil(Math.abs(i.getTime()-n.getTime())/864e5)<=14?(o(e),r(parseInt(t,10)),h(!0),async function(){const e=localStorage.getItem("jwtToken"),t=await fetch(`${_n.a.URL}/wp-json/synod-auth/v1/refresh`,{method:"POST",headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json"}}),a=await t.json();localStorage.setItem("jwtToken",a.token),localStorage.setItem("lastrecordedlogindate",(new Date).toISOString()),o(a.token)}()):(localStorage.removeItem("jwtToken"),localStorage.removeItem("synodUserId"),localStorage.removeItem("lastrecordedlogindate"),r(null),h(!1))}else localStorage.removeItem("jwtToken"),localStorage.removeItem("synodUserId"),localStorage.removeItem("lastrecordedlogindate"),r(null),h(!1)}),[]);return(0,t.useEffect)((()=>{(async()=>{if(void 0!==i){if(null===i)return l(null),void d(!1);d(!0);try{const e=await af.e.CreatePrivateUserByID(i);l(e)}catch(e){console.error("Error loading user data:",e),l(null)}finally{d(!1)}}})()}),[i]),(0,Dn.jsx)(ti.c.Provider,{value:{authToken:n,userId:i,isLoggedIn:u,reloadIsLoggedIn:()=>{h(!!n&&!!i)},login:(e,t)=>{localStorage.setItem("jwtToken",e),localStorage.setItem("synodUserId",t.toString()),localStorage.setItem("lastrecordedlogindate",(new Date).toISOString());const a=pn.o.getInstance();a.UserWarbandManager.SetLoggedUser(t),a.UserCampaignManager.ClearCacheOnLoginOut(t),o(e),r(t),h(!0),d(!1)},logout:()=>{const e=pn.o.getInstance();e.UserCampaignManager.ClearCacheOnLoginOut(Number(localStorage.getItem("synodUserId"))),localStorage.removeItem("jwtToken"),localStorage.removeItem("synodUserId"),localStorage.removeItem("lastrecordedlogindate"),e.UserWarbandManager.RemoveLoggedUser(),o(null),r(null),h(!1),d(!1)},SiteUser:s,loadingUser:c,userSettings:s?s.Settings:null},children:a})},xx="undefined"!==typeof window&&"trench-companion.com"===window.location.hostname,kx=()=>{const e=(0,zt.zy)();return(0,t.useEffect)((()=>{if(!xx)return;const t=setTimeout((()=>{window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"page_view",page_location:window.location.href,page_path:e.pathname+e.search,page_title:document.title})}),150);return()=>clearTimeout(t)}),[e]),null};var Cx=a.p+"static/media/Trench-Companion-Icon.ee8c564183aef570f52b.png";var jx=()=>{const e=(0,zt.Zp)(),{isLoggedIn:a,userId:n,authToken:o,logout:i,SiteUser:r,loadingUser:s}=(0,ti.A)(),[l,c]=(0,t.useState)(!1),d=()=>c(!1),u=async e=>{try{const t=await async function(e){const t=localStorage.getItem("jwtToken");try{const a=await hx.post(`${_n.a.URL}/wp-json/synod-payment/v1/cancel-subscription`,{subscription_id:e},{headers:{Authorization:`Bearer ${t}`,"Content-Type":"application/json"}});return console.log("Cancelled:",a.data),a.data}catch(n){var a;throw console.error("Error cancelling subscription:",(null===(a=n.response)||void 0===a?void 0:a.data)||n.message),n}}(e);alert(t.message||"Subscription cancelled!"),window.location.reload()}catch{alert("Could not cancel subscription.")}};if(s||!r)return(0,Dn.jsx)("div",{className:"ProfileSubscriptionView",children:(0,Dn.jsx)(Zo,{message:"Loading your Membership"})});const[h,m]=(0,t.useState)([]),[p,f]=(0,t.useState)(!1),[g,y]=(0,t.useState)(!1);return(0,t.useEffect)((()=>{g&&(f(!0),(async()=>{const e=localStorage.getItem("jwtToken"),t=await fetch(`${_n.a.URL}/wp-json/synod-payment/v1/user-invoices`,{headers:{Authorization:`Bearer ${e}`}});if(!t.ok)throw new Error("Failed to load invoices");return await t.json()})().then((e=>{m(e)})).catch((e=>{console.error("Error fetching invoices:",e)})).finally((()=>{f(!1)})))}),[g]),(0,Dn.jsx)("div",{className:"ProfileSubscriptionView",children:r.IsPremium()?(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("h3",{children:"Your Plan"}),(0,Dn.jsxs)("h4",{children:[(r.GetPlanID()==_n.a.PP_PLAN_MONTH_ID||r.GetPlanID()==_n.a.PP_PLAN_MONTH_ID_LIVE)&&(0,Dn.jsx)(Dn.Fragment,{children:_n.a.PLAN_M_NAME}),(r.GetPlanID()==_n.a.PP_PLAN_YEAR_ID||r.GetPlanID()==_n.a.PP_PLAN_YEAR_ID_LIVE)&&(0,Dn.jsx)(Dn.Fragment,{children:_n.a.PLAN_Y_NAME}),r.GetPlanID()!=_n.a.PP_PLAN_MONTH_ID&&r.GetPlanID()!=_n.a.PP_PLAN_YEAR_ID&&r.GetPlanID()!=_n.a.PP_PLAN_MONTH_ID_LIVE&&r.GetPlanID()!=_n.a.PP_PLAN_YEAR_ID_LIVE&&(0,Dn.jsx)(Dn.Fragment,{children:"Trench Companion Plus"})]}),(0,Dn.jsxs)("ul",{className:"details-list",children:[(0,Dn.jsxs)("li",{children:["Membership Status: ","Active"]}),(0,Dn.jsxs)("li",{children:["Next Payment: ",r.PremiumUntilFormat()]}),(0,Dn.jsxs)("li",{children:["Subscription ID: ",r.GetSubscriptionID()?(0,Dn.jsx)(Dn.Fragment,{children:r.GetSubscriptionID()}):(0,Dn.jsx)(Dn.Fragment,{children:"No active subscription"})]}),(0,Dn.jsxs)("li",{className:"clickable",onClick:()=>y(!0),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.p4e,className:"icon-inline-left"}),"Your Invoices"]})]}),(0,Dn.jsx)("a",{className:"btn btn-primary",href:La,onClick:()=>e(La),children:r.GetSubscriptionID()?(0,Dn.jsx)(Dn.Fragment,{children:"Change Plans"}):(0,Dn.jsx)(Dn.Fragment,{children:"Reactivate Plan"})}),r.GetSubscriptionID()&&(0,Dn.jsxs)("button",{className:"btn btn-secondary secondary-action",onClick:()=>c(!0),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.yYc,className:"icon-inline-left-s"}),"Cancel Subscription"]}),(0,Dn.jsxs)(Il.A,{show:l,size:"lg",contentClassName:"",dialogClassName:"",keyboard:!0,onhide:d,centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Cancel your subscription"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:d})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsx)("p",{children:(0,Dn.jsx)("i",{children:"We are sad to see you go. We hope to see you again in the future."})}),(0,Dn.jsx)("hr",{}),(0,Dn.jsx)("p",{children:"Do you really want to cancel your subscription? "}),(0,Dn.jsx)("button",{className:"btn btn-primary",onClick:()=>u(r.GetSubscriptionID()),children:"Cancel Subscription"})]})]}),(0,Dn.jsxs)(Il.A,{show:g,size:"lg",contentClassName:"",dialogClassName:"",keyboard:!0,onhide:y,centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Your Invoices"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:()=>y(!1)})]}),(0,Dn.jsxs)(Il.A.Body,{children:[p?(0,Dn.jsx)("div",{className:"LoadingOverlay-wrap-150",children:(0,Dn.jsx)(Zo,{message:"Loading your Invoices"})}):(0,Dn.jsx)("div",{className:"ProfileInvoiceList",children:0===h.length?(0,Dn.jsx)("p",{children:"No invoices found."}):(0,Dn.jsx)("ul",{className:"invoice-list",children:h.map(((e,t)=>(0,Dn.jsx)("li",{className:"invoice-item",children:(0,Dn.jsx)("a",{href:e.invoice_pdf_url,target:"_blank",rel:"noreferrer",download:!0,children:"Transaction-ID: "+e.paypal_transaction_id})},t)))})}),(0,Dn.jsx)("button",{className:"btn btn-primary",onClick:()=>y(!1),children:"Close"})]})]})]}):(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("h3",{children:"Support the Project"}),(0,Dn.jsx)("h4",{children:"Trench Companion plus"}),(0,Dn.jsxs)("ul",{className:"details-list",children:[(0,Dn.jsxs)("li",{children:[(0,Dn.jsx)("img",{src:Cx,alt:"Icon",className:"icon",width:20,height:20}),"Membership starting from $1,99 monthly"]}),(0,Dn.jsxs)("li",{children:[(0,Dn.jsx)("img",{src:Cx,alt:"Icon",className:"icon",width:20,height:20}),"The first month is free"]}),(0,Dn.jsxs)("li",{children:[(0,Dn.jsx)("img",{src:Cx,alt:"Icon",className:"icon",width:20,height:20}),"Support the project"]}),(0,Dn.jsxs)("li",{children:[(0,Dn.jsx)("img",{src:Cx,alt:"Icon",className:"icon",width:20,height:20}),"Disable Ads"]}),(0,Dn.jsxs)("li",{children:[(0,Dn.jsx)("img",{src:Cx,alt:"Icon",className:"icon",width:20,height:20}),"Unlock extra features for your account"]})]}),(0,Dn.jsxs)("a",{className:"btn btn-primary",href:La,onClick:()=>e(La),children:["See Plans",(0,Dn.jsx)(Gn.g,{icon:Pn.XkK,className:"icon-inline-right-l"})]})]})})};const Sx=t.forwardRef(((e,t)=>{let{bsPrefix:a,variant:n,animation:o="border",size:i,as:r="div",className:s,...l}=e;a=(0,hi.oU)(a,"spinner");const c=`${a}-${o}`;return(0,Dn.jsx)(r,{ref:t,...l,className:si()(s,c,i&&`${c}-${i}`,n&&`text-${n}`)})}));Sx.displayName="Spinner";var Ix=Sx;const Ax=t.forwardRef(((e,t)=>{let{bsPrefix:a,className:n,as:o="div",...i}=e;const r=(0,hi.oU)(a,"row"),s=(0,hi.gy)(),l=(0,hi.Jm)(),c=`${r}-cols`,d=[];return s.forEach((e=>{const t=i[e];let a;delete i[e],null!=t&&"object"===typeof t?({cols:a}=t):a=t;const n=e!==l?`-${e}`:"";null!=a&&d.push(`${c}${n}-${a}`)})),(0,Dn.jsx)(o,{ref:t,...i,className:si()(n,r,...d)})}));Ax.displayName="Row";var Nx=Ax;var Ex=e=>{let{show:a,onClose:n}=e;const{isLoggedIn:o,userId:i,authToken:r,logout:s,userSettings:l,reloadIsLoggedIn:c}=(0,ti.A)(),{updateSettings:d}=(0,cl.t)(),[u,h]=(0,t.useState)(!1),m=async()=>{const e=pn.o.getInstance();await e.UserWarbandManager.UpdateAllWarbands()};return(0,Dn.jsxs)(Il.A,{show:a,onHide:n,className:"ProfileUpgradeWarbands",centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Migrate Warbands to 1.0"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:n})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsxs)(Rp.A,{type:"warning",className:"mb-3",children:[(0,Dn.jsx)("div",{className:"fw-bold mb-2",children:"Migrating your warbands to 1.0"}),(0,Dn.jsxs)("div",{className:"mb-3",children:["Some of your warbands are using the old playtest rules."," You can upgrade all your warbands to use the new 1.0 rules with one click.",(0,Dn.jsx)("br",{}),"If you upgrade all your warbands, you can disable the legacy functionality in the settings as well.",(0,Dn.jsx)("br",{}),(0,Dn.jsx)("br",{}),(0,Dn.jsxs)("strong",{children:[(0,Dn.jsx)(Gn.g,{icon:Pn.b6I,className:"me-2"}),"The warband builder will then be significantly faster."]})]})]}),(0,Dn.jsx)("button",{className:"btn btn-secondary mb-3",disabled:u,onClick:async()=>{try{h(!0),await m(),Us.success("All warbands have been upgraded."),n(),window.location.reload()}catch(xC){console.error(xC),Us.error("Failed to upgrade warbands.")}finally{h(!1)}},children:u?(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"me-2 fa-spin"}),"Saving"]}):(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(Gn.g,{icon:Pn.ZW_,className:"me-2"}),"Upgrade all warbands"]})}),(0,Dn.jsx)("button",{className:"btn btn-primary",disabled:u,onClick:async()=>{try{h(!0),await m(),await d({legacy_functionality:!1}),Us.success("All warbands have been upgraded and playtest rules have been disabled."),n(),window.location.reload()}catch(xC){console.error(xC),Us.error("Failed to upgrade warbands.")}finally{h(!1)}},children:u?(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"me-2 fa-spin"}),"Saving"]}):(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(Gn.g,{icon:Pn.ZW_,className:"me-2"}),"Upgrade all warbands and disable playtest rules"]})})]}),(0,Dn.jsx)(Il.A.Footer,{children:(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:n,children:"Cancel"})})]})};var Tx=()=>{const{isLoggedIn:e,authToken:a,userSettings:n,reloadIsLoggedIn:o,SiteUser:i}=(0,ti.A)();if(!i)return null;const[r,s]=(0,t.useState)(!1),{settings:l,loading:c,updateSettings:d}=(0,cl.t)(),[u,h]=(0,t.useState)(null),[m,p]=(0,t.useState)(!1);(0,t.useEffect)((()=>{!c&&l&&h(l)}),[c,l]);if(!e)return(0,Dn.jsxs)("div",{className:"ProfileSettingsView mb-3",children:[(0,Dn.jsx)("h2",{children:"App Settings"}),(0,Dn.jsx)("p",{children:"You must be logged in to change your settings."})]});if(!u)return(0,Dn.jsxs)("div",{className:"ProfileSettingsView mb-3",children:[(0,Dn.jsx)("h2",{children:"App Settings"}),(0,Dn.jsx)(Ix,{animation:"border",size:"sm",className:"me-2"}),(0,Dn.jsx)("span",{children:"Loading settings\u2026"})]});const{billing_address:f}=u;return(0,Dn.jsxs)("div",{className:"ProfileSettingsView mb-3",children:[(0,Dn.jsx)("h2",{children:"App Settings"}),(0,Dn.jsxs)(Hi,{className:"mt-3",onSubmit:async t=>{if(t.preventDefault(),e&&a)if(u){p(!0);try{await d(u),Us.success("Your settings have been saved")}catch{Us.error("Your settings could not be saved")}finally{p(!1)}}else Us.error("Settings not loaded yet.");else Us.error("You must be logged in to change settings.")},children:[(0,Dn.jsx)("h5",{className:"mb-3",children:"Display"}),(0,Dn.jsx)(Hi.Group,{className:"mb-3",controlId:"settingColorTheme",children:(0,Dn.jsx)(Hi.Check,{type:"switch",label:"Dark mode",checked:"dark"===u.color_theme,onChange:e=>h((t=>t?{...t,color_theme:e.target.checked?"dark":"light"}:t))})}),(0,Dn.jsx)(Hi.Group,{className:"mb-3",controlId:"settingShowLore",children:(0,Dn.jsx)(Hi.Check,{type:"switch",label:"Show lore in app",checked:u.show_lore,onChange:e=>h((t=>t?{...t,show_lore:e.target.checked}:t))})}),(0,Dn.jsx)(Hi.Group,{className:"mb-3",controlId:"settingShowBaseSizes",children:(0,Dn.jsx)(Hi.Check,{type:"switch",label:"Show base sizes",checked:u.show_base_sizes,onChange:e=>h((t=>t?{...t,show_base_sizes:e.target.checked}:t))})}),(0,Dn.jsx)("h5",{className:"mb-3 mt-4",children:"Billing address"}),(0,Dn.jsxs)(Nx,{className:"mb-3",children:[(0,Dn.jsxs)(Hi.Group,{as:Ai,controlId:"billingFirstName",children:[(0,Dn.jsx)(Hi.Label,{children:"First name"}),(0,Dn.jsx)(Hi.Control,{type:"text",value:f.first_name,onChange:e=>h((t=>t?{...t,billing_address:{...t.billing_address,first_name:e.target.value}}:t))})]}),(0,Dn.jsxs)(Hi.Group,{as:Ai,controlId:"billingLastName",children:[(0,Dn.jsx)(Hi.Label,{children:"Last name"}),(0,Dn.jsx)(Hi.Control,{type:"text",value:f.last_name,onChange:e=>h((t=>t?{...t,billing_address:{...t.billing_address,last_name:e.target.value}}:t))})]})]}),(0,Dn.jsxs)(Hi.Group,{className:"mb-3",controlId:"billingStreet",children:[(0,Dn.jsx)(Hi.Label,{children:"Street and house number"}),(0,Dn.jsx)(Hi.Control,{type:"text",value:f.street,onChange:e=>h((t=>t?{...t,billing_address:{...t.billing_address,street:e.target.value}}:t))})]}),(0,Dn.jsxs)(Nx,{className:"mb-3",children:[(0,Dn.jsxs)(Hi.Group,{as:Ai,md:4,controlId:"billingZip",children:[(0,Dn.jsx)(Hi.Label,{children:"ZIP"}),(0,Dn.jsx)(Hi.Control,{type:"text",value:f.zip,onChange:e=>h((t=>t?{...t,billing_address:{...t.billing_address,zip:e.target.value}}:t))})]}),(0,Dn.jsxs)(Hi.Group,{as:Ai,md:4,controlId:"billingState",children:[(0,Dn.jsx)(Hi.Label,{children:"State"}),(0,Dn.jsx)(Hi.Control,{type:"text",value:f.state,onChange:e=>h((t=>t?{...t,billing_address:{...t.billing_address,state:e.target.value}}:t))})]}),(0,Dn.jsxs)(Hi.Group,{as:Ai,md:4,controlId:"billingCountry",children:[(0,Dn.jsx)(Hi.Label,{children:"Country"}),(0,Dn.jsx)(Hi.Control,{type:"text",value:f.country,onChange:e=>h((t=>t?{...t,billing_address:{...t.billing_address,country:e.target.value}}:t))})]})]}),(0,Dn.jsx)("div",{className:"mt-4",children:(0,Dn.jsxs)(ss.A,{type:"submit",variant:"primary",disabled:m,children:[m?(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"fa-spin me-2"}):(0,Dn.jsx)(Gn.g,{icon:Pn.jkA,className:"me-2"}),m?"Saving Settings":"Save settings"]})})]}),(0,Dn.jsx)(Ex,{show:r,onClose:()=>{s(!1)}})]})};var Dx=()=>{const e=(0,zt.zy)().pathname,{isLoggedIn:a,userId:n,authToken:o,logout:i}=(0,ti.A)(),r=(0,zt.Zp)();if(e.match("/.*/$"))return(0,Dn.jsx)(Yl,{});const[s,l]=(0,t.useState)(!1),[c,d]=(0,t.useState)(""),[u,h]=(0,t.useState)(""),[m,p]=(0,t.useState)(""),[f,g]=(0,t.useState)(""),[y,_]=(0,t.useState)(""),[b,v]=(0,t.useState)(""),[w,x]=(0,t.useState)(!0),[k,C]=(0,t.useState)(!1),[j,S]=(0,t.useState)(""),[I,A]=(0,t.useState)(""),[N,E]=(0,t.useState)(!1),[T,D]=(0,t.useState)(!1);(0,t.useEffect)((()=>{n&&a?o&&hx.get(_n.a.URL+"/wp-json/wp/v2/users/me",{headers:{Authorization:`Bearer ${o}`}}).then((e=>{const{nickname:t,email:a}=e.data;h(t||""),p(a||""),_(t||""),v(a||""),x(!1),E(!1)})).catch((()=>{A("Failed to load user info."),x(!1),E(!0)})):r(`/profile/${n}`)}),[n,o,r]);const R=u!==y||m!==b||""!==f.trim();return void 0===n||w?(0,Dn.jsx)("div",{className:"ProfileSettingsPage",children:(0,Dn.jsx)(Zo,{message:"Loading your settings"})}):N&&!w?(0,Dn.jsx)("div",{className:"ProfileSettingsPage",children:(0,Dn.jsx)(Yl,{})}):(0,Dn.jsxs)("div",{className:"ProfileSettingsPage",children:[(0,Dn.jsx)(Jo,{title:"User Settings",description:"Adjust your personal settings, manage your profile, and tailor your Trench Companion experience"}),(0,Dn.jsx)("div",{className:"container",children:(0,Dn.jsxs)("div",{className:"row",children:[(0,Dn.jsx)("div",{className:"col-12",children:(0,Dn.jsxs)("h1",{children:[(0,Dn.jsx)("a",{className:"headline-back-btn",href:"/profile/"+n,onClick:()=>r("/profile/"+n),children:(0,Dn.jsx)(Gn.g,{icon:Pn.Wzs,className:""})}),"Account Settings"]})}),(0,Dn.jsx)("div",{className:"col-12",children:(0,Dn.jsxs)("div",{className:"profile-settings mb-3",children:[(0,Dn.jsx)("h2",{children:"Your Account"}),(0,Dn.jsx)("button",{onClick:async()=>{const e=n;i(),r(`/profile/${e}`),window.location.reload()},className:"btn btn-secondary btn-logout",children:"Log out"}),(0,Dn.jsxs)(Hi.Group,{controlId:"user-settings-nickname",className:"mb-3",children:[(0,Dn.jsx)(Hi.Label,{children:"Username"}),(0,Dn.jsx)(Hi.Control,{type:"text",placeholder:"Enter your nickname",value:u,onChange:e=>h(e.target.value)})]}),(0,Dn.jsxs)(Hi.Group,{controlId:"user-settings-email",className:"mb-3",children:[(0,Dn.jsx)(Hi.Label,{children:"Email Address"}),(0,Dn.jsx)(Hi.Control,{type:"email",placeholder:"Enter your email",value:m,onChange:e=>p(e.target.value)})]}),(0,Dn.jsx)(Hi.Group,{controlId:"user-settings-showpwedit",className:"mb-3",children:(0,Dn.jsx)(Hi.Check,{type:"checkbox",label:"Show password Settings",checked:k,onChange:e=>C(e.target.checked)})}),k?(0,Dn.jsxs)(Hi.Group,{controlId:"user-settings-password",className:"mb-3",children:[(0,Dn.jsx)(Hi.Label,{children:"New Password"}),(0,Dn.jsx)(Hi.Control,{type:"password",placeholder:"Enter a new password",value:f,onChange:e=>g(e.target.value)})]}):(0,Dn.jsx)(Dn.Fragment,{}),R&&(0,Dn.jsx)("button",{className:"btn btn-primary btn-save-setting",disabled:T,onClick:e=>{T||(async()=>{if(D(!0),o){A(""),S("");try{const e={};if(u!==y&&(e.nickname=u),m!==b&&(e.email=m),f.trim()&&k&&(e.password=f),await hx.post(_n.a.URL+"/wp-json/wp/v2/users/me",e,{headers:{Authorization:`Bearer ${o}`}}),null!=n){const e=tf.y.getInstance();delete e.userObjectCache[n],delete e.userDataCache[n],delete e.callUserDataCache[n]}_(u),v(m),g(""),Us.success("Settings saved successfully.")}catch(a){var e,t;A((null===(e=a.response)||void 0===e||null===(t=e.data)||void 0===t?void 0:t.message)||"Failed to update settings."),Us.error("Error: Settings could not be saved.")}finally{D(!1)}}})()},children:T?(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"icon-inline-left-l fa-spin"}),"Saving"]}):(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(Gn.g,{icon:Pn.jkA,className:"icon-inline-left-l"}),"Save Settings"]})}),I&&(0,Dn.jsx)("p",{style:{color:"red"},children:I}),j&&(0,Dn.jsx)("p",{style:{color:"green"},children:j})]})}),(0,Dn.jsx)("div",{className:"col-12",children:(0,Dn.jsx)(Tx,{})}),(0,Dn.jsx)("div",{className:"col-12",children:(0,Dn.jsx)(jx,{})})]})})]})};var Rx=e=>{let{popoverText:t="",trigger:a,id:n}=e;return(0,Dn.jsx)(Fn.A,{trigger:"click",rootClose:!0,overlay:(0,Dn.jsx)(qn.A,{id:`cm-popover-${n}`,className:"UserFreeLockIcon",children:(0,Dn.jsxs)(qn.A.Body,{className:"popover UserFreeLockIcon-popover",children:[(0,Dn.jsx)("div",{className:"fw-bold",children:"Premium Feature"}),t&&(0,Dn.jsx)("div",{children:t})]})}),children:a})};var Mx=e=>{let{userData:a}=e;const[n,o]=(0,t.useState)([]),[i,r]=(0,t.useState)(!0);(0,t.useEffect)((()=>{(async()=>{if(a&&"function"===typeof a.GetAchievements)try{r(!0);const e=await a.GetAchievements();o(e)}catch(e){console.error("Failed to load achievements:",e)}finally{r(!1)}})()}),[a]);const s=null!==a&&void 0!==a&&a.IsPremium()?n:n.slice(0,4);if(i)return(0,Dn.jsx)("div",{className:"ProfilePageAchievements",children:(0,Dn.jsxs)("div",{className:"profile-card",children:[(0,Dn.jsx)("div",{className:"profile-card-head",children:"Achievements"}),(0,Dn.jsx)("div",{className:"profile-card-content",children:(0,Dn.jsx)("div",{className:"profile-card-loading",children:(0,Dn.jsx)(Zo,{message:"Loading Achievements"})})})]})});const l=e=>(0,Dn.jsxs)(qn.A,{id:`popover-${e.id}`,children:[(0,Dn.jsx)("div",{className:"popover-headline",children:e.name}),(0,Dn.jsx)("div",{className:"popover-content",children:e.description||"No description available."})]});return(0,Dn.jsx)("div",{className:"ProfilePageAchievements",children:(0,Dn.jsxs)("div",{className:"profile-card",children:[(0,Dn.jsx)("div",{className:"profile-card-head",children:"Achievements"}),(0,Dn.jsx)("div",{className:"profile-card-content",children:n.length>0?(0,Dn.jsxs)("ul",{className:"achievement-list",children:[s.map(((e,t)=>(0,Dn.jsx)(Fn.A,{trigger:"click",placement:"top",overlay:l(e),rootClose:!0,children:(0,Dn.jsx)("li",{className:"achievement",style:{cursor:"pointer"},children:(0,Dn.jsx)("img",{src:e.image_url,alt:e.name,className:"achievement-image"})})},e.id))),!(null!==a&&void 0!==a&&a.IsPremium())&&(0,Dn.jsx)(Rx,{popoverText:"As a premium member you can display all your achievements.",trigger:(0,Dn.jsx)("div",{className:"achievement-lock",children:(0,Dn.jsx)(Gn.g,{icon:Pn.DW4,className:""})}),id:(null===a||void 0===a?void 0:a.GetUserId())+"achievement-lock"})]}):(0,Dn.jsx)("div",{className:"px-4 py-4",children:"No Achievements collected"})})]})})},Ox=a(6178);var qx=e=>{let{imageId:t=!1,className:a="",size:n="medium",imageURL:o="",imageSourceURL:i="",imageSourceTitle:r="",imageKey:s=""}=e;return(0,Dn.jsxs)("div",{className:"userImage",children:[t&&(0,Dn.jsx)(Wn,{imageId:t,size:n,className:a}),i&&r&&s&&(0,Dn.jsx)(Ln,{sourceTitle:r,sourceUrl:i,popoverSlug:i+s}),o&&(0,Dn.jsx)("img",{className:a,src:o})]})};var Gx=e=>{let{className:t="",statusString:a=""}=e,n=!1;return"supporter"!=a&&"Supporter"!=a||(n=!0),(0,Dn.jsx)("div",{className:`UserSupporterStatus ${t}`,children:n?(0,Dn.jsx)(Dn.Fragment,{children:"\u2764\ufe0f Supporter"}):(0,Dn.jsx)(Dn.Fragment,{children:"Free Member"})})};var Px=e=>{let{friend_obj:a,is_request:n,onAccept:o,onDecline:i,is_search:r,canremove:s=!1,request_sent:l,is_friend:c,onAddFriend:d,onRemoveFriend:u}=e;const h=(0,zt.Zp)(),[m,p]=(0,t.useState)(!1),[f,g]=(0,t.useState)(l),[y,_]=(0,t.useState)(!1),[b,v]=(0,t.useState)(!1),[w,x]=(0,t.useState)(!1);let k=0,C="",j="",S="",I="",A="";return a instanceof Ox.A?(k=a.ID,C=a.ProfilePic.urls.medium,j=a.ProfilePic.source_title,S=a.ProfilePic.source_url,I=a.GetNickname(),A=a.GetUserStatus()):null!=a.profile_picture?(k=a.id,C=a.profile_picture.urls.medium,j=a.profile_picture.source_title,S=a.profile_picture.source_url,I=a.nickname,A=a.status):a.profile_picture_url&&(k=a.id,C=a.profile_picture_url,I=a.nickname,A=a.status),(0,Dn.jsxs)("div",{className:"UserListEntry",children:[(0,Dn.jsx)(yn.A,{classes:"UserListEntry-image-wrap",link:`/profile/${k}`,runfunc:()=>{h(`/profile/${k}`,{state:Date.now().toString()})},children:(0,Dn.jsx)(qx,{imageURL:C,imageSourceURL:S,imageSourceTitle:j,imageKey:C+k,className:"UserListEntry-image"})}),(0,Dn.jsxs)("div",{className:"UserListEntry-text",children:[(0,Dn.jsx)(eg,{name:I,link:!0,userId:k,statusString:A}),(0,Dn.jsx)(Gx,{statusString:A,className:"user-status"}),!n&&!r&&s&&(0,Dn.jsx)(Fn.A,{trigger:"click",placement:"left",show:w,onToggle:()=>x(!w),rootClose:!0,overlay:(0,Dn.jsx)(qn.A,{children:(0,Dn.jsx)(qn.A.Body,{className:"popover UserListEntry-options-popover",children:(0,Dn.jsx)("div",{className:"actions",children:(0,Dn.jsxs)("div",{className:"action action-delete",onClick:()=>{return e=k,x(!1),void(null===u||void 0===u||u(e));var e},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.yLS,className:"icon-inline-left-l"}),"Remove Friend"]})})})}),children:(0,Dn.jsx)("div",{className:"UserListEntry-actions",onClick:e=>e.stopPropagation(),children:(0,Dn.jsx)(Gn.g,{icon:Pn.nx5,className:""})})}),n&&(0,Dn.jsxs)("div",{className:"request-actions",children:[y?(0,Dn.jsxs)("div",{className:"btn btn-primary btn-sm",children:[(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"icon-inline-left-s fa-spin"}),"Accepting"]}):(0,Dn.jsxs)("div",{className:"btn btn-primary btn-sm",onClick:()=>{return e=k,_(!0),void(null===o||void 0===o||o(e));var e},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.e68,className:"icon-inline-left-s"}),"Accept"]}),b?(0,Dn.jsxs)("div",{className:"btn btn-secondary btn-sm",children:[(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"icon-inline-left-s fa-spin"}),"Declining"]}):(0,Dn.jsxs)("div",{className:"btn btn-secondary btn-sm",onClick:()=>{return e=k,v(!0),void(null===i||void 0===i||i(e));var e},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.GRI,className:"icon-inline-left-s"}),"Decline"]})]}),r&&(0,Dn.jsxs)("div",{className:"search-actions",children:[c&&(0,Dn.jsx)("div",{className:"is-friend-indicator",children:(0,Dn.jsx)(Gn.g,{icon:Pn.e68,className:""})}),f&&(0,Dn.jsx)("div",{className:"request-sent-indicator",children:(0,Dn.jsx)(Gn.g,{icon:Pn.TuH,className:""})}),!c&&!f&&(0,Dn.jsx)(Dn.Fragment,{children:d&&(0,Dn.jsx)("div",{className:"add-friend-btn",onClick:async()=>{if(d){p(!0);try{await d(),g(!0)}catch(e){console.error("Failed to send request:",e)}finally{p(!1)}}},children:m?(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:" fa-spin"}):(0,Dn.jsx)(Gn.g,{icon:Pn.QLR,className:""})})})]})]})]})},Fx=a(3016);function Lx(e){return"Requests"in e}var Wx=e=>{let{userData:a,onAddFriend:n,isLoading:o,reload:i}=e;const{authToken:r,userId:s,isLoggedIn:l}=(0,ti.A)(),[c,d]=(0,t.useState)(null),[u,h]=(0,t.useState)(null),[m,p]=(0,t.useState)(0);(0,t.useEffect)((()=>{!async function(){null!=a&&(d(a.Friends),a instanceof Fx.X&&h(a.Requests))}()}),[a]),(0,t.useEffect)((()=>{!async function(){null!=a&&(d(a.Friends),a instanceof Fx.X&&h(a.Requests))}()}),[m]);const f=async e=>{null!=a&&Lx(a)&&(await a.acceptFriendRequest(e),p(m+1),Us.success("Friend request accepted")),i()},g=async e=>{null!=a&&Lx(a)&&(await a.declineFriendRequest(e),p(m+1),Us.success("Friend request declined")),i()},y=async e=>{null!=a&&a instanceof Fx.X&&(await a.removeFriend(e),p(m+1),Us.success("Friend removed")),i()},[_,b]=(0,t.useState)(!1),[v,w]=(0,t.useState)(""),[x,k]=(0,t.useState)([]),[C,j]=(0,t.useState)(!1),[S,I]=(0,t.useState)(null),[A,N]=(0,t.useState)(!1);return o||!a?(0,Dn.jsxs)("div",{className:"profile-card",children:[(0,Dn.jsx)("div",{className:"profile-card-head",children:"Friends"}),(0,Dn.jsx)("div",{className:"profile-card-content",children:(0,Dn.jsx)("div",{className:"profile-card-loading",children:(0,Dn.jsx)(Zo,{message:"Loading friends"})})})]}):(0,Dn.jsxs)("div",{className:"ProfilePageFriends",children:[(0,Dn.jsxs)("div",{className:"profile-card",children:[(0,Dn.jsxs)("div",{className:"profile-card-head",children:["Friends",s&&s==a.ID&&(0,Dn.jsx)("div",{className:"profile-card-head-action",onClick:()=>b(!0),children:(0,Dn.jsx)(Gn.g,{icon:Pn.QLR,className:""})})]}),(0,Dn.jsxs)("div",{className:"profile-card-content",children:[null!=u&&(0,Dn.jsx)(Dn.Fragment,{children:u.length>0&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("div",{className:"friend-requests-headline",children:"New friend requests:"}),(0,Dn.jsx)("ul",{className:"friends-list friends-list_requests",children:u.map((e=>(0,Dn.jsx)("li",{className:"friend",children:(0,Dn.jsx)(Px,{friend_obj:e,is_request:!0,onAccept:f,onDecline:g})},e.id)))}),(0,Dn.jsx)("hr",{})]})}),null!=c&&(0,Dn.jsx)(Dn.Fragment,{children:c.length>0?(0,Dn.jsx)("ul",{className:"friends-list",children:(A?c:c.slice(0,7)).map((e=>(0,Dn.jsx)("li",{className:"friend",children:(0,Dn.jsx)(Px,{friend_obj:e,onRemoveFriend:y,canremove:a instanceof Fx.X})},e.id)))}):(0,Dn.jsx)("div",{className:"friends-list-empty",children:"No friends connected"})}),c&&c.length>7&&!A&&(0,Dn.jsx)("div",{className:"show-more-button-wrap",onClick:()=>N(!0),children:(0,Dn.jsxs)("div",{className:"show-more-button",children:["Show all friends",(0,Dn.jsx)(Gn.g,{icon:Pn.Jt$,className:"icon-inline-right-l"})]})}),null==c&&(0,Dn.jsx)("div",{className:"profile-card-content",children:(0,Dn.jsx)("div",{className:"profile-card-loading",children:(0,Dn.jsx)(Zo,{message:"Loading friends"})})})]})]}),(0,Dn.jsxs)(Il.A,{show:_,onHide:()=>b(!1),className:"ProfileAddFriendsModal",centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Add Friends"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:()=>b(!1)})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsxs)("form",{className:"mb-3",onSubmit:e=>{e.preventDefault(),(async()=>{if(j(!0),I(null),""==v)return I("Please enter a name"),k([]),void j(!1);try{const e=localStorage.getItem("jwtToken"),t=await fetch(`${_n.a.URL}/wp-json/synod/v1/user-search?query=${encodeURIComponent(v)}`,{headers:{Authorization:`Bearer ${e}`}});if(!t.ok)throw new Error("Search failed");const a=await t.json();k(a)}catch(e){I("Could not find any users for your query."),k([])}j(!1)})()},children:[(0,Dn.jsx)("label",{htmlFor:"modal_search_friends",className:"mb-1",children:"Username"}),(0,Dn.jsx)("input",{id:"modal_search_friends",type:"text",className:"form-control mb-3",placeholder:"Search by username...",value:v,onChange:e=>w(e.target.value)}),(0,Dn.jsx)("button",{className:"btn btn-primary",type:"submit",disabled:C,children:C?"Searching...":"Search"})]}),S&&(0,Dn.jsx)("div",{className:"alert alert-warning",children:S}),x.length>0?(0,Dn.jsx)("ul",{className:"friends-list",children:x.map((e=>(0,Dn.jsx)("li",{className:"friend",children:(0,Dn.jsx)(Px,{friend_obj:e,is_search:!0,request_sent:e.request_sent,is_friend:e.is_friend,onAddFriend:()=>n(e.id)})},e.id)))}):(0,Dn.jsx)(Dn.Fragment,{children:!S&&!C&&(0,Dn.jsx)("div",{className:"alert alert-info",children:"Enter the name of your friend above"})})]})]})]})};var Bx=e=>{let{useNav:t=!1,playerId:a,avatarId:n,name:o}=e;const i=(0,zt.Zp)();return t?(0,Dn.jsxs)("div",{className:"CMPlayerSmallVertical",children:[(0,Dn.jsx)(yn.A,{classes:"player-image-wrap",link:`/profile/${a}`,runfunc:()=>{i(`/profile/${a}`,{state:Date.now().toString()})},children:(0,Dn.jsx)(Wn,{imageId:n,className:""})}),(0,Dn.jsx)(yn.A,{classes:"CMHistoryPlayer-name",link:`/profile/${a}`,runfunc:()=>{i(`/profile/${a}`,{state:Date.now().toString()})},children:o})]}):(0,Dn.jsxs)("div",{className:"CMPlayerSmallVertical",children:[(0,Dn.jsx)("div",{className:"player-image-wrap",children:(0,Dn.jsx)(Wn,{imageId:n,className:""})}),(0,Dn.jsx)("div",{className:"CMHistoryPlayer-name",children:o})]})};const Hx=(0,t.createContext)(void 0),Ux=e=>{let{campaignId:a,children:n}=e;const[o,i]=(0,t.useState)(null),[r,s]=(0,t.useState)(!0),[l,c]=(0,t.useState)(null),d=(0,t.useCallback)((async()=>{if(!a||Number.isNaN(Number(a)))return i(null),void c(null);s(!0),c(null);try{const e=await fetch(`${_n.a.URL}/wp-json/synod/v1/campaigns/${a}`);if(!e.ok){if(404===e.status)throw i(null),new Error(`Campaign ${a} not found.`);throw new Error(`Failed to load campaign ${a}: ${e.status}`)}const t=function(e){var t,a,n,o,i,r,s;return{campaignId:e.campaign_id,adminUserId:Number(e.campaign_admin_id),name:e.campaign_name,description:e.campaign_description,latestAnnouncement:e.campaign_latest_announcement,warbandIds:null!==(t=e.campaign_warbands)&&void 0!==t?t:[],invitedWarbandIds:null!==(a=e.campaign_warbands_invited)&&void 0!==a?a:[],players:null!==(n=e.campaign_players)&&void 0!==n?n:[],invitedPlayers:null!==(o=e.campaign_players_invited)&&void 0!==o?o:[],invitablePlayers:null!==(i=e.campaign_players_invitable)&&void 0!==i?i:[],announcements:null!==(r=e.campaign_announcements)&&void 0!==r?r:[],games:null!==(s=e.campaign_games)&&void 0!==s?s:[]}}(await e.json());i(t)}catch(e){console.error("Failed to load campaign",a,e),c(e instanceof Error?e.message:"Unknown error while loading campaign")}finally{s(!1)}}),[a]);(0,t.useEffect)((()=>{d()}),[d]);const u={campaign:o,isLoading:r,error:l,reload:d};return(0,Dn.jsx)(Hx.Provider,{value:u,children:n})};var Kx=()=>{const e=(0,zt.Zp)(),{campaign:a,isLoading:n,error:o}=(()=>{const e=(0,t.useContext)(Hx);if(!e)throw new Error("useCampaignLight must be used within a CampaignProviderLight");return e})();return n?(0,Dn.jsx)("div",{className:"CampaignListEntry loading",children:(0,Dn.jsx)(Zo,{message:"Loading Campaign",className:"small"})}):o?(0,Dn.jsxs)("div",{children:["Error: ",o]}):a?(0,Dn.jsxs)(yn.A,{classes:"CampaignListEntry",link:`/campaigns/${null===a||void 0===a?void 0:a.campaignId}`,runfunc:()=>{e(`/campaigns/${null===a||void 0===a?void 0:a.campaignId}`)},children:[(0,Dn.jsx)("div",{className:"CampaignListEntry-name",children:(0,Dn.jsx)("div",{className:"CampaignListEntry-name-link",children:a.name})}),(0,Dn.jsx)("div",{className:"CampaignListEntry-desc",children:(0,Dn.jsx)("div",{className:"",dangerouslySetInnerHTML:{__html:(0,pl.lh)(a.description)}})}),(0,Dn.jsxs)("div",{className:"CampaignListEntry-players",children:[(0,Dn.jsx)("div",{className:"players-headline",children:"Players:"}),(0,Dn.jsx)("div",{className:"players-list",children:a.players.map(((e,t)=>(0,Dn.jsx)(Bx,{playerId:e.id,avatarId:e.profile_picture.image_id,name:e.nickname,useNav:!1},e.id)))})]}),(0,Dn.jsxs)("div",{className:"CampaignListEntry-Summary",children:["Players: ",a.players.length," | ","Warbands: ",a.warbandIds.length]})]}):(0,Dn.jsx)("div",{children:"Campaign not found."})};const zx=(0,t.createContext)(void 0),Vx=e=>{let{userId:a,children:n}=e;const[o,i]=(0,t.useState)([]),[r,s]=(0,t.useState)([]),[l,c]=(0,t.useState)(!0),[d,u]=(0,t.useState)(null),h=(0,t.useCallback)((async()=>{if(!a||Number.isNaN(Number(a)))return i([]),s([]),void u(null);c(!0),u(null);try{const[e,t]=await Promise.all([fetch(`${_n.a.URL}/wp-json/synod/v1/user/campaigns/${a}`),fetch(`${_n.a.URL}/wp-json/synod/v1/user/campaign-invites/${a}`)]);if(!e.ok)throw new Error(`Failed to load joined campaigns for user ${a}: ${e.status}`);if(!t.ok)throw new Error(`Failed to load campaign invites for user ${a}: ${t.status}`);const n=await e.json(),o=await t.json(),r=n.map((e=>Number(e))).filter((e=>Number.isFinite(e))),l=o.map((e=>Number(e))).filter((e=>Number.isFinite(e)));i(r),s(l)}catch(e){console.error("Failed to load campaigns / invites",e),u(e instanceof Error?e.message:"Unknown error while loading campaign data")}finally{setTimeout((()=>c(!1)),200)}}),[a]);(0,t.useEffect)((()=>{h()}),[h]);const m=(0,t.useCallback)((e=>o.includes(e)),[o]),p=(0,t.useCallback)((e=>r.includes(e)),[r]),f={joinedCampaignIds:o,invitedCampaignIds:r,isLoading:l,error:d,reload:h,isJoined:m,isInvited:p,campaignsLightUserId:a};return(0,Dn.jsx)(zx.Provider,{value:f,children:n})},Yx=()=>{const e=(0,t.useContext)(zx);if(!e)throw new Error("useCampaignsLight must be used within a CampaignsProviderLight");return e};var Jx=()=>{const{campaign:e,reloadCmData:a}=Xf(),{reload:n}=Yx(),o=(0,zt.Zp)(),[i,r]=(0,t.useState)(!1);if(!e)return(0,Dn.jsx)("div",{className:"CampaignListEntry CampaignListEntryInvitaion",children:(0,Dn.jsx)(Zo,{message:"Loading Invite",className:"small"})});return(0,Dn.jsxs)("div",{className:"CampaignListEntry CampaignListEntryInvitaion",children:[(0,Dn.jsx)("div",{className:"fw-bold",children:"New Campaign Invite"}),(0,Dn.jsx)(yn.A,{classes:"CampaignListEntry-name",link:`/campaigns/${null===e||void 0===e?void 0:e.GetId()}`,runfunc:()=>{o(`/campaigns/${null===e||void 0===e?void 0:e.GetId()}`)},children:e.GetName()}),(0,Dn.jsxs)("div",{className:"CampaignListEntry-players",children:["Players: ",e.GetPlayers().map((e=>e.Nickname)).join(", ")]}),i?(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("div",{className:"loading-wrapper"}),(0,Dn.jsx)(Zo,{message:"Loading",className:"small"})]}):(0,Dn.jsxs)("div",{className:"CampaignListEntry-actions",children:[(0,Dn.jsxs)(ss.A,{variant:"primary",className:"btn-sm me-3",onClick:()=>{if(null!=e){r(!0);const t=pn.o.getInstance();t.UserCampaignManager.RunInit().then((()=>{t.UserCampaignManager.CampaignInviteAccept(e.GetId()).then((()=>{a(),n(),r(!1),Us.success("Accepted campaign invite"),o(`/campaigns/${null===e||void 0===e?void 0:e.GetId()}`)}))}))}},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.e68,className:"me-2"}),"Accept"]}),(0,Dn.jsxs)(ss.A,{variant:"secondary",className:"btn-sm",onClick:()=>{if(null!=e){r(!0);const t=pn.o.getInstance();t.UserCampaignManager.RunInit().then((()=>{t.UserCampaignManager.CampaignInviteReject(e.GetId()).then((()=>{a(),n(),window.location.reload(),r(!1),Us.success("Declined campaign invite")}))}))}},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.GRI,className:"me-2"}),"Decline"]})]})]})};var $x=e=>{let{userData:t}=e;return t?(0,Dn.jsx)(Vx,{userId:t.ID,children:(0,Dn.jsx)(Zx,{})}):null};const Zx=()=>{const{SiteUser:e,userId:t}=(0,ti.A)(),{joinedCampaignIds:a,invitedCampaignIds:n,isLoading:o,error:i,campaignsLightUserId:r}=Yx(),s=n.length>0,l=a.length>0;return(0,Dn.jsx)("div",{className:"ProfilePageCampaigns",children:(0,Dn.jsxs)("div",{className:"profile-card",children:[(0,Dn.jsx)("div",{className:"profile-card-head",children:"Campaigns"}),(0,Dn.jsxs)("div",{className:"profile-card-content",children:[s&&r==t&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("ul",{className:"campaigns-list",children:n.map((e=>(0,Dn.jsx)("li",{className:"campaign invited",children:(0,Dn.jsx)(Zf,{campaignId:e,hydrate:!1,children:(0,Dn.jsx)(Jx,{})})},`inv-${e}`)))}),l&&(0,Dn.jsx)("div",{className:"spacer-20"})]}),l&&(0,Dn.jsx)("ul",{className:"campaigns-list",children:a.map((e=>(0,Dn.jsx)("li",{className:"campaign",children:(0,Dn.jsx)(Ux,{campaignId:e,children:(0,Dn.jsx)(Kx,{})},e)},e)))}),!l&&!s&&(0,Dn.jsx)("div",{className:"campaigns-list-empty",children:"No campaigns found for this user."})]})]})})};var Qx=e=>{let{warband:t}=e;const a=(0,zt.Zp)(),{userId:n,isLoggedIn:o}=(0,ti.A)();return(0,Dn.jsxs)("div",{className:"WarbandListEntry",children:[(0,Dn.jsx)(yn.A,{classes:"WarbandListEntry-image-wrap",link:`/warband/detail/${t.id}`,runfunc:()=>{a(`/warband/detail/${t.id}`)},children:(0,Dn.jsx)(Ul,{className:"WarbandListEntry-image",factionSlug:t.warband_data.GetFactionSlug()})}),(0,Dn.jsxs)("div",{className:"WarbandListEntry-text",children:[(0,Dn.jsxs)(yn.A,{classes:"warband-name d-inline-block position-relative",link:`/warband/detail/${t.id}`,runfunc:()=>{a(`/warband/detail/${t.id}`)},children:[t.warband_data.GetCampaignInvites().length>0&&!t.warband_data.GetCampaignId()&&n&&t.warband_data.IsOwner(n)&&(0,Dn.jsx)(Wp,{content:"!",size:"small"}),(0,Dn.jsx)(Dn.Fragment,{children:t.warband_data.GetWarbandName()})]}),(0,Dn.jsx)("div",{className:"warband-faction",children:t.warband_data.GetFactionName()}),(0,Dn.jsxs)("div",{className:"warband-value",children:[(0,Dn.jsx)(il.A,{amount:t.warband_data.GetRatingDucats(),type:"d"})," | ",(0,Dn.jsx)(il.A,{amount:t.warband_data.GetRatingGlory(),type:"g"})]})]})]})};var Xx=e=>{let{userData:a}=e;const[n,o]=(0,t.useState)([]),[i,r]=(0,t.useState)(!0),{authToken:s,userId:l,isLoggedIn:c}=(0,ti.A)(),d=(0,zt.Zp)(),[u,h]=(0,t.useState)(!1);return(0,t.useEffect)((()=>{(async()=>{if(a&&"function"===typeof a.GetWarbands)try{r(!0);const e=(await a.GetWarbands()).map((e=>e));o(e)}catch(e){console.error("Failed to load warbands:",e)}finally{r(!1)}})()}),[a]),i?(0,Dn.jsx)("div",{className:"ProfilePageWarbands",children:(0,Dn.jsxs)("div",{className:"profile-card",children:[(0,Dn.jsxs)("div",{className:"profile-card-head",children:["Warbands",l&&a&&l==a.ID&&(0,Dn.jsx)(yn.A,{classes:"profile-card-head-action",link:"/warband/new",runfunc:()=>{d("/warband/new")},children:(0,Dn.jsx)(Gn.g,{icon:Pn.QLR,className:""})})]}),(0,Dn.jsx)("div",{className:"profile-card-content",children:(0,Dn.jsx)("div",{className:"profile-card-loading",children:(0,Dn.jsx)(Zo,{message:"Loading Warbands"})})})]})}):(0,Dn.jsx)("div",{className:"ProfilePageWarbands",children:(0,Dn.jsxs)("div",{className:"profile-card",children:[(0,Dn.jsxs)("div",{className:"profile-card-head",children:["Warbands",l&&a&&l==a.ID&&(0,Dn.jsx)(yn.A,{classes:"profile-card-head-action",link:"/warband/new",runfunc:()=>{d("/warband/new")},children:(0,Dn.jsx)(Gn.g,{icon:Pn.QLR,className:""})})]}),(0,Dn.jsxs)("div",{className:"profile-card-content",children:[n.length>0?(0,Dn.jsx)("ul",{className:"warbands-list",children:(u?n:n.slice(0,7)).map((e=>(0,Dn.jsx)("li",{className:"warband",children:(0,Dn.jsx)(Qx,{warband:e})},e.warband_data.GetPostId())))}):(0,Dn.jsx)("div",{className:"warbands-list-empty",children:"No warbands found for this user."}),n.length>7&&!u&&(0,Dn.jsx)("div",{className:"show-more-button-wrap",onClick:()=>h(!0),children:(0,Dn.jsxs)("div",{className:"show-more-button",children:["Show all warbands",(0,Dn.jsx)(Gn.g,{icon:Pn.Jt$,className:"icon-inline-right-l"})]})})]})]})})};var ek=e=>{let{userId:t,show:a,onClose:n}=e;return(0,Dn.jsxs)(Ap,{show:a,onHide:n,placement:"bottom",className:"ProfileShareDrawer",children:[(0,Dn.jsx)(Ap.Header,{children:(0,Dn.jsxs)(Ap.Title,{children:["Share Profile",(0,Dn.jsx)("div",{className:"offcanvas-close",onClick:n,children:(0,Dn.jsx)(Gn.g,{icon:Pn.yYc,className:""})})]})}),(0,Dn.jsxs)(Ap.Body,{children:[(0,Dn.jsx)("p",{children:"Let your friend scan this QR code to view your profile."}),(0,Dn.jsx)("div",{className:"qr-code-wrap",children:(0,Dn.jsx)(fv,{value:Ua+"/profile/"+t,size:280})}),(0,Dn.jsx)("div",{className:"mt-3 mb-3 align-center",children:(0,Dn.jsxs)("div",{className:"btn btn-primary",onClick:()=>{const e=Ua+"/profile/"+t;navigator.share?navigator.share({title:"Check out my Trench Companion profile!",text:"Let's play connect and play together",url:e}).then((()=>console.log("Shared successfully"))).catch((e=>console.log("Error sharing",e))):navigator.clipboard.writeText(e).then((()=>{alert("Link copied to clipboard!")})).catch((e=>{console.error("Failed to copy: ",e)}))},children:["Share Profile",(0,Dn.jsx)(Gn.g,{icon:Pn.ekB,className:"icon-inline-right"})]})})]})]})};var tk=e=>{let{show:a,onClose:n,userId:o}=e;const[i,r]=t.useState(!0),[s,l]=(0,t.useState)(null),[c,d]=(0,t.useState)([]),[u,h]=(0,t.useState)(null);(0,t.useEffect)((()=>{(async()=>{try{const e=await af.e.CreatePrivateUserByID(o);if(!e)throw new Error("User not found");l(e);const t=await e.getProfilePictureOptions();d(t)}catch(e){h("Could not load profile picture options.")}finally{r(!1)}})()}),[o]);return(0,Dn.jsxs)(Ap,{show:a,onHide:n,placement:"bottom",className:"ProfileChangeProfilePictureDrawer",children:[(0,Dn.jsx)(Ap.Header,{children:(0,Dn.jsxs)(Ap.Title,{children:["Change Profile Picture",(0,Dn.jsx)("div",{className:"offcanvas-close",onClick:n,children:(0,Dn.jsx)(Gn.g,{icon:Pn.yYc,className:""})})]})}),(0,Dn.jsx)(Ap.Body,{children:(0,Dn.jsx)("div",{className:"pfp-selection",children:i||!s?(0,Dn.jsx)(Zo,{message:"Loading your settings"}):(0,Dn.jsx)(Dn.Fragment,{children:c.map((e=>(0,Dn.jsxs)("div",{className:["pfp-option",!e.available&&"unavailable",e.id===s.GetProfilePictureId()&&"current"].filter(Boolean).join(" "),onClick:e.available?()=>(async e=>{if(s){r(!0);try{await s.updateProfilePicture(e)}catch(u){console.error("Error updating profile picture:",u),alert("Failed to update profile picture.")}finally{r(!1),n()}}})(e.id):void 0,children:[e.id!==s.GetProfilePictureId()&&(0,Dn.jsx)(Dn.Fragment,{children:"premium"==e.tier&&(0,Dn.jsx)(Gn.g,{icon:Pn.yy,className:"premium-icon"})}),e.id===s.GetProfilePictureId()&&(0,Dn.jsx)(Gn.g,{icon:Pn.e68,className:"selected-icon"}),(0,Dn.jsx)("img",{src:e.url,className:"sdv"+e.source_title}),e.source_title&&e.source_url&&(0,Dn.jsx)(Ln,{sourceTitle:e.source_title,sourceUrl:e.source_url,popoverSlug:e.url})]},e.id)))})})})]})};var ak=e=>{let{className:a=""}=e;const{id:n}=(0,zt.g)(),o=n?Number(n):NaN,{isLoggedIn:i,userId:r,authToken:s,loadingUser:l,SiteUser:c}=(0,ti.A)(),[d,u]=(0,t.useState)([]),[h,m]=(0,t.useState)(!0),[p,f]=(0,t.useState)(null),g=(0,t.useRef)(null),[y,_]=(0,t.useState)(!1);(0,t.useEffect)((()=>{if(!n||Number.isNaN(o))return f("Missing or invalid user id"),void m(!1);g.current&&g.current.abort();const e=new AbortController;g.current=e;return(async()=>{try{m(!0),f(null);const e=await gg.T.GetReportsByUser(o);u(e.slice())}catch(xC){var t;if("AbortError"===(null===xC||void 0===xC?void 0:xC.name))return;f(null!==(t=null===xC||void 0===xC?void 0:xC.message)&&void 0!==t?t:"Error Loading Games.")}finally{e.signal.aborted||m(!1)}})(),()=>{var e;return null===(e=g.current)||void 0===e?void 0:e.abort()}}),[n,o]);const[b,v]=(0,t.useState)(!1);return(0,Dn.jsxs)("div",{className:`ProfilePageGames ${a}`,children:[(0,Dn.jsxs)("div",{className:"profile-card",children:[(0,Dn.jsxs)("div",{className:"profile-card-head",children:["Games",r==o&&(0,Dn.jsx)("div",{className:"profile-card-head-action",onClick:()=>_(!0),children:(0,Dn.jsx)(Gn.g,{icon:Pn.QLR,className:""})})]}),(0,Dn.jsxs)("div",{className:"profile-card-content",children:[h&&(0,Dn.jsx)("div",{className:"LoadingOverlay-wrap-150",children:(0,Dn.jsx)(Zo,{message:"Loading Games"})}),p&&(0,Dn.jsx)("div",{className:"text-danger",children:p}),!h&&!p&&0===d.length&&(0,Dn.jsxs)("div",{className:"p-2 text-center",children:["No games found",(0,Dn.jsx)("br",{}),r==o&&(0,Dn.jsxs)("div",{className:"btn btn-primary btn-sm mt-3 mb-2",onClick:()=>_(!0),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.QLR,className:"me-2"}),"Add a game report"]})]}),!h&&!p&&d.length>0&&(0,Dn.jsx)(Dn.Fragment,{children:(b?d:d.slice(0,5)).map(((e,t)=>(0,Dn.jsx)(fg,{game:e,viewUserId:o==r?o:null,contextUserId:o},t)))}),d&&d.length>5&&!b&&(0,Dn.jsx)("div",{className:"show-more-button-wrap",onClick:()=>v(!0),children:(0,Dn.jsxs)("div",{className:"show-more-button",children:["Show all games",(0,Dn.jsx)(Gn.g,{icon:Pn.Jt$,className:"icon-inline-right-l"})]})})]})]}),(0,Dn.jsx)(vf,{show:y,onClose:()=>{_(!1)}})]})};var nk=()=>{const{id:e}=(0,zt.g)(),{isLoggedIn:a,userId:n,reloadIsLoggedIn:o,userSettings:i}=(0,ti.A)(),{state:r,pathname:s}=(0,zt.zy)(),l=(0,t.useRef)(0),c=(0,zt.Zp)();if(s.match("/.*/$"))return(0,Dn.jsx)(Yl,{});const[d,u]=(0,t.useState)(!1),[h,m]=(0,t.useState)(!1),[p,f]=(0,t.useState)(!1),[g,y]=t.useState(null),[_,b]=(0,t.useState)(!0),[v,w]=(0,t.useState)(0),[x,k]=(0,t.useState)(g instanceof Fx.X),[C,j]=(0,t.useState)(!1),[S,I]=(0,t.useState)(null),[A,N]=(0,t.useState)(null);async function E(){if(b(!0),o(),!e)return void b(!1);if(null!=n){const e=tf.y.getInstance();delete e.userObjectCache[n],delete e.userDataCache[n],delete e.callUserDataCache[n]}u(!0),j(!0);const t=++l.current;if(t!==l.current)return;let i=null;if(a&&Number(n)===Number(e)){const a=await af.e.CreatePrivateUserByID(Number(e));if(t!==l.current)return;a&&(i=a)}try{if(!i){const a=await af.e.CreatePublicUserByID(Number(e));if(t!==l.current)return;a&&(i=a)}t===l.current&&(y(i),k(i instanceof Fx.X),w((e=>e+1)),b(!1))}catch(xC){y(null),b(!1)}u(!1),j(!1),b(!1)}(0,t.useEffect)((()=>{e&&!Number.isNaN(Number(e))||c("/",{state:Date.now().toString()})}),[e,c]),(0,t.useEffect)((()=>{E()}),[n,e,r]),(0,t.useEffect)((()=>{1==a&&(++l.current,E())}),[a]),(0,t.useEffect)((()=>{!async function(){if(g&&n&&"IsUserFriend"in g){const e=await g.IsUserFriend(n);I(e)}}()}),[g,n]),(0,t.useEffect)((()=>{!async function(){if(g&&n&&g.ID!==n){if("IsUserFriend"in g&&"function"===typeof g.IsUserFriend){const e=await g.IsUserFriend(n);I(e)}if("HasUserFriendRequestReceived"in g&&"function"===typeof g.HasUserFriendRequestReceived){const e=await g.HasUserFriendRequestReceived(n);N(e)}}}()}),[g,n]);const T=async e=>{e||(e=null===g||void 0===g?void 0:g.GetUserId());try{u(!0),j(!0);const t=localStorage.getItem("jwtToken");if(!t)throw new Error("User is not authenticated");const a=await fetch(`${_n.a.URL}/wp-json/synod/v1/friends/request`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify({target_user_id:e})});if(!a.ok){const e=await a.text();throw Us.error("Friend request already sent."),u(!1),j(!1),N(!0),await E(),new Error(`Failed to request friend: ${e}`)}u(!1),j(!1),N(!0),Us.success("Friend request sent."),await E()}catch(xC){}};if(_)return(0,Dn.jsx)("div",{className:"LoadingOverlay-wrap-100vh",children:(0,Dn.jsx)(Zo,{message:"Loading User Data"})});if(null==g||void 0==g)return(0,Dn.jsx)(Yl,{});if(!e)return null;return(0,Dn.jsxs)("div",{className:"ProfilePage",children:[(0,Dn.jsx)(Jo,{title:`${(null===g||void 0===g?void 0:g.GetNickname())||"User"} - Profile Page`,description:(D=g,D?"View the public profile of "+(null===g||void 0===g?void 0:g.GetNickname())+": Warband stats, achievements, friends, and more from the Trench Companion community.":"User profile on Trench Companion")}),(0,Dn.jsx)("div",{className:"container",children:(0,Dn.jsxs)("div",{className:"row",children:[(0,Dn.jsxs)("div",{className:"col-12 col-lg-7",children:[(0,Dn.jsxs)("div",{className:"profile-intro",children:[x&&(0,Dn.jsx)(yn.A,{classes:"profile-settings-btn",link:"/profile/"+(null===g||void 0===g?void 0:g.GetUserId())+"/settings"||0,runfunc:()=>{c("/profile/"+(null===g||void 0===g?void 0:g.GetUserId())+"/settings"||0)},children:(0,Dn.jsx)(Gn.g,{icon:Pn.dB,className:"me-2"})}),x?(0,Dn.jsxs)("div",{className:"profile-image-wrap editable",onClick:()=>f(!0),children:[(0,Dn.jsx)(qx,{imageId:(null===g||void 0===g?void 0:g.GetProfilePictureImageId())||!1,className:"profile-image"}),(0,Dn.jsx)("div",{className:"edit-indicator",children:(0,Dn.jsx)(Gn.g,{icon:Pn.hpd})})]}):(0,Dn.jsx)(Dn.Fragment,{children:g instanceof Ox.A?(0,Dn.jsx)("div",{className:"profile-image-wrap",children:(0,Dn.jsx)(Zl,{imageId:(null===g||void 0===g?void 0:g.GetProfilePictureImageId())||0,size:"large",className:"profile-image"})}):(0,Dn.jsx)("div",{className:"profile-image-wrap",children:(0,Dn.jsx)(Zl,{imageId:0,size:"large",className:"profile-image"})})}),(0,Dn.jsxs)("div",{className:"profile-intro-text",children:[(0,Dn.jsx)("h1",{className:"profile-name",children:(0,Dn.jsx)(eg,{name:(null===g||void 0===g?void 0:g.GetNickname())||"Loading...",statusString:null===g||void 0===g?void 0:g.GetUserStatus(),isPremium:null===g||void 0===g?void 0:g.IsPremium()})}),(0,Dn.jsxs)("div",{className:"profile-stats",children:[(0,Dn.jsxs)("div",{className:"rating-wrap",children:[(0,Dn.jsxs)("div",{className:"rating",children:[(0,Dn.jsx)("div",{className:"rating-val",children:null!==g&&void 0!==g&&g.GetUserStatus().toLowerCase().includes("supporter")||null!==g&&void 0!==g&&g.IsPremium()?(0,Dn.jsx)(Dn.Fragment,{children:null===g||void 0===g?void 0:g.GetRating()}):(0,Dn.jsx)(Rx,{popoverText:"The Trench Rating is only visible for premium members.",trigger:(0,Dn.jsx)("div",{className:"px-2",children:(0,Dn.jsx)(Gn.g,{icon:Pn.DW4,className:"locked"})}),id:(null===g||void 0===g?void 0:g.GetUserId())+"achievement-lock"})}),(0,Dn.jsx)("div",{className:"rating-label",children:"Trench Rating"})]}),(0,Dn.jsxs)("div",{className:"rating",children:[(0,Dn.jsx)("div",{className:"rating-val",children:null!==g&&void 0!==g&&g.GetUserStatus().toLowerCase().includes("supporter")||null!==g&&void 0!==g&&g.IsPremium()?(0,Dn.jsx)(Dn.Fragment,{children:null===g||void 0===g?void 0:g.GetMMR()}):(0,Dn.jsx)(Rx,{popoverText:"MMR is visible for premium members only.",trigger:(0,Dn.jsx)("div",{className:"px-2",children:(0,Dn.jsx)(Gn.g,{icon:Pn.DW4,className:"locked"})}),id:(null===g||void 0===g?void 0:g.GetUserId())+"achievement-lock"})}),(0,Dn.jsx)("div",{className:"rating-label",children:"MMR"})]})]}),(0,Dn.jsx)("div",{className:"bottom-actions",children:x?(0,Dn.jsx)(Dn.Fragment,{children:(0,Dn.jsxs)("div",{className:"btn btn-secondary w-100",onClick:()=>m(!0),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.ekB,className:"me-2"}),"Share"]})}):(0,Dn.jsx)(Dn.Fragment,{children:a&&(0,Dn.jsx)(Dn.Fragment,{children:d?(0,Dn.jsx)(Dn.Fragment,{}):(0,Dn.jsx)(Dn.Fragment,{children:S?(0,Dn.jsxs)("div",{className:"friend-indicator",children:[(0,Dn.jsx)(Gn.g,{icon:Pn.e68,className:"me-2"}),"Friends"]}):(0,Dn.jsx)(Dn.Fragment,{children:A?(0,Dn.jsxs)("div",{className:"friend-indicator",children:[(0,Dn.jsx)(Gn.g,{icon:Pn.e68,className:"me-2"}),"Friend request sent"]}):(0,Dn.jsxs)("button",{className:"btn btn-primary w-100",onClick:()=>T(),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.QLR,className:"icon-inline-left"}),"Add Friend"]})})})})})})]})]})]},v),(0,Dn.jsxs)("div",{className:"hide-lg-up",children:[(0,Dn.jsx)(Mx,{userData:g}),(0,Dn.jsx)(Wx,{userData:g,onAddFriend:T,isLoading:C,reload:E},v)]}),(0,Dn.jsx)(Xx,{userData:g}),(0,Dn.jsx)($x,{userData:g}),(0,Dn.jsx)(ak,{})]}),(0,Dn.jsx)("div",{className:"col-12 col-lg-5",children:(0,Dn.jsxs)("div",{className:"hide-lg-down",children:[(0,Dn.jsx)(Mx,{userData:g}),(0,Dn.jsx)(Wx,{userData:g,onAddFriend:T,isLoading:C,reload:E},v)]})})]})}),g instanceof Fx.X&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(ek,{userId:parseInt(e),show:h,onClose:()=>m(!1)}),g&&(0,Dn.jsx)(tk,{userId:parseInt(e),show:p,onClose:()=>{if(f(!1),null!=n){const e=tf.y.getInstance();delete e.userObjectCache[n],delete e.userDataCache[n],delete e.callUserDataCache[n]}c("",{state:Date.now().toString()})}})]})]});var D};var ok=()=>{const e=(0,zt.Zp)(),{userId:t,isLoggedIn:a}=(0,ti.A)(),n=(0,zt.zy)(),o=n.pathname.startsWith("/warband/")&&"/warband"!==n.pathname&&"/warband/"!==n.pathname,i=[{title:"Trench Crusade Rules",links:[{title:"Core Rules",link:"/compendium/core-rules"},{title:"Factions",link:"/compendium/warbands"},{title:"Campaign Rules",link:"/compendium/campaigns/campaign-rules"},{title:"Scenarios",link:"/compendium/scenarios"}]},{title:"Account",links:[{title:"Your Profile",link:a&&t?`/profile/${t}`:"/login"},{title:"Your Warbands",link:"/warband"},{title:"Account Settings",link:a&&t?`/profile/${t}/settings`:"/login"},{title:"Support us",link:Ga},{title:"Collaborations",link:Fa}]},{title:"Legal Information",links:[{title:"Legal Notice",link:Ta},{title:"Privacy",link:Da},{title:"Terms & Conditions",link:Ra},{title:"Withdrawal",link:Oa}]},{title:"Trench Companion",links:[{title:"About",link:qa},{title:"Contact",link:Ma}]}],r=e=>{e.preventDefault(),"undefined"!==typeof window&&window.__cmp?window.__cmp("showModal"):"undefined"!==typeof window&&window.__uspapi?window.__uspapi("displayUspUi"):console.warn("Privacy CMP not loaded.")};return(0,Dn.jsxs)("footer",{className:"FooterMain",children:[!o&&(0,Dn.jsx)("div",{className:"footer-upper",children:(0,Dn.jsx)("div",{className:"container",children:(0,Dn.jsx)("div",{className:"row",children:i.map(((t,a)=>(0,Dn.jsx)("div",{className:"col-12 col-sm-6 col-lg-3",children:(0,Dn.jsxs)("div",{className:"footer-link-list",children:[(0,Dn.jsx)("h6",{children:t.title}),(0,Dn.jsxs)("ul",{children:[t.links.map(((t,a)=>(0,Dn.jsx)("li",{children:(0,Dn.jsx)(yn.A,{link:t.link,runfunc:()=>{e(t.link)},children:t.title})},a))),"Legal Information"===t.title&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("li",{children:(0,Dn.jsx)("a",{href:"#",onClick:e=>{e.preventDefault(),window.__cmp?window.__cmp("showModal"):console.log("CMP not available (User likely not in EU or blocked)")},className:"footer-link-privacy",children:"Privacy Settings"})}),(0,Dn.jsx)("li",{children:(0,Dn.jsx)("a",{href:"#",onClick:r,className:"footer-link-privacy",children:"Do Not Sell My Personal Information"})})]})]})]})},a)))})})}),(0,Dn.jsx)("div",{className:"footer-bar",children:(0,Dn.jsxs)("div",{className:"container",children:[(0,Dn.jsx)(yn.A,{link:Ta,runfunc:()=>{e(Ta)},children:"Legal Notice"}),(0,Dn.jsx)(yn.A,{link:Da,runfunc:()=>{e(Da)},children:"Privacy"}),(0,Dn.jsx)(yn.A,{link:Ra,runfunc:()=>{e(Ra)},children:"Terms & Conditions"})]})})]})};var ik=()=>(0,Dn.jsxs)("div",{className:"StaticPrivacy page-static",children:[(0,Dn.jsx)(Jo,{title:"Privacy",description:"We value your privacy - Privacy Policy for Trench Companion"}),(0,Dn.jsxs)("div",{className:"container",children:[(0,Dn.jsx)("h1",{children:"Privacy Policy for Trench Companion"}),(0,Dn.jsx)("p",{children:"At Trench Companion, accessible at trench-companion.com, one of our main priorities is the privacy of our visitors. This Privacy Policy document contains types of information that is collected and recorded by Trench Companion and how we use it.\nIf you have additional questions or require more information about our Privacy Policy, do not hesitate to contact us through email at info@trench-companion.com\nThis privacy policy applies only to our online activities and is valid for visitors to our website with regards to the information that they shared and/or collect in Trench Companion. This policy is not applicable to any information collected offline or via channels other than this website."}),(0,Dn.jsx)("h2",{children:"Consent"}),(0,Dn.jsxs)("p",{children:["By using our website, you hereby consent to our Privacy Policy and agree to its terms.",(0,Dn.jsx)("br",{}),(0,Dn.jsx)("div",{className:"btn btn-secondary btn-sm me-3 my-3",onClick:()=>{window.klaro&&window.klaro.show()},children:"Change Privacy Settings"})]}),(0,Dn.jsx)("h2",{children:"Information we collect"}),(0,Dn.jsx)("p",{children:"The personal information that you are asked to provide, and the reasons why you are asked to provide it, will be made clear to you at the point we ask you to provide your personal information.\nIf you contact us directly, we may receive additional information about you such as your name, email address, phone number, the contents of the message and/or attachments you may send us, and any other information you may choose to provide.\nWhen you register for an Account, we may ask for your contact information, including items such as name, company name, address, email address, and telephone number."}),(0,Dn.jsx)("h2",{children:"How we use your information"}),(0,Dn.jsx)("p",{children:"We use the information we collect in various ways, including to:\n\nProvide, operate, and maintain our website\nImprove, personalize, and expand our website\nUnderstand and analyze how you use our website\nDevelop new products, services, features, and functionality\nCommunicate with you, either directly or through one of our partners, including for customer service, to provide you with updates and other information relating to the website, and for marketing and promotional purposes\nSend you emails"}),(0,Dn.jsx)("h2",{children:"Log Files"}),(0,Dn.jsx)("p",{children:"Trench Companion follows a standard procedure of using log files. These files log visitors when they visit websites. All hosting companies do this and a part of hosting services' analytics. The information collected by log files include internet protocol (IP) addresses, browser type, Internet Service Provider (ISP), date and time stamp, referring/exit pages, and possibly the number of clicks. These are not linked to any information that is personally identifiable. The purpose of the information is for analyzing trends, administering the site, tracking users' movement on the website, and gathering demographic information."}),(0,Dn.jsx)("h2",{children:"Cookies and Web Beacons"}),(0,Dn.jsx)("p",{children:"Like any other website, Trench Companion uses \u2018cookies'. These cookies are used to store information including visitors' preferences, and the pages on the website that the visitor accessed or visited. The information is used to optimize the users' experience by customizing our web page content based on visitors' browser type and/or other information."}),(0,Dn.jsx)("h2",{children:"Ezoic Services"}),(0,Dn.jsxs)("p",{children:["Ezoic Services",(0,Dn.jsx)("br",{}),"This website uses the services of Ezoic Inc. (\u201cEzoic\u201d), including to manage third-party interest-based advertising. Ezoic may employ a variety of technologies on this website, including tools to serve content, display advertisements and enable advertising to visitors of this website, which may utilize first and third-party cookies.",(0,Dn.jsx)("br",{}),"A cookie is a small text file sent to your device by a web server that enables the website to remember information about your browsing activity. First-party cookies are created by the site you are visiting, while third-party cookies are set by domains other than the one you're visiting. Ezoic and our partners may place third-party cookies, tags, beacons, pixels, and similar technologies to monitor interactions with advertisements and optimize ad targeting.  Please note that disabling cookies may limit access to certain content and features on the website, and rejecting cookies does not eliminate advertisements but will result in non-personalized advertising. You can find more information about cookies and how to manage them ",(0,Dn.jsx)("a",{rel:"noreferrer noopener nofollow",href:"https://allaboutcookies.org/",target:"_blank",children:"here"}),".",(0,Dn.jsx)("br",{}),"The following information may be collected, used, and stored in a cookie when serving personalized ads:"]}),(0,Dn.jsxs)("ul",{children:[(0,Dn.jsx)("li",{children:"IP address"}),(0,Dn.jsx)("li",{children:"Operating system type and version"}),(0,Dn.jsx)("li",{children:"Device type"}),(0,Dn.jsx)("li",{children:"Language preferences"}),(0,Dn.jsx)("li",{children:"Web browser type"}),(0,Dn.jsx)("li",{children:"Email (in a hashed or encrypted form)"})]}),(0,Dn.jsxs)("p",{children:["Ezoic and its partners may use this data in combination with information that has been independently collected to deliver targeted advertisements across various platforms and websites. Ezoic\u2019s partners may also gather additional data, such as unique IDs, advertising IDs, geolocation data, usage data, device information, traffic data, referral sources, and interactions between users and websites or advertisements, to create audience segments for targeted advertising across different devices, browsers, and apps. You can find more information about interest-based advertising and how to manage them ",(0,Dn.jsx)("a",{rel:"noreferrer noopener nofollow",href:"https://youradchoices.com/",target:"_blank",children:"here"}),".",(0,Dn.jsx)("br",{}),"You can view Ezoic\u2019s privacy policy ",(0,Dn.jsx)("a",{rel:"noreferrer noopener nofollow",href:"https://ezoic.com/privacy/",target:"_blank",children:"here"}),", or for additional information about Ezoic\u2019s advertising and other partners, you can view Ezoic\u2019s advertising partners ",(0,Dn.jsx)("a",{rel:"noreferrer noopener nofollow",href:"https://www.ezoic.com/privacy-policy/advertising-partners/",target:"_blank",children:"here"}),"."]}),(0,Dn.jsx)("h2",{children:"DoubleClick DART Cookie"}),(0,Dn.jsx)("p",{children:"Google is one of a third-party vendor on our site. It also uses cookies, known as DART cookies, to serve ads to our site visitors based upon their visit to trench-companion.com and other sites on the internet. However, visitors may choose to decline the use of DART cookies by visiting the Google ad and content network Privacy Policy at the following URL \u2013 https://policies.google.com/technologies/ads.\nGoogle\nhttps://policies.google.com/technologies/ads"}),(0,Dn.jsx)("h2",{children:"Advertising Partners Privacy Policies"}),(0,Dn.jsx)("p",{children:"You may consult this list to find the Privacy Policy for each of the advertising partners of Trench Companion.\n\nThird-party ad servers or ad networks uses technologies like cookies, JavaScript, or Web Beacons that are used in their respective advertisements and links that appear on Trench Companion, which are sent directly to users' browser. They automatically receive your IP address when this occurs. These technologies are used to measure the effectiveness of their advertising campaigns and/or to personalize the advertising content that you see on websites that you visit.\n\nNote that Trench Companion has no access to or control over these cookies that are used by third-party advertisers."}),(0,Dn.jsx)("h2",{children:"Third-Party Privacy Policies"}),(0,Dn.jsx)("p",{children:"Trench Companion's Privacy Policy does not apply to other advertisers or websites. Thus, we are advising you to consult the respective Privacy Policies of these third-party ad servers for more detailed information. It may include their practices and instructions about how to opt-out of certain options. You may find a complete list of these Privacy Policies and their links here: Privacy Policy Links.\n\nYou can choose to disable cookies through your individual browser options. To know more detailed information about cookie management with specific web browsers, it can be found at the browsers' respective websites. What Are Cookies?"}),(0,Dn.jsx)("h2",{children:"CCPA Privacy Policy (Do Not Sell My Personal Information)"}),(0,Dn.jsx)("p",{children:"Under the CCPA, among other rights, California consumers have the right to:\n\nRequest that a business that collects a consumer's personal data disclose the categories and specific pieces of personal data that a business has collected about consumers.\n\nRequest that a business delete any personal data about the consumer that a business has collected.\n\nRequest that a business that sells a consumer's personal data, not sell the consumer's personal data.\n\nIf you make a request, we have one month to respond to you. If you would like to exercise any of these rights, please contact us."}),(0,Dn.jsx)("h2",{children:"GDPR Privacy Policy (Data Protection Rights)"}),(0,Dn.jsx)("p",{children:"We would like to make sure you are fully aware of all of your data protection rights. Every user is entitled to the following:\n\nThe right to access \u2013 You have the right to request copies of your personal data. We may charge you a small fee for this service.\n\nThe right to rectification \u2013 You have the right to request that we correct any information you believe is inaccurate. You also have the right to request that we complete the information you believe is incomplete.\n\nThe right to erasure \u2013 You have the right to request that we erase your personal data, under certain conditions.\n\nThe right to restrict processing \u2013 You have the right to request that we restrict the processing of your personal data, under certain conditions.\n\nThe right to object to processing \u2013 You have the right to object to our processing of your personal data, under certain conditions.\n\nThe right to data portability \u2013 You have the right to request that we transfer the data that we have collected to another organization, or directly to you, under certain conditions.\n\nIf you make a request, we have one month to respond to you. If you would like to exercise any of these rights, please contact us."}),(0,Dn.jsx)("h2",{children:"Children's Information"}),(0,Dn.jsx)("p",{children:"Another part of our priority is adding protection for children while using the internet. We encourage parents and guardians to observe, participate in, and/or monitor and guide their online activity.\n\nTrench Companion does not knowingly collect any Personal Identifiable Information from children under the age of 13. If you think that your child provided this kind of information on our website, we strongly encourage you to contact us immediately and we will do our best efforts to promptly remove such information from our records."})]})]});var rk=e=>{let{content:t,className:a=""}=e;return(0,Dn.jsx)("p",{className:`StaticParagraph ${a}`,children:t})};var sk=e=>{let{content:t,imageId:a,className:n=""}=e;return(0,Dn.jsxs)("div",{className:`StaticImageText1 ${n}`,children:[(0,Dn.jsx)("div",{className:"image-wrap",children:(0,Dn.jsx)(Wn,{imageId:a,size:"full"})}),(0,Dn.jsx)("div",{className:"text-wrap",children:t})]})};var lk=e=>{let{title:a,content:n}=e;const[o,i]=(0,t.useState)(false);return(0,Dn.jsxs)("div",{className:"StaticFaq",children:[(0,Dn.jsxs)("div",{className:"StaticFaq-title",onClick:()=>{i(!o)},children:[(0,Dn.jsx)("span",{className:"text",children:a}),(0,Dn.jsx)("span",{className:"collapse-chevron-wrap",children:(0,Dn.jsx)(Gn.g,{icon:o?Pn.w2A:Pn.Jt$,className:""})})]}),(0,Dn.jsx)(ll.A,{in:o,children:(0,Dn.jsx)("div",{className:"StaticFaq-content",children:(0,Dn.jsx)("div",{className:"StaticFaq-content-inner",children:n})})})]})};var ck=()=>{const e=(0,zt.Zp)();return(0,Dn.jsxs)("div",{className:"StaticPremiumMembership page-static",children:[(0,Dn.jsx)(Jo,{title:"Premium Membership",description:"Support the Trench Companion app and unlock exclusive perks with our premium membership. Enjoy an ad-free experience while helping us improve and expand the platform."}),(0,Dn.jsxs)("div",{className:"container content-narrow",children:[(0,Dn.jsx)("h1",{className:"mb-2",children:"Support Trench Companion"}),(0,Dn.jsx)("h2",{className:"mb-4",children:"- Premium Membership"}),(0,Dn.jsx)(rk,{content:(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("strong",{children:"Trench Companion is a labor of love \u2014 built by and for the Trench Crusade community."}),(0,Dn.jsx)("br",{}),"Our Premium Membership exists for one reason: to keep this project alive and growing. It helps cover server costs, fund development time, and lets us focus on creating the tools and features you actually care about. You\u2019ll unlock small perks with your supporter status, but most importantly, you\u2019re making this app possible. No paywalls. No tricks. Just community-powered progress. Thank you. \u2764\ufe0f",(0,Dn.jsx)("span",{className:"d-block spacer-20"}),(0,Dn.jsx)(yn.A,{classes:"btn btn-primary",link:"/page/plan-selection",runfunc:()=>{e("/page/plan-selection")},children:"Support the Project"})]})}),(0,Dn.jsx)(sk,{content:(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("h2",{children:"Affordable Support"}),(0,Dn.jsx)("h3",{children:"Only $1.99"}),(0,Dn.jsx)("p",{children:"It's a small, recurring monthly contribution \u2014 but it makes a big difference. Your support helps us keep the app alive and improving."})]}),imageId:2854}),(0,Dn.jsx)(sk,{content:(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("h2",{children:"Cancel at any time"}),(0,Dn.jsx)("p",{children:"We believe in earning your support \u2014 not locking you in.  You can cancel your premium membership at any time, no questions asked. You'll continue to enjoy premium benefits until the end of your billing cycle, and you\u2019re always welcome back."})]}),imageId:2756,className:"swap"}),(0,Dn.jsx)(sk,{content:(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("h2",{className:"mb-1",children:"Customize your Experience"}),(0,Dn.jsx)("h3",{className:"mb-3",children:"Coming Soon"}),(0,Dn.jsxs)("p",{children:["Premium members will be able to personalize their experience by uploading custom images to their warbands and profiles. Showcase your painted miniatures  \u2014 and make your creations truly yours. It's your warband, your style.",(0,Dn.jsx)("br",{}),(0,Dn.jsx)("br",{}),"Only with your support, we will be able to create this feature."]})]}),imageId:2888}),(0,Dn.jsx)(sk,{content:(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("h2",{className:"mb-1",children:"Additional Benefits"}),(0,Dn.jsx)("h3",{className:"mb-3",children:"Coming Soon"}),(0,Dn.jsx)("p",{children:"As we develop new features for everybody, we don't want to forget about our most saintly supporters. We plan to create excluive and interesting features and benefits for our supporters - inside our app and beyond it. We aim to provide the most value possible for our supporters."})]}),imageId:2856,className:"swap"}),(0,Dn.jsx)(sk,{content:(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("h2",{children:"No Ads, Just Game"}),(0,Dn.jsxs)("p",{children:["Ads help us cover basic server and maintenance costs \u2013 but if you're supporting us directly, we\u2019re happy to turn them off entirely for you.",(0,Dn.jsx)("br",{}),(0,Dn.jsx)("br",{}),"As a supporter, you'll enjoy a completely ad-free experience. We disable all ads for premium members to keep your interface clean, focused, and immersive \u2014 so you can explore, build, and play without distraction."]})]}),imageId:38}),(0,Dn.jsx)("h2",{children:"Frequently asked questions"}),(0,Dn.jsx)(lk,{title:"How do you handle the payment?",content:(0,Dn.jsx)(Dn.Fragment,{children:"Currently the payment is realized by using PayPal Subscription. "})}),(0,Dn.jsx)(lk,{title:"How can I subscribe?",content:(0,Dn.jsx)(Dn.Fragment,{children:"You find the subscription options in your profile settings."})}),(0,Dn.jsx)(lk,{title:"How can I cancel my subscription?",content:(0,Dn.jsx)(Dn.Fragment,{children:"You can cancel your subscription in your profile settings or by cancelling in your PayPal dashboard."})}),(0,Dn.jsx)(lk,{title:"What happens to my uploaded images when i cancel my subscription?",content:(0,Dn.jsx)(Dn.Fragment,{children:"The Images you have uploaded will stay on your profile. You will not be able to upload any new images when you are not subscribed."})}),(0,Dn.jsx)(lk,{title:"What happens to my customization options, when I cancel my subscription?",content:(0,Dn.jsx)(Dn.Fragment,{children:"Your Profile status and customization options will be reset to the ones available to free members after your last billing cycle has ended."})})]})]})};var dk=()=>(0,Dn.jsx)("div",{className:"StaticSupporterPacks page-static",children:(0,Dn.jsxs)("div",{className:"container content-narrow",children:[(0,Dn.jsx)("h1",{children:"Supporter Packs"}),(0,Dn.jsx)(rk,{content:(0,Dn.jsx)(Dn.Fragment,{children:"The Supporter Pack is your chance to make a meaningful contribution to the development of Trench Companion. By purchasing a one-time pack for $50, you directly support continued improvements, server costs, and new features \u2014 all while keeping the platform ad-free and up to date. The supporter packs are 100% voluntary and we are very grateful for any support we can get."})}),(0,Dn.jsx)(rk,{content:(0,Dn.jsx)(Dn.Fragment,{children:""})}),(0,Dn.jsx)(sk,{content:(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("h2",{children:"What you get"}),(0,Dn.jsx)("h5",{children:"When you purchase a supporter pack, you will receive"}),(0,Dn.jsxs)("ul",{children:[(0,Dn.jsx)("li",{children:"One year premium membership"}),(0,Dn.jsx)("li",{children:"Exclusive UI Skins"}),(0,Dn.jsx)("li",{children:"Premium Profile Pictures & Frames"}),(0,Dn.jsx)("li",{children:"Recognition & Gratitude"})]})]}),imageId:268}),(0,Dn.jsx)(sk,{content:(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("h2",{children:"Why It Matters"}),(0,Dn.jsx)("p",{children:"Supporter packs are not about unlocking content \u2014 they're about supporting a passion project. Your one-time contribution helps us fund development, test new tools, and keep the app growing in the hands of hobbyists \u2014 not advertisers."})]}),imageId:266,className:"swap"}),(0,Dn.jsx)(sk,{content:(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("h2",{children:"Our eternal gratitude"}),(0,Dn.jsxs)("p",{children:["To show our gratitude we want to offer as many bonus features to our supporters without hiding any content of the app behind a paywall. ",(0,Dn.jsx)("br",{}),"We plan to offer exclusive STL files, UI skins, customization options and promotions to our loyal supporters. Keep in mind, the app is still fresh and in active development - so not all features are present at the moment. Your early support will help us build the best wargaming app."]})]}),imageId:267}),(0,Dn.jsx)("h2",{children:"Frequently asked questions"}),(0,Dn.jsx)(lk,{title:"How do you handle the payment?",content:(0,Dn.jsx)(Dn.Fragment,{children:"Currently the payment is realized by using PayPal."})}),(0,Dn.jsx)(lk,{title:"What happens, when the 1-year membership expires?",content:(0,Dn.jsx)(Dn.Fragment,{children:"Your account will be turned into a free member account after the 1-year membership has expired. However, you will keep all customization options, which you have unlocked with the purchase of the supporter pack."})}),(0,Dn.jsx)(lk,{title:"How do i regain membership status after the 1-year period?",content:(0,Dn.jsx)(Dn.Fragment,{children:"You can subscribe to be a to a premium member and regain the paid member status. Alternatively you can purchase another supporter pack for another 1-year membership. As we plan to release more and more meaningful content and goodies for our most loyal supporters, this will be worth looking into."})}),(0,Dn.jsx)(lk,{title:"What happens when new goodies are released for my supporter pack?",content:(0,Dn.jsx)(Dn.Fragment,{children:"Any new content for supporter packs will be available to you in the future, if you purchased a supporter pack in the past. As we are still in early development, we do not want to make any promises, we can't keep, but assure you, that we plan to release many interesting benefits for our supporters."})})]})});var uk=()=>(0,Dn.jsx)("div",{className:"StaticCollaborate page-static",children:(0,Dn.jsxs)("div",{className:"container content-narrow",children:[(0,Dn.jsx)(Jo,{title:"Collaborate with us",description:"Trench Companion collaboration"}),(0,Dn.jsx)("h1",{children:"Collaboration"}),(0,Dn.jsx)(rk,{content:(0,Dn.jsx)(Dn.Fragment,{children:"We\u2019re building a strong creative community around the world of Trench Crusade \u2014 and we\u2019re looking for passionate collaborators to join us. Whether you're a 3D sculptor, miniature painter, or a hobby accessory manufacturer, we want to work with you to bring unique content, art, and tools to our players. Let\u2019s create something incredible together."})}),(0,Dn.jsx)(sk,{content:(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("h2",{children:"3D Sculptors"}),(0,Dn.jsxs)("p",{children:["You are a 3D sculptor? We would love to work with you! We offer redeemable codes for our premium membership, which you can offer to your patreons or tribe members as an additional goodie. ",(0,Dn.jsx)("br",{}),"Additionally, we would like to offer exclusive sculpts to our supporters. Maybe you are interested in working on a very special release to promote your work and get involved in the Trench Companion Community."]})]}),imageId:270}),(0,Dn.jsx)(sk,{content:(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("h2",{children:"Miniature Painters"}),(0,Dn.jsx)("p",{children:"You might have notived, that the images for models in our app are all painted by talented members of the Trench Crusade community. If you would like your models to be featured in Trench Companion, don't hesitate to contact us."})]}),imageId:269,className:"swap"}),(0,Dn.jsx)(sk,{content:(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("h2",{children:"Manufacturers"}),(0,Dn.jsx)("p",{children:"Do you have a product that is compatible with or even specifically made for Trench Crusade? It would be a pleasure for us to promote awesome products on our page and maybe even collaborate on a project with you. No matter if you are selling dice, transport solutions, terrain, accessories or something more unique - we are very interested in what you have to offer."})]}),imageId:2869}),(0,Dn.jsx)("h2",{children:"Frequently asked questions"}),(0,Dn.jsx)(lk,{title:"How do I contact you?",content:(0,Dn.jsx)(Dn.Fragment,{children:"You can simply write your inquiry at info@trench-companion.com"})}),(0,Dn.jsx)(lk,{title:"How do I get my paintjob featured in Trench Companion?",content:(0,Dn.jsx)(Dn.Fragment,{children:"Please contact us via email and submit an example of your work. We are not looking for the very best paint jobs in the world and are happy about any submitted content."})}),(0,Dn.jsx)(lk,{title:"How is my work credited?",content:(0,Dn.jsx)(Dn.Fragment,{children:"We will put your name and a link to your work near the image. Wherever a community image is used, users can clearly see your name."})})]})});var hk=e=>{let{onSuccess:a,planId:n}=e;const o=(0,t.useRef)(null),i=(0,t.useRef)(!1),r="paypal-js-sdk";return(0,t.useEffect)((()=>{function e(){!i.current&&o.current&&window.paypal&&o.current&&(window.paypal.Buttons({createSubscription:function(e,t){return t.subscription.create({plan_id:n,application_context:{shipping_preference:"GET_FROM_FILE"}})},onApprove:function(e){console.log("Subscription approved:",e),async function(e,t){console.log("Handling approval internally: ",e);const n=localStorage.getItem("jwtToken");try{const a=await hx.post(`${_n.a.URL}/wp-json/synod-payment/v1/create-subscription`,{meta:{paypal_subscription_id:e,paypal_plan_id:t}},{headers:{Authorization:`Bearer ${n}`,"Content-Type":"application/json"}});console.log("Subscription created successfully!",a.data.id)}catch(r){var o,i;console.error("Error creating subscription:",null===(o=r.response)||void 0===o||null===(i=o.data)||void 0===i?void 0:i.message)}a&&a(e)}(e.subscriptionID,n)},onError:function(e){console.error("PayPal error:",e)}}).render(o.current),i.current=!0)}if(document.getElementById(r))e();else{const t=document.createElement("script");t.src=`https://www.paypal.com/sdk/js?client-id=${_n.a.PP_CLIENT_ID}&vault=true&intent=subscription`,t.id=r,t.addEventListener("load",e),document.body.appendChild(t)}}),[n,a]),(0,Dn.jsx)("div",{ref:o})};var mk=()=>{const e=(0,zt.Zp)(),{isLoggedIn:a,userId:n,authToken:o,loadingUser:i,SiteUser:r}=(0,ti.A)(),s=(e,t)=>{let a="",n=0;t==_n.a.PP_PLAN_MONTH_ID&&(a="monthly_plan",n=1.99),t==_n.a.PP_PLAN_YEAR_ID&&(a="yearly_plan",n=19.99),alert("Subscription successful with ID: "+e),setTimeout((()=>{window.location.reload()}),1500)},[l,c]=(0,t.useState)(!1),d=()=>c(!1),u=["Get the first monthly membership for free","Cancel any time - no questions asked","Billed monthly","Enjoy an ad-free experience","Unlock extra features for your account"],[h,m]=(0,t.useState)(!1),[p,f]=(0,t.useState)(!1),g=h&&p,[y,_]=(0,t.useState)(!1),b=()=>_(!1),v=["Save over 15% on your subscription","Cancel any time - no questions asked","Billed yearly","Enjoy an ad-free experience","Unlock extra features for your account"],[w,x]=(0,t.useState)(!1),[k,C]=(0,t.useState)(!1),j=w&&k;return i?(0,Dn.jsx)("div",{className:"StaticPlanSelection",children:(0,Dn.jsx)("div",{className:"LoadingOverlay-wrap-100vh",children:(0,Dn.jsx)(Zo,{message:"Loading your Membership"})})}):r?(0,Dn.jsxs)("div",{className:"StaticPlanSelection page-static",children:[(0,Dn.jsx)(Jo,{title:"Supporter Plans",description:"Choose your Trench Companion supporter plan and help us build the best companion app for Trench Crusade. Unlock exclusive perks and go ad-free."}),(0,Dn.jsx)("div",{className:"container",children:(0,Dn.jsxs)("h1",{children:[(0,Dn.jsx)("a",{className:"headline-back-btn",href:"/profile/"+n,onClick:()=>e("/profile/"+n),children:(0,Dn.jsx)(Gn.g,{icon:Pn.Wzs,className:""})}),"Subscription Plans"]})}),(0,Dn.jsxs)("div",{className:"container",children:[(0,Dn.jsxs)("div",{className:"PlanSelectionItem "+(r.GetPlanID()===_n.a.PP_PLAN_MONTH_ID||r.GetPlanID()===_n.a.PP_PLAN_MONTH_ID_LIVE?"current-plan":""),children:[(0,Dn.jsx)("h2",{children:_n.a.PLAN_M_NAME}),(r.GetPlanID()===_n.a.PP_PLAN_MONTH_ID||r.GetPlanID()===_n.a.PP_PLAN_MONTH_ID_LIVE)&&(0,Dn.jsxs)("div",{className:"current-plan-hint",children:[(0,Dn.jsx)(Gn.g,{icon:Pn.e68,className:"icon-inline-left-l"}),"Your Current Plan"]}),(0,Dn.jsx)("ul",{className:"details-list",children:u.map(((e,t)=>(0,Dn.jsxs)("li",{children:[(0,Dn.jsx)("img",{src:Cx,alt:"Icon",className:"icon",width:20,height:20}),e]},t)))}),(0,Dn.jsxs)("div",{className:"price-details",children:[(0,Dn.jsxs)("div",{className:"price-main",children:[(0,Dn.jsx)("span",{className:"price-value",children:"$1.99"}),(0,Dn.jsx)("span",{className:"price-cycle",children:" / month"})]}),(0,Dn.jsx)("div",{className:"price-sub",children:"*VAT included"})]}),r.GetPlanID()!=_n.a.PP_PLAN_MONTH_ID&&r.GetPlanID()!=_n.a.PP_PLAN_MONTH_ID_LIVE&&(0,Dn.jsxs)("button",{className:"btn btn-primary select-plan-btn",onClick:()=>c(!0),children:["Select Plan",(0,Dn.jsx)(Gn.g,{icon:Pn.XkK,className:"icon-inline-right-l"})]}),(0,Dn.jsxs)(Il.A,{show:l,size:"lg",contentClassName:"purchaseSubModal purchaseSubModalMonthly",dialogClassName:"",keyboard:!0,onhide:d,centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:_n.a.PLAN_M_NAME}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:d})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsx)("div",{className:"benefits-wrap",children:(0,Dn.jsx)("ul",{className:"benefits-list",children:u.map(((e,t)=>(0,Dn.jsxs)("li",{children:[(0,Dn.jsx)("img",{src:Cx,alt:"Icon",className:"icon",width:20,height:20}),e]},t)))})}),(0,Dn.jsxs)("div",{className:"details-wrap",children:[(0,Dn.jsx)("div",{className:"details-wrap-headline",children:"Product Details"}),(0,Dn.jsxs)("ul",{className:"details-list",children:[(0,Dn.jsxs)("li",{children:[(0,Dn.jsx)("span",{className:"label",children:"Billing cycle: "}),(0,Dn.jsx)("span",{children:"monthly"})]}),(0,Dn.jsxs)("li",{children:[(0,Dn.jsx)("span",{className:"label",children:"Payment via: "}),(0,Dn.jsx)("span",{children:"Paypal"})]}),(0,Dn.jsxs)("li",{children:[(0,Dn.jsx)("span",{className:"label",children:"Price: "}),(0,Dn.jsx)("span",{children:"$1.99 / month (VAT included)"})]}),(0,Dn.jsxs)("li",{children:[(0,Dn.jsx)("span",{className:"label",children:"Cancellation: "}),(0,Dn.jsx)("span",{children:"The subscription can be cancelled at any time"})]})]}),(0,Dn.jsxs)("div",{className:"form-check mb-2",children:[(0,Dn.jsx)("input",{className:"form-check-input",type:"checkbox",id:"agreePrivacyM",checked:p,onChange:e=>f(e.target.checked)}),(0,Dn.jsxs)("label",{className:"form-check-label",htmlFor:"agreePrivacyM",children:["I have read the ",(0,Dn.jsx)("a",{href:"/page/privacy",target:"_blank",children:"privacy"})," information"]})]}),(0,Dn.jsxs)("div",{className:"form-check mb-3",children:[(0,Dn.jsx)("input",{className:"form-check-input",type:"checkbox",id:"agreeTermsM",checked:h,onChange:e=>m(e.target.checked)}),(0,Dn.jsxs)("label",{className:"form-check-label",htmlFor:"agreeTermsM",children:["I accept the ",(0,Dn.jsx)("a",{href:"/page/terms",target:"_blank",children:"terms and conditions"})]})]}),(0,Dn.jsx)("div",{className:"fine-print",children:"By clicking the button below, I agree that the service will begin immediately and I expressly waive my 14-day right of withdrawal."}),(0,Dn.jsx)("div",{className:"fine-print",children:"By clicking \u2018Subscribe with PayPal\u2019, you are entering into a paid subscription agreement."})]}),(0,Dn.jsx)("div",{className:"submit-wrap "+(g?"":"disabled"),children:(0,Dn.jsx)(hk,{planId:_n.a.PP_PLAN_MONTH_ID,onSuccess:e=>{s(e,_n.a.PP_PLAN_MONTH_ID)}})})]})]})]}),(0,Dn.jsxs)("div",{className:"PlanSelectionItem "+(r.GetPlanID()===_n.a.PP_PLAN_YEAR_ID||r.GetPlanID()===_n.a.PP_PLAN_YEAR_ID_LIVE?"current-plan":""),children:[(0,Dn.jsx)("h2",{children:_n.a.PLAN_Y_NAME}),(r.GetPlanID()===_n.a.PP_PLAN_YEAR_ID||r.GetPlanID()===_n.a.PP_PLAN_YEAR_ID_LIVE)&&(0,Dn.jsxs)("div",{className:"current-plan-hint",children:[(0,Dn.jsx)(Gn.g,{icon:Pn.e68,className:"icon-inline-left-l"}),"Your Current Plan"]}),(0,Dn.jsx)("ul",{className:"details-list",children:v.map(((e,t)=>(0,Dn.jsxs)("li",{children:[(0,Dn.jsx)("img",{src:Cx,alt:"Icon",className:"icon",width:20,height:20}),e]},t)))}),(0,Dn.jsxs)("div",{className:"price-details",children:[(0,Dn.jsxs)("div",{className:"price-main",children:[(0,Dn.jsx)("span",{className:"price-value",children:"$19.99"}),(0,Dn.jsx)("span",{className:"price-cycle",children:" / year"})]}),(0,Dn.jsx)("div",{className:"price-sub",children:"*VAT included"})]}),r.GetPlanID()!=_n.a.PP_PLAN_YEAR_ID&&r.GetPlanID()!=_n.a.PP_PLAN_YEAR_ID_LIVE&&(0,Dn.jsxs)("button",{className:"btn btn-primary select-plan-btn",onClick:()=>_(!0),children:["Select Plan",(0,Dn.jsx)(Gn.g,{icon:Pn.XkK,className:"icon-inline-right-l"})]})]}),(0,Dn.jsxs)(Il.A,{show:y,size:"lg",contentClassName:"purchaseSubModal purchaseSubModalYearly",dialogClassName:"",keyboard:!0,onhide:b,centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:_n.a.PLAN_Y_NAME}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:b})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsx)("div",{className:"benefits-wrap",children:(0,Dn.jsx)("ul",{className:"benefits-list",children:v.map(((e,t)=>(0,Dn.jsxs)("li",{children:[(0,Dn.jsx)("img",{src:Cx,alt:"Icon",className:"icon",width:20,height:20}),e]},t)))})}),(0,Dn.jsxs)("div",{className:"details-wrap",children:[(0,Dn.jsx)("div",{className:"details-wrap-headline",children:"Product Details"}),(0,Dn.jsxs)("ul",{className:"details-list",children:[(0,Dn.jsxs)("li",{children:[(0,Dn.jsx)("span",{className:"label",children:"Billing cycle: "}),(0,Dn.jsx)("span",{children:"yearly"})]}),(0,Dn.jsxs)("li",{children:[(0,Dn.jsx)("span",{className:"label",children:"Payment via: "}),(0,Dn.jsx)("span",{children:"Paypal"})]}),(0,Dn.jsxs)("li",{children:[(0,Dn.jsx)("span",{className:"label",children:"Price: "}),(0,Dn.jsx)("span",{children:"$19.99 / year (VAT included)"})]}),(0,Dn.jsxs)("li",{children:[(0,Dn.jsx)("span",{className:"label",children:"Cancellation: "}),(0,Dn.jsx)("span",{children:"The subscription can be cancelled at any time"})]})]}),(0,Dn.jsxs)("div",{className:"form-check mb-2",children:[(0,Dn.jsx)("input",{className:"form-check-input",type:"checkbox",id:"agreePrivacyY",checked:k,onChange:e=>C(e.target.checked)}),(0,Dn.jsxs)("label",{className:"form-check-label",htmlFor:"agreePrivacyY",children:["I have read the ",(0,Dn.jsx)("a",{href:"/page/privacy",target:"_blank",children:"privacy"})," information"]})]}),(0,Dn.jsxs)("div",{className:"form-check mb-3",children:[(0,Dn.jsx)("input",{className:"form-check-input",type:"checkbox",id:"agreeTermsY",checked:w,onChange:e=>x(e.target.checked)}),(0,Dn.jsxs)("label",{className:"form-check-label",htmlFor:"agreeTermsY",children:["I accept the ",(0,Dn.jsx)("a",{href:"/page/terms",target:"_blank",children:"terms and conditions"})]})]}),(0,Dn.jsx)("div",{className:"fine-print",children:"By clicking the button below, I agree that the service will begin immediately and I expressly waive my 14-day right of withdrawal."}),(0,Dn.jsx)("div",{className:"fine-print",children:"By clicking \u2018Subscribe with PayPal\u2019, you are entering into a paid subscription agreement."})]}),(0,Dn.jsx)("div",{className:"submit-wrap "+(j?"":"disabled"),children:(0,Dn.jsx)(hk,{planId:_n.a.PP_PLAN_YEAR_ID,onSuccess:e=>{s(e,_n.a.PP_PLAN_YEAR_ID)}})})]})]})]}),(0,Dn.jsx)("div",{className:"spacer-20"}),(0,Dn.jsxs)("div",{className:"container mt-3",children:[(0,Dn.jsx)("h2",{children:"Frequently asked questions"}),(0,Dn.jsx)(lk,{title:"How can I cancel my subscription?",content:(0,Dn.jsx)(Dn.Fragment,{children:"You can cancel your subscription by going into your account settings or by cancelling it in the paypal app. Your membership will stay active until the next billing cycle."})}),(0,Dn.jsx)(lk,{title:"How is the membership paid?",content:(0,Dn.jsx)(Dn.Fragment,{children:"The Payment will be made with paypal subscription. You can use your paypal account or credit card."})}),(0,Dn.jsx)(lk,{title:"Why do you offer a premium membership?",content:(0,Dn.jsx)(Dn.Fragment,{children:"Creating Trench Companion is a passion project but still requires a lot of work to make it work. The premium membership is completely voluntary and helps us to develop new features and keep improving the app."})}),(0,Dn.jsx)(lk,{title:"What benefits do I get with the plus membership?",content:(0,Dn.jsx)(Dn.Fragment,{children:"You will get several benefits, that are purely optional like choosing custom profile pictures and other cosmetic features. Ads will be disabled for plus members. You will also get a warm and fuzzy feeling for supporting the developers of this app. We plan to add more additional features for plus members in the future."})})]})]}):(0,Dn.jsx)("div",{className:"StaticPlanSelection",children:(0,Dn.jsxs)("div",{className:"container content-narrow py-4 my-4 ",children:[(0,Dn.jsx)("h1",{className:"text-center mb-3",children:"Please log in"}),(0,Dn.jsx)("div",{className:"row justify-content-center",children:(0,Dn.jsx)("div",{className:"col-12 col-md-6",children:(0,Dn.jsxs)(Rp.A,{type:"info",className:"my-3",children:[(0,Dn.jsx)("div",{className:"fw-bold",children:"Account required"}),(0,Dn.jsx)("div",{className:"mb-3",children:"You need an account to become a premium member. Please create log in or create a free account first."}),(0,Dn.jsxs)(yn.A,{classes:"btn btn-primary",link:"/login",runfunc:()=>{e("/login")},children:["Log in",(0,Dn.jsx)(Gn.g,{icon:Pn.XkK,className:"ms-2"})]})]})})})]})})};var pk=()=>{const[e,a]=(0,t.useState)([]),[n,o]=(0,t.useState)(!0),{pathname:i}=(0,zt.zy)();return i.match("/.*/$")?(0,Dn.jsx)(Yl,{}):((0,t.useEffect)((()=>{(async()=>{try{const e=await fetch("https://synod.trench-companion.com/wp-json/wp/v2/posts?_embed"),t=await e.json();a(t)}catch(e){console.error("Failed to fetch blog posts",e)}finally{o(!1)}})()}),[]),n?(0,Dn.jsx)("div",{className:"BlogListPage",children:(0,Dn.jsx)("div",{className:"LoadingOverlay-wrap-50vh",children:(0,Dn.jsx)(Zo,{message:"Loading your posts"})})}):(0,Dn.jsxs)("div",{className:"BlogListPage container",children:[(0,Dn.jsx)(Jo,{title:"Trench Companion Blog",description:"Stay up to date with the latest progress on the Trench Companion project. Here we share development updates, feature previews, design insights, and community news \u2014 all straight from the trenches."}),(0,Dn.jsx)("h1",{className:"mb-4",children:"Trench Companion Blog"}),(0,Dn.jsx)("p",{className:"mb-4",children:"Stay up to date with the latest progress on the Trench Companion project.\nHere we share development updates, feature previews, design insights, and community news \u2014 all straight from the trenches."}),(0,Dn.jsx)("div",{className:"spacer-20"}),(0,Dn.jsx)("div",{className:"row",children:e.map((e=>(0,Dn.jsx)("div",{className:"col-12 col-md-6 col-lg-4 mb-4",children:(0,Dn.jsx)(Qo,{post:e})},e.id)))})]}))};var fk=()=>{var e,a,n;const{slug:o}=(0,zt.g)(),[i,r]=(0,t.useState)(null),[s,l]=(0,t.useState)(!0),[c,d]=(0,t.useState)(null),[u,h]=(0,t.useState)(null),m=(0,zt.Zp)(),{pathname:p}=(0,zt.zy)();if(p.match("/.*/$"))return(0,Dn.jsx)(Yl,{});if((0,t.useEffect)((()=>{(async()=>{l(!0);try{const e=await fetch(`https://synod.trench-companion.com/wp-json/wp/v2/posts?slug=${o}&_embed=author`),t=await e.json();if(t.length>0){const e=t[0];r(e);const[a,n]=await Promise.all([fetch(`https://synod.trench-companion.com/wp-json/synod/v1/blog/previous/${e.id}`),fetch(`https://synod.trench-companion.com/wp-json/synod/v1/blog/next/${e.id}`)]),o=await a.json(),i=await n.json();h(o||null),d(i||null)}else r(null)}catch(e){console.error("Failed to fetch post",e),r(null)}finally{l(!1)}})()}),[o]),s)return(0,Dn.jsx)("div",{className:"BlogArticlePage",children:(0,Dn.jsx)("div",{className:"LoadingOverlay-wrap-50vh",children:(0,Dn.jsx)(Zo,{message:"Loading article"})})});if(!i)return(0,Dn.jsxs)("div",{className:"BlogArticlePage",children:[(0,Dn.jsx)("div",{className:"article-wrap my-3 ",children:(0,Dn.jsx)(yn.A,{link:"",runfunc:function(){m("/",{state:Date.now().toString()})},classes:"home-link-primary",children:(0,Dn.jsx)(Wn,{imageId:131154,className:"",size:"full"})})}),(0,Dn.jsx)(Yl,{})]});const f=(null===(e=i._embedded)||void 0===e||null===(a=e.author)||void 0===a||null===(n=a[0])||void 0===n?void 0:n.name)||"Trench Companion Team",g={"@context":"https://schema.org","@type":"BlogPosting",headline:i.title.rendered.replace(/<[^>]+>/g,""),datePublished:i.date,author:{"@type":"Person",name:f},publisher:{"@type":"Organization",name:"Trench Companion",logo:{"@type":"ImageObject",url:"https://trench-companion.com/static/media/trench-companion-logo-white-v2.e60c2cc5740a76d1e2ad.png"}},mainEntityOfPage:{"@type":"WebPage","@id":`https://trench-companion.com/blog/${o}`},articleBody:i.content.rendered.replace(/<[^>]+>/g,"")};return(0,Dn.jsxs)("div",{className:"BlogArticlePage container StaticContentPage",children:[(0,Dn.jsx)(Jo,{title:i.title.rendered,description:i.excerpt.rendered.replace(/<[^>]+>/g,"")}),(0,Dn.jsxs)("article",{className:"article-wrap",children:[i.featured_media&&(0,Dn.jsx)("div",{className:"blog-hero-image-wrap",children:(0,Dn.jsx)(Wn,{imageId:i.featured_media,className:"blog-hero-image",size:"full",imageKey:i.slug})}),(0,Dn.jsxs)("div",{className:"article-content",children:[(0,Dn.jsx)("h1",{className:"",dangerouslySetInnerHTML:{__html:i.title.rendered}}),(0,Dn.jsxs)("div",{className:"post-date-author",children:[(0,Dn.jsx)("span",{className:"post-date",children:new Date(i.date).toLocaleDateString()})," - ",(0,Dn.jsx)("span",{className:"post-author",children:f})]}),(0,Dn.jsx)("div",{className:"",dangerouslySetInnerHTML:{__html:i.content.rendered}})]}),(0,Dn.jsxs)("div",{className:"adjacent-navigation",children:[c&&c.slug?(0,Dn.jsxs)(yn.A,{classes:"adjacent-navigation_element adjacent-navigation_next",link:`/blog/${c.slug}`,runfunc:()=>{m(`/blog/${c.slug}`)},children:[(0,Dn.jsxs)("span",{className:"page-link-label",children:[(0,Dn.jsx)(Gn.g,{icon:Pn.Wzs,className:"icon-inline-left-l"}),"Newer"]}),(0,Dn.jsx)("span",{className:"page-name",dangerouslySetInnerHTML:{__html:c.title}})]}):(0,Dn.jsx)("span",{}),u&&u.slug?(0,Dn.jsxs)(yn.A,{classes:"adjacent-navigation_element adjacent-navigation_previous",link:`/blog/${u.slug}`,runfunc:()=>{m(`/blog/${u.slug}`)},children:[(0,Dn.jsxs)("span",{className:"page-link-label",children:["Older",(0,Dn.jsx)(Gn.g,{icon:Pn.XkK,className:"icon-inline-right-l"})]}),(0,Dn.jsx)("span",{className:"page-name",dangerouslySetInnerHTML:{__html:u.title}})]}):(0,Dn.jsx)("span",{})]}),(0,Dn.jsx)(oi,{format:"compendium-wide",className:"my-4"})]}),(0,Dn.jsx)("script",{type:"application/ld+json",children:JSON.stringify(g)})]})};function gk(){const e="trench-companion.com"===window.location.hostname,{pathname:t,search:a}=window.location;let n=t;n.endsWith("/")&&"/"!==n&&(n=n.slice(0,-1));const o=`https://trench-companion.com${n}`;return(0,Dn.jsxs)(Yo,{children:[!e&&(0,Dn.jsx)("meta",{name:"robots",content:"noindex,nofollow"}),(0,Dn.jsx)("link",{rel:"canonical",href:o})]})}const yk="dev.trench-companion.com",_k="DEV_GUARD_UNLOCKED";var bk=e=>{let{devHost:a=yk,expectedPassword:n,storage:o="session",storageKey:i=_k}=e;if(!("undefined"!==typeof window&&window.location.hostname===a))return null;const r=(0,t.useMemo)((()=>{const e=({NODE_ENV:"production",PUBLIC_URL:"",WDS_SOCKET_HOST:void 0,WDS_SOCKET_PATH:void 0,WDS_SOCKET_PORT:void 0,FAST_REFRESH:!0}.REACT_APP_DEV_GUARD_PASSWORD||"").trim();return(null!==n&&void 0!==n?n:e).trim()}),[n]),s="local"===o?window.localStorage:window.sessionStorage,l="undefined"!==typeof window&&"1"===s.getItem(i),[c,d]=(0,t.useState)(!l),[u,h]=(0,t.useState)(""),[m,p]=(0,t.useState)(!1),f=(0,t.useRef)(null),g=r.length>0&&u===r;(0,t.useEffect)((()=>{if(!c)return;const e=document.body.style.overflow;document.body.style.overflow="hidden";const t=setTimeout((()=>{var e;return null===(e=f.current)||void 0===e?void 0:e.focus()}),0),a=e=>{"Escape"===e.key&&(e.preventDefault(),e.stopPropagation())};return window.addEventListener("keydown",a,{capture:!0}),()=>{document.body.style.overflow=e,clearTimeout(t),window.removeEventListener("keydown",a,{capture:!0})}}),[c]);const y=c&&0===r.length,_=e=>{e.stopPropagation()};return c?(0,Dn.jsx)("div",{className:"DevGuard-Overlay",role:"dialog","aria-modal":"true","aria-labelledby":"devguard-title",onMouseDown:_,onClick:_,style:{position:"fixed",inset:0,zIndex:9999,background:"rgba(0,0,0,0.65)",display:"flex",alignItems:"center",justifyContent:"center",padding:16},children:(0,Dn.jsxs)("div",{className:"DevGuard-Modal",style:{width:"min(520px, 92vw)",background:"#111",color:"#fff",borderRadius:12,boxShadow:"0 8px 40px rgba(0,0,0,0.5)",padding:"24px 20px",border:"1px solid rgba(255,255,255,0.08)"},children:[(0,Dn.jsx)("h2",{id:"devguard-title",style:{margin:0,fontSize:28,lineHeight:1.3},children:"Development Environment"}),(0,Dn.jsxs)("p",{style:{margin:"10px 0 18px",opacity:.9},children:["You are on ",(0,Dn.jsx)("strong",{children:a}),". Please enter the dev password to continue."]}),(0,Dn.jsxs)("a",{href:"https://trench-companion.com",className:"btn btn-primary w-100 my-3",children:["Go to live site",(0,Dn.jsx)(Gn.g,{icon:Pn.XkK})]}),(0,Dn.jsxs)(Rp.A,{type:"info",className:"mb-3",children:[(0,Dn.jsx)("h4",{children:"Missing your warbands?"}),(0,Dn.jsxs)("p",{children:["If you have been using this dev site without creating an account, your warbands have been stored in the local storage of this site and are not available on the live site.",(0,Dn.jsx)("br",{}),(0,Dn.jsx)("br",{}),"Click the button below to copy your local warband data and paste it on the migration page for the import."]}),(0,Dn.jsx)("button",{type:"button",onClick:async()=>{var e;const t=null!==(e=localStorage.getItem("userwarbanditem"))&&void 0!==e?e:"[]";try{await navigator.clipboard.writeText(t)}catch(xC){const a=new Blob([t],{type:"application/json"}),n=URL.createObjectURL(a),o=document.createElement("a");o.href=n,o.download="warbands.dev.json",o.click(),URL.revokeObjectURL(n),alert("Copy was blocked \u2013 JSON-file has been downloaded. Open the import page.")}window.open("https://trench-companion.com/dev-import/","_blank","noopener,noreferrer")},className:"btn btn-secondary w-100",children:"Migrate warbands to live site"})]}),y&&(0,Dn.jsxs)("div",{style:{marginBottom:12,padding:"8px 10px",borderRadius:8,background:"rgba(255,193,7,0.12)",color:"#ffc107",fontSize:13},children:[(0,Dn.jsx)("strong",{children:"Warning:"})," No password configured. Set"," ",(0,Dn.jsx)("code",{children:"REACT_APP_DEV_GUARD_PASSWORD"})," ","in your environment, or pass ",(0,Dn.jsx)("code",{children:"expectedPassword"})," to ",(0,Dn.jsx)("code",{children:"<DevGuard />"}),"."]}),(0,Dn.jsx)("label",{htmlFor:"devguard-password",style:{display:"block",fontSize:14,marginBottom:6},children:"Dev password"}),(0,Dn.jsx)("input",{id:"devguard-password",ref:f,type:"password",autoComplete:"off",value:u,onChange:e=>h(e.target.value),onBlur:()=>p(!0),style:{width:"100%",padding:"5px 10px",borderRadius:8,border:"1px solid rgba(255,255,255,0.2)",background:"#191919",color:"#fff",outline:"none",marginBottom:10}}),m&&!g&&r.length>0&&(0,Dn.jsx)("div",{style:{color:"#ff6b6b",fontSize:13,marginBottom:8},children:"Incorrect password."}),(0,Dn.jsx)("button",{type:"button",onClick:()=>{p(!0),g&&(s.setItem(i,"1"),d(!1))},disabled:!g,className:"btn btn-secondary w-100 my-2",children:"Continue"}),(0,Dn.jsx)("div",{style:{marginTop:12,fontSize:12,opacity:.7},children:"Unlock is remembered for this tab (session)."})]})}):null};var vk=()=>{const{SiteUser:e,authToken:a,userId:n}=(0,ti.A)(),o=(0,zt.Zp)(),[i,r]=(0,t.useState)({contactName:"",companyName:"",street:"",zip:"",city:"",state:"",companyUrl:"",mmf_url:"",cults_url:"",cgtrader_url:"",instagram_url:"",facebook_url:"",patreon_url:""}),[s,l]=(0,t.useState)({}),[c,d]=(0,t.useState)(!1),u=e=>{const{id:t,value:a}=e.target;r((e=>({...e,[t]:a}))),l((e=>({...e,[t]:!1})))};return(0,Dn.jsxs)("div",{className:"StaticCreatorApplication py-4",children:[(0,Dn.jsx)("div",{className:"container",children:(0,Dn.jsx)("div",{className:"narrow-content",children:(0,Dn.jsxs)("div",{className:"row",children:[(0,Dn.jsxs)("div",{className:"col-12",children:[(0,Dn.jsx)("h1",{children:"Apply for the Trench Companion creator program"}),(0,Dn.jsx)("p",{children:"As a registered creator you will be able to promote your Trench Crusade STLs on our platform."})]}),(0,Dn.jsx)("div",{className:"col-12",children:(0,Dn.jsxs)("form",{onSubmit:async e=>{if(e.preventDefault(),(()=>{const e={};return["contactName","companyName","street","zip","city","state","companyUrl"].forEach((t=>{var a;null!==(a=i[t])&&void 0!==a&&a.trim()||(e[t]=!0)})),l(e),0===Object.keys(e).length})())try{if(!(await fetch(`${_n.a.URL}/wp-json/synod/v1/creator-application/`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${a}`},body:JSON.stringify(i)})).ok)throw new Error("API error");d(!0)}catch(t){Us.error("Submission failed. Please try again later."),console.error(t)}else Us.error("Please fill out all required fields.")},children:[(0,Dn.jsxs)("div",{className:"mb-3",children:[(0,Dn.jsx)("label",{htmlFor:"contactName",className:"form-label",children:"Contact Person Name *"}),(0,Dn.jsx)("input",{type:"text",className:"form-control "+(s.contactName?"is-invalid":""),id:"contactName",value:i.contactName,onChange:u})]}),(0,Dn.jsxs)("div",{className:"mb-3",children:[(0,Dn.jsx)("label",{htmlFor:"companyName",className:"form-label",children:"Company Name *"}),(0,Dn.jsx)("input",{type:"text",className:"form-control "+(s.companyName?"is-invalid":""),id:"companyName",value:i.companyName,onChange:u})]}),(0,Dn.jsxs)("div",{className:"row",children:[(0,Dn.jsxs)("div",{className:"col-md-8 mb-3",children:[(0,Dn.jsx)("label",{htmlFor:"street",className:"form-label",children:"Street & Number *"}),(0,Dn.jsx)("input",{type:"text",className:"form-control "+(s.street?"is-invalid":""),id:"street",value:i.street,onChange:u})]}),(0,Dn.jsxs)("div",{className:"col-md-4 mb-3",children:[(0,Dn.jsx)("label",{htmlFor:"zip",className:"form-label",children:"Zip *"}),(0,Dn.jsx)("input",{type:"text",className:"form-control "+(s.zip?"is-invalid":""),id:"zip",value:i.zip,onChange:u})]})]}),(0,Dn.jsxs)("div",{className:"row",children:[(0,Dn.jsxs)("div",{className:"col-md-6 mb-3",children:[(0,Dn.jsx)("label",{htmlFor:"city",className:"form-label",children:"City *"}),(0,Dn.jsx)("input",{type:"text",className:"form-control "+(s.city?"is-invalid":""),id:"city",value:i.city,onChange:u})]}),(0,Dn.jsxs)("div",{className:"col-md-6 mb-3",children:[(0,Dn.jsx)("label",{htmlFor:"state",className:"form-label",children:"Country / State *"}),(0,Dn.jsx)("input",{type:"text",className:"form-control "+(s.state?"is-invalid":""),id:"state",value:i.state,onChange:u})]})]}),(0,Dn.jsxs)("div",{className:"mb-3",children:[(0,Dn.jsx)("label",{htmlFor:"companyUrl",className:"form-label",children:"Company Web URL *"}),(0,Dn.jsx)("input",{type:"url",className:"form-control "+(s.companyUrl?"is-invalid":""),id:"companyUrl",value:i.companyUrl,onChange:u})]}),[{id:"mmf_url",label:"My Mini Factory URL"},{id:"cults_url",label:"Cults 3D URL"},{id:"cgtrader_url",label:"CG Trader URL"},{id:"instagram_url",label:"Instagram URL"},{id:"facebook_url",label:"Facebook URL"},{id:"patreon_url",label:"Patreon URL"}].map(((e,t)=>(0,Dn.jsxs)("div",{className:"mb-3",children:[(0,Dn.jsx)("label",{htmlFor:e.id,className:"form-label",children:e.label}),(0,Dn.jsx)("input",{type:"url",className:"form-control",id:e.id,value:i[e.id],onChange:u,name:e.id})]},e.id))),(0,Dn.jsx)("div",{className:"mt-4",children:(0,Dn.jsx)("button",{type:"submit",className:"btn btn-primary",children:"Submit Application"})})]})})]})})}),(0,Dn.jsxs)(Il.A,{show:c,backdrop:"static",keyboard:!1,centered:!0,children:[(0,Dn.jsx)(Il.A.Header,{children:(0,Dn.jsx)(Il.A.Title,{children:"Application Received"})}),(0,Dn.jsx)(Il.A.Body,{children:"Your application has been received. We will check it and get back to you soon."}),(0,Dn.jsx)(Il.A.Footer,{children:(0,Dn.jsx)(ss.A,{variant:"primary",size:"lg",onClick:()=>{o(Ua+"/profile/"+n),window.location.reload()},children:"Go to Profile"})})]})]})};const wk="userwarbanditem",xk=" - imported",kk=e=>!!e&&"object"===typeof e&&"warband_data"in e,Ck=e=>{try{return JSON.parse(e)}catch{return}};var jk=()=>{const[e,a]=(0,t.useState)(""),[n,o]=(0,t.useState)(""),i=(0,t.useRef)(!1);(0,t.useEffect)((()=>{const t=async()=>{var t;if(!i.current&&(i.current=!0,null!==(t=navigator.clipboard)&&void 0!==t&&t.readText))try{const t=await navigator.clipboard.readText();t&&!e&&(a(t),o("Data inserted automatically."))}catch{}};t();const n=()=>t();return window.addEventListener("focus",n,{once:!0}),()=>window.removeEventListener("focus",n)}),[]);return(0,Dn.jsxs)("div",{style:{padding:24},children:[(0,Dn.jsx)("h1",{children:"Warband Import (DEV \u2192 LIVE)"}),(0,Dn.jsx)("p",{children:"Insert the JSON Dump from the dev site here. The import will add those warbands to your local warbands. Duplicates will not be added."}),(0,Dn.jsx)("textarea",{value:e,onChange:e=>a(e.target.value),placeholder:"JSON from clipboard will be shown here or paste manually",style:{width:"100%",minHeight:220,fontFamily:"ui-monospace, SFMono-Regular, Menlo, monospace",marginTop:8}}),(0,Dn.jsx)(Rp.A,{className:"my-3",type:"info",children:n}),(0,Dn.jsxs)("div",{style:{display:"flex",gap:12,flexWrap:"wrap",marginTop:12},children:[(0,Dn.jsx)("button",{type:"button",onClick:async()=>{var e;if(null!==(e=navigator.clipboard)&&void 0!==e&&e.readText)try{const e=await navigator.clipboard.readText();a(e),o("Inserted from clipboard")}catch(xC){o("Clipboard could not be read. Use manual insert.")}else o("Automatic insert failed. Please insert manually")},className:"btn btn-primary",children:"Step 1: Add from clipboard"}),(0,Dn.jsx)("br",{}),(0,Dn.jsx)("button",{type:"button",onClick:()=>{const t=e.trim();if(!t)return void o("No JSON found");const a=Ck(t);if(!a)return void o("Invalid JSON");const n=(i=a,Array.isArray(i)?i:i&&"object"===typeof i?[i]:[]).filter(kk);var i;if(!n.length)return void o("No valid warbands found");let r=[];try{const e=localStorage.getItem(wk);if(e){const t=Ck(e);Array.isArray(t)&&(r=t)}}catch{}const s=e=>{var t,a;return null!==(t=null===e||void 0===e||null===(a=e.warband_data)||void 0===a?void 0:a.id)&&void 0!==t?t:null!=(null===e||void 0===e?void 0:e.id)?String(e.id):JSON.stringify(e)},l=new Map;for(const e of r)l.set(s(e),e);const c=n.map((e=>{const t=JSON.parse(JSON.stringify(e));return t.warband_data&&(t.warband_data.name=(e=>{if(!e||"string"!==typeof e)return e;const t=e.trimEnd();return t.endsWith(xk)?t:`${t}${xk}`})(t.warband_data.name)),t}));let d=0;for(const e of c){const t=s(e);l.has(t)||(l.set(t,e),d++)}const u=Array.from(l.values());try{localStorage.setItem(wk,JSON.stringify(u))}catch(xC){var h;return void o(`Import failed: ${null!==(h=null===xC||void 0===xC?void 0:xC.message)&&void 0!==h?h:String(xC)}`)}o(`Import successful. ${d} new warbands added. redirecting ...`),window.setTimeout((()=>{window.location.assign("/warband")}),600)},className:"btn btn-secondary",children:"Step 2: Import warbands"})]})]})};var Sk=()=>{const{SiteUser:e,userId:t}=(0,ti.A)();return(0,Dn.jsx)(Vx,{userId:t,children:(0,Dn.jsx)(Ik,{})})};const Ik=()=>{const e=(0,zt.Zp)(),{isLoggedIn:t,login:a,SiteUser:n}=(0,ti.A)(),{joinedCampaignIds:o,invitedCampaignIds:i,isLoading:r,error:s}=Yx();return s?(0,Dn.jsxs)("div",{children:["Error: ",s]}):(0,Dn.jsx)("div",{className:"CampaignOverview",children:(0,Dn.jsxs)("div",{className:"container",children:[(0,Dn.jsx)("h1",{className:"",children:"Your Campaigns"}),t?(0,Dn.jsxs)(Dn.Fragment,{children:[0===i.length?(0,Dn.jsx)(Dn.Fragment,{}):(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("h2",{children:"Campaign Invites"}),i.map((e=>(0,Dn.jsx)("div",{children:(0,Dn.jsx)(Zf,{campaignId:e,hydrate:!1,children:(0,Dn.jsx)(Jx,{})})},e)))]}),0===o.length&&(0,Dn.jsx)(Dn.Fragment,{children:r?(0,Dn.jsx)("div",{className:"LoadingOverlay-wrap-50vh",children:(0,Dn.jsx)(Zo,{message:"Loading campaigns"})}):(0,Dn.jsxs)(Rp.A,{type:"info",className:"mb-3",children:[(0,Dn.jsx)("h5",{children:"No Campaigns"}),(0,Dn.jsx)("div",{children:"You have not joined any campaigns"})]})}),o.map((e=>(0,Dn.jsx)(Ux,{campaignId:e,children:(0,Dn.jsx)(Kx,{})},e))),(0,Dn.jsxs)(yn.A,{classes:"CampaignOverview-new-link",link:`${la}/new`,runfunc:()=>{e(`${la}/new`,{state:Date.now().toString()})},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.QLR,className:"icon-inline-left-l"}),"Create new campaign "]})]}):(0,Dn.jsxs)(Rp.A,{type:"info",children:[(0,Dn.jsx)("h3",{children:"Log in to join or create campaigns"}),(0,Dn.jsx)("p",{children:"You need to log in to use the campaigns feature."}),(0,Dn.jsxs)("a",{href:"/login",className:"btn btn-primary",children:[(0,Dn.jsx)(Gn.g,{icon:Pn.X46,className:"icon-inline-left-l"}),"Login"]})]})]})})};var Ak=()=>{const e=(0,zt.Zp)(),[a,n]=(0,t.useState)(!1),[o,i]=(0,t.useState)(""),[r,s]=(0,t.useState)(""),{isLoggedIn:l,login:c,SiteUser:d}=(0,ti.A)(),u=async()=>{if(n(!0),null===o||void 0===o||!o.trim())return alert("Please enter a campaign name."),void n(!1);try{const t=pn.o.getInstance().UserCampaignManager,a=await t.CreateCampaign(o.trim(),r.trim());a?e(`${la}/${a}`):alert("Campaign created but unable to find it. Please reload the page")}catch(a){var t;console.error("Error creating campaign:",a),alert(`Campaign could not be created:\n${null!==(t=null===a||void 0===a?void 0:a.message)&&void 0!==t?t:a}`)}finally{n(!1)}};return(0,Dn.jsx)("div",{className:"CampaignSetup",children:(0,Dn.jsxs)("div",{className:"container",children:[(0,Dn.jsx)("div",{className:"headline-wrap",children:(0,Dn.jsxs)("h1",{children:[(0,Dn.jsx)(yn.A,{classes:"headline-back-btn",link:"/campaigns",runfunc:()=>{e("/campaigns",{state:Date.now().toString()})},children:(0,Dn.jsx)(Gn.g,{icon:Pn.Wzs,className:""})}),"Campaign Setup"]})}),l?(0,Dn.jsx)("div",{className:"CampaignSetup-form-wrap",children:(0,Dn.jsx)("div",{className:"CampaignSetup-form",children:(0,Dn.jsxs)("div",{className:"row",children:[(0,Dn.jsx)("div",{className:"col-12 col-xl-6",children:(0,Dn.jsxs)("form",{className:"CampaignSetup-options-wrap",onSubmit:e=>{e.preventDefault(),u()},children:[(0,Dn.jsx)("h2",{className:"mb-3",children:"Create your Campaign"}),(0,Dn.jsxs)("div",{className:"mb-3",children:[(0,Dn.jsx)("label",{className:"form-label",children:"Campaign Name"}),(0,Dn.jsx)("input",{className:"form-control form-control-sm",type:"text",value:o,onChange:e=>i(e.target.value),placeholder:"Enter campaign name"})]}),(0,Dn.jsxs)("div",{className:"mb-3",children:[(0,Dn.jsx)("label",{className:"form-label",children:"Campaign Description"}),(0,Dn.jsx)("textarea",{className:"form-control form-control-sm",value:r,onChange:e=>s(e.target.value),placeholder:"Enter campaign description",rows:4})]}),(0,Dn.jsx)("div",{className:"mb-3",children:a?(0,Dn.jsxs)("button",{className:"btn btn-primary",onClick:u,disabled:!0,children:[(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"fa-spin me-2"}),"Creating Campaign"]}):(0,Dn.jsx)("button",{className:"btn btn-primary",onClick:u,disabled:!o.trim()||a,children:"Create Campaign"})})]})}),(0,Dn.jsx)("div",{className:"col-12 col-xl-6",children:(0,Dn.jsx)(Wn,{imageId:2841,className:""})})]})})}):(0,Dn.jsxs)(Rp.A,{type:"info",children:[(0,Dn.jsx)("h3",{children:"Log in to create campaigns"}),(0,Dn.jsx)("p",{children:"You need to log in to use the campaigns feature."}),(0,Dn.jsxs)("a",{href:"/login",className:"btn btn-primary",children:[(0,Dn.jsx)(Gn.g,{icon:Pn.X46,className:"icon-inline-left-l"}),"Login"]})]})]})})};var Nk=e=>{let{initialText:a,title:n,onSave:o,canEdit:i,isBusy:r}=e;const{campaign:s}=Xf(),[l,c]=(0,t.useState)(a),[d,u]=(0,t.useState)(!1);if(!i&&""==l)return null;const[h,m]=(0,t.useState)(!1),p=(0,pl.lh)(l).length>200;return(0,Dn.jsxs)("div",{className:"CMTextarea",children:[(0,Dn.jsxs)("div",{className:"CMTextarea-title",children:[n,i&&(0,Dn.jsx)(Dn.Fragment,{children:d?(0,Dn.jsxs)("div",{className:"btn btn-primary btn-sm",onClick:()=>{u(!1),o(l)},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.jkA,className:"me-2"}),"Save"]}):(0,Dn.jsx)(Dn.Fragment,{children:r?(0,Dn.jsxs)(ss.A,{variant:"primary",className:"btn-sm",disabled:!0,children:[(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"fa-spin me-2"}),"Saving"]}):(0,Dn.jsxs)(ss.A,{variant:"primary",className:"btn-sm",onClick:()=>u(!0),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.hpd,className:"me-2"}),"Edit"]})})})]}),d?(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("textarea",{rows:12,value:l,onChange:e=>c(e.target.value)}),(0,Dn.jsx)(yf,{}),(0,Dn.jsx)("div",{className:"my-4"})]}):(0,Dn.jsx)(Dn.Fragment,{children:""!=l?(0,Dn.jsxs)("div",{className:"CMTextarea-text-wrap",children:[(0,Dn.jsx)("p",{className:`CMTextarea-text ${p?"is-long":""} ${h?"is-expanded":""}`,dangerouslySetInnerHTML:{__html:(0,pl.lh)(l)}}),!h&&p&&(0,Dn.jsxs)("span",{className:"show-more small",onClick:()=>m(!0),children:["Show more",(0,Dn.jsx)(Gn.g,{icon:Pn.Jt$,className:"ms-2"})]}),h&&p&&(0,Dn.jsxs)("span",{className:"show-less small",onClick:()=>m(!1),children:["Show less",(0,Dn.jsx)(Gn.g,{icon:Pn.w2A,className:"ms-2"})]})]}):(0,Dn.jsx)("div",{className:"CMTextarea-text-wrap",children:(0,Dn.jsxs)("i",{children:["No ",n]})})})]})};var Ek=()=>{const{campaign:e}=Xf(),a=(0,zt.Zp)(),[n,o]=(0,t.useState)(!1);if(!e)return null;const i=e.GetLatestAnnouncement();if(!i)return(0,Dn.jsxs)("div",{className:"CMLatestAnnouncement",children:[(0,Dn.jsx)("h3",{className:"CMLatestAnnouncement-headline",children:"Latest Announcement"}),(0,Dn.jsx)("div",{className:"CMLatestAnnouncement-content",children:(0,Dn.jsx)("div",{className:"CMLatestAnnouncement-text-wrap",children:(0,Dn.jsx)("p",{className:"CMLatestAnnouncement-text",children:"No announcements"})})})]});const r=i.MarkupHtml.length>200;return(0,Dn.jsxs)("div",{className:"CMLatestAnnouncement",children:[(0,Dn.jsxs)("h3",{className:"CMLatestAnnouncement-headline",children:["Latest Announcement",(0,Dn.jsx)(Sg,{id:"announcement-latest",type:"announcement",item:i},i.Id)]}),(0,Dn.jsxs)("div",{className:"CMLatestAnnouncement-content",children:[(0,Dn.jsx)("h4",{className:"CMLatestAnnouncement-title",children:i.Title}),(0,Dn.jsx)("div",{className:"CMLatestAnnouncement-date",children:i.DateStr}),(0,Dn.jsx)("div",{className:"CMLatestAnnouncement-author",children:(0,Dn.jsx)(yn.A,{classes:"CMLatestAnnouncement-author-link",link:`/profile/${i.Author.Id}`,runfunc:()=>{a(`/profile/${i.Author.Id}`)},children:i.Author.Name})}),(0,Dn.jsxs)("div",{className:"CMLatestAnnouncement-text-wrap",children:[(0,Dn.jsx)("p",{className:`CMLatestAnnouncement-text ${r?"is-long":""} ${n?"is-expanded":""}`,dangerouslySetInnerHTML:{__html:i.MarkupHtml}}),!n&&r&&(0,Dn.jsxs)("span",{className:"show-more small",onClick:()=>o(!0),children:["Show more",(0,Dn.jsx)(Gn.g,{icon:Pn.Jt$,className:"ms-2"})]}),n&&r&&(0,Dn.jsxs)("span",{className:"show-less small",onClick:()=>o(!1),children:["Show less",(0,Dn.jsx)(Gn.g,{icon:Pn.w2A,className:"ms-2"})]})]})]})]})};var Tk=()=>{const{campaign:e,updateCampaignKey:t}=Xf(),{userId:a,isLoggedIn:n}=(0,ti.A)(),o=(0,zt.Zp)();if(!e)return null;const i=[...e.GetWarbands()].sort(((e,t)=>{var a,n;return(null!==(a=t.VictoryPoints)&&void 0!==a?a:0)-(null!==(n=e.VictoryPoints)&&void 0!==n?n:0)}));return(0,Dn.jsxs)("div",{className:"CMLeaderboard",children:[(0,Dn.jsx)("div",{className:"CMLeaderboard-headline",children:"Leaderboard"}),i.length>0?(0,Dn.jsx)("ul",{className:"warbands-list",children:i.map(((t,a)=>(0,Dn.jsxs)("li",{className:"CMLeaderboard-el",children:[(0,Dn.jsxs)("div",{className:"left",children:[(0,Dn.jsx)("div",{className:"el-image-wrap",children:(0,Dn.jsx)(Wn,{imageId:t.ImageId,className:"el-image"})}),(0,Dn.jsxs)("div",{className:"el-names",children:[(0,Dn.jsx)(yn.A,{link:t.WarbandUrl,runfunc:()=>{o(`/warband/detail/${t.WarbandID}`)},classes:"el-wb-name",children:t.WarbandName}),(0,Dn.jsx)("div",{className:"el-faction-name",children:t.FactionName}),(0,Dn.jsx)("div",{className:"el-player-name",children:(0,Dn.jsx)(eg,{name:t.PlayerName,link:!0,userId:t.PlayerId,isPremium:t.IsPlayerPremium})})]})]}),(0,Dn.jsx)("div",{className:"right",children:(0,Dn.jsxs)("div",{className:"el-values",children:[(0,Dn.jsxs)("div",{className:"el-vp",children:[t.VictoryPoints," VP"]}),(0,Dn.jsxs)("div",{className:"el-ratings",children:[(0,Dn.jsx)(il.A,{type:"d",amount:t.RatingDucats}),(0,Dn.jsx)(il.A,{type:"g",amount:t.RatingGlory})]}),(0,Dn.jsxs)("div",{className:"el-round",children:["Round ",t.WarbandRound,"/",e.GetCurrentRound()]})]})})]},a)))}):(0,Dn.jsxs)(Rp.A,{type:"info",children:[(0,Dn.jsx)("div",{className:"fw-bold",children:"Peace will not last"}),(0,Dn.jsx)("div",{className:"",children:"No warbands have joined this campaign yet"})]})]},t)};var Dk=()=>{const{campaign:e}=Xf(),{userId:a,isLoggedIn:n}=(0,ti.A)();if(!e)return null;const[o,i]=(0,t.useState)(!1),[r,s]=(0,t.useState)(e.GetName()),[l,c]=(0,t.useState)(e.GetDescription());return(0,Dn.jsxs)("div",{className:"CampaignSummary CampaignManager-card",children:[(0,Dn.jsx)("div",{className:"CampaignManager-card-title",children:(0,Dn.jsx)("h2",{children:"Summary"})}),(0,Dn.jsxs)("div",{className:"CampaignManager-card-content",children:[(0,Dn.jsxs)("div",{className:"CampaignSummary-info",children:[(0,Dn.jsx)("span",{className:"label",children:"Campaign Round: "}),(0,Dn.jsx)("span",{className:"value",children:e.GetCurrentRound()})]}),(0,Dn.jsxs)("div",{className:"CampaignSummary-info",children:[(0,Dn.jsx)("span",{className:"label",children:"Threshold Value: "}),(0,Dn.jsx)("span",{className:"value",children:(0,Dn.jsx)(il.A,{amount:e.GetThresholdValueCurrent(),type:"d"})})]}),e.GetNextRoundStart()&&(0,Dn.jsxs)("div",{className:"CampaignSummary-info",children:[(0,Dn.jsx)("span",{className:"label",children:"Next round starts: "}),(0,Dn.jsx)("span",{className:"value",children:e.GetNextRoundStartDate()})]}),(0,Dn.jsx)("div",{className:"CampaignSummary-notes",children:(0,Dn.jsx)(Nk,{initialText:e.GetDescription(),title:"Description",onSave:t=>{if(null!=e){if(t==e.GetDescription())return;i(!0);const a=pn.o.getInstance();a.UserCampaignManager.RunInit().then((()=>{a.UserCampaignManager.UpdateCampaign(e.GetId(),e.GetName(),t).then((()=>{i(!1),Us.success("Description changed")}))}))}},canEdit:e.IsAdmin(a||0),isBusy:o})}),(0,Dn.jsx)(Ek,{}),(0,Dn.jsx)(Tk,{})]})]})};var Rk=e=>{let{warband:t}=e;const a=(0,zt.Zp)();return(0,Dn.jsxs)("div",{className:"CMWarbandListEntry",children:[(0,Dn.jsx)(yn.A,{classes:"wb-image-wrap",link:`/warband/detail/${t.Id}`,runfunc:()=>{a(`/warband/detail/${t.Id}`)},children:(0,Dn.jsx)(Wn,{imageId:t.ImageId||0,className:"",size:"small"})}),(0,Dn.jsxs)("div",{className:"CMWarbandListEntry-text",children:[(0,Dn.jsx)(yn.A,{classes:"CMWarbandListEntry-wb-name",link:`/warband/detail/${t.Id}`,runfunc:()=>{a(`/warband/detail/${t.Id}`)},children:t.Name}),(0,Dn.jsxs)("div",{className:"CMWarbandListEntry-wb-rating",children:[(0,Dn.jsx)(il.A,{amount:t.RatingDucats,type:"d"}),(0,Dn.jsx)(il.A,{amount:t.RatingGlory,type:"g"})]}),(0,Dn.jsx)(yn.A,{classes:"CMWarbandListEntry-player-name",link:`/profile/${t.PlayerId}`,runfunc:()=>{a(`/profile/${t.PlayerId}`)},children:t.PlayerName})]}),(0,Dn.jsx)(Sg,{id:`warband-${t.Id}`,type:"warband",item:t})]})};var Mk=()=>{const{campaign:e}=Xf();return e?(0,Dn.jsxs)("div",{className:"CampaignWarbands CampaignManager-card",children:[(0,Dn.jsx)("div",{className:"CampaignManager-card-title",children:(0,Dn.jsx)("h2",{children:"Warbands"})}),(0,Dn.jsx)("div",{className:"CampaignManager-card-content",children:e.GetWarbands().length>0?(0,Dn.jsx)("ul",{className:"warbands-list",children:e.GetWarbands().map(((e,t)=>(0,Dn.jsx)("li",{className:"warband",children:(0,Dn.jsx)(Rk,{warband:e})},t)))}):(0,Dn.jsxs)(Rp.A,{type:"info",children:[(0,Dn.jsx)("div",{className:"fw-bold",children:"Peace will not last"}),(0,Dn.jsx)("div",{className:"",children:"No warbands have joined this campaign yet"})]})})]}):null};var Ok=e=>{let{player:t}=e;const a=(0,zt.Zp)(),{campaign:n,reloadCmData:o,reloadCmDisplay:i,updateCampaignKey:r}=Xf(),{userId:s,isLoggedIn:l}=(0,ti.A)();if(!n)return(0,Dn.jsx)(Dn.Fragment,{});const c=s,d=null!=c&&Number(c)===Number(t.Id),u=null!=c&&n.IsAdmin(Number(c));return(0,Dn.jsxs)("div",{className:"CMPlayerListEntry",children:[(0,Dn.jsx)(yn.A,{classes:"user-name",link:`/profile/${t.Id}`,runfunc:()=>{a(`/profile/${t.Id}`,{state:Date.now().toString()})},children:(0,Dn.jsx)(qx,{imageId:t.AvatarId,className:"pfp-image",size:"medium"})}),(0,Dn.jsx)(eg,{className:"user-name",userId:t.Id,link:!0,statusString:t.GetSupporterStatus(),name:null!==n&&void 0!==n&&n.IsAdmin(t.Id)?(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(Gn.g,{icon:Pn.zqi,className:"me-2"}),t.Name]}):(0,Dn.jsx)(Dn.Fragment,{children:t.Name})}),(0,Dn.jsx)(Gx,{className:"user-status",statusString:t.GetSupporterStatus()}),d&&!u&&(0,Dn.jsx)(Sg,{id:`player-${t.Id}`,type:"player-self",item:t}),s&&n.IsAdmin(s)&&(0,Dn.jsx)(Sg,{id:`player-${t.Id}`,type:"player",item:t})]})};var qk=()=>{const{campaign:e}=Xf();return(0,Dn.jsxs)("div",{className:"CampaignPlayers CampaignManager-card",children:[(0,Dn.jsx)("div",{className:"CampaignManager-card-title",children:(0,Dn.jsx)("h2",{children:"Players"})}),(0,Dn.jsx)("div",{className:"CampaignManager-card-content",children:(0,Dn.jsx)("ul",{className:"players-list",children:null===e||void 0===e?void 0:e.GetPlayers().map(((e,t)=>(0,Dn.jsx)("li",{className:"player",children:(0,Dn.jsx)(Ok,{player:e})},t)))})})]})};var Gk=()=>{const{campaign:e,reloadCmDisplay:a,updateCampaignKey:n}=Xf();if(!e)return null;const[o,i]=(0,t.useState)(!1),[r,s]=(0,t.useState)([]),l=e.GetPlayers(),c=(0,t.useMemo)((()=>l.map((e=>e.Id)).join(",")),[l]);(0,t.useEffect)((()=>{let e=!1;return(async()=>{i(!0);try{const t=await Promise.all(l.map((async e=>{try{var t;const a=await af.e.CreatePublicUserByID(Number(e.Id));return{campaign_user:e,warbands:null!==(t=await(null===a||void 0===a?void 0:a.GetWarbands()))&&void 0!==t?t:[]}}catch(xC){return console.warn("Failed to load warbands for",e.Id,xC),{campaign_user:e,warbands:[]}}})));e||s(t)}finally{e||i(!1)}})(),()=>{e=!0}}),[c]);const[d,u]=(0,t.useState)(!1),[h,m]=(0,t.useState)(!1),[p,f]=(0,t.useState)([]),[g,y]=(0,t.useState)([]);return(0,Dn.jsxs)(t.Fragment,{children:[(0,Dn.jsxs)("div",{className:"CMManagePanel_AddWarband CMManagePanel-action",onClick:()=>m(!0),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.Vdo,className:"me-2"}),"Invite Warband"]}),(0,Dn.jsxs)(Il.A,{show:h,onHide:()=>m(!1),className:"CMManagePanel_AddWarband_Modal",centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Add Warbands"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:()=>m(!1)})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsx)("div",{children:"Add new warbands to this campaign"}),(0,Dn.jsx)("ul",{className:"player-list",children:r.map(((t,a)=>{const n=p.includes(t.campaign_user.Id),o=t.warbands.filter((t=>e.IsInvitedWarband(t.id))).length,i=t.warbands.filter((t=>e.IsJoinedWarband(t.id))).length,r=t.warbands.filter((e=>g.includes(e.id))).length;return(0,Dn.jsxs)("li",{className:"player-item",children:[(0,Dn.jsxs)("div",{className:"player-item-inner "+(n?"expanded":""),onClick:()=>{return e=t.campaign_user.Id,void f((t=>t.includes(e)?t.filter((t=>t!==e)):[...t,e]));var e},children:[(0,Dn.jsx)("div",{className:"player-image-wrap",children:(0,Dn.jsx)(Wn,{imageId:t.campaign_user.AvatarId,className:""})}),(0,Dn.jsxs)("div",{className:"player-text",children:[(0,Dn.jsx)("div",{className:"player-name",children:t.campaign_user.Name}),(o>0||i>0||r>0)&&(0,Dn.jsxs)("div",{className:"player-stats",children:[o>0&&(0,Dn.jsxs)("span",{className:"invited-count",children:["Invited: ",o]}),i>0&&(0,Dn.jsxs)("span",{className:"joined-count",children:["Joined: ",i]}),r>0&&(0,Dn.jsxs)("span",{className:"selected-count",children:["Selected: ",r]})]})]}),n?(0,Dn.jsx)(Gn.g,{icon:Pn.w2A,className:"player-expanded-icon"}):(0,Dn.jsx)(Gn.g,{icon:Pn.Jt$,className:"player-expanded-icon"})]}),(0,Dn.jsx)(ll.A,{in:n,children:(0,Dn.jsx)("div",{children:(0,Dn.jsx)("ul",{className:"warband-list",children:t.warbands.map((t=>{const a=g.includes(t.id),n=e.IsInvitedWarband(t.id)||e.IsJoinedWarband(t.id);return(0,Dn.jsxs)("li",{className:`warband-item ${a?"selected":""} ${n?"disabled":""}`,onClick:()=>{return a=t.id,void(e.IsInvitedWarband(a)||e.IsJoinedWarband(a)||d||y((e=>e.includes(a)?e.filter((e=>e!==a)):[...e,a])));var a},children:[(0,Dn.jsx)("div",{className:"warband-image-wrap",children:(0,Dn.jsx)(Ul,{className:"warband-image",factionSlug:t.warband_data.GetFactionSlug()})}),(0,Dn.jsxs)("div",{className:"warband-text",children:[(0,Dn.jsx)("div",{className:"warband-name",children:t.warband_data.GetWarbandName()}),e.IsInvitedWarband(t.id)&&(0,Dn.jsx)("div",{children:"Invited"}),e.IsJoinedWarband(t.id)&&(0,Dn.jsx)("div",{children:"Joined"})]}),e.IsInvitedWarband(t.id)&&(0,Dn.jsx)(Dn.Fragment,{children:(0,Dn.jsx)(Sg,{id:`warband-invite-${t.id}`,type:"warband-invite",item:t})}),e.IsJoinedWarband(t.id)&&(0,Dn.jsx)(Gn.g,{icon:Pn.pCJ,className:"warband-icon warband-icon-in-campaign"}),a&&(0,Dn.jsx)(Gn.g,{icon:Pn.SGM,className:"warband-icon warband-icon-selected"})]},t.id)}))})})})]},t.campaign_user.Id)}))})]}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:()=>m(!1),children:"Cancel"}),d?(0,Dn.jsxs)(ss.A,{variant:"primary",disabled:!0,children:[(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"fa-spin me-2"}),"Sending invites"]}):(0,Dn.jsxs)(ss.A,{variant:"primary",onClick:async()=>{if(g.length&&null!=e){u(!0);const t=pn.o.getInstance();await t.UserCampaignManager.RunInit();for(const a of g)try{const n=await t.UserCampaignManager.CampaignWarbandCreate(e.GetId(),a);n&&n.status<400?Us.success("Warband invited"):Us.error("Warband invite error")}catch(xC){Us.error("Could not invite warband(s)")}u(!1),m(!1),a(),y([])}},disabled:0===g.length,children:["Invite Selected ",`(${g.length})`]})]})]})]},n)};var Pk=()=>{var e;const{campaign:a,reloadCmDisplay:n,updateCampaignKey:o}=Xf();if(!a)return null;const[i,r]=(0,t.useState)(!1),[s,l]=(0,t.useState)([]),[c,d]=(0,t.useState)(!1),[u,h]=(0,t.useState)(null);return(0,Dn.jsxs)(t.Fragment,{children:[(0,Dn.jsxs)("div",{className:"CMManagePanel_InvitePlayer CMManagePanel-action",onClick:()=>r(!0),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.nWR,className:"me-2"}),"Invite Player"]}),(0,Dn.jsxs)(Il.A,{show:i,onHide:()=>r(!1),className:"CMManagePanel_InvitePlayer_Modal",centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Invite Players"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:()=>r(!1)})]}),(0,Dn.jsx)(Il.A.Body,{children:a.GetInvitablePlayers_full()?(0,Dn.jsx)("ul",{className:"player-list",children:(null!==(e=null===a||void 0===a?void 0:a.GetInvitablePlayers_full())&&void 0!==e?e:[]).map((e=>(0,Dn.jsxs)("li",{className:`player-item \n                                ${s.includes(e.id?e.id:0)?"selected":""} \n                                ${a.IsJoined(e.id?e.id:0)?"already-in":""}\n                                ${a.IsInvited(e.id?e.id:0)?"invited":""}\n                                `,onClick:()=>{var t;a.IsJoined(e.id?e.id:0)||a.IsInvited(e.id?e.id:0)||(t=e.id?e.id:0,l((e=>e.includes(t)?e.filter((e=>e!==t)):[...e,t])))},children:[(0,Dn.jsx)("div",{className:"player-image-wrap",children:(0,Dn.jsx)(Wn,{imageId:e.profile_picture?e.profile_picture.image_id:0,className:"player-image"})}),(0,Dn.jsxs)("div",{className:"player-text",children:[(0,Dn.jsx)("div",{className:"player-name",children:e.nickname}),a.IsJoined(e.id?e.id:0)&&(0,Dn.jsx)("div",{className:"player-status",children:"Joined"}),a.IsInvited(e.id?e.id:0)&&(0,Dn.jsx)("div",{className:"player-status",children:"Invited"})]}),a.IsInvited(e.id?e.id:0)&&(0,Dn.jsx)(Sg,{id:`player-invite-${e.id?e.id:0}`,type:"player-invite",item:e},`invite-modal-playercontext-${e.id?e.id:0}`),a.IsJoined(e.id?e.id:0)&&(0,Dn.jsx)(Gn.g,{icon:Pn.pCJ,className:"player-icon player-icon-in-campaign"}),s.includes(e.id?e.id:0)&&(0,Dn.jsx)(Gn.g,{icon:Pn.SGM,className:"player-icon player-icon-selected"})]},e.id)))}):(0,Dn.jsxs)(Rp.A,{type:"info",children:[(0,Dn.jsx)("h4",{children:"No friends to invite"}),(0,Dn.jsx)("p",{children:"You can only invite your friends. Add your friends first and then add them to your campaign"})]})}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:()=>r(!1),children:"Cancel"}),c?(0,Dn.jsxs)(ss.A,{variant:"primary",disabled:!0,children:[(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"fa-spin me-2"}),"Inviting Players"]}):(0,Dn.jsxs)(ss.A,{variant:"primary",onClick:async()=>{if(s.length&&null!=a){d(!0);const e=pn.o.getInstance();await e.UserCampaignManager.RunInit();for(const t of s)try{await e.UserCampaignManager.CampaignInviteCreate(a.GetId(),t),Us.success("Player invited")}catch(xC){Us.error(xC.message||"Could not invite player(s)")}d(!1),r(!1),n(),l([])}},disabled:0===s.length,children:["Invite Selected ",`(${s.length})`]})]})]})]},o)};var Fk=()=>{const[e,a]=(0,t.useState)(!1),{campaign:n}=Xf();return(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsxs)("div",{className:"CMManagePanel_AddGameResults CMManagePanel-action",onClick:()=>{a(!0)},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.s6x,className:"me-2"}),"Add Game Result"]}),(0,Dn.jsx)(vf,{show:e,onClose:()=>{a(!1)},campaignId:null===n||void 0===n?void 0:n.GetId()})]})};var Lk=()=>{const{campaign:e,reloadCmDisplay:a}=Xf();if(!e)return null;const[n,o]=(0,t.useState)(!1),[i,r]=(0,t.useState)(!1),[s,l]=(0,t.useState)(""),[c,d]=(0,t.useState)("");return(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsxs)("div",{className:"CMManagePanel_CreateAnnouncement CMManagePanel-action",onClick:()=>r(!0),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.DDU,className:"me-2"}),"Create Announcement"]}),(0,Dn.jsxs)(Il.A,{show:i,onHide:()=>r(!1),className:"CMManagePanel_CreateAnnouncement_Modal",centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Create Announcement"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:()=>r(!1)})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsxs)("div",{className:"mb-3",children:[(0,Dn.jsx)("label",{className:"form-label",children:"Announcement title"}),(0,Dn.jsx)("input",{className:"form-control form-control-sm",type:"text",value:s,onChange:e=>l(e.target.value),placeholder:"Announcement title",required:!0})]}),(0,Dn.jsx)("label",{htmlFor:"announcement-textarea",children:"Announcement text"}),(0,Dn.jsx)("textarea",{id:"announcement-textarea",className:"form-control mt-2",value:c,onChange:e=>d(e.target.value),rows:10,placeholder:"Enter your message here...",required:!0}),(0,Dn.jsx)(yf,{})]}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:()=>r(!1),children:"Cancel"}),n?(0,Dn.jsxs)(ss.A,{variant:"primary",disabled:!0,children:[(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"fa-spin me-2"}),"Creating announcement"]}):(0,Dn.jsx)(ss.A,{variant:"primary",onClick:()=>{if(null!=e){o(!0);const t=pn.o.getInstance();t.UserCampaignManager.RunInit().then((()=>{t.UserCampaignManager.AddAnnouncement(e.GetId(),s,c).then((()=>{a(),o(!1),r(!1),l(""),d(""),Us.success("Announcement created")}))}))}},disabled:""===c.trim(),children:"Create announcement"})]})]})]})};var Wk=()=>{const{campaign:e,reloadCmDisplay:a}=Xf();if(!e)return null;const[n,o]=(0,t.useState)(!1),[i,r]=(0,t.useState)(!1),[s,l]=(0,t.useState)("");(0,t.useEffect)((()=>{i&&l("")}),[i]);return(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsxs)("div",{className:"CMManagePanel_AdvanceCampaignRound CMManagePanel-action",onClick:()=>r(!0),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.dxS,className:"me-2"}),"Advance Campaign Round"]}),(0,Dn.jsxs)(Il.A,{show:i,onHide:()=>r(!1),className:"CMManagePanel_AdvanceCampaignRound_Modal",centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Advance Campaign Round"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:()=>r(!1)})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsx)(Rp.A,{className:"mb-3",type:"info",children:"Do you want to advance your campaign to the next round? This will set the current campaign round for all warbands to see. You can also add a target date for the end of this round."}),(0,Dn.jsxs)("div",{className:"mb-3",children:[(0,Dn.jsx)("label",{className:"form-label",children:"Target date for the end of the next round (optional)"}),(0,Dn.jsxs)("div",{className:"d-flex gap-2",children:[(0,Dn.jsx)("input",{type:"date",className:"form-control",value:s,onChange:e=>l(e.currentTarget.value)}),s&&(0,Dn.jsx)(ss.A,{variant:"btn btn-primary",type:"button",onClick:()=>l(""),"aria-label":"Clear date",children:(0,Dn.jsx)(Gn.g,{icon:Pn.yLS})})]})]}),(0,Dn.jsxs)("div",{className:"mb-1",children:[(0,Dn.jsx)("span",{className:"fw-bold",children:"Current Round: "}),(0,Dn.jsx)("span",{children:e.GetCurrentRound()})]}),(0,Dn.jsxs)("div",{className:"mb-1",children:[(0,Dn.jsx)("span",{className:"fw-bold",children:"Current Threshold: "}),(0,Dn.jsx)("span",{children:(0,Dn.jsx)(il.A,{type:"d",amount:e.GetThresholdValueCurrent()})})]}),(0,Dn.jsx)("hr",{}),(0,Dn.jsxs)("div",{className:"mb-1",children:[(0,Dn.jsx)("span",{className:"fw-bold",children:"Next Round: "}),(0,Dn.jsx)("span",{children:e.GetNextRound()})]}),(0,Dn.jsxs)("div",{className:"mb-1",children:[(0,Dn.jsx)("span",{className:"fw-bold",children:"Next Threshold: "}),(0,Dn.jsx)("span",{children:(0,Dn.jsx)(il.A,{type:"d",amount:e.GetThresholdValueNext()})})]})]}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:()=>r(!1),children:"Cancel"}),n?(0,Dn.jsxs)(ss.A,{variant:"primary",disabled:!0,children:[(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"fa-spin me-2"}),"Advancing round"]}):(0,Dn.jsx)(ss.A,{variant:"primary",onClick:async()=>{if(!e||null==e.GetSettings)return;const t=e.GetSettings?e.GetSettings():null;if(!t)return void Us.error("Campaign settings could not be loaded");const{current_round:n,max_round:i}=t;if(n>=i)return void Us.info("Campaign is already at the final round");const l=n+1;let c=null;if(s){const e=(e=>{if(!e)return null;const[t,a,n]=e.split("-"),o=Number(t),i=Number(a),r=Number(n);if(!o||!i||!r)return null;const s=new Date(o,i-1,r,23,59,59,0);return Math.floor(s.getTime()/1e3)})(s);e&&e>0&&(c=e)}const d={...t,current_round:l,next_round_start:c};try{o(!0);const t=pn.o.getInstance();await t.UserCampaignManager.RunInit();const n=await t.UserCampaignManager.UpdateCampaignSettings(e.GetId(),d);if(!n||n.status>=400)throw new Error("UpdateCampaignSettings failed");await a(),Us.success(`Campaign advanced to round ${l}`),r(!1)}catch(xC){console.error(xC),Us.error("Could not advance campaign round")}finally{o(!1)}},children:"Advance to next round"})]})]})]})};var Bk=()=>{var e,a,n;const{campaign:o,reloadCmDisplay:i}=Xf();if(!o)return null;function r(e,t){var a;const n=[],o=null!==(a=null===e||void 0===e?void 0:e.rounds)&&void 0!==a?a:[];for(let i=1;i<=t;i++){const e=o.find((e=>e.round===i));e&&Number.isFinite(e.threshold_value)?n.push(e.threshold_value):n.length>0?n.push(n[n.length-1]+100):n.push(700)}return n}function s(e,t){var a;const n=[],o=null!==(a=null===e||void 0===e?void 0:e.rounds)&&void 0!==a?a:[];for(let i=1;i<=t;i++){const e=o.find((e=>e.round===i)),t=null===e||void 0===e?void 0:e.max_fielded;"number"===typeof t&&Number.isFinite(t)?n.push(t):n.length>0?n.push(n[n.length-1]):n.push(10)}return n}function l(e){if(null==e||!Number.isFinite(e))return"";const t=new Date(1e3*e);if(Number.isNaN(t.getTime()))return"";return`${t.getUTCFullYear()}-${String(t.getUTCMonth()+1).padStart(2,"0")}-${String(t.getUTCDate()).padStart(2,"0")}`}const c=o.GetSettings(),d=null!==(e=null===c||void 0===c?void 0:c.max_round)&&void 0!==e?e:12,[u,h]=(0,t.useState)(!1),[m,p]=(0,t.useState)(!1),[f,g]=(0,t.useState)(!1),[y,_]=(0,t.useState)(d),[b,v]=(0,t.useState)(null!==(a=null===c||void 0===c?void 0:c.current_round)&&void 0!==a?a:1),[w,x]=(0,t.useState)((()=>r(c,d))),[k,C]=(0,t.useState)((()=>s(c,d))),[j,S]=(0,t.useState)(l(null!==(n=null===c||void 0===c?void 0:c.next_round_start)&&void 0!==n?n:null)),I=y>=1&&y<=30,A=b>=1&&b<=y,N=w.length===y&&w.every(((e,t)=>Number.isFinite(e)&&(0===t||e>w[t-1]))),E=k.length===y&&k.every(((e,t)=>Number.isFinite(e)&&e>=0&&(0===t||e>=k[t-1]))),T=I&&A&&N&&E;return(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsxs)("div",{className:"CMManagePanel_EditSettings CMManagePanel-action",onClick:()=>{var e,t,a;const n=o.GetSettings(),i=null!==(e=null===n||void 0===n?void 0:n.max_round)&&void 0!==e?e:12;_(i),v(null!==(t=null===n||void 0===n?void 0:n.current_round)&&void 0!==t?t:1),x(r(n,i)),C(s(n,i)),S(l(null!==(a=null===n||void 0===n?void 0:n.next_round_start)&&void 0!==a?a:null)),p(!1),h(!0)},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.BH7,className:"me-2"}),"Campaign Settings"]}),(0,Dn.jsxs)(Il.A,{show:u,onHide:()=>h(!1),className:"CMManagePanel_AddWarband_Modal",centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Campaign Settings"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:()=>h(!1)})]}),(0,Dn.jsxs)(Il.A.Body,{children:[(0,Dn.jsxs)("div",{className:"mb-3",children:[(0,Dn.jsx)("label",{className:"form-label fw-bold",children:"Current round"}),(0,Dn.jsx)("input",{type:"number",className:"form-control "+(A?"":"is-invalid"),min:1,max:y,value:b,onChange:e=>{let t=parseInt(e.target.value,10);Number.isNaN(t)&&(t=1),t<1&&(t=1),t>y&&(t=y),v(t),p(!0)}}),(0,Dn.jsx)("div",{className:"form-text",children:`Must be between 1 and ${y}.`}),!A&&(0,Dn.jsx)("div",{className:"invalid-feedback",children:`Current round must be between 1 and ${y}.`})]}),(0,Dn.jsxs)("div",{className:"mb-3",children:[(0,Dn.jsxs)("div",{className:"d-flex justify-content-between align-items-center",children:[(0,Dn.jsx)("label",{className:"form-label fw-bold mb-0",children:"Next round starts at"}),(0,Dn.jsx)("button",{type:"button",className:"btn btn-secondary btn-sm",onClick:()=>{S(""),p(!0)},children:"Clear"})]}),(0,Dn.jsx)("input",{type:"date",className:"form-control mt-2",value:j,onChange:e=>{S(e.target.value),p(!0)}}),(0,Dn.jsx)("div",{className:"form-text",children:"Optional. Leave empty if not scheduled yet."})]}),(0,Dn.jsxs)("div",{className:"mb-3",children:[(0,Dn.jsx)("label",{className:"form-label fw-bold",children:"Max rounds"}),(0,Dn.jsx)("input",{type:"number",className:"form-control "+(I?"":"is-invalid"),min:1,max:30,value:y,onChange:e=>{let t=parseInt(e.target.value,10);Number.isNaN(t)&&(t=1),t<1&&(t=1),t>30&&(t=30),_(t),p(!0),x((e=>{const a=[...e];if(t>e.length){let n=e.length?e[e.length-1]:700;for(let o=e.length;o<t;o++)n+=100,a[o]=n}else t<e.length&&(a.length=t);return a})),C((e=>{const a=[...e];if(t>e.length){const n=e.length?e[e.length-1]:10;for(let o=e.length;o<t;o++)a[o]=n}else t<e.length&&(a.length=t);return a})),v((e=>e>t?t:e<1?1:e))}}),(0,Dn.jsx)("div",{className:"form-text",children:"Between 1 and 30."}),!I&&(0,Dn.jsx)("div",{className:"invalid-feedback",children:"Max rounds must be between 1 and 30."})]}),(0,Dn.jsxs)("div",{className:"mb-3",children:[(0,Dn.jsx)("label",{className:"form-label fw-bold",children:"Threshold values"}),(0,Dn.jsx)("div",{className:"small form-text mt-0 mb-2",children:"Each threshold must be higher than the previous round."}),w.map(((e,t)=>{const a=t>0?w[t-1]:null,n=!Number.isFinite(e)||null!=a&&e<=a;return(0,Dn.jsxs)("div",{children:[n&&(0,Dn.jsx)("div",{className:"invalid-feedback d-block mb-1 mt-3",children:null!=a?`Must be > ${a}.`:"Must be a valid number."}),(0,Dn.jsxs)("div",{className:"d-flex align-items-center mb-2",children:[(0,Dn.jsx)("div",{className:"me-2 text-nowrap",style:{width:"80px"},children:`Round ${t+1}`}),(0,Dn.jsx)("input",{type:"number",className:"form-control "+(n?"is-invalid":""),min:null!=a?a+1:1,value:Number.isFinite(e)?e:"",onChange:e=>((e,t)=>{let a=parseInt(t.target.value,10);Number.isNaN(a)&&(a=0),x((t=>{const n=[...t];return n[e]=a,n})),p(!0)})(t,e)})]})]},t)})),!N&&(0,Dn.jsx)("div",{className:"text-danger small mt-1",children:"Please ensure all thresholds are valid and strictly increasing."})]}),(0,Dn.jsxs)("div",{className:"mb-3",children:[(0,Dn.jsx)("label",{className:"form-label fw-bold",children:"Max fielded models"}),(0,Dn.jsx)("div",{className:"small form-text mt-0 mb-2",children:"Per round, this value may stay the same or increase."}),k.map(((e,t)=>{const a=t>0?k[t-1]:null,n=!Number.isFinite(e)||e<0||null!=a&&e<a;return(0,Dn.jsxs)("div",{children:[n&&(0,Dn.jsx)("div",{className:"invalid-feedback d-block mb-1 mt-3",children:null!=a?`Must be \u2265 ${a}.`:"Must be a valid non-negative number."}),(0,Dn.jsxs)("div",{className:"d-flex align-items-center mb-2",children:[(0,Dn.jsx)("div",{className:"me-2 text-nowrap",style:{width:"80px"},children:`Round ${t+1}`}),(0,Dn.jsx)("input",{type:"number",className:"form-control "+(n?"is-invalid":""),min:null!=a?a:0,value:Number.isFinite(e)?e:"",onChange:e=>((e,t)=>{let a=parseInt(t.target.value,10);Number.isNaN(a)&&(a=0),C((t=>{const n=[...t];return n[e]=a,n})),p(!0)})(t,e)})]})]},t)})),!E&&(0,Dn.jsx)("div",{className:"text-danger small mt-1",children:"Please ensure all max fielded values are valid and never decrease between rounds."})]})]}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:()=>h(!1),children:"Cancel"}),f?(0,Dn.jsxs)(ss.A,{variant:"primary",disabled:!0,children:[(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"fa-spin me-2"}),"Saving"]}):(0,Dn.jsx)(ss.A,{variant:"primary",onClick:async()=>{if(T){g(!0);try{var e;const t=function(e){if(!e)return null;const t=new Date(`${e}T00:00:00Z`);return Number.isNaN(t.getTime())?null:Math.floor(t.getTime()/1e3)}(j),a={current_round:b,max_round:y,next_round_start:t,rounds:w.map(((e,t)=>{var a;return{round:t+1,threshold_value:e,max_fielded:null!==(a=k[t])&&void 0!==a?a:null}}))},n=pn.o.getInstance(),r=await n.UserCampaignManager.UpdateCampaignSettings(o.GetId(),a);if(200!==("number"===typeof r?r:null!==(e=null===r||void 0===r?void 0:r.status)&&void 0!==e?e:500))return console.error("UpdateCampaignSettings failed",r),Us.error("Failed to save campaign settings"),void g(!1);Us.success("Campaign settings saved"),i(),h(!1),p(!1)}catch(t){console.error(t),Us.error("Failed to save campaign settings - Unexpected Error")}finally{g(!1)}}},disabled:!m||!T,children:"Save Settings"})]})]})]})};var Hk=()=>{const{reloadCmData:e}=Xf();return(0,Dn.jsxs)("div",{className:"CMManagePanel_Reload CMManagePanel-action",onClick:()=>{e()},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.lLb,className:"me-2"}),"Refresh Data"]})};var Uk=()=>{const{campaign:e}=Xf(),{userId:t}=(0,ti.A)();return e&&t&&(e.IsAdmin(t)||e.IsJoined(t))?(0,Dn.jsxs)("div",{className:"CMManagePanel CampaignManager-card",children:[(0,Dn.jsx)("div",{className:"CampaignManager-card-title",children:(0,Dn.jsx)("h2",{children:"Manage"})}),(0,Dn.jsxs)("div",{className:"CampaignManager-card-content",children:[(0,Dn.jsx)(Hk,{}),e.IsAdmin(t)&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(Bk,{}),(0,Dn.jsx)(Pk,{}),(0,Dn.jsx)(Gk,{}),(0,Dn.jsx)(Lk,{}),(0,Dn.jsx)(Wk,{})]}),(0,Dn.jsx)(Fk,{})]})]}):null};var Kk=()=>{const{campaign:e,updateCampaignKey:a}=Xf();if(!e)return null;const[n,o]=(0,t.useState)(e.GetHistory()),[i,r]=(0,t.useState)(5);(0,t.useEffect)((()=>{o(e.GetHistory())}),[a]);const s=n.slice(0,i);return(0,Dn.jsxs)("div",{className:"CMHistory",children:[(0,Dn.jsx)("h2",{children:"History"}),!n.length&&(0,Dn.jsx)("div",{className:"",children:"No history available"}),s.map(((e,a)=>"announcement"===e.type?(0,Dn.jsxs)(t.Fragment,{children:[(0,Dn.jsx)(Ig,{announcement:e.announcement}),s.length>a+1&&(0,Dn.jsx)("hr",{className:"my-4"})]},e.announcement.Id):"game"===e.type?(0,Dn.jsxs)(t.Fragment,{children:[(0,Dn.jsx)(fg,{game:gg.T.CreateGameReportBy(e.game,!1)},a),s.length>a+1&&(0,Dn.jsx)("hr",{className:"my-4"})]},a):void 0)),i<n.length&&(0,Dn.jsx)("div",{className:"text-center mt-4",children:(0,Dn.jsx)("button",{className:"btn btn-secondary",onClick:()=>r((e=>e+10)),children:"Show more"})})]},a)};var zk=()=>{const{campaign:e,reloadCmDisplay:a}=Xf(),{userId:n,isLoggedIn:o}=(0,ti.A)(),[i,r]=(0,t.useState)(!1);if(!n||!e)return null;if(!e.IsInvited(n))return null;return(0,Dn.jsxs)("div",{className:"CMCampaignInviteThis",children:[(0,Dn.jsx)("div",{className:"fw-bold",children:"Campaign invite"}),(0,Dn.jsx)("div",{className:"small",children:"You are invited to this campaign. Click below to join or decline the invitation."}),i?(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("div",{className:"loading-wrapper"}),(0,Dn.jsx)(Zo,{message:"Loading",className:"small"})]}):(0,Dn.jsxs)("div",{className:"CampaignListEntry-actions",children:[(0,Dn.jsxs)(ss.A,{variant:"primary",className:"btn-sm me-3",onClick:()=>{if(null!=e){r(!0);const t=pn.o.getInstance();t.UserCampaignManager.RunInit().then((()=>{t.UserCampaignManager.CampaignInviteAccept(e.GetId()).then((()=>{a(),r(!1),Us.success("Joined Campaign")}))}))}},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.e68,className:"me-2"}),"Join"]}),(0,Dn.jsxs)(ss.A,{variant:"secondary",className:"btn-sm",onClick:()=>{if(null!=e){r(!0);const t=pn.o.getInstance();t.UserCampaignManager.RunInit().then((()=>{t.UserCampaignManager.CampaignInviteReject(e.GetId()).then((()=>{a(),r(!1),Us.success("Invite declined")}))}))}},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.GRI,className:"me-2"}),"Decline"]})]})]})};var Vk=()=>{var e;const{campaign:a}=Xf(),n=function(){var e;return"undefined"!==typeof window&&null!==(e=window.location)&&void 0!==e&&e.origin?window.location.origin:"https://trench-companion.com"}(),o=("undefined"!==typeof window?window.location.href:`${n}/campaigns`)||`${n}/campaigns`,i=(0,t.useRef)(null),{campaignName:r,campaignDescription:s,players:l,warbands:c,games:d,settings:u}=(0,t.useMemo)((()=>{var e,t,n;return a?{campaignName:a.GetName(),campaignDescription:a.GetDescription(),players:null!==(e=a.GetPlayers())&&void 0!==e?e:[],warbands:null!==(t=a.GetWarbands())&&void 0!==t?t:[],games:null!==(n=a.GetGames())&&void 0!==n?n:[],settings:a.GetSettings()}:{campaignName:void 0,campaignDescription:void 0,players:[],warbands:[],games:[],settings:null}}),[a]),h=(0,t.useMemo)((()=>l.map((e=>{const t=e.Id,a=e.Name,o=e.ProfileUrl,i=null!==o&&void 0!==o?o:null!=t?`${n}/profile/${t}`:void 0;return{"@type":"Person",...i&&{"@id":i,url:i},...a&&{name:a},...null!=t&&{identifier:`player-${t}`}}}))),[l,n]),m=(0,t.useMemo)((()=>c.map((e=>{const t=e.Id,a=e.WarbandUrl,n=e.WarbandName,o=e.FactionName,i={"@type":"SportsTeam",...a&&{"@id":a,url:a},...n&&{name:n},...null!=t&&{identifier:`warband-${t}`}};return o&&(i.memberOf={"@type":"Organization",...o&&{name:o}}),i}))),[c,n]),p=(0,t.useMemo)((()=>(d||[]).map((e=>{const t=`${n}/games/${e.game_report_id}`,a=new Date(1e3*e.date).toISOString();return{"@type":"SportsEvent","@id":t,url:t,name:`Game Report: ${e.warbands.map((e=>e.name)).join(" vs ")}`,startDate:a,eventStatus:"https://schema.org/EventScheduled",competitor:e.warbands.map((e=>({"@type":"SportsTeam",name:e.name,url:`${n}/warband/detail/${e.id}`})))}}))),[d,n]),f=(0,t.useMemo)((()=>{if(d&&d.length>0){const e=[...d].sort(((e,t)=>e.date-t.date));return new Date(1e3*e[0].date).toISOString()}return(new Date).toISOString()}),[d]),g=(0,t.useMemo)((()=>{if(!a)return null;const e=[];u&&(e.push({"@type":"PropertyValue",name:"Current Round",value:u.current_round}),e.push({"@type":"PropertyValue",name:"Max Round",value:u.max_round}),u.next_round_start&&e.push({"@type":"PropertyValue",name:"Next Round Start",value:new Date(1e3*u.next_round_start).toISOString()}));const t={"@context":"https://schema.org","@type":"EventSeries","@id":o,url:o,image:["https://synod.trench-companion.com/wp-content/uploads/2025/07/Campaign-Mode-300x210.jpg"],name:r||"Trench Crusade Campaign",description:s,startDate:f,eventStatus:"https://schema.org/EventOngoing",location:{"@type":"Place",name:"Private Venue"},organizer:{"@type":"Organization",name:"Trench Crusade Companion",url:n},attendee:h,competitor:m,subEvent:p,...e.length>0&&{additionalProperty:e}};return i=t,JSON.stringify(i).replace(/</g,"\\u003c").replace(/>/g,"\\u003e").replace(/&/g,"\\u0026");var i}),[a,r,s,o,h,m,p,f,u,n]);(0,t.useEffect)((()=>{null===i.current&&a&&g&&(i.current=g)}),[g,a]);const y=null!==(e=i.current)&&void 0!==e?e:a?g:null;return a&&y?(0,Dn.jsx)("script",{type:"application/ld+json",dangerouslySetInnerHTML:{__html:y}}):null};var Yk=()=>{const{userId:e,isLoggedIn:a}=(0,ti.A)(),{campaign:n,loading:o,error:i,reloadCmData:r}=Xf(),s=((0,zt.Zp)(),t.useMemo((()=>{var e;const t=(null===n||void 0===n||null===(e=n.GetDescription)||void 0===e?void 0:e.call(n))||"",a=(0,pl.$_)(t);return a.length>160?a.slice(0,159)+"\u2026":a}),[null===n||void 0===n?void 0:n.GetDescription()]));return o?(0,Dn.jsx)("div",{className:"LoadingOverlay-wrap-100vh",children:(0,Dn.jsx)(Zo,{message:"Loading Campaign"})}):n?i?(0,Dn.jsx)(Yl,{}):(0,Dn.jsxs)("div",{className:"CampaignManager",children:[(0,Dn.jsx)(Jo,{title:n.GetName()+" - Campaign Manager",description:s}),(0,Dn.jsx)("div",{className:"CampaignManager-header",children:(0,Dn.jsxs)("div",{className:"container",children:[(0,Dn.jsx)("h1",{children:n.GetName()}),(0,Dn.jsx)(Sg,{id:"campaign",type:"campaign",item:n})]})}),(0,Dn.jsx)("div",{className:"CampaignManager-main",children:(0,Dn.jsx)("div",{className:"container",children:(0,Dn.jsxs)("div",{className:"row",children:[(0,Dn.jsxs)("div",{className:"col-12 col-md-7",children:[(0,Dn.jsx)(zk,{}),(0,Dn.jsx)("div",{className:"hide-md-up",children:(0,Dn.jsx)(Uk,{})}),(0,Dn.jsx)(Dk,{}),(0,Dn.jsx)("div",{className:"container my-3",children:(0,Dn.jsx)(Ll,{placementId:"campaign-page-left",type:"campaign-left"})}),(0,Dn.jsx)(Kk,{})]}),(0,Dn.jsxs)("div",{className:"col-12 col-md-5",children:[(0,Dn.jsx)("div",{className:"hide-md-down",children:(0,Dn.jsx)(Uk,{})}),(0,Dn.jsx)(oi,{format:"wide",className:"mb-4"}),(0,Dn.jsx)(qk,{}),(0,Dn.jsx)("div",{className:"container my-3",children:(0,Dn.jsx)(Ll,{placementId:"campaign-page-right",type:"campaign-right"})}),(0,Dn.jsx)(Mk,{})]})]})})}),(0,Dn.jsx)(Vk,{})]}):(0,Dn.jsx)(Yl,{})};var Jk=()=>{const{userId:e,isLoggedIn:t}=(0,ti.A)(),{id:a}=(0,zt.g)();if(!a||isNaN(Number(a)))return(0,Dn.jsx)(Yl,{});return(0,zt.zy)().pathname.match("/.*/$")?(0,Dn.jsx)(Yl,{}):(0,Dn.jsxs)(Zf,{campaignId:Number(a),hydrate:!0,children:[(0,Dn.jsx)(df,{children:(0,Dn.jsx)(Yk,{})}),(0,Dn.jsx)("div",{className:"container my-3",children:(0,Dn.jsx)(Ll,{placementId:"campaign-page-bottom",type:"container-width"})})]})};var $k=e=>{let{label:t,values:a,className:n=""}=e;const o=(0,zt.Zp)();return(0,Dn.jsxs)("div",{className:`GameLabeledValue  ${n}`,children:[(0,Dn.jsx)("div",{className:"label",children:t}),a.map(((e,t)=>(0,Dn.jsx)("div",{className:"value",children:e.link?(0,Dn.jsx)(yn.A,{classes:"",link:e.link,runfunc:()=>{e.link&&o(e.link)},children:e.content}):(0,Dn.jsx)(Dn.Fragment,{children:e.content})},t)))]})};const Zk=(0,t.createContext)(void 0);function Qk(){const e=(0,t.useContext)(Zk);if(!e)throw new Error("useGame must be used within <GameProvider>");return e}const Xk=e=>{let{gameId:a,children:n}=e;const[o,i]=(0,t.useState)(null),[r,s]=(0,t.useState)(!0),[l,c]=(0,t.useState)(null),d=async()=>{try{s(!0),c(null);const e=await gg.T.GetGameReportByID(a);i(e)}catch(xC){var e;c(null!==(e=null===xC||void 0===xC?void 0:xC.message)&&void 0!==e?e:"Failed to load game."),i(null)}finally{s(!1)}};return(0,t.useEffect)((()=>{d()}),[a]),(0,Dn.jsx)(Zk.Provider,{value:{game:o,loading:r,error:l,refresh:d},children:n})};var eC=()=>{var e,a;const{game:n}=Qk();if(!n)return null;const[o,i]=(0,t.useState)("");(0,t.useEffect)((()=>{var e;const t=null===(e=n.GameData)||void 0===e?void 0:e.scenario_id;if(!t)return void i("Custom Scenario");let a=!1;return(async()=>{try{const e=await Xa.ScenarioFactory.CreateNewScenario(t,null);a||i(e.Name?e.Name:"Custom Scenario")}catch(xC){console.error("Failed to load scenario",xC),a||i("Custom Scenario")}})(),()=>{a=!0}}),[null===(e=n.GameData)||void 0===e?void 0:e.scenario_id]);const r=new Date(1e3*n.Date).toLocaleDateString(void 0,{year:"numeric",month:"2-digit",day:"2-digit"}),s=()=>{var e;const t=null===(e=n.GameData)||void 0===e?void 0:e.winner;if("draw"===t||null==t)return"Draw";const a=n.Warbands.find((e=>e.id===t));return a?a.name:"-"},[l,c]=(0,t.useState)([]);return(0,t.useEffect)((()=>{let e=!0;return(async()=>{const t=await Xa.ScenarioFactory.GetAllScenarios();e&&c(t)})(),()=>{e=!1}}),[]),(0,Dn.jsxs)("div",{className:"GameViewCard GameSummary",children:[(0,Dn.jsx)(Jo,{title:2==n.Warbands.length?`${n.Warbands[0].name} vs. ${n.Warbands[1].name} ${r}`:`Game Report ${r}`,description:(()=>{let e="";return n.CampaignID?e+=n.CampaignName?n.CampaignName+" ":" ":e+="One-Off Game ",e+=null!==o&&void 0!==o?o:"\u2014",e+=" ",e+="Winner: "+s(),e})()}),(0,Dn.jsx)("div",{className:"GameViewCard-Title",children:(0,Dn.jsx)("h2",{children:"Summary"})}),(0,Dn.jsxs)("div",{className:"GameViewCard-Content",children:[n.CampaignID?(0,Dn.jsx)($k,{label:"Campaign",values:[{content:n.CampaignName?n.CampaignName:null,link:`${la}/${n.CampaignID}`}]}):(0,Dn.jsx)($k,{label:"Campaign",values:[{content:"One-Off Game"}]}),(0,Dn.jsx)($k,{label:"Scenario",values:[{content:null!==o&&void 0!==o?o:"\u2014"}]}),null!==(a=n.GameData)&&void 0!==a&&a.ranked?(0,Dn.jsx)($k,{label:"Ranked",values:[{content:"Ranked Game"}]}):(0,Dn.jsx)($k,{label:"Ranked",values:[{content:"Unranked"}]}),(0,Dn.jsx)($k,{label:"Verification",values:[{content:(0,Dn.jsx)(Dn.Fragment,{children:null!==n&&void 0!==n&&n.Verified?(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(Gn.g,{icon:Pn.QRE,className:"me-2 icon-success"}),"Verified"]}):(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(Gn.g,{icon:Pn.JAe,className:"me-2 icon-wraning"}),"Not verified"]})})}]}),(0,Dn.jsx)($k,{label:"Date",values:[{content:r}]}),(0,Dn.jsx)($k,{label:"Winner",values:[{content:s()}]})]})]})};const tC=e=>{let{fighter:t}=e;const a=[...t.eq||[],...t.up||[],...t.adv||[],...t.inj||[]].map((e=>e.n)).join(", ");return(0,Dn.jsxs)("div",{className:"fighter-row",children:[(0,Dn.jsxs)("div",{className:"fighter-title",children:[(0,Dn.jsx)("div",{className:"fighter-name",children:t.mdn}),(0,Dn.jsxs)("div",{className:"fighter-cost",children:[(0,Dn.jsx)(il.A,{type:"d",amount:t.c.d}),(0,Dn.jsx)(il.A,{type:"g",amount:t.c.g})]})]}),a&&(0,Dn.jsx)("div",{className:"fighter-details",children:(0,Dn.jsx)("div",{className:"fighter-prop-section",children:a})})]})};var aC=e=>{let{exportData:a}=e;const[n,o]=(0,t.useState)(!1),i=(0,t.useMemo)((()=>{if(!a)return null;if("string"===typeof a)try{return JSON.parse(a)}catch(xC){return console.error("Failed to parse Warband Snapshot",xC),null}return a}),[a]);if(!i)return null;const r=i.elt&&i.elt.length>0,s=i.mds&&i.mds.length>0,l=i.mrc&&i.mrc.length>0;return(0,Dn.jsx)("div",{className:"WarbandSnapshotDisplay",children:(0,Dn.jsxs)("div",{className:"",children:[r&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("div",{className:"WarbandSnapshotDisplay-category-title",children:"Elites"}),i.elt.map(((e,t)=>(0,Dn.jsx)(tC,{fighter:e},`e-${t}`)))]}),s&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("div",{className:"WarbandSnapshotDisplay-category-title",children:"Troops"}),i.mds.map(((e,t)=>(0,Dn.jsx)(tC,{fighter:e},`m-${t}`)))]}),l&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("div",{className:"WarbandSnapshotDisplay-category-title",children:"Mercenaries"}),i.mrc.map(((e,t)=>(0,Dn.jsx)(tC,{fighter:e},`r-${t}`)))]})]})})};var nC=e=>{let{warband:a,player:n}=e;const{game:o}=Qk();if(!o)return null;const i=(0,zt.Zp)();if(!n||!n.image||!n.image.image_id)return null;const r=t.useMemo((()=>{var e,t;if(null===(e=o.GameData)||void 0===e||!e.warbands)return null;const n=o.GameData.warbands.find((e=>Number(e.warbandId)===Number(a.id)));return null!==(t=null===n||void 0===n?void 0:n.warbandExport)&&void 0!==t?t:null}),[o.GameData,a.id]),s=e=>e>0?`+${e}`:e<0?`${e}`:"\xb10";return(0,Dn.jsxs)("div",{className:"GameForce",children:[(0,Dn.jsxs)(yn.A,{classes:"warband-image-wrap",link:`/warband/detail/${a.id}`,runfunc:()=>{i(`/warband/detail/${a.id}`)},children:[(0,Dn.jsx)(Wn,{imageId:a.image.image_id}),(0,Dn.jsxs)("div",{className:"text-wrap",children:[(0,Dn.jsx)("div",{className:"warband-name",children:a.name}),a.is_winner&&(0,Dn.jsx)("div",{className:"winner",children:"Winner"})]})]}),(0,Dn.jsxs)("div",{className:"player",children:[(0,Dn.jsx)(yn.A,{classes:"image-wrap",link:`/profile/${n.id}`,runfunc:()=>{i(`/profile/${n.id}`)},children:(0,Dn.jsx)(Wn,{imageId:n.image.image_id})}),(0,Dn.jsxs)("div",{className:"text-wrap",children:[(0,Dn.jsx)(eg,{className:"player-name",name:null===n||void 0===n?void 0:n.name,userId:n.id,link:!0,statusString:n.supporter}),(0,Dn.jsx)("div",{className:"player-lower",children:"supporter"==n.supporter?"Supporter":"Free member"})]})]}),(0,Dn.jsx)($k,{label:"Faction",values:[{content:a.faction}],className:"mb-2"}),(e=>{const t=(()=>{var e,t,a,i;if(!o||!n)return null;if(!o.GameRatings)return null;let r=null;if("string"===typeof o.GameRatings)try{r=JSON.parse(o.GameRatings)}catch{return null}else r=o.GameRatings;const s=r[String(n.id)];if(!s)return null;const l=null!==(e=s.r0)&&void 0!==e?e:0,c=null!==(t=s.dr)&&void 0!==t?t:0,d=null!==(a=s.m0)&&void 0!==a?a:0,u=null!==(i=s.dm)&&void 0!==i?i:0;return{ratingDelta:c,ratingBefore:l,ratingAfter:l+c,mmrDelta:u,mmrBefore:d,mmrAfter:d+u,supporter:n.supporter}})();if(!t)return null;const{ratingBefore:a,ratingDelta:i,ratingAfter:r,mmrBefore:l,mmrDelta:c,mmrAfter:d,supporter:u}=t,h=`${r} (${s(i)})`,m=!(null===(e=o.GameData)||void 0===e||!e.ranked),p=`${d})`,f=`${d} (${s(c)})`;return(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)($k,{label:"Trench Rating",values:[{content:(0,Dn.jsx)(Dn.Fragment,{children:"supporter"==u?(0,Dn.jsx)(Dn.Fragment,{children:h}):(0,Dn.jsx)(Rx,{popoverText:"As a premium member, your Rating will be visible",trigger:(0,Dn.jsxs)("div",{className:"d-inline-block",children:[(0,Dn.jsx)(Gn.g,{icon:Pn.DW4,className:"me-2 locked"}),"(",s(i),")"]}),id:n.id+"achievement-lock"})})}],className:"mb-2"}),(0,Dn.jsx)($k,{label:"Ranked MMR",values:[{content:(0,Dn.jsx)(Dn.Fragment,{children:"supporter"==u?(0,Dn.jsx)(Dn.Fragment,{children:m?f:p}):(0,Dn.jsx)(Rx,{popoverText:"MMR is visible for premium members only.",trigger:(0,Dn.jsxs)("div",{className:"d-inline-block",children:[(0,Dn.jsx)(Gn.g,{icon:Pn.DW4,className:"me-2 locked"}),"(",s(c),")"]}),id:n.id+"achievement-lock"})})}],className:"mb-2"})]})})(),r&&(0,Dn.jsx)($k,{label:"Rating",values:[{content:(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(il.A,{type:"d",amount:r.dr}),(0,Dn.jsx)(il.A,{type:"d",amount:r.gr})]})}]}),(0,Dn.jsx)("hr",{}),(0,Dn.jsx)($k,{label:"Victory Points",values:[{content:(e=>{var t,a;const n=null===(t=o.GameData)||void 0===t||null===(a=t.vp)||void 0===a?void 0:a[e];return void 0===n||null===n?"-":String(n)})(a.id)}],className:"mb-2"}),(0,Dn.jsx)($k,{label:"Kills",values:[{content:(e=>{var t,a;const n=null===(t=o.GameData)||void 0===t||null===(a=t.kills)||void 0===a?void 0:a[e];return void 0===n||null===n?"0":String(n)})(a.id)}],className:"mb-2"}),(0,Dn.jsx)($k,{label:"Glorious Deeds",values:(e=>{var t,a;const n=(null!==(t=null===(a=o.GameData)||void 0===a?void 0:a.deeds)&&void 0!==t?t:[]).filter((t=>t.warband===e));return 0===n.length?[{content:"-"}]:n.map((e=>({content:e.name||e.id})))})(a.id)}),(0,Dn.jsx)("hr",{}),r&&(0,Dn.jsx)(aC,{exportData:r})]})};var oC=()=>{const{game:e}=Qk();if(!e)return null;const a=(0,t.useMemo)((()=>{const t=new Map;for(const a of e.Players)t.set(Number(a.id),a);return t}),[e.Players]);return(0,Dn.jsx)("div",{className:"GameForces",children:(0,Dn.jsxs)("div",{className:"GameViewCard GameSummary",children:[(0,Dn.jsx)("div",{className:"GameViewCard-Title",children:(0,Dn.jsx)("h2",{children:"Forces"})}),(0,Dn.jsx)("div",{className:"GameViewCard-Content",children:(0,Dn.jsx)("div",{className:"inner",children:e.Warbands.map((e=>{var t;const n=null!==(t=a.get(Number(e.user_id)))&&void 0!==t?t:null;return(0,Dn.jsx)(nC,{warband:e,player:n},e.id)}))})})]})})};var iC=()=>{const{game:e}=Qk();return e&&e.Notes?(0,Dn.jsxs)("div",{className:"GameViewCard GameNotes",children:[(0,Dn.jsx)("div",{className:"GameViewCard-Title",children:(0,Dn.jsx)("h2",{children:"Notes"})}),(0,Dn.jsx)("div",{className:"GameViewCard-Content",children:(0,Dn.jsx)("div",{className:"",dangerouslySetInnerHTML:{__html:(0,pl.lh)(e.Notes)}})})]}):null};var rC=e=>{let{id:a}=e;const{userId:n}=(0,ti.A)(),o=(0,zt.Zp)();if(!n)return null;const{game:i,loading:r,error:s}=Qk(),[l,c]=(0,t.useState)(!1);if(!i)return null;const{activePopoverId:d,setActivePopoverId:u}=uf(),h=d===a,m=e=>t=>{t.stopPropagation(),e()},[p,f]=(0,t.useState)(!1),[g,y]=(0,t.useState)(!1);return(0,t.useEffect)((()=>{(p||g)&&u(null)}),[p,g]),i.Verified?null:(0,Dn.jsxs)("div",{className:"GameContextualPopover",children:[(0,Dn.jsx)(Fn.A,{trigger:"click",placement:"left",show:h,onToggle:()=>{u(h?null:a)},rootClose:!0,overlay:(0,Dn.jsx)(qn.A,{id:`cm-popover-${a}`,className:"CM-item-actions-popover",children:(0,Dn.jsxs)(qn.A.Body,{className:"popover CM-item-actions-popover",children:[!i.Verified&&(0,Dn.jsx)("div",{className:"actions",children:(0,Dn.jsxs)("div",{className:"action",onClick:m((()=>{f(!0)})),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.MT7,className:"icon-inline-left-l"}),"Edit Game"]})}),(0,Dn.jsx)("div",{className:"actions",children:(0,Dn.jsxs)("div",{className:"action",onClick:m((()=>{y(!0)})),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.yLS,className:"icon-inline-left-l"}),"Delete Game"]})})]})}),children:l?(0,Dn.jsx)("div",{className:"CM-item-actions",children:(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"fa-spin"})}):(0,Dn.jsx)("div",{className:"CM-item-actions",onClick:e=>e.stopPropagation(),children:(0,Dn.jsx)(Gn.g,{icon:Pn.nx5})})}),(0,Dn.jsxs)(Il.A,{show:g,onHide:()=>y(!1),centered:!0,children:[(0,Dn.jsxs)(Il.A.Header,{closeButton:!1,children:[(0,Dn.jsx)(Il.A.Title,{children:"Delete Game"}),(0,Dn.jsx)(Gn.g,{icon:Pn.Jyw,className:"modal-close-icon",role:"button",onClick:e=>{e.stopPropagation(),y(!1)}})]}),(0,Dn.jsx)(Il.A.Body,{children:(0,Dn.jsx)(Rp.A,{type:"danger",children:"Do you really want to delete this Game? This action can not be undone."})}),(0,Dn.jsxs)(Il.A.Footer,{children:[(0,Dn.jsx)(ss.A,{variant:"secondary",onClick:e=>{e.stopPropagation(),y(!1)},children:"Cancel"}),l?(0,Dn.jsxs)(ss.A,{variant:"danger",disabled:!0,children:[(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"fa-spin icon-inline-left"}),"Deleting"]}):(0,Dn.jsxs)(ss.A,{variant:"danger",onClick:m((async()=>{if(null!=i)try{c(!0),u(null),await _f.T.deleteGameReport(i.ID)}catch(xC){var e;Us.error(null!==(e=null===xC||void 0===xC?void 0:xC.message)&&void 0!==e?e:"Could not delete game")}finally{Us.success("Game deleted"),setTimeout((()=>{c(!1),y(!1),o(`/profile/${n}`)}),1e3)}})),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.yLS,className:"icon-inline-left"}),"Delete Game"]})]})]}),(0,Dn.jsx)(vf,{show:p,onClose:()=>{f(!1)},edit:!0,currentGame:i})]})};var sC=()=>{const{userId:e}=(0,ti.A)(),{game:a,loading:n,error:o,refresh:i}=Qk(),[r,s]=(0,t.useState)(!1),[l,c]=(0,t.useState)(!1);if(n)return null;if(!a||!e)return null;if(l)return null;if(!(Array.isArray(a.MissingSignoffs)&&a.MissingSignoffs.includes(e)))return null;return(0,Dn.jsx)("div",{className:"GameVerifyBig",children:(0,Dn.jsxs)(Rp.A,{type:"warning",className:"mb-4",children:[(0,Dn.jsx)("h5",{className:"fw-bold",children:"Verify game result"}),(0,Dn.jsxs)("p",{className:"small",children:["You need to verify the game result. Only verified game results are counted towards your statistics and achievements. Both players must verify the same game result for it to be verified.",(0,Dn.jsx)("br",{}),"If you need to make adjustments: As a player in the game, you can edit the game result. After editing the result all other players will need to verify the new results again."]}),r?(0,Dn.jsxs)("button",{className:"btn btn-primary",disabled:!0,children:[(0,Dn.jsx)(Gn.g,{icon:Pn.s4k,className:"fa-spin me-2"}),"Saving"]}):(0,Dn.jsxs)("button",{className:"btn btn-primary",onClick:async()=>{s(!0);try{await _f.T.signOffGameReport(a.ID),await(null===i||void 0===i?void 0:i()),Us.success("Signed off successfully"),c(!0)}catch(xC){var e;Us.error(null!==(e=null===xC||void 0===xC?void 0:xC.message)&&void 0!==e?e:"Could not sign off. Please reload the page")}finally{s(!1)}},children:[(0,Dn.jsx)(Gn.g,{icon:Pn.uZo,className:"me-2"}),"Sign off game"]})]})})};var lC=e=>{let{game:a}=e;const n=(0,t.useMemo)((()=>{if(!a)return null;const e="https://trench-companion.com",t=`${e}/games/${a.ID}`,n=new Date(1e3*a.Date),o=new Date(n.getTime()+72e5);let i=null;if(a.GameRatings)if("string"===typeof a.GameRatings)try{i=JSON.parse(a.GameRatings)}catch(xC){console.error("Failed to parse ratings",xC)}else i=a.GameRatings;const r=a.Warbands.map((t=>{var n,o,r,s,l,c,d,u,h,m;const p=Number(t.id),f=a.Players.find((e=>String(e.id)===String(t.user_id))),g=null===(n=a.GameData)||void 0===n||null===(o=n.warbands)||void 0===o||null===(r=o.find((e=>Number(e.warbandId)===p)))||void 0===r?void 0:r.warbandExport,y=[];if(g){const e=e=>{e&&e.forEach((e=>{y.push({"@type":"Person",name:e.mdn})}))};e(g.elt),e(g.mds),e(g.mrc)}let _;if(f){var b,v,w,x;const t=(null===(b=f.image)||void 0===b||null===(v=b.urls)||void 0===v?void 0:v.medium_large)||(null===(w=f.image)||void 0===w||null===(x=w.urls)||void 0===x?void 0:x.full);_={"@type":"Person",name:f.name,url:`${e}/profile/${f.id}`,...t&&{image:t}}}const k=[];k.push({"@type":"PropertyValue",name:"Faction",value:t.faction});const C=null===(s=a.GameData)||void 0===s||null===(l=s.vp)||void 0===l?void 0:l[p];void 0!==C&&null!==C&&k.push({"@type":"PropertyValue",name:"Victory Points",value:C});let j="Loss";if("draw"===(null===(c=a.GameData)||void 0===c?void 0:c.winner)?j="Draw":t.is_winner&&(j="Win"),k.push({"@type":"PropertyValue",name:"Result",value:j}),f&&i){const e=i[String(f.id)];e&&(k.push({"@type":"PropertyValue",name:"Rating Change",value:e.dr}),k.push({"@type":"PropertyValue",name:"MMR Change",value:e.dm}))}const S=(null===(d=a.GameData)||void 0===d||null===(u=d.deeds)||void 0===u?void 0:u.filter((e=>Number(e.warband)===p)))||[];S.forEach((e=>{k.push({"@type":"PropertyValue",name:"Glorious Deed",value:e.name||e.id})}));const I=null===(h=t.image)||void 0===h||null===(m=h.urls)||void 0===m?void 0:m.medium_large;return{"@type":"SportsTeam",name:t.name,url:`${e}/warband/detail/${t.id}`,...I&&{image:I},coach:_,member:y,additionalProperty:k}})),s=[];a.Warbands.forEach((e=>{var t,a;null!==(t=e.image)&&void 0!==t&&null!==(a=t.urls)&&void 0!==a&&a.medium_large&&s.push(e.image.urls.medium_large)}));const l={"@context":"https://schema.org","@type":"SportsEvent","@id":t,url:t,name:`Game Report: ${a.Warbands.map((e=>e.name)).join(" vs ")}`,startDate:n.toISOString(),endDate:o.toISOString(),eventAttendanceMode:"https://schema.org/OfflineEventAttendanceMode",eventStatus:"https://schema.org/EventScheduled",location:{"@type":"Place",name:"Private Venue"},...s.length>0&&{image:s},competitor:r,description:a.Notes||`Game report between ${a.Warbands.map((e=>e.name)).join(" and ")}.`};return JSON.stringify(l)}),[a]);return n?(0,Dn.jsx)("script",{type:"application/ld+json",dangerouslySetInnerHTML:{__html:n}}):null};const cC=()=>{const{game:e,loading:t,error:a}=Qk();return e||t?e?(0,Dn.jsxs)("div",{className:"GameView",children:[(0,Dn.jsx)("div",{className:"GameView-Header",children:(0,Dn.jsxs)("div",{className:"container",children:[(0,Dn.jsx)("h1",{children:"Game Report"}),(0,Dn.jsx)(rC,{id:"header-"+e.ID})]})}),(0,Dn.jsxs)("div",{className:"container",children:[t&&(0,Dn.jsx)("div",{className:"LoadingOverlay-wrap-100vh",children:(0,Dn.jsx)(Zo,{message:"Loading game"})}),a&&(0,Dn.jsx)("div",{className:"alert alert-danger",children:a}),!t&&!a&&e&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(sC,{}),(0,Dn.jsx)(eC,{}),(0,Dn.jsx)(oi,{format:"compendium-wide",className:"mb-4"}),(0,Dn.jsx)(oC,{}),(0,Dn.jsx)(iC,{}),(0,Dn.jsx)(oi,{format:"compendium-wide",className:"mb-4"}),(0,Dn.jsx)(lC,{game:e})]}),(0,Dn.jsx)(Ll,{placementId:"games-detail-bottom",type:"container-width",className:"my-3"})]})]}):null:(0,Dn.jsx)(Yl,{})};var dC=()=>{const{id:e}=(0,zt.g)(),t=Number(e);if(!Number.isFinite(t)||t<=0)return(0,Dn.jsx)(Yl,{});return(0,zt.zy)().pathname.match("/.*/$")?(0,Dn.jsx)(Yl,{}):(0,Dn.jsx)(Xk,{gameId:t,children:(0,Dn.jsx)(df,{children:(0,Dn.jsx)(cC,{})})})};var uC=()=>{const{authToken:e,userId:a,isLoggedIn:n}=(0,ti.A)(),[o,i]=(0,t.useState)([]),[r,s]=(0,t.useState)(!1),[l,c]=(0,t.useState)(null),[d,u]=(0,t.useState)(!1);return(0,t.useEffect)((()=>{if(!n||!a)return;const e=new AbortController;return(async()=>{try{s(!0),c(null);const e=await gg.T.GetReportsByUser(a),t=Array.isArray(e)?e:[];i(t)}catch(xC){var t;if("AbortError"===(null===xC||void 0===xC?void 0:xC.name))return;c(null!==(t=null===xC||void 0===xC?void 0:xC.message)&&void 0!==t?t:"Could not load games."),i([])}finally{e.signal.aborted||s(!1)}})(),()=>{e.abort()}}),[n,e,a]),n?(0,Dn.jsxs)("div",{className:"GamesOverview",children:[(0,Dn.jsxs)("div",{className:"container my-4",children:[(0,Dn.jsxs)("div",{className:"headline-wrap",children:[(0,Dn.jsx)("h1",{children:"Your Games"}),(0,Dn.jsxs)("button",{className:"btn btn-primary ",onClick:()=>u(!0),children:[(0,Dn.jsx)(Gn.g,{icon:Pn.QLR,className:""}),"Add Game"]})]}),r&&(0,Dn.jsx)("div",{className:"LoadingOverlay-wrap-150",children:(0,Dn.jsx)(Zo,{message:"Loading Games"})}),l&&(0,Dn.jsx)(Rp.A,{type:"danger",children:(0,Dn.jsx)("p",{children:l})}),!r&&!l&&0===o.length&&(0,Dn.jsx)(Rp.A,{type:"info",children:(0,Dn.jsx)("p",{children:"You have not reported any games yet."})}),!r&&!l&&o.length>0&&(0,Dn.jsxs)("div",{className:"GamesOverview-list",children:[(0,Dn.jsx)(Ll,{placementId:"games-overview-top",type:"container-width",className:"my-3"}),(0,Dn.jsx)("div",{className:"row",children:o.map(((e,n)=>(0,Dn.jsxs)(t.Fragment,{children:[(0,Dn.jsx)("div",{className:"col-12 col-sm-12 col-lg-6",children:(0,Dn.jsx)(fg,{game:e,viewUserId:a})}),(n+1)%5===0&&(0,Dn.jsx)("div",{className:"col-12 col-sm-12 col-lg-6",children:(0,Dn.jsx)(Ll,{placementId:`games-list-${n}`,type:"container-width-half",className:"my-3"})})]},n)))})]})]}),(0,Dn.jsx)(vf,{show:d,onClose:()=>{u(!1)}})]}):(0,Dn.jsx)("div",{className:"GamesOverview",children:(0,Dn.jsxs)("div",{className:"container my-4",children:[(0,Dn.jsx)("div",{className:"headline-wrap",children:(0,Dn.jsx)("h1",{children:"Your Games"})}),(0,Dn.jsxs)(Rp.A,{type:"info",children:[(0,Dn.jsx)("h3",{children:"Log in to access your games"}),(0,Dn.jsx)("p",{children:"You need to log in to use the game report feature."}),(0,Dn.jsxs)("a",{href:"/login",className:"btn btn-primary",children:[(0,Dn.jsx)(Gn.g,{icon:Pn.X46,className:"icon-inline-left-l"}),"Login"]})]}),(0,Dn.jsx)(Ll,{placementId:"games-overview-anonymous",type:"container-width",className:"my-3"})]})})};var hC=()=>{const{id:e}=(0,zt.g)(),t=(0,zt.zy)();return!e||isNaN(Number(e))||t.pathname.match(/\/$/)?(0,Dn.jsx)(Yl,{}):(0,Dn.jsx)("div",{className:"CampaignSettingsView",children:(0,Dn.jsxs)("h1",{children:["Settings for Campaign ",e]})})};const mC=t.forwardRef(((e,t)=>{let{bsPrefix:a,fluid:n=!1,as:o="div",className:i,...r}=e;const s=(0,hi.oU)(a,"container"),l="string"===typeof n?`-${n}`:"-fluid";return(0,Dn.jsx)(o,{ref:t,...r,className:si()(i,n?`${s}${l}`:s)})}));mC.displayName="Container";var pC=mC;const fC=t.forwardRef(((e,t)=>{let{bsPrefix:a,active:n=!1,children:o,className:i,as:r="li",linkAs:s=Ur,linkProps:l={},href:c,title:d,target:u,...h}=e;const m=(0,hi.oU)(a,"breadcrumb-item");return(0,Dn.jsx)(r,{ref:t,...h,className:si()(m,i,{active:n}),"aria-current":n?"page":void 0,children:n?o:(0,Dn.jsx)(s,{...l,href:c,title:d,target:u,children:o})})}));fC.displayName="BreadcrumbItem";var gC=fC;const yC=t.forwardRef(((e,t)=>{let{bsPrefix:a,className:n,listProps:o={},children:i,label:r="breadcrumb",as:s="nav",...l}=e;const c=(0,hi.oU)(a,"breadcrumb");return(0,Dn.jsx)(s,{"aria-label":r,className:n,ref:t,...l,children:(0,Dn.jsx)("ol",{...o,className:si()(c,null==o?void 0:o.className),children:i})})}));yC.displayName="Breadcrumb";var _C=Object.assign(yC,{Item:gC});var bC=()=>{const e=(0,zt.g)()["*"],[a,n]=(0,t.useState)(null),[o,i]=(0,t.useState)(!0),[r,s]=(0,t.useState)(!1),{pathname:l}=(0,zt.zy)(),c=(0,zt.Zp)();if(l.match("/.*/$"))return(0,Dn.jsx)(Yl,{});(0,t.useEffect)((()=>{e?(async()=>{i(!0),s(!1);try{const t=`https://synod.trench-companion.com/wp-json/synod/v1/page?path=${e}`,a=await fetch(t);if(!a.ok)throw new Error(`HTTP error! status: ${a.status}`);const o=await a.json();o.content&&(o.content=d(o.content)),n(o)}catch(t){console.error("Failed to fetch page data",t),s(!0)}finally{i(!1)}})():(s(!0),i(!1))}),[e]);const d=e=>{const t=(new DOMParser).parseFromString(e,"text/html");return t.querySelectorAll("a").forEach((e=>{const t=e.getAttribute("href");if(t&&t.includes("synod.trench-companion.com"))try{const a=new URL(t);if("synod.trench-companion.com"===a.hostname){let t=a.pathname;t.endsWith("/")&&t.length>1&&(t=t.slice(0,-1));/\.[a-zA-Z0-9]+$/.test(t)||t.startsWith("/wp-content")||t.startsWith("/wp-json")||("/"===t||""===t?e.setAttribute("href","https://trench-companion.com/"):e.setAttribute("href",`https://trench-companion.com/page${t}`))}}catch(xC){}})),t.body.innerHTML};return o?(0,Dn.jsx)("div",{className:"StaticContentPage",children:(0,Dn.jsx)("div",{className:"LoadingOverlay-wrap-100vh",children:(0,Dn.jsx)(Zo,{message:"Loading page"})})}):r||!a?(0,Dn.jsx)(Yl,{}):(0,Dn.jsxs)(pC,{className:"StaticContentPage py-5",children:[(0,Dn.jsx)(Yo,{children:(0,Dn.jsxs)("title",{children:[a.title," - Trench Companion"]})}),a.breadcrumbs&&a.breadcrumbs.length>0&&(0,Dn.jsxs)(_C,{children:[a.breadcrumbs.map(((e,t)=>(0,Dn.jsx)(_C.Item,{linkAs:ta,linkProps:{to:`/page${e.url}`},children:e.title},t))),(0,Dn.jsx)(_C.Item,{active:!0,children:a.title})]}),(0,Dn.jsx)(Nx,{children:(0,Dn.jsx)(Ai,{children:(0,Dn.jsx)("div",{dangerouslySetInnerHTML:{__html:a.content}})})}),(a.previous||a.next)&&(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)("hr",{className:"my-5"}),(0,Dn.jsxs)("div",{className:"adjacent-navigation",children:[a.previous&&a.previous.url?(0,Dn.jsxs)(yn.A,{classes:"adjacent-navigation_element adjacent-navigation_next",link:`/page${a.previous.url}`,runfunc:()=>{c(`/page${a.previous.url}`)},children:[(0,Dn.jsxs)("span",{className:"page-link-label",children:[(0,Dn.jsx)(Gn.g,{icon:Pn.Wzs,className:"icon-inline-left-l"}),"Previous"]}),(0,Dn.jsx)("span",{className:"page-name",children:a.previous.title})]}):(0,Dn.jsx)("span",{}),a.next&&a.next.url?(0,Dn.jsxs)(yn.A,{classes:"adjacent-navigation_element adjacent-navigation_previous",link:`/page${a.next.url}`,runfunc:()=>{c(`/page${a.next.url}`)},children:[(0,Dn.jsxs)("span",{className:"page-link-label",children:["Next",(0,Dn.jsx)(Gn.g,{icon:Pn.XkK,className:"icon-inline-right-l"})]}),(0,Dn.jsx)("span",{className:"page-name",children:a.next.title})]}):(0,Dn.jsx)("span",{})]})]})]})};var vC=()=>{const{SiteUser:e,loadingUser:a}=(0,ti.A)(),[n,o]=(0,t.useState)(!1);return(0,t.useEffect)((()=>{var t;if(a)return;if((()=>{if("undefined"===typeof window||!window.navigator)return!1;if(window.__TC_IS_PRERENDER__)return!0;const e=window.navigator.userAgent.toLowerCase();return e.includes("prerender")||e.includes("headlesschrome")})())return;if(n||document.getElementById("nitro-ads-script"))return;window.nitroAds=window.nitroAds||{createAd:function(){for(var e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];return new Promise((e=>{window.nitroAds.queue.push(["createAd",t,e])}))},addUserToken:function(){for(var e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];window.nitroAds.queue.push(["addUserToken",t])},queue:[]};const i=document.createElement("script");i.id="nitro-ads-script",i.src="https://s.nitropay.com/ads-2289.js",i.async=!0,i.setAttribute("data-cfasync","false"),i.setAttribute("data-spa","auto"),document.head.appendChild(i);const r=!(null===e||void 0===e||null===(t=e.Premium)||void 0===t||!t.IsPremium);null!==e&&void 0!==e&&e.Email&&!r&&(async e=>{const t=(new TextEncoder).encode(e.trim().toLowerCase()),a=await crypto.subtle.digest("SHA-256",t),n=Array.from(new Uint8Array(a)).map((e=>e.toString(16).padStart(2,"0"))).join("");return n})(e.Email).then((e=>{window.nitroAds.addUserToken(e,"SHA-256")})).catch(console.error),r?document.body.classList.remove("has-sticky-ad-padding"):(document.body.classList.add("has-sticky-ad-padding"),window.nitroAds.createAd("Anchor v1 - non dismissible",{format:"anchor-v2",anchor:"bottom",anchorBgColor:"#2a2a2a",anchorClose:!1,anchorPersistClose:!1,anchorStickyOffset:0,mediaQuery:"(min-width: 0px)",report:{enabled:!0,icon:!0,wording:"Report Ad",position:"top-right"}})),o(!0)}),[a,e,n]),null};var wC=()=>{Bt((e=>e.SetFromCookies))();const e=mn.getInstance(),a=pn.o.getInstance();fn.T.getInstance();return(0,t.useEffect)((()=>{const e=document.getElementById("global-loader");e&&e.remove()}),[]),(0,Dn.jsx)(Dn.Fragment,{children:(0,Dn.jsx)(wx,{children:(0,Dn.jsxs)(cl.Z,{children:[(0,Dn.jsx)(gk,{}),(0,Dn.jsx)(Qs,{position:"bottom-right",autoClose:5e3,hideProgressBar:!1,closeOnClick:!0,rtl:!1,pauseOnFocusLoss:!0,pauseOnHover:!0}),(0,Dn.jsx)(f,{store:Tt,children:(0,Dn.jsx)(k,{loading:null,persistor:Dt,children:(0,Dn.jsxs)(Qt,{children:[(0,Dn.jsxs)(Mn,{children:[(0,Dn.jsx)(Lp,{controller:e}),(0,Dn.jsx)(wv,{}),(0,Dn.jsxs)(zt.BV,{children:[(0,Dn.jsx)(zt.qh,{path:ua,element:(0,Dn.jsx)(ei,{})}),(0,Dn.jsx)(zt.qh,{path:ia,element:(0,Dn.jsx)(Qm,{controller:e})}),(0,Dn.jsx)(zt.qh,{path:sa,element:(0,Dn.jsx)(vv,{controller:a})}),(0,Dn.jsx)(zt.qh,{path:ha,element:(0,Dn.jsx)(vx,{})})," ",(0,Dn.jsx)(zt.qh,{path:pa,element:(0,Dn.jsx)(Dx,{})}),(0,Dn.jsx)(zt.qh,{path:ma,element:(0,Dn.jsx)(nk,{})}),(0,Dn.jsx)(zt.qh,{path:Da,element:(0,Dn.jsx)(ik,{})})," ",(0,Dn.jsx)(zt.qh,{path:Wa,element:(0,Dn.jsx)(vk,{})})," ",(0,Dn.jsx)(zt.qh,{path:Ga,element:(0,Dn.jsx)(ck,{})})," ",(0,Dn.jsx)(zt.qh,{path:Pa,element:(0,Dn.jsx)(dk,{})})," ",(0,Dn.jsx)(zt.qh,{path:Fa,element:(0,Dn.jsx)(uk,{})})," ",(0,Dn.jsx)(zt.qh,{path:La,element:(0,Dn.jsx)(mk,{})})," ",(0,Dn.jsx)(zt.qh,{path:"/blog",element:(0,Dn.jsx)(pk,{})}),(0,Dn.jsx)(zt.qh,{path:"/blog/:slug",element:(0,Dn.jsx)(fk,{})}),(0,Dn.jsx)(zt.qh,{path:"/dev-import/",element:(0,Dn.jsx)(jk,{})}),(0,Dn.jsx)(zt.qh,{path:"/campaigns",element:(0,Dn.jsx)(Sk,{})}),(0,Dn.jsx)(zt.qh,{path:"/campaigns/new",element:(0,Dn.jsx)(Ak,{})}),(0,Dn.jsx)(zt.qh,{path:"/campaigns/:id",element:(0,Dn.jsx)(Jk,{})}),(0,Dn.jsx)(zt.qh,{path:ca,element:(0,Dn.jsx)(hC,{})}),(0,Dn.jsx)(zt.qh,{path:"/games",element:(0,Dn.jsx)(uC,{})}),(0,Dn.jsx)(zt.qh,{path:"/games/:id",element:(0,Dn.jsx)(dC,{})}),(0,Dn.jsx)(zt.qh,{path:Ha,element:(0,Dn.jsx)(bC,{})}),(0,Dn.jsx)(zt.qh,{path:"*",element:(0,Dn.jsx)(Yl,{})})]}),(0,Dn.jsx)(vC,{}),(0,Dn.jsx)(ok,{})]}),(0,Dn.jsx)(kx,{}),(0,Dn.jsx)(Pp,{}),(0,Dn.jsx)(bk,{expectedPassword:"companion"})]})})})]})})})};Boolean("localhost"===window.location.hostname||"[::1]"===window.location.hostname||window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/));(0,o.H)(document.getElementById("root")).render((0,Dn.jsx)(wC,{})),"serviceWorker"in navigator&&navigator.serviceWorker.ready.then((e=>{e.unregister()})).catch((e=>{console.error(e.message)}))}()}();
//# sourceMappingURL=main.0bc8172f.js.map