script fixes, additions to merchant

This commit is contained in:
EpicValor 2023-08-31 20:34:52 -05:00
parent e6bd2ef68d
commit eb5060ffdd
28 changed files with 2441 additions and 40 deletions

View File

@ -2913,7 +2913,7 @@
},
"Version": {
"type": "dword",
"value": 29
"value": 30
},
"Width": {
"type": "int",

View File

@ -333,7 +333,7 @@
},
"Version": {
"type": "dword",
"value": 7
"value": 8
},
"Width": {
"type": "int",

View File

@ -1193,7 +1193,7 @@
},
"Version": {
"type": "dword",
"value": 50
"value": 51
},
"Width": {
"type": "int",

View File

@ -2022,7 +2022,7 @@
},
"Tile_ID": {
"type": "int",
"value": 1
"value": 205
},
"Tile_MainLight1": {
"type": "byte",
@ -7901,7 +7901,7 @@
},
"Version": {
"type": "dword",
"value": 22
"value": 23
},
"Width": {
"type": "int",

File diff suppressed because it is too large Load Diff

View File

@ -39561,6 +39561,17 @@
"value": "crossbowofaerd"
}
},
{
"__struct_id": 0,
"NAME": {
"type": "cexostring",
"value": "Crossbow of Coldflame"
},
"RESREF": {
"type": "resref",
"value": "xbowofcoldflame"
}
},
{
"__struct_id": 0,
"NAME": {
@ -39572,6 +39583,17 @@
"value": "crossbowofhelm"
}
},
{
"__struct_id": 0,
"NAME": {
"type": "cexostring",
"value": "Crossbow of Opposites"
},
"RESREF": {
"type": "resref",
"value": "crossbowofoppo"
}
},
{
"__struct_id": 0,
"NAME": {
@ -39709,6 +39731,17 @@
"value": "elfsinger"
}
},
{
"__struct_id": 0,
"NAME": {
"type": "cexostring",
"value": "Fire and Ice"
},
"RESREF": {
"type": "resref",
"value": "fireandice"
}
},
{
"__struct_id": 0,
"NAME": {
@ -39961,6 +39994,17 @@
"value": "spellsinger"
}
},
{
"__struct_id": 0,
"NAME": {
"type": "cexostring",
"value": "Tempertuppin's Ever-Thrower"
},
"RESREF": {
"type": "resref",
"value": "wbwmsl009"
}
},
{
"__struct_id": 0,
"NAME": {

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -2,12 +2,12 @@ void main()
{
effect eEffect = GetFirstEffect(OBJECT_SELF);
//while(GetIsEffectValid(eEffect))
while(GetIsEffectValid(eEffect))
{
if(GetEffectTag(eEffect) == "BUFFS")
RemoveEffect(OBJECT_SELF, eEffect);
eEffect = GetNextEffect(OBJECT_SELF);
}
int nGolemHench = GetStringLeft(GetTag(OBJECT_SELF), 6) == "GOLEMH" ? TRUE : FALSE;
if(nGolemHench)
{

View File

@ -21,6 +21,7 @@
void main()
{
ExecuteScript("random_drop", OBJECT_SELF);
ExecuteScript("prc_npc_damaged", OBJECT_SELF);
object oDamager = GetLastDamager();

View File

@ -0,0 +1,114 @@
//:://////////////////////////////////////////////////
//:: NW_C2_DEFAULT7
/*
Default OnDeath event handler for NPCs.
Adjusts killer's alignment if appropriate and
alerts allies to our death.
*/
//:://////////////////////////////////////////////////
//:: Copyright (c) 2002 Floodgate Entertainment
//:: Created By: Naomi Novik
//:: Created On: 12/22/2002
//:://////////////////////////////////////////////////
//:://////////////////////////////////////////////////
//:: Modified By: Deva Winblood
//:: Modified On: April 1st, 2008
//:: Added Support for Dying Wile Mounted
//:://///////////////////////////////////////////////
const string sHenchSummonedFamiliar = "HenchSummonedFamiliar";
const string sHenchSummonedAniComp = "HenchSummonedAniComp";
const string sHenchLastHeardOrSeen = "LastSeenOrHeard";
#include "x2_inc_compon"
#include "x0_i0_spawncond"
// Clears the last unheard, unseen enemy location
void ClearEnemyLocation();
void main()
{
object oKiller = GetLastKiller();
object oMaster = GetMaster();
int nAlign = GetAlignmentGoodEvil(OBJECT_SELF);
if(GetLocalInt(GetModule(), "X3_ENABLE_MOUNT_DB") && GetIsObjectValid(oMaster))
SetLocalInt(oMaster, "bX3_STORE_MOUNT_INFO", TRUE);
// If we're a good/neutral commoner,
// adjust the killer's alignment evil
if(GetLevelByClass(CLASS_TYPE_COMMONER)
&& (nAlign == ALIGNMENT_GOOD || nAlign == ALIGNMENT_NEUTRAL))
{
AdjustAlignment(oKiller, ALIGNMENT_EVIL, 5);
}
//Start Hench AI
if(GetLocalInt(OBJECT_SELF, "GaveHealing"))
{
// Pausanias: destroy potions of healing
object oItem = GetFirstItemInInventory();
while(GetIsObjectValid(oItem))
{
if(GetTag(oItem) == "NW_IT_MPOTION003")
DestroyObject(oItem);
oItem = GetNextItemInInventory();
}
}
if(GetLocalInt(OBJECT_SELF, sHenchSummonedFamiliar))
{
object oFam = GetLocalObject(OBJECT_SELF, sHenchSummonedFamiliar);
if(GetIsObjectValid(oFam))
{
//if(DEBUG) DoDebug(GetName(OBJECT_SELF) + " destroy familiar");
DestroyObject(oFam, 0.1);
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_IMP_UNSUMMON), GetLocation(oFam));
}
}
if(GetLocalInt(OBJECT_SELF, sHenchSummonedAniComp))
{
object oAni = GetLocalObject(OBJECT_SELF, sHenchSummonedAniComp);
if(GetIsObjectValid(oAni))
{
//if(DEBUG) DoDebug(GetName(OBJECT_SELF) + " destroy ani comp");
DestroyObject(oAni, 0.1);
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_IMP_UNSUMMON), GetLocation(oAni));
}
}
ClearEnemyLocation();
//End Hench AI
// Call to allies to let them know we're dead
SpeakString("NW_I_AM_DEAD", TALKVOLUME_SILENT_TALK);
//Shout Attack my target, only works with the On Spawn In setup
SpeakString("NW_ATTACK_MY_TARGET", TALKVOLUME_SILENT_TALK);
// NOTE: the OnDeath user-defined event does not
// trigger reliably and should probably be removed
if(GetSpawnInCondition(NW_FLAG_DEATH_EVENT))
SignalEvent(OBJECT_SELF, EventUserDefined(1007));
craft_drop_items(oKiller);
ExecuteScript("prc_npc_death", OBJECT_SELF);
ExecuteScript("prc_pwondeath", OBJECT_SELF);
}
void ClearEnemyLocation()
{
DeleteLocalInt(OBJECT_SELF, sHenchLastHeardOrSeen);
DeleteLocalLocation(OBJECT_SELF, sHenchLastHeardOrSeen);
object oInvisTarget = GetLocalObject(OBJECT_SELF, sHenchLastHeardOrSeen);
if (GetIsObjectValid(oInvisTarget))
{
DestroyObject(oInvisTarget);
DeleteLocalObject(OBJECT_SELF, sHenchLastHeardOrSeen);
}
}

View File

@ -324,5 +324,5 @@ void main()
}
ExecuteScript("prc_pwonspawn", OBJECT_SELF);
DelayCommand(0.5, ExecuteScript("random_drop", OBJECT_SELF));
//DelayCommand(0.5, ExecuteScript("random_drop", OBJECT_SELF));
}

