Jump to content
The simFlight Network Forums

Recommended Posts

Posted

Hi,

I'm trying to use a lua script to do some throttle setting for the PMDG DC-6 but I have a problem.

If I set the individual throttles by passing a value to, for instance 0x0924 - nothing happens. This follows the fact that if I set the throttles within FSUIPC configuration itself they don't work, which has been confirmed by PMDG support. However it does work if I set the 'Throttle' to an axis within FSUIPC. 

I'm trying to see if I can use this 'throttle' axis in my lua script instead of the individual throttles, which isn't ideal for what I'm doing but better than nothing. I just can't find the right offset. I can move the throttles using the axis with 'throttle' set using the FSUIPC configuration, but I just can't figure out an offset to use.

Could someone help me?

Thanks in advance,

James

  • Like 1
Posted
5 minutes ago, severniae said:

If I set the individual throttles by passing a value to, for instance 0x0924 - nothing happens. This follows the fact that if I set the throttles within FSUIPC configuration itself they don't work, which has been confirmed by PMDG support. However it does work if I set the 'Throttle' to an axis within FSUIPC. 

It works assigning to the Axis Thottle controls in FSUIPC, the FS controls not the "direct" controls. Those are the same as those you can assign in the Sim itelf. But you csn't calibrate in FSUIPC.

The problem is that most PMDG aircraft read these values "off the top" of the SimConnect pile, whereas, so FSUIPC can calibrate them first, it feeds calibrated controls at a lower level. it has no option.

9 minutes ago, severniae said:

I'm trying to see if I can use this 'throttle' axis in my lua script instead of the individual throttles, which isn't ideal for what I'm doing but better than nothing. I just can't find the right offset. I can move the throttles using the axis with 'throttle' set using the FSUIPC configuration, but I just can't figure out an offset to use.

It isn't an "offset" but a "control". Offsets are values you can read and maybe write. Yes, there are throttle offsets, but those would bypass the PMDG mechanism.

You can send controls to the Sim using the Lua library function ipc.control. Just look up the number for the Axi throttle controls in the list of controls supplied, and supply the throttle value as parameter.

Pete

 

Posted

Thanks for the quick reply Pete!

I'm quite new to this, how would I get the list of controls? What I'll need for the script to work is the range of the control, and then I can increase or decrease the throttle depending on the manifold pressure readout.. I'm creating an 'alternate' flight engineer - the one PMDG created is great but i'm creating scripts so I can call out and set specific manifold pressures/RPMs!

Posted

Just as a note - setting the throttle axis does seem to work when set using 'direct' within FSUIPC, it's only if you need to separate the throttles you can't. (see attached images)

 

Are the settings in those images a 'control' or can they be influenced by an offset?

Apologies if I'm not hitting the right terms, only really started playing with scripts and these settings over the last few months.

Thanks,

James

EDIT: just tried "ipc.control(65820, 10000)" and it doesn't appear to do anything in the sim.... Though I guess I have missed something,.,

 

Thrconf1.PNG

Thrconf2.PNG

Posted
3 hours ago, severniae said:

I'm quite new to this, how would I get the list of controls?

You look in the List of controls document supplied for you along with all the other FSUIPC documnetation!

2 hours ago, severniae said:

Are the settings in those images a 'control' or can they be influenced by an offset?

Unless you assign to an offset control (i.e. one designed to write to an offset) all controls you can assign to are controls, also called Events in FS.

2 hours ago, severniae said:

: just tried "ipc.control(65820, 10000)" and it doesn't appear to do anything in the sim.... Though I guess I have missed something,.,

65820 is "Throttle1 Set" and is th very same control used for the separate throttles in FSUIPC which you already said don't work with your aircraft!

Use the Axis throttle controls as I instructed way back.

Pete

 

Posted

Hi All,

So I'm trying the quoted below which is an excerpt from a script that I have put together (with help from others), that should read the current manifold pressure value via the gauge in the cockpit, and then either increase or decrease the throttle until the desired manifold pressure is reached. For some reason what I'm expecting to happen, isn't...

