WS / SX126xLib

Files at this revision

API Documentation at this revision

Comitter:
GregCr
Date:
Mon Sep 04 15:16:44 2017 +0000
Parent:
3:7e3595a9ebe0
Child:
5:e488e6f185f3
Commit message:
Candidate release

Changed in this revision

pram_c005.h Show diff for this revision Revisions of this file
radio.h Show annotated file Show diff for this revision Revisions of this file
sx126x-hal.cpp Show annotated file Show diff for this revision Revisions of this file
sx126x-hal.h Show annotated file Show diff for this revision Revisions of this file
sx126x.cpp Show annotated file Show diff for this revision Revisions of this file
sx126x.h Show annotated file Show diff for this revision Revisions of this file
--- a/pram_c005.h	Wed Oct 12 08:49:58 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6149 +0,0 @@
-const uint32_t pram[] =
-{
-0x33fff9,
-0x33eb4a,
-0x33eb4a,
-0x33eb4a,
-0x33eb4a,
-0x23ffff,
-0xea7fc,
-0xea6df,
-0xea194,
-0xea08a,
-0xea3ff,
-0xea27f,
-0xea5ff,
-0xea46b,
-0xc135f,
-0x30ffe9,
-0x35ffec,
-0xc124f,
-0x31ffe9,
-0x10af01,
-0x35f01,
-0x33fff1,
-0xea194,
-0xea076,
-0xea3fd,
-0xea2ff,
-0xea5fd,
-0xea4ff,
-0xc135f,
-0x30ffdb,
-0x35ffde,
-0xc124f,
-0x31ffdb,
-0x10af01,
-0x35f01,
-0x33ffe3,
-0xea190,
-0xea00f,
-0xea3fc,
-0xea2df,
-0xea5fc,
-0xea4cf,
-0xc135f,
-0x30ffcd,
-0x35ffd0,
-0xc124f,
-0x31ffcd,
-0x10af01,
-0x35f01,
-0x33ffd5,
-0x3aecad,
-0xbdfff,
-0x33ffcc,
-0x378ff,
-0x379ff,
-0xe1be3,
-0x34ffc3,
-0xeacf7,
-0xeabff,
-0x33ffb7,
-0xcafbc,
-0xeabff,
-0xccccc,
-0xcdbbb,
-0xcafc0,
-0xec09b,
-0xcafb1,
-0xed195,
-0x18a801,
-0x18a900,
-0x2affff,
-0xeabff,
-0x16a901,
-0x16a801,
-0x23ffff,
-0xeacf7,
-0xeabff,
-0x23ffff,
-0x4af6b,
-0x1bf55,
-0xeacfd,
-0xeabff,
-0x23ffff,
-0x378ff,
-0x379ff,
-0x4ab6b,
-0x3af868,
-0xeacfd,
-0xeabff,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x378ff,
-0x379ff,
-0x4abde,
-0xe2b8f,
-0xe1bdf,
-0x36ff98,
-0x3af7d6,
-0xeaef5,
-0xeadff,
-0xe1cfd,
-0x32ff93,
-0x4ab6b,
-0xeacfe,
-0x3af84d,
-0xeaefd,
-0xeadff,
-0xcafdb,
-0xcafec,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x378ff,
-0x379ff,
-0xff4d,
-0xff4c,
-0xff4b,
-0x4af6b,
-0x32ff85,
-0x3af7d6,
-0x33ff84,
-0x3af7ff,
-0xeabff,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x378ff,
-0x379ff,
-0x3af6f5,
-0xeabff,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x378ff,
-0x379ff,
-0x4ab6b,
-0x3afe6d,
-0xeabff,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x378ff,
-0x379ff,
-0xeabff,
-0xeac6b,
-0x3af4df,
-0xeacfd,
-0xeabff,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x378ff,
-0x379ff,
-0xfe76,
-0xeacff,
-0xeabff,
-0x3af554,
-0xeabff,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x378ff,
-0x379ff,
-0x4af6b,
-0x1bf56,
-0x3afacf,
-0x3afb07,
-0xeacfd,
-0xeabff,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x4af6b,
-0x1bf3d,
-0x4af6a,
-0x1bf3c,
-0x4af6b,
-0x1bfaf,
-0x4af6a,
-0x1bfae,
-0xea1fd,
-0xea07f,
-0x4af6a,
-0x2cf01,
-0xeacfd,
-0xeabff,
-0x23ffff,
-0x378ff,
-0x379ff,
-0xeabff,
-0xeac6b,
-0x3afa00,
-0xeacfd,
-0xeabff,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x378ff,
-0x379ff,
-0xeabff,
-0xeac6b,
-0x3af967,
-0xeacfd,
-0xeabff,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x378ff,
-0x379ff,
-0xeabff,
-0xeac6b,
-0x3afa7d,
-0xeacfd,
-0xeabff,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x378ff,
-0x379ff,
-0xff76,
-0xff4a,
-0xff49,
-0xff48,
-0xeabff,
-0xeac6b,
-0x3af554,
-0xeabff,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x378ff,
-0x379ff,
-0xff76,
-0x4af6b,
-0x1bf4d,
-0x4af6a,
-0x1bf4c,
-0x4af69,
-0x1bf4b,
-0x4af68,
-0x1bf4a,
-0x4af67,
-0x1bf49,
-0x4af66,
-0x1bf48,
-0xeabff,
-0xeac4d,
-0x3af554,
-0xeabff,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x378ff,
-0x379ff,
-0xeabff,
-0xeacff,
-0xead6b,
-0x3af05e,
-0xeabff,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x378ff,
-0x379ff,
-0xeabfd,
-0xeadff,
-0xeacff,
-0x3af05e,
-0xeabff,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x378ff,
-0x379ff,
-0xeabfe,
-0xeadff,
-0xeacff,
-0x3af05e,
-0xeabff,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x378ff,
-0x379ff,
-0x4ab6b,
-0x4ac6a,
-0x3aeda2,
-0xeacfd,
-0xeabff,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x378ff,
-0x379ff,
-0xeabff,
-0xeac6b,
-0x3aed8e,
-0xeacfd,
-0xeabff,
-0x16a901,
-0x16a801,
-0x23ffff,
-0xea0ef,
-0xea1f6,
-0x18ab00,
-0xebbfb,
-0x2cb00,
-0x18ab00,
-0xe2b01,
-0x2cb00,
-0xea0ee,
-0xea1f6,
-0xeafff,
-0x2cf00,
-0xea0ed,
-0xea1f6,
-0xeafff,
-0x2cf00,
-0xea0ec,
-0xea1f6,
-0x18ab00,
-0xe2b0f,
-0xebbfe,
-0x2cb00,
-0xeafff,
-0x1bfef,
-0xeafff,
-0x1bfec,
-0xeafff,
-0x1bfeb,
-0xeafff,
-0x1bfea,
-0xea0df,
-0xea1f6,
-0x18ab00,
-0xebbf7,
-0x2cb00,
-0x23ffff,
-0x378ff,
-0x379ff,
-0x4ab68,
-0xecb01,
-0xe1bfd,
-0x34fea1,
-0x4af68,
-0x36fea1,
-0xeacf7,
-0xeabff,
-0x33fe84,
-0x4af6b,
-0x1bf54,
-0x4af6a,
-0x1bf53,
-0x4af69,
-0x1bf52,
-0x4af68,
-0x1bf51,
-0x4af67,
-0x1bf50,
-0x4af66,
-0x1bf4f,
-0x4af65,
-0x1bf4e,
-0x4af54,
-0xe1f00,
-0x36fe8d,
-0xeacfd,
-0xeabff,
-0x33fe84,
-0x4af53,
-0xe1f00,
-0x32fe90,
-0x4af52,
-0xe1f00,
-0x32fe90,
-0x51,
-0x3af7d6,
-0xeabff,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x378ff,
-0x379ff,
-0x4af6b,
-0x1bf40,
-0x3af081,
-0xeabff,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x4af6b,
-0x1bf41,
-0xeacfd,
-0xeabff,
-0x23ffff,
-0xeacf7,
-0xeabff,
-0x23ffff,
-0xeacf7,
-0xeabff,
-0x23ffff,
-0x374ff,
-0x375ff,
-0x378ff,
-0x379ff,
-0xcafb4,
-0x4af6f,
-0xe2f01,
-0x1bf6f,
-0x3af7ff,
-0xeaef5,
-0xeadff,
-0xe1cfd,
-0x32fe0e,
-0xef4fe,
-0xcaffb,
-0xe1bff,
-0x32fe18,
-0xef4fd,
-0xcaffb,
-0xe1bff,
-0x32fe20,
-0xcaf4b,
-0xe2bc3,
-0xe1bff,
-0x32fe4f,
-0xeabfe,
-0x3af73e,
-0xeaefd,
-0xeadff,
-0x33fe0e,
-0xeabff,
-0xeacff,
-0x3af624,
-0xef4fb,
-0xcaffb,
-0xe1bff,
-0x32fe22,
-0xcaf4b,
-0xe2be7,
-0xe1bff,
-0x32fe41,
-0xeabff,
-0x3af6c7,
-0x33fe52,
-0xeabff,
-0x3af4be,
-0xef4ef,
-0xcaff5,
-0xe15ff,
-0x32fe25,
-0xe15ff,
-0x32fe28,
-0xef4f7,
-0xcaffb,
-0xe1bff,
-0x32fe33,
-0x3af486,
-0x33fe44,
-0xea029,
-0xea1f7,
-0x18ab00,
-0xe2bf0,
-0xebb8f,
-0x2cb00,
-0xeabfe,
-0x3afd7b,
-0xeabfd,
-0x3afd7b,
-0x33fe35,
-0xeabfe,
-0x3afd0b,
-0x33fe39,
-0xeabff,
-0x3afd0b,
-0x33fe3b,
-0x3afc3e,
-0x33fe48,
-0xea0e2,
-0xea1f6,
-0x18ab00,
-0xe2b3f,
-0x2cb00,
-0xeabfd,
-0x3afe07,
-0x33fe58,
-0xea0e1,
-0xea1f6,
-0xeafbf,
-0x2cf00,
-0xeacd7,
-0xeabff,
-0x3aecbb,
-0xeabfe,
-0x3afe07,
-0x33fe5c,
-0xcafdb,
-0xcafec,
-0x16a901,
-0x16a801,
-0x16a501,
-0x16a401,
-0x23ffff,
-0x374ff,
-0x375ff,
-0x378ff,
-0x379ff,
-0x16affc,
-0x2fb00,
-0xe1bfe,
-0x36fda3,
-0xea038,
-0xea1fa,
-0xeaf7e,
-0x2cf00,
-0xea039,
-0xea1fa,
-0xeafb0,
-0x2cf00,
-0xea0b3,
-0xea1f6,
-0xeafff,
-0x2cf00,
-0xeafeb,
-0x2cf01,
-0xeafff,
-0x2ff01,
-0xeaf38,
-0x2ff02,
-0xea436,
-0xea5ff,
-0xea2e2,
-0xea3f6,
-0xeafbf,
-0x2ff03,
-0x4abf6,
-0xebbef,
-0x1bbf6,
-0x4abf4,
-0xebbdf,
-0x1bbf4,
-0xeaffd,
-0x1bfe1,
-0x4abe4,
-0xebb9f,
-0x1bbe4,
-0xea9bf,
-0xea8fa,
-0xd6f99,
-0x1aab00,
-0xccf9b,
-0x2db00,
-0xea03a,
-0xea1fa,
-0x1eaf03,
-0x2cf00,
-0xe2a03,
-0xbdfff,
-0x4abe5,
-0xe2bbf,
-0xe1bff,
-0x32fdb0,
-0xeafdf,
-0x1bfe5,
-0xea037,
-0xea1fa,
-0x18ab00,
-0xcafbd,
-0xeaeff,
-0x18ab01,
-0xcafbc,
-0xeabff,
-0xcbbdb,
-0xcbcec,
-0x1e1b01,
-0x32fdbd,
-0x1e1c02,
-0x31fdb5,
-0x1aab00,
-0xc49bb,
-0x2db00,
-0xdbf88,
-0xe08ff,
-0x31fdda,
-0x33fd8a,
-0xc1b5f,
-0x32fdb2,
-0xc1c4f,
-0x31fdb9,
-0x33fd8a,
-0xeafbf,
-0x1bfe5,
-0x1eaf00,
-0xe1ffe,
-0x36fda7,
-0x4af6f,
-0xebffd,
-0x1bf6f,
-0x33fd8a,
-0x4af6f,
-0xebffe,
-0x1bf6f,
-0x33fd8a,
-0xea038,
-0xea1fa,
-0xeaffd,
-0x2cf00,
-0xea039,
-0xea1fa,
-0xeafff,
-0x2cf00,
-0xea0b3,
-0xea1f6,
-0xeafff,
-0x2cf00,
-0xeaf9b,
-0x2cf01,
-0xeaffe,
-0x2ff01,
-0xeaf0e,
-0x2ff02,
-0xea408,
-0xea5fe,
-0xea2e1,
-0xea3f6,
-0xeafab,
-0x2ff03,
-0x33fde7,
-0x4abf4,
-0xe2b20,
-0x1bbf4,
-0x4abf6,
-0xe2b10,
-0x1bbf6,
-0x4abe4,
-0xe2b60,
-0x1bbe4,
-0x16af04,
-0x16a901,
-0x16a801,
-0x16a501,
-0x16a401,
-0x23ffff,
-0x375ff,
-0x378ff,
-0x379ff,
-0xcafbc,
-0xea038,
-0xea1fa,
-0xeaffd,
-0x2cf00,
-0xea039,
-0xea1fa,
-0xeafff,
-0x2cf00,
-0xea0b3,
-0xea1f6,
-0xeafff,
-0x2cf00,
-0xeafa5,
-0x2cf01,
-0xe1bfe,
-0x36fd21,
-0xea22d,
-0xea3f7,
-0xea583,
-0xeafff,
-0x2df00,
-0xea02f,
-0xea1f7,
-0x18ab00,
-0xcbfcb,
-0x2cb00,
-0x4abf6,
-0xebbef,
-0x1bbf6,
-0x4abf4,
-0xebbdf,
-0x1bbf4,
-0xeaffd,
-0x1bfe1,
-0x4abe4,
-0xebb9f,
-0x1bbe4,
-0xea9bf,
-0xea8fa,
-0xd6f99,
-0x1aab00,
-0xccf9b,
-0x2db00,
-0xea03a,
-0xea1fa,
-0x2c500,
-0xe2a03,
-0xbdfff,
-0x4abe5,
-0xe2bbf,
-0xe1bff,
-0x32fd27,
-0xeafdf,
-0x1bfe5,
-0xea037,
-0xea1fa,
-0x18ab00,
-0xcafbd,
-0xeaeff,
-0x18ab01,
-0xcafbc,
-0xeabff,
-0xcbbdb,
-0xcbcec,
-0xe1bff,
-0x32fd34,
-0xe1c3d,
-0x34fd2c,
-0x1aab00,
-0xc49bb,
-0x2db00,
-0xdbf88,
-0xe08ff,
-0x31fd50,
-0x33fd1d,
-0xe1bff,
-0x32fd29,
-0xe1c41,
-0x34fd30,
-0x33fd1d,
-0xeafbf,
-0x1bfe5,
-0x4af6f,
-0xebff7,
-0x1bf6f,
-0x33fd1d,
-0xea22e,
-0xea3f7,
-0xea597,
-0x33fd64,
-0x4abf4,
-0xe2b20,
-0x1bbf4,
-0x4abf6,
-0xe2b10,
-0x1bbf6,
-0x4abe4,
-0xe2b60,
-0x1bbe4,
-0xea02f,
-0xea1f7,
-0x18ab00,
-0xe2b03,
-0x2cb00,
-0x16a901,
-0x16a801,
-0x16a501,
-0x23ffff,
-0x378ff,
-0x379ff,
-0xea029,
-0xea1f7,
-0x18ac00,
-0xe2cf0,
-0x2cc00,
-0xe1bff,
-0x32fcbf,
-0xea230,
-0xea3f7,
-0x18ab00,
-0xebb7f,
-0x2cb00,
-0xea9a0,
-0xeafff,
-0x2df00,
-0xea0b3,
-0xea1f6,
-0xeafff,
-0x2cf00,
-0xeaf9b,
-0x2cf01,
-0xeafee,
-0x1bfe1,
-0xea02c,
-0xea1f7,
-0x18ab00,
-0xebbfa,
-0x2cb00,
-0xeacfa,
-0x1aa800,
-0xcafcb,
-0xeaefe,
-0xdbfbb,
-0x30fce4,
-0xdafee,
-0xdbfbb,
-0x34fce7,
-0x1aab00,
-0xccbeb,
-0x2db00,
-0xea06c,
-0xea1f7,
-0x18ab00,
-0xebbcf,
-0x2cb00,
-0x4abe4,
-0xebb9f,
-0x1bbe4,
-0xe2a03,
-0xbdfff,
-0x4abe5,
-0xe2bbf,
-0xe1bff,
-0x36fcce,
-0xeafbf,
-0x1bfe5,
-0x4af6f,
-0xebff7,
-0x1bf6f,
-0xeafdf,
-0x1bfe5,
-0xea06b,
-0xea1f7,
-0x18ab00,
-0xc1b9f,
-0x36fcb8,
-0x18ab00,
-0xc1b9f,
-0x31fcc3,
-0x2d800,
-0xdbfcc,
-0xe0cff,
-0x31fcec,
-0x33fcb8,
-0xea231,
-0xea3f7,
-0x18ab00,
-0xebb6f,
-0x2cb00,
-0xea942,
-0x33fcfc,
-0xea02c,
-0xea1f7,
-0x18ab00,
-0xe2b1f,
-0x2cb00,
-0x4abe4,
-0xe2b20,
-0x1bbe4,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x374ff,
-0x375ff,
-0x378ff,
-0x379ff,
-0x16affb,
-0x2fb00,
-0xeafff,
-0x2ff01,
-0xeafff,
-0x2ff02,
-0x2ff03,
-0xe1bff,
-0x36fc4f,
-0xeafff,
-0x1bf92,
-0x1bf91,
-0xeafb8,
-0x1bf94,
-0xeaf1f,
-0x1bf93,
-0xea45f,
-0xea5ef,
-0xea2fa,
-0xe02ff,
-0x34fc53,
-0xd6f55,
-0xd4f44,
-0xcaf4f,
-0x4cf93,
-0x1bf93,
-0xcaf5f,
-0x4df94,
-0x1bf94,
-0xeafff,
-0x1bf91,
-0xeacd7,
-0xeabff,
-0x2f204,
-0x3aecbb,
-0xeadfe,
-0xeacff,
-0x1ea204,
-0xea037,
-0xea1f7,
-0x18ab00,
-0xe2bdf,
-0xe1bff,
-0x36fc55,
-0xd1fcc,
-0xe1cd8,
-0x34fc83,
-0xe1dfe,
-0x36fc5c,
-0x1e1d00,
-0x36fc71,
-0x41493,
-0x1bf93,
-0x4af94,
-0xc7f5f,
-0x1bf94,
-0xe1dff,
-0x32fc67,
-0x1eaf00,
-0x36fc63,
-0xea03a,
-0xea1f7,
-0xeafd5,
-0x2cf00,
-0xeafd7,
-0x2cf00,
-0xdbf22,
-0xe02ff,
-0x31fc96,
-0x33fc46,
-0xea03a,
-0xea1f7,
-0xeaf35,
-0x2cf00,
-0xeaf37,
-0x2cf00,
-0x33fc67,
-0x4af94,
-0x2ff02,
-0x4af93,
-0x2ff03,
-0x1f1f01,
-0x2ff01,
-0x33fc78,
-0xeadff,
-0x33fc7a,
-0x1eaf01,
-0xe1ffb,
-0x30fc8c,
-0x33fc46,
-0xeafff,
-0x1bf93,
-0x1bf92,
-0x1bf91,
-0xeafd9,
-0x1bf94,
-0xea4df,
-0xea5f6,
-0x33fc97,
-0x1eac03,
-0x1eab02,
-0x16af05,
-0x16a901,
-0x16a801,
-0x16a501,
-0x16a401,
-0x23ffff,
-0x378ff,
-0x379ff,
-0x16aff8,
-0x4ae91,
-0x4ad92,
-0x4ac93,
-0x4ab94,
-0x2fb00,
-0x2fc01,
-0x2fd02,
-0x2fe03,
-0xea022,
-0xea1f7,
-0xeafff,
-0x2cf00,
-0xeabff,
-0x3afcad,
-0x1bb59,
-0x1bc58,
-0xeabfe,
-0x3afcad,
-0x1bb5b,
-0x1bc5a,
-0xea2cf,
-0xea3fc,
-0x4af59,
-0x2df00,
-0x4af58,
-0x2df01,
-0xea0cd,
-0xea1fc,
-0x2cb00,
-0x2cc01,
-0x1aaf00,
-0x1abf01,
-0x36fc18,
-0xcbcbf,
-0x32fc15,
-0x4af6f,
-0xebffb,
-0x1bf6f,
-0x4ac58,
-0x4ab59,
-0xccccc,
-0xcdbbb,
-0x4ae5a,
-0x4ad5b,
-0xc1dbf,
-0x32fc0c,
-0xc1ecf,
-0x31fc08,
-0x4af6f,
-0xebffb,
-0x1bf6f,
-0x4a058,
-0x4a159,
-0xea8ff,
-0xea9ff,
-0xea2cb,
-0xea3fc,
-0x1aae00,
-0xeadff,
-0xcaffc,
-0xcaffb,
-0x37eff,
-0x37dff,
-0x37cff,
-0x37bff,
-0x370ff,
-0x371ff,
-0x378ff,
-0x379ff,
-0x39eb10,
-0x16af08,
-0xcafe0,
-0xcafd1,
-0xcafc8,
-0xcafb9,
-0x4af5a,
-0x2ff07,
-0x4af5b,
-0x2ff06,
-0xeafff,
-0x2ff04,
-0x2ff05,
-0x1aac00,
-0xeabff,
-0xd9fcc,
-0xe5bfe,
-0xcafce,
-0xcafbd,
-0xcafdc,
-0xe6cfe,
-0xcafcb,
-0x37eff,
-0x37dff,
-0x37cff,
-0x37bff,
-0x1eaf0b,
-0x37fff,
-0x1eaf0b,
-0x37fff,
-0x1eaf0b,
-0x37fff,
-0x1eaf0b,
-0x37fff,
-0x39eb10,
-0x16af08,
-0xd6fbb,
-0xd4fcc,
-0xd4fdd,
-0xd4fee,
-0xcce00,
-0xcdd11,
-0xcdc88,
-0xcdb99,
-0xcaf8b,
-0xcaf1c,
-0xcaf0d,
-0xeaeff,
-0xecb25,
-0x1bb3f,
-0x1bc3e,
-0xcaf7b,
-0xcaf6c,
-0x3afa7d,
-0x16af08,
-0x16a901,
-0x16a801,
-0x23ffff,
-0xcafc0,
-0xcafb1,
-0x18af00,
-0x1bf8c,
-0x18af01,
-0x1bf8b,
-0x18af02,
-0x1bf8a,
-0x23ffff,
-0x378ff,
-0x379ff,
-0xea3ff,
-0xea257,
-0xea1fd,
-0xea0ff,
-0xeacff,
-0xeabff,
-0x12af01,
-0x34f01,
-0xd1fcc,
-0xd5fbb,
-0xe1bff,
-0x32fba4,
-0xe1ce0,
-0x34fbab,
-0x3afb8b,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x378ff,
-0x379ff,
-0xea3ff,
-0xea257,
-0xea1fd,
-0xea0ff,
-0xeacff,
-0xeabff,
-0x10af01,
-0x35f01,
-0xd1fcc,
-0xd5fbb,
-0xe1bff,
-0x32fb90,
-0xe1ce0,
-0x34fb97,
-0x3afb49,
-0x16a901,
-0x16a801,
-0x23ffff,
-0xea3fd,
-0xea2df,
-0xeadff,
-0xcafdc,
-0xeabff,
-0xccccc,
-0xcdbbb,
-0xcafc0,
-0xec061,
-0xcafb1,
-0xed195,
-0x18af00,
-0x37fff,
-0x18a001,
-0x16a101,
-0x18af00,
-0x35f01,
-0xd1fdd,
-0xe1dd5,
-0x34fb88,
-0xea3fd,
-0xea2b4,
-0x4af56,
-0xe1ffe,
-0x36fb5c,
-0x4af56,
-0xe1ffb,
-0x36fb5c,
-0xeadff,
-0xcafdc,
-0xeabff,
-0xccccc,
-0xcdbbb,
-0xcafc0,
-0xec00b,
-0xcafb1,
-0xed195,
-0x18af00,
-0x37fff,
-0x18a001,
-0x16a101,
-0x18af00,
-0x35f01,
-0xd1fdd,
-0xe1de5,
-0x34fb6e,
-0x33fb4a,
-0xeadff,
-0xcafdc,
-0xeabff,
-0xccccc,
-0xcdbbb,
-0xcafc0,
-0xec0d5,
-0xcafb1,
-0xed194,
-0x18af00,
-0x37fff,
-0x18a001,
-0x16a101,
-0x18af00,
-0x35f01,
-0xd1fdd,
-0xe1deb,
-0x34fb5b,
-0x23ffff,
-0xea3fd,
-0xea2df,
-0xeadff,
-0xcafdc,
-0xeabff,
-0xccccc,
-0xcdbbb,
-0xcafc0,
-0xec061,
-0xcafb1,
-0xed195,
-0x18af00,
-0x37fff,
-0x18a001,
-0x16a101,
-0x12af01,
-0x2cf00,
-0xd1fdd,
-0xe1dd5,
-0x34fb46,
-0xea3fd,
-0xea2b4,
-0x4af56,
-0xe1ffe,
-0x36fb1a,
-0x4af56,
-0xe1ffb,
-0x36fb1a,
-0xeadff,
-0xcafdc,
-0xeabff,
-0xccccc,
-0xcdbbb,
-0xcafc0,
-0xec00b,
-0xcafb1,
-0xed195,
-0x18af00,
-0x37fff,
-0x18a001,
-0x16a101,
-0x12af01,
-0x2cf00,
-0xd1fdd,
-0xe1de5,
-0x34fb2c,
-0x33fb08,
-0xeadff,
-0xcafdc,
-0xeabff,
-0xccccc,
-0xcdbbb,
-0xcafc0,
-0xec0d5,
-0xcafb1,
-0xed194,
-0x18af00,
-0x37fff,
-0x18a001,
-0x16a101,
-0x12af01,
-0x2cf00,
-0xd1fdd,
-0xe1deb,
-0x34fb19,
-0x23ffff,
-0x4af37,
-0x36fafa,
-0xea0b6,
-0xea1f6,
-0xeafff,
-0x2cf00,
-0xea0b7,
-0xea1f6,
-0xeaff5,
-0x2cf00,
-0xeafff,
-0x1bfe0,
-0x33faf0,
-0xea0b6,
-0xea1f6,
-0xeaff3,
-0x2cf00,
-0xea0b7,
-0xea1f6,
-0xeaff2,
-0x2cf00,
-0xeaff1,
-0x1bfe0,
-0xeafe3,
-0x1bfe5,
-0x23ffff,
-0x4af37,
-0x36fadc,
-0xeadfd,
-0xeae7c,
-0xea04f,
-0xea1fa,
-0xcafdc,
-0xeabff,
-0x2cc00,
-0x2ce01,
-0xea04d,
-0xea1fa,
-0xeaff7,
-0x2cf00,
-0xeaf42,
-0x2cf01,
-0x33fad0,
-0xea04f,
-0xea1fa,
-0xeaff9,
-0x2cf00,
-0xeaf39,
-0x2cf01,
-0xea04d,
-0xea1fa,
-0xeaff7,
-0x2cf00,
-0xeaf41,
-0x2cf01,
-0x23ffff,
-0x378ff,
-0x379ff,
-0x4af56,
-0xe1ffe,
-0x36faa4,
-0x4af56,
-0xe1ffb,
-0x36faa4,
-0xff37,
-0x4abab,
-0xe2b08,
-0x1bbab,
-0xea058,
-0xea1f7,
-0xeafff,
-0x2cf00,
-0x4abcf,
-0xe2b0c,
-0x1bbcf,
-0x4af56,
-0x32fab2,
-0x4abcf,
-0xebbfb,
-0x1bbcf,
-0xeaf3f,
-0x1bfce,
-0xeafbf,
-0x1bfcc,
-0x33fa81,
-0x4af56,
-0xe1ffd,
-0x36faa7,
-0x4abcf,
-0xebbf7,
-0x1bbcf,
-0xeaf1f,
-0x1bfce,
-0xeafdf,
-0x1bfcc,
-0x33fa81,
-0x4abcf,
-0xe2b0c,
-0x33fab8,
-0xfe37,
-0x4abab,
-0xebbf7,
-0x1bbab,
-0x4abcf,
-0xebbf3,
-0x1bbcf,
-0xea058,
-0xea1f7,
-0xeaffd,
-0x2cf00,
-0xea2f5,
-0xea3f8,
-0xeaf63,
-0x2df01,
-0xeaf9e,
-0x2df00,
-0x4af56,
-0xe1ffe,
-0x36fa88,
-0xea0e1,
-0xea1f8,
-0x18ab00,
-0xebbf3,
-0x2cb00,
-0xeafcf,
-0x2df02,
-0x33fa81,
-0xea0e1,
-0xea1f8,
-0x18ab00,
-0xe2b0c,
-0x2cb00,
-0xeafbb,
-0x2df02,
-0x3afaed,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x374ff,
-0x375ff,
-0x379ff,
-0x16affe,
-0xcafc4,
-0xcafb5,
-0xea9ff,
-0x4a03e,
-0x4a13f,
-0xec1d9,
-0x2f100,
-0x2f001,
-0x1cae01,
-0x1cad00,
-0xeabff,
-0xcafbc,
-0xcafe2,
-0xcafd3,
-0x1b136,
-0x1b035,
-0xc1d1f,
-0x32fa66,
-0xc1e0f,
-0x31fa5e,
-0xd6f11,
-0xd4f00,
-0xd1f99,
-0xc131f,
-0x32fa5f,
-0xc120f,
-0x35fa65,
-0x1b931,
-0x1caf00,
-0x1bf94,
-0x1caf01,
-0x1bf93,
-0x1caf02,
-0x1bf92,
-0x1caf03,
-0x1bf91,
-0x1caf03,
-0x1bf91,
-0xcaf9e,
-0xeadff,
-0xcafef,
-0xeeff7,
-0xcaffc,
-0xcbc9b,
-0xea022,
-0xea1f7,
-0x2cb00,
-0xcafeb,
-0xeaefd,
-0xeadff,
-0xdbfbb,
-0x30fa41,
-0xdafee,
-0xdefdd,
-0xdbfbb,
-0x34fa45,
-0xcaf3b,
-0xcaf2c,
-0x39eb18,
-0xeafff,
-0x37fff,
-0xeaffa,
-0x37fff,
-0x39eaea,
-0x16af02,
-0xe1dff,
-0x32fa35,
-0xe1ef0,
-0x34fa08,
-0xece0f,
-0xdffdd,
-0xea021,
-0xea1f7,
-0x18ab00,
-0xe2bf8,
-0xeeef7,
-0xcaffc,
-0xcbbcb,
-0x2cb00,
-0xe13e6,
-0x32fa27,
-0xe12ff,
-0x30fa0d,
-0xea029,
-0xea1f7,
-0x18ab00,
-0xebbfb,
-0x2cb00,
-0x1ea001,
-0x1ea100,
-0x1cae01,
-0x1cad00,
-0xeabff,
-0xcafbc,
-0xcafe2,
-0xec203,
-0xdffd3,
-0xc131f,
-0x32fa15,
-0xc120f,
-0x31fa05,
-0xd6f11,
-0xd4f00,
-0xc131f,
-0x32fa0f,
-0xc120f,
-0x35fa14,
-0x33fa05,
-0xea029,
-0xea1f7,
-0x18ab00,
-0xe2b04,
-0x33fa22,
-0xeaeff,
-0xeadff,
-0x33fa32,
-0x16af02,
-0x16a901,
-0x16a501,
-0x16a401,
-0x23ffff,
-0x374ff,
-0x375ff,
-0xcafc2,
-0xcafb3,
-0x4af37,
-0x36f9c1,
-0xea0c5,
-0xea1f8,
-0x1aaf00,
-0x2cf00,
-0xea4fb,
-0xea5f8,
-0x1cab00,
-0xe2b80,
-0x2eb00,
-0x1aaf01,
-0xeef7f,
-0xcaffe,
-0x1cab00,
-0xcbbeb,
-0x2eb00,
-0xea0fd,
-0xea1f8,
-0x1aaf02,
-0x2cf00,
-0xea0fa,
-0xea1f8,
-0x18ad00,
-0xe2d04,
-0x1aaf03,
-0xeeffb,
-0xcaffc,
-0xcbdcd,
-0x2cd00,
-0x1aaf04,
-0xe1ffe,
-0x36f9ce,
-0x1cab00,
-0xe2b40,
-0x2eb00,
-0xea0d6,
-0xea1f8,
-0x18ab00,
-0xebb7f,
-0x2cb00,
-0xea0bb,
-0xea1f8,
-0x18ab00,
-0xe2b10,
-0x33f96b,
-0x1cab00,
-0xebbbf,
-0x2eb00,
-0xea0d6,
-0xea1f8,
-0x18ab00,
-0xebb7f,
-0x2cb00,
-0xea0bb,
-0xea1f8,
-0x18ab00,
-0xebbef,
-0x33f96b,
-0x1aaf01,
-0xeeff7,
-0xcaffc,
-0x1abc00,
-0xcafcb,
-0xea04b,
-0xea1f9,
-0x2cb00,
-0xea04a,
-0xea1f9,
-0x18ad00,
-0xe2d38,
-0x1aaf02,
-0xeeff7,
-0xcaffc,
-0xcbdcd,
-0x2cd00,
-0xea033,
-0xea1f9,
-0x1aaf03,
-0x2cf00,
-0x1aaf02,
-0xe1ffc,
-0x30f970,
-0x1aae02,
-0xeadff,
-0xeeef7,
-0xcaffe,
-0xecef7,
-0xcafeb,
-0xea055,
-0xea1f9,
-0x2cb00,
-0x1aad01,
-0xe2dfc,
-0xe1dff,
-0x32f97a,
-0xea056,
-0xea1f9,
-0xeaff5,
-0x2cf00,
-0xea04c,
-0xea1f9,
-0x18ad00,
-0xe2d40,
-0x1aaf04,
-0xeefbf,
-0xcaffc,
-0xcbdcd,
-0x2cd00,
-0x1aaf03,
-0x32f97f,
-0xea047,
-0xea1f9,
-0x1aaf05,
-0x2cf00,
-0xea048,
-0xea1f9,
-0x18ab00,
-0xe2b37,
-0x1abb06,
-0x1aaf07,
-0xeefef,
-0xcaffe,
-0xcbbeb,
-0x33f96b,
-0x1b1b05,
-0xea047,
-0xea1f9,
-0x2cb00,
-0x33f989,
-0xcafde,
-0xeadff,
-0xeeef7,
-0xcaffe,
-0xecef7,
-0xcafeb,
-0xea056,
-0xea1f9,
-0x2cb00,
-0x33f998,
-0xea055,
-0xea1f9,
-0xeafdf,
-0x2cf00,
-0x33f9a0,
-0x2cb00,
-0x16a501,
-0x16a401,
-0x23ffff,
-0x374ff,
-0x375ff,
-0xcafc2,
-0xcafb3,
-0x4af37,
-0xe1ffe,
-0x36f924,
-0xea05e,
-0xea1f9,
-0x1aaf00,
-0x2cf00,
-0x1aaf01,
-0x2cf01,
-0x1aaf02,
-0x2cf02,
-0xea058,
-0xea1f9,
-0x18ab00,
-0xe2b18,
-0x1abb03,
-0x2cb00,
-0x4af56,
-0xe1ffd,
-0x36f86b,
-0x1aaf04,
-0x1bfa8,
-0xea05b,
-0xea1f9,
-0x1aaf05,
-0x2cf00,
-0x1aaf06,
-0x2cf01,
-0x1aaf07,
-0x2cf02,
-0x4af56,
-0x32f86b,
-0x1aaf04,
-0xe1ff7,
-0x36f92b,
-0x1aaf04,
-0xe1fef,
-0x36f92b,
-0x1aaf04,
-0xe1fe7,
-0x36f92b,
-0xeaf03,
-0x1bf90,
-0xeafcf,
-0x1bfa9,
-0x1aaf04,
-0xe1ff6,
-0x36f92f,
-0x4abaa,
-0xe2b01,
-0x1bbaa,
-0x33f86b,
-0x4abaa,
-0xe2b06,
-0xebbfe,
-0x33f931,
-0xeafff,
-0x1bf90,
-0xeafff,
-0x1bfa9,
-0x4abaa,
-0xebbf8,
-0x33f931,
-0xea0fc,
-0xea1f8,
-0x1aaf00,
-0x2cf00,
-0xea4de,
-0xea5f8,
-0x1cab00,
-0xe2b1c,
-0x2eb00,
-0x1aaf00,
-0xe1ff9,
-0x30f87f,
-0xea0fa,
-0xea1f8,
-0x18ab00,
-0xebbdf,
-0x2cb00,
-0x1cab00,
-0xebbeb,
-0x2eb00,
-0x1aaf00,
-0xe1ff7,
-0x30f884,
-0xea0df,
-0xea1f8,
-0xeafaa,
-0x2cf00,
-0x1aaf00,
-0xe1ff5,
-0x34f889,
-0xea0fb,
-0xea1f8,
-0x18ab00,
-0xebbf7,
-0x2cb00,
-0x1aaf01,
-0xe1ff5,
-0x30f86b,
-0x1aac01,
-0xeabff,
-0xcafc0,
-0xec0ab,
-0xcafb1,
-0xed194,
-0x18af00,
-0x1bfa8,
-0xea0fc,
-0xea1f8,
-0x18ad00,
-0xe2df0,
-0x1aaf01,
-0xeefef,
-0xcaffc,
-0xcbdcd,
-0x2cd00,
-0x1aac01,
-0xeabff,
-0xccccc,
-0xcdbbb,
-0xcafc0,
-0xec0a0,
-0xcafb1,
-0xed194,
-0x18ae01,
-0x18ad00,
-0x1aaf01,
-0xe1ff8,
-0x30f892,
-0xea05b,
-0xea1f9,
-0xcafdc,
-0xeabff,
-0x2cc00,
-0x2ce01,
-0xeafff,
-0x2cf02,
-0x1aaf01,
-0xe1ff9,
-0x36f89a,
-0x4abaa,
-0xe2b06,
-0xebbfe,
-0x1bbaa,
-0xeaf03,
-0x1bf90,
-0xeafcf,
-0x1bfa9,
-0xea0fa,
-0xea1f8,
-0x18ab00,
-0xebbf7,
-0x2cb00,
-0xea0cc,
-0xea1f8,
-0x18ab00,
-0xe2bc0,
-0x2cb00,
-0x1aaf01,
-0xe1ffb,
-0x30f8bd,
-0x18ab00,
-0xebbbf,
-0x2cb00,
-0xea0c0,
-0xea1f8,
-0x18ab00,
-0xe2b07,
-0x2cb00,
-0xea4be,
-0xea5f8,
-0x1cab00,
-0xe2b07,
-0x2eb00,
-0x1aab01,
-0xecb03,
-0xe1bfd,
-0x30f8a0,
-0x18ab00,
-0xebbf9,
-0x2cb00,
-0x1cab00,
-0xebbfc,
-0x2eb00,
-0xea0fb,
-0xea1f8,
-0x18ab00,
-0xe2b07,
-0x2cb00,
-0x18ab00,
-0x1abb02,
-0x2cb00,
-0x33f86b,
-0x18ab00,
-0xebbfb,
-0x2cb00,
-0x1cab00,
-0xebbfd,
-0x33f8aa,
-0x4abaa,
-0xebbf8,
-0x1bbaa,
-0xeafff,
-0x1bf90,
-0xeafff,
-0x1bfa9,
-0x33f8cd,
-0xea05b,
-0xea1f9,
-0xeafff,
-0x2cf00,
-0xcafdc,
-0xeabff,
-0x2cc01,
-0x2ce02,
-0x33f8d8,
-0xea0fb,
-0xea1f8,
-0x18ab00,
-0xe2b18,
-0x33f902,
-0xea0df,
-0xea1f8,
-0xeafaf,
-0x2cf00,
-0x33f909,
-0xea0fa,
-0xea1f8,
-0x18ab00,
-0xe2b20,
-0x2cb00,
-0x1aaf00,
-0xe1ff8,
-0x36f86e,
-0x1aaf00,
-0xe1ff5,
-0x30f871,
-0x1cab00,
-0xebbf3,
-0x33f911,
-0x1cab00,
-0xebbf7,
-0x33f911,
-0x1cab00,
-0xebbef,
-0x33f911,
-0x16a501,
-0x16a401,
-0x23ffff,
-0xcafbc,
-0x32f85f,
-0x4ab8e,
-0xe2b08,
-0x1bb8e,
-0x4ab8f,
-0xe2b08,
-0x1bb8f,
-0x33f853,
-0x4ab8f,
-0xebbf7,
-0x1bb8f,
-0xe1cfe,
-0x36f856,
-0x4ab8e,
-0xebbf7,
-0x1bb8e,
-0x33f853,
-0x4ab8e,
-0xe2b08,
-0x33f858,
-0x4ab8e,
-0xebbfd,
-0x1bb8e,
-0xe2a03,
-0xbdfff,
-0x23ffff,
-0x375ff,
-0x378ff,
-0x379ff,
-0xcafb5,
-0x1bc57,
-0x4ab83,
-0xe2b20,
-0x1bb83,
-0xef5fe,
-0xcaffb,
-0xe1bff,
-0x36f816,
-0xe1cfe,
-0x36f826,
-0xeacc3,
-0xeabff,
-0x3aecbb,
-0xef5fd,
-0xcaffb,
-0xe1bff,
-0x36f829,
-0x4ab8e,
-0xebbfd,
-0x1bb8e,
-0xef5fb,
-0xcaffb,
-0xe1bff,
-0x32f82d,
-0x4ab8f,
-0xe2b01,
-0xebbcf,
-0x33f810,
-0x3afbb3,
-0x4ab8f,
-0xebbce,
-0x33f810,
-0x4ab8e,
-0xebbfe,
-0x33f836,
-0xeafff,
-0x1bf8d,
-0x4abe3,
-0xebbfd,
-0x1bbe3,
-0xeacc3,
-0xeabff,
-0x3aecbb,
-0xeaffe,
-0x1bf8d,
-0x4abe3,
-0xe2b02,
-0x1bbe3,
-0xeaffd,
-0x1bfe5,
-0x33f83f,
-0xea0e1,
-0xea1f6,
-0x18ab00,
-0xe2b40,
-0x2cb00,
-0x33f83c,
-0x1bb8f,
-0xea0e5,
-0xea1f6,
-0x18ab00,
-0xebbbf,
-0x2cb00,
-0xea0ef,
-0xea1f6,
-0x18ab00,
-0xe2b05,
-0x2cb00,
-0xe2a03,
-0xbdfff,
-0x16a901,
-0x16a801,
-0x16a501,
-0x23ffff,
-0x378ff,
-0x379ff,
-0x4abde,
-0xe2f8f,
-0xcaffc,
-0xe1cdf,
-0x36f7dd,
-0xeafff,
-0x1bf8d,
-0x4abe3,
-0xebbfd,
-0x1bbe3,
-0xeaffd,
-0x1bfe5,
-0xe1caf,
-0x36f7df,
-0xe1c9f,
-0x36f7e1,
-0xe1cbf,
-0x36f7e4,
-0xeaefd,
-0xeadff,
-0xe1ccf,
-0x36f7db,
-0xeaef5,
-0xeadff,
-0x33f7db,
-0xeabfe,
-0x3af6c7,
-0x33f7eb,
-0x3aee02,
-0x33f7ed,
-0x3af3be,
-0x33f7ed,
-0x3af7ac,
-0x33f7eb,
-0xcafdb,
-0xcafec,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x378ff,
-0x379ff,
-0x4abde,
-0xe2f8f,
-0xcaffc,
-0xeafff,
-0x1bf8d,
-0x4abe3,
-0xebbfd,
-0x1bbe3,
-0xeaffd,
-0x1bfe5,
-0xe1caf,
-0x36f7b3,
-0xe1c9f,
-0x36f7b5,
-0xe1cbf,
-0x36f7b8,
-0xe1ccf,
-0x36f7bb,
-0xeaefd,
-0xeadff,
-0xe1cdf,
-0x36f7b1,
-0xeaef5,
-0xeadff,
-0x33f7b1,
-0xeabfe,
-0x3af73e,
-0x33f7c2,
-0xeabff,
-0x3af6c7,
-0x33f7c2,
-0x3aee02,
-0x33f7c6,
-0x3af3be,
-0x33f7c6,
-0xcafdb,
-0xcafec,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x374ff,
-0x375ff,
-0x378ff,
-0x379ff,
-0xea0ee,
-0xea1f6,
-0xeafed,
-0x2cf00,
-0xea0ed,
-0xea1f6,
-0xeafed,
-0x2cf00,
-0xea0ef,
-0xea1f6,
-0x18ab00,
-0xe2b01,
-0xebbe7,
-0x2cb00,
-0x4af55,
-0x32f755,
-0xea035,
-0xea1fa,
-0x18ab00,
-0xe2b7f,
-0xe1bff,
-0x32f774,
-0xea0b3,
-0xea1f6,
-0xeaffc,
-0x2cf00,
-0xeaf8f,
-0x2cf01,
-0xeafef,
-0x1bfe1,
-0x4abe4,
-0xebb9f,
-0x1bbe4,
-0xe2a03,
-0xbdfff,
-0x4abe4,
-0xe2b20,
-0x1bbe4,
-0x4abe5,
-0xe2bbf,
-0xe1bff,
-0x36f776,
-0xeafbf,
-0x1bfe5,
-0x4af6f,
-0xebfdf,
-0x1bf6f,
-0xeacdf,
-0xeabff,
-0x33f743,
-0xeafdf,
-0x1bfe5,
-0x4abf7,
-0xebbfe,
-0x1bbf7,
-0xea035,
-0xea1fa,
-0x18ab00,
-0xe2b7f,
-0xe1bff,
-0x32f763,
-0xeacff,
-0x4abf7,
-0xe2bef,
-0xe1bff,
-0x32f763,
-0xd1fcc,
-0xe1c06,
-0x34f76a,
-0xea0b1,
-0xea1f6,
-0xeaff0,
-0x2cf00,
-0x4ab83,
-0xebbfd,
-0x1bb83,
-0x4abde,
-0xe2bf0,
-0xebbcf,
-0x1bbde,
-0xeaccf,
-0xeabff,
-0x33f743,
-0xea4e8,
-0xea5f6,
-0x1cab00,
-0xebbf6,
-0x2eb00,
-0xeacf5,
-0xeabff,
-0x3aecbb,
-0x1cab00,
-0xebbfb,
-0x2eb00,
-0xeacfa,
-0xeabff,
-0x3aecbb,
-0x1cab00,
-0xebbfd,
-0x2eb00,
-0x33f798,
-0x16a901,
-0x16a801,
-0x16a501,
-0x16a401,
-0x23ffff,
-0x375ff,
-0x378ff,
-0x379ff,
-0xcafb5,
-0xe1bfe,
-0x36f708,
-0x4ab83,
-0xe2b02,
-0x1bb83,
-0x4abf7,
-0xe2b01,
-0x1bbf7,
-0xea035,
-0xea1fa,
-0x18ab00,
-0xe2b7f,
-0xe1bff,
-0x32f724,
-0xeacff,
-0x4abf7,
-0xe2bef,
-0xe1bff,
-0x36f724,
-0xd1fcc,
-0xe1c06,
-0x34f72b,
-0xea0b1,
-0xea1f6,
-0xeaff3,
-0x2cf00,
-0xea0ef,
-0xea1f6,
-0x18ab00,
-0xe2b18,
-0xebbfe,
-0x2cb00,
-0xea0ee,
-0xea1f6,
-0xeaffa,
-0x2cf00,
-0xea0ed,
-0xea1f6,
-0xeaffa,
-0x2cf00,
-0x4af55,
-0x36f6ff,
-0xe15fe,
-0x32f6ff,
-0xea0e8,
-0xea1f6,
-0x18ab00,
-0xe2b0f,
-0x2cb00,
-0x33f6ff,
-0xea0e3,
-0xea1f6,
-0x18ab00,
-0xebbfd,
-0x2cb00,
-0xeaceb,
-0xeabff,
-0x3aecbb,
-0x33f738,
-0x4abde,
-0xe2bf0,
-0xebbdf,
-0x1bbde,
-0xeacdf,
-0xeabff,
-0x16a901,
-0x16a801,
-0x16a501,
-0x23ffff,
-0x378ff,
-0x379ff,
-0x4abde,
-0xe2f8f,
-0xcaffc,
-0xeaefd,
-0xeadff,
-0xe1cbf,
-0x36f6cc,
-0xeafff,
-0x1bf8d,
-0x4abe3,
-0xebbfd,
-0x1bbe3,
-0xeaffd,
-0x1bfe5,
-0xe1caf,
-0x36f6ce,
-0xe1c9f,
-0x36f6d0,
-0xe1cdf,
-0x36f6d2,
-0xe1ccf,
-0x36f6d6,
-0xeaef5,
-0xeadff,
-0xe1cbf,
-0x32f6cc,
-0xeaefd,
-0xeadff,
-0x33f6cc,
-0xeabff,
-0xeacff,
-0x3af624,
-0x33f6dd,
-0x3af7ac,
-0x33f6df,
-0x3aee02,
-0x33f6dd,
-0x3af3be,
-0x33f6dd,
-0xcafdb,
-0xcafec,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x375ff,
-0x378ff,
-0x379ff,
-0xcafb5,
-0x36f683,
-0x4af55,
-0x32f696,
-0xea025,
-0xea1f7,
-0xeafff,
-0x2cf00,
-0x4abf7,
-0xe2b0a,
-0x1bbf7,
-0xea03d,
-0xea1f7,
-0x18ab00,
-0xe2b80,
-0x2cb00,
-0x4abf3,
-0xe2b01,
-0x1bbf3,
-0x4ab96,
-0xe2b08,
-0x1bb96,
-0x4abf4,
-0xe2b04,
-0x1bbf4,
-0x4abf5,
-0xe2b10,
-0x1bbf5,
-0xea02a,
-0xea1f7,
-0x18ab00,
-0xe2b15,
-0x2cb00,
-0xe15ff,
-0x36f69a,
-0x4abde,
-0xe2bf0,
-0xebbcf,
-0x1bbde,
-0xeaccf,
-0xeabff,
-0x33f674,
-0xeabff,
-0x3af73e,
-0xeabff,
-0x33f674,
-0xea0e3,
-0xea1f6,
-0x18ab00,
-0xebbfd,
-0x2cb00,
-0xeaceb,
-0xeabff,
-0x3aecbb,
-0xea0e8,
-0xea1f6,
-0x18ab00,
-0xebbfc,
-0x2cb00,
-0xea0ea,
-0xea1f6,
-0x18ab00,
-0xe2b20,
-0x2cb00,
-0x33f6c0,
-0xeaceb,
-0xeabff,
-0x3aecbb,
-0xea0e3,
-0xea1f6,
-0x18ab00,
-0xebbfd,
-0x2cb00,
-0x4af55,
-0x36f6c0,
-0xea0e8,
-0xea1f6,
-0x18ab00,
-0xe2b0f,
-0x33f68a,
-0x16a901,
-0x16a801,
-0x16a501,
-0x23ffff,
-0xea029,
-0xea1f7,
-0x18a300,
-0x4abf4,
-0xebbfe,
-0x1bbf4,
-0x18ab00,
-0xebb3f,
-0x2cb00,
-0xea06c,
-0xea1f7,
-0x18ab00,
-0xebbcf,
-0x2cb00,
-0xea0b3,
-0xea1f6,
-0xeafff,
-0x2cf00,
-0xeafeb,
-0x2cf01,
-0xeafee,
-0x1bfe1,
-0x4abe4,
-0xebb9f,
-0x1bbe4,
-0xe2a03,
-0xbdfff,
-0x4abe4,
-0xe2b20,
-0x1bbe4,
-0x4abe5,
-0xe2bbf,
-0xe1bff,
-0x36f64c,
-0xeafbf,
-0x1bfe5,
-0xeafdf,
-0x1bfe5,
-0xea06b,
-0xea1f7,
-0x18ab00,
-0xcafbe,
-0xeadff,
-0xdafef,
-0x37fff,
-0xdefdb,
-0x16af01,
-0xcaffc,
-0xeeeef,
-0xe6def,
-0xcbefe,
-0xccecc,
-0xcddbb,
-0xcafce,
-0xece6b,
-0xdffbd,
-0xe0dff,
-0x32f635,
-0xe1e00,
-0x34f631,
-0xeaf00,
-0x1bf98,
-0x33f62b,
-0xefd7f,
-0x32f62d,
-0x1be98,
-0x33f62b,
-0xeafff,
-0x1bf98,
-0x4abf4,
-0xe2b01,
-0x1bbf4,
-0xea029,
-0xea1f7,
-0x2c300,
-0x23ffff,
-0x374ff,
-0x375ff,
-0x378ff,
-0x379ff,
-0x16affe,
-0x2fb00,
-0x2fc01,
-0xea02a,
-0xea1f7,
-0x18ab00,
-0xebbea,
-0x2cb00,
-0xea0b6,
-0xea1f6,
-0xeaff6,
-0x2cf00,
-0x4abe3,
-0xebbfb,
-0x1bbe3,
-0x4abe4,
-0xebbfb,
-0x1bbe4,
-0xeaffb,
-0x1bfe5,
-0x4abf7,
-0xebbf5,
-0x1bbf7,
-0x4abf3,
-0xebbfe,
-0x1bbf3,
-0x4abf5,
-0xebbef,
-0x1bbf5,
-0x4abf4,
-0xebbfb,
-0x1bbf4,
-0x1eaf01,
-0x36f58d,
-0x4ab96,
-0xe2b03,
-0xebbf5,
-0x1bb96,
-0xea025,
-0xea1f7,
-0xeafe0,
-0x2cf00,
-0xea41f,
-0xea5f7,
-0x1cab00,
-0xebbf3,
-0x2eb00,
-0xeacfd,
-0xeabff,
-0x3aecbb,
-0x1cab00,
-0xe2b08,
-0x2eb00,
-0xea03d,
-0xea1f7,
-0x18ab00,
-0xebb7f,
-0x2cb00,
-0xeacf7,
-0xeabff,
-0x3aecbb,
-0x1cab00,
-0xe2b04,
-0x2eb00,
-0xeacbf,
-0xeabff,
-0x1eaf01,
-0x32f589,
-0xea019,
-0xea1f7,
-0x18ab00,
-0xe2bf7,
-0xe1bff,
-0x32f5d0,
-0x1eac00,
-0xeabff,
-0xe2cfe,
-0xeabff,
-0xcbcbf,
-0x32f58f,
-0xea0b3,
-0xea1f6,
-0xeafff,
-0x2cf00,
-0xeaf7f,
-0x2cf01,
-0x4abe3,
-0xe2b04,
-0x1bbe3,
-0x4abe4,
-0xebbbf,
-0x1bbe4,
-0xe2a03,
-0xbdfff,
-0x4abe4,
-0xe2b44,
-0x1bbe4,
-0xeafbb,
-0x1bfe5,
-0xea037,
-0xea1f7,
-0x18ab00,
-0xe2bdf,
-0xe1bff,
-0x32f5b1,
-0x4af6f,
-0xebfbf,
-0x1bf6f,
-0xeaccf,
-0xeabff,
-0x33f589,
-0x4abe4,
-0xe2b04,
-0x1bbe4,
-0xeaffb,
-0x1bfe5,
-0x4af55,
-0x36f59b,
-0xea025,
-0xea1f7,
-0x18ab00,
-0xebbdf,
-0x2cb00,
-0xea0ea,
-0xea1f6,
-0x18ab00,
-0xebbdf,
-0x2cb00,
-0xea0e8,
-0xea1f6,
-0x18ab00,
-0xe2b03,
-0x2cb00,
-0xea0e3,
-0xea1f6,
-0x18ab00,
-0xe2b02,
-0x2cb00,
-0x4abde,
-0xe2bf0,
-0xebbbf,
-0x1bbde,
-0xeacbf,
-0xeabff,
-0x33f589,
-0x3af670,
-0x33f5d0,
-0x4ab96,
-0xe2b03,
-0xebbf7,
-0x33f5fb,
-0x16af02,
-0x16a901,
-0x16a801,
-0x16a501,
-0x16a401,
-0x23ffff,
-0x378ff,
-0x379ff,
-0xcafc2,
-0xcafb3,
-0xcbcbf,
-0x36f577,
-0x1aaf00,
-0x32f570,
-0x1aaf01,
-0x32f570,
-0x1aaf02,
-0x32f570,
-0xff77,
-0xea05a,
-0xea1f7,
-0x18ab00,
-0xe2b20,
-0x2cb00,
-0x33f557,
-0x1aaf00,
-0xe1f00,
-0x36f563,
-0xfd77,
-0xea05a,
-0xea1f7,
-0x18ab00,
-0xe2b20,
-0x2cb00,
-0xcaf3b,
-0xcaf2c,
-0x3afbbc,
-0x33f557,
-0x1aaf01,
-0xe1f00,
-0x32f56d,
-0x1aaf02,
-0xe1f00,
-0x32f56d,
-0xfe77,
-0xea05a,
-0xea1f7,
-0x18ab00,
-0xebbdf,
-0x33f572,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x375ff,
-0x378ff,
-0x379ff,
-0x4adde,
-0xe2f8f,
-0xcaff5,
-0x3af583,
-0xe15df,
-0x36f531,
-0xe15cf,
-0x36f533,
-0xe15bf,
-0x36f536,
-0xe159f,
-0x36f53e,
-0xeacfd,
-0xeabff,
-0xe15af,
-0x36f52e,
-0xeacf5,
-0xeabff,
-0x33f52e,
-0xeafff,
-0x1bf8d,
-0x4abe3,
-0xebbfd,
-0x1bbe3,
-0x3aee0b,
-0xcafc5,
-0x33f545,
-0xeabfe,
-0x3af408,
-0x33f538,
-0x3af521,
-0x33f538,
-0x3af7ac,
-0xcafc5,
-0x33f54b,
-0x16a901,
-0x16a801,
-0x16a501,
-0x23ffff,
-0x378ff,
-0x379ff,
-0x3af3be,
-0xeabff,
-0x3af6c7,
-0xeabff,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x378ff,
-0x379ff,
-0xeabff,
-0xeacfe,
-0x3af624,
-0xeabfe,
-0x3af4be,
-0xea0b3,
-0xea1f6,
-0xeafff,
-0x2cf00,
-0xeaf7f,
-0x2cf01,
-0x4abe3,
-0xe2b04,
-0x1bbe3,
-0x4abe4,
-0xebbbf,
-0x1bbe4,
-0xe2a03,
-0xbdfff,
-0x4abe4,
-0xe2b44,
-0x1bbe4,
-0xeafbb,
-0x1bfe5,
-0xea037,
-0xea1f7,
-0x18ab00,
-0xe2bdf,
-0xe1bff,
-0x32f4fb,
-0x4af6f,
-0xebfbf,
-0x1bf6f,
-0xeaccf,
-0xeabff,
-0x33f4e2,
-0x4af55,
-0x36f4ea,
-0xea025,
-0xea1f7,
-0x18ab00,
-0xebbdf,
-0x2cb00,
-0xea0ea,
-0xea1f6,
-0x18ab00,
-0xebbdf,
-0x2cb00,
-0xea0e8,
-0xea1f6,
-0x18ab00,
-0xe2b03,
-0x2cb00,
-0xea0e3,
-0xea1f6,
-0x18ab00,
-0xe2b02,
-0x2cb00,
-0xeabff,
-0x3af408,
-0xeabff,
-0x16a901,
-0x16a801,
-0x23ffff,
-0xcafc0,
-0xcafb1,
-0xea2db,
-0xea3f8,
-0x1aad00,
-0xe2de0,
-0x18af00,
-0xeefdf,
-0xcaffc,
-0xcbdcd,
-0x2dd00,
-0x18af01,
-0x1bf3b,
-0x18af02,
-0x1bf3a,
-0x18af03,
-0x1bf39,
-0x18af04,
-0x1bf38,
-0x18af01,
-0xe1ffe,
-0x36f4c4,
-0xea0bb,
-0xea1f8,
-0x18ab00,
-0xe2b20,
-0x33f4c0,
-0xea0bb,
-0xea1f8,
-0x18ab00,
-0xebbdf,
-0x2cb00,
-0x23ffff,
-0x378ff,
-0x379ff,
-0xcafbc,
-0x4af75,
-0x32f489,
-0xea229,
-0xea3f7,
-0x1aab00,
-0xe2f0f,
-0x1bf30,
-0xe1cff,
-0x36f4ad,
-0xea01b,
-0xea1f7,
-0x18ab00,
-0xebbf7,
-0x2cb00,
-0x1aab00,
-0xebb8f,
-0x2db00,
-0xea02a,
-0xea1f7,
-0x18ab00,
-0xebbfd,
-0x2cb00,
-0x4abf4,
-0xebbfe,
-0x1bbf4,
-0xeacfd,
-0xeabff,
-0x3aecbb,
-0xea02f,
-0xea1f7,
-0x18ab00,
-0xebbbf,
-0x2cb00,
-0xeacf5,
-0xeabff,
-0x3aecbb,
-0xea032,
-0xea1f7,
-0x18ab00,
-0xebbf7,
-0x2cb00,
-0x3fffff,
-0x3fffff,
-0x3fffff,
-0x3fffff,
-0x3fffff,
-0x18ab00,
-0xe2b08,
-0x2cb00,
-0xfe75,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x4af75,
-0xe1ffe,
-0x32f46a,
-0xea01b,
-0xea1f7,
-0x18ab00,
-0xe2b08,
-0x2cb00,
-0xea02a,
-0xea1f7,
-0x18ab00,
-0xe2b02,
-0x2cb00,
-0xea029,
-0xea1f7,
-0x18ab00,
-0xe2bf0,
-0x4bb30,
-0x2cb00,
-0xea02f,
-0xea1f7,
-0x18ab00,
-0xe2b40,
-0x2cb00,
-0x4abf4,
-0xe2b01,
-0x1bbf4,
-0xff75,
-0x23ffff,
-0xea01d,
-0xea1f7,
-0x18ab00,
-0xebbfc,
-0x2cb00,
-0x4abf4,
-0xebbad,
-0x1bbf4,
-0xea067,
-0xea1f7,
-0x18ab00,
-0xebbfd,
-0x2cb00,
-0x4abf6,
-0xebbfe,
-0x1bbf6,
-0x4abab,
-0xebbfb,
-0x1bbab,
-0x4abf5,
-0xebbdf,
-0x1bbf5,
-0xea066,
-0xea1f7,
-0x18ab00,
-0xebb7f,
-0x2cb00,
-0xea01a,
-0xea1f7,
-0x18ab00,
-0xebb7f,
-0x2cb00,
-0x23ffff,
-0x23ffff,
-0x4abf6,
-0xebbdd,
-0x1bbf6,
-0xea04c,
-0xea1f9,
-0x18ab00,
-0xebbdf,
-0x2cb00,
-0x18ab00,
-0xebbfe,
-0x2cb00,
-0x4abf4,
-0xebbbf,
-0x1bbf4,
-0xea057,
-0xea1f9,
-0x18ab00,
-0xebbfe,
-0x2cb00,
-0xeaff1,
-0x1bf72,
-0xeafe8,
-0x1bf71,
-0x4abe4,
-0xebbe3,
-0x1bbe4,
-0x23ffff,
-0x4acf5,
-0xebcfd,
-0x1bcf5,
-0xea0fb,
-0xea1f8,
-0x18ac00,
-0xe2c20,
-0x2cc00,
-0xea0fa,
-0xea1f8,
-0x18ac00,
-0xe2c03,
-0x2cc00,
-0xe1bff,
-0x36f418,
-0xeaff1,
-0x1bf72,
-0xeaf05,
-0x1bf71,
-0x33f411,
-0x18ab00,
-0xebbfe,
-0x2cb00,
-0xeaff1,
-0x1bf72,
-0xeaf8b,
-0x1bf71,
-0xea0ff,
-0xea1f8,
-0x18ab00,
-0xebbfe,
-0x2cb00,
-0x4abe4,
-0xebbf7,
-0x1bbe4,
-0x23ffff,
-0x375ff,
-0x378ff,
-0x379ff,
-0xcafb5,
-0x4af56,
-0xe1ffb,
-0x36f3ca,
-0x4af3c,
-0x1bfae,
-0xea1fd,
-0xea07f,
-0x4af3c,
-0x2cf01,
-0x4af3c,
-0x2cf02,
-0x3afb07,
-0xea025,
-0xea1f7,
-0x18ab00,
-0xebbbf,
-0x2cb00,
-0xe15ff,
-0x32f3d1,
-0x4af77,
-0xe1ffe,
-0x36f3d6,
-0xea04c,
-0xea1f9,
-0x18ab00,
-0xe2b80,
-0x2cb00,
-0x3af469,
-0x4af37,
-0x36f3d8,
-0x4ab76,
-0x3af42c,
-0xfe34,
-0x4af77,
-0xe1ffd,
-0x32f3c8,
-0xeaffe,
-0x1bf8d,
-0x4abe3,
-0xe2b02,
-0x1bbe3,
-0xeaffd,
-0x1bfe5,
-0x33f3c8,
-0x3af447,
-0x33f3e4,
-0xea04c,
-0xea1f9,
-0x18ab00,
-0xebb7f,
-0x33f3ea,
-0x4ab96,
-0xe2b03,
-0xebbfd,
-0x1bb96,
-0xeabfe,
-0x3af4be,
-0x33f3f1,
-0x3af670,
-0x33f401,
-0x4abde,
-0xe2bf0,
-0xebbaf,
-0x1bbde,
-0xeacaf,
-0xeabff,
-0x16a901,
-0x16a801,
-0x16a501,
-0x23ffff,
-0x378ff,
-0x379ff,
-0x4abe4,
-0xe2b1c,
-0x1bbe4,
-0xea066,
-0xea1f7,
-0x18ab00,
-0xe2b80,
-0x2cb00,
-0xea067,
-0xea1f7,
-0x18ab00,
-0xe2b02,
-0x2cb00,
-0xea01a,
-0xea1f7,
-0x18ab00,
-0xe2b80,
-0x2cb00,
-0x4af37,
-0x36f390,
-0xea0fb,
-0xea1f8,
-0x18ab00,
-0xebbdf,
-0x2cb00,
-0xea0ff,
-0xea1f8,
-0x18ab00,
-0xe2b01,
-0x2cb00,
-0xea0fa,
-0xea1f8,
-0x18ab00,
-0xebbfd,
-0x2cb00,
-0xea0f8,
-0xea1f8,
-0xeaf00,
-0x2cf00,
-0xeaf00,
-0x2cf01,
-0xeaf00,
-0x2cf02,
-0x33f36b,
-0xea057,
-0xea1f9,
-0x18ab00,
-0xe2b01,
-0x2cb00,
-0xea036,
-0xea1f9,
-0x18ab00,
-0xe2bfc,
-0xe1bff,
-0x36f36b,
-0xea24c,
-0xea3f9,
-0x1aab00,
-0xe2b80,
-0x2db00,
-0xea0b3,
-0xea1f6,
-0xeaffd,
-0x2cf00,
-0xeafe8,
-0x2cf01,
-0xeaff1,
-0x1bfe1,
-0x4abe4,
-0xebb9f,
-0x1bbe4,
-0x1aab00,
-0xebbfd,
-0x2db00,
-0xe2a03,
-0xbdfff,
-0x4abe4,
-0xe2b20,
-0x1bbe4,
-0xeaf9f,
-0x1bfe5,
-0x3fffff,
-0x4abf6,
-0xe2b23,
-0x1bbf6,
-0x4abf5,
-0xe2b22,
-0x1bbf5,
-0x4abf4,
-0xe2b52,
-0x1bbf4,
-0x3af486,
-0xea01d,
-0xea1f7,
-0x18ab00,
-0xe2b03,
-0x2cb00,
-0xea025,
-0xea1f7,
-0x18ab00,
-0xe2b40,
-0x2cb00,
-0xea02a,
-0xea1f7,
-0x18ab00,
-0xe2b02,
-0x2cb00,
-0x4ab96,
-0xe2b03,
-0x1bb96,
-0xeafe3,
-0x1bfe5,
-0x4abde,
-0xe2bf0,
-0xebbbf,
-0x1bbde,
-0xeacbf,
-0xeabff,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x374ff,
-0x378ff,
-0x379ff,
-0xcafb4,
-0x3af3be,
-0xcaf4b,
-0xeacfe,
-0x3aeea9,
-0xeabff,
-0x16a901,
-0x16a801,
-0x16a401,
-0x23ffff,
-0x378ff,
-0x379ff,
-0x3aef09,
-0xea0fb,
-0xea1f8,
-0x18ab00,
-0xe2b20,
-0x2cb00,
-0x4ab96,
-0xe2b03,
-0xebbfd,
-0x1bb96,
-0xea025,
-0xea1f7,
-0x18ab00,
-0xe2b80,
-0x2cb00,
-0xea226,
-0xea3f7,
-0x1aab00,
-0xe2b01,
-0x2db00,
-0x18ab00,
-0xebbbf,
-0x2cb00,
-0xeabfe,
-0x3af4be,
-0x3af469,
-0x4abf4,
-0xe2b08,
-0x1bbf4,
-0x4abcf,
-0xe2b80,
-0x1bbcf,
-0x4abde,
-0xe2bf0,
-0xebbaf,
-0x1bbde,
-0xeacfd,
-0xeabff,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x378ff,
-0x379ff,
-0x4ab96,
-0xe2b03,
-0xebbfe,
-0x1bb96,
-0x3af486,
-0xea01a,
-0xea1f7,
-0x18ab00,
-0xe2b80,
-0x2cb00,
-0xea025,
-0xea1f7,
-0x18ab00,
-0xe2b40,
-0x2cb00,
-0x18ab00,
-0xebb7f,
-0x2cb00,
-0xea026,
-0xea1f7,
-0x18ab00,
-0xebbfe,
-0x2cb00,
-0x4abf4,
-0xe2b52,
-0x1bbf4,
-0x4abf5,
-0xe2b20,
-0x1bbf5,
-0x4abf6,
-0xe2b01,
-0x1bbf6,
-0xea01d,
-0xea1f7,
-0x18ab00,
-0xe2b03,
-0x2cb00,
-0xea067,
-0xea1f7,
-0x18ab00,
-0xe2b02,
-0x2cb00,
-0xea066,
-0xea1f7,
-0x18ab00,
-0xe2b80,
-0x2cb00,
-0xeacf0,
-0xeabff,
-0x3aecbb,
-0x3aefcc,
-0x4abf4,
-0xebbf7,
-0x1bbf4,
-0x4abcf,
-0xebb7f,
-0x1bbcf,
-0x4abde,
-0xe2bf0,
-0xebb9f,
-0x1bbde,
-0xeacfd,
-0xeabff,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x378ff,
-0x379ff,
-0xeafff,
-0x1bf8d,
-0x4abe3,
-0xebbfd,
-0x1bbe3,
-0xeaffd,
-0x1bfe5,
-0xfd6d,
-0xf96e,
-0x3af52a,
-0xff74,
-0x4af48,
-0x32f2b4,
-0x4af49,
-0x32f2b4,
-0x4af4a,
-0x36f2a7,
-0xeabff,
-0xeac4a,
-0x3afbbc,
-0xeaffe,
-0x1bf8d,
-0x4abe3,
-0xe2b02,
-0x1bbe3,
-0xeaffd,
-0x1bfe5,
-0xeabfa,
-0xeacfd,
-0x3af84d,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x378ff,
-0x379ff,
-0x4af6c,
-0xebffd,
-0x1bf6c,
-0xfb6e,
-0x4af77,
-0xe1ffe,
-0x36f28b,
-0x4af51,
-0xe1f00,
-0x36f293,
-0x4af56,
-0xe1ffe,
-0x30f293,
-0x4af74,
-0x36f28e,
-0x3af52a,
-0xff72,
-0xff71,
-0xff74,
-0x33f284,
-0xeabfc,
-0x3af281,
-0x33f284,
-0x4af37,
-0x32f284,
-0xea057,
-0xea1f9,
-0x18ab00,
-0xebbfd,
-0x2cb00,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x375ff,
-0x378ff,
-0x379ff,
-0xcafb5,
-0xfe74,
-0x4af52,
-0x32f26e,
-0x4af53,
-0x32f26e,
-0x4af54,
-0x32f26e,
-0xe1bfc,
-0x36f271,
-0x3aee02,
-0x3aefdb,
-0x33f23d,
-0x3af3be,
-0x3af239,
-0x33f23d,
-0xeabff,
-0xeac54,
-0x3afbbc,
-0xeaffe,
-0x1bf8d,
-0x4abe3,
-0xe2b02,
-0x1bbe3,
-0xeaffd,
-0x1bfe5,
-0xe15fc,
-0x36f243,
-0xeafef,
-0x1bf72,
-0xeafdb,
-0x1bf71,
-0x3aee02,
-0x4af51,
-0xe1ffb,
-0x36f23d,
-0x4af51,
-0xe1ffc,
-0x36f246,
-0xeabff,
-0x3af6c7,
-0x4af51,
-0xe1ffd,
-0x36f23d,
-0xea076,
-0xea1fa,
-0x4af6c,
-0x2cf00,
-0xea077,
-0xea1fa,
-0x4af6d,
-0x2cf00,
-0xeabfa,
-0xcaf5c,
-0x3af84d,
-0x33f23d,
-0xeabfe,
-0x3af6c7,
-0x33f23d,
-0xeaff2,
-0x1bf72,
-0xeaf39,
-0x1bf71,
-0x3af3be,
-0x33f25d,
-0x16a901,
-0x16a801,
-0x16a501,
-0x23ffff,
-0x378ff,
-0x379ff,
-0xeaffd,
-0x1bfe5,
-0xeafff,
-0x1bf8d,
-0x4abe3,
-0xebbfd,
-0x1bbe3,
-0xeabff,
-0xeacff,
-0xead50,
-0x3af05e,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x378ff,
-0x379ff,
-0x16aff9,
-0xeafff,
-0x2ff03,
-0x2ff04,
-0x2ff05,
-0x2ff06,
-0x4af77,
-0xe1ffd,
-0x32f1ec,
-0x4af34,
-0xe1ffe,
-0x36f219,
-0xff34,
-0x33f1ec,
-0xeafff,
-0x1bf8d,
-0x4abe3,
-0xebbfd,
-0x1bbe3,
-0x4af48,
-0x32f20e,
-0x4af49,
-0x32f20e,
-0x4af4a,
-0x36f1f4,
-0xeafff,
-0x2ff03,
-0x4af4a,
-0x2ff04,
-0x4af49,
-0x2ff05,
-0x4af48,
-0x2ff06,
-0xeadff,
-0x4ae4d,
-0x4a94c,
-0x4a84b,
-0xcafdb,
-0xcafec,
-0xcaf9d,
-0xcaf8e,
-0x1ece06,
-0x1edd05,
-0x1edc04,
-0x1edb03,
-0x2fe02,
-0x2fd01,
-0x2fc00,
-0xcaf7b,
-0xcaf6c,
-0x3afbbc,
-0xeaffe,
-0x1bf8d,
-0x4abe3,
-0xe2b02,
-0x1bbe3,
-0xeaffd,
-0x1bfe5,
-0x33f21b,
-0x16af07,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x378ff,
-0x379ff,
-0x4abe5,
-0xe2bfd,
-0xe1bff,
-0x32f18f,
-0x4abe5,
-0xe2bfb,
-0xe1bff,
-0x32f194,
-0x4abe5,
-0xe2bf7,
-0xe1bff,
-0x36f1d1,
-0xeafff,
-0x1bf8d,
-0x4abe3,
-0xebbfd,
-0x1bbe3,
-0xeaff5,
-0x1bfe5,
-0xf76c,
-0x33f18e,
-0x4abe5,
-0xe2bef,
-0xe1bff,
-0x36f18e,
-0xeafef,
-0x1bfe5,
-0x51f46,
-0x1bf46,
-0x55f47,
-0x1bf47,
-0xea033,
-0xea1f9,
-0x18ab00,
-0x32f19c,
-0xea23a,
-0xea3f9,
-0xea1fd,
-0xea07f,
-0x1aaf00,
-0x2cf00,
-0xea1fd,
-0xea07f,
-0x18af02,
-0x2cf01,
-0x4afac,
-0x2cf02,
-0xea039,
-0xea1f9,
-0x18ab00,
-0xe2bef,
-0xe1bff,
-0x36f1ac,
-0xbf6c,
-0x51f44,
-0x1bf44,
-0x55f45,
-0x1bf45,
-0x18ab00,
-0xe2bf7,
-0xe1bff,
-0x36f1a3,
-0x51f42,
-0x1bf42,
-0x55f43,
-0x1bf43,
-0xbf6c,
-0x18ab00,
-0xe2b5b,
-0xe1bff,
-0x36f19e,
-0xbf6c,
-0x3af2a4,
-0x33f18e,
-0xea03a,
-0xea1f9,
-0x18ab00,
-0xea1fd,
-0xea07f,
-0xdbfbf,
-0x2cf00,
-0x33f1bd,
-0xeaffb,
-0x1bfe5,
-0xfb6c,
-0x3af229,
-0x33f18e,
-0x3af2c7,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x378ff,
-0x379ff,
-0x16affd,
-0x4abe5,
-0xe2bfd,
-0xe1bff,
-0x32f10a,
-0xeaff7,
-0x1bfe5,
-0xea0f8,
-0xea1f8,
-0x18af00,
-0x2ff00,
-0x18af01,
-0x2ff01,
-0x18af02,
-0x2ff02,
-0x1eab00,
-0xe2bbf,
-0xe1bff,
-0x32f10d,
-0x1eab01,
-0xe2bfb,
-0xe1bff,
-0x36f16a,
-0xeafff,
-0x1bf8d,
-0x4abe3,
-0xebbfd,
-0x1bbe3,
-0xeaffd,
-0x1bfe5,
-0xef6c,
-0x1eab01,
-0xe2bef,
-0xe1bff,
-0x32f110,
-0x1eab01,
-0xe2bf7,
-0xe1bff,
-0x36f161,
-0xfb6d,
-0x1eab00,
-0xe2bdf,
-0xe1bff,
-0x36f14f,
-0xeafff,
-0x1bf8d,
-0x4abe3,
-0xebbfd,
-0x1bbe3,
-0xea095,
-0xea1f8,
-0x18ab00,
-0xe2b9f,
-0xe1bbf,
-0x36f117,
-0x3af52a,
-0xff72,
-0xff71,
-0x1eab02,
-0xe2bbf,
-0xe1bff,
-0x36f125,
-0xea3fd,
-0xea27c,
-0xea091,
-0xea1f8,
-0x18af00,
-0x2df00,
-0xea090,
-0xea1f8,
-0x18af00,
-0x2df01,
-0xea08e,
-0xea1f8,
-0x18af00,
-0x2df02,
-0x1eab01,
-0xe2be7,
-0xe1bff,
-0x32f125,
-0x1eab01,
-0xe2bbf,
-0xe1bff,
-0x36f11c,
-0xbf6c,
-0x51f44,
-0x1bf44,
-0x55f45,
-0x1bf45,
-0xea1fd,
-0xea07f,
-0xea28c,
-0xea3f8,
-0x1aaf00,
-0x2cf00,
-0x18af02,
-0x2cf01,
-0x4afac,
-0x2cf02,
-0x3af2a4,
-0xea0f8,
-0xea1f8,
-0xeaf00,
-0x2cf00,
-0xeaf00,
-0x2cf01,
-0xeaf00,
-0x2cf02,
-0x33f109,
-0x51f46,
-0x1bf46,
-0x55f47,
-0x1bf47,
-0x33f130,
-0x3af30b,
-0x1bc6e,
-0xeafec,
-0x1bf72,
-0xeafe6,
-0x1bf71,
-0x33f14f,
-0xf76d,
-0x3af2a4,
-0x33f166,
-0xfb6c,
-0x3af229,
-0x33f176,
-0x3af2c7,
-0x16af03,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x375ff,
-0x378ff,
-0x379ff,
-0x16affd,
-0xea0f8,
-0xea1f8,
-0x18af00,
-0x2ff00,
-0x18af01,
-0x2ff01,
-0x18af02,
-0x2ff02,
-0xe2f7f,
-0xcaffb,
-0xea5fe,
-0xeaff7,
-0x1bfe5,
-0x7f6c,
-0xe1bff,
-0x36f0ee,
-0x4af6d,
-0xebffe,
-0x1bf6d,
-0x4af3b,
-0xe1fef,
-0x36f0cc,
-0x4af3b,
-0xe1ffe,
-0x36f0e2,
-0xe15ff,
-0x36f0c4,
-0x3af52a,
-0xff72,
-0xff71,
-0x33f0c4,
-0xe1bff,
-0x36f0e8,
-0xeabff,
-0xeac3a,
-0x3af583,
-0x4af77,
-0xe1ffd,
-0x36f0d4,
-0xea5ff,
-0xeaff1,
-0x1bf72,
-0xeaf8b,
-0x1bf71,
-0x33f0e8,
-0xeaffe,
-0x1bf8d,
-0x4abe3,
-0xe2b02,
-0x1bbe3,
-0xeaffd,
-0x1bfe5,
-0x33f0da,
-0xe1bff,
-0x32f0e8,
-0xea5ff,
-0xeabff,
-0xeacff,
-0xead3a,
-0x3af05e,
-0x33f0e8,
-0xea0f8,
-0xea1f8,
-0xeaf00,
-0x2cf00,
-0xeaf00,
-0x2cf01,
-0xeaf00,
-0x2cf02,
-0x16af03,
-0x16a901,
-0x16a801,
-0x16a501,
-0x23ffff,
-0x378ff,
-0x379ff,
-0x16affd,
-0xeaff7,
-0x1bfe5,
-0xea0f8,
-0xea1f8,
-0x18af00,
-0x2ff00,
-0x18af01,
-0x2ff01,
-0x18af02,
-0x2ff02,
-0xe2fdf,
-0xcaffb,
-0xe1bff,
-0x36f0a5,
-0xdf6d,
-0x1eab02,
-0xe2bef,
-0xe1bff,
-0x36f0a0,
-0xbf6d,
-0x1eab02,
-0xe2bfe,
-0xe1bff,
-0x36f08d,
-0xea095,
-0xea1f8,
-0x18ab00,
-0xe2b9f,
-0xe1bbf,
-0x36f092,
-0x3af52a,
-0xff72,
-0xff71,
-0x33f08d,
-0x3af30b,
-0xeafed,
-0x1bf72,
-0xeaf19,
-0x1bf71,
-0xea0f8,
-0xea1f8,
-0xeaf00,
-0x2cf00,
-0xeaf00,
-0x2cf01,
-0xeaf00,
-0x2cf02,
-0x16af03,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x4af40,
-0xe1fdf,
-0x36f064,
-0x4af40,
-0xe1fcf,
-0x36f069,
-0x4af40,
-0xe1fbf,
-0x36f070,
-0xdf40,
-0xeaff0,
-0x1bf33,
-0xeaf1f,
-0x1bf32,
-0xeacf7,
-0xeabff,
-0x33f05f,
-0xeaff6,
-0x1bf33,
-0xeaff5,
-0x1bf32,
-0xeacfd,
-0xeabff,
-0x33f05f,
-0xeaff7,
-0x1bf33,
-0xeafff,
-0x1bf32,
-0x33f06c,
-0xeaff0,
-0x1bf33,
-0xeaf1f,
-0x1bf32,
-0x33f06c,
-0x23ffff,
-0x374ff,
-0x375ff,
-0x378ff,
-0x379ff,
-0xcafb4,
-0xcafd0,
-0xcafc1,
-0x4abde,
-0xe2f8f,
-0xcaff5,
-0xcbdcf,
-0x36f04c,
-0x18af02,
-0x32f029,
-0x18af01,
-0x32f029,
-0x18af00,
-0x32f029,
-0xff77,
-0xe15df,
-0x36f02c,
-0xe15cf,
-0x36f02f,
-0xe15bf,
-0x36f033,
-0xe15af,
-0x36f03c,
-0xeacfd,
-0xeabff,
-0xe159f,
-0x36f024,
-0xeacf5,
-0xeabff,
-0x33f024,
-0xeafff,
-0x1bf8d,
-0x4abe3,
-0xebbfd,
-0x1bbe3,
-0xcaf4b,
-0x3af343,
-0xcafc5,
-0x33f043,
-0xcaf4b,
-0xeacfe,
-0x3aeea9,
-0x33f035,
-0xcaf4b,
-0x3af016,
-0x33f035,
-0x3af7ac,
-0xcafc5,
-0x33f049,
-0xfd77,
-0xcaf1b,
-0xcaf0c,
-0x3afbbc,
-0x33f04b,
-0x16a901,
-0x16a801,
-0x16a501,
-0x16a401,
-0x23ffff,
-0x378ff,
-0x379ff,
-0x3aee02,
-0xeabff,
-0x3af6c7,
-0xeabff,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x375ff,
-0x378ff,
-0x379ff,
-0xcafb5,
-0xeabfe,
-0xeacff,
-0x3af624,
-0xeaecf,
-0xeadff,
-0xe1cbf,
-0x32f006,
-0xcaf5b,
-0xeacff,
-0x3aeea9,
-0xcafce,
-0xeadff,
-0xcafdb,
-0xcafec,
-0x16a901,
-0x16a801,
-0x16a501,
-0x23ffff,
-0x378ff,
-0x379ff,
-0xeaffd,
-0x1bfe5,
-0xfd6d,
-0xf96e,
-0x3af01f,
-0xff74,
-0xff72,
-0xff71,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x378ff,
-0x379ff,
-0xfe6c,
-0xf36e,
-0x4af51,
-0xe1f00,
-0x36efe7,
-0x4af56,
-0xe1ffe,
-0x30efe7,
-0x4af74,
-0x36efe0,
-0x4a832,
-0x4a933,
-0x2affff,
-0xff72,
-0xff71,
-0xff74,
-0x33efde,
-0xeabfb,
-0x3af281,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x378ff,
-0x379ff,
-0xeaffd,
-0x1bfe5,
-0xeafff,
-0x1bf8d,
-0x4abe3,
-0xebbfd,
-0x1bbe3,
-0xeabff,
-0xeac50,
-0x3af554,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x374ff,
-0x375ff,
-0x378ff,
-0x379ff,
-0x4abf5,
-0xebbfb,
-0x1bbf5,
-0xea01e,
-0xea1f7,
-0x18ab00,
-0xebbfd,
-0x2cb00,
-0x4af56,
-0xe1ffd,
-0x36ef55,
-0x4ab9f,
-0xebbfd,
-0x1bb9f,
-0xea026,
-0xea1f7,
-0x18ab00,
-0xebbfe,
-0x2cb00,
-0xea228,
-0xea3f7,
-0x1aab00,
-0xebbfd,
-0x2db00,
-0x4ab9f,
-0xebbfe,
-0x1bb9f,
-0xea01c,
-0xea1f7,
-0x18ab00,
-0xebbdf,
-0x2cb00,
-0x18ab00,
-0xebbbf,
-0x2cb00,
-0xea0e0,
-0xea1f6,
-0x18ab00,
-0xebbfe,
-0x2cb00,
-0xea419,
-0xea5f7,
-0x1cab00,
-0xe2bf7,
-0xe1bff,
-0x32ef95,
-0xea01a,
-0xea1f7,
-0x18ab00,
-0xebbfe,
-0x2cb00,
-0xea029,
-0xea1f7,
-0x18ab00,
-0xebbfe,
-0x2cb00,
-0x1cab00,
-0xe2bf7,
-0xe1bff,
-0x32ef5b,
-0x1aab00,
-0xebbfe,
-0x2db00,
-0xeacfb,
-0xeabff,
-0x3aecbb,
-0x4ab9d,
-0xebbfe,
-0x1bb9d,
-0x4ab9d,
-0xebbfb,
-0x1bb9d,
-0x4ab9d,
-0xe2b04,
-0x1bb9d,
-0x4ab9f,
-0xe2b02,
-0x1bb9f,
-0x4ab9f,
-0xe2b01,
-0x1bb9f,
-0xea0b3,
-0xea1f6,
-0xeaff1,
-0x2cf00,
-0xeaf8b,
-0x2cf01,
-0xeaff0,
-0x1bfe1,
-0x4abe4,
-0xebb9f,
-0x1bbe4,
-0xe2a03,
-0xbdfff,
-0x4abe4,
-0xe2b20,
-0x1bbe4,
-0x4abe5,
-0xe2bbf,
-0xe1bff,
-0x36ef5e,
-0xeafbf,
-0x1bfe5,
-0x4af70,
-0xebffe,
-0x1bf70,
-0xeafdf,
-0x1bfe5,
-0x33ef11,
-0xea027,
-0xea1f7,
-0x18ab00,
-0xebbfe,
-0x2cb00,
-0x33ef89,
-0x4ab9d,
-0xebbdf,
-0x1bb9d,
-0x4ab9f,
-0xebbfd,
-0x1bb9f,
-0xea026,
-0xea1f7,
-0x18ab00,
-0xebbfe,
-0x2cb00,
-0xea228,
-0xea3f7,
-0x1aab00,
-0xebbfd,
-0x2db00,
-0xea01c,
-0xea1f7,
-0x18ab00,
-0xebbdf,
-0x2cb00,
-0x18ab00,
-0xebbbf,
-0x2cb00,
-0xea0e0,
-0xea1f6,
-0x18ab00,
-0xebbfe,
-0x2cb00,
-0xea419,
-0xea5f7,
-0x1cab00,
-0xe2bf7,
-0xe1bff,
-0x32ef2d,
-0xea01a,
-0xea1f7,
-0x18ab00,
-0xebbfe,
-0x2cb00,
-0xea029,
-0xea1f7,
-0x18ab00,
-0xebbfe,
-0x2cb00,
-0x1cab00,
-0xe2bf7,
-0xe1bff,
-0x32ef17,
-0x1aab00,
-0xebbfe,
-0x2db00,
-0xeacfb,
-0xeabff,
-0x3aecbb,
-0x4ab9d,
-0xebbfe,
-0x1bb9d,
-0x4ab9f,
-0xe2b02,
-0x1bb9f,
-0x33ef11,
-0xea027,
-0xea1f7,
-0x18ab00,
-0xebbfe,
-0x2cb00,
-0x33ef21,
-0x4ab83,
-0xebbef,
-0x1bb83,
-0x16a901,
-0x16a801,
-0x16a501,
-0x16a401,
-0x23ffff,
-0x378ff,
-0x379ff,
-0x4ab9d,
-0xe2b20,
-0x1bb9d,
-0x4ab9d,
-0xebbfd,
-0x1bb9d,
-0x4ab9d,
-0xe2b02,
-0x1bb9d,
-0x4ab9f,
-0xebbfe,
-0x1bb9f,
-0x4af56,
-0xe1ffd,
-0x36eeda,
-0xea0b3,
-0xea1f6,
-0xeaff1,
-0x2cf00,
-0xeaf8b,
-0x2cf01,
-0xeaff0,
-0x1bfe1,
-0x4abe4,
-0xebb9f,
-0x1bbe4,
-0xe2a03,
-0xbdfff,
-0x4abe4,
-0xe2b20,
-0x1bbe4,
-0x4abe5,
-0xe2bbf,
-0xe1bff,
-0x36eedf,
-0xeafbf,
-0x1bfe5,
-0x4af70,
-0xebffe,
-0x1bf70,
-0xeafdf,
-0x1bfe5,
-0xeacfd,
-0xeabff,
-0x3aecbb,
-0xeafff,
-0x1bf9d,
-0xea01c,
-0xea1f7,
-0x18ab00,
-0xe2b60,
-0x2cb00,
-0xea028,
-0xea1f7,
-0x18ab00,
-0xe2b03,
-0x2cb00,
-0xea029,
-0xea1f7,
-0x18ab00,
-0xe2b01,
-0x2cb00,
-0xea01e,
-0xea1f7,
-0x18ab00,
-0xe2b02,
-0x2cb00,
-0xea027,
-0xea1f7,
-0x18ab00,
-0xe2b01,
-0x2cb00,
-0xea01a,
-0xea1f7,
-0x18ab00,
-0xe2b01,
-0x2cb00,
-0xea0e0,
-0xea1f6,
-0x18ab00,
-0xe2b01,
-0x2cb00,
-0x4ab9f,
-0xe2b01,
-0x1bb9f,
-0x4ab83,
-0xe2b10,
-0x1bb83,
-0x4abf5,
-0xe2b04,
-0x1bbf5,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x375ff,
-0x378ff,
-0x379ff,
-0xcafb5,
-0x4af3d,
-0x1bfaf,
-0x4ab96,
-0xe2b03,
-0xebbfe,
-0x1bb96,
-0xea019,
-0xea1f7,
-0x18ab00,
-0xe2bf7,
-0xe1bff,
-0x32ee94,
-0xeabff,
-0xe2cfe,
-0xeabff,
-0xcbcbf,
-0x32ee17,
-0xea025,
-0xea1f7,
-0x18ab00,
-0xebb7f,
-0x2cb00,
-0x3aefcc,
-0x3afb07,
-0x4abf4,
-0xebbf7,
-0x1bbf4,
-0x4af37,
-0x36ee4c,
-0x4abf5,
-0xebbfd,
-0x1bbf5,
-0xea2fa,
-0xea3f8,
-0x1aab00,
-0xe2b03,
-0x2db00,
-0xea0ff,
-0xea1f8,
-0x18ab00,
-0xe2b01,
-0x2cb00,
-0x1aab00,
-0xebbfd,
-0x2db00,
-0x4af56,
-0xe1ffb,
-0x36ee54,
-0x1aab00,
-0xe2b01,
-0x2db00,
-0xeafed,
-0x1bf72,
-0xeaf3e,
-0x1bf71,
-0xef5fe,
-0x1bf73,
-0x4abcf,
-0xebb7f,
-0x1bbcf,
-0xe15fd,
-0x36ee62,
-0xea0ff,
-0xea1f8,
-0x18ab00,
-0xebbfe,
-0x2cb00,
-0x4abe4,
-0xebbf7,
-0x1bbe4,
-0x4af77,
-0xe1ffd,
-0x32ee15,
-0xeaffe,
-0x1bf8d,
-0x4abe3,
-0xe2b02,
-0x1bbe3,
-0xeaffd,
-0x1bfe5,
-0x33ee15,
-0x1aab00,
-0xebbfe,
-0x2db00,
-0xeafed,
-0x1bf72,
-0xeaf19,
-0x1bf71,
-0x33ee6e,
-0xe15fe,
-0x36ee1c,
-0x4af41,
-0xe1ffe,
-0x36ee1c,
-0xe15fd,
-0x36ee2a,
-0xea04a,
-0xea1f9,
-0x18ab00,
-0xe2b02,
-0x2cb00,
-0x4abf6,
-0xebbdf,
-0x1bbf6,
-0xea04c,
-0xea1f9,
-0x18ab00,
-0xe2b20,
-0x2cb00,
-0x18ab00,
-0xebbfe,
-0x2cb00,
-0x4abcf,
-0xebb7f,
-0x1bbcf,
-0x4abe4,
-0xebbef,
-0x1bbe4,
-0xeafed,
-0x1bf72,
-0xeaf5f,
-0x1bf71,
-0x33ee5f,
-0xea04a,
-0xea1f9,
-0x18ab00,
-0xebbfd,
-0x2cb00,
-0xea05b,
-0xea1f9,
-0xeafff,
-0x2cf00,
-0xeafff,
-0x2cf01,
-0xeafff,
-0x2cf02,
-0x33ee40,
-0xea04a,
-0xea1f9,
-0x18ab00,
-0xebbfd,
-0x33ee41,
-0x3af670,
-0x33ee94,
-0x4abde,
-0xe2bf0,
-0xebb9f,
-0x1bbde,
-0xeac9f,
-0xeabff,
-0x16a901,
-0x16a801,
-0x16a501,
-0x23ffff,
-0x378ff,
-0x379ff,
-0x3aee02,
-0xeabfe,
-0x3af408,
-0xeabff,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x378ff,
-0x379ff,
-0x4abe4,
-0xe2b18,
-0x1bbe4,
-0x3aef09,
-0x4af37,
-0x32edd3,
-0xea036,
-0xea1f9,
-0x18ab00,
-0xe2bfc,
-0xe1bff,
-0x36eddd,
-0xea0b3,
-0xea1f6,
-0xeafdf,
-0x2cf00,
-0xeaf2f,
-0x2cf01,
-0xeaff1,
-0x1bfe1,
-0x4abe4,
-0xebb9f,
-0x1bbe4,
-0xea04c,
-0xea1f9,
-0x18ab00,
-0xebbfd,
-0x2cb00,
-0xe2a03,
-0xbdfff,
-0x4abe4,
-0xe2b20,
-0x1bbe4,
-0xeaf9f,
-0x1bfe5,
-0x4abcf,
-0xe2b80,
-0x1bbcf,
-0x4abf6,
-0xe2b20,
-0x1bbf6,
-0x4abf4,
-0xe2b08,
-0x1bbf4,
-0x33edbb,
-0xea2f8,
-0xea3f8,
-0xeaf00,
-0x2df00,
-0xeaf00,
-0x2df01,
-0xeaf00,
-0x2df02,
-0x4abcf,
-0xe2b80,
-0x1bbcf,
-0xea0ff,
-0xea1f8,
-0x18ab00,
-0xe2b01,
-0x2cb00,
-0x4abf5,
-0xe2b02,
-0x1bbf5,
-0x4abf4,
-0xe2b08,
-0x1bbf4,
-0xeaffb,
-0x2df02,
-0x4ab96,
-0xe2b03,
-0x1bb96,
-0xea026,
-0xea1f7,
-0x18ab00,
-0xe2b01,
-0x2cb00,
-0xea025,
-0xea1f7,
-0x18ab00,
-0xe2b80,
-0xebbbf,
-0x2cb00,
-0xeafe7,
-0x1bfe5,
-0x4abde,
-0xe2bf0,
-0xebbbf,
-0x1bbde,
-0xeacbf,
-0xeabff,
-0x16a901,
-0x16a801,
-0x23ffff,
-0xcafbd,
-0xea019,
-0xea1f7,
-0x18ab00,
-0xe2bf7,
-0xe1bff,
-0x32ed98,
-0xecdf6,
-0xcafdb,
-0x33ed96,
-0xecdee,
-0xcafdb,
-0xe2be0,
-0x1bb9c,
-0xeecdf,
-0xcaffe,
-0x4ab9c,
-0xcbbeb,
-0x1bb9c,
-0x23ffff,
-0xcafc2,
-0xcafb3,
-0xea028,
-0xea1f7,
-0x18ad00,
-0xe2d3c,
-0x1aaf00,
-0xeeffb,
-0xcaffc,
-0xcbdcd,
-0x2cd00,
-0xea027,
-0xea1f7,
-0x18ad00,
-0xe2de0,
-0x1aaf01,
-0xeefdf,
-0xcaffc,
-0xcbdcd,
-0x2cd00,
-0xea019,
-0xea1f7,
-0x18ad00,
-0xe2d10,
-0x1aaf03,
-0xeefef,
-0xcaffc,
-0xcbdcd,
-0x2cd00,
-0x1aaf02,
-0x36ed67,
-0x18ab00,
-0xebbf7,
-0x2cb00,
-0xea018,
-0xea1f7,
-0xeaff5,
-0x2cf00,
-0x33ed60,
-0x18ab00,
-0xe2b08,
-0x2cb00,
-0xea018,
-0xea1f7,
-0xeafeb,
-0x2cf00,
-0x23ffff,
-0x378ff,
-0x379ff,
-0xeafff,
-0x1bf8d,
-0x4abe3,
-0xebbfd,
-0x1bbe3,
-0x4abe5,
-0xe2bfd,
-0xe1bff,
-0x36ed47,
-0x4af41,
-0xe1ffe,
-0x36ed4f,
-0x3af000,
-0x33ed41,
-0xea04a,
-0xea1f9,
-0x18ab00,
-0xe2b02,
-0x2cb00,
-0xeaffd,
-0x1bfe5,
-0x33ed41,
-0xeafef,
-0x1bfe5,
-0x4abe4,
-0xe2b10,
-0x1bbe4,
-0x3aeff3,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x378ff,
-0x379ff,
-0x16affd,
-0xeafff,
-0x1bf8d,
-0x4abe3,
-0xebbfd,
-0x1bbe3,
-0x4abe5,
-0xe2bfd,
-0xe1bff,
-0x32ed1e,
-0xeaff7,
-0x1bfe5,
-0xea0f8,
-0xea1f8,
-0x18af00,
-0x2ff00,
-0x18af01,
-0x2ff01,
-0x18af02,
-0x2ff02,
-0xe2ffb,
-0xcaffb,
-0xe1bff,
-0x36ed1d,
-0xeaffb,
-0x2cf02,
-0x4af73,
-0x32ed1d,
-0x3aeff3,
-0x33ed1d,
-0x3af000,
-0x16af03,
-0x16a901,
-0x16a801,
-0x23ffff,
-0x374ff,
-0x375ff,
-0x378ff,
-0x379ff,
-0x16affd,
-0xeafff,
-0x1bf8d,
-0x4abe3,
-0xebbfd,
-0x1bbe3,
-0x4abe5,
-0xe2bfd,
-0xe1bff,
-0x32eced,
-0xeaff7,
-0x1bfe5,
-0xea4f8,
-0xea5f8,
-0x1caf00,
-0x2ff00,
-0x1caf01,
-0x2ff01,
-0x1caf02,
-0x2ff02,
-0xe2ffb,
-0xcaffb,
-0xe1bff,
-0x32ecf6,
-0xeaf00,
-0x2ef00,
-0xeaf00,
-0x2ef01,
-0xeaf08,
-0x2ef02,
-0x33ecec,
-0xeaffb,
-0x2ef02,
-0x3af336,
-0x1bc6e,
-0xeaff0,
-0x1bf72,
-0xeafb7,
-0x1bf71,
-0x33ecfd,
-0x3af000,
-0x16af03,
-0x16a901,
-0x16a801,
-0x16a501,
-0x16a401,
-0x23ffff,
-0x378ff,
-0x379ff,
-0x16affd,
-0xeaff7,
-0x1bfe5,
-0xea0f8,
-0xea1f8,
-0x18af00,
-0x2ff00,
-0x18af01,
-0x2ff01,
-0x18af02,
-0x2ff02,
-0x1eab01,
-0xe2b7f,
-0xe1bff,
-0x36ecc7,
-0xef6d,
-0x4af77,
-0xe1ffe,
-0x36eccd,
-0x3af01f,
-0xff72,
-0xff71,
-0x33ecc7,
-0x3af336,
-0x1bc6e,
-0xeaff1,
-0x1bf72,
-0xeaf8b,
-0x1bf71,
-0xea0f8,
-0xea1f8,
-0xeaf00,
-0x2cf00,
-0xeaf00,
-0x2cf01,
-0xeaf00,
-0x2cf02,
-0x16af03,
-0x16a901,
-0x16a801,
-0x23ffff,
-0xea0b3,
-0xea1f6,
-0xcafbe,
-0xeadff,
-0x2ce00,
-0x2cc01,
-0x4abe4,
-0xebbbf,
-0x1bbe4,
-0xe2a03,
-0xbdfff,
-0xeafbf,
-0x1bfe5,
-0x23ffff,
-0x378ff,
-0x379ff,
-0xea0e3,
-0xea1f6,
-0x18ab00,
-0xebbfd,
-0x2cb00,
-0x4ab83,
-0xebbdf,
-0x1bb83,
-0xeafff,
-0x1bf92,
-0x1bf91,
-0xeafcf,
-0x1bf93,
-0xeafc6,
-0x1bf94,
-0xea0c2,
-0xea1f8,
-0xeafeb,
-0x2cf00,
-0x4ab96,
-0xebbfb,
-0x1bb96,
-0xea067,
-0xea1f7,
-0x18ab00,
-0xe2b02,
-0x2cb00,
-0xea01d,
-0xea1f7,
-0x18ab00,
-0xe2b03,
-0x2cb00,
-0xea0f9,
-0xea1f8,
-0xeaf00,
-0x2cf00,
-0x4abab,
-0xebbfe,
-0x1bbab,
-0xea0ef,
-0xea1f6,
-0x18ab00,
-0xebbfa,
-0x2cb00,
-0xeadff,
-0xeae47,
-0xea057,
-0xea1fa,
-0xcafdc,
-0xeabff,
-0x2cc00,
-0x2ce01,
-0xeadff,
-0xeae56,
-0xea055,
-0xea1fa,
-0xcafdc,
-0xeabff,
-0x2cc00,
-0x2ce01,
-0xea053,
-0xea1fa,
-0xeaffa,
-0x2cf00,
-0xeaf75,
-0x2cf01,
-0xeadfd,
-0xeae7f,
-0xea051,
-0xea1fa,
-0xcafdc,
-0xeabff,
-0x2cc00,
-0x2ce01,
-0xea04b,
-0xea1fa,
-0xeaff8,
-0x2cf00,
-0xeaf8a,
-0x2cf01,
-0xeadff,
-0xeae70,
-0xea049,
-0xea1fa,
-0xcafdc,
-0xeabff,
-0x2cc00,
-0x2ce01,
-0xea047,
-0xea1fa,
-0xeaffa,
-0x2cf00,
-0xeaf73,
-0x2cf01,
-0xeadff,
-0xeae6b,
-0xcafdc,
-0xeabff,
-0x1bcdb,
-0x1beda,
-0x5531,
-0xea0e5,
-0xea1f6,
-0x18ab00,
-0xe2b40,
-0x2cb00,
-0x4ab8e,
-0xe2b01,
-0x1bb8e,
-0x4abf5,
-0xebbfe,
-0x1bbf5,
-0x4abe5,
-0xeaf00,
-0x1bfe5,
-0xea035,
-0xea1fa,
-0x18ab00,
-0xe2b7f,
-0xe1bff,
-0x32ec1a,
-0x4abf7,
-0xe2b7f,
-0xe1bff,
-0x32ec1a,
-0xea0b3,
-0xea1f6,
-0xeaffe,
-0x2cf00,
-0xeaf8d,
-0x2cf01,
-0xeafff,
-0x1bfe1,
-0x4abe4,
-0xebb9f,
-0x1bbe4,
-0xe2a03,
-0xbdfff,
-0x4abe5,
-0xe2bbf,
-0xe1bff,
-0x36ec1a,
-0x4af6f,
-0xebfdf,
-0x1bf6f,
-0xeafff,
-0x1bfe4,
-0xeaf00,
-0x1bfe5,
-0x4abde,
-0xe2bf0,
-0xebbdf,
-0x1bbde,
-0xea0b4,
-0xea1f6,
-0xeaffb,
-0x2cf00,
-0xea0b5,
-0xea1f6,
-0xeaffc,
-0x2cf00,
-0x4abe4,
-0xebbfd,
-0x1bbe4,
-0x4abe3,
-0xebbfd,
-0x1bbe3,
-0xea0e1,
-0xea1f6,
-0x18ab00,
-0xebbbf,
-0x2cb00,
-0x4ab8f,
-0xe2bfe,
-0xe1bff,
-0x36eb90,
-0x3afb9f,
-0xeafff,
-0x1bf8d,
-0x4abe3,
-0xebbfd,
-0x1bbe3,
-0x4af56,
-0xe1ffe,
-0x36eb92,
-0x4af56,
-0xe1ffb,
-0x36eb92,
-0xff37,
-0x3afb07,
-0x3afaed,
-0x3afacf,
-0x3af081,
-0xeac94,
-0xeabff,
-0x3afa7d,
-0x4af57,
-0xe1ffd,
-0x36eb96,
-0x4af57,
-0xe1ffc,
-0x36eb99,
-0x4af57,
-0xe1ffb,
-0x36eb9c,
-0xea1fd,
-0xea07f,
-0xeafff,
-0x2cf00,
-0x4afae,
-0x2cf01,
-0x4afae,
-0x2cf02,
-0x4abe4,
-0xebbfe,
-0x1bbe4,
-0xeaffe,
-0x1bfe5,
-0xea076,
-0xea1fa,
-0x4af6c,
-0x2cf00,
-0xea077,
-0xea1fa,
-0x4af6d,
-0x2cf00,
-0x4abe3,
-0xe2b01,
-0x1bbe3,
-0x4abde,
-0xe2b8e,
-0x4bb6e,
-0x1bbde,
-0x4abe5,
-0xe2bfe,
-0xe1bff,
-0x32ebb9,
-0x4abde,
-0xebb7f,
-0x1bbde,
-0xe2a03,
-0xbdfff,
-0xff6c,
-0xff6d,
-0x4abe5,
-0xe2bfe,
-0xe1bff,
-0x32eba7,
-0x4abe3,
-0xebbfe,
-0x1bbe3,
-0x4af72,
-0x4bf71,
-0x32ebab,
-0x731,
-0x33ebd1,
-0x4a871,
-0x4a972,
-0x2affff,
-0x33ebd1,
-0x4abe3,
-0xebbfe,
-0x1bbe3,
-0xeaffe,
-0x1bfe5,
-0x4abdd,
-0xe2bc0,
-0x1bb2f,
-0x3affca,
-0x1bc6e,
-0x33ebd1,
-0xfe74,
-0x3aefdb,
-0x33ebde,
-0xfe74,
-0x3af239,
-0x33ebde,
-0xeabff,
-0xeac4d,
-0x3af554,
-0x33ebde,
-0xfe37,
-0x33ebee,
-0xea0cb,
-0xea1fc,
-0xeaf3f,
-0x2cf00,
-0xff57,
-0xff55,
-0xff54,
-0xff53,
-0xff52,
-0xff50,
-0xff4f,
-0xff4e,
-0xff3f,
-0xff3e,
-0xff3a,
-0xff39,
-0xff38,
-0xdf40,
-0xeaff0,
-0x1bf33,
-0xeaf1f,
-0x1bf32,
-0x51,
-0xff56,
-0xff37,
-0xff41,
-0xff45,
-0xff44,
-0xff47,
-0xff46,
-0xff43,
-0xff42,
-0xff4d,
-0xff4c,
-0xff4b,
-0xff4a,
-0xff49,
-0xff48,
-0xff3b,
-0x4afae,
-0x1bf3c,
-0x4afaf,
-0x1bf3d,
-0x3afb07,
-0x3afaed,
-0x3afacf,
-0xea035,
-0xea1fa,
-0x18ab00,
-0xe2b7f,
-0xe1bff,
-0x32ebde,
-0x4ab8e,
-0xe2bef,
-0xe1bff,
-0x32ebde,
-0xeab00,
-0x3afe6d,
-0x1bc6e,
-0x33ebde,
-0x16a901,
-0x16a801,
-0x23ffff,
-0xe2a1c,
-0xeba1f,
-0x23ffff,
-0xe2a20,
-0xefadf,
-0x32eb4e,
-0x23ffff,
-0x37fff,
-0xcafef,
-0xb7fff,
-0x37fff,
-0x378ff,
-0x379ff,
-0x370ff,
-0x371ff,
-0x372ff,
-0x373ff,
-0x374ff,
-0x375ff,
-0x37eff,
-0x37dff,
-0x37cff,
-0x37bff,
-0xefafb,
-0x36eb37,
-0x33eb1b,
-0xefaf7,
-0x36eb34,
-0x33eb1a,
-0x33eb19,
-0xefafb,
-0x36eb2f,
-0xe2a04,
-0x33eb2a,
-0xefaf7,
-0x36eb2b,
-0xe2a08,
-0x33eb2a,
-0xe2a10,
-0x16ab01,
-0x16ac01,
-0x16ad01,
-0x16ae01,
-0x16a501,
-0x16a401,
-0x16a301,
-0x16a201,
-0x16a101,
-0x16a001,
-0x16a901,
-0x16a801,
-0x17af01,
-0x16af01,
-0x3f1fff,
-0x33eb33,
-0x33eb33,
-0x33eb33,
-0xceebf,
-0xcaffb,
-0xcedcf,
-0xccfbd,
-0xcecec,
-0xcaffe,
-0xccdcd,
-0x3f3fff,
-0x371ff,
-0x370ff,
-0x373ff,
-0x372ff,
-0x1ea007,
-0x1ea10b,
-0xce01d,
-0xcaffe,
-0x1ea30a,
-0xce03c,
-0xccdfd,
-0x1ea209,
-0xce02b,
-0xcdcfc,
-0x1ee008,
-0xcdbfb,
-0x1ea006,
-0xce303,
-0xcccfc,
-0xcdb3b,
-0xce013,
-0xccdfd,
-0xcdc3c,
-0x1ee009,
-0xcdbfb,
-0x1ea005,
-0xce013,
-0xcccfc,
-0xcdb3b,
-0x1ee00a,
-0xccbfb,
-0x1ee104,
-0xccbfb,
-0x16a201,
-0x16a301,
-0x16a001,
-0x16a101,
-0x3f3fff,
-0x371ff,
-0x1eac01,
-0x1ebc02,
-0x36ead2,
-0xeacff,
-0xeabff,
-0xea1f0,
-0xdafee,
-0xdefdd,
-0xdefcc,
-0xdefbb,
-0x1e3c02,
-0x1e7b01,
-0x34ead7,
-0x1ecc02,
-0x1edb01,
-0xdbf11,
-0x34eae3,
-0x33ead4,
-0xebefe,
-0xdbf11,
-0x34eae3,
-0x16a101,
-0x3f3fff,
-0xeabff,
-0xead00,
-0xeae00,
-0x33ead4,
-0x0,
-0x71,
-0x7f,
-0xda,
-0xfd,
-0x5c,
-0x98,
-0xd0,
-0x153,
-0x8e,
-0x86,
-0xa2,
-0xc6,
-0xbc,
-0x53,
-0x11b,
-0xad,
-0x187,
-0x107,
-0x111,
-0x17e,
-0xe7,
-0x125,
-0x4e,
-0x12f,
-0x18f,
-0x8006,
-0x800c,
-0x8012,
-0x8018,
-0x58a,
-0x58b,
-0x58c,
-0x58d,
-0x58c,
-0x58d,
-0x58e,
-0x58f,
-0x590,
-0x591,
-0x592,
-0x593,
-0x608,
-0x609,
-0x60a,
-0x60b,
-0x60c,
-0x60d,
-0x60e,
-0x60f,
-0x610,
-0x50,
-0x51,
-0x54,
-0x55,
-0x56,
-0x57,
-0x63,
-0x6b,
-0x6c,
-0x6d,
-0x6e,
-0x8ce,
-0x8cf,
-0x8d1,
-0x8d2,
-0x8d7,
-0x8d8,
-0x8e6,
-0x6a6,
-0x6a5,
-0x6a4,
-0x6f,
-0x6a3,
-0x6a2,
-0x6a1,
-0x6a7,
-0x6aa,
-0x6b3,
-0x6b4,
-0x6b5,
-0x6b6,
-0x6b7,
-0x6b8,
-0x6b9,
-0x6ba,
-0x6bb,
-0x6bc,
-0x6bd,
-0x6be,
-0x6bf,
-0x6c0,
-0x6c1,
-0x6c2,
-0x6c3,
-0x6c4,
-0x6ca,
-0x6cb,
-0x6cc,
-0x6a9,
-0x702,
-0x703,
-0x704,
-0x705,
-0x70d,
-0x70e,
-0x70f,
-0x710,
-0x711,
-0x712,
-0x713,
-0x714,
-0x724,
-0x73a,
-0x744,
-0x720,
-0x721,
-0x729,
-0x733,
-0x73f,
-0x741,
-0xd0c,
-0xb0a,
-0x908,
-0x0,
-0x1c1b,
-0x1a00,
-0x1000,
-0x2000,
-0x4000,
-0x8001,
-0x2,
-0x4,
-0x4,
-0x15,
-0x552a,
-0xaa55,
-0x5500,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x200,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x0,
-0x5358,
-0x3132,
-0x3631,
-0x2056,
-0x3141,
-0x2043,
-0x3030,
-0x3500,
-};
-
-#define PRAM_COUNT 6144
--- a/radio.h	Wed Oct 12 08:49:58 2016 +0000
+++ b/radio.h	Mon Sep 04 15:16:44 2017 +0000
@@ -1,4 +1,5 @@
 /*
+  ______                              _
  / _____)             _              | |
 ( (____  _____ ____ _| |_ _____  ____| |__
  \____ \| ___ |    (_   _) ___ |/ ___)  _ \
@@ -35,32 +36,49 @@
 /*!
  * \brief Structure describing the error codes for callback functions
  */