View File

@ -1,9 +1,9 @@
//:://////////////////////////////////////////////////
//:: prc_pwonspawn
/*
OnSpawn catch all for the PRC
OnSpawn catch all for the PRC
*/
//:://////////////////////////////////////////////////
@ -22,5 +22,5 @@ void main()
// ***** ADD ANY SPECIAL ON-SPAWN CODE HERE ***** //
ExecuteScript("random_drop",OBJECT_SELF);
//ExecuteScript("random_drop",OBJECT_SELF);
}

View File

@ -1,22 +1,30 @@
void main()
void MakeItemsDroppable(object oNPC)
{
object oNPC = OBJECT_SELF;
object oItem = GetFirstItemInInventory(oNPC);
while (GetIsObjectValid(oItem))
{
if (GetDroppableFlag(oItem) == TRUE)
{
//items already set as droppable should stay that way
SetLocalInt (oItem, "droppable", 1);
GetNextItemInInventory(oNPC);
}
if (GetLocalInt(oItem, "droppable") == FALSE)
{
//20% chance to drop item inventory not already set as droppable
int bDroppable=d100()>80;
SetDroppableFlag(oItem, bDroppable);
oItem = GetNextItemInInventory(oNPC);
}
{
if (GetDroppableFlag(oItem) == FALSE)
{
SetLocalInt(oItem, "notdroppable", 1);
}
if (GetLocalInt(oItem, "notdroppable") == TRUE)
{
// 20% chance to drop item from inventory not already set as droppable
if (d100() <= 20)
{
SetDroppableFlag(oItem, TRUE);
}
}
oItem = GetNextItemInInventory(oNPC);
}
}
void main()
{
object oNPC = OBJECT_SELF;
DelayCommand(0.0f,MakeItemsDroppable(oNPC));
}

View File

@ -0,0 +1,24 @@
void main()
{
object oNPC = OBJECT_SELF;
object oItem = GetFirstItemInInventory(oNPC);
while (GetIsObjectValid(oItem))
oItem = GetNextItemInInventory(oNPC);
{
if (GetDroppableFlag(oItem) == FALSE)
{
SetLocalInt (oItem, "notdroppable", 1);
}
if (GetLocalInt(oItem, "notdroppable") == 1)
{
//20% chance to drop item inventory not already set as droppable
//object oDrop = GetLocalObject(oItem, "notdroppable");
int bDroppable = d100()>50;
SetDroppableFlag(oItem, bDroppable);
}
}
}

View File

@ -13,6 +13,7 @@
void main()
{
object oSelf = OBJECT_SELF;
DelayCommand(30.5, ExecuteScript("_golemstats", OBJECT_SELF));
// modifed by primogenitor
// aribeth uses her blackguard spellbook
if(GetTag(oSelf) == "H2_Aribeth")
@ -61,5 +62,5 @@ void main()
}
CheckNewSpellbooks(oSelf);
}
DelayCommand(30.5, ExecuteScript("_golemstats", OBJECT_SELF));
}

