Skip to content

Commit

Permalink
Merge branch 'master' into SPE-v1.1-compat
Browse files Browse the repository at this point in the history
  • Loading branch information
Drofseh authored Sep 24, 2024
2 parents fab4696 + e5c1bba commit 998671d
Show file tree
Hide file tree
Showing 45 changed files with 117 additions and 57 deletions.
1 change: 1 addition & 0 deletions .github/workflows/arma.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,3 +50,4 @@ jobs:
with:
name: acre2-${{ github.sha }}-nobin
path: .hemttout/@*
include-hidden-files: true # Because .hemttout is a hidden directory
1 change: 1 addition & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ jobs:
name: acre2
path: .hemttout/@*
retention-days: 1
include-hidden-files: true # Because .hemttout is a hidden directory

compile:
if: github.repository == 'IDI-Systems/acre2' && ! contains(github.event.head_commit.message, '[ci skip]')
Expand Down
4 changes: 4 additions & 0 deletions .hemtt/lints.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
[sqf.banned_commands]
options.ignore = [
"addPublicVariableEventHandler", # Alt syntax is broken, we are using main syntax
]
7 changes: 6 additions & 1 deletion addons/api/fnc_getMultiPushToTalkAssignment.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,13 @@

//Emulate behaviour of the handleMultiPttKeyPress algorithm

private _radioLists = [+ ACRE_ASSIGNED_PTT_RADIOS, [] call EFUNC(sys_data,getPlayerRadioList)] call EFUNC(sys_data,sortRadioList);
private _radioLists = [];

if (acre_player isEqualTo player) then { // using zeus player voice
_radioLists = [+ ACRE_ASSIGNED_PTT_RADIOS, [] call EFUNC(sys_data,getPlayerRadioList)] call EFUNC(sys_data,sortRadioList);
} else { // using zeus remote voice
_radioLists = [+ ACRE_ASSIGNED_PTT_RADIOS_REMOTE, [] call EFUNC(sys_data,getPlayerRadioList)] call EFUNC(sys_data,sortRadioList);
};

private _returnValue = (_radioLists select 1);