-enum IrqErrorCode_t
+typedef enum
 {
-    IRQ_HEADER_ERROR_CODE       = 0x01,
-    IRQ_SYNCWORD_ERROR_CODE     = 0x02,
-    IRQ_CRC_ERROR_CODE          = 0x04,
-};
+    IRQ_HEADER_ERROR_CODE                   = 0x01,
+    IRQ_SYNCWORD_ERROR_CODE                 = 0x02,
+    IRQ_CRC_ERROR_CODE                      = 0x04,
+}IrqErrorCode_t;
 
 
 enum IrqPblSyncHeaderCode_t
 {
-    IRQ_PBL_DETECT_CODE         = 0x01,
-    IRQ_SYNCWORD_VALID_CODE     = 0x02,
-    IRQ_HEADER_VALID_CODE       = 0x04,
+    IRQ_PBL_DETECT_CODE                     = 0x01,
+    IRQ_SYNCWORD_VALID_CODE                 = 0x02,
+    IRQ_HEADER_VALID_CODE                   = 0x04,
 };
 
 enum IrqTimeoutCode_t
 {
-    IRQ_RX_TIMEOUT              = 0x00,
-    IRQ_TX_TIMEOUT              = 0x01,
-    IRQ_XYZ                     = 0xFF,
+    IRQ_RX_TIMEOUT                          = 0x00,
+    IRQ_TX_TIMEOUT                          = 0x01,
+    IRQ_XYZ                                 = 0xFF,
 };
 
 /*!
  * \brief The radio command opcodes
  */