View File

@ -0,0 +1,228 @@
{
"__data_type": "UTI ",
"AddCost": {
"type": "dword",
"value": 0
},
"BaseItem": {
"type": "int",
"value": 7
},
"Charges": {
"type": "byte",
"value": 0
},
"Comment": {
"type": "cexostring",
"value": "1"
},
"Cost": {
"type": "dword",
"value": 165234
},
"Cursed": {
"type": "byte",
"value": 0
},
"DescIdentified": {
"id": 14097,
"type": "cexolocstring",
"value": {
"0": "A magical light crossbow capable of imbuing its bolts with both fire and cold damage."
}
},
"Description": {
"type": "cexolocstring",
"value": {
"0": ""
}
},
"Identified": {
"type": "byte",
"value": 1
},
"LocalizedName": {
"id": 14098,
"type": "cexolocstring",
"value": {
"0": "Crossbow of Opposites"
}
},
"ModelPart1": {
"type": "byte",
"value": 43
},
"ModelPart2": {
"type": "byte",
"value": 33
},
"ModelPart3": {
"type": "byte",
"value": 33
},
"PaletteID": {
"type": "byte",
"value": 43
},
"Plot": {
"type": "byte",
"value": 0
},
"PropertiesList": {
"type": "list",
"value": [
{
"__struct_id": 0,
"ChanceAppear": {
"type": "byte",
"value": 100
},
"CostTable": {
"type": "byte",
"value": 4
},
"CostValue": {
"type": "word",
"value": 7
},
"Param1": {
"type": "byte",
"value": 255
},
"Param1Value": {
"type": "byte",
"value": 0
},
"PropertyName": {
"type": "word",
"value": 16
},
"Subtype": {
"type": "word",
"value": 7
}
},
{
"__struct_id": 0,
"ChanceAppear": {
"type": "byte",
"value": 100
},
"CostTable": {
"type": "byte",
"value": 2
},
"CostValue": {
"type": "word",
"value": 3
},
"Param1": {
"type": "byte",
"value": 255
},
"Param1Value": {
"type": "byte",
"value": 0
},
"PropertyName": {
"type": "word",
"value": 6
},
"Subtype": {
"type": "word",
"value": 0
}
},
{
"__struct_id": 0,
"ChanceAppear": {
"type": "byte",
"value": 100
},
"CostTable": {
"type": "byte",
"value": 2
},
"CostValue": {
"type": "word",
"value": 3
},
"Param1": {
"type": "byte",
"value": 255
},
"Param1Value": {
"type": "byte",
"value": 255
},
"PropertyName": {
"type": "word",
"value": 45
},
"Subtype": {
"type": "word",
"value": 0
}
},
{
"__struct_id": 0,
"ChanceAppear": {
"type": "byte",
"value": 100
},
"CostTable": {
"type": "byte",
"value": 14
},
"CostValue": {
"type": "word",
"value": 2
},
"Param1": {
"type": "byte",
"value": 255
},
"Param1Value": {
"type": "byte",
"value": 0
},
"PropertyName": {
"type": "word",
"value": 61
},
"Subtype": {
"type": "word",
"value": 1
}
}
]
},
"StackSize": {
"type": "word",
"value": 1
},
"Stolen": {
"type": "byte",
"value": 0
},
"Tag": {
"type": "cexostring",
"value": "CrossbowofOpposites"
},
"TemplateResRef": {
"type": "resref",
"value": "crossbowofoppo"
},
"xModelPart1": {
"type": "word",
"value": 43
},
"xModelPart2": {
"type": "word",
"value": 33
},
"xModelPart3": {
"type": "word",
"value": 33
}
}

