/*
 * -*- coding: utf-8 -*- {{{
 * vim: set fenc=utf-8 ft=python sw=4 ts=4 sts=4 et:
 *
 * Copyright 2018, Kisensum.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * Neither Kisensum, nor any of its employees, nor any jurisdiction or
 * organization that has cooperated in the development of these materials,
 * makes any warranty, express or implied, or assumes any legal liability
 * or responsibility for the accuracy, completeness, or usefulness or any
 * information, apparatus, product, software, or process disclosed, or
 * represents that its use would not infringe privately owned rights.
 * Reference herein to any specific commercial product, process, or service
 * by trade name, trademark, manufacturer, or otherwise does not necessarily
 * constitute or imply its endorsement, recommendation, or favoring by Kisensum.
 * }}}
 */

// ---------- ASIODNP3 HEADERS ----------
#include "asiodnp3/ConsoleLogger.h"
#include "asiodnp3/DatabaseConfig.h"
#include "asiodnp3/DefaultListenCallbacks.h"
#include "asiodnp3/DefaultMasterApplication.h"
#include "asiodnp3/DNP3Manager.h"
#include "asiodnp3/ErrorCodes.h"
#include "asiodnp3/IChannel.h"
#include "asiodnp3/IChannelListener.h"
#include "asiodnp3/IListenCallbacks.h"
#include "asiodnp3/IMaster.h"
#include "asiodnp3/IMasterOperations.h"
#include "asiodnp3/IMasterScan.h"
#include "asiodnp3/IMasterSession.h"
#include "asiodnp3/IOutstation.h"
#include "asiodnp3/ISessionAcceptor.h"
#include "asiodnp3/IStack.h"
#include "asiodnp3/MasterStackConfig.h"
#include "asiodnp3/MasterTCPServer.h"
#include "asiodnp3/OutstationStackConfig.h"
#include "asiodnp3/PrintingChannelListener.h"
#include "asiodnp3/PrintingCommandCallback.h"
#include "asiodnp3/PrintingSOEHandler.h"
#include "asiodnp3/UpdateBuilder.h"
#include "asiodnp3/Updates.h"
#include "asiodnp3/X509Info.h"

// ---------- ASIOPAL HEADERS ----------
#include "asiopal/ASIOSerialHelpers.h"
#include "asiopal/ChannelRetry.h"
#include "asiopal/Executor.h"
#include "asiopal/IAsyncChannel.h"
#include "asiopal/IChannelCallbacks.h"
#include "asiopal/IListener.h"
#include "asiopal/IO.h"
#include "asiopal/IOpenDelayStrategy.h"
#include "asiopal/IPEndpoint.h"
#include "asiopal/IResourceManager.h"
#include "asiopal/LoggingConnectionCondition.h"
#include "asiopal/ResourceManager.h"
#include "asiopal/SerialChannel.h"
#include "asiopal/SerialTypes.h"
#include "asiopal/SocketChannel.h"
#include "asiopal/SocketHelpers.h"
#include "asiopal/SteadyClock.h"
#include "asiopal/Synchronized.h"
#include "asiopal/TCPClient.h"
#include "asiopal/TCPServer.h"
#include "asiopal/ThreadPool.h"
#include "asiopal/TimeConversions.h"
#include "asiopal/Timer.h"
#include "asiopal/TLSConfig.h"
#include "asiopal/UTCTimeSource.h"