-enum RadioCommands_t;
+typedef enum RadioCommands_e RadioCommands_t;
+
+/*!
+ * \brief The radio callbacks structure
+ * Holds function pointers to be called on radio interrupts
+ */
+typedef struct
+{
+    void ( *txDone )( void );                       //!< Pointer to a function run on successful transmission
+    void ( *rxDone )( void );                       //!< Pointer to a function run on successful reception
+    void ( *rxPreambleDetect )( void );             //!< Pointer to a function run on successful Preamble detection
+    void ( *rxSyncWordDone )( void );               //!< Pointer to a function run on successful SyncWord reception
+    void ( *rxHeaderDone )( void );                 //!< Pointer to a function run on successful Header reception
+    void ( *txTimeout )( void );                    //!< Pointer to a function run on transmission timeout
+    void ( *rxTimeout )( void );                    //!< Pointer to a function run on reception timeout
+    void ( *rxError )( IrqErrorCode_t errCode );    //!< Pointer to a function run on reception error
+    void ( *cadDone )( bool cadFlag );              //!< Pointer to a function run on channel activity detected
+}RadioCallbacks_t;
 
 /*!
  * \brief Class holding the basic communications with a radio
@@ -76,29 +94,42 @@
     /*!
      * \brief Callback on Tx done interrupt
      */