View File

@ -0,0 +1,226 @@
{
"__data_type": "UTI ",
"AddCost": {
"type": "dword",
"value": 0
},
"BaseItem": {
"type": "int",
"value": 8
},
"Charges": {
"type": "byte",
"value": 0
},
"Comment": {
"type": "cexostring",
"value": ""
},
"Cost": {
"type": "dword",
"value": 165314
},
"Cursed": {
"type": "byte",
"value": 0
},
"DescIdentified": {
"id": 91153,
"type": "cexolocstring",
"value": {
"0": "This exquisite longbow can imbue its arrows with both fire and cold damage."
}
},
"Description": {
"type": "cexolocstring",
"value": {}
},
"Identified": {
"type": "byte",
"value": 1
},
"LocalizedName": {
"id": 91152,
"type": "cexolocstring",
"value": {
"0": "Fire and Ice"
}
},
"ModelPart1": {
"type": "byte",
"value": 23
},
"ModelPart2": {
"type": "byte",
"value": 33
},
"ModelPart3": {
"type": "byte",
"value": 83
},
"PaletteID": {
"type": "byte",
"value": 44
},
"Plot": {
"type": "byte",
"value": 0
},
"PropertiesList": {
"type": "list",
"value": [
{
"__struct_id": 0,
"ChanceAppear": {
"type": "byte",
"value": 100
},
"CostTable": {
"type": "byte",
"value": 4
},
"CostValue": {
"type": "word",
"value": 7
},
"Param1": {
"type": "byte",
"value": 255
},
"Param1Value": {
"type": "byte",
"value": 0
},
"PropertyName": {
"type": "word",
"value": 16
},
"Subtype": {
"type": "word",
"value": 7
}
},
{
"__struct_id": 0,
"ChanceAppear": {
"type": "byte",
"value": 100
},
"CostTable": {
"type": "byte",
"value": 2
},
"CostValue": {
"type": "word",
"value": 3
},
"Param1": {
"type": "byte",
"value": 255
},
"Param1Value": {
"type": "byte",
"value": 0
},
"PropertyName": {
"type": "word",
"value": 6
},
"Subtype": {
"type": "word",
"value": 0
}
},
{
"__struct_id": 0,
"ChanceAppear": {
"type": "byte",
"value": 100
},
"CostTable": {
"type": "byte",
"value": 2
},
"CostValue": {
"type": "word",
"value": 3
},
"Param1": {
"type": "byte",
"value": 255
},
"Param1Value": {
"type": "byte",
"value": 0
},
"PropertyName": {
"type": "word",
"value": 45
},
"Subtype": {
"type": "word",
"value": 0
}
},
{
"__struct_id": 0,
"ChanceAppear": {
"type": "byte",
"value": 100
},
"CostTable": {
"type": "byte",
"value": 14
},
"CostValue": {
"type": "word",
"value": 2
},
"Param1": {
"type": "byte",
"value": 255
},
"Param1Value": {
"type": "byte",
"value": 0
},
"PropertyName": {
"type": "word",
"value": 61
},
"Subtype": {
"type": "word",
"value": 0
}
}
]
},
"StackSize": {
"type": "word",
"value": 1
},
"Stolen": {
"type": "byte",
"value": 0
},
"Tag": {
"type": "cexostring",
"value": "FireandIce"
},
"TemplateResRef": {
"type": "resref",
"value": "fireandice"
},
"xModelPart1": {
"type": "word",
"value": 23
},
"xModelPart2": {
"type": "word",
"value": 33
},
"xModelPart3": {
"type": "word",
"value": 83
}
}