// ---------- OPENDNP3 HEADERS ----------
#include "opendnp3/app/parsing/ICollection.h"
#include "opendnp3/app/AnalogCommandEvent.h"
#include "opendnp3/app/AnalogOutput.h"
#include "opendnp3/app/AppConstants.h"
#include "opendnp3/app/BaseMeasurementTypes.h"
#include "opendnp3/app/BinaryCommandEvent.h"
#include "opendnp3/app/ClassField.h"
#include "opendnp3/app/ControlRelayOutputBlock.h"
#include "opendnp3/app/DNPTime.h"
#include "opendnp3/app/EventCells.h"
#include "opendnp3/app/EventTriggers.h"
#include "opendnp3/app/EventType.h"
#include "opendnp3/app/Flags.h"
#include "opendnp3/app/GroupVariationID.h"
#include "opendnp3/app/Indexed.h"
#include "opendnp3/app/IINField.h"
#include "opendnp3/app/ITransactable.h"
#include "opendnp3/app/MeasurementInfo.h"
#include "opendnp3/app/MeasurementTypes.h"
#include "opendnp3/app/MeasurementTypeSpecs.h"
#include "opendnp3/app/OctetData.h"
#include "opendnp3/app/OctetString.h"
#include "opendnp3/app/QualityMasks.h"
#include "opendnp3/app/SecurityStat.h"
#include "opendnp3/gen/AnalogOutputStatusQuality.h"
#include "opendnp3/gen/AnalogQuality.h"
#include "opendnp3/gen/AssignClassType.h"
#include "opendnp3/gen/Attributes.h"
#include "opendnp3/gen/AuthErrorCode.h"
#include "opendnp3/gen/BinaryOutputStatusQuality.h"
#include "opendnp3/gen/BinaryQuality.h"
#include "opendnp3/gen/CertificateType.h"
#include "opendnp3/gen/ChallengeReason.h"
#include "opendnp3/gen/ChannelState.h"
#include "opendnp3/gen/CommandPointState.h"
#include "opendnp3/gen/CommandStatus.h"
#include "opendnp3/gen/ConfigAuthMode.h"
#include "opendnp3/gen/ControlCode.h"
#include "opendnp3/gen/CounterQuality.h"
#include "opendnp3/gen/DoubleBit.h"
#include "opendnp3/gen/DoubleBitBinaryQuality.h"
#include "opendnp3/gen/EventAnalogOutputStatusVariation.h"
#include "opendnp3/gen/EventAnalogVariation.h"
#include "opendnp3/gen/EventBinaryOutputStatusVariation.h"
#include "opendnp3/gen/EventBinaryVariation.h"
#include "opendnp3/gen/EventCounterVariation.h"
#include "opendnp3/gen/EventDoubleBinaryVariation.h"
#include "opendnp3/gen/FrozenCounterQuality.h"
#include "opendnp3/gen/EventFrozenCounterVariation.h"
#include "opendnp3/gen/EventMode.h"
#include "opendnp3/gen/EventSecurityStatVariation.h"
#include "opendnp3/gen/FlagsType.h"
#include "opendnp3/gen/FlowControl.h"
#include "opendnp3/gen/FunctionCode.h"
#include "opendnp3/gen/GroupVariation.h"
#include "opendnp3/gen/HMACType.h"
#include "opendnp3/gen/IndexMode.h"
#include "opendnp3/gen/IntervalUnits.h"
#include "opendnp3/gen/KeyChangeMethod.h"
#include "opendnp3/gen/KeyStatus.h"
#include "opendnp3/gen/KeyWrapAlgorithm.h"
#include "opendnp3/gen/LinkFunction.h"
#include "opendnp3/gen/LinkStatus.h"
#include "opendnp3/gen/MasterTaskType.h"
#include "opendnp3/gen/OperateType.h"
#include "opendnp3/gen/Parity.h"
#include "opendnp3/gen/PointClass.h"
#include "opendnp3/gen/QualifierCode.h"
#include "opendnp3/gen/RestartMode.h"
#include "opendnp3/gen/RestartType.h"
#include "opendnp3/gen/SecurityStatIndex.h"
#include "opendnp3/gen/StaticAnalogOutputStatusVariation.h"
#include "opendnp3/gen/StaticAnalogVariation.h"
#include "opendnp3/gen/StaticBinaryOutputStatusVariation.h"
#include "opendnp3/gen/StaticBinaryVariation.h"
#include "opendnp3/gen/StaticCounterVariation.h"
#include "opendnp3/gen/StaticDoubleBinaryVariation.h"
#include "opendnp3/gen/StaticFrozenCounterVariation.h"
#include "opendnp3/gen/StaticSecurityStatVariation.h"
#include "opendnp3/gen/StaticTimeAndIntervalVariation.h"
#include "opendnp3/gen/StopBits.h"
#include "opendnp3/gen/StaticTypeBitmask.h"
#include "opendnp3/gen/TaskCompletion.h"
#include "opendnp3/gen/TimestampMode.h"
#include "opendnp3/gen/TimeSyncMode.h"
#include "opendnp3/gen/UserOperation.h"
#include "opendnp3/gen/UserRole.h"
#include "opendnp3/link/ILinkListener.h"
#include "opendnp3/link/LinkConfig.h"
#include "opendnp3/link/LinkHeaderFields.h"
#include "opendnp3/link/LinkStatistics.h"
#include "opendnp3/master/CommandCallbackT.h"
#include "opendnp3/master/CommandPointResult.h"
#include "opendnp3/master/CommandSet.h"
#include "opendnp3/master/HeaderInfo.h"
#include "opendnp3/master/HeaderTypes.h"
#include "opendnp3/master/ICommandCollection.h"
#include "opendnp3/master/ICommandProcessor.h"
#include "opendnp3/master/ICommandTaskResult.h"
#include "opendnp3/master/IMasterApplication.h"
#include "opendnp3/master/ISOEHandler.h"
#include "opendnp3/master/ITaskCallback.h"
#include "opendnp3/master/MasterParams.h"
#include "opendnp3/master/RestartOperationResult.h"
#include "opendnp3/master/TaskConfig.h"
#include "opendnp3/master/TaskId.h"
#include "opendnp3/master/TaskInfo.h"
#include "opendnp3/outstation/ApplicationIIN.h"
#include "opendnp3/outstation/Cell.h"
#include "opendnp3/outstation/DatabaseSizes.h"
#include "opendnp3/outstation/EventBufferConfig.h"
#include "opendnp3/outstation/ICommandHandler.h"
#include "opendnp3/outstation/IOutstationApplication.h"
#include "opendnp3/outstation/IUpdateHandler.h"
#include "opendnp3/outstation/MeasurementConfig.h"
#include "opendnp3/outstation/OutstationConfig.h"
#include "opendnp3/outstation/OutstationParams.h"
#include "opendnp3/outstation/SimpleCommandHandler.h"
#include "opendnp3/outstation/StaticTypeBitfield.h"
#include "opendnp3/LogLevels.h"
#include "opendnp3/StackStatistics.h"