-    void ( *txDone )( );
+    void ( *txDone )( void );
 
     /*!
      * \brief Callback on Rx done interrupt
      */
-    void ( *rxDone )( );
+    void ( *rxDone )( void );
+
+    /*!
+     * \brief Callback on Rx preamble detection interrupt
+     */
+    void ( *rxPreambleDetect )( void );
+
+    /*!
+     * \brief Callback on Rx SyncWord interrupt
+     */
+    void ( *rxSyncWordDone )( void );
 
     /*!
-     * \brief Callback on Rx SyncWord done interrupt
+     * \brief Callback on Rx header received interrupt
      */
-    void ( *rxPblSyncWordHeader )( IrqPblSyncHeaderCode_t val );
+    void ( *rxHeaderDone )( void );
 
     /*!
-     * \brief Callback on Rx Tx timeout interrupt
-     *
-     * \param [out] errCode       A code indicating the source of the Timeout interrupt
+     * \brief Callback on Tx timeout interrupt
      */
-    void ( *rxTxTimeout )( IrqTimeoutCode_t timeoutCode );
+    void ( *txTimeout )( void );
+
+    /*!
+     * \brief Callback on Rx timeout interrupt
+     */
+    void ( *rxTimeout )( void );
 
     /*!
      * \brief Callback on Rx error interrupt
      *
-     * \param [out] errCode       A code indicating the type of interrupt ( SyncWord error or CRC error)
+     * \param [out] errCode       A code indicating the type of interrupt (SyncWord error or CRC error)
      */
     void ( *rxError )( IrqErrorCode_t errCode );
 
@@ -112,21 +143,25 @@
 public:
     /*!
      * \brief Constructor for radio class
+     * Sets the callbacks functions pointers
      *
-     * Sets the callbacks functions pointers
+     * \param [in]  callbacks     The structure of callbacks function pointers
+     *                            to be called on radio interrupts
+     *
      */
-    Radio( void ( *txDone )( ), void ( *rxDone )( ), void ( *rxPblSyncWordHeader )(IrqPblSyncHeaderCode_t val ),
-           void ( *rxTxTimeout )( IrqTimeoutCode_t timeoutCode ), void ( *rxError )( IrqErrorCode_t errorCode ),
-           void ( *cadDone )( bool channelActivityDetected ) )
+    Radio( RadioCallbacks_t *callbacks )
     {
-        this->txDone = txDone;
-        this->rxDone = rxDone;
-        this->rxPblSyncWordHeader = rxPblSyncWordHeader;
-        this->rxTxTimeout = rxTxTimeout;
-        this->rxError = rxError;
-        this->cadDone = cadDone;
+        this->txDone = callbacks->txDone;
+        this->rxDone = callbacks->rxDone;
+        this->rxPreambleDetect = callbacks->rxPreambleDetect;
+        this->rxSyncWordDone = callbacks->rxSyncWordDone;
+        this->rxHeaderDone = callbacks->rxHeaderDone;
+        this->txTimeout = callbacks->txTimeout;
+        this->rxTimeout = callbacks->rxTimeout;
+        this->rxError = callbacks->rxError;
+        this->cadDone = callbacks->cadDone;
     }
-    virtual ~Radio( ){ };
+    virtual ~Radio( void ){ };
 
     /*!
      * \brief Resets the radio
@@ -173,7 +208,7 @@
      * \param [in]  address       Register address
      * \param [in]  value         New register value
      */
-    virtual void WriteRegister( uint16_t address, uint8_t value ) = 0;
+    virtual void WriteReg( uint16_t address, uint8_t value ) = 0;
 
     /*!
      * \brief Reads multiple radio registers starting at address
@@ -191,7 +226,7 @@
      *
      * \retval      value         The register value
      */
-    virtual uint8_t ReadRegister( uint16_t address ) = 0;
+    virtual uint8_t ReadReg( uint16_t address ) = 0;
 
     /*!
      * \brief Writes Radio Data Buffer with buffer of size starting at offset.
@@ -210,13 +245,6 @@
      * \param [in]  size          Buffer size
      */
     virtual void ReadBuffer( uint8_t offset, uint8_t *buffer, uint8_t size ) = 0;
-
-    /*!
-     * \brief Return firmware version
-     *
-     * \retval      firmware      The firmware version
-     */
-    virtual uint16_t GetFirmwareVersion( void ) = 0;
 };
 
 #endif // __RADIO_H__
--- a/sx126x-hal.cpp	Wed Oct 12 08:49:58 2016 +0000
+++ b/sx126x-hal.cpp	Mon Sep 04 15:16:44 2017 +0000
@@ -14,63 +14,85 @@
 */
 #include "sx126x-hal.h"
 
-#define V1A_WORKAROUNDS
+/*!
+ * \brief Helper macro to create Interrupt objects only if the pin name is
+ *        different from NC
+ */
+#define CreateDioPin( pinName, dio )                 \
+            if( pinName == NC )                      \
+            {                                        \
+                dio = NULL;                          \
+            }                                        \
+            else                                     \
+            {                                        \
+                dio = new InterruptIn( pinName );    \
+            }
+
+/*!
+ * \brief Helper macro to avoid duplicating code for setting dio pins parameters
+ */
+#define DioAssignCallback( dio, pinMode, callback )                    \
+            if( dio != NULL )                                          \
+            {                                                          \
+                dio->mode( pinMode );                                  \
+                dio->rise( this, static_cast <Trigger>( callback ) );  \
+            }
 
 /*!
  * \brief Used to block execution waiting for low state on radio busy pin.
- *        Essentially used in SPI communications
  */
-#define WaitBusy( )          while( BUSY == 1 ){ }
-
-
+#define WaitOnBusy( )             while( BUSY == 1 ){ }
 
 /*!
- * \brief Blocking routine for waiting the UART to be writeable
- *
+ * \brief Used to block execution to give enough time to Busy to go up
  */
-#define WaitUartWritable( )  while( RadioUart->writeable( ) == false ){ }
+#define WaitOnCounter( )          for( uint8_t counter = 0; counter < 15; counter++ ) \
+                                  {  __nop( ); }
 
-/*!
- * \brief Blocking routine for waiting the UART to be readable
- *
- */
-#define WaitUartReadable( )  while( RadioUart->readable( ) == false ){ }
+                                  
+// This code handles cases where assert_param is undefined
+#ifndef assert_param
+#define assert_param( ... )
+#endif
 
-SX126xHal::SX126xHal( PinName mosi, PinName miso, PinName sclk, PinName nss, PinName busy, PinName dio1, PinName dio2, PinName dio3, PinName rst,
-                            void ( *txDone )( ), void ( *rxDone )( ), void ( *rxPblSyncWordHeader )( IrqPblSyncHeaderCode_t val ),
-                            void ( *rxTxTimeout )( IrqTimeoutCode_t timeoutCode ), void ( *rxError )( IrqErrorCode_t errorCode ), void ( *cadDone )( bool channelActivityDetected ),
-                            void ( *onDioIrq )( ) )
-        :   SX126x( txDone, rxDone, rxPblSyncWordHeader, rxTxTimeout,  rxError, cadDone, onDioIrq ),
+SX126xHal::SX126xHal( PinName mosi, PinName miso, PinName sclk, PinName nss,
+                      PinName busy, PinName dio1, PinName dio2, PinName dio3, PinName rst,
+                      PinName deviceSelect, PinName antSwPower, RadioCallbacks_t *callbacks )
+        :   SX126x( callbacks ),
             RadioNss( nss ),
             RadioReset( rst ),
             BUSY( busy ),
-            DIO1( dio1 ),
-            DIO2( dio2 ),
-            DIO3( dio3 )
+            DeviceSelect( deviceSelect ),
+            antSwitchPower( antSwPower )
 {
+    CreateDioPin( dio1, DIO1 );
+    CreateDioPin( dio2, DIO2 );
+    CreateDioPin( dio3, DIO3 );
     RadioSpi = new SPI( mosi, miso, sclk );
-    RadioUart = NULL;
 
     RadioNss = 1;
     RadioReset = 1;
 }
 
-SX126xHal::SX126xHal( PinName tx, PinName rx, PinName busy, PinName dio1, PinName dio2, PinName dio3, PinName rst,
-                            void ( *txDone )( ), void ( *rxDone )( ), void ( *rxPblSyncWordHeader )( IrqPblSyncHeaderCode_t val ),
-                            void ( *rxTxTimeout )( IrqTimeoutCode_t timeoutCode ), void ( *rxError )( IrqErrorCode_t errorCode ), void ( *cadDone )( bool channelActivityDetected ),
-                            void ( *onDioIrq )( ) )
-        :   SX126x( txDone, rxDone, rxPblSyncWordHeader, rxTxTimeout, rxError, cadDone, onDioIrq ),
-            RadioNss( NC ),
-            RadioReset( rst ),
-            BUSY( busy ),
-            DIO1( dio1 ),
-            DIO2( dio2 ),
-            DIO3( dio3 )
+SX126xHal::~SX126xHal( void )
 {
-    RadioSpi = NULL;
-    RadioUart = new Serial( tx, rx );
-    RadioReset = 1;
-}
+    if( this->RadioSpi != NULL )
+    {
+        delete RadioSpi;
+    }
+    if( DIO1 != NULL )
+    {
+        delete DIO1;
+    }
+    if( DIO2 != NULL )
+    {
+        delete DIO2;
+    }
+    if( DIO3 != NULL )
+    {
+        delete DIO3;
+    }
+};
 
 void SX126xHal::SpiInit( void )
 {
@@ -81,105 +103,40 @@
     wait( 0.1 );
 }
 
-void SX126xHal::UartInit( void )
-{
-    RadioUart->format( 9, SerialBase::Even, 1 ); // 8 data bits + 1 even parity bit + 1 stop bit
-    RadioUart->baud( 115200 );
-
-    // By default the SX126x UART is setup to handle bytes MSB first.
-    // In order to setup the radio to use the UART standard way we first send
-    // the equivalent of a WriteRegister with reversed bit order in order to
-    // change the endianness.
-    //@todo 
-    /*uint8_t regVal = 0;
-    RadioUart->putc( 0x98 );            // Reversed opcode for read register (0x19)
-    RadioUart->putc( 0x10 );            // Reversed MSB register address (0x08)
-    RadioUart->putc( 0x18 );            // Reversed LSB register address (0x18)
-    RadioUart->putc( 0x80 );            // Reversed value for reading only 1 byte (0x01)
-    regVal = RadioUart->getc( )& 0xF3;  // Read reversed value and mask it
-
-    RadioUart->putc( 0x18 );            // Reversed opcode for read register (0x18)
-    RadioUart->putc( 0x10 );            // Reversed MSB register address (0x08)
-    RadioUart->putc( 0x18 );            // Reversed LSB register address (0x18)
-    RadioUart->putc( 0x80 );            // Reversed value for writing only 1 byte (0x01)
-    RadioUart->putc( regVal );          // The new value of the register*/
-
-    // After this point, the UART is running standard mode: 8 data bit, 1 even
-    // parity bit, 1 stop bit, 115200 baud, LSB first
-    wait_us( 10 );
-}
 
 void SX126xHal::IoIrqInit( DioIrqHandler irqHandler )
 {
-    assert_param( RadioSpi != 0 || RadioUart != 0 );
+    assert_param( RadioSpi != NULL );
     if( RadioSpi != NULL )
     {
         SpiInit( );
     }
-    if( RadioUart != NULL )
-    {
-        UartInit( );
-    }
 
-    BUSY.mode( PullDown );
-    DIO1.mode( PullDown );
-    DIO2.mode( PullDown );
-    DIO3.mode( PullDown );
+    BUSY.mode( PullNone );
+    DioAssignCallback( DIO1, PullNone, irqHandler );
+//    DioAssignCallback( DIO2, PullNone, irqHandler );
+//    DioAssignCallback( DIO3, PullNone, irqHandler );
 
-    DIO1.rise( this, static_cast <Trigger>( irqHandler ) );
-    DIO2.rise( this, static_cast <Trigger>( irqHandler ) );
-    DIO3.rise( this, static_cast <Trigger>( irqHandler ) );
 }
 
 void SX126xHal::Reset( void )
 {
     __disable_irq( );
-    wait( 0.05 );
+    wait_ms( 20 );
+    RadioReset.output( );
     RadioReset = 0;
-    wait( 0.1 );
+    wait_ms( 50 );
     RadioReset = 1;
-    wait( 0.05 );
+    RadioReset.input( ); // Using the internal pull-up
+    wait_ms( 20 );
     __enable_irq( );
 }
 