Expand Down
6 changes: 5 additions & 1 deletion addons/api/fnc_setMultiPushToTalkAssignment.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,10 @@ private _index = _var findIf {

if (_index != -1) exitWith { false };

ACRE_ASSIGNED_PTT_RADIOS = _var;
if (acre_player isEqualTo player) then { // using zeus player voice
ACRE_ASSIGNED_PTT_RADIOS = _var;
} else { // using zeus remote voice
ACRE_ASSIGNED_PTT_RADIOS_REMOTE = _var;
};

true
24 changes: 24 additions & 0 deletions addons/compat_spe/stringtable.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,80 +6,94 @@
<German>Funkgerät</German>
<Italian>Radio</Italian>
<Japanese>無線</Japanese>
<French>Radio</French>
</Key>
<Key ID="STR_ACRE_compat_spe_RadioSet">
<English>Radio Set</English>
<German>Funkkanäle</German>
<Italian>Canali radiofonici</Italian>
<Japanese>無線セット</Japanese>
<French>Canaux radio</French>
</Key>
<Key ID="STR_ACRE_compat_spe_RadioSet1_Short">
<English>A-Set</English>
<German>A-Kanäle</German>
<Italian>Canali A</Italian>
<Japanese>Aセット</Japanese>
<French>Canaux A</French>
</Key>
<Key ID="STR_ACRE_compat_spe_RadioSet1_US">
<English>Radio Set - Able</English>
<German>Kanäle - Able</German>
<Italian>Canali - Able</Italian>
<Japanese>無線セット - Able</Japanese>
<French>Canaux - Able</French>
</Key>
<Key ID="STR_ACRE_compat_spe_RadioSet1_GER">
<English>Radio Set - Anton</English>
<German>Kanäle - Anton</German>
<Italian>Canali - Anton</Italian>
<Japanese>無線セット - Anton</Japanese>
<French>Canaux - Anton</French>
</Key>
<Key ID="STR_ACRE_compat_spe_RadioSet2_Short">
<English>B-Set</English>
<German>B-Kanäle</German>
<Italian>Canali B</Italian>
<Japanese>Bセット</Japanese>
<French>Canaux B</French>
</Key>
<Key ID="STR_ACRE_compat_spe_RadioSet2_US">
<English>Radio Set - Baker</English>
<German>Kanäle - Baker</German>
<Italian>Canali - Baker</Italian>
<Japanese>無線セット - Baker</Japanese>
<French>Canaux - Baker</French>
</Key>
<Key ID="STR_ACRE_compat_spe_RadioSet2_GER">
<English>Radio Set - Bruno</English>
<German>Kanäle - Bruno</German>
<Italian>Canali - Bruno</Italian>
<Japanese>無線セット - Bruno</Japanese>
<French>Canaux - Bruno</French>
</Key>
<Key ID="STR_ACRE_compat_spe_Intercom_Short">
<English>IntCm</English>
<German>BFunk</German>
<Italian>Rdb</Italian>
<Japanese>インコム</Japanese>
<French>IntPh</French>
</Key>
<Key ID="STR_ACRE_compat_spe_Intercom_Crew">
<English>Crew Intercom</English>
<German>Bordfunk Besatzung</German>
<Italian>Equipaggio radiofonico di bordo</Italian>
<Japanese>乗員インターコム</Japanese>
<French>Radio de bord d'équipage</French>
</Key>
<Key ID="STR_ACRE_compat_spe_M4A1_75_erla_Command">
<English>M4A1 Sherman (Command)</English>
<German>M4A1 Sherman (Kommando)</German>
<Italian>M4A1 Sherman (Comando)</Italian>
<French>M4A1 Sherman (Commandement)</French>
</Key>
<Key ID="STR_ACRE_compat_spe_M4A1_75_Command">
<English>M4A1 Sherman (Late) (Command)</English>
<German>M4A1 Sherman (Spät) (Kommando)</German>
<Italian>M4A1 Sherman (Tardivo) (Comando)</Italian>
<French>M4A1 Sherman (Tardif) (Commandement)</French>
</Key>
<Key ID="STR_ACRE_compat_spe_M4A1_76_Command">
<English>M4A1(76)W Sherman (Command)</English>
<German>M4A1(76)W Sherman (Kommando)</German>
<Italian>M4A1(76)W Sherman (Comando)</Italian>
<French>M4A1(76)W Sherman (Commandement)</French>
</Key>
<Key ID="STR_ACRE_compat_spe_M4A0_75_Early_Command">
<English>M4 Sherman (Command)</English>
<German>M4 Sherman (Kommando)</German>
<Italian>M4 Sherman (Comando)</Italian>
<French>M4 Sherman (Commandement)</French>
</Key>
<Key ID="STR_ACRE_compat_spe_M4A0_composite_Command">
<English>M4 Sherman (Composite) (Command)</English>
Expand All @@ -88,46 +102,55 @@
<English>M4 Sherman (Late) (Command)</English>
<German>M4 Sherman (Spät) (Kommando)</German>
<Italian>M4 Sherman (Tardivo) (Comando)</Italian>
<French>M4 Sherman (Tardif) (Commandement)</French>
</Key>
<Key ID="STR_ACRE_compat_spe_M4A0_105_Command">
<English>M4(105) Sherman (Command)</English>
<German>M4(105) Sherman (Kommando)</German>
<Italian>M4(105) Sherman (Comando)</Italian>
<French>M4(105) Sherman (Commandement)</French>
</Key>
<Key ID="STR_ACRE_compat_spe_M4A3_75_Command">
<English>M4A3(75)W Sherman (Command)</English>
<German>M4A3(75)W Sherman (Kommando)</German>
<Italian>M4A3(75)W Sherman (Comando)</Italian>
<French>M4A3(75)W Sherman (Commandement)</French>
</Key>
<Key ID="STR_ACRE_compat_spe_M4A3_76_Command">
<English>M4A3(76)W Sherman (Command)</English>
<German>M4A3(76)W Sherman (Kommando)</German>
<Italian>M4A3(76)W Sherman (Comando)</Italian>
<French>M4A3(76)W Sherman (Commandement)</French>
</Key>
<Key ID="STR_ACRE_compat_spe_M4A3_105_Command">
<English>M4A3(105) Sherman (Command)</English>
<German>M4A3(105) Sherman (Kommando)</German>
<Italian>M4A3(105) Sherman (Comando)</Italian>
<French>M4A3(105) Sherman (Commandement)</French>
</Key>
<Key ID="STR_ACRE_compat_spe_PzBefWgIII_K">
<English>PzBefWg III Ausf. K</English>
<German>PzBefWg III Ausf. K</German>
<Italian>PzBefWg III Ausf. K</Italian>
<French>PzBefWg III Ausf. K</French>
</Key>
<Key ID="STR_ACRE_compat_spe_PzBefWgIV">
<English>PzBefWg IV</English>
<German>PzBefWg IV</German>
<Italian>PzBefWg IV</Italian>
<French>PzBefWg IV</French>
</Key>
<Key ID="STR_ACRE_compat_spe_PzBefWgV">
<English>PzBefWg V</English>
<German>PzBefWg V</German>
<Italian>PzBefWg V</Italian>
<French>PzBefWg V</French>
</Key>
<Key ID="STR_ACRE_compat_spe_PzBefWgVI">
<English>PzBefWg VI</English>
<German>PzBefWg VI</German>
<Italian>PzBefWg VI</Italian>
<French>PzBefWg VI</French>
</Key>
<Key ID="STR_ACRE_compat_spe_BfwJagdpanther">
<English>Bfw. Jagdpanther</English>
Expand All @@ -137,6 +160,7 @@
<German>Funker</German>
<Italian>Operatore Radio</Italian>
<Japanese>無線手</Japanese>
<French>Opérateur radio</French>
</Key>
</Package>
</Project>
4 changes: 2 additions & 2 deletions addons/sys_attenuate/fnc_debugDraw.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ if (_compartmentsCount > 0) then {
{
private _attenuation = getNumber(_attConfig >> _x);
if (_attenuation > 0) then {
_hintMsg pushBack (format ["<t align='left' font='PuristaMedium'> %2 = %3", _rootAtt select [11], _x select [11], _attenuation]);
_hintMsg pushBack (format ["<t align='left' font='PuristaMedium'> %1 = %2", _x select [11], _attenuation]);

if (_forEachIndex == (_compartmentsCount - 1)) then {
_hintMsg pushBack "</t>";
Expand Down Expand Up @@ -110,7 +110,7 @@ if (_compartmentsTurnedOutCount > 0) then {
{
private _attenuation = getNumber(_attConfig >> _x);
if (_attenuation > 0) then {
_hintMsg pushBack (format ["<t align='left' font='PuristaMedium'> %2 = %3", _rootAtt select [11], _x select [11], _attenuation]);
_hintMsg pushBack (format ["<t align='left' font='PuristaMedium'> %1 = %2", _x select [11], _attenuation]);

if (_forEachIndex == (_compartmentsCount - 1)) then {
_hintMsg pushBack "</t>";
Expand Down
2 changes: 1 addition & 1 deletion addons/sys_bf888s/radio/fnc_getExternalAudioPosition.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ params ["_radioId", "", "", ""];
private _obj = [_radioId] call EFUNC(sys_radio,getRadioObject);
private _pos = getPosASL _obj;
if (_obj isKindOf "Man") then {
_pos = AGLtoASL (_obj modelToWorld (_obj selectionPosition "RightShoulder"));
_pos = AGLToASL (_obj modelToWorld (_obj selectionPosition "RightShoulder"));
};

_pos
10 changes: 5 additions & 5 deletions addons/sys_components/fnc_findAntenna.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ private _searchFunction = {
if (isArray (_configPath >> "acre_antennaMemoryPoints")) then {
private _memoryPoints = getArray (_configPath >> "acre_antennaMemoryPoints");
_memoryPoints = _memoryPoints select (((count _memoryPoints) - 1) min _connectorIndex);
_antennaPos = AGLtoASL (_componentObject modelToWorld (_componentObject selectionPosition (_memoryPoints select 0)));
_antennaPos = AGLToASL (_componentObject modelToWorld (_componentObject selectionPosition (_memoryPoints select 0)));
} else {
if (getText (_configPath >> "acre_antennaPosFnc") != "") then {
_antennaPos = [_componentObject, _connectorIndex] call (missionNamespace getVariable (getText (_configPath >> "acre_antennaPosFnc")));
Expand All @@ -65,10 +65,10 @@ private _searchFunction = {
if (isArray (_configPath >> "acre_antennaMemoryPointsDir")) then {
private _memoryPoints = getArray (_configPath >> "acre_antennaMemoryPointsDir");
_memoryPoints = _memoryPoints select (((count _memoryPoints) - 1) min _connectorIndex);
_antennaDir = AGLtoASL(_componentObject modelToWorld (_componentObject selectionPosition (_memoryPoints select 0))) vectorFromTo
AGLtoASL(_componentObject modelToWorld (_componentObject selectionPosition (_memoryPoints select 1)));
_antennaDirUp = AGLtoASL(_componentObject modelToWorld (_componentObject selectionPosition (_memoryPoints select 2))) vectorFromTo
AGLtoASL(_componentObject modelToWorld (_componentObject selectionPosition (_memoryPoints select 3)));
_antennaDir = AGLToASL(_componentObject modelToWorld (_componentObject selectionPosition (_memoryPoints select 0))) vectorFromTo
AGLToASL(_componentObject modelToWorld (_componentObject selectionPosition (_memoryPoints select 1)));
_antennaDirUp = AGLToASL(_componentObject modelToWorld (_componentObject selectionPosition (_memoryPoints select 2))) vectorFromTo
AGLToASL(_componentObject modelToWorld (_componentObject selectionPosition (_memoryPoints select 3)));

} else {
if (getText (_configPath >> "acre_antennaDirFnc") != "") then {
Expand Down
10 changes: 5 additions & 5 deletions addons/sys_components/fnc_getAntennaDirMan.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,9 @@ if (vehicle _obj == _obj) then {
};
};

private _baseASL = AGLtoASL (_obj modelToWorld [0,0,0]); // convert from model vector to world
_upV = _baseASL vectorFromTo AGLtoASL (_obj ModelToWorld _spineMV);
_forwardV = _baseASL vectorFromTo AGLtoASL (_obj ModelToWorld (_spineMV vectorCrossProduct _shoulderMV));
private _baseASL = AGLToASL (_obj modelToWorld [0,0,0]); // convert from model vector to world
_upV = _baseASL vectorFromTo AGLToASL (_obj modelToWorld _spineMV);
_forwardV = _baseASL vectorFromTo AGLToASL (_obj modelToWorld (_spineMV vectorCrossProduct _shoulderMV));

/*
* In order to debug and visualize the antenna direction this function needs to be called every frame.
Expand All @@ -47,8 +47,8 @@ if (vehicle _obj == _obj) then {
*/
#ifdef DRAW_ANTENNA_POS
private _spinePos = _obj modelToWorldVisual (_obj selectionPosition "Spine3");
drawLine3D [_spinePos, ASLtoAGL ((AGLtoASL _spinePos) vectorAdd _forwardV), [1,0,0,1]];
drawLine3D [_spinePos, ASLtoAGL ((AGLtoASL _spinePos) vectorAdd _upV), [0,0,1,1]];
drawLine3D [_spinePos, ASLToAGL ((AGLToASL _spinePos) vectorAdd _forwardV), [1,0,0,1]];
drawLine3D [_spinePos, ASLToAGL ((AGLToASL _spinePos) vectorAdd _upV), [0,0,1,1]];
#endif
} else {
_forwardV = vectorDir (vehicle _obj);
Expand Down
1 change: 1 addition & 0 deletions addons/sys_core/XEH_preInit.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ DVAR(ACRE_LISTENER_DIVE) = 0;

DVAR(ACRE_PTT_RELEASE_DELAY) = 0.2;
DVAR(ACRE_ASSIGNED_PTT_RADIOS) = [];
DVAR(ACRE_ASSIGNED_PTT_RADIOS_REMOTE) = []; // Remote controlled unit
GVAR(delayReleasePTT_Handle) = nil;

DVAR(ACRE_ACTIVE_PTTKEY) = -2;
Expand Down
16 changes: 11 additions & 5 deletions addons/sys_core/fnc_handleMultiPttKeyPress.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,17 @@ if (ACRE_ACTIVE_PTTKEY == -2) then {
private _radioList = [] call EFUNC(sys_data,getPlayerRadioList);
if (ACRE_ACTIVE_PTTKEY <= (count _radioList) - 1) then {
if ((count ACRE_ASSIGNED_PTT_RADIOS) > 0) then {
private _sortList = [ACRE_ASSIGNED_PTT_RADIOS, _radioList] call EFUNC(sys_data,sortRadioList);
// This will handle cleanup automatically too
ACRE_ASSIGNED_PTT_RADIOS = _sortList select 0;
_radioList = _sortList select 1;

if (acre_player isEqualTo player) then { // using zeus player voice
private _sortList = [ACRE_ASSIGNED_PTT_RADIOS, _radioList] call EFUNC(sys_data,sortRadioList);
// This will handle cleanup automatically too
ACRE_ASSIGNED_PTT_RADIOS = _sortList select 0;
_radioList = _sortList select 1;
} else {
private _sortList = [ACRE_ASSIGNED_PTT_RADIOS_REMOTE, _radioList] call EFUNC(sys_data,sortRadioList);
// This will handle cleanup automatically too
ACRE_ASSIGNED_PTT_RADIOS_REMOTE = _sortList select 0;
_radioList = _sortList select 1;
};
};
_sendRadio = _radioList select ACRE_ACTIVE_PTTKEY;
[_sendRadio] call EFUNC(sys_radio,setActiveRadio);
Expand Down
2 changes: 1 addition & 1 deletion addons/sys_core/fnc_processDirectSpeaker.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ if (_bothSpectating || {_isIntercomAttenuate}) then {
_emitterPos = _zeusPosition select 0;
_emitterDir = _zeusPosition select 1;
} else {
_emitterPos = AGLtoASL (_unit modelToWorldVisual (_unit selectionPosition "head")); //; eyePos _unit;
_emitterPos = AGLToASL (_unit modelToWorldVisual (_unit selectionPosition "head")); //; eyePos _unit;
_emitterDir = eyeDirection _unit;
};
};
Expand Down
2 changes: 1 addition & 1 deletion addons/sys_core/fnc_removeGear.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ _item = toLower _item;
private _assignedItems = (assignedItems _unit) apply {toLower _x};

if (_item in _assignedItems) then {
_unit unassignitem _item;
_unit unassignItem _item;
};
_unit removeItem _item;
_unit removeWeapon _item;
2 changes: 1 addition & 1 deletion addons/sys_core/fnc_replaceGear.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ if (!isNull _uniform && {_itemToReplace in _uniforCmargo}) exitWith {
};

private _vest = vestContainer _unit;
private _vestCargo = ((getitemCargo _vest) select 0) apply {toLower _x};
private _vestCargo = ((getItemCargo _vest) select 0) apply {toLower _x};
if (!isNull _vest && {_itemToReplace in _vestCargo}) exitWith {
_unit removeItem _itemToReplace;
_vest addItemCargoGlobal [_itemReplaceWith, 1]; // circumvent limit
Expand Down
4 changes: 2 additions & 2 deletions addons/sys_core/fnc_updateSelf.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,12 @@
*/

// ref bug: http://feedback.arma3.com/view.php?id=15580
private _projectPos = AGLtoASL positionCameraToWorld [0, 0, 0];
private _projectPos = AGLToASL positionCameraToWorld [0, 0, 0];

if (EGVAR(sys_zeus,zeusCommunicateViaCamera) && FUNC(inZeus)) then {
ACRE_LISTENER_DIR = eyeDirection player;
} else {
ACRE_LISTENER_DIR = (AGLtoASL positionCameraToWorld [0, 0, 1]) vectorDiff _projectPos;
ACRE_LISTENER_DIR = (AGLToASL positionCameraToWorld [0, 0, 1]) vectorDiff _projectPos;
};

if (ACRE_IS_SPECTATOR) then {
Expand Down
2 changes: 1 addition & 1 deletion addons/sys_external/fnc_listChildrenActions.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ private _ownSharedRadios = [acre_player] call FUNC(getSharedExternalRadios);
};

private _baseRadio = [_x] call EFUNC(api,getBaseRadio);
private _item = ConfigFile >> "CfgWeapons" >> _baseRadio;
private _item = configFile >> "CfgWeapons" >> _baseRadio;
private _displayName = getText (_item >> "displayName") + _owner;
private _currentChannel = [_x] call EFUNC(api,getRadioChannel);
_displayName = format [localize ELSTRING(ace_interact,channelShort), _displayName, _currentChannel];
Expand Down
2 changes: 1 addition & 1 deletion addons/sys_external/fnc_startUsingExternalRadio.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ params ["_radioID", "_endUser"];

private _owner = [_radioId] call FUNC(getExternalRadioOwner);
private _baseRadio = [_radioId] call EFUNC(api,getBaseRadio);
private _displayName = getText (ConfigFile >> "CfgWeapons" >> _baseRadio >> "displayName");
private _displayName = getText (configFile >> "CfgWeapons" >> _baseRadio >> "displayName");

// Do not flag as being externally used if it is already so (action give)
if !([_radioId] call FUNC(isExternalRadioUsed)) then {
Expand Down
2 changes: 1 addition & 1 deletion addons/sys_external/fnc_stopUsingExternalRadio.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ ACRE_ACTIVE_EXTERNAL_RADIOS = ACRE_ACTIVE_EXTERNAL_RADIOS - [_radioId];
[_radioId] call EFUNC(sys_radio,stopUsingRadio);

private _baseRadio = [_radioId] call EFUNC(api,getBaseRadio);
private _displayName = getText (ConfigFile >> "CfgWeapons" >> _baseRadio >> "displayName");
private _displayName = getText (configFile >> "CfgWeapons" >> _baseRadio >> "displayName");
[[ICON_RADIO_CALL], [format [localize LSTRING(hintReturn), _displayName, name _owner]], true] call CBA_fnc_notify;

if (_target == _owner) then {
Expand Down
2 changes: 1 addition & 1 deletion addons/sys_gsa/fnc_connectChildrenActions.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ private _actions = [];
};

private _baseRadio = [_x] call EFUNC(api,getBaseRadio);
private _item = ConfigFile >> "CfgWeapons" >> _baseRadio;
private _item = configFile >> "CfgWeapons" >> _baseRadio;

private "_displayName";
if (_x in ACRE_ACCESSIBLE_RACK_RADIOS || {_x in ACRE_HEARABLE_RACK_RADIOS}) then {
Expand Down
2 changes: 1 addition & 1 deletion addons/sys_gui/fnc_antennaElevationDisplay.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
// Need to run this every frame. Otherwise there will be noticeable delays
[{
// Collect data from stance
private _stance = tolower (stance acre_player);
private _stance = toLower (stance acre_player);

// Hide antenna display if not applicable (in vehicle or other invalid stance or no radio)
if (_stance == "" || {_stance == "undefined"} || {ACRE_ACTIVE_RADIO == ""}) exitWith {
Expand Down
Loading

0 comments on commit 998671d

Please sign in to comment.