struct AmountStruct { long basicUnits; long smallUnits; short sign; string currency; }; interface Amount { void fromAmountStruct (in AmountStruct amnt); AmountStruct toAmountStruct (); void fromString (in string amnt); string toString (); Amount plus (in Amount amount); Amount minus (in Amount amount); Amount times (in double factor); Amount convertToCurrency (in string targetCurrency); }; exception Overdraft { AmountStruct balance; AmountStruct limit; AmountStruct attemptedWithdrawal; }; interface Account { oneway void setDesiredCurrency (in string currency); oneway void deposit (in AmountStruct amount); void withdraw (in AmountStruct amount) raises (Overdraft); AmountStruct balance (); }; interface StrictAccount : Account { oneway void setLimit (in AmountStruct limit); };