-void SX126xHal::ClearInstructionRam( void )
-{
-    // Clearing the instruction RAM is writing 0x00s on every bytes of the
-    // instruction RAM
-    WaitBusy( );
-
-    if( RadioSpi != NULL )
-    {
-        RadioNss = 0;
-        RadioSpi->write( RADIO_WRITE_REGISTER );                 // Send write register opcode
-        RadioSpi->write( ( IRAM_START_ADDRESS >> 8 ) & 0x00FF ); // Send MSB of the first byte address
-        RadioSpi->write( IRAM_START_ADDRESS & 0x00FF );          // Send LSB of the first byte address
-
-        for( uint16_t address = IRAM_START_ADDRESS; address < ( IRAM_START_ADDRESS + IRAM_SIZE ); address++ )
-        {
-            RadioSpi->write( 0x00 );
-        }
-        RadioNss = 1;
-    }
-    if( RadioUart != NULL )
-    {
-        // We can't erase the whole instruction RAM in one shot with UART
-        // because we need to send the length of register to erase
-        // and this length is coded on 1 byte.
-        for( uint16_t address = IRAM_START_ADDRESS; address < ( IRAM_START_ADDRESS + IRAM_SIZE ); address++ )
-        {
-            WriteRegister( address, 0 );
-        }
-    }
-
-    WaitBusy( );
-}
-
 void SX126xHal::Wakeup( void )
 {
     __disable_irq( );
 
-    //Don't wait for DIO0 here
+    //Don't wait for BUSY here
 
     if( RadioSpi != NULL )
     {
@@ -188,33 +145,27 @@
         RadioSpi->write( 0 );
         RadioNss = 1;
     }
-    if( RadioUart != NULL )
-    {
-        RadioUart->putc( RADIO_GET_STATUS );
-        WaitUartReadable( );
-        RadioUart->getc( );
-    }
 
     // Wait for chip to be ready.
-    WaitBusy( );
-    
-    #ifdef V1A_WORKAROUNDS
-    //V1a workaround: rc64k not enabled after warm_start, rtc_wake_up=0
-    WriteRegister(0x91e, ReadRegister(0x91e) | 0x40);
-    //rc13m enable bug
-    uint8_t txFallbackFunc[2];
-    //set to  ModeTx2Rc addr = 0fce, so rc is not enabled before ramp down
-    txFallbackFunc[0] = 0x0f;
-    txFallbackFunc[1] = 0xce;
-    WriteRegister(0x00CC, txFallbackFunc, 2);
-    #endif
+    WaitOnBusy( );
 
     __enable_irq( );
+    
+    AntSwOn( );
 }
 
 void SX126xHal::WriteCommand( RadioCommands_t command, uint8_t *buffer, uint16_t size )
 {
-    WaitBusy( );
+#ifdef ADV_DEBUG
+    printf("cmd: 0x%02x", command );
+    for( uint8_t i = 0; i < size; i++ )
+    {
+        printf("-%02x", buffer[i] );
+    }
+    printf("\n\r");
+#endif
+    
+    WaitOnBusy( );
 
     if( RadioSpi != NULL )
     {
@@ -226,28 +177,12 @@
         }
         RadioNss = 1;
     }
-    if( RadioUart != NULL )
-    {
-        RadioUart->putc( command );
-        if( size > 0 )
-        {
-            RadioUart->putc( size );
-            for( uint16_t i = 0; i < size; i++ )
-            {
-                RadioUart->putc( buffer[i] );
-            }
-        }
-    }
-
-    if( command != RADIO_SET_SLEEP )
-    {
-        WaitBusy( );
-    }
+    WaitOnCounter( );
 }
 
 void SX126xHal::ReadCommand( RadioCommands_t command, uint8_t *buffer, uint16_t size )
 {
-    WaitBusy( );
+    WaitOnBusy( );
 
     if( RadioSpi != NULL )
     {
@@ -260,37 +195,11 @@
         }
         RadioNss = 1;
     }
-    else if( RadioUart != NULL )
-    {
-        RadioUart->putc( command );
-
-        // Behavior on the UART is different depending of the opcode command
-        if( ( command == RADIO_GET_PACKETTYPE ) ||
-            ( command == RADIO_GET_RXBUFFERSTATUS ) ||
-            ( command == RADIO_GET_RSSIINST ) ||
-            ( command == RADIO_GET_PACKETSTATUS ) ||
-            ( command == RADIO_GET_IRQSTATUS ) )
-        {
-            RadioUart->putc( size );
-        }
-
-        WaitUartReadable( );
-        for( uint16_t i = 0; i < size; i++ )
-        {
-             buffer[i] = RadioUart->getc( );
-        }
-    }
-    else
-    {
-        buffer[0] = 0xFF;
-    }
-
-    WaitBusy( );
 }
 
 void SX126xHal::WriteRegister( uint16_t address, uint8_t *buffer, uint16_t size )
 {
-    WaitBusy( );
+    WaitOnBusy( );
 
     if( RadioSpi != NULL )
     {
@@ -304,61 +213,16 @@
         }
         RadioNss = 1;
     }
-    if( RadioUart != NULL )
-    {
-        RadioUart->putc( RADIO_WRITE_REGISTER );
-        RadioUart->putc( ( address & 0xFF00 ) >> 8 );
-        RadioUart->putc( address & 0x00FF );
-        RadioUart->putc( size );
-        for( uint16_t i = 0; i < size; i++ )
-        {
-            RadioUart->putc( buffer[i] );
-        }
-    }
-
-    WaitBusy( );
 }
 
-void SX126xHal::WriteRegisterNoBusy( uint16_t address, uint8_t *buffer, uint16_t size )
-{
-    if( RadioSpi != NULL )
-    {
-        RadioNss = 0;
-        RadioSpi->write( RADIO_WRITE_REGISTER );
-        RadioSpi->write( ( address & 0xFF00 ) >> 8 );
-        RadioSpi->write( address & 0x00FF );
-        for( uint16_t i = 0; i < size; i++ )
-        {
-            RadioSpi->write( buffer[i] );
-        }
-        RadioNss = 1;
-    }
-    if( RadioUart != NULL )
-    {
-        RadioUart->putc( RADIO_WRITE_REGISTER );
-        RadioUart->putc( ( address & 0xFF00 ) >> 8 );
-        RadioUart->putc( address & 0x00FF );
-        RadioUart->putc( size );
-        for( uint16_t i = 0; i < size; i++ )
-        {
-            RadioUart->putc( buffer[i] );
-        }
-    }
-}
-
-void SX126xHal::WriteRegister( uint16_t address, uint8_t value )
+void SX126xHal::WriteReg( uint16_t address, uint8_t value )
 {
     WriteRegister( address, &value, 1 );
 }
 
-void SX126xHal::WriteRegisterNoBusy( uint16_t address, uint8_t value )
-{
-    WriteRegisterNoBusy( address, &value, 1 );
-}
-
 void SX126xHal::ReadRegister( uint16_t address, uint8_t *buffer, uint16_t size )
 {
-    WaitBusy( );
+    WaitOnBusy( );
 
     if( RadioSpi != NULL )
     {
@@ -373,54 +237,9 @@
         }
         RadioNss = 1;
     }
-    if( RadioUart != NULL )
-    {
-        RadioUart->putc( RADIO_READ_REGISTER );
-        RadioUart->putc( ( address & 0xFF00 ) >> 8 );
-        RadioUart->putc( address & 0x00FF );
-        RadioUart->putc( size );
-        WaitUartReadable( );
-        for( uint16_t i = 0; i < size; i++ )
-        {
-            buffer[i] = RadioUart->getc( );
-        }
-    }
-
-    WaitBusy( );
 }
 
-void SX126xHal::ReadRegisterNoBusy( uint16_t address, uint8_t *buffer, uint16_t size )
-{
-
-    if( RadioSpi != NULL )
-    {
-        RadioNss = 0;
-        RadioSpi->write( RADIO_READ_REGISTER );
-        RadioSpi->write( ( address & 0xFF00 ) >> 8 );
-        RadioSpi->write( address & 0x00FF );
-        RadioSpi->write( 0 );
-        for( uint16_t i = 0; i < size; i++ )
-        {
-            buffer[i] = RadioSpi->write( 0 );
-        }
-        RadioNss = 1;
-    }
-    if( RadioUart != NULL )
-    {
-        RadioUart->putc( RADIO_READ_REGISTER );
-        RadioUart->putc( ( address & 0xFF00 ) >> 8 );
-        RadioUart->putc( address & 0x00FF );
-        RadioUart->putc( size );
-        WaitUartReadable( );
-        for( uint16_t i = 0; i < size; i++ )
-        {
-            buffer[i] = RadioUart->getc( );
-        }
-    }
-
-}
-
-uint8_t SX126xHal::ReadRegister( uint16_t address )
+uint8_t SX126xHal::ReadReg( uint16_t address )
 {
     uint8_t data;
 
@@ -428,17 +247,9 @@
     return data;
 }
 
-uint8_t SX126xHal::ReadRegisterNoBusy( uint16_t address )
-{
-    uint8_t data;
-
-    ReadRegisterNoBusy( address, &data, 1 );
-    return data;
-}
-
 void SX126xHal::WriteBuffer( uint8_t offset, uint8_t *buffer, uint8_t size )
 {
-    WaitBusy( );
+    WaitOnBusy( );
 
     if( RadioSpi != NULL )
     {
@@ -451,23 +262,11 @@
         }
         RadioNss = 1;
     }
-    if( RadioUart != NULL )
-    {
-        RadioUart->putc( RADIO_WRITE_BUFFER );
-        RadioUart->putc( offset );
-        RadioUart->putc( size );
-        for( uint16_t i = 0; i < size; i++ )
-        {
-            RadioUart->putc( buffer[i] );
-        }
-    }
-
-    WaitBusy( );
 }
 
 void SX126xHal::ReadBuffer( uint8_t offset, uint8_t *buffer, uint8_t size )
 {
-    WaitBusy( );
+    WaitOnBusy( );
 
     if( RadioSpi != NULL )
     {
@@ -481,24 +280,24 @@
         }
         RadioNss = 1;
     }
-    if( RadioUart != NULL )
-    {
-        RadioUart->putc( RADIO_READ_BUFFER );
-        RadioUart->putc( offset );
-        RadioUart->putc( size );
-        WaitUartReadable( );
-        for( uint16_t i = 0; i < size; i++ )
-        {
-            buffer[i] = RadioUart->getc( );
-        }
-    }
-
-    WaitBusy( );
 }
 
 uint8_t SX126xHal::GetDioStatus( void )
 {
-    return ( DIO3 << 3 ) | ( DIO2 << 2 ) | ( DIO1 << 1 ) | ( BUSY << 0 );
+    return ( *DIO3 << 3 ) | ( *DIO2 << 2 ) | ( *DIO1 << 1 ) | ( BUSY << 0 );
+}
+
+uint8_t SX126xHal::GetDeviceType( void )
+{
+    return( DeviceSelect.read( ) );
 }
 
+void SX126xHal::AntSwOn( void )
+{
+    antSwitchPower = 1;
+}
 
+void SX126xHal::AntSwOff( void )
+{
+    antSwitchPower = 0;
+}
--- a/sx126x-hal.h	Wed Oct 12 08:49:58 2016 +0000
+++ b/sx126x-hal.h	Mon Sep 04 15:16:44 2017 +0000
@@ -1,4 +1,5 @@
 /*
+  ______                              _
  / _____)             _              | |
 ( (____  _____ ____ _| |_ _____  ____| |__
  \____ \| ___ |    (_   _) ___ |/ ___)  _ \
@@ -10,7 +11,7 @@
 
 License: Revised BSD License, see LICENSE.TXT file include in the project
 
-Maintainer: Miguel Luis and Gregory Cristian
+Maintainer: Miguel Luis, Gregory Cristian & Gilbert Menth
 */
 #ifndef __SX126x_HAL_H__
 #define __SX126x_HAL_H__
@@ -20,10 +21,10 @@
 /*!
  * \brief The default value of SPI clock
  */