Just to give  a little background on the script:

MP is the desired Manifold pressure,  in this case '250' represents a manifold pressure, of 25'. PMDG stores the manifold pressure in object 325 (for engine one), so if the gauge was reading 35' - the value in "L:dc6_325_obj" would show as '350' (probably with a lot of decimal places!)

var2 is reading the current position of the set throttle. I've set all sorts of display readouts so I can see what the script is seeing as the values. I've found that this value has a range from 0 - 16384.

var3 is the control number from the throttle. Through experimentation I've figured that this setting has a range from -16384 for throttle closed, to 16384 for full open. So to try to pass the correct value to set the throttle, I'm having to subtract 16384 and then double the inputted value. I think this is the correct way to do it, but I may be well short of the mark..

What I'm seeing happen, is that when I engage the script the throttle just seems to reduce to 0 and then does nothing... I can't get it to do the gradual increase as it should on the script. 

If I remove the " * 2 - 16384" from THR_IN then every time the throttle just makes big jumps forward until the throttle is at full power...

Should the below script work? or have I fundamentally misunderstood something?

Thanks,

James

 

Quote

 

  if go == 1 then
  
    MP = 250
    var1 = ipc.readLvar("L:dc6_325_obj")
    var2 = 0x088C
    var3 = 66420
    
   ipc.writeUW(0x310A, 0xC0C0)             -- Turn Throttle 1 to 4 inputs OFF

    MP_IN = var1
    ipc.display("MP IN IS "..MP_IN, 4)
    ipc.sleep(2000)

    ipc.display("MP IS "..MP, 4)
    ipc.sleep(2000)

    if MP_IN < MP - 0.1 then
       mp_delta = 8.5                        -- Increase Throttle 
    end

    if MP_IN > MP + 0.1 then
       mp_delta = -8.5                       -- Decrease Throttle 
    end

    if MP_IN > MP - 0.1 and MP_IN < MP + 0.1 then
       mp_delta = 0                                   
    end
    
    THR_IN = ipc.readSW(var2) * 2 - 16384
    ipc.display("THR IN IS "..THR_IN, 4)
    ipc.sleep(2000)
     THR_OUT = THR_IN + mp_delta
     ipc.display("THR OUT IS "..THR_OUT, 4)
     ipc.sleep(2000)
     ipc.control(66420, THR_OUT)      

  end            

 

 

Posted

Ok so I just did a quick test. 

Here is the full script I ran..

Quote

  
function doit()
  go = 1
  
    if go == 1 then
  
    MP = 250
    var1 = ipc.readLvar("L:dc6_325_obj")
    var2 = 0x088C
    var3 = 66420
    
   ipc.writeUW(0x310A, 0xC0C0)             -- Turn Throttle 1 to 4 inputs OFF

    MP_IN = var1
    ipc.log("MP IN IS "..MP_IN, 4)
    ipc.sleep(2000)

    ipc.log("MP IS "..MP, 4)
    ipc.sleep(2000)

    if MP_IN < MP - 0.1 then
       mp_delta = 8.5                        -- Increase Throttle 
    end

    if MP_IN > MP + 0.1 then
       mp_delta = -8.5                       -- Decrease Throttle 
    end

    if MP_IN > MP - 0.1 and MP_IN < MP + 0.1 then
       mp_delta = 0                                   
    end
    
    THR_IN = ipc.readSW(var2) * 2 - 16384
    ipc.log("THR IN IS "..THR_IN, 4)
    ipc.sleep(2000)
     THR_OUT = THR_IN + mp_delta
     ipc.log("THR OUT IS "..THR_OUT, 4)
     ipc.sleep(2000)
     ipc.control(66420, THR_OUT)      

  end   
  end
  
  on = 1
  while on == 1 do
    doit()
    end

Here is the log output:

Quote