View File

@ -0,0 +1,210 @@
{
"__data_type": "UTI ",
"AddCost": {
"type": "dword",
"value": 0
},
"BaseItem": {
"type": "int",
"value": 61
},
"Charges": {
"type": "byte",
"value": 0
},
"Comment": {
"type": "cexostring",
"value": "1"
},
"Cost": {
"type": "dword",
"value": 165166
},
"Cursed": {
"type": "byte",
"value": 0
},
"DescIdentified": {
"id": 14080,
"type": "cexolocstring",
"value": {
"0": "Bindle \"Eye-nock\" Tempertuppin based these weapons on one he supposedly saw a fire giant use, reportedly \"big enough to throw a donkey 300 paces.\" Questioning the accuracy of this account brings the predictable retort that \"you'll be sorry when a giant puts YOUR ass in a sling.\" He's a funny man, that Bindle."
}
},
"Description": {
"type": "cexolocstring",
"value": {
"0": ""
}
},
"Identified": {
"type": "byte",
"value": 1
},
"LocalizedName": {
"id": 14079,
"type": "cexolocstring",
"value": {}
},
"ModelPart1": {
"type": "byte",
"value": 32
},
"PaletteID": {
"type": "byte",
"value": 62
},
"Plot": {
"type": "byte",
"value": 0
},
"PropertiesList": {
"type": "list",
"value": [
{
"__struct_id": 0,
"ChanceAppear": {
"type": "byte",
"value": 100
},
"CostTable": {
"type": "byte",
"value": 4
},
"CostValue": {
"type": "word",
"value": 7
},
"Param1": {
"type": "byte",
"value": 255
},
"Param1Value": {
"type": "byte",
"value": 0
},
"PropertyName": {
"type": "word",
"value": 16
},
"Subtype": {
"type": "word",
"value": 7
}
},
{
"__struct_id": 0,
"ChanceAppear": {
"type": "byte",
"value": 100
},
"CostTable": {
"type": "byte",
"value": 2
},
"CostValue": {
"type": "word",
"value": 3
},
"Param1": {
"type": "byte",
"value": 255
},
"Param1Value": {
"type": "byte",
"value": 0
},
"PropertyName": {
"type": "word",
"value": 6
},
"Subtype": {
"type": "word",
"value": 0
}
},
{
"__struct_id": 0,
"ChanceAppear": {
"type": "byte",
"value": 100
},
"CostTable": {
"type": "byte",
"value": 2
},
"CostValue": {
"type": "word",
"value": 20
},
"Param1": {
"type": "byte",
"value": 255
},
"Param1Value": {
"type": "byte",
"value": 0
},
"PropertyName": {
"type": "word",
"value": 45
},
"Subtype": {
"type": "word",
"value": 0
}
},
{
"__struct_id": 0,
"ChanceAppear": {
"type": "byte",
"value": 100
},
"CostTable": {
"type": "byte",
"value": 14
},
"CostValue": {
"type": "word",
"value": 2
},
"Param1": {
"type": "byte",
"value": 255
},
"Param1Value": {
"type": "byte",
"value": 255
},
"PropertyName": {
"type": "word",
"value": 61
},
"Subtype": {
"type": "word",
"value": 2
}
}
]
},
"StackSize": {
"type": "word",
"value": 1
},
"Stolen": {
"type": "byte",
"value": 0
},
"Tag": {
"type": "cexostring",
"value": "NW_WBWMSL008"
},
"TemplateResRef": {
"type": "resref",
"value": "wbwmsl009"
},
"xModelPart1": {
"type": "word",
"value": 32
}
}