-#define SX126x_SPI_FREQ_DEFAULT                  1000000 // 16000000
+#define SX126x_SPI_FREQ_DEFAULT                  16000000 
 
 /*!
- * \brief Actual implementation of a SX1280 radio
+ * \brief Actual implementation of a SX126x radio
  */
 class SX126xHal : public SX126x
 {
@@ -33,37 +34,16 @@
      *
      * Represents the physical connectivity with the radio and set callback functions on radio interrupts
      */
-    SX126xHal( PinName mosi, PinName miso, PinName sclk, PinName nss, PinName busy, PinName dio1, PinName dio2, PinName dio3, PinName rst,
-                  void ( *txDone )( ), void ( *rxDone )( ), void ( *rxPblSyncWordHeader )( IrqPblSyncHeaderCode_t val ),
-                  void ( *rxTxTimeout )( IrqTimeoutCode_t timeoutCode ),void ( *rxError )( IrqErrorCode_t errorCode ), void ( *cadDone )( bool channelActivityDetected ),
-                  void ( *onDioIrq )( ) );
+    SX126xHal( PinName mosi, PinName miso, PinName sclk, PinName nss,
+               PinName busy, PinName dio1, PinName dio2, PinName dio3, PinName rst,
+               PinName deviceSelect, PinName antSwPower, RadioCallbacks_t *callbacks );
 
     /*!
-     * \brief Constructor for SX126xHal with UART support
-     *
-     * Represents the physical connectivity with the radio and set callback functions on radio interrupts
-     */
-    SX126xHal( PinName tx, PinName rx, PinName busy, PinName dio1, PinName dio2, PinName dio3, PinName rst,
-                  void ( *txDone )( ), void ( *rxDone )( ), void ( *rxPblSyncWordHeader )( IrqPblSyncHeaderCode_t val ),
-                  void ( *rxTxTimeout )( IrqTimeoutCode_t timeoutCode ), void ( *rxError )( IrqErrorCode_t errorCode ), void ( *cadDone )( bool channelActivityDetected ),
-                  void ( *onDioIrq )( ) );
-
-    /*!
-     * \brief Destructor for SX126xHal with UART support
+     * \brief Destructor for SX126xHal
      *
      * Take care of the correct destruction of the communication objects
      */
-    virtual ~SX126xHal( )
-    {
-        if( this->RadioSpi != 0 )
-        {
-            delete RadioSpi;
-        }
-        if( this->RadioUart != 0 )
-        {
-            delete RadioUart;
-        }
-    };
+    virtual ~SX126xHal( void );
 
     /*!
      * \brief Soft resets the radio
@@ -71,11 +51,6 @@
     virtual void Reset( void );
 
     /*!
-     * \brief Clears the instruction ram memory block
-     */
-    virtual void ClearInstructionRam( void );
-
-    /*!
      * \brief Wakes up the radio
      */
     virtual void Wakeup( void );
@@ -106,9 +81,6 @@
      * \param [in]  size          The number of bytes to write in radio's memory
      */
     virtual void WriteRegister( uint16_t address, uint8_t *buffer, uint16_t size );
-    
-    virtual void WriteRegisterNoBusy( uint16_t address, uint8_t *buffer, uint16_t size );
-    
 
     /*!
      * \brief Write a single byte of data to the radio memory
@@ -116,9 +88,7 @@
      * \param [in]  address       The address of the first byte to write in the radio
      * \param [in]  value         The data to be written in radio's memory
      */
-    virtual void WriteRegister( uint16_t address, uint8_t value );
-    
-    virtual void WriteRegisterNoBusy( uint16_t address, uint8_t value );
+    virtual void WriteReg( uint16_t address, uint8_t value );
 
     /*!
      * \brief Read data from the radio memory
@@ -128,7 +98,6 @@
      * \param [in]  size          The number of bytes to read from radio's memory
      */
     virtual void ReadRegister( uint16_t address, uint8_t *buffer, uint16_t size );
-    virtual void ReadRegisterNoBusy( uint16_t address, uint8_t *buffer, uint16_t size );
 
     /*!
      * \brief Read a single byte of data from the radio memory
@@ -139,15 +108,13 @@
      * \retval      value         The value of the byte at the given address in
      *                            radio's memory
      */
-    virtual uint8_t ReadRegister( uint16_t address );
-    virtual uint8_t ReadRegisterNoBusy( uint16_t address );
-    
+    virtual uint8_t ReadReg( uint16_t address );
 
     /*!
      * \brief Write data to the buffer holding the payload in the radio
      *
      * \param [in]  offset        The offset to start writing the payload
-     * \param [in]  buffer        The data to be written (aka payload)
+     * \param [in]  buffer        The data to be written (the payload)
      * \param [in]  size          The number of byte to be written
      */
     virtual void WriteBuffer( uint8_t offset, uint8_t *buffer, uint8_t size );
@@ -165,21 +132,39 @@
      * \brief Returns the status of DIOs pins
      *
      * \retval      dioStatus     A byte where each bit represents a DIO state:
-     *                            [ DIO3 | DIO2 | DIO1 | DIO0 ]
+     *                            [ DIO3 | DIO2 | DIO1 | BUSY ]
      */
     virtual uint8_t GetDioStatus( void );
 
+    /*!
+     * \brief Returns the device type
+     *
+     * \retval      1: SX1261, 0: sx1262     
+     */
+    virtual uint8_t GetDeviceType( void );
+
+    /*!
+     * \brief RF Switch power on
+     */
+    virtual void AntSwOn( void );
+
+    /*!
+     * \brief RF Switch power off
+     */
+    virtual void AntSwOff( void );
+
 protected:
 
     SPI *RadioSpi;                                  //!< The SPI object used to communicate with the radio
-    Serial *RadioUart;                              //!< The UART object used to communicate with the radio
-    DigitalOut RadioNss;                            //!< The pin connected to Radio chip select
-    DigitalOut RadioReset;                          //!< The reset pin connected to the radio
-    DigitalIn BUSY;                                 //!< The pin connected to DIO0 of the radio (aka busy pin)
+    DigitalOut RadioNss;                            //!< The pin connected to Radio chip select (active low)
+    DigitalInOut RadioReset;                        //!< The reset pin connected to the radio
 
-    InterruptIn DIO1;                               //!< The pin connected to DIO1
-    InterruptIn DIO2;                               //!< The pin connected to DIO2
-    InterruptIn DIO3;                               //!< The pin connected to DIO3
+    DigitalIn    BUSY;                              //!< The pin connected to BUSY
+    InterruptIn *DIO1;                              //!< The pin connected to DIO1
+    InterruptIn *DIO2;                              //!< The pin connected to DIO2
+    InterruptIn *DIO3;                              //!< The pin connected to DIO3
+    DigitalIn    DeviceSelect;                      //!< The pin connected to a pull-up/down to select device
+    DigitalOut   antSwitchPower;                    //!< The pin connected to the RF Switch Power
 
     /*!
      * \brief Initializes SPI object used to communicate with the radio
@@ -187,11 +172,6 @@
     virtual void SpiInit( void );
 
     /*!
-     * \brief Initializes UART object used to communicate with the radio
-     */
-    virtual void UartInit( void );
-
-    /*!
      * \brief Sets the callback functions to be run on DIO1..3 interrupt
      *
      * \param [in]  irqHandler    A function pointer of the function to be run on every DIO interrupt
--- a/sx126x.cpp	Wed Oct 12 08:49:58 2016 +0000
+++ b/sx126x.cpp	Mon Sep 04 15:16:44 2017 +0000
@@ -1,26 +1,24 @@
 /*
+  ______                              _
  / _____)             _              | |
 ( (____  _____ ____ _| |_ _____  ____| |__
  \____ \| ___ |    (_   _) ___ |/ ___)  _ \
  _____) ) ____| | | || |_| ____( (___| | | |
 (______/|_____)_|_|_| \__)_____)\____)_| |_|
-    (C)2016 Semtech
+    (C)2017 Semtech
 
-Description: Handling of the node configuration protocol
+Description: Generic SX126x driver implementation
 
 License: Revised BSD License, see LICENSE.TXT file include in the project
 
-Maintainer: Miguel Luis, Gregory Cristian and Matthieu Verdy
+Authors: Miguel Luis, Gregory Cristian
 */
 #include "mbed.h"
 #include "sx126x.h"
 #include "sx126x-hal.h"
 
-#include "pram_c005.h"
-
 /*!
- * Radio registers definition
- *
+ * \brief Radio registers definition
  */
 typedef struct
 {
@@ -28,424 +26,77 @@
     uint8_t       Value;                            //!< The value of the register
 }RadioRegisters_t;
 
-// [TODO] Is this also applicable for the V2 version of the chip
 /*!
- * \brief Radio hardware registers initialization definition
+ * \brief Stores the last frequency error measured on LoRa received packet
  */
-// { Address, RegValue }
-
-#define RADIO_INIT_REGISTERS_VALUE \
-{                                  \
-    { 0x0722, 0x53 },              \
-    { 0x0889, 0x01 },              \
-}
-
-/*!
- * \brief Radio hardware registers initialization
- */
-const RadioRegisters_t RadioRegsInit[] = RADIO_INIT_REGISTERS_VALUE;
+volatile uint32_t FrequencyError = 0;
 
 void SX126x::Init( void )
 {
+    /*!
+     * \brief pin OPT is used to detect if the board has a TCXO or a XTAL
+     *
+     * OPT = 0 >> TCXO; OPT = 1 >> XTAL
+     */
+    DigitalIn OPT( A3 );
+    
     Reset( );
+
     IoIrqInit( dioIrq );
+
     Wakeup( );
-/****************************************************/
     SetStandby( STDBY_RC );
-    WriteRegister( 0x610, 0x10 );
-    for( uint16_t i = 0; i < PRAM_COUNT; i++ )
+
+    if( OPT == 0 )
     {
-        uint32_t val = pram[i];
-        WriteRegister( 0x8000 + 4 * i, 0 );
-        WriteRegister( 0x8001 + 4 * i, ( val >> 16 ) & 0xff );
-        WriteRegister( 0x8002 + 4 * i, ( val >> 8 ) & 0xff  );
-        WriteRegister( 0x8003 + 4 * i, val & 0xff );
+        SetDio3AsTcxoCtrl( TCXO_CTRL_1_7V, 6400 ); //100 ms
+        WriteReg( REG_XTA_TRIM, 0x2F );
     }
-    WriteRegister( 0x610, 0x00 );
-    WriteCommand( RADIO_SET_PRAMSWAPCMD, ( uint8_t[] ) { 2 } , 1 );  //  RADIO_SET_PRAMSWAPCMD      = 0x8D,
-/****************************************************/
-    SetRegistersDefault( );
-}
+
+    SetPollingMode( );
+    
+    AntSwOn( );
+    SetDio2AsRfSwitchCtrl( true );
+
+    SetPacketType( PACKET_TYPE_LORA );
 
-void SX126x::SetRegistersDefault( void )
-{
-    for( uint8_t i = 0; i < sizeof( RadioRegsInit ) / sizeof( RadioRegisters_t ); i++ )
-    {
-        WriteRegister( RadioRegsInit[i].Addr, RadioRegsInit[i].Value );
-    }
+#ifdef USE_CONFIG_PUBLIC_NETOWRK
+    // Change LoRa modem Sync Word for Public Networks
+    WriteReg( REG_LR_SYNCWORD, ( LORA_MAC_PUBLIC_SYNCWORD >> 8 ) & 0xFF );
+    WriteReg( REG_LR_SYNCWORD + 1, LORA_MAC_PUBLIC_SYNCWORD & 0xFF );
+#else
+    // Change LoRa modem SyncWord for Private Networks
+    WriteReg( REG_LR_SYNCWORD, ( LORA_MAC_PRIVATE_SYNCWORD >> 8 ) & 0xFF );
+    WriteReg( REG_LR_SYNCWORD + 1, LORA_MAC_PRIVATE_SYNCWORD & 0xFF );
+#endif
 }
 
-uint16_t SX126x::GetFirmwareVersion( void )
-{
-    return( ( ( ReadRegister( 0xA8 ) ) << 8 ) | ( ReadRegister( 0xA9 ) ) );
-}
-
-RadioStatus_t SX126x::GetStatus( void )
+RadioOperatingModes_t SX126x::GetOperatingMode( void )
 {
-    uint8_t stat = 0;
-    RadioStatus_t status;
-
-    ReadCommand( RADIO_GET_STATUS, ( uint8_t * )&stat, 1 );
-    status.Value = stat;
-    
-    
-    return( status );
+    return OperatingMode;
 }
 
-void SX126x::SetSleep( SleepParams_t sleepConfig )
-{
-
-    WriteCommand( RADIO_SET_SLEEP, &sleepConfig.Value, 1 );
-    OperatingMode = MODE_SLEEP;
-}
-
-void SX126x::SetStandby( RadioStandbyModes_t standbyConfig )
+void SX126x::CheckDeviceReady( void )
 {
-    WriteCommand( RADIO_SET_STANDBY, ( uint8_t* )&standbyConfig, 1 );
-    if( standbyConfig == STDBY_RC )
+    if( ( GetOperatingMode( ) == MODE_SLEEP ) || ( GetOperatingMode( ) == MODE_RX_DC ) )
     {
-        OperatingMode = MODE_STDBY_RC;
-    }
-    else
-    {
-        OperatingMode = MODE_STDBY_XOSC;
+        Wakeup( );
+        // Switch is turned off when device is in sleep mode and turned on is all other modes
+        AntSwOn( );
     }
 }
 
-void SX126x::SetFs( void )
-{
-    WriteCommand( RADIO_SET_FS, 0, 0 );
-    OperatingMode = MODE_FS;
-}
-
-void SX126x::SetTx( uint32_t timeout )
-{
-    uint8_t buf[3];
-    buf[0] = ( uint8_t )( ( timeout >> 16 ) & 0xFF );
-    buf[1] = ( uint8_t )( ( timeout >> 8 ) & 0xFF );
-    buf[2] = ( uint8_t )( timeout & 0xFF );
-    WriteCommand( RADIO_SET_TX, buf, 3 );
-    OperatingMode = MODE_TX;
-}
-
-void SX126x::SetRx( uint32_t timeout )
-{
-    uint8_t buf[3];
-    buf[0] = ( uint8_t )( ( timeout >> 16 ) & 0xFF );
-    buf[1] = ( uint8_t )( ( timeout >> 8 ) & 0xFF );
-    buf[2] = ( uint8_t )( timeout & 0xFF );
-    WriteCommand( RADIO_SET_RX, buf, 3 );
-    OperatingMode = MODE_RX;
-}
-
-void SX126x::SetRxDutyCycle( uint32_t rxTime, uint32_t sleepTime )
-{
-    uint8_t buf[6];
-
-    buf[0] = ( uint8_t )( ( rxTime >> 16 ) & 0xFF );
-    buf[1] = ( uint8_t )( ( rxTime >> 8 ) & 0xFF );
-    buf[2] = ( uint8_t )( rxTime & 0xFF );
-     buf[0] = ( uint8_t )( ( sleepTime >> 16 ) & 0xFF );
-    buf[1] = ( uint8_t )( ( sleepTime >> 8 ) & 0xFF );
-    buf[2] = ( uint8_t )( sleepTime & 0xFF );
-    WriteCommand( RADIO_SET_RXDUTYCYCLE, buf, 6 );
-    OperatingMode = MODE_RX;
-}
-
-void SX126x::SetCad( void )
-{
-    WriteCommand( RADIO_SET_CAD, 0, 0 );
-    OperatingMode = MODE_CAD;
-}
-
-void SX126x::SetAutoTxRx( uint32_t time, uint8_t intMode, uint32_t timeout )
-{
-    uint32_t compensatedTime = time - ( uint16_t )AUTO_RX_TX_OFFSET;
-    uint8_t buf[7];
-
-    buf[0] = ( uint8_t )( ( compensatedTime >> 16 ) & 0xFF );
-    buf[1] = ( uint8_t )( ( compensatedTime >> 8 ) & 0xFF );
-    buf[2] = ( uint8_t )( compensatedTime & 0xFF );
-    buf[3] = intMode;
-    buf[4] = ( uint8_t )( ( timeout >> 16 ) & 0xFF );
-    buf[5] = ( uint8_t )( ( timeout >> 8 ) & 0xFF );
-    buf[6] = ( uint8_t )( timeout & 0xFF );
-    WriteCommand( RADIO_SET_AUTOTXRX, buf, 7 );
-}
-
-
-void SX126x::SetTxContinuousWave( void )
-{
-    WriteCommand( RADIO_SET_TXCONTINUOUSWAVE, 0, 0 );
-}
-
-void SX126x::SetTxContinuousPreamble( void )
-{
-    WriteCommand( RADIO_SET_TXCONTINUOUSPREAMBLE, 0, 0 );
-}
-
-void SX126x::SetPacketType( RadioPacketType_t packetType )
-{
-    // Save packet type internally to avoid questioning the radio
-    this->PacketType = packetType;
-
-    WriteCommand( RADIO_SET_PACKETTYPE, ( uint8_t* )&packetType, 1 );
-}
-
-RadioPacketType_t SX126x::GetPacketType( void )
-{
-    return this->PacketType;
-}
-
-void SX126x::SetRfFrequency( uint32_t frequency )
-{
-    uint8_t buf[4];
-    uint32_t freq = 0;
-
-    freq = ( uint32_t )( ( double )frequency / ( double )FREQ_STEP );
-    buf[0] = ( uint8_t )( ( freq >> 24 ) & 0xFF );
-    buf[1] = ( uint8_t )( ( freq >> 16 ) & 0xFF );
-    buf[2] = ( uint8_t )( ( freq >> 8 ) & 0xFF );
-    buf[3] = ( uint8_t )( freq & 0xFF );
-    WriteCommand( RADIO_SET_RFFREQUENCY, buf, 3 );
-}
-
-void SX126x::SetTxParams( int8_t power, RadioRampTimes_t rampTime )
-{
-    uint8_t buf[2];
-    
-    buf[0] = power ;
-    buf[1] = ( uint8_t )rampTime;
-    WriteCommand( RADIO_SET_TXPARAMS, buf, 2 );
-}
-
-void SX126x::SetCadConfig( RadioLoRaCadSymbols_t cadSymbolNum , uint8_t cadExitMode, uint32_t cadRxTxTimeout)
-{
-    uint8_t buf[5];
-    buf[0] = ( uint8_t )cadSymbolNum;
-    buf[1] = cadExitMode;
-    buf[2] = ( uint8_t )( ( cadRxTxTimeout >> 16 ) & 0xFF );
-    buf[3] = ( uint8_t )( ( cadRxTxTimeout >> 8 ) & 0xFF );
-    buf[4] = ( uint8_t )( cadRxTxTimeout & 0xFF );
-    WriteCommand( RADIO_SET_CADPARAMS, buf, 5 );
-    OperatingMode = MODE_CAD;
-}
-
-void SX126x::SetBufferBaseAddresses( uint8_t txBaseAddress, uint8_t rxBaseAddress )
-{
-    uint8_t buf[2];
-
-    buf[0] = txBaseAddress;
-    buf[1] = rxBaseAddress;
-    WriteCommand( RADIO_SET_BUFFERBASEADDRESS, buf, 2 );
-}
-
-void SX126x::SetModulationParams( ModulationParams_t *modulationParams )
+void SX126x::SetPayload( uint8_t *payload, uint8_t size )
 {
-    uint8_t n;
-    uint32_t tempVal = 0;
-    uint8_t buf[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
-    
-    // Check if required configuration corresponds to the stored packet type
-    // If not, silently update radio packet type
-    if( this->PacketType != modulationParams->PacketType )
-    {
-        this->SetPacketType( modulationParams->PacketType );
-    }
-
-    switch( modulationParams->PacketType )
-    {
-        case PACKET_TYPE_GFSK:
-            tempVal = ( uint32_t )( ( double )XTAL_FREQ / ( double )modulationParams->Params.Gfsk.BitRate );
-            tempVal = tempVal * 32;
-            buf[0] = ( tempVal >> 16 ) & 0xFF;
-            buf[1] = ( tempVal >> 8 ) & 0xFF;
-            buf[2] = tempVal & 0xFF;
-            
-            buf[3] = modulationParams->Params.Gfsk.PulseShape;
-            buf[4] = modulationParams->Params.Gfsk.BW;
-        
-            tempVal = ( uint32_t )( ( double )FREQ_STEP * ( double )modulationParams->Params.Gfsk.Fdev );
-            buf[5] = ( tempVal >> 16 ) & 0xFF;
-            buf[6] = ( tempVal >> 8 ) & 0xFF;
-            buf[7] = ( tempVal& 0xFF );
-            n = 8;
-            break;
-        
-        case PACKET_TYPE_LORA:
-            n = 3;
-            buf[0] = modulationParams->Params.LoRa.SpreadingFactor;
-            buf[1] = modulationParams->Params.LoRa.Bandwidth;
-            buf[2] = modulationParams->Params.LoRa.CodingRate;       
-            break;
-        
-        case PACKET_TYPE_RESERVED:
-            return;
-    }
-    WriteCommand( RADIO_SET_MODULATIONPARAMS, buf, n );
-}
-
-void SX126x::SetPacketParams( PacketParams_t *packetParams )
-{
-    uint8_t n;
-    
-    // Check if required configuration corresponds to the stored packet type
-    // If not, silently update radio packet type
-    if( this->PacketType != packetParams->PacketType )
-    {
-        this->SetPacketType( packetParams->PacketType );
-    }
-
-    switch( packetParams->PacketType )
-    {
-        case PACKET_TYPE_GFSK:
-            n = 8;
-            break; 
-        case PACKET_TYPE_LORA:
-            n = 5;
-            break;
-        case PACKET_TYPE_RESERVED:
-           return;
-    }
-    WriteCommand( RADIO_SET_PACKETPARAMS, packetParams->Params.Buffer, n );
-}
-
-void SX126x::GetRxBufferStatus( uint8_t *payloadLength, uint8_t *rxStartBufferPointer )
-{
-    uint8_t status[2];
-
-    ReadCommand( RADIO_GET_RXBUFFERSTATUS, status, 2 );
-
-    *payloadLength = status[0];
-    *rxStartBufferPointer = status[1];
-}
-
-void SX126x::GetPacketStatus( PacketStatus_t *pktStatus )
-{
-    uint8_t status[3];
-
-
-    ReadCommand( RADIO_GET_PACKETSTATUS, status, 3 );
-
-    pktStatus->packetType = this -> GetPacketType( );
-    switch( pktStatus->packetType )
-    {
-        case PACKET_TYPE_GFSK:
-            pktStatus->Gfsk.RxStatus = status[0];
-            pktStatus->Gfsk.RssiSync = -status[1] / 2;
-            pktStatus->Gfsk.RssiAvg = -status[2] / 2;
-            break;
-
-        case PACKET_TYPE_LORA:
-            pktStatus->LoRa.RssiPkt = -status[0] / 2;
-            ( status[1] < 128 ) ? ( pktStatus->LoRa.SnrPkt = status[1] / 4 ) : ( pktStatus->LoRa.SnrPkt = ( ( status[1] - 256 ) /4 ) );
-            pktStatus->LoRa.SignalRssiPkt = -status[2] / 2;
-            break;
-
-        case PACKET_TYPE_RESERVED:
-            // In that specific case, we set everything in the pktStatus to zeros
-            // and reset the packet type accordingly
-            memset( pktStatus, 0, sizeof( PacketStatus_t ) );
-            pktStatus->packetType = PACKET_TYPE_RESERVED;
-            break;
-    }
-}
-
-int8_t SX126x::GetRssiInst( void )
-{
-    int8_t rssi;
-
-    ReadCommand( RADIO_GET_RSSIINST, ( uint8_t* )&rssi, 1 );
-    return -rssi / 2;
-}
-
-void SX126x::GetStats( RxCounter_t *rxCounter )
-{
-    uint8_t status[6];
-
-
-    rxCounter->packetType = this -> GetPacketType( );
-    ReadCommand( RADIO_GET_STATS, status, 6 );
-    rxCounter->NbPktReceived = ( status[0] << 8 ) | status[1];
-    rxCounter->NbPktCrcOk = ( status[2] << 8 ) | status[3];
-    rxCounter->NbPktLengthError = ( status[4] << 8 ) | status[4];
-}
-
-void SX126x::ResetStats(  )
-{
-    uint8_t status[6];
-
-    memset( status, 0, sizeof( status ) );
-    WriteCommand( RADIO_RESET_STATS, status, 6 );
-}
-
-uint8_t SX126x::GetError()
-{
-    uint8_t error;
-
-    ReadCommand( RADIO_GET_ERROR, &error, 1 );
-    return error; 
-}
-
-
-void SX126x::SetDioIrqParams( uint16_t irqMask, uint16_t dio1Mask, uint16_t dio2Mask, uint16_t dio3Mask )
-{
-    uint8_t buf[8];
-
-    buf[0] = ( uint8_t )( ( irqMask >> 8 ) & 0x00FF );
-    buf[1] = ( uint8_t )( irqMask & 0x00FF );
-    buf[2] = ( uint8_t )( ( dio1Mask >> 8 ) & 0x00FF );
-    buf[3] = ( uint8_t )( dio1Mask & 0x00FF );
-    buf[4] = ( uint8_t )( ( dio2Mask >> 8 ) & 0x00FF );
-    buf[5] = ( uint8_t )( dio2Mask & 0x00FF );
-    buf[6] = ( uint8_t )( ( dio3Mask >> 8 ) & 0x00FF );
-    buf[7] = ( uint8_t )( dio3Mask & 0x00FF );
-    WriteCommand( RADIO_CFG_DIOIRQ, buf, 8 );
-}
-
-uint16_t SX126x::GetIrqStatus( void )
-{
-    uint8_t irqStatus[2];
-    ReadCommand( RADIO_GET_IRQSTATUS, irqStatus, 2 );
-    return ( irqStatus[0] << 8 ) | irqStatus[1];
-}
-
-void SX126x::ClearIrqStatus( uint16_t irq )
-{
-    uint8_t buf[2];
-
-    buf[0] = ( uint8_t )( ( ( uint16_t )irq >> 8 ) & 0x00FF );
-    buf[1] = ( uint8_t )( ( uint16_t )irq & 0x00FF );
-    WriteCommand( RADIO_CLR_IRQSTATUS, buf, 2 );
-}
-
-void SX126x::Calibrate( CalibrationParams_t calibParam )
-{
-    WriteCommand( RADIO_CALIBRATE, &calibParam.Value, 1 );
-}
-
-void SX126x::SetRegulatorMode( uint8_t mode )
-{
-    WriteCommand( RADIO_SET_REGULATORMODE, &mode, 1 );
-}
-
-
-void SX126x::SetLongPreamble( uint8_t enable )
-{
-    WriteCommand( RADIO_SET_LONGPREAMBLE, &enable, 1 );
-}
-
-void SX126x::SetPayload( uint8_t *buffer, uint8_t size )
-{
-    WriteBuffer( 0x00, buffer, size );
+    WriteBuffer( 0x00, payload, size );
 }
 
 uint8_t SX126x::GetPayload( uint8_t *buffer, uint8_t *size,  uint8_t maxSize )
 {
-    uint8_t offset;
+    uint8_t offset = 0;
 
     GetRxBufferStatus( size, &offset );
-    if(*size > maxSize)
+    if( *size > maxSize )
     {
         return 1;
     }
@@ -468,14 +119,16 @@
 void SX126x::SetCrcSeed( uint16_t seed )
 {
     uint8_t buf[2];
+
     buf[0] = ( uint8_t )( ( seed >> 8 ) & 0xFF );
     buf[1] = ( uint8_t )( seed & 0xFF );
-    
+
     switch( GetPacketType( ) )
     {
         case PACKET_TYPE_GFSK:
             WriteRegister( REG_LR_CRCSEEDBASEADDR, buf, 2 );
             break;
+
         default:
             break;
     }
@@ -484,147 +137,721 @@
 void SX126x::SetCrcPolynomial( uint16_t polynomial )
 {
     uint8_t buf[2];
+
     buf[0] = ( uint8_t )( ( polynomial >> 8 ) & 0xFF );
     buf[1] = ( uint8_t )( polynomial & 0xFF );
-    
+
     switch( GetPacketType( ) )
     {
         case PACKET_TYPE_GFSK:
             WriteRegister( REG_LR_CRCPOLYBASEADDR, buf, 2 );
             break;
+
         default:
             break;
     }
 }
 
-void SX126x::SetWhiteningSeed( uint8_t seed )
+void SX126x::SetWhiteningSeed( uint16_t seed )
 {
+    uint8_t regValue = 0;
+
     switch( GetPacketType( ) )
     {
         case PACKET_TYPE_GFSK:
-            WriteRegister( REG_LR_WHITSEEDBASEADDR, seed );
+            regValue = ReadReg( REG_LR_WHITSEEDBASEADDR_MSB ) & 0xFE;
+            regValue = ( ( seed >> 8 ) & 0x01 ) | regValue;
+            WriteReg( REG_LR_WHITSEEDBASEADDR_MSB, regValue ); // only 1 bit.
+            WriteReg( REG_LR_WHITSEEDBASEADDR_LSB, ( uint8_t )seed );
             break;
+
         default:
             break;
     }
 }
 
-int8_t SX126x::ParseHexFileLine( char* line )
+uint32_t SX126x::GetRandom( void )
+{
+    uint8_t buf[] = { 0, 0, 0, 0 };
+
+    // Set radio in continuous reception
+    SetRx( 0 );
+
+    wait_ms( 1 );
+
+    ReadRegister( RANDOM_NUMBER_GENERATORBASEADDR, buf, 4 );
+
+    SetStandby( STDBY_RC );
+
+    return ( buf[0] << 24 ) | ( buf[1] << 16 ) | ( buf[2] << 8 ) | buf[3];
+}
+
+void SX126x::SetSleep( SleepParams_t sleepConfig )
 {
-    uint16_t addr;
-    uint16_t n;
-    uint8_t code;
-    uint8_t bytes[256];
+#ifdef ADV_DEBUG
+    printf("SetSleep ");
+#endif
+
+    AntSwOff( );
+
+    WriteCommand( RADIO_SET_SLEEP, &sleepConfig.Value, 1 );
+    OperatingMode = MODE_SLEEP;
+}
 
-    if( GetHexFileLineFields( line, bytes, &addr, &n, &code ) != 0 )
+void SX126x::SetStandby( RadioStandbyModes_t standbyConfig )
+{
+#ifdef ADV_DEBUG
+    printf("SetStandby ");
+#endif
+    WriteCommand( RADIO_SET_STANDBY, ( uint8_t* )&standbyConfig, 1 );
+    if( standbyConfig == STDBY_RC )
+    {
+        OperatingMode = MODE_STDBY_RC;
+    }
+    else
     {
-        if( code == 0 )
+        OperatingMode = MODE_STDBY_XOSC;
+    }
+}
+
+void SX126x::SetFs( void )
+{
+#ifdef ADV_DEBUG
+    printf("SetFs ");
+#endif
+    WriteCommand( RADIO_SET_FS, 0, 0 );
+    OperatingMode = MODE_FS;
+}
+
+void SX126x::SetTx( uint32_t timeout )
+{
+    uint8_t buf[3];
+
+    OperatingMode = MODE_TX;
+ 
+#ifdef ADV_DEBUG
+    printf("SetTx ");
+#endif
+
+    buf[0] = ( uint8_t )( ( timeout >> 16 ) & 0xFF );
+    buf[1] = ( uint8_t )( ( timeout >> 8 ) & 0xFF );
+    buf[2] = ( uint8_t )( timeout & 0xFF );
+    WriteCommand( RADIO_SET_TX, buf, 3 );
+}
+
+void SX126x::SetRxBoosted( uint32_t timeout )
+{
+    uint8_t buf[3];
+
+    OperatingMode = MODE_RX;
+
+#ifdef ADV_DEBUG
+    printf("SetRxBoosted ");
+#endif
+
+    WriteReg( REG_RX_GAIN, 0x96 ); // max LNA gain, increase current by ~2mA for around ~3dB in sensivity
+
+    buf[0] = ( uint8_t )( ( timeout >> 16 ) & 0xFF );
+    buf[1] = ( uint8_t )( ( timeout >> 8 ) & 0xFF );
+    buf[2] = ( uint8_t )( timeout & 0xFF );
+    WriteCommand( RADIO_SET_RX, buf, 3 );
+}
+
+void SX126x::SetRx( uint32_t timeout )
+{
+    uint8_t buf[3];
+
+    OperatingMode = MODE_RX;
+
+#ifdef ADV_DEBUG
+    printf("SetRx ");
+#endif
+
+    buf[0] = ( uint8_t )( ( timeout >> 16 ) & 0xFF );
+    buf[1] = ( uint8_t )( ( timeout >> 8 ) & 0xFF );
+    buf[2] = ( uint8_t )( timeout & 0xFF );
+    WriteCommand( RADIO_SET_RX, buf, 3 );
+}
+
+void SX126x::SetRxDutyCycle( uint32_t rxTime, uint32_t sleepTime )
+{
+    uint8_t buf[6];
+
+    SetLongPreamble( true );
+
+    buf[0] = ( uint8_t )( ( rxTime >> 16 ) & 0xFF );
+    buf[1] = ( uint8_t )( ( rxTime >> 8 ) & 0xFF );
+    buf[2] = ( uint8_t )( rxTime & 0xFF );
+    buf[3] = ( uint8_t )( ( sleepTime >> 16 ) & 0xFF );
+    buf[4] = ( uint8_t )( ( sleepTime >> 8 ) & 0xFF );
+    buf[5] = ( uint8_t )( sleepTime & 0xFF );
+    WriteCommand( RADIO_SET_RXDUTYCYCLE, buf, 6 );
+    OperatingMode = MODE_RX_DC;
+}
+
+void SX126x::SetCad( void )
+{
+    WriteCommand( RADIO_SET_CAD, 0, 0 );
+    OperatingMode = MODE_CAD;
+}
+
+void SX126x::SetTxContinuousWave( void )
+{
+#ifdef ADV_DEBUG
+    printf("SetTxContinuousWave ");
+#endif
+    WriteCommand( RADIO_SET_TXCONTINUOUSWAVE, 0, 0 );
+}
+
+void SX126x::SetTxInfinitePreamble( void )
+{
+#ifdef ADV_DEBUG
+    printf("SetTxContinuousPreamble ");
+#endif
+    WriteCommand( RADIO_SET_TXCONTINUOUSPREAMBLE, 0, 0 );
+}
+
+void SX126x::SetStopRxTimerOnPreambleDetect( bool enable )
+{
+    WriteCommand( RADIO_SET_STOPRXTIMERONPREAMBLE, ( uint8_t* )&enable, 1 );
+}
+
+void SX126x::SetLoRaSymbNumTimeout( uint8_t SymbNum )
+{
+    WriteCommand( RADIO_SET_LORASYMBTIMEOUT, &SymbNum, 1 );
+}
+
+void SX126x::SetRegulatorMode( RadioRegulatorMode_t mode )
+{
+#ifdef ADV_DEBUG
+    printf("SetRegulatorMode ");
+#endif
+    WriteCommand( RADIO_SET_REGULATORMODE, ( uint8_t* )&mode, 1 );
+}
+
+void SX126x::Calibrate( CalibrationParams_t calibParam )
+{
+    WriteCommand( RADIO_CALIBRATE, &calibParam.Value, 1 );
+}
+
+void SX126x::SetLongPreamble( uint8_t enable )
+{
+    WriteCommand( RADIO_SET_LONGPREAMBLE, &enable, 1 );
+}
+
+void SX126x::SetPaConfig( uint8_t paDutyCycle, uint8_t HpMax, uint8_t deviceSel, uint8_t paLUT )
+{
+    uint8_t buf[4];
+
+#ifdef ADV_DEBUG
+    printf("SetPaConfig ");
+#endif
+
+    buf[0] = paDutyCycle;
+    buf[1] = HpMax;
+    buf[2] = deviceSel;
+    buf[3] = paLUT;
+    WriteCommand( RADIO_SET_PACONFIG, buf, 4 );
+}
+
+void SX126x::SetRxTxFallbackMode( uint8_t fallbackMode )
+{
+    WriteCommand( RADIO_SET_TXFALLBACKMODE, &fallbackMode, 1 );
+}
+
+void SX126x::SetDioIrqParams( uint16_t irqMask, uint16_t dio1Mask, uint16_t dio2Mask, uint16_t dio3Mask )
+{
+    uint8_t buf[8];
+
+#ifdef ADV_DEBUG
+    printf("SetDioIrqParams ");
+#endif
+
+    buf[0] = ( uint8_t )( ( irqMask >> 8 ) & 0x00FF );
+    buf[1] = ( uint8_t )( irqMask & 0x00FF );
+    buf[2] = ( uint8_t )( ( dio1Mask >> 8 ) & 0x00FF );
+    buf[3] = ( uint8_t )( dio1Mask & 0x00FF );
+    buf[4] = ( uint8_t )( ( dio2Mask >> 8 ) & 0x00FF );
+    buf[5] = ( uint8_t )( dio2Mask & 0x00FF );
+    buf[6] = ( uint8_t )( ( dio3Mask >> 8 ) & 0x00FF );
+    buf[7] = ( uint8_t )( dio3Mask & 0x00FF );
+    WriteCommand( RADIO_CFG_DIOIRQ, buf, 8 );
+}
+
+uint16_t SX126x::GetIrqStatus( void )
+{
+    uint8_t irqStatus[2];
+
+    ReadCommand( RADIO_GET_IRQSTATUS, irqStatus, 2 );
+    return ( irqStatus[0] << 8 ) | irqStatus[1];
+}
+
+void SX126x::SetDio2AsRfSwitchCtrl( uint8_t enable )
+{
+#ifdef ADV_DEBUG
+    printf("SetDio2AsRfSwitchCtrl ");
+#endif
+    WriteCommand( RADIO_SET_RFSWITCHMODE, &enable, 1 );
+}
+
+void SX126x::SetDio3AsTcxoCtrl( RadioTcxoCtrlVoltage_t tcxoVoltage, uint32_t timeout )
+{
+    uint8_t buf[4];
+    
+    buf[0] = tcxoVoltage & 0x08;
+    buf[1] = ( uint8_t )( ( timeout >> 16 ) & 0xFF );
+    buf[2] = ( uint8_t )( ( timeout >> 8 ) & 0xFF );
+    buf[3] = ( uint8_t )( timeout & 0xFF );
+
+    WriteCommand( RADIO_SET_TCXOMODE, buf, 4 );
+}
+
+void SX126x::SetRfFrequency( uint32_t frequency )
+{
+    uint8_t buf[4];
+    uint32_t freq = 0;
+
+#ifdef ADV_DEBUG
+    printf("SetRfFrequency ");
+#endif
+
+    freq = ( uint32_t )( ( double )frequency / ( double )FREQ_STEP );
+    buf[0] = ( uint8_t )( ( freq >> 24 ) & 0xFF );
+    buf[1] = ( uint8_t )( ( freq >> 16 ) & 0xFF );
+    buf[2] = ( uint8_t )( ( freq >> 8 ) & 0xFF );
+    buf[3] = ( uint8_t )( freq & 0xFF );
+    WriteCommand( RADIO_SET_RFFREQUENCY, buf, 4 );
+}
+
+void SX126x::SetPacketType( RadioPacketTypes_t packetType )
+{
+#ifdef ADV_DEBUG
+    printf("SetPacketType ");
+#endif
+
+    // Save packet type internally to avoid questioning the radio
+    this->PacketType = packetType;
+
+    if( packetType == PACKET_TYPE_GFSK )
+    {
+        WriteReg( REG_BIT_SYNC, 0x00 );
+    }
+
+    WriteCommand( RADIO_SET_PACKETTYPE, ( uint8_t* )&packetType, 1 );
+}
+
+RadioPacketTypes_t SX126x::GetPacketType( void )
+{
+    return this->PacketType;
+}
+
+void SX126x::SetTxParams( int8_t power, RadioRampTimes_t rampTime )
+{
+    uint8_t buf[2];
+    DigitalIn OPT( A3 );
+
+#ifdef ADV_DEBUG
+    printf("SetTxParams ");
+#endif
+
+    if( GetDeviceType( ) == 1 ) // sx1261
+    {
+        if( power == 15 )
         {
-            WriteRegister( addr, bytes, n );
+            SetPaConfig( 0x06, 0x00, 0x01, 0x00 );
         }
-        if( code == 1 )
-        { // end of file
-            //return 2;
+        else
+        {
+            SetPaConfig( 0x04, 0x00, 0x01, 0x00 );  
+        }
+        if( power >= 14 )
+        {
+            power = 14;
+        } 
+        else if( power < -3 )
+        {
+            power = -3;
         }
-        if( code == 2 )
-        { // begin of file
-            //return 3;
+    }
+    else // sx1262
+    {
+        SetPaConfig( 0x04, 0x07, 0x00, 0x01 );
+        if( power > 22 )
+        {
+            power = 22;
+        } 
+        else if( power < -3 )
+        {
+            power = -3;
+        }
+    }
+    buf[0] = power;
+    if( OPT == 0 )
+    {
+        if( ( uint8_t )rampTime < RADIO_RAMP_200_US )
+        {
+            buf[1] = RADIO_RAMP_200_US;
+        }
+        else
+        {
+            buf[1] = ( uint8_t )rampTime;
         }
     }
     else
     {
-        return 0;
+        buf[1] = ( uint8_t )rampTime;
+    }
+    WriteCommand( RADIO_SET_TXPARAMS, buf, 2 );
+}
+
+void SX126x::SetModulationParams( ModulationParams_t *modulationParams )
+{
+    uint8_t n;
+    uint32_t tempVal = 0;
+    uint8_t buf[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+
+#ifdef ADV_DEBUG
+    printf("SetModulationParams ");
+#endif
+
+    // Check if required configuration corresponds to the stored packet type
+    // If not, silently update radio packet type
+    if( this->PacketType != modulationParams->PacketType )
+    {
+        this->SetPacketType( modulationParams->PacketType );
     }
-    return 1;
+
+    switch( modulationParams->PacketType )
+    {
+    case PACKET_TYPE_GFSK:
+        n = 8;
+        tempVal = ( uint32_t )( 32 * ( ( double )XTAL_FREQ / ( double )modulationParams->Params.Gfsk.BitRate ) );
+        buf[0] = ( tempVal >> 16 ) & 0xFF;
+        buf[1] = ( tempVal >> 8 ) & 0xFF;
+        buf[2] = tempVal & 0xFF;
+        buf[3] = modulationParams->Params.Gfsk.ModulationShaping;
+        buf[4] = modulationParams->Params.Gfsk.Bandwidth;
+        tempVal = ( uint32_t )( ( double )modulationParams->Params.Gfsk.Fdev / ( double )FREQ_STEP );
+        buf[5] = ( tempVal >> 16 ) & 0xFF;
+        buf[6] = ( tempVal >> 8 ) & 0xFF;
+        buf[7] = ( tempVal& 0xFF );
+        break;
+    case PACKET_TYPE_LORA:
+        n = 4;
+        switch( modulationParams->Params.LoRa.Bandwidth )
+        {
+            case LORA_BW_500:
+                 modulationParams->Params.LoRa.LowDatarateOptimize = 0x00;
+                break;
+            case LORA_BW_250:
+                if( modulationParams->Params.LoRa.SpreadingFactor == 12 )
+                {
+                    modulationParams->Params.LoRa.LowDatarateOptimize = 0x01;
+                }
+                else
+                {
+                    modulationParams->Params.LoRa.LowDatarateOptimize = 0x00;
+                }
+                break;
+            case LORA_BW_125:
+                if( modulationParams->Params.LoRa.SpreadingFactor >= 11 )
+                {
+                    modulationParams->Params.LoRa.LowDatarateOptimize = 0x01;
+                }
+                else
+                {
+                    modulationParams->Params.LoRa.LowDatarateOptimize = 0x00;
+                }
+                break;
+            case LORA_BW_062:
+                if( modulationParams->Params.LoRa.SpreadingFactor >= 10 )
+                {
+                    modulationParams->Params.LoRa.LowDatarateOptimize = 0x01;
+                }
+                else
+                {
+                    modulationParams->Params.LoRa.LowDatarateOptimize = 0x00;
+                }
+                break;
+            case LORA_BW_041:
+                if( modulationParams->Params.LoRa.SpreadingFactor >= 9 )
+                {
+                    modulationParams->Params.LoRa.LowDatarateOptimize = 0x01;
+                }
+                else
+                {
+                    modulationParams->Params.LoRa.LowDatarateOptimize = 0x00;
+                }
+                break;
+            case LORA_BW_031:
+            case LORA_BW_020:
+            case LORA_BW_015:
+            case LORA_BW_010:
+            case LORA_BW_007:
+                    modulationParams->Params.LoRa.LowDatarateOptimize = 0x01;
+                break;
+            default:
+                break;
+        }
+        buf[0] = modulationParams->Params.LoRa.SpreadingFactor;
+        buf[1] = modulationParams->Params.LoRa.Bandwidth;
+        buf[2] = modulationParams->Params.LoRa.CodingRate;
+        buf[3] = modulationParams->Params.LoRa.LowDatarateOptimize;
+        break;
+    default:
+    case PACKET_TYPE_NONE:
+        return;
+    }
+    WriteCommand( RADIO_SET_MODULATIONPARAMS, buf, n );
 }
 
-int8_t SX126x::GetHexFileLineFields( char* line, uint8_t *bytes, uint16_t *addr, uint16_t *num, uint8_t *code )
+void SX126x::SetPacketParams( PacketParams_t *packetParams )
 {
-    uint16_t sum, len, cksum;
-    char *ptr;
+    uint8_t n;
+    uint8_t crcVal = 0;
+    uint8_t buf[9] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
 
-    *num = 0;
-    if( line[0] != ':' )
-    {
-        return 0;
-    }
-    if( strlen( line ) < 11 )
-    {
-        return 0;
-    }
-    ptr = line + 1;
-    if( !sscanf( ptr, "%02hx", &len ) )
-    {
-        return 0;
-    }
-    ptr += 2;
-    if( strlen( line ) < ( 11 + ( len * 2 ) ) )
-    {
-        return 0;
-    }
-    if( !sscanf( ptr, "%04hx", addr ) )
+#ifdef ADV_DEBUG
+    printf("SetPacketParams ");
+#endif
+
+    // Check if required configuration corresponds to the stored packet type
+    // If not, silently update radio packet type
+    if( this->PacketType != packetParams->PacketType )
     {
-        return 0;
-    }
-    ptr += 4;
-    if( !sscanf( ptr, "%02hhx", code ) )
-    {
-        return 0;
-    }
-    ptr += 2;
-    sum = ( len & 255 ) + ( ( *addr >> 8 ) & 255 ) + ( *addr & 255 ) + ( ( *code >> 8 ) & 255 ) + ( *code & 255 );
-    while( *num != len )
-    {
-        if( !sscanf( ptr, "%02hhx", &bytes[*num] ) )
-        {
-            return 0;
-        }
-        ptr += 2;
-        sum += bytes[*num] & 255;
-        ( *num )++;
-        if( *num >= 256 )
-        {
-            return 0;
-        }
-    }
-    if( !sscanf( ptr, "%02hx", &cksum ) )
-    {
-        return 0;
-    }
-    if( ( ( sum & 255 ) + ( cksum & 255 ) ) & 255 )
-    {
-        return 0; // checksum error
+        this->SetPacketType( packetParams->PacketType );
     }
 
-    return 1;
+    switch( packetParams->PacketType )
+    {
+    case PACKET_TYPE_GFSK:
+        if( packetParams->Params.Gfsk.CrcLength == RADIO_CRC_2_BYTES_IBM )
+        {
+            SetCrcSeed( CRC_IBM_SEED );
+            SetCrcPolynomial( CRC_POLYNOMIAL_IBM );
+            crcVal = RADIO_CRC_2_BYTES;
+        }
+        else if(  packetParams->Params.Gfsk.CrcLength == RADIO_CRC_2_BYTES_CCIT )
+        {
+            SetCrcSeed( CRC_CCITT_SEED );
+            SetCrcPolynomial( CRC_POLYNOMIAL_CCITT );
+            crcVal = RADIO_CRC_2_BYTES_INV;
+        }
+        else
+        {
+            crcVal = packetParams->Params.Gfsk.CrcLength;
+        }
+        n = 9;
+        // convert preamble length from byte to bit
+        packetParams->Params.Gfsk.PreambleLength = packetParams->Params.Gfsk.PreambleLength << 3;
+
+        buf[0] = ( packetParams->Params.Gfsk.PreambleLength >> 8 ) & 0xFF;
+        buf[1] = packetParams->Params.Gfsk.PreambleLength;
+        buf[2] = packetParams->Params.Gfsk.PreambleMinDetect;
+        buf[3] = ( packetParams->Params.Gfsk.SyncWordLength << 3 ); // convert from byte to bit
+        buf[4] = packetParams->Params.Gfsk.AddrComp;
+        buf[5] = packetParams->Params.Gfsk.HeaderType;
+        buf[6] = packetParams->Params.Gfsk.PayloadLength;
+        buf[7] = crcVal;
+        buf[8] = packetParams->Params.Gfsk.DcFree;
+        break;
+    case PACKET_TYPE_LORA:
+        n = 6;
+        buf[0] = ( packetParams->Params.LoRa.PreambleLength >> 8 ) & 0xFF;
+        buf[1] = packetParams->Params.LoRa.PreambleLength;
+        buf[2] = packetParams->Params.LoRa.HeaderType;
+        buf[3] = packetParams->Params.LoRa.PayloadLength;
+        buf[4] = packetParams->Params.LoRa.CrcMode;
+        buf[5] = packetParams->Params.LoRa.InvertIQ;
+        break;
+    default:
+    case PACKET_TYPE_NONE:
+        return;
+    }
+    WriteCommand( RADIO_SET_PACKETPARAMS, buf, n );
+}
+
+void SX126x::SetCadParams( RadioLoRaCadSymbols_t cadSymbolNum, uint8_t cadDetPeak, uint8_t cadDetMin, RadioCadExitModes_t cadExitMode, uint32_t cadTimeout )
+{
+    uint8_t buf[7];
+
+    buf[0] = ( uint8_t )cadSymbolNum;
+    buf[1] = cadDetPeak;
+    buf[2] = cadDetMin;
+    buf[3] = ( uint8_t )cadExitMode;
+    buf[4] = ( uint8_t )( ( cadTimeout >> 16 ) & 0xFF );
+    buf[5] = ( uint8_t )( ( cadTimeout >> 8 ) & 0xFF );
+    buf[6] = ( uint8_t )( cadTimeout & 0xFF );
+    WriteCommand( RADIO_SET_CADPARAMS, buf, 5 );
+    OperatingMode = MODE_CAD;
+}
+
+void SX126x::SetBufferBaseAddresses( uint8_t txBaseAddress, uint8_t rxBaseAddress )
+{
+    uint8_t buf[2];
+
+#ifdef ADV_DEBUG
+    printf("SetBufferBaseAddresses ");
+#endif
+
+    buf[0] = txBaseAddress;
+    buf[1] = rxBaseAddress;
+    WriteCommand( RADIO_SET_BUFFERBASEADDRESS, buf, 2 );
+}
+
+RadioStatus_t SX126x::GetStatus( void )
+{
+    uint8_t stat = 0;
+    RadioStatus_t status;
+
+    ReadCommand( RADIO_GET_STATUS, ( uint8_t * )&stat, 1 );
+    status.Value = stat;
+    return status;
+}
+
+int8_t SX126x::GetRssiInst( void )
+{
+    int8_t rssi;
+
+    ReadCommand( RADIO_GET_RSSIINST, ( uint8_t* )&rssi, 1 );
+    return( -( rssi / 2 ) );
+}
+
+void SX126x::GetRxBufferStatus( uint8_t *payloadLength, uint8_t *rxStartBufferPointer )
+{
+    uint8_t status[2];
+
+    ReadCommand( RADIO_GET_RXBUFFERSTATUS, status, 2 );
+
+    // In case of LORA fixed header, the payloadLength is obtained by reading
+    // the register REG_LR_PAYLOADLENGTH
+    if( ( this->GetPacketType( ) == PACKET_TYPE_LORA ) && ( ReadReg( REG_LR_PACKETPARAMS ) >> 7 == 1 ) )
+    {
+        *payloadLength = ReadReg( REG_LR_PAYLOADLENGTH );
+    }
+    else
+    {
+        *payloadLength = status[0];
+    }
+    *rxStartBufferPointer = status[1];
+}
+
+void SX126x::GetPacketStatus( PacketStatus_t *pktStatus )
+{
+    uint8_t status[3];
+
+    ReadCommand( RADIO_GET_PACKETSTATUS, status, 3 );
+
+    pktStatus->packetType = this -> GetPacketType( );
+    switch( pktStatus->packetType )
+    {
+        case PACKET_TYPE_GFSK:
+            pktStatus->Params.Gfsk.RxStatus = status[0];
+            pktStatus->Params.Gfsk.RssiSync = -status[1] / 2;
+            pktStatus->Params.Gfsk.RssiAvg = -status[2] / 2;
+            pktStatus->Params.Gfsk.FreqError = 0;
+            break;
+
+        case PACKET_TYPE_LORA:
+            pktStatus->Params.LoRa.RssiPkt = -status[0] / 2;
+            ( status[1] < 128 ) ? ( pktStatus->Params.LoRa.SnrPkt = status[1] / 4 ) : ( pktStatus->Params.LoRa.SnrPkt = ( ( status[1] - 256 ) /4 ) );
+            pktStatus->Params.LoRa.SignalRssiPkt = -status[2] / 2;
+            pktStatus->Params.LoRa.FreqError = FrequencyError;
+            break;
+
+        default:
+        case PACKET_TYPE_NONE:
+            // In that specific case, we set everything in the pktStatus to zeros
+            // and reset the packet type accordingly
+            memset( pktStatus, 0, sizeof( PacketStatus_t ) );
+            pktStatus->packetType = PACKET_TYPE_NONE;
+            break;
+    }
+}
+
+RadioError_t SX126x::GetDeviceErrors( void )
+{
+    RadioError_t error;
+
+    ReadCommand( RADIO_GET_ERROR, ( uint8_t * )&error, 2 );
+    return error; 
+}
+
+void SX126x::ClearIrqStatus( uint16_t irq )
+{
+    uint8_t buf[2];
+#ifdef ADV_DEBUG
+    printf("ClearIrqStatus ");
+#endif
+    buf[0] = ( uint8_t )( ( ( uint16_t )irq >> 8 ) & 0x00FF );
+    buf[1] = ( uint8_t )( ( uint16_t )irq & 0x00FF );
+    WriteCommand( RADIO_CLR_IRQSTATUS, buf, 2 );
+}
+
+void SX126x::SetPollingMode( void )
+{
+    this->PollingMode = true;
+}
+
+void SX126x::SetInterruptMode( void )
+{
+    this->PollingMode = false;
 }
 
 void SX126x::OnDioIrq( void )
 {
-    if( onCustomDioIrq != NULL )
+    /*
+     * When polling mode is activated, it is up to the application to call
+     * ProcessIrqs( ). Otherwise, the driver automatically calls ProcessIrqs( )
+     * on radio interrupt.
+     */
+    if( this->PollingMode == true )
+    {
+        this->IrqState = true;
+    }
+    else
     {
-        onCustomDioIrq();
-        return;
+        this->ProcessIrqs( );
+    }
+}
+
+void SX126x::ProcessIrqs( void )
+{
+    if( this->PollingMode == true )
+    {
+        if( this->IrqState == true )
+        {
+            __disable_irq( );
+            this->IrqState = false;
+            __enable_irq( );
+        }
+        else
+        {
+            return;
+        }
     }
 
     uint16_t irqRegs = GetIrqStatus( );
-    LastIrqs = irqRegs;
-//    printf("0x%04x\n\r", irqRegs );
     ClearIrqStatus( IRQ_RADIO_ALL );
 
+#ifdef ADV_DEBUG
+    printf("0x%04x\n\r", irqRegs );
+#endif
 
-#if( SX126x_DEBUG == 1 )
-    DigitalOut TEST_PIN_1( D14 );
-    DigitalOut TEST_PIN_2( D15 );
-    for( int i = 0x8000; i != 0; i >>= 1 )
+    if( ( irqRegs & IRQ_HEADER_VALID ) == IRQ_HEADER_VALID )
     {
-        TEST_PIN_2 = 0;
-        TEST_PIN_1 = ( ( irqRegs & i ) != 0 ) ? 1 : 0;
-        TEST_PIN_2 = 1;
+        // LoRa Only
+        FrequencyError = 0x000000 | ( ( 0x0F & ReadReg( 0x076A ) ) << 16 );
+        FrequencyError = FrequencyError | ( ReadReg( 0x076B ) << 8 );
+        FrequencyError = FrequencyError | ( ReadReg( 0x076c ) );
     }
-    TEST_PIN_1 = 0;
-    TEST_PIN_2 = 0;
-#endif
+
+    if( ( irqRegs & IRQ_SYNCWORD_VALID ) == IRQ_SYNCWORD_VALID )
+    {
+        // GFSK Only
+        FrequencyError = 0x000000 | ( ( 0x0F & ReadReg( 0x06B0 ) ) << 8 );
+        FrequencyError = FrequencyError | ( ReadReg( 0x06B1 ) );
+    }
 
     if( ( irqRegs & IRQ_TX_DONE ) == IRQ_TX_DONE )
     {
@@ -652,19 +879,27 @@
         }
     }
 
+    if( ( irqRegs & IRQ_CAD_DONE ) == IRQ_CAD_DONE )
+    {
+        if( cadDone != NULL )
+        {
+            cadDone( ( irqRegs & IRQ_CAD_ACTIVITY_DETECTED ) == IRQ_CAD_ACTIVITY_DETECTED );
+        }
+    }
+
     if( ( irqRegs & IRQ_RX_TX_TIMEOUT ) == IRQ_RX_TX_TIMEOUT )
     {
-        if( ( rxTxTimeout != NULL ) && ( OperatingMode == MODE_TX ) )
+        if( ( txTimeout != NULL ) && ( OperatingMode == MODE_TX ) )
         {
-            rxTxTimeout( IRQ_TX_TIMEOUT );
+            txTimeout( );
         }
-        else if( ( rxTxTimeout != NULL ) && ( OperatingMode == MODE_RX ) )
+        else if( ( rxTimeout != NULL ) && ( OperatingMode == MODE_RX ) )
         {
-            rxTxTimeout( IRQ_RX_TIMEOUT );
+            rxTimeout( );
         }
         else
         {
-            rxTxTimeout( IRQ_XYZ );
+            assert_param( FAIL );
         }
     }
     
@@ -697,7 +932,7 @@
         }
     } 
 
-    //IRQ_HEADER_ERROR                        = 0x0020,    
+    //IRQ_HEADER_ERROR                        = 0x0020,
     if( irqRegs & IRQ_HEADER_ERROR )
     {
         if( rxError != NULL )
@@ -705,19 +940,7 @@
             rxError( IRQ_HEADER_ERROR_CODE );
         }
     }  
-    
-    //IRQ_CAD_DONE                            = 0x0080,
-    //IRQ_CAD_ACTIVITY_DETECTED               = 0x0100,
-    if(  irqRegs & IRQ_CAD_DONE )
-    {
-        bool detected = ( ( irqRegs & IRQ_CAD_ACTIVITY_DETECTED ) == IRQ_CAD_ACTIVITY_DETECTED );
-
-        if( cadDone != NULL )
-        {
-            cadDone( detected );
-        }
-                    
-    }*/
+*/
 }
 
 
--- a/sx126x.h	Wed Oct 12 08:49:58 2016 +0000
+++ b/sx126x.h	Mon Sep 04 15:16:44 2017 +0000
@@ -1,16 +1,17 @@
 /*
+  ______                              _
  / _____)             _              | |
 ( (____  _____ ____ _| |_ _____  ____| |__
  \____ \| ___ |    (_   _) ___ |/ ___)  _ \
  _____) ) ____| | | || |_| ____( (___| | | |
 (______/|_____)_|_|_| \__)_____)\____)_| |_|
-    (C)2016 Semtech
+    (C)2017 Semtech
 
-Description: Handling of the node configuration protocol
+Description: Generic SX126x driver implementation
 
 License: Revised BSD License, see LICENSE.TXT file include in the project
 
-Maintainer: Miguel Luis, Gregory Cristian and Matthieu Verdy
+Authors: Miguel Luis, Gregory Cristian
 */
 #ifndef __SX126x_H__
 #define __SX126x_H__
@@ -42,7 +43,9 @@
  * \remark These defines are used for computing the frequency divider to set the RF frequency
  */
 #define XTAL_FREQ                                   32000000
-#define FREQ_STEP                                   ( ( double )( XTAL_FREQ / pow( 2.0, 25.0 ) ) )
+#define FREQ_DIV                                    33554432
+#define FREQ_STEP                                   0.95367431640625 // ( ( double )( XTAL_FREQ / ( double )FREQ_DIV ) )
+#define FREQ_ERR                                    0.47683715820312
 
 /*!
  * \brief Compensation delay for SetAutoTx/Rx functions in 15.625 microseconds
@@ -73,55 +76,93 @@
  * \brief The address of the register holding the first byte defining the CRC seed
  *
  */
-#define REG_LR_CRCSEEDBASEADDR                      0x06B9
+#define REG_LR_CRCSEEDBASEADDR                      0x06BC
 
 /*!
  * \brief The address of the register holding the first byte defining the CRC polynomial
- *
  */
-#define REG_LR_CRCPOLYBASEADDR                      0x06BB
+#define REG_LR_CRCPOLYBASEADDR                      0x06BE
 
 /*!
  * \brief The address of the register holding the first byte defining the whitening seed
  */
-#define REG_LR_WHITSEEDBASEADDR                     0x06B6
+#define REG_LR_WHITSEEDBASEADDR_MSB                 0x06B8
+#define REG_LR_WHITSEEDBASEADDR_LSB                 0x06B9
 
 /*!
- * \brief The address of the instruction RAM and its size
+ * \brief The address of the register holding the packet configuration
  */
-#define IRAM_START_ADDRESS                          0x8000
-#define IRAM_SIZE                                   0x6000
+#define REG_LR_PACKETPARAMS                         0x0704
+
+/*!
+ * \brief The address of the register holding the payload size
+ */
+#define REG_LR_PAYLOADLENGTH                        0x0702
 
 /*!
  * \brief The addresses of the registers holding SyncWords values
  */
-#define REG_LR_SYNCWORDBASEADDRESS                  0x06BD
+#define REG_LR_SYNCWORDBASEADDRESS                  0x06C0
+
+/*!
+ * \brief The addresses of the register holding LoRa Modem SyncWord value
+ */
+#define REG_LR_SYNCWORD                             0x0740
+
+/*!
+ * Syncword for Private LoRa networks
+ */
+#define LORA_MAC_PRIVATE_SYNCWORD                   0x1424
+
+/*!
+ * Syncword for Public LoRa networks
+ */
+#define LORA_MAC_PUBLIC_SYNCWORD                    0x3444
 
+/*!
+ * The address of the register giving a 4 bytes random number
+ */
+#define RANDOM_NUMBER_GENERATORBASEADDR             0x0819
 
 /*!
+ * The address of the register holding RX Gain value (0x94: power saving, 0x96: rx boosted)
+ */
+#define REG_RX_GAIN                                 0x08AC
+ 
+/*!
+ * The address of the register holding Bit Sync configuration
+ */
+#define REG_BIT_SYNC                                0x06AC
+
+/*!
+ * Change the value on the device internal trimming capacitor
+ */
+#define REG_XTA_TRIM                                0x0911
+/*!
  * \brief Represents the states of the radio
  */
-typedef enum RadioState
+typedef enum
 {
-    RF_IDLE                                 = 0,            //!< The radio is idle
+    RF_IDLE                                 = 0x00,         //!< The radio is idle
     RF_RX_RUNNING,                                          //!< The radio is in reception state
     RF_TX_RUNNING,                                          //!< The radio is in transmission state
     RF_CAD,                                                 //!< The radio is doing channel activity detection
-} RadioStates_t;
+}RadioStates_t;
 
 /*!
  * \brief Represents the operating mode the radio is actually running
  */
-enum RadioOperatingModes_t
+typedef enum
 {
-    MODE_SLEEP                              = 0,            //! The radio is in sleep mode
+    MODE_SLEEP                              = 0x00,         //! The radio is in sleep mode
     MODE_STDBY_RC,                                          //! The radio is in standby mode with RC oscillator
     MODE_STDBY_XOSC,                                        //! The radio is in standby mode with XOSC oscillator
     MODE_FS,                                                //! The radio is in frequency synthesis mode
     MODE_TX,                                                //! The radio is in transmit mode
     MODE_RX,                                                //! The radio is in receive mode
+    MODE_RX_DC,                                             //! The radio is in receive duty cycle mode
     MODE_CAD                                                //! The radio is in channel activity detection mode
-};
+}RadioOperatingModes_t;
 
 /*!
  * \brief Declares the oscillator in use while in standby mode
@@ -129,105 +170,87 @@
  * Using the STDBY_RC standby mode allow to reduce the energy consumption
  * STDBY_XOSC should be used for time critical applications
  */
-enum RadioStandbyModes_t
+typedef enum
 {
-    STDBY_RC                                = 0,
-    STDBY_XOSC                              = 1,
-};
+    STDBY_RC                                = 0x00,
+    STDBY_XOSC                              = 0x01,
+}RadioStandbyModes_t;
+
 /*!
  * \brief Declares the power regulation used to power the device
  *
  * This command allows the user to specify if DC-DC or LDO is used for power regulation.
  * Using only LDO implies that the Rx or Tx current is doubled
  */
-enum RadioRegulatorMode_t
+typedef enum
 {
-    USE_LDO                               = 0x00, // default
-    USE_DCDC                              = 0x01,
-};
+    USE_LDO                                 = 0x00, // default
+    USE_DCDC                                = 0x01,
+}RadioRegulatorMode_t;
 
 /*!
  * \brief Represents the possible packet type (i.e. modem) used
  */
-enum RadioPacketType_t
+typedef enum
 {
-    PACKET_TYPE_GFSK                        = 0,
-    PACKET_TYPE_LORA                        = 1,
-    PACKET_TYPE_RESERVED                    = 0x0F,
-};
+    PACKET_TYPE_GFSK                        = 0x00,
+    PACKET_TYPE_LORA                        = 0x01,
+    PACKET_TYPE_NONE                        = 0x0F,
+}RadioPacketTypes_t;
 
 /*!
  * \brief Represents the ramping time for power amplifier
  */
-enum RadioRampTimes_t
+typedef enum
 {
-    RAMP_10_US                              = 0x00,
-    RAMP_20_US                              = 0x01,
-    RAMP_40_US                              = 0x02,
-    RAMP_80_US                              = 0x03,
-    RAMP_200_US                             = 0x04,
-    RAMP_800_US                             = 0x05,
-    RAMP_1700_US                            = 0x06,
-    RAMP_3400_US                            = 0x07,
-};
+    RADIO_RAMP_10_US                        = 0x00,
+    RADIO_RAMP_20_US                        = 0x01,
+    RADIO_RAMP_40_US                        = 0x02,
+    RADIO_RAMP_80_US                        = 0x03,
+    RADIO_RAMP_200_US                       = 0x04,
+    RADIO_RAMP_800_US                       = 0x05,
+    RADIO_RAMP_1700_US                      = 0x06,
+    RADIO_RAMP_3400_US                      = 0x07,
+}RadioRampTimes_t;
 
 /*!
  * \brief Represents the number of symbols to be used for channel activity detection operation
  */
-enum RadioLoRaCadSymbols_t
+typedef enum
 {
     LORA_CAD_01_SYMBOL                      = 0x00,
     LORA_CAD_02_SYMBOL                      = 0x01,
     LORA_CAD_04_SYMBOL                      = 0x02,
     LORA_CAD_08_SYMBOL                      = 0x03,
     LORA_CAD_16_SYMBOL                      = 0x04,
-};
-
+}RadioLoRaCadSymbols_t;
 
-
-
-
+/*!
+ * \brief Represents the Channel Activity Detection actions after the CAD operation is finished
+ */
+typedef enum
+{
+    LORA_CAD_ONLY                           = 0x00,
+    LORA_CAD_RX                             = 0x01,
+    LORA_CAD_LBT                            = 0x10,
+}RadioCadExitModes_t;
 
 /*!
  * \brief Represents the modulation shaping parameter
  */
-enum RadioModShapings_t
+typedef enum
 {
+    MOD_SHAPING_OFF                         = 0x00,
     MOD_SHAPING_G_BT_03                     = 0x08,
     MOD_SHAPING_G_BT_05                     = 0x09,
     MOD_SHAPING_G_BT_07                     = 0x0A,
     MOD_SHAPING_G_BT_1                      = 0x0B,
-    
-    MOD_SHAPING_G_BT_03_D                   = 0x0C,
-    MOD_SHAPING_G_BT_05_D                   = 0x0D,
-    MOD_SHAPING_G_BT_07_D                   = 0x0E,
-    MOD_SHAPING_G_BT_1_D                    = 0x0F,
-    
-    MOD_SHAPING_RC_BT_03                    = 0x10,
-    MOD_SHAPING_RC_BT_05                    = 0x11,
-    MOD_SHAPING_RC_BT_07                    = 0x12,
-    MOD_SHAPING_RC_BT_1                     = 0x13,
-    
-    MOD_SHAPING_RC_BT_03_D                  = 0x14,
-    MOD_SHAPING_RC_BT_05_D                  = 0x15,
-    MOD_SHAPING_RC_BT_07_D                  = 0x16,
-    MOD_SHAPING_RC_BT_1_D                   = 0x17,
-    
-    MOD_SHAPING_RRC_BT_03                   = 0x18,
-    MOD_SHAPING_RRC_BT_05                   = 0x19,
-    MOD_SHAPING_RRC_BT_07                   = 0x1A,
-    MOD_SHAPING_RRC_BT_1                    = 0x1B,
-    
-    MOD_SHAPING_RRC_BT_03_D                 = 0x1C,
-    MOD_SHAPING_RRC_BT_05_D                 = 0x1D,
-    MOD_SHAPING_RRC_BT_07_D                 = 0x1E,
-    MOD_SHAPING_RRC_BT_1_D                  = 0x1F,
-};
+}RadioModShapings_t;
 
 /*!
  * \brief Represents the modulation shaping parameter
  */
-enum RadioRxBandwidth_t
+typedef enum
 {
     RX_BW_4800                              = 0x1F,
     RX_BW_5800                              = 0x17,
@@ -247,18 +270,15 @@
     RX_BW_156200                            = 0x1A,
     RX_BW_187200                            = 0x12,
     RX_BW_234300                            = 0x0A,
-    RX_BW_312000                            = 0x18,
+    RX_BW_312000                            = 0x19,
     RX_BW_373600                            = 0x11,
-    RX_BW_467000                            = 0x1F,
-    RX_BW_619300                            = 0x18,
-    RX_BW_742400                            = 0x10,
-    RX_BW_929000                            = 0x08,
-};
+    RX_BW_467000                            = 0x09,
+}RadioRxBandwidth_t;
 
 /*!
  * \brief Represents the possible spreading factor values in LoRa packet types
  */
-enum RadioLoRaSpreadingFactors_t
+typedef enum
 {
     LORA_SF5                                = 0x05,
     LORA_SF6                                = 0x06,
@@ -268,12 +288,12 @@
     LORA_SF10                               = 0x0A,
     LORA_SF11                               = 0x0B,
     LORA_SF12                               = 0x0C,
-};
+}RadioLoRaSpreadingFactors_t;
 
 /*!
  * \brief Represents the bandwidth values for LoRa packet type
  */
-enum RadioLoRaBandwidths_t
+typedef enum
 {
     LORA_BW_500                             = 6,
     LORA_BW_250                             = 5,
@@ -284,142 +304,124 @@
     LORA_BW_020                             = 9,
     LORA_BW_015                             = 1,
     LORA_BW_010                             = 8,
-    LORA_BW_007                             = 0,  
-};
+    LORA_BW_007                             = 0,
+}RadioLoRaBandwidths_t;
 
 /*!
  * \brief Represents the coding rate values for LoRa packet type
  */
-enum RadioLoRaCodingRates_t
+typedef enum
 {
     LORA_CR_4_5                             = 0x01,
     LORA_CR_4_6                             = 0x02,
     LORA_CR_4_7                             = 0x03,
     LORA_CR_4_8                             = 0x04,
-    LORA_CR_LI_4_5                          = 0x05,
-    LORA_CR_LI_4_6                          = 0x06,
-    LORA_CR_LI_4_7                          = 0x07,
-};
-
-/*!
- * \brief Represents the preamble length values
- */
-enum RadioPreambleLengths_t
-{
-    RADIO_PREAMBLE_LENGTH_04_BITS           = 0x00,         //!< Preamble length: 04 bits
-    RADIO_PREAMBLE_LENGTH_08_BITS           = 0x01,         //!< Preamble length: 08 bits
-    RADIO_PREAMBLE_LENGTH_12_BITS           = 0x02,         //!< Preamble length: 12 bits
-    RADIO_PREAMBLE_LENGTH_16_BITS           = 0x03,         //!< Preamble length: 16 bits
-    RADIO_PREAMBLE_LENGTH_20_BITS           = 0x04,         //!< Preamble length: 20 bits
-    RADIO_PREAMBLE_LENGTH_24_BITS           = 0x05,         //!< Preamble length: 24 bits
-    RADIO_PREAMBLE_LENGTH_28_BITS           = 0x06,         //!< Preamble length: 28 bits
-    RADIO_PREAMBLE_LENGTH_32_BITS           = 0x07,         //!< Preamble length: 32 bits
-};
+}RadioLoRaCodingRates_t;
 
 /*!
  * \brief Represents the preamble length used to detect the packet on Rx side
  */
-enum RadioPreambleDetection_t
+typedef enum
 {
     RADIO_PREAMBLE_DETECTOR_OFF             = 0x00,         //!< Preamble detection length off
     RADIO_PREAMBLE_DETECTOR_08_BITS         = 0x04,         //!< Preamble detection length 8 bits
-    RADIO_PREAMBLE_DETECTOR_12_BITS         = 0x05,         //!< Preamble detection length 12 bits
-    RADIO_PREAMBLE_DETECTOR_16_BITS         = 0x06,         //!< Preamble detection length 16 bits
-    RADIO_PREAMBLE_DETECTOR_20_BITS         = 0x07,         //!< Preamble detection length 20 bits
-};
-
-/*!
- * \brief The length of sync words 
- */
-enum RadioSyncWordLengths_t
-{
-    RADIO_SYNCWORD_LENGTH_1_BYTE            = 0x00,         //!< Sync word length: 1 byte
-    RADIO_SYNCWORD_LENGTH_2_BYTE            = 0x01,         //!< Sync word length: 2 bytes
-    RADIO_SYNCWORD_LENGTH_3_BYTE            = 0x02,         //!< Sync word length: 3 bytes
-    RADIO_SYNCWORD_LENGTH_4_BYTE            = 0x03,         //!< Sync word length: 4 bytes
-    RADIO_SYNCWORD_LENGTH_5_BYTE            = 0x04,         //!< Sync word length: 5 bytes
-    RADIO_SYNCWORD_LENGTH_6_BYTE            = 0x05,         //!< Sync word length: 6 bytes
-    RADIO_SYNCWORD_LENGTH_7_BYTE            = 0x06,         //!< Sync word length: 7 bytes
-    RADIO_SYNCWORD_LENGTH_8_BYTE            = 0x07,         //!< Sync word length: 8 bytes
-};
+    RADIO_PREAMBLE_DETECTOR_16_BITS         = 0x05,         //!< Preamble detection length 16 bits
+    RADIO_PREAMBLE_DETECTOR_24_BITS         = 0x06,         //!< Preamble detection length 24 bits
+    RADIO_PREAMBLE_DETECTOR_32_BITS         = 0x07,         //!< Preamble detection length 32 bit
+}RadioPreambleDetection_t;
 
 /*!
  * \brief Represents the possible combinations of SyncWord correlators activated
  */
-enum RadioAddressComp_t
+typedef enum
 {
     RADIO_ADDRESSCOMP_FILT_OFF              = 0x00,         //!< No correlator turned on, i.e. do not search for SyncWord
     RADIO_ADDRESSCOMP_FILT_NODE             = 0x01,
     RADIO_ADDRESSCOMP_FILT_NODE_BROAD       = 0x02,
-
-};
+}RadioAddressComp_t;
 
 /*!
  *  \brief Radio packet length mode
  */
-enum RadioPacketLengthModes_t
+typedef enum
 {
     RADIO_PACKET_FIXED_LENGTH               = 0x00,         //!< The packet is known on both sides, no header included in the packet
     RADIO_PACKET_VARIABLE_LENGTH            = 0x01,         //!< The packet is on variable size, header included
-};
+}RadioPacketLengthModes_t;
 
 /*!
  * \brief Represents the CRC length
  */
-enum RadioCrcTypes_t
+typedef enum
 {
     RADIO_CRC_OFF                           = 0x01,         //!< No CRC in use
     RADIO_CRC_1_BYTES                       = 0x00,
     RADIO_CRC_2_BYTES                       = 0x02,
     RADIO_CRC_1_BYTES_INV                   = 0x04,
     RADIO_CRC_2_BYTES_INV                   = 0x06,
-};
+    RADIO_CRC_2_BYTES_IBM                   = 0xF1,
+    RADIO_CRC_2_BYTES_CCIT                  = 0xF2,
+}RadioCrcTypes_t;
 
 /*!
  * \brief Radio whitening mode activated or deactivated
  */
-enum RadioDcFree_t
+typedef enum
 {
     RADIO_DC_FREE_OFF                       = 0x00,
-    RADIO_DC_FREEMANCHESTER                 = 0x02,
     RADIO_DC_FREEWHITENING                  = 0x01,
-};
+}RadioDcFree_t;
 
 /*!
  * \brief Holds the lengths mode of a LoRa packet type
  */
-enum RadioLoRaPacketLengthsMode_t
+typedef enum
 {
     LORA_PACKET_VARIABLE_LENGTH             = 0x00,         //!< The packet is on variable size, header included
     LORA_PACKET_FIXED_LENGTH                = 0x01,         //!< The packet is known on both sides, no header included in the packet
     LORA_PACKET_EXPLICIT                    = LORA_PACKET_VARIABLE_LENGTH,
     LORA_PACKET_IMPLICIT                    = LORA_PACKET_FIXED_LENGTH,
-};
+}RadioLoRaPacketLengthsMode_t;
 
 /*!
  * \brief Represents the CRC mode for LoRa packet type
  */
-enum RadioLoRaCrcModes_t
+typedef enum
 {
     LORA_CRC_ON                             = 0x01,         //!< CRC activated
     LORA_CRC_OFF                            = 0x00,         //!< CRC not used
-};
+}RadioLoRaCrcModes_t;
 
 /*!
  * \brief Represents the IQ mode for LoRa packet type
  */
-enum RadioLoRaIQModes_t
+typedef enum
 {
     LORA_IQ_NORMAL                          = 0x00,
     LORA_IQ_INVERTED                        = 0x01,
-};
+}RadioLoRaIQModes_t;
+
+/*!
+ * \brief Represents the volatge used to control the TCXO on/off from DIO3
+ */
+typedef enum
+{
+    TCXO_CTRL_1_6V                          = 0x00,
+    TCXO_CTRL_1_7V                          = 0x01,
+    TCXO_CTRL_1_8V                          = 0x02,
+    TCXO_CTRL_2_2V                          = 0x03,
+    TCXO_CTRL_2_4V                          = 0x04,
+    TCXO_CTRL_2_7V                          = 0x05,
+    TCXO_CTRL_3_0V                          = 0x06,
+    TCXO_CTRL_3_3V                          = 0x07,
+}RadioTcxoCtrlVoltage_t;
 
 /*!
  * \brief Represents the interruption masks available for the radio
  *
  * \remark Note that not all these interruptions are available for all packet types
  */
-enum RadioIrqMasks_t
+typedef enum
 {
     IRQ_RADIO_NONE                          = 0x0000,
     IRQ_TX_DONE                             = 0x0001,
@@ -427,33 +429,24 @@
     IRQ_PREAMBLE_DETECTED                   = 0x0004,
     IRQ_SYNCWORD_VALID                      = 0x0008,
     IRQ_HEADER_VALID                        = 0x0010,
-    IRQ_HEADER_ERROR                        = 0x0020,      
+    IRQ_HEADER_ERROR                        = 0x0020,
     IRQ_CRC_ERROR                           = 0x0040,
     IRQ_CAD_DONE                            = 0x0080,
     IRQ_CAD_ACTIVITY_DETECTED               = 0x0100,
     IRQ_RX_TX_TIMEOUT                       = 0x0200,
-    IRQ_RANGING_SLAVE_REQUEST_VALID         = 0x0400,
-    IRQ_RANGING_SLAVE_REQUEST_DISCARDED     = 0x0800,
-    IRQ_RANGING_SLAVE_RESPONSE_DONE         = 0x1000,
-    IRQ_RANGING_MASTER_RESULT_VALID         = 0x2000,
-    IRQ_RANGING_MASTER_RESULT_TIMEOUT       = 0x4000,
-     
     IRQ_RADIO_ALL                           = 0xFFFF,
-};
-
-
-
+}RadioIrqMasks_t;
 
 /*!
  * \brief Represents all possible opcode understood by the radio
  */
-enum RadioCommands_t
+typedef enum RadioCommands_e
 {
     RADIO_GET_STATUS                        = 0xC0,
     RADIO_WRITE_REGISTER                    = 0x0D,
-    RADIO_READ_REGISTER                     = 0x1D, 
+    RADIO_READ_REGISTER                     = 0x1D,
     RADIO_WRITE_BUFFER                      = 0x0E,
-    RADIO_READ_BUFFER                       = 0x1E,  
+    RADIO_READ_BUFFER                       = 0x1E,
     RADIO_SET_SLEEP                         = 0x84,
     RADIO_SET_STANDBY                       = 0x80,
     RADIO_SET_FS                            = 0xC1,
@@ -461,14 +454,13 @@
     RADIO_SET_RX                            = 0x82,
     RADIO_SET_RXDUTYCYCLE                   = 0x94,
     RADIO_SET_CAD                           = 0xC5,
-    RADIO_SET_AUTOTXRX                      = 0x87,  
     RADIO_SET_TXCONTINUOUSWAVE              = 0xD1,
     RADIO_SET_TXCONTINUOUSPREAMBLE          = 0xD2,
     RADIO_SET_PACKETTYPE                    = 0x8A,
     RADIO_GET_PACKETTYPE                    = 0x11,
     RADIO_SET_RFFREQUENCY                   = 0x86,
     RADIO_SET_TXPARAMS                      = 0x8E,
-    RADIO_SET_PA_OPT                        = 0x95,
+    RADIO_SET_PACONFIG                      = 0x95,
     RADIO_SET_CADPARAMS                     = 0x88,
     RADIO_SET_BUFFERBASEADDRESS             = 0x8F,
     RADIO_SET_MODULATIONPARAMS              = 0x8B,
@@ -477,50 +469,43 @@
     RADIO_GET_PACKETSTATUS                  = 0x14,
     RADIO_GET_RSSIINST                      = 0x15,
     RADIO_GET_STATS                         = 0x10,
-    RADIO_RESET_STATS                       = 0x00,         
-    RADIO_CFG_DIOIRQ                        = 0x08,   
+    RADIO_RESET_STATS                       = 0x00,
+    RADIO_CFG_DIOIRQ                        = 0x08,
     RADIO_GET_IRQSTATUS                     = 0x12,
     RADIO_CLR_IRQSTATUS                     = 0x02,
     RADIO_CALIBRATE                         = 0x89,
     RADIO_SET_REGULATORMODE                 = 0x96,
     RADIO_SET_PRAMSWAPCMD                   = 0x8D,
     RADIO_GET_ERROR                         = 0x17,
-    RADIO_SET_LONGPREAMBLE                  = 0x90,
+    RADIO_SET_TCXOMODE                      = 0x97,
     RADIO_SET_TXFALLBACKMODE                = 0x93,
-};
-
-/*!
-* \brief RX_TX_CONTINUOUS and RX_TX_SINGLE are two particular values for TickTime.
-* The former keep the radio in Rx or Tx mode, even after successfull reception
-* or transmission. It should never generate Timeout interrupt.
-* The later let the radio enought time to make one reception or transmission.
-* No Timeout interrupt is generated, and the radio fall in StandBy mode after
-* reception or transmission.
-*/
-#define RX_TX_CONTINUOUS ( TickTime_t ){ RADIO_TICK_SIZE_0015_US, 0xFFFF }
-#define RX_TX_SINGLE     ( TickTime_t ){ RADIO_TICK_SIZE_0015_US, 0 }
+    RADIO_SET_RFSWITCHMODE                  = 0x9D,
+    RADIO_SET_STOPRXTIMERONPREAMBLE         = 0x9F,
+    RADIO_SET_LONGPREAMBLE                  = 0x90,
+    RADIO_SET_LORASYMBTIMEOUT               = 0xA0,
+}RadioCommands_t;
 
 /*!
  * \brief The type describing the modulation parameters for every packet types
  */
 typedef struct
 {
-    RadioPacketType_t                    PacketType;        //!< Packet to which the modulation parameters are referring to.
-    union
+    RadioPacketTypes_t                   PacketType;        //!< Packet to which the modulation parameters are referring to.
+    struct
     {
-        uint8_t Buffer[8];
         struct
         {
             uint32_t                     BitRate;
             uint32_t                     Fdev;
-            RadioModShapings_t           PulseShape:8;
-            uint8_t                      BW;
+            RadioModShapings_t           ModulationShaping;
+            uint8_t                      Bandwidth;
         }Gfsk;
         struct
         {
             RadioLoRaSpreadingFactors_t  SpreadingFactor;   //!< Spreading Factor for the LoRa modulation
             RadioLoRaBandwidths_t        Bandwidth;         //!< Bandwidth for the LoRa modulation
             RadioLoRaCodingRates_t       CodingRate;        //!< Coding rate for the LoRa modulation
+            uint8_t                      LowDatarateOptimize; //!< Indicates if the modem uses the low datarate optimization
         }LoRa;
     }Params;                                                //!< Holds the modulation parameters structure
 }ModulationParams_t;
@@ -530,38 +515,34 @@
  */
 typedef struct
 {
-    RadioPacketType_t                    PacketType;        //!< Packet to which the packet parameters are referring to.
-    union
+    RadioPacketTypes_t                    PacketType;        //!< Packet to which the packet parameters are referring to.
+    struct
     {
-        uint8_t Buffer[8];
-        
         /*!
          * \brief Holds the GFSK packet parameters
          */
         struct
         {
-            uint8_t PreambleTxLength;       //!< The preamble tx length for GFSK packet type
-            uint8_t PreambleDetectLength;   //!< The preamble rx length for GFSK packet type
-            
-            RadioSyncWordLengths_t       SyncWordLength;    //!< The synchronization word length for GFSK packet type
-            RadioAddressComp_t           AddrComp;          
+            uint16_t                     PreambleLength;    //!< The preamble Tx length for GFSK packet type in bit
+            RadioPreambleDetection_t     PreambleMinDetect; //!< The preamble Rx length minimal for GFSK packet type
+            uint8_t                      SyncWordLength;    //!< The synchronization word length for GFSK packet type
+            RadioAddressComp_t           AddrComp;          //!< Activated SyncWord correlators
             RadioPacketLengthModes_t     HeaderType;        //!< If the header is explicit, it will be transmitted in the GFSK packet. If the header is implicit, it will not be transmitted
             uint8_t                      PayloadLength;     //!< Size of the payload in the GFSK packet
             RadioCrcTypes_t              CrcLength;         //!< Size of the CRC block in the GFSK packet
-            RadioDcFree_t                DcFree;            
+            RadioDcFree_t                DcFree;
         }Gfsk;
         /*!
          * \brief Holds the LoRa packet parameters
          */
         struct
         {
-            uint8_t                      PreambleLength;    //!< The preamble length is the number of LoRa symbols in the preamble. To set it, use the following formula @code Number of symbols = PreambleLength[3:0] * ( 2^PreambleLength[7:4] ) @endcode
+            uint16_t                     PreambleLength;    //!< The preamble length is the number of LoRa symbols in the preamble
             RadioLoRaPacketLengthsMode_t HeaderType;        //!< If the header is explicit, it will be transmitted in the LoRa packet. If the header is implicit, it will not be transmitted
             uint8_t                      PayloadLength;     //!< Size of the payload in the LoRa packet
             RadioLoRaCrcModes_t          CrcMode;           //!< Size of CRC block in LoRa packet
             RadioLoRaIQModes_t           InvertIQ;          //!< Allows to swap IQ for LoRa packet
         }LoRa;
-
     }Params;                                                //!< Holds the packet parameters structure
 }PacketParams_t;
 
@@ -570,23 +551,24 @@
  */
 typedef struct
 {
-    RadioPacketType_t                    packetType;        //!< Packet to which the packet status are referring to.
-    union
+    RadioPacketTypes_t                    packetType;      //!< Packet to which the packet status are referring to.
+    struct
     {
         struct
         {
             uint8_t RxStatus;
             int8_t RssiAvg;                                //!< The averaged RSSI
             int8_t RssiSync;                               //!< The RSSI measured on last packet
+            uint32_t FreqError;
         }Gfsk;
         struct
         {
             int8_t RssiPkt;                                //!< The RSSI of the last packet
             int8_t SnrPkt;                                 //!< The SNR of the last packet
             int8_t SignalRssiPkt;
+            uint32_t FreqError;
         }LoRa;
-
-    };
+    }Params;
 }PacketStatus_t;
 
 /*!
@@ -594,10 +576,10 @@
  */
 typedef struct
 {
-    RadioPacketType_t                    packetType;        //!< Packet to which the packet status are referring to.
-    uint16_t NbPktReceived;
-    uint16_t NbPktCrcOk;
-    uint16_t NbPktLengthError;
+    RadioPacketTypes_t                    packetType;       //!< Packet to which the packet status are referring to.
+    uint16_t PacketReceived;
+    uint16_t CrcOk;
+    uint16_t LengthError;
 }RxCounter_t;
 
 /*!
@@ -605,18 +587,18 @@
  */
 typedef union
 {
-    uint8_t Value;
     struct
     {
-        uint8_t Reserved       : 1;
-        uint8_t ImgEnable      : 1;
-        uint8_t ADCBulkPEnable : 1;                             //!< Calibrate ADC bulkP
-        uint8_t ADCBulkNEnable : 1;                             //!< Calibrate ADC bulkN
+        uint8_t RC64KEnable    : 1;                             //!< Calibrate RC64K clock
+        uint8_t RC13MEnable    : 1;                             //!< Calibrate RC13M clock
+        uint8_t PLLEnable      : 1;                             //!< Calibrate PLL
         uint8_t ADCPulseEnable : 1;                             //!< Calibrate ADC Pulse
-        uint8_t PLLEnable      : 1;                             //!< Calibrate PLL
-        uint8_t RC13MEnable    : 1;                             //!< Calibrate RC13M clock
-        uint8_t RC64KEnable    : 1;                             //!< Calibrate RC64K clock  
-    } Fields;
+        uint8_t ADCBulkNEnable : 1;                             //!< Calibrate ADC bulkN
+        uint8_t ADCBulkPEnable : 1;                             //!< Calibrate ADC bulkP
+        uint8_t ImgEnable      : 1;
+        uint8_t                : 1;
+    }Fields;
+    uint8_t Value;
 }CalibrationParams_t;
 
 /*!
@@ -624,17 +606,36 @@
  */
 typedef union
 {
-    uint8_t Value;
     struct
     {
         uint8_t WakeUpRTC               : 1;                    //!< Get out of sleep mode if wakeup signal received from RTC
         uint8_t Reset                   : 1;
         uint8_t WarmStart               : 1;
         uint8_t Reserved                : 5;
-    } Fields;
-
+    }Fields;
+    uint8_t Value;
 }SleepParams_t;
 
+/*!
+ * \brief Represents the possible radio system error states
+ */
+typedef union
+{
+    struct
+    {
+        uint8_t Rc64kCalib              : 1;                    //!< RC 64kHz oscillator calibration failed
+        uint8_t Rc13mCalib              : 1;                    //!< RC 13MHz oscillator calibration failed
+        uint8_t PllCalib                : 1;                    //!< PLL calibration failed
+        uint8_t AdcCalib                : 1;                    //!< ADC calibration failed
+        uint8_t ImgCalib                : 1;                    //!< Image calibration failed
+        uint8_t XoscStart               : 1;                    //!< XOSC oscillator failed to start
+        uint8_t PllLock                 : 1;                    //!< PLL lock failed
+        uint8_t BuckStart               : 1;                    //!< Buck converter failed to start
+        uint8_t PaRamp                  : 1;                    //!< PA ramp failed
+        uint8_t                         : 7;                    //!< Reserved
+    }Fields;
+    uint16_t Value;
+}RadioError_t;
 
 /*!
  * \brief Represents the SX126x and its features
@@ -646,56 +647,49 @@
 public:
     /*!
      * \brief Instantiates a SX126x object and provides API functions to communicates with the radio
-     *
-     * \param [in]  txDone                Pointer to a function run on successful transmission
-     * \param [in]  rxDone                Pointer to a function run on successful reception
-     * \param [in]  rxPblSyncWordHeader   Pointer to a function run on successful SyncWord, pbl or header reception
-     * \param [in]  rxtxTimeout           Pointer to a function run on transmission/reception timeout
-     * \param [in]  rxError               Pointer to a function run on reception error
-     * \param [in]  rangingDone           Pointer to a function run on ranging terminated
-     * \param [in]  cadDone               Pointer to a function run on channel activity detected
-     *
+     * \param [in]  callbacks      Pointer to the callbacks structure defining
+     *                             all callbacks function pointers
      */
-    SX126x( void ( *txDone )( ), void ( *rxDone )( ), void ( *rxPblSyncWordHeader )(IrqPblSyncHeaderCode_t val ),
-            void ( *rxTxTimeout )( IrqTimeoutCode_t timeoutCode ), void ( *rxError )( IrqErrorCode_t errorCode ),
-            void ( *cadDone )( bool channelActivityDetected ),  void ( *onDioIrq )( ) ): Radio( txDone, rxDone, rxPblSyncWordHeader, rxTxTimeout, rxError, cadDone )
+    SX126x( RadioCallbacks_t *callbacks ):
+        Radio( callbacks )
     {
-
-        this->dioIrq = &SX126x::OnDioIrq;
-      
-        this->onCustomDioIrq = onDioIrq;
-  
-        this->PacketType = PACKET_TYPE_RESERVED;
+        this->dioIrq      = &SX126x::OnDioIrq;
+        this->PacketType  = PACKET_TYPE_NONE;
+        this->PollingMode = false;
+        this->IrqState    = false;
     }
 
     virtual ~SX126x( )
     {
     }
 
+private:
     /*!
      * \brief Holds the internal operating mode of the radio
      */
     RadioOperatingModes_t OperatingMode;
-    
-    uint16_t LastIrqs;
-
-private:
-
 
     /*!
      * \brief Stores the current packet type set in the radio
      */
-    RadioPacketType_t PacketType;
+    RadioPacketTypes_t PacketType;
 
+    /*!
+     * \brief Holds a flag raised on radio interrupt
+     */
+    bool IrqState;
 
     /*!
      * \brief Hardware DIO IRQ functions
      */
     DioIrqHandler dioIrq;
 
-protected:
+    /*!
+     * \brief Holds the polling state of the driver
+     */
+    bool PollingMode;
 
-    void ( *onCustomDioIrq )( );
+protected:
 
     /*!
      * \brief Sets a function to be triggered on radio interrupt
@@ -705,6 +699,12 @@
      */
     virtual void IoIrqInit( DioIrqHandler irqHandler ) = 0;
 
+    /*!
+     * \brief DIOs interrupt callback
+     *
+     * \remark Called to handle all 3 DIOs pins
+     */
+    void OnDioIrq( void );
 public:
     /*!
      * \brief Initializes the radio driver
@@ -712,16 +712,393 @@
     void Init( void );
 
     /*!
-     * \brief Initializes the radio registers to the recommended default values
+     * \brief Gets the current Operation Mode of the Radip
+     *
+     * \retval      RadioOperatingModes_t last operating mode
+     */
+    virtual RadioOperatingModes_t GetOperatingMode( void );
+
+    /*!
+     * \brief Wakeup the radio if it is in Sleep mode and check that Busy is low
+     */
+    virtual void CheckDeviceReady( void );
+
+    /*!
+     * \brief Saves the payload to be send in the radio buffer
+     *
+     * \param [in]  payload       A pointer to the payload
+     * \param [in]  size          The size of the payload
+     */
+    void SetPayload( uint8_t *payload, uint8_t size );
+
+    /*!
+     * \brief Reads the payload received. If the received payload is longer
+     * than maxSize, then the method returns 1 and do not set size and payload.
+     *
+     * \param [out] payload       A pointer to a buffer into which the payload will be copied
+     * \param [out] size          A pointer to the size of the payload received
+     * \param [in]  maxSize       The maximal size allowed to copy into the buffer
+     */
+    uint8_t GetPayload( uint8_t *payload, uint8_t *size, uint8_t maxSize );
+
+    /*!
+     * \brief Sends a payload
+     *
+     * \param [in]  payload       A pointer to the payload to send
+     * \param [in]  size          The size of the payload to send
+     * \param [in]  timeout       The timeout for Tx operation
+     */
+    void SendPayload( uint8_t *payload, uint8_t size, uint32_t timeout );
+
+    /*!
+     * \brief Sets the Sync Word given by index used in GFSK
+     *
+     * \param [in]  syncWord      SyncWord bytes ( 8 bytes )
+     *
+     * \retval      status        [0: OK, 1: NOK]
+     */
+    uint8_t SetSyncWord( uint8_t *syncWord );
+
+    /*!
+     * \brief Sets the Initial value for the LFSR used for the CRC calculation
+     *
+     * \param [in]  seed          Initial LFSR value ( 2 bytes )
+     *
+     */
+    void SetCrcSeed( uint16_t seed );
+
+    /*!
+     * \brief Sets the seed used for the CRC calculation
+     *
+     * \param [in]  seed          The seed value
+     *
+     */
+    void SetCrcPolynomial( uint16_t seed );
+
+    /*!
+     * \brief Sets the Initial value of the LFSR used for the whitening in GFSK protocols
+     *
+     * \param [in]  seed          Initial LFSR value
+     */
+    void SetWhiteningSeed( uint16_t seed );
+    
+    /*!
+     * \brief Gets a 32 bits random value generated by the radio
+     *
+     * \remark The radio must be in reception mode before executing this function
+     *
+     * \retval randomValue    32 bits random value
+     */
+    uint32_t GetRandom( void );
+
+    /*!
+     * \brief Sets the radio in sleep mode
+     *
+     * \param [in]  sleepConfig   The sleep configuration describing data
+     *                            retention and RTC wake-up
+     */
+    void SetSleep( SleepParams_t sleepConfig );
+
+    /*!
+     * \brief Sets the radio in configuration mode
+     *
+     * \param [in]  mode          The standby mode to put the radio into
      */
-    void SetRegistersDefault( void );
+    void SetStandby( RadioStandbyModes_t mode );
+
+    /*!
+     * \brief Sets the radio in FS mode
+     */
+    void SetFs( void );
+
+    /*!
+     * \brief Sets the radio in transmission mode
+     *
+     * \param [in]  timeout       Structure describing the transmission timeout value
+     */
+    void SetTx( uint32_t timeout );
+
+    /*!
+     * \brief Sets the radio in reception Boosted mode
+     *
+     * \param [in]  timeout       Structure describing the transmission timeout value
+     */
+    void SetRxBoosted( uint32_t timeout );
+
+    /*!
+     * \brief Sets the radio in reception mode
+     *
+     * \param [in]  timeout       Structure describing the reception timeout value
+     */
+    void SetRx( uint32_t timeout );
+
+    /*!
+     * \brief Sets the Rx duty cycle management parameters
+     *
+     * \param [in]  rxTime        Structure describing reception timeout value
+     * \param [in]  sleepTime     Structure describing sleep timeout value
+     */
+    void SetRxDutyCycle( uint32_t rxTime, uint32_t sleepTime );
+
+    /*!
+     * \brief Sets the radio in CAD mode
+     */
+    void SetCad( void );
+
+    /*!
+     * \brief Sets the radio in continuous wave transmission mode
+     */
+    void SetTxContinuousWave( void );
+
+    /*!
+     * \brief Sets the radio in continuous preamble transmission mode
+     */
+    void SetTxInfinitePreamble( void );
+
+    /*!
+     * \brief Decide which interrupt will stop the internal radio rx timer.
+     *
+     * \param [in]  enable          [0: Timer stop after header/syncword detection
+     *                               1: Timer stop after preamble detection]
+     */
+    void SetStopRxTimerOnPreambleDetect( bool enable );
+
+    /*!
+     * \brief Set the number of symbol the radio will wait to validate a reception
+     *
+     * \param [in]  SymbNum          number of LoRa symbols
+     */
+    void SetLoRaSymbNumTimeout( uint8_t SymbNum );
+    
+    /*!
+     * \brief Sets the power regulators operating mode
+     *
+     * \param [in]  mode          [0: LDO, 1:DC_DC]
+     */
+    void SetRegulatorMode( RadioRegulatorMode_t mode );
+    
+    /*!
+     * \brief Calibrates the given radio block
+     *
+     * \param [in]  calibParam    The description of blocks to be calibrated
+     */
+    void Calibrate( CalibrationParams_t calibParam );
+
+    /*!
+     * \brief Activate the extention of the timeout when long preamble is used
+     *
+     * \param [in]  enable      The radio will extend the timeout to cope with long preamble
+     */
+    void SetLongPreamble( uint8_t enable );
+
+    /*!
+     * \brief Sets the transmission parameters
+     *
+     * \param [in]  paDutyCycle     Duty Cycle for the PA
+     * \param [in]  HpMax           0 for sx1261, 7 for sx1262
+     * \param [in]  deviceSel       1 for sx1261, 0 for sx1262
+     * \param [in]  paLUT           0 for 14dBm LUT, 1 for 22dBm LUT
+     */
+    void SetPaConfig( uint8_t paDutyCycle, uint8_t HpMax, uint8_t deviceSel, uint8_t paLUT );
 
     /*!
-     * \brief Returns the current device firmware version
+     * \brief Defines into which mode the chip goes after a TX / RX done
+     *
+     * \param [in]  fallbackMode    The mode in which the radio goes
+     */
+    void SetRxTxFallbackMode( uint8_t fallbackMode );
+
+    /*!
+     * \brief   Sets the IRQ mask and DIO masks
+     *
+     * \param [in]  irqMask       General IRQ mask
+     * \param [in]  dio1Mask      DIO1 mask
+     * \param [in]  dio2Mask      DIO2 mask
+     * \param [in]  dio3Mask      DIO3 mask
+     */
+    void SetDioIrqParams( uint16_t irqMask, uint16_t dio1Mask, uint16_t dio2Mask, uint16_t dio3Mask );
+
+    /*!
+     * \brief Returns the current IRQ status
+     *
+     * \retval      irqStatus     IRQ status
+     */
+    uint16_t GetIrqStatus( void );
+
+    /*
+     * \brief Indicates if DIO2 is used to control an RF Switch
+     *
+     * \param [in] enable     true of false
+     */
+    void SetDio2AsRfSwitchCtrl( uint8_t enable );
+    
+    /*
+     * \brief Indicates if the Radio main clock is supplied from a tcxo
+     *
+     * \param [in] tcxoVoltage     voltage used to control the TCXO
+     * \param [in] timeout         time given to the TCXO to go to 32MHz
+     */
+    void SetDio3AsTcxoCtrl( RadioTcxoCtrlVoltage_t tcxoVoltage, uint32_t timeout );
+    
+    /*!
+     * \brief Sets the RF frequency
+     *
+     * \param [in]  frequency     RF frequency [Hz]
+     */
+    void SetRfFrequency( uint32_t frequency );
+
+    /*!
+     * \brief Sets the radio for the given protocol
+     *
+     * \param [in]  packetType    [PACKET_TYPE_GFSK, PACKET_TYPE_LORA]
+     *
+     * \remark This method has to be called before SetRfFrequency,
+     *         SetModulationParams and SetPacketParams
+     */
+    void SetPacketType( RadioPacketTypes_t packetType );
+
+    /*!
+     * \brief Gets the current radio protocol
+     *
+     * \retval      packetType    [PACKET_TYPE_GFSK, PACKET_TYPE_LORA]
+     */
+    RadioPacketTypes_t GetPacketType( void );
+
+    /*!
+     * \brief Sets the transmission parameters
+     *
+     * \param [in]  power         RF output power [-18..13] dBm
+     * \param [in]  rampTime      Transmission ramp up time
+     */
+    void SetTxParams( int8_t power, RadioRampTimes_t rampTime );
+    
+    /*!
+     * \brief Set the modulation parameters
+     *
+     * \param [in]  modParams     A structure describing the modulation parameters
+     */
+    void SetModulationParams( ModulationParams_t *modParams );
+
+    /*!
+     * \brief Sets the packet parameters
+     *
+     * \param [in]  packetParams  A structure describing the packet parameters
+     */
+    void SetPacketParams( PacketParams_t *packetParams );
+
+    /*!
+     * \brief Sets the Channel Activity Detection (CAD) parameters
      *
-     * \retval      version       Firmware version
+     * \param [in]  cadSymbolNum   The number of symbol to use for CAD operations
+     *                             [LORA_CAD_01_SYMBOL, LORA_CAD_02_SYMBOL,
+     *                              LORA_CAD_04_SYMBOL, LORA_CAD_08_SYMBOL,
+     *                              LORA_CAD_16_SYMBOL]
+     * \param [in]  cadDetPeak     Limite for detection of SNR peak used in the CAD
+     * \param [in]  cadDetMin      Set the minimum symbol recognition for CAD
+     * \param [in]  cadExitMode    Operation to be done at the end of CAD action
+     *                             [LORA_CAD_ONLY, LORA_CAD_RX, LORA_CAD_LBT]
+     * \param [in]  cadTimeout     Defines the timeout value to abort the CAD activity
+     */
+    void SetCadParams( RadioLoRaCadSymbols_t cadSymbolNum, uint8_t cadDetPeak, uint8_t cadDetMin, RadioCadExitModes_t cadExitMode, uint32_t cadTimeout );
+
+    /*!
+     * \brief Sets the data buffer base address for transmission and reception
+     *
+     * \param [in]  txBaseAddress Transmission base address
+     * \param [in]  rxBaseAddress Reception base address
+     */
+    void SetBufferBaseAddresses( uint8_t txBaseAddress, uint8_t rxBaseAddress );
+
+    /*!
+     * \brief Gets the current radio status
+     *
+     * \retval      status        Radio status
+     */
+    virtual RadioStatus_t GetStatus( void );
+
+    /*!
+     * \brief Returns the instantaneous RSSI value for the last packet received
+     *
+     * \retval      rssiInst      Instantaneous RSSI
+     */
+    int8_t GetRssiInst( void );
+
+    /*!
+     * \brief Gets the last received packet buffer status
+     *
+     * \param [out] payloadLength Last received packet payload length
+     * \param [out] rxStartBuffer Last received packet buffer address pointer
+     */
+    void GetRxBufferStatus( uint8_t *payloadLength, uint8_t *rxStartBuffer );
+
+    /*!
+     * \brief Gets the last received packet payload length
+     *
+     * \param [out] pktStatus     A structure of packet status
+     */
+    void GetPacketStatus( PacketStatus_t *pktStatus );
+
+    /*!
+     * \brief Returns the possible system erros
+     *
+     * \retval sysErrors Value representing the possible sys failures
      */
-    virtual uint16_t GetFirmwareVersion( void );
+    RadioError_t GetDeviceErrors( void );
+
+    /*!
+     * \brief Clears the IRQs
+     *
+     * \param [in]  irq           IRQ(s) to be cleared
+     */
+    void ClearIrqStatus( uint16_t irq );
+
+    /*!
+     * \brief Set the driver in polling mode.
+     *
+     * In polling mode the application is responsible to call ProcessIrqs( ) to
+     * execute callbacks functions.
+     * The default mode is Interrupt Mode.
+     * @code
+     * // Initializations and callbacks declaration/definition
+     * radio = SX126x( mosi, miso, sclk, nss, busy, int1, int2, int3, rst, &callbacks );
+     * radio.Init( );
+     * radio.SetPollingMode( );
+     *
+     * while( true )
+     * {
+     *                            //     IRQ processing is automatically done
+     *     radio.ProcessIrqs( );  // <-- here, as well as callback functions
+     *                            //     calls
+     *     // Do some applicative work
+     * }
+     * @endcode
+     *
+     * \see SX126x::SetInterruptMode
+     */
+     void SetPollingMode( void );
+
+    /*!
+     * \brief Set the driver in interrupt mode.
+     *
+     * In interrupt mode, the driver communicate with the radio during the
+     * interruption by direct calls to ProcessIrqs( ). The main advantage is
+     * the possibility to have low power application architecture.
+     * This is the default mode.
+     * @code
+     * // Initializations and callbacks declaration/definition
+     * radio = SX126x( mosi, miso, sclk, nss, busy, int1, int2, int3, rst, &callbacks );
+     * radio.Init( );
+     * radio.SetInterruptMode( );   // Optionnal. Driver default behavior
+     *
+     * while( true )
+     * {
+     *     // Do some applicative work
+     * }
+     * @endcode
+     *
+     * \see SX126x::SetPollingMode
+     */
+     void SetInterruptMode( void );
 
     /*!
      * \brief Resets the radio
@@ -766,7 +1143,7 @@
      * \param [in]  address       Register address
      * \param [in]  value         New register value
      */
-    virtual void WriteRegister( uint16_t address, uint8_t value ) = 0;
+    virtual void WriteReg( uint16_t address, uint8_t value ) = 0;
 
     /*!
      * \brief Reads multiple radio registers starting at address
@@ -784,7 +1161,7 @@
      *
      * \retval      data          Register value
      */
-    virtual uint8_t ReadRegister( uint16_t address ) = 0;
+    virtual uint8_t ReadReg( uint16_t address ) = 0;
 
     /*!
      * \brief Writes Radio Data Buffer with buffer of size starting at offset.
@@ -808,316 +1185,32 @@
      * \brief Gets the current status of the radio DIOs
      *
      * \retval      status        [Bit #3: DIO3, Bit #2: DIO2,
-     *                             Bit #1: DIO1, Bit #0: DIO0]
+     *                             Bit #1: DIO1, Bit #0: BUSY]
      */
     virtual uint8_t GetDioStatus( void ) = 0;
 
     /*!
-     * \brief Gets the current radio status
-     *
-     * \retval      status        Radio status
-     */
-    virtual RadioStatus_t GetStatus( void );
-
-    /*!
-     * \brief Sets the radio in sleep mode
-     *
-     * \param [in]  sleepConfig   The sleep configuration describing data
-     *                            retention and RTC wake-up
-     */
-    void SetSleep( SleepParams_t sleepConfig );
-
-    /*!
-     * \brief Sets the radio in configuration mode
-     *
-     * \param [in]  mode          The standby mode to put the radio into
-     */
-    void SetStandby( RadioStandbyModes_t mode );
-
-    /*!
-     * \brief Sets the radio in FS mode
-     */
-    void SetFs( void );
-
-    /*!
-     * \brief Sets the radio in transmission mode
-     *
-     * \param [in]  timeout       Structure describing the transmission timeout value
-     */
-    void SetTx( uint32_t timeout );
-
-    /*!
-     * \brief Sets the radio in reception mode
+     * \brief Returns the device type
      *
-     * \param [in]  timeout       Structure describing the reception timeout value
-     */
-    void SetRx( uint32_t timeout );
-
-    /*!
-     * \brief Sets the Rx duty cycle management parameters
-     *
-     * \param [in]  rxTime        Structure describing reception timeout value
-     * \param [in]  sleepTime     Structure describing sleep timeout value
-     */
-    void SetRxDutyCycle( uint32_t rxTime, uint32_t sleepTime );
-
-    /*!
-     * \brief Sets the radio in CAD mode
-     */
-    void SetCad( void );
-
-    /*!
-     * \brief Sets the radio in continuous wave transmission mode
-     */
-    void SetTxContinuousWave( void );
-
-    /*!
-     * \brief Sets the radio in continuous preamble transmission mode
-     */
-    void SetTxContinuousPreamble( void );
-
-    /*!
-     * \brief Sets the radio for the given protocol
-     *
-     * \param [in]  packetType    [PACKET_TYPE_GFSK, PACKET_TYPE_LORA]
-     */
-    void SetPacketType( RadioPacketType_t packetType );
-
-    /*!
-     * \brief Gets the current radio protocol
-     *
-     * \retval      packetType    [PACKET_TYPE_GFSK, PACKET_TYPE_LORA]
+     * \retval      1: SX1261, 0: sx1262     
      */
-    RadioPacketType_t GetPacketType( void );
-
-    /*!
-     * \brief Sets the RF frequency
-     *
-     * \param [in]  frequency     RF frequency [Hz]
-     */
-    void SetRfFrequency( uint32_t frequency );
-
-    /*!
-     * \brief Sets the transmission parameters
-     *
-     * \param [in]  power         RF output power [-18..13] dBm
-     * \param [in]  rampTime      Transmission ramp up time
-     */
-    void SetTxParams( int8_t power, RadioRampTimes_t rampTime );
-
-    /*!
-     * \brief Sets the CAD parameters
-     *
-     * \param [in]  cadSymbolNum  The number of symbol to use for channel activity
-     *                            detection operations [LORA_CAD_01_SYMBOL, LORA_CAD_02_SYMBOL,
-     *                            LORA_CAD_04_SYMBOL, LORA_CAD_08_SYMBOL, LORA_CAD_16_SYMBOL]
-     */
-    void SetCadConfig( RadioLoRaCadSymbols_t cadSymbolNum , uint8_t cadExitMode, uint32_t cadRxTxTimeout);
-
-    /*!
-     * \brief Sets the data buffer base address for transmission and reception
-     *
-     * \param [in]  txBaseAddress Transmission base address
-     * \param [in]  rxBaseAddress Reception base address
-     */
-    void SetBufferBaseAddresses( uint8_t txBaseAddress, uint8_t rxBaseAddress );
-
-    /*!
-     * \brief Set the modulation parameters
-     *
-     * \param [in]  modParams     A structure describing the modulation parameters
-     */
-    void SetModulationParams( ModulationParams_t *modParams );
-
-    /*!
-     * \brief Sets the packet parameters
-     *
-     * \param [in]  packetParams  A structure describing the packet parameters
-     */
-    void SetPacketParams( PacketParams_t *packetParams );
-
-    /*!
-     * \brief Gets the last received packet buffer status
-     *
-     * \param [out] payloadLength Last received packet payload length
-     * \param [out] rxStartBuffer Last received packet buffer address pointer
-     */
-    void GetRxBufferStatus( uint8_t *payloadLength, uint8_t *rxStartBuffer );
-
-    /*!
-     * \brief Gets the last received packet payload length
-     *
-     * \param [out] pktStatus     A structure of packet status
-     */
-    void GetPacketStatus( PacketStatus_t *pktStatus );
-
-    /*!
-     * \brief Returns value of internal Rx counters when GFSK packet type is used
-     *
-     * \param [out] rxCounter     A structure holding Rx internal counters values
-     *
-     * \remark The Rx internal counters are only available for GFSK and LoRa packet types.
-     */
-    void GetStats( RxCounter_t *rxCounter );
-
-    void ResetStats();
-
-    uint8_t GetError();
+    virtual uint8_t GetDeviceType( void ) = 0;
 
     /*!
-     * \brief Returns the instantaneous RSSI value for the last packet received
-     *
-     * \retval      rssiInst      Instantaneous RSSI
-     */
-    int8_t GetRssiInst( void );
-
-    /*!
-     * \brief   Sets the IRQ mask and DIO masks
-     *
-     * \param [in]  irqMask       General IRQ mask
-     * \param [in]  dio1Mask      DIO1 mask
-     * \param [in]  dio2Mask      DIO2 mask
-     * \param [in]  dio3Mask      DIO3 mask
-     */
-    void SetDioIrqParams( uint16_t irqMask, uint16_t dio1Mask, uint16_t dio2Mask, uint16_t dio3Mask );
-
-    /*!
-     * \brief Returns the current IRQ status
-     *
-     * \retval      irqStatus     IRQ status
-     */
-    uint16_t GetIrqStatus( void );
-
-    /*!
-     * \brief Clears the IRQs
-     *
-     * \param [in]  irq           IRQ(s) to be cleared
+     * \brief RF Switch power on
      */
-    void ClearIrqStatus( uint16_t irq );
-
-    /*!
-     * \brief Calibrates the given radio block
-     *
-     * \param [in]  calibParam    The description of blocks to be calibrated
-     */
-    void Calibrate( CalibrationParams_t calibParam );
-
-    /*!
-     * \brief Sets the power regulators operating mode
-     *
-     * \param [in]  mode          [0: LDO, 1:DC_DC]
-     */
-    void SetRegulatorMode( uint8_t mode );
-
-
-    /*!
-     * \brief Sets the chip to automatically receive a packet after the end of a packet transmission
-     *
-     * \remark The offset is automatically compensated inside the function
-     *
-     * \param [in]  time          The delay in 15.625us after which a Rx or Tx is done
-     */
-    void SetAutoTxRx( uint32_t time, uint8_t intMode, uint32_t timeout );
-
-    /*!
-     * \brief Enables or disables long preamble detection mode
-     *
-     * \param [in]  enable        [0: Disable, 1: Enable]
-     */
-    void SetLongPreamble( uint8_t enable );
-
-    /*!
-     * \brief Saves the payload to be send in the radio buffer
-     *
-     * \param [in]  payload       A pointer to the payload
-     * \param [in]  size          The size of the payload
-     */
-    void SetPayload( uint8_t *payload, uint8_t size );
+    virtual void AntSwOn( void ) = 0;
 
     /*!
-     * \brief Reads the payload received. If the received payload is longer
-     * than maxSize, then the method returns 1 and do not set size and payload.
-     *
-     * \param [out] payload       A pointer to a buffer into which the payload will be copied
-     * \param [out] size          A pointer to the size of the payload received
-     * \param [in]  maxSize       The maximal size allowed to copy into the buffer
-     */
-    uint8_t GetPayload( uint8_t *buffer, uint8_t *size, uint8_t maxSize );
-
-    /*!
-     * \brief Sends a payload
-     *
-     * \param [in]  payload       A pointer to the payload to send
-     * \param [in]  size          The size of the payload to send
-     * \param [in]  timeout       The timeout for Tx operation
+     * \brief RF Switch power off
      */
-    void SendPayload( uint8_t *payload, uint8_t size, uint32_t timeout );
-
-    /*!
-     * \brief Sets the Sync Word given by index used in GFSK
-     *
-     * \param [in]  syncWord      SyncWord bytes ( 8 bytes )
-     *
-     * \retval      status        [0: OK, 1: NOK]
-     */
-    uint8_t SetSyncWord( uint8_t *syncWord );
-
-    /*!
-     * \brief Sets the Initial value for the LFSR used for the CRC calculation
-     *
-     * \param [in]  seed          Initial LFSR value ( 2 bytes )
-     *
-     */
-    void SetCrcSeed( uint16_t seed );
+    virtual void AntSwOff( void ) = 0;
 
     /*!
-     * \brief Sets the seed used for the CRC calculation
-     *
-     * \param [in]  seed          The seed value
-     *
-     */
-    void SetCrcPolynomial( uint16_t seed );
-
-    /*!
-     * \brief Sets the Initial value of the LFSR used for the whitening in GFSK, FloRa and BLE protocols
-     *
-     * \param [in]  seed          Initial LFSR value
-     */
-    void SetWhiteningSeed( uint8_t seed );
-
-    /*!
-     * \brief DIOs interrupt callback
-     *
-     * \remark Called to handle all 3 DIOs pins
-     */
-    void OnDioIrq( void );
-
-    /*!
-     * \brief Clears the instruction RAM
+     * \brief Process the analysis of radio IRQs and calls callback functions
+     *        depending on radio state
      */
-    virtual void ClearInstructionRam( void ) = 0;
-
-    /*!
-     * \brief Parses 1 HEX file line and writes the content to the instruction memory
-     *
-     * \param [in]  line          HEX file line string
-     *
-     * \retval      status        [0: ERROR, 1:OK]
-     */
-    int8_t ParseHexFileLine( char* line );
-
-    /*!
-     * \brief Gets individual fields for the given HEX file line
-     *
-     * \param [in]  line          HEX file line string
-     * \param [out] bytes         Bytes array to be written to the instruction memory
-     * \param [out] addr          Instruction memory address where to write the bytes array
-     * \param [out] num           Number of bytes in Bytes array
-     * \param [out] code          HEX file line type [0: instruction, 1: end of file, 2: begin of file]
-     *
-     * \retval      status        [0: ERROR, 1:OK]
-     */
-     int8_t GetHexFileLineFields( char* line, uint8_t *bytes, uint16_t *addr, uint16_t *num, uint8_t *code );
+    void ProcessIrqs( void );
 };
 
 #endif // __SX126x_H__