********* LUA: "DC6PowerSet" Log [from FSUIPC version 4.974] *********
  1317797 System time = 23/08/2018 14:09:41, Simulator time = 13:40:30 (13:40Z)
  1317797 LUA: beginning "C:\FILES\P3D\Modules\DC6PowerSet.lua"
  1317812 LUA: MP IN IS 77.360907599372
  1319828 LUA: MP IS 250
  1321843 LUA: THR IN IS -15074
  1323859 LUA: THR OUT IS -15065.5
  1325875 LUA: MP IN IS 75.813360378348
  1327890 LUA: MP IS 250
  1329906 LUA: THR IN IS -15074
  1331922 LUA: THR OUT IS -15065.5
  1333953 LUA: MP IN IS 75.442850121872
  1335968 LUA: MP IS 250
  1337984 LUA: THR IN IS -15074
  1339281 >>> Thread killed <<<
  1339281 System time = 23/08/2018 14:10:02, Simulator time = 13:40:51 (13:40Z)
********* LUA execution terminated: Log Closed *********

And finally here is a log trace with debugging enabled, in case helpful:

Quote

********* LUA: "DC6PowerSet" Log [from FSUIPC version 4.974] *********
  1445859 System time = 23/08/2018 14:11:49, Simulator time = 13:42:33 (13:42Z)
  1445859 LUA: beginning "C:\FILES\P3D\Modules\DC6PowerSet.lua"
  1445875 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:42
  1445875 LUA: Global: ipcPARAM = 0
  1445875 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:2
  1445875 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:44
  1445875 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:45
  1445875 LUA: Global: on = 1
  1445875 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:46
  1445890 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:3 fn: doit
  1445890 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:5 fn: doit
  1445890 LUA: Global: go = 1
  1445890 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:7 fn: doit
  1445906 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:8 fn: doit
  1445906 LUA: Global: MP = 250
  1445906 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:9 fn: doit
  1445906 LUA: Global: var1 = 75.323935619902
  1445906 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:10 fn: doit
  1445906 LUA: Global: var2 = 2188
  1445922 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:12 fn: doit
  1445922 LUA: Global: var3 = 66420
  1445953 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:14 fn: doit
  1445953 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:15 fn: doit
  1445953 LUA: Global: MP_IN = 75.323935619902
  1445968 LUA: MP IN IS 75.323935619902
  1445968 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:16 fn: doit
  1447984 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:18 fn: doit
  1447984 LUA: MP IS 250
  1447984 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:19 fn: doit
  1450000 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:21 fn: doit
  1450000 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:22 fn: doit
  1450000 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:25 fn: doit
  1450000 LUA: Global: mp_delta = 8.5
  1450000 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:29 fn: doit
  1450000 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:33 fn: doit
  1450000 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:34 fn: doit
  1450000 LUA: Global: THR_IN = -15074
  1450015 LUA: THR IN IS -15074
  1450015 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:35 fn: doit
  1452031 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:36 fn: doit
  1452031 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:37 fn: doit
  1452031 LUA: Global: THR_OUT = -15065.5
  1452031 LUA: THR OUT IS -15065.5
  1452031 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:38 fn: doit
  1454047 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:39 fn: doit
  1454078 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:42 fn: doit
  1454078 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:45
  1454078 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:46
  1454078 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:3 fn: doit
  1454078 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:5 fn: doit
  1454093 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:7 fn: doit
  1454093 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:8 fn: doit
  1454093 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:9 fn: doit
  1454109 LUA: Global: var1 = 75.323766866178
  1454109 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:10 fn: doit
  1454109 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:12 fn: doit
  1454140 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:14 fn: doit
  1454140 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:15 fn: doit
  1454140 LUA: Global: MP_IN = 75.323766866178
  1454156 LUA: MP IN IS 75.323766866178
  1454156 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:16 fn: doit
  1456172 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:18 fn: doit
  1456172 LUA: MP IS 250
  1456172 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:19 fn: doit
  1458187 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:21 fn: doit
  1458187 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:22 fn: doit
  1458187 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:25 fn: doit
  1458187 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:29 fn: doit
  1458203 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:33 fn: doit
  1458203 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:34 fn: doit
  1458203 LUA: THR IN IS -15074
  1458203 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:35 fn: doit
  1460234 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:36 fn: doit
  1460234 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:37 fn: doit
  1460234 LUA: THR OUT IS -15065.5
  1460234 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:38 fn: doit
  1462250 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:39 fn: doit
  1462265 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:42 fn: doit
  1462281 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:45
  1462281 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:46
  1462281 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:3 fn: doit
  1462281 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:5 fn: doit
  1462297 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:7 fn: doit
  1462297 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:8 fn: doit
  1462297 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:9 fn: doit
  1462297 LUA: Global: var1 = 75.323138770532
  1462312 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:10 fn: doit
  1462312 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:12 fn: doit
  1462343 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:14 fn: doit
  1462359 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:15 fn: doit
  1462359 LUA: Global: MP_IN = 75.323138770532
  1462359 LUA: MP IN IS 75.323138770532
  1462359 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:16 fn: doit
  1464375 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:18 fn: doit
  1464375 LUA: MP IS 250
  1464375 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:19 fn: doit
  1466390 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:21 fn: doit
  1466390 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:22 fn: doit
  1466390 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:25 fn: doit
  1466390 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:29 fn: doit
  1466390 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:33 fn: doit
  1466406 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:34 fn: doit
  1466406 LUA: THR IN IS -15074
  1466406 LUA: C:\FILES\P3D\Modules\DC6PowerSet.lua:35 fn: doit
  1466828 >>> Thread killed <<<
  1466828 System time = 23/08/2018 14:12:10, Simulator time = 13:42:54 (13:42Z)