// ---------- OPENPAL HEADERS ----------
//#include "openpal/channel/IPhysicalLayer.h"                   //missing "ChannelStatistics.h" file
#include "openpal/channel/IPhysicalLayerCallbacks.h"
#include "openpal/container/Array.h"
#include "openpal/container/ArrayView.h"
#include "openpal/container/Buffer.h"
#include "openpal/container/HasSize.h"
#include "openpal/container/LinkedList.h"
#include "openpal/container/Pair.h"
#include "openpal/container/Queue.h"
#include "openpal/container/RingBuffer.h"
#include "openpal/container/RSlice.h"
#include "openpal/container/SecureBuffer.h"
#include "openpal/container/Settable.h"
#include "openpal/container/StaticBuffer.h"
#include "openpal/container/WSlice.h"
#include "openpal/executor/IExecutor.h"
#include "openpal/executor/IMonotonicTimeSource.h"
#include "openpal/executor/ITimer.h"
#include "openpal/executor/IUTCTimeSource.h"
#include "openpal/executor/MonotonicTimestamp.h"
#include "openpal/executor/TimeDuration.h"
#include "openpal/executor/TimerRef.h"
#include "openpal/executor/UTCTimestamp.h"
#include "openpal/logging/ILogHandler.h"
#include "openpal/logging/LogEntry.h"
#include "openpal/logging/LogFilters.h"
#include "openpal/logging/Logger.h"
#include "openpal/logging/LogLevels.h"
#include "openpal/logging/StringFormatting.h"
#include "openpal/serialization/DoubleFloat.h"
#include "openpal/serialization/FloatByteOrder.h"
#include "openpal/serialization/Format.h"
#include "openpal/serialization/Parse.h"
#include "openpal/serialization/Serialization.h"
#include "openpal/serialization/SerializationTemplatesLE.h"
#include "openpal/serialization/Serializer.h"
#include "openpal/serialization/SingleFloat.h"
#include "openpal/util/Comparisons.h"
#include "openpal/util/Finally.h"
#include "openpal/util/Limits.h"
#include "openpal/util/SequenceNum.h"
#include "openpal/util/ToHex.h"
#include "openpal/util/Uncopyable.h"
#include "openpal/Configure.h"