Jump to content

[1.8.x-1.12.x] Module Manager 4.2.3 (July 03th 2023) - Fireworks season


sarbian

Recommended Posts

Is there a way to programatically select a node other than with tags? I found this config in the KESA mod but cannot seem to get something similar to work for my purposes.


@PART[FNRefinery]:Final
{
@MODULE[FNModuleResourceExtraction[*]:HAS[#resourceName[LqdWater]]
{
@resourceName = Water
}
@RESOURCE[LqdWater]
{
@name = Water
}
}

I'm trying to modify science experiements while taking into consideration mods like AIES and B9 that add additional parts that do the default experiments. In the case of B9, one part has 4 of the default experiments on it and I want to modifiy them all. Heres what I tried but it ended up just making all science experiements have xmitDataScaler = 1.


@PART[*]:HAS[@MODULE[ModuleScienceExperiment]]:Final
{
@MODULE[ModuleScienceExperiment[*]]:HAS[#experimentID[temperatureScan]]
{
@hideUIwhenUnavailable = True
@xmitDataScalar = 1
}
@MODULE[ModuleScienceExperiment[*]]:HAS[#experimentID[barometerScan]]
{
@hideUIwhenUnavailable = True
@xmitDataScalar = 1
}
@MODULE[ModuleScienceExperiment[*]]:HAS[#experimentID[seismicScan]]
{
@hideUIwhenUnavailable = True
@xmitDataScalar = 1
}
@MODULE[ModuleScienceExperiment[*]]:HAS[#experimentID[gravityScan]]
{
@hideUIwhenUnavailable = True
@xmitDataScalar = 1
}
@MODULE[ModuleScienceExperiment[*]]:HAS[#experimentID[atmosphereAnalysis]]
{
@hideUIwhenUnavailable = True
@xmitDataScalar = 1
}
@MODULE[ModuleScienceExperiment[*]]:HAS[#experimentID[mysteryGoo]]
{
@hideUIwhenUnavailable = True
@xmitDataScalar = 0.5
}
@MODULE[ModuleScienceExperiment[*]]:HAS[#experimentID[mobileMaterialsLab]]
{
@hideUIwhenUnavailable = True
@xmitDataScalar = 0.5
}
}

Link to comment
Share on other sites

You can't use :HAS inside the definition with current version. The KESA config may work by pure blind luck and bracket inequality.

I ll add it for next version.

Link to comment
Share on other sites

I'm trying to update a KAS config and I cannot get the scale property to delete. I'm sure this is obvious but I'm just not seeing it. Here is the relevant part of the original config:

PART

{

name = KAS_ContainerBay1

module = Part

author = zzz

mesh = containerBay1.mu

//Waiting scale bug to be fixed by squad http://bugs.kerbalspaceprogram.com/issues/1123

//MODEL

//{

//model = KAS/Models/rack1

//}

scale = 1

rescaleFactor = 0.50

and this is my MM config:

@PART[KAS_ContainerBay1]:Final{

!scale

!mesh

@rescaleFactor = 1

@node_stack_top = 0.0, -0.35, 0.0, 0.0, 1.0, 0.0, 0

@node_stack_bottom = 0.0, -0.4, 0.0, 0.0, 1.0, 0.0, 0

@node_attach = 0.0, -0.4, 0.0, 0.0, -1.0, 0.0

MODEL

{

model = KAS/Parts/containerBay1/containerBay1

scale = 0.5,0.5,0.5

}

MODULE

{

name = KASModuleGrab

evaPartPos = (0.0, 0.10, -0.15)

evaPartDir = (0,0,-1)

customGroundPos = true

dropPartPos = (0.0, 0.0, -0.55)

dropPartRot = (-10.0, 0.0, 0.0)

attachOnPart = True

attachOnEva = False

attachOnStatic = False

attachSendMsgOnly = False

}

}

I thought it might be the commented out part in the original config but I removed that and it still didn't work.

Link to comment
Share on other sites

I'm trying to update a KAS config and I cannot get the scale property to delete. I'm sure this is obvious but I'm just not seeing it. Here is the relevant part of the original config:

PART

{

name = KAS_ContainerBay1

module = Part

author = zzz

mesh = containerBay1.mu

//Waiting scale bug to be fixed by squad http://bugs.kerbalspaceprogram.com/issues/1123

//MODEL

//{

//model = KAS/Models/rack1

//}

scale = 1

rescaleFactor = 0.50

and this is my MM config:

@PART[KAS_ContainerBay1]:Final{

!scale

!mesh

@rescaleFactor = 1

@node_stack_top = 0.0, -0.35, 0.0, 0.0, 1.0, 0.0, 0

@node_stack_bottom = 0.0, -0.4, 0.0, 0.0, 1.0, 0.0, 0

@node_attach = 0.0, -0.4, 0.0, 0.0, -1.0, 0.0

MODEL

{

model = KAS/Parts/containerBay1/containerBay1

scale = 0.5,0.5,0.5

}

MODULE

{

name = KASModuleGrab

evaPartPos = (0.0, 0.10, -0.15)

evaPartDir = (0,0,-1)

customGroundPos = true

dropPartPos = (0.0, 0.0, -0.55)

dropPartRot = (-10.0, 0.0, 0.0)

attachOnPart = True

attachOnEva = False

attachOnStatic = False

attachSendMsgOnly = False

}

}

I thought it might be the commented out part in the original config but I removed that and it still didn't work.

You can't truly delete it.

All that would do is delete it from the config node. However, the underlying programming always assigns a default value to any variable that can be assigned in the part's configuration file. Or for any PartModule variable that you try to change. (i.e. MODULE{})

Deleting it just means that the part will use that default value when initialized.

And in the case of scale, you don't generally want to mess with that anyway. Any time you think you want to change scale, you probably really wanted to change rescaleFactor instead. OR set scale AND rescaleFactor to 1 and then change the MODEL{} node's scale vectors directly. (if you wanted to rescale one or two of its vectors only)

Link to comment
Share on other sites

I'm trying to add experiment modules to a science lab part. I would rather have all the experiments available from any part without programming each one invidivually so that it can easily support new experiment modules. I've also added a transmitter, electic charge and data storage. I can't figure out how to setup the wildcard to return all experiment modules.

@PART[scienceModule]:Final

{

MODULE // add the ability to store data in the science lab.

{

name = ModuleScienceContainer

reviewActionName = Review Data

storeActionName = Store Experiments

collectActionName = Take Data

evaOnlyStorage = True

storageRange = 2

allowRepeatedSubjects = True

}

MODULE // add a data transmitter to the science lab

{

name = ModuleDataTransmitter

packetInterval = 0.18

packetSize = 2

packetResourceCost = 20.0

requiredResource = ElectricCharge

DeployFxModules = 0

}

RESOURCE // add electic charge to the science lab

{

name = ElectricCharge

amount = 10000

maxAmount = 10000

}

MODULE[*]:HAS[ModuleScienceExperiment] // add all experiments to the science lab

{

experimentID = *

experimentActionName = Run Experiments

resetActionName = Reset Experiments

useStaging = False

useActionGroups = True

hideUIwhenUnavailable = True

xmitDataScalar = 0.5

FxModules = 0

dataIsCollectable = True

collectActionName = Collect Data

interactionRange = 1.2

rerunnable = True

}

}

Additionally, does anyone know of a way to store experiments when the save data button is pressed. I'm using manifest to do that currently, but I'd rather it be something configured.

Edited by WaveFunctionP
Link to comment
Share on other sites

The wildcard has to be in the first part, the @PART line.


@PART[*]:HAS[@MODULE[ModuleScienceExperiment]]
{
MODULE
{
experimentID = *

experimentActionName = Run Experiments
resetActionName = Reset Experiments

useStaging = False
useActionGroups = True
hideUIwhenUnavailable = True

xmitDataScalar = 0.5

FxModules = 0

dataIsCollectable = True
collectActionName = Collect Data
interactionRange = 1.2
}
}

Look at the science links in my signature for examples. See how those are constructed. And experimentID has to have something valid assigned. Look in Squad's Resources folder. Look at ScienceDefs.cfg

Every EXPERIMENT_DEFINITION node's id is a valid id to use for experimentID.

Edited by Starwaster
Link to comment
Share on other sites

So, unless I want to define my own experiment ids and results, I will need to delineate each experiment available? I know that I could add each individually, but I just didn't want a bunch of buttons on the lab menu. Each experiment adds two buttons. I wanted to press a button and have all unlocked experiments run and not have to edit the config for added or delete mod experiments.

Link to comment
Share on other sites

So, unless I want to define my own experiment ids and results, I will need to delineate each experiment available? I know that I could add each individually, but I just didn't want a bunch of buttons on the lab menu. Each experiment adds two buttons. I wanted to press a button and have all unlocked experiments run and not have to edit the config for added or delete mod experiments.

not through configs only.

Each experiment means a separate module. Each such module means additional menu entries.

Link to comment
Share on other sites

Thanks for your help, Starwaster.

I have another question if anyone can answer.

Is it possible to add a crew requirement to make the experiment available as part of a balancing factor for adding so much functionality in one part. I've slightly boosted transmission multipliers so that it acts like the function of a mobile lab, since adding that part's module appears to break the gui for some reason. But I want to maintain a significant incentive to bring the data home because of the kerbals inside (and possible interactions with life support requirements, should the user have such mods). I don't intend for people just send one way probes with the science lab spamming science willynilly.

Short version, can you import a crewrequirement function into a science module config?

I've tried crewsrequired, but it doesn't appear to work.

MODULE // add gc mass spec

{

name = ModuleScienceExperiment

experimentID = gasChromotographyMassSpectrometryExperiment

experimentActionName = Log GC Mass Spec Data

resetActionName = Delete GC Mass Spec Data

reviewActionName = Review GC Mass Spec Data

useStaging = False

useActionGroups = True

hideUIwhenUnavailable = True

xmitDataScalar = 0.5

dataIsCollectable = True

collectActionName = Take GCMS Data

interactionRange = 1.2

rerunnable = True

crewsRequired = 2

}

The original part itself already requires 2 crew to do certain things, but that doesn't seem to effect any of the experiment modules.

Edited by WaveFunctionP
Link to comment
Share on other sites

It's minimumCrew = ?, no?

That was my second attempt by looking at crew command modules. But those arguments appear to be "local" to those modules, and I don't want to add command functionality to the part.

Documentation of the modules/nodes would be nice, but I can't find anything remotely useful/up-to-date.

I knew I should have spent more time learning to code better. :P

Link to comment
Share on other sites

Thanks for your help, But I want to maintain a significant incentive to bring the data home because of the kerbals inside (and possible interactions with life support requirements, should the user have such mods). I don't intend for people just send one way probes with the science lab spamming science willynilly.

Short version, can you import a crewrequirement function into a science module config?

I've tried crewsrequired, but it doesn't appear to work.

The original part itself already requires 2 crew to do certain things, but that doesn't seem to effect any of the experiment modules.

No, the science experiment module would have to have crew requirement implemented into it. I can't see any way of doing that through a config only. You'd need a plugin that extends the ModuleScienceExperiment and which makes such a check. Or possibly a more generic plugin PartModule that disables the part if it doesn't have minimum crew but that doesn't turn the part into a command module.

Is there a way to import/inherit another module's parameters into another module?

No.

Link to comment
Share on other sites

Hi, wondering if someone could help me.

I want to add an alternator to the stock 909 engine. Am I right in thinking I'll need something like:


@PART[liquidEngine3]:Final
{
MODULE
{
name = ModuleAlternator
RESOURCE
{
name = ElectricCharge
rate = 3.0
}
}

Yeah that should do it.

Link to comment
Share on other sites

Hrm. Why would this not be working:


@PART[RAPIER]:Final {

@MODULE[ModuleEnginesFX]:HAS[#engineID=AirBreathing]
{
@PROPELLANT[LiquidFuel]
{
@name = LiquidH2
@ratio = 2.5
}
}
@MODULE[ModuleEnginesFX]:HAS[#engineID=ClosedCycle]
{
@PROPELLANT[LiquidFuel]
{
@name = LiquidH2
@ratio = 0.73
}
@PROPELLANT[Oxidizer]
{
@name = LiquidOxygen
@ratio = 0.27
}
}
}

Or, given that apparently searching doesn't work at the Module-level, why this doesn't work:


@PART[RAPIER]:Final {

@MODULE[ModuleEnginesFX,0]
{
@PROPELLANT[LiquidFuel]
{
@name = LiquidH2
@ratio = 2.5
}
}
@MODULE[ModuleEnginesFX,1]
{
@PROPELLANT[LiquidFuel]
{
@name = LiquidH2
@ratio = 0.73
}
@PROPELLANT[Oxidizer]
{
@name = LiquidOxygen
@ratio = 0.27
}
}
}

Or this:


@PART[RAPIER]:Final
{

!MODULE[ModuleEnginesFX] {}

!MODULE[ModuleEnginesFX] {}

MODULE
{
name = ModuleEnginesFX
engineID = AirBreathing
directThrottleEffectName = power_open
runningEffectName = running_open
thrustVectorTransformName = thrustPoint
exhaustDamage = True
ignitionThreshold = 0.33
minThrust = 0
maxThrust = 190
heatProduction = 400
useEngineResponseTime = True
engineAccelerationSpeed = 0.2
engineDecelerationSpeed = 0.35
useVelocityCurve = True
PROPELLANT
{
name = LiquidH2
ratio = 2.5
DrawGauge = True
}
PROPELLANT
{
name = IntakeAir
ratio = 15
}
atmosphereCurve
{
key = 0 1200
key = 0.3 2500
key = 1 800
}
velocityCurve
{
key = 0 0.5 0 0
key = 1000 1 0 0
key = 2000 0.5 0 0
key = 2200 0 0 0
}

}
MODULE
{
name = ModuleEnginesFX
engineID = ClosedCycle
runningEffectName = running_closed
thrustVectorTransformName = thrustPoint
exhaustDamage = True
ignitionThreshold = 0.1
minThrust = 0
maxThrust = 175
heatProduction = 650
fxOffset = 0, 0, 0.25
PROPELLANT
{
name = LiquidH2
ratio = 0.73
DrawGauge = True
}
PROPELLANT
{
name = LiquidOxygen
ratio = 0.37
}
atmosphereCurve
{
key = 0 465
key = 1 375
}

}

}

Or this:


@PART[RAPIER]:Final
{

!MODULE[ModuleEnginesFX] {}

@MODULE[ModuleEnginesFX]
{
@PROPELLANT[LiquidFuel]
{
@name = LiquidH2
@ratio = 0.73
}
@PROPELLANT[Oxidizer]
{
@name = LiquidOxygen
@ratio = 0.37
}
@atmosphereCurve
{
@key,0 = 0 465
@key,1 = 1 375
}

}


MODULE
{
name = ModuleEnginesFX
engineID = AirBreathing
directThrottleEffectName = power_open
runningEffectName = running_open
thrustVectorTransformName = thrustPoint
exhaustDamage = True
ignitionThreshold = 0.33
minThrust = 0
maxThrust = 190
heatProduction = 400
useEngineResponseTime = True
engineAccelerationSpeed = 0.2
engineDecelerationSpeed = 0.35
useVelocityCurve = True
PROPELLANT
{
name = LiquidH2
ratio = 2.5
DrawGauge = True
}
PROPELLANT
{
name = IntakeAir
ratio = 15
}
atmosphereCurve
{
key = 0 1200
key = 0.3 2500
key = 1 800
}
velocityCurve
{
key = 0 0.5 0 0
key = 1000 1 0 0
key = 2000 0.5 0 0
key = 2200 0 0 0
}

}
}

Note: Those are literally ALL the possible ways to do this. Since none of these work, I don't know how to proceed.

EDIT: Holy crap, THIS doesn't even work:


!PART[RAPIER] {}

PART
{
// this is a sample config file, for determining a good file format for defining part parameters
// comment line - ignored by cfg parser
// empty lines, or lines without a '=' sign are also ignored
// all other lines are split at the '=' sign, and the left operand is used to know what parameter we are setting
// diferent parameters require data in different formats (see docs), and each module has it's own parameters (again, see docs)
// each assignment must be in a single line. Lines without assignments will be ignored. (You CAN turn on word wrap, though)
// each keyword here relates to an existing variable in the assigned module. If the keyword isn't found, it is ignored.
// conversely, if a keyword is left unassigned (as in not in the file), it will be initialized with it's default value
// This is done automatically, so any public variable defined in the loaded module can be accessed this way (provided it's value can be parsed)


// --- general parameters ---
name = RAPIER
module = Part
author = C. Jenkins

// --- asset parameters ---
mesh = rapier.mu
scale = 1.0

// --- node definitions ---
// definition format is Position X, Position Y, Position Z, Up X, Up Y, Up Z

node_stack_top = 0.0,0.741545,0.0 , 0.0, 1.0, 0.0
node_stack_bottom = 0.0,-0.2048244, 0.0, 0.0, 1.0, 0.0


// --- editor parameters ---
mass = 1.75
dragModelType = default
maximum_drag = 0.2
minimum_drag = 0.2
angularDrag = 2
crashTolerance = 20
maxTemp = 3600


TechRequired = hypersonicFlight
entryCost = 65000
cost = 5900
category = Propulsion
subcategory = 0
title = R.A.P.I.E.R. Engine
manufacturer = C7 Aerospace Division and Rockmax Conglomerate
description = The R.A.P.I.E.R. (Reactive Alternate-Propellant Intelligent Engine for Rockets) is a joint venture between C7 Aerospace and the Rockomax Conglomerate. Designed to fill a gap in the design requirements for sustainable single stage to orbit aircraft, this engine combines the best of rocket and air-breathing thrust technology.

// attachment rules: stack, srfAttach, allowStack, allowSrfAttach, allowCollision
attachRules = 1,0,1,1,0


EFFECTS
{
running_closed
{
AUDIO
{
channel = Ship
clip = sound_rocket_spurts
volume = 0.0 0.0
volume = 1.0 1.0
pitch = 0.0 0.2
pitch = 1.0 1.0
loop = true
}
PREFAB_PARTICLE
{
prefabName = fx_smokeTrail_aeroSpike
transformName = smokePoint
emission = 0.0 0.0
emission = 0.05 0.0
emission = 0.075 0.25
emission = 1.0 1.25
speed = 0.0 0.25
speed = 1.0 1.0
localOffset = 0, 0, 1
}
MODEL_MULTI_PARTICLE
{
modelName = Squad/FX/shockExhaust_blue_small
transformName = thrustTransform
emission = 0.0 0.0
emission = 0.05 0.0
emission = 0.075 0.25
emission = 1.0 1.25
speed = 0.0 0.5
speed = 1.0 1.2
}
}
power_open
{
AUDIO
{
channel = Ship
clip = sound_rocket_spurts
volume = 0.0 0.0
volume = 1.0 1.0
pitch = 0.0 0.2
pitch = 1.0 1.0
loop = true
}
MODEL_MULTI_PARTICLE
{
modelName = Squad/FX/shockExhaust_red_small
transformName = thrustTransform
emission = 0.0 0.0
emission = 0.05 0.0
emission = 0.075 0.25
emission = 1.0 1.25
speed = 0.0 0.5
speed = 1.0 1.2
}
}
running_open
{
AUDIO
{
channel = Ship
clip = sound_jet_deep
volume = 0.0 0.0
volume = 1.0 1.0
pitch = 0.0 0.2
pitch = 1.0 1.0
loop = true
}
PREFAB_PARTICLE
{
prefabName = fx_smokeTrail_aeroSpike
transformName = smokePoint
emission = 0.0 0.0
emission = 0.05 0.0
emission = 0.075 0.25
emission = 1.0 1.25
speed = 0.0 0.25
speed = 1.0 1.0
localOffset = 0, 0, 1
}
}
engage
{
AUDIO
{
channel = Ship
clip = sound_vent_soft
volume = 1.0
pitch = 2.0
loop = false
}
}
flameout
{
PREFAB_PARTICLE
{
prefabName = fx_exhaustSparks_flameout_2
transformName = smokePoint
oneShot = true
}
AUDIO
{
channel = Ship
clip = sound_explosion_low
volume = 1.0
pitch = 2.0
loop = false
}
}
}

MODULE
{
name = MultiModeEngine
primaryEngineID = AirBreathing
secondaryEngineID = ClosedCycle
}
MODULE
{
name = ModuleEnginesFX
engineID = AirBreathing
directThrottleEffectName = power_open
runningEffectName = running_open
thrustVectorTransformName = thrustPoint
exhaustDamage = True
ignitionThreshold = 0.33
minThrust = 0
maxThrust = 190
heatProduction = 400
useEngineResponseTime = True
engineAccelerationSpeed = 0.2
engineDecelerationSpeed = 0.35
useVelocityCurve = True
PROPELLANT
{
name = LiquidFuel
ratio = 1
DrawGauge = True
}
PROPELLANT
{
name = IntakeAir
ratio = 15
}
atmosphereCurve
{
key = 0 1200
key = 0.3 2500
key = 1 800
}
velocityCurve
{
key = 0 0.5 0 0
key = 1000 1 0 0
key = 2000 0.5 0 0
key = 2200 0 0 0
}

}
MODULE
{
name = ModuleEnginesFX
engineID = ClosedCycle
runningEffectName = running_closed
thrustVectorTransformName = thrustPoint
exhaustDamage = True
ignitionThreshold = 0.1
minThrust = 0
maxThrust = 175
heatProduction = 650
fxOffset = 0, 0, 0.25
PROPELLANT
{
name = LiquidFuel
ratio = 0.9
DrawGauge = True
}
PROPELLANT
{
name = Oxidizer
ratio = 1.1
}
atmosphereCurve
{
key = 0 360
key = 1 320
}

}
MODULE
{
name = ModuleAnimateHeat
ThermalAnim = HeatAnimationEmissiveRapier
}

MODULE
{
name = ModuleGimbal
gimbalTransformName = obj_gimbal
gimbalRange = 3
}

}

I'm absolutely using v1.5.6, and other config mods are working fine - any idea what's going on here?

Edited by ialdabaoth
Link to comment
Share on other sites

Some of those spaces might confuse it... such as


!MODULE[ModuleEnginesFX] {}

should be


!MODULE[ModuleEnginesFX]{}

And I don't think you can do !PART[RAPIER]{} either.... I think that's technically root level and it's read only

Don't think specifying ordinals on nodes work, only properties... maybe look for 1.5.7 in the thread, it might have added that sort of functionality but it's not officially released so not on the front page?

(ok not actually sure there is a 1.5.7 anywhere, saw a reference to it elsewhere but I don't see it anywhere, not even on the github site....)

(but, !MODULE[ModuleEnginesFX]{} at least should work. I did something similar on the B9 Sabre to get rid of its hydra controller and replace it with RAPIER style system)

Edited by Starwaster
Link to comment
Share on other sites

Yes, that's the only way that works right now (deleting both MODULEs and re-adding) with the obvious downsides. 1.5.7 is apparently something Sarbian sent me, rather than releasing on this thread; it's in the latest DREC. It was another attempt to fix the NODE[blah,n] or NODE[blah],n syntax--which again failed, alas.

Starwaster: That kind of space is fine; especially when you consider that most NODE definitions have not a space before the brace but a whole newline!

Link to comment
Share on other sites

i need to be able to detect if an arbitrary plugin dll is installed and add/remove some lines of one of my cfgs accordingly. such as discribed here:

http://forum.kerbalspaceprogram.com/threads/72338-Conditional-%2A-cfg-Parsing

im told this has been implemented in module manager, ive been reading this thread for 4 hours and i still dont know how to do this.

Link to comment
Share on other sites

Greys proposed it, but I didn't think Sarbian added it yet.

Why do you need to add it though? if you include a MODULE node for a module that doesn't exist, it'll just be gracefully ignored. It's only if you want to include something *else* that should only be added if the plugin *doesn't* exist...

Link to comment
Share on other sites

(but, !MODULE[ModuleEnginesFX]{} at least should work. I did something similar on the B9 Sabre to get rid of its hydra controller and replace it with RAPIER style system)

Well, it doesn't appear to be working. I wind up with FOUR ModuleEnginesFX nodes - the two original nodes, plus the two I added.

Link to comment
Share on other sites

Well, it doesn't appear to be working. I wind up with FOUR ModuleEnginesFX nodes - the two original nodes, plus the two I added.

Have you checked output_log.txt for errors when your cfg is applied? Or to see if something else is adding new engine modules in?

Also, I thought it was @NODE[name,tag] with tag basically being something that was, and still is largely unused.

Edited by Starwaster
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...