View File

@ -0,0 +1,227 @@
{
"__data_type": "UTI ",
"AddCost": {
"type": "dword",
"value": 0
},
"BaseItem": {
"type": "int",
"value": 6
},
"Charges": {
"type": "byte",
"value": 0
},
"Comment": {
"type": "cexostring",
"value": "1"
},
"Cost": {
"type": "dword",
"value": 165264
},
"Cursed": {
"type": "byte",
"value": 0
},
"DescIdentified": {
"type": "cexolocstring",
"value": {
"0": "A magical heavy crossbow that can imbue its bolts with both fire and cold damage."
}
},
"Description": {
"type": "cexolocstring",
"value": {
"0": ""
}
},
"Identified": {
"type": "byte",
"value": 1
},
"LocalizedName": {
"id": 173,
"type": "cexolocstring",
"value": {
"0": "Crossbow of Coldflame"
}
},
"ModelPart1": {
"type": "byte",
"value": 33
},
"ModelPart2": {
"type": "byte",
"value": 43
},
"ModelPart3": {
"type": "byte",
"value": 43
},
"PaletteID": {
"type": "byte",
"value": 43
},
"Plot": {
"type": "byte",
"value": 0
},
"PropertiesList": {
"type": "list",
"value": [
{
"__struct_id": 0,
"ChanceAppear": {
"type": "byte",
"value": 100
},
"CostTable": {
"type": "byte",
"value": 4
},
"CostValue": {
"type": "word",
"value": 7
},
"Param1": {
"type": "byte",
"value": 255
},
"Param1Value": {
"type": "byte",
"value": 0
},
"PropertyName": {
"type": "word",
"value": 16
},
"Subtype": {
"type": "word",
"value": 7
}
},
{
"__struct_id": 0,
"ChanceAppear": {
"type": "byte",
"value": 100
},
"CostTable": {
"type": "byte",
"value": 2
},
"CostValue": {
"type": "word",
"value": 3
},
"Param1": {
"type": "byte",
"value": 255
},
"Param1Value": {
"type": "byte",
"value": 0
},
"PropertyName": {
"type": "word",
"value": 6
},
"Subtype": {
"type": "word",
"value": 0
}
},
{
"__struct_id": 0,
"ChanceAppear": {
"type": "byte",
"value": 100
},
"CostTable": {
"type": "byte",
"value": 2
},
"CostValue": {
"type": "word",
"value": 3
},
"Param1": {
"type": "byte",
"value": 255
},
"Param1Value": {
"type": "byte",
"value": 0
},
"PropertyName": {
"type": "word",
"value": 45
},
"Subtype": {
"type": "word",
"value": 0
}
},
{
"__struct_id": 0,
"ChanceAppear": {
"type": "byte",
"value": 100
},
"CostTable": {
"type": "byte",
"value": 14
},
"CostValue": {
"type": "word",
"value": 2
},
"Param1": {
"type": "byte",
"value": 255
},
"Param1Value": {
"type": "byte",
"value": 0
},
"PropertyName": {
"type": "word",
"value": 61
},
"Subtype": {
"type": "word",
"value": 1
}
}
]
},
"StackSize": {
"type": "word",
"value": 1
},
"Stolen": {
"type": "byte",
"value": 0
},
"Tag": {
"type": "cexostring",
"value": "CrossbowofColdflame"
},
"TemplateResRef": {
"type": "resref",
"value": "xbowofcoldflame"
},
"xModelPart1": {
"type": "word",
"value": 33
},
"xModelPart2": {
"type": "word",
"value": 43
},
"xModelPart3": {
"type": "word",
"value": 43
}
}

Binary file not shown.