********* LUA execution terminated: Log Closed *********

Hopefully that gives some more information to be working with...

Posted
1 hour ago, severniae said:

  1321843 LUA: THR IN IS -15074
  1323859 LUA: THR OUT IS -15065.5
  1329906 LUA: THR IN IS -15074
  1331922 LUA: THR OUT IS -15065.5

So, your program isn't doing what you want? The differences between yo IN and OUT values are too small to have any real affect. I'm not sure, but Ithink the Sim only uses differences or 256 or more! Certainly you'd not notice those differences.

And those values are close to idle.

Pete

 

 

Posted

Right on the money Pete! I edited how much I am moving the throttles and hey presto! They appear to be working as planned. I'm tweaking a little so they don't overrun but so far so good!

I will have one issue once I plug the throttles back in - in that using "ipc.writeUW(0x310A, 0xC0C0)" won't work with this script as it would block the throttle settings I'm trying to change.

Is there an alternative that would prevent my moving the physical throttles (ch quadrent) from effecting the script in the sim? If so great if not I'll have to get inventive!

Cheers, and thanks for all the help!

James

Posted
43 minutes ago, severniae said:

I will have one issue once I plug the throttles back in - in that using "ipc.writeUW(0x310A, 0xC0C0)" won't work with this script as it would block the throttle settings I'm trying to change.

Is there an alternative that would prevent my moving the physical throttles (ch quadrent) from effecting the script in the sim?

I'm really confused by this. Those two parts seem self-contradictory. What is this about plugging throttles back in? Are you actually removing them?  Are you saying you want the throttle levers to control the throttles, or your plug-in, or is it that you want to switch between?

For complete control, instead of assigning to the throttles, you'd need to assign your throttle lever to the running Lua plug-in as LuaValue <name>, then detect this and the value of the lever by event.param.  That way you can do what you wish with the value -- send it as a Throttle control after all, or discard it, or process it some other way.

But to deal with multiple throttle levers would need a separate plug-in for each. 

Or, and maybe best, read the axis values which would otherwise have been applied from the offsets provided for this. These are in final units (i.e 0-16383), post calibration. Please do see the full description in the details for offset 310A. You could use event.offset.

Pete

 

 

  • 1 year later...
Posted

Hi,
I am replying to this threat as I do not know if the problem has been solved. Anyway, I have got a similar issue: I want to control the throttle levers of  Aerosoft Airbus A320 by an external device (self made homecockpit throttle quadrant) via lua script. I have already succeeded for the flap levers. But the throttles wil not operate.
I have added the small lua script for testing throttle 1 and the log file. The lever position is written to offset 089A (by SIOC). This seems to work.  Maybe, ipc.control number 66420 (throttle axis 1) is wrong....

Christoph

 

Airbus_ttest.lua FSUIPC4.log

Posted
5 hours ago, Pilot1801 said:

But the throttles wil not operate. I have added the small lua script for testing throttle 1 and the log file. The lever position is written to offset 089A (by SIOC). This seems to work.  Maybe, ipc.control number 66420 (throttle axis 1) is wrong....

66420 is the best choice as this is the same as assigning in FSX itself.  UNLESS you are also calibrating in FSUIPC. Try turning the calibration off (press the RESET button on the relevant Calibration tab).

Calibrating in FSUIPC means it has to intercept the control (via SimConnect) at its normal level, process the value, then send it back to SmConnect at a lower level. It cannot send it back at the normal level because that would cause an infinite loop.

Some aircraft, like the PMDG Boeings, also grab the value at the higher level, not from withing FSX. Probably the Airbus you are using does the same.

Pete

 

Posted

Hello Pete,
thank you for your quick response. Unfortunately, RESET of throttle calibration in FSUIPC was not successful. In my SIOC script values (0-255) are multiplied by 64
and sent to fsuipc offset 089A. There is no problem obviously. Now I have run the lua script with the standard FSX airbus A321:  The lever in FSX jumps to "CLB". But I am not able to shift the lever continuously between IDLE and CLB.  I do not right understand what happens with the parameter - let's say 2096 - after executing ipc.control. How can I get to know which is the apropriate one for controlling  thrust between CLB and IDLE e.g.?

Christoph

Posted
13 hours ago, Pilot1801 said:

Unfortunately, RESET of throttle calibration in FSUIPC was not successful

Sorry, what does that mean? You had them calibrated in FSUIPC and they still are?  didn't pressing RESET change that button back to SET (the default0. if not then there's something very very seriously odd with your system. it would mean FSUIPc is not recieving mouse clicks on its buttons!

13 hours ago, Pilot1801 said:

In my SIOC script values (0-255) are multiplied by 64
and sent to fsuipc offset 089A

Yes, so giving the range 0-16383. BUT that controls the sim throttles and your aircraft model is apparently overriding those. Isn't that why you were sending the value on using the ipc.control function?

14 hours ago, Pilot1801 said:

The lever in FSX jumps to "CLB". But I am not able to shift the lever continuously between IDLE and CLB.  I do not right understand what happens with the parameter - let's say 2096 - after executing ipc.control. How can I get to know which is the apropriate one for controlling  thrust between CLB and IDLE e.g.?

That control needs values -16384 to +16383. You are only sending it 0 to +16383, so you only get the top half of the range. So, before sending the value, multiply it by 2 and subtract 16384. Here's my version of your earlier Lua function::

function Throttle_1_Set (off, val)
   th1_set = (2 * val) - 16384 
   ipc.control(66420, th1_set)
end
event.offset(0x089A, "UW", "Throttle_1_Set")

Pete

 

 

Posted

Hello Pete,
ok - to be more precise: RESET of throttle calibration in FSUIPC was not successful in terms of it did not solve my problem. Of course, the RESET worked and I got button SET. 
Thank you for the re-worked script. The range from -16384 to 16383 is correct for Standard FSX Airbus! Now it works and I am able to control the lever. But unfortunately, it does not operate for the Aerosoft Airbus.
Which are the parameters I have to sent via ipc.control?

Christoph
 

Posted
3 hours ago, Pilot1801 said:

But unfortunately, it does not operate for the Aerosoft Airbus.
Which are the parameters I have to sent via ipc.control?

If the airbus doesn't work with either range, nor with normal assignment without calibration in fSUIPC or the Sim,  then i'm out of ideas. Sorry. Aren't there any folks who can help on their forums?

Pete

 

 

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use. Guidelines Privacy Policy We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.