git » swiftpm » commit 5add9a1

Latest borogove

author Stephen Paul Weber
2026-02-10 13:52:47 UTC
committer Stephen Paul Weber
2026-02-10 13:52:47 UTC
parent fbd28a74a40364eb741fc51a06fa2fb8a4a8cb4e

Latest borogove

Sources/Borogove/Borogove.swift +1516 -1142
Sources/c_borogove/iinclude/Sys.h +0 -3
Sources/c_borogove/iinclude/borogove/Client.h +10 -0
Sources/c_borogove/iinclude/borogove/FormSection.h +1 -0
Sources/c_borogove/iinclude/borogove/FormSection__Companion.h +65 -0
Sources/c_borogove/iinclude/borogove/Persistence__Companion.h +96 -0
Sources/c_borogove/iinclude/borogove/calls/InitiatedSession.h +0 -13
Sources/c_borogove/iinclude/borogove/calls/PeerConnection.h +1 -0
Sources/c_borogove/iinclude/borogove/calls/Session.h +1 -0
Sources/c_borogove/iinclude/borogove/calls/Session__Companion.h +88 -0
Sources/c_borogove/iinclude/borogove/persistence/KeyValueStore.h +1 -0
Sources/c_borogove/iinclude/borogove/persistence/KeyValueStore__Companion.h +65 -0
Sources/c_borogove/iinclude/borogove/persistence/MediaStore.h +1 -0
Sources/c_borogove/iinclude/borogove/persistence/MediaStore__Companion.h +69 -0
Sources/c_borogove/iinclude/borogove/persistence/Sqlite.h +7 -0
Sources/c_borogove/iinclude/borogove/persistence/SqliteDriver.h +5 -6
Sources/c_borogove/iinclude/sys/db/Connection.h +0 -4
Sources/c_borogove/iinclude/sys/db/_Sqlite/SqliteConnection.h +0 -3
Sources/c_borogove/include/borogove.h +762 -718
Sources/c_borogove/src/HaxeCBridge.cpp +166 -166
Sources/c_borogove/src/Sys.cpp +0 -15
Sources/c_borogove/src/_HaxeCBridge/Internal.cpp +9 -9
Sources/c_borogove/src/__HaxeCBridgeBindings__.cpp +2434 -1676
Sources/c_borogove/src/__boot__.cpp +49 -16
Sources/c_borogove/src/__files__.cpp +12 -0
Sources/c_borogove/src/borogove/AttachmentSource.cpp +12 -12
Sources/c_borogove/src/borogove/AvailableChat.cpp +21 -21
Sources/c_borogove/src/borogove/Channel.cpp +1067 -989
Sources/c_borogove/src/borogove/Chat.cpp +1089 -1078
Sources/c_borogove/src/borogove/ChatAttachment.cpp +75 -75
Sources/c_borogove/src/borogove/ChatMessage.cpp +168 -168
Sources/c_borogove/src/borogove/ChatMessageBuilder.cpp +151 -151
Sources/c_borogove/src/borogove/Client.cpp +2933 -2833
Sources/c_borogove/src/borogove/Command.cpp +22 -22
Sources/c_borogove/src/borogove/CommandSession.cpp +85 -85
Sources/c_borogove/src/borogove/Config.cpp +6 -6
Sources/c_borogove/src/borogove/CustomEmojiReaction.cpp +3 -3
Sources/c_borogove/src/borogove/DirectChat.cpp +445 -445
Sources/c_borogove/src/borogove/EncryptionInfo.cpp +15 -15
Sources/c_borogove/src/borogove/Form.cpp +223 -223
Sources/c_borogove/src/borogove/FormField.cpp +94 -94
Sources/c_borogove/src/borogove/FormItem.cpp +53 -53
Sources/c_borogove/src/borogove/FormLayoutSection.cpp +125 -125
Sources/c_borogove/src/borogove/FormOption.cpp +6 -6
Sources/c_borogove/src/borogove/FormSection.cpp +14 -0
Sources/c_borogove/src/borogove/FormSection__Companion.cpp +166 -0
Sources/c_borogove/src/borogove/FormSubmitBuilder.cpp +87 -87
Sources/c_borogove/src/borogove/Hash.cpp +3 -3
Sources/c_borogove/src/borogove/Notification.cpp +36 -36
Sources/c_borogove/src/borogove/Participant.cpp +31 -31
Sources/c_borogove/src/borogove/Persistence.cpp +53 -7
Sources/c_borogove/src/borogove/Persistence__Companion.cpp +793 -0
Sources/c_borogove/src/borogove/Profile.cpp +31 -31
Sources/c_borogove/src/borogove/ProfileItem.cpp +240 -240
Sources/c_borogove/src/borogove/Reaction.cpp +9 -9
Sources/c_borogove/src/borogove/SerializedChat.cpp +76 -76
Sources/c_borogove/src/borogove/calls/AudioFormat.cpp +6 -6
Sources/c_borogove/src/borogove/calls/IncomingProposedSession.cpp +116 -116
Sources/c_borogove/src/borogove/calls/InitiatedSession.cpp +630 -777
Sources/c_borogove/src/borogove/calls/MediaStream.cpp +53 -53
Sources/c_borogove/src/borogove/calls/MediaStreamTrack.cpp +348 -332
Sources/c_borogove/src/borogove/calls/OutgoingProposedSession.cpp +124 -124
Sources/c_borogove/src/borogove/calls/OutgoingSession.cpp +27 -27
Sources/c_borogove/src/borogove/calls/PeerConnection.cpp +310 -289
Sources/c_borogove/src/borogove/calls/Session.cpp +24 -0
Sources/c_borogove/src/borogove/calls/Session__Companion.cpp +323 -0
Sources/c_borogove/src/borogove/calls/_Session/Session_Fields_.cpp +18 -18
Sources/c_borogove/src/borogove/persistence/KeyValueStore.cpp +14 -0
Sources/c_borogove/src/borogove/persistence/KeyValueStore__Companion.cpp +165 -0
Sources/c_borogove/src/borogove/persistence/MediaStore.cpp +16 -0
Sources/c_borogove/src/borogove/persistence/MediaStoreFS.cpp +18 -18
Sources/c_borogove/src/borogove/persistence/MediaStore__Companion.cpp +221 -0
Sources/c_borogove/src/borogove/persistence/Sqlite.cpp +1637 -1737
Sources/c_borogove/src/borogove/persistence/SqliteDriver.cpp +111 -150
Sources/c_borogove/src/borogove/streams/XmppStropheStream.cpp +130 -121
Sources/c_borogove/src/haxe/format/JsonPrinter.cpp +320 -456
Sources/c_borogove/src/sys/db/Connection.cpp +0 -1
Sources/c_borogove/src/sys/db/_Sqlite/SqliteConnection.cpp +0 -29
Sources/libdatachannel/libdatachannel +1 -1

diff --git a/Sources/Borogove/Borogove.swift b/Sources/Borogove/Borogove.swift
index 3af94cf..f09acb2 100644
--- a/Sources/Borogove/Borogove.swift
+++ b/Sources/Borogove/Borogove.swift
@@ -8,7 +8,7 @@ public func stop(_ wait: Bool) {
 	c_borogove.borogove_stop(wait)
 }
 
-public protocol SDKObject {
+public protocol SDKObject: Sendable {
 	var o: UnsafeMutableRawPointer {get}
 }
 
@@ -75,6 +75,55 @@ internal func withOptionalArrayOfCStrings<R>(
 }
 
 public protocol MediaStore: SDKObject {
+	func hasMedia(hashAlgorithm: String, hash: Array<UInt8>) async -> Bool
+
+	func removeMedia(hashAlgorithm: String, hash: Array<UInt8>) -> Void
+
+	func storeMedia(mime: String, bytes: Array<UInt8>) async -> Bool
+
+}
+
+public extension MediaStore {
+	func hasMedia(hashAlgorithm: String, hash: Array<UInt8>) async -> Bool {
+		return await withUnsafeContinuation { cont in
+		let __cont_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(cont as AnyObject).toOpaque())
+		return c_borogove.borogove_persistence_media_store_has_media(
+			self.o,
+			hashAlgorithm,
+			hash, hash.count,
+			{ (a, ctx) in
+				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<Bool, Never>
+				cont.resume(returning: a)
+			},
+			__cont_ptr
+		)
+		}
+	}
+
+	func removeMedia(hashAlgorithm: String, hash: Array<UInt8>) -> Void {
+		return c_borogove.borogove_persistence_media_store_remove_media(
+			self.o,
+			hashAlgorithm,
+			hash, hash.count
+		)
+	}
+
+	func storeMedia(mime: String, bytes: Array<UInt8>) async -> Bool {
+		return await withUnsafeContinuation { cont in
+		let __cont_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(cont as AnyObject).toOpaque())
+		return c_borogove.borogove_persistence_media_store_store_media(
+			self.o,
+			mime,
+			bytes, bytes.count,
+			{ (a, ctx) in
+				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<Bool, Never>
+				cont.resume(returning: a)
+			},
+			__cont_ptr
+		)
+		}
+	}
+
 }
 
 public class AnyMediaStore: MediaStore {
@@ -133,25 +182,47 @@ public class MediaStoreFS: SDKObject, MediaStore, @unchecked Sendable {
 }
 
 public protocol KeyValueStore: SDKObject {
-}
+	func get(k: String) async -> String?
 
-public class AnyKeyValueStore: KeyValueStore {
-	public let o: UnsafeMutableRawPointer
+	func set(k: String, v: String?) async -> Bool
 
-	internal init(_ ptr: UnsafeMutableRawPointer) {
-		o = ptr
-	}
+}
 
-	deinit {
-		c_borogove.borogove_release(o)
+public extension KeyValueStore {
+	func get(k: String) async -> String? {
+		return await withUnsafeContinuation { cont in
+		let __cont_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(cont as AnyObject).toOpaque())
+		return c_borogove.borogove_persistence_key_value_store_get(
+			self.o,
+			k,
+			{ (a, ctx) in
+				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<String?, Never>
+				cont.resume(returning: useString(a))
+			},
+			__cont_ptr
+		)
+		}
 	}
 
-}
+	func set(k: String, v: String?) async -> Bool {
+		return await withUnsafeContinuation { cont in
+		let __cont_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(cont as AnyObject).toOpaque())
+		return c_borogove.borogove_persistence_key_value_store_set(
+			self.o,
+			k,
+			v,
+			{ (a, ctx) in
+				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<Bool, Never>
+				cont.resume(returning: a)
+			},
+			__cont_ptr
+		)
+		}
+	}
 
-public protocol Persistence: SDKObject {
 }
 
-public class AnyPersistence: Persistence {
+public class AnyKeyValueStore: KeyValueStore {
 	public let o: UnsafeMutableRawPointer
 
 	internal init(_ ptr: UnsafeMutableRawPointer) {
@@ -685,82 +756,119 @@ public class ChatMessage: SDKObject, @unchecked Sendable {
 	}
 }
 
-public class Sqlite: SDKObject, KeyValueStore, Persistence, @unchecked Sendable {
+public class AudioFormat: SDKObject, @unchecked Sendable {
 	public let o: UnsafeMutableRawPointer
 
 	internal init(_ ptr: UnsafeMutableRawPointer) {
 		o = ptr
 	}
 
-	/**
-	 Create a basic persistence layer based on sqlite
-	 
-	 @param dbfile path to sqlite database
-	 @params media a MediaStore to use for media
-	 @returns new persistence layer
-	 */
-	public init(dbfile: String, media: MediaStore) {
-		o = (c_borogove.borogove_persistence_sqlite_new(dbfile, media.o))
+	public init(format: String, payloadType: UInt8, clockRate: Int32, channels: Int32) {
+		o = (c_borogove.borogove_calls_audio_format_new(format, payloadType, clockRate, channels))
+	}
+
+	public var clockRate: Int32 {
+		get {
+			c_borogove.borogove_calls_audio_format_clock_rate(o)
+		}
+	}
+
+	public var channels: Int32 {
+		get {
+			c_borogove.borogove_calls_audio_format_channels(o)
+		}
+	}
+
+	deinit {
+		c_borogove.borogove_release(o)
+	}
+}
+
+public class MediaStreamTrack: SDKObject, @unchecked Sendable {
+	public let o: UnsafeMutableRawPointer
+
+	internal init(_ ptr: UnsafeMutableRawPointer) {
+		o = ptr
+	}
+
+	public var id: String {
+		get {
+			useString(c_borogove.borogove_calls_media_stream_track_id(o))!
+		}
+	}
+
+	public var muted: Bool {
+		get {
+			c_borogove.borogove_calls_media_stream_track_muted(o)
+		}
+	}
+
+	public var kind: String {
+		get {
+			useString(c_borogove.borogove_calls_media_stream_track_kind(o))!
+		}
+	}
+
+	public var supportedAudioFormats: Array<AudioFormat> {
+		get {
+			{var __ret: UnsafeMutablePointer<UnsafeMutableRawPointer?>? = nil;let __ret_length = c_borogove.borogove_calls_media_stream_track_supported_audio_formats(o, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: __ret, count: __ret_length).map({AudioFormat($0!)});c_borogove.borogove_release(__ret);return __r;}();}()
+		}
 	}
 
 	/**
-	 Get a single message
+	 Event fired for new inbound audio frame
 	 
-	 @param accountId the account the message was sent or received on
-	 @param chatId the chat the message was sent or received on
-	 @param serverId the serverId of the message (optional if localId is specified)
-	 @param localId the localId of the message (optional if serverId is specified)
-	 @returns Promise resolving to the message or null
+	 @param callback takes three arguments, the Signed 16-bit PCM data, the clock rate, and the number of channels
 	 */
-	public func getMessage(accountId: String, chatId: String, serverId: String?, localId: String?) async -> ChatMessage? {
-		return await withUnsafeContinuation { cont in
-		let __cont_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(cont as AnyObject).toOpaque())
-		return c_borogove.borogove_persistence_sqlite_get_message(
+	public func addPCMListener(callback: @Sendable @escaping (Array<Int16>, Int32, Int32)->Void) -> Void {
+		let __callback_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(callback as AnyObject).toOpaque())
+		return c_borogove.borogove_calls_media_stream_track_add_pcm_listener(
 			self.o,
-			accountId,
-			chatId,
-			serverId,
-			localId,
-			{ (a, ctx) in
-				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<ChatMessage?, Never>
-				cont.resume(returning: (a).map({ ChatMessage($0) }))
+			{ (a0, a0_length, a1, a2, ctx) in
+				let callback = Unmanaged<AnyObject>.fromOpaque(ctx!).takeUnretainedValue() as! @Sendable (Array<Int16>, Int32, Int32)->Void
+				return callback({let __r = UnsafeMutableBufferPointer<Int16>(start: a0, count: a0_length).map({$0});c_borogove.borogove_release(a0);return __r;}(), a1, a2)
 			},
-			__cont_ptr
+			__callback_ptr
 		)
-		}
 	}
 
 	/**
-	 Remove an account from storage
+	 Event fired when ready for next outbound audio frame
 	 
-	 @param accountId the account to remove
-	 @param completely if message history, etc should be removed also
+	 @param callback
 	 */
-	public func removeAccount(accountId: String, completely: Bool) -> Void {
-		return c_borogove.borogove_persistence_sqlite_remove_account(
+	public func addReadyForPCMListener(callback: @Sendable @escaping ()->Void) -> Void {
+		let __callback_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(callback as AnyObject).toOpaque())
+		return c_borogove.borogove_calls_media_stream_track_add_ready_for_pcm_listener(
 			self.o,
-			accountId,
-			completely
+			{ (ctx) in
+				let callback = Unmanaged<AnyObject>.fromOpaque(ctx!).takeUnretainedValue() as! @Sendable ()->Void
+				return callback()
+			},
+			__callback_ptr
 		)
 	}
 
 	/**
-	 List all known accounts
+	 Send new audio to this track
 	 
-	 @returns Promise resolving to array of account IDs
+	 @param pcm 16-bit signed linear PCM data (interleaved)
+	 @param clockRate the sampling rate of the data
+	 @param channels the number of audio channels
 	 */
-	public func listAccounts() async -> Array<String> {
-		return await withUnsafeContinuation { cont in
-		let __cont_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(cont as AnyObject).toOpaque())
-		return c_borogove.borogove_persistence_sqlite_list_accounts(
+	public func writePCM(pcm: Array<Int16>, clockRate: Int32, channels: Int32) -> Void {
+		return c_borogove.borogove_calls_media_stream_track_write_pcm(
 			self.o,
-			{ (a, a_length, ctx) in
-				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<Array<String>, Never>
-				cont.resume(returning: {let __r = UnsafeMutableBufferPointer<UnsafePointer<CChar>?>(start: a, count: a_length).map({useString($0)!});c_borogove.borogove_release(a);return __r;}())
-			},
-			__cont_ptr
+			pcm, pcm.count,
+			clockRate,
+			channels
+		)
+	}
+
+	public func stop() -> Void {
+		return c_borogove.borogove_calls_media_stream_track_stop(
+			self.o
 		)
-		}
 	}
 
 	deinit {
@@ -768,260 +876,232 @@ public class Sqlite: SDKObject, KeyValueStore, Persistence, @unchecked Sendable
 	}
 }
 
-public class ChatMessageBuilder: SDKObject, @unchecked Sendable {
+public class FormOption: SDKObject, @unchecked Sendable {
 	public let o: UnsafeMutableRawPointer
 
 	internal init(_ ptr: UnsafeMutableRawPointer) {
 		o = ptr
 	}
 
-	/**
-	 @returns a new blank ChatMessageBuilder
-	 */
-	public init() {
-		o = (c_borogove.borogove_chat_message_builder_new())
+	public var label: String {
+		get {
+			useString(c_borogove.borogove_form_option_label(o))!
+		}
 	}
 
-	/**
-	 The ID as set by the creator of this message
-	 */
-	public var localId: String? {
+	public var value: String {
 		get {
-			useString(c_borogove.borogove_chat_message_builder_local_id(o))
-		}
-		set {
-			c_borogove.borogove_chat_message_builder_set_local_id(o, newValue)
+			useString(c_borogove.borogove_form_option_value(o))!
 		}
 	}
 
-	/**
-	 The ID as set by the authoritative server
-	 */
-	public var serverId: String? {
+	deinit {
+		c_borogove.borogove_release(o)
+	}
+}
+
+public class FormField: SDKObject, @unchecked Sendable {
+	public let o: UnsafeMutableRawPointer
+
+	internal init(_ ptr: UnsafeMutableRawPointer) {
+		o = ptr
+	}
+
+	public var name: String {
 		get {
-			useString(c_borogove.borogove_chat_message_builder_server_id(o))
-		}
-		set {
-			c_borogove.borogove_chat_message_builder_set_server_id(o, newValue)
+			useString(c_borogove.borogove_form_field_name(o))!
 		}
 	}
 
-	/**
-	 The ID of the server which set the serverId
-	 */
-	public var serverIdBy: String? {
+	public var label: String? {
 		get {
-			useString(c_borogove.borogove_chat_message_builder_server_id_by(o))
-		}
-		set {
-			c_borogove.borogove_chat_message_builder_set_server_id_by(o, newValue)
+			useString(c_borogove.borogove_form_field_label(o))
 		}
 	}
 
-	/**
-	 The type of this message (Chat, Call, etc)
-	 */
-	public var type: MessageType {
+	public var desc: String? {
 		get {
-			c_borogove.borogove_chat_message_builder_type(o)
-		}
-		set {
-			c_borogove.borogove_chat_message_builder_set_type(o, newValue)
+			useString(c_borogove.borogove_form_field_desc(o))
 		}
 	}
 
-	/**
-	 The timestamp of this message, in format YYYY-MM-DDThh:mm:ss[.sss]+00:00
-	 */
-	public var timestamp: String? {
+	public var value: Array<String> {
 		get {
-			useString(c_borogove.borogove_chat_message_builder_timestamp(o))
-		}
-		set {
-			c_borogove.borogove_chat_message_builder_set_timestamp(o, newValue)
+			{var __ret: UnsafeMutablePointer<UnsafePointer<CChar>?>? = nil;let __ret_length = c_borogove.borogove_form_field_value(o, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafePointer<CChar>?>(start: __ret, count: __ret_length).map({useString($0)!});c_borogove.borogove_release(__ret);return __r;}();}()
 		}
 	}
 
-	/**
-	 The ID of the message sender
-	 */
-	public var senderId: String? {
+	public var required: Bool {
 		get {
-			useString(c_borogove.borogove_chat_message_builder_sender_id(o))
-		}
-		set {
-			c_borogove.borogove_chat_message_builder_set_sender_id(o, newValue)
+			c_borogove.borogove_form_field_required(o)
 		}
 	}
 
-	/**
-	 Message this one is in reply to, or NULL
-	 */
-	public var replyToMessage: ChatMessage? {
+	public var type: String {
 		get {
-			(c_borogove.borogove_chat_message_builder_reply_to_message(o)).map({ ChatMessage($0) })
-		}
-		set {
-			c_borogove.borogove_chat_message_builder_set_reply_to_message(o, newValue?.o)
+			useString(c_borogove.borogove_form_field_type(o))!
 		}
 	}
 
-	/**
-	 ID of the thread this message is in, or NULL
-	 */
-	public var threadId: String? {
+	public var datatype: String {
 		get {
-			useString(c_borogove.borogove_chat_message_builder_thread_id(o))
-		}
-		set {
-			c_borogove.borogove_chat_message_builder_set_thread_id(o, newValue)
+			useString(c_borogove.borogove_form_field_datatype(o))!
 		}
 	}
 
-	/**
-	 Array of attachments to this message
-	 */
-	public var attachments: Array<ChatAttachment> {
+	public var options: Array<FormOption> {
 		get {
-			{var __ret: UnsafeMutablePointer<UnsafeMutableRawPointer?>? = nil;let __ret_length = c_borogove.borogove_chat_message_builder_attachments(o, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: __ret, count: __ret_length).map({ChatAttachment($0!)});c_borogove.borogove_release(__ret);return __r;}();}()
+			{var __ret: UnsafeMutablePointer<UnsafeMutableRawPointer?>? = nil;let __ret_length = c_borogove.borogove_form_field_options(o, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: __ret, count: __ret_length).map({FormOption($0!)});c_borogove.borogove_release(__ret);return __r;}();}()
 		}
 	}
 
-	/**
-	 Body text of this message or NULL
-	 */
-	public var text: String? {
+	public var open: Bool {
 		get {
-			useString(c_borogove.borogove_chat_message_builder_text(o))
-		}
-		set {
-			c_borogove.borogove_chat_message_builder_set_text(o, newValue)
+			c_borogove.borogove_form_field_open(o)
 		}
 	}
 
-	/**
-	 Language code for the body text
-	 */
-	public var lang: String? {
+	public var rangeMin: String? {
 		get {
-			useString(c_borogove.borogove_chat_message_builder_lang(o))
-		}
-		set {
-			c_borogove.borogove_chat_message_builder_set_lang(o, newValue)
+			useString(c_borogove.borogove_form_field_range_min(o))
 		}
 	}
 
-	/**
-	 Direction of this message
-	 */
-	public var direction: MessageDirection {
+	public var rangeMax: String? {
 		get {
-			c_borogove.borogove_chat_message_builder_direction(o)
-		}
-		set {
-			c_borogove.borogove_chat_message_builder_set_direction(o, newValue)
+			useString(c_borogove.borogove_form_field_range_max(o))
 		}
 	}
 
-	/**
-	 Status of this message
-	 */
-	public var status: MessageStatus {
+	public var regex: String? {
 		get {
-			c_borogove.borogove_chat_message_builder_status(o)
-		}
-		set {
-			c_borogove.borogove_chat_message_builder_set_status(o, newValue)
+			useString(c_borogove.borogove_form_field_regex(o))
 		}
 	}
 
-	/**
-	 Human readable text to go with the status
-	 */
-	public var statusText: String? {
+	deinit {
+		c_borogove.borogove_release(o)
+	}
+}
+
+public class FormItem: SDKObject, @unchecked Sendable {
+	public let o: UnsafeMutableRawPointer
+
+	internal init(_ ptr: UnsafeMutableRawPointer) {
+		o = ptr
+	}
+
+	public var text: String? {
 		get {
-			useString(c_borogove.borogove_chat_message_builder_status_text(o))
-		}
-		set {
-			c_borogove.borogove_chat_message_builder_set_status_text(o, newValue)
+			useString(c_borogove.borogove_form_item_text(o))
 		}
 	}
 
-	/**
-	 Array of past versions of this message, if it has been edited
-	 */
-	public var versions: Array<ChatMessage> {
+	public var field: FormField? {
 		get {
-			{var __ret: UnsafeMutablePointer<UnsafeMutableRawPointer?>? = nil;let __ret_length = c_borogove.borogove_chat_message_builder_versions(o, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: __ret, count: __ret_length).map({ChatMessage($0!)});c_borogove.borogove_release(__ret);return __r;}();}()
+			(c_borogove.borogove_form_item_field(o)).map({ FormField($0) })
 		}
-		set {
-			c_borogove.borogove_chat_message_builder_set_versions(o, newValue.map { $0.o }, newValue.count)
+	}
+
+	public var section: FormSection? {
+		get {
+			(c_borogove.borogove_form_item_section(o)).map({ AnyFormSection($0) })
 		}
 	}
 
-	/**
-	 Information about the encryption used by the sender of
-	 this message.
-	 */
-	public var encryption: EncryptionInfo? {
+	public var status: String? {
 		get {
-			(c_borogove.borogove_chat_message_builder_encryption(o)).map({ EncryptionInfo($0) })
+			useString(c_borogove.borogove_form_item_status(o))
 		}
-		set {
-			c_borogove.borogove_chat_message_builder_set_encryption(o, newValue?.o)
+	}
+
+	public var tableHeader: Array<FormField>? {
+		get {
+			{var __ret: UnsafeMutablePointer<UnsafeMutableRawPointer?>? = nil;let __ret_length = c_borogove.borogove_form_item_table_header(o, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: __ret, count: __ret_length).map({FormField($0!)});c_borogove.borogove_release(__ret);return __r;}();}()
 		}
 	}
 
-	/**
-	 Add an attachment to this message
-	 
-	 @param attachment The ChatAttachment to add
-	 */
-	public func addAttachment(attachment: ChatAttachment) -> Void {
-		return c_borogove.borogove_chat_message_builder_add_attachment(
-			self.o,
-			attachment.o
-		)
+	deinit {
+		c_borogove.borogove_release(o)
+	}
+}
+
+public protocol FormSection: SDKObject {
+	func title() -> String?
+
+	func items() -> Array<FormItem>
+
+}
+
+public extension FormSection {
+	func title() -> String? {
+		return useString(c_borogove.borogove_form_section_title(
+			self.o
+		))
+	}
+
+	func items() -> Array<FormItem> {
+		return {var __ret: UnsafeMutablePointer<UnsafeMutableRawPointer?>? = nil;let __ret_length = c_borogove.borogove_form_section_items(
+			self.o
+		, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: __ret, count: __ret_length).map({FormItem($0!)});c_borogove.borogove_release(__ret);return __r;}();}()
+	}
+
+}
+
+public class AnyFormSection: FormSection {
+	public let o: UnsafeMutableRawPointer
+
+	internal init(_ ptr: UnsafeMutableRawPointer) {
+		o = ptr
+	}
+
+	deinit {
+		c_borogove.borogove_release(o)
+	}
+
+}
+
+public class Form: SDKObject, FormSection, @unchecked Sendable {
+	public let o: UnsafeMutableRawPointer
+
+	internal init(_ ptr: UnsafeMutableRawPointer) {
+		o = ptr
 	}
 
 	/**
-	 Set rich text using an HTML string
-	 Also sets the plain text body appropriately
+	 Is this form entirely results / read-only?
 	 */
-	public func setHtml(html: String) -> Void {
-		return c_borogove.borogove_chat_message_builder_set_html(
-			self.o,
-			html
+	public func isResult() -> Bool {
+		return c_borogove.borogove_form_is_result(
+			self.o
 		)
 	}
 
 	/**
-	 The ID of the Chat this message is associated with
+	 Title of this form
 	 */
-	public func chatId() -> String {
-		return useString(c_borogove.borogove_chat_message_builder_chat_id(
+	public func title() -> String? {
+		return useString(c_borogove.borogove_form_title(
 			self.o
-		))!
+		))
 	}
 
 	/**
-	 The ID of the sender of this message
+	 URL to use instead of this form
 	 */
-	public func get_senderId() -> String {
-		return useString(c_borogove.borogove_chat_message_builder_get_sender_id(
+	public func url() -> String? {
+		return useString(c_borogove.borogove_form_url(
 			self.o
-		))!
+		))
 	}
 
 	/**
-	 Build this builder into an immutable ChatMessage
-	 
-	 @returns the ChatMessage
+	 Items to render inside this form
 	 */
-	public func build() -> ChatMessage {
-		return ChatMessage(c_borogove.borogove_chat_message_builder_build(
+	public func items() -> Array<FormItem> {
+		return {var __ret: UnsafeMutablePointer<UnsafeMutableRawPointer?>? = nil;let __ret_length = c_borogove.borogove_form_items(
 			self.o
-		)!)
+		, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: __ret, count: __ret_length).map({FormItem($0!)});c_borogove.borogove_release(__ret);return __r;}();}()
 	}
 
 	deinit {
@@ -1029,133 +1109,48 @@ public class ChatMessageBuilder: SDKObject, @unchecked Sendable {
 	}
 }
 
-public class ProfileItem: SDKObject, @unchecked Sendable {
+public class CommandSession: SDKObject, @unchecked Sendable {
 	public let o: UnsafeMutableRawPointer
 
 	internal init(_ ptr: UnsafeMutableRawPointer) {
 		o = ptr
 	}
 
-	public var id: String {
+	public var name: String {
 		get {
-			useString(c_borogove.borogove_profile_item_id(o))!
+			useString(c_borogove.borogove_command_session_name(o))!
 		}
 	}
 
-	public var key: String {
+	public var status: String {
 		get {
-			useString(c_borogove.borogove_profile_item_key(o))!
+			useString(c_borogove.borogove_command_session_status(o))!
 		}
 	}
 
-	public func parameters() -> Array<ProfileItem> {
-		return {var __ret: UnsafeMutablePointer<UnsafeMutableRawPointer?>? = nil;let __ret_length = c_borogove.borogove_profile_item_parameters(
-			self.o
-		, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: __ret, count: __ret_length).map({ProfileItem($0!)});c_borogove.borogove_release(__ret);return __r;}();}()
-	}
-
-	public func text() -> Array<String> {
-		return {var __ret: UnsafeMutablePointer<UnsafePointer<CChar>?>? = nil;let __ret_length = c_borogove.borogove_profile_item_text(
-			self.o
-		, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafePointer<CChar>?>(start: __ret, count: __ret_length).map({useString($0)!});c_borogove.borogove_release(__ret);return __r;}();}()
+	public var actions: Array<FormOption> {
+		get {
+			{var __ret: UnsafeMutablePointer<UnsafeMutableRawPointer?>? = nil;let __ret_length = c_borogove.borogove_command_session_actions(o, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: __ret, count: __ret_length).map({FormOption($0!)});c_borogove.borogove_release(__ret);return __r;}();}()
+		}
 	}
 
-	public func uri() -> Array<String> {
-		return {var __ret: UnsafeMutablePointer<UnsafePointer<CChar>?>? = nil;let __ret_length = c_borogove.borogove_profile_item_uri(
-			self.o
-		, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafePointer<CChar>?>(start: __ret, count: __ret_length).map({useString($0)!});c_borogove.borogove_release(__ret);return __r;}();}()
-	}
-
-	public func date() -> Array<String> {
-		return {var __ret: UnsafeMutablePointer<UnsafePointer<CChar>?>? = nil;let __ret_length = c_borogove.borogove_profile_item_date(
-			self.o
-		, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafePointer<CChar>?>(start: __ret, count: __ret_length).map({useString($0)!});c_borogove.borogove_release(__ret);return __r;}();}()
-	}
-
-	public func time() -> Array<String> {
-		return {var __ret: UnsafeMutablePointer<UnsafePointer<CChar>?>? = nil;let __ret_length = c_borogove.borogove_profile_item_time(
-			self.o
-		, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafePointer<CChar>?>(start: __ret, count: __ret_length).map({useString($0)!});c_borogove.borogove_release(__ret);return __r;}();}()
-	}
-
-	public func datetime() -> Array<String> {
-		return {var __ret: UnsafeMutablePointer<UnsafePointer<CChar>?>? = nil;let __ret_length = c_borogove.borogove_profile_item_datetime(
-			self.o
-		, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafePointer<CChar>?>(start: __ret, count: __ret_length).map({useString($0)!});c_borogove.borogove_release(__ret);return __r;}();}()
-	}
-
-	public func languageTag() -> Array<String> {
-		return {var __ret: UnsafeMutablePointer<UnsafePointer<CChar>?>? = nil;let __ret_length = c_borogove.borogove_profile_item_language_tag(
-			self.o
-		, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafePointer<CChar>?>(start: __ret, count: __ret_length).map({useString($0)!});c_borogove.borogove_release(__ret);return __r;}();}()
-	}
-
-	deinit {
-		c_borogove.borogove_release(o)
-	}
-}
-
-public class Profile: SDKObject, @unchecked Sendable {
-	public let o: UnsafeMutableRawPointer
-
-	internal init(_ ptr: UnsafeMutableRawPointer) {
-		o = ptr
-	}
-
-	/**
-	 All items in the profile
-	 */
-	public var items: Array<ProfileItem> {
-		get {
-			{var __ret: UnsafeMutablePointer<UnsafeMutableRawPointer?>? = nil;let __ret_length = c_borogove.borogove_profile_items(o, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: __ret, count: __ret_length).map({ProfileItem($0!)});c_borogove.borogove_release(__ret);return __r;}();}()
-		}
-	}
-
-	deinit {
-		c_borogove.borogove_release(o)
-	}
-}
-
-public class Participant: SDKObject, @unchecked Sendable {
-	public let o: UnsafeMutableRawPointer
-
-	internal init(_ ptr: UnsafeMutableRawPointer) {
-		o = ptr
-	}
-
-	public var displayName: String {
-		get {
-			useString(c_borogove.borogove_participant_display_name(o))!
-		}
-	}
-
-	public var photoUri: String? {
-		get {
-			useString(c_borogove.borogove_participant_photo_uri(o))
-		}
-	}
-
-	public var placeholderUri: String {
-		get {
-			useString(c_borogove.borogove_participant_placeholder_uri(o))!
-		}
-	}
-
-	public var isSelf: Bool {
+	public var forms: Array<Form> {
 		get {
-			c_borogove.borogove_participant_is_self(o)
+			{var __ret: UnsafeMutablePointer<UnsafeMutableRawPointer?>? = nil;let __ret_length = c_borogove.borogove_command_session_forms(o, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: __ret, count: __ret_length).map({Form($0!)});c_borogove.borogove_release(__ret);return __r;}();}()
 		}
 	}
 
-	public func profile(client: Client) async -> Profile {
+	public func execute(action: String? = nil, data: FormSubmitBuilder? = nil, formIdx: Int32 = 0) async -> CommandSession {
 		return await withUnsafeContinuation { cont in
 		let __cont_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(cont as AnyObject).toOpaque())
-		return c_borogove.borogove_participant_profile(
+		return c_borogove.borogove_command_session_execute(
 			self.o,
-			client.o,
+			action,
+			data?.o,
+			formIdx,
 			{ (a, ctx) in
-				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<Profile, Never>
-				cont.resume(returning: Profile(a!))
+				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<CommandSession, Never>
+				cont.resume(returning: CommandSession(a!))
 			},
 			__cont_ptr
 		)
@@ -1167,46 +1162,34 @@ public class Participant: SDKObject, @unchecked Sendable {
 	}
 }
 
-public class Dummy: SDKObject, Persistence, @unchecked Sendable {
+public class Command: SDKObject, @unchecked Sendable {
 	public let o: UnsafeMutableRawPointer
 
 	internal init(_ ptr: UnsafeMutableRawPointer) {
 		o = ptr
 	}
 
-	/**
-	 Create a basic persistence layer that persists nothing
-	 
-	 @returns new persistence layer
-	 */
-	public init() {
-		o = (c_borogove.borogove_persistence_dummy_new())
-	}
-
-	deinit {
-		c_borogove.borogove_release(o)
-	}
-}
-
-public class Push: SDKObject, @unchecked Sendable {
-	public let o: UnsafeMutableRawPointer
-
-	internal init(_ ptr: UnsafeMutableRawPointer) {
-		o = ptr
+	public var name: String {
+		get {
+			useString(c_borogove.borogove_command_name(o))!
+		}
 	}
 
 	/**
-	 Receive a new push notification from some external system
-	 
-	 @param data the raw data from the push
-	 @param persistence the persistence layer to write into
-	 @returns a Notification representing the push data
+	 Start a new session for this command. May have side effects!
 	 */
-	public static func receive(data: String, persistence: Persistence) -> Notification? {
-		(c_borogove.borogove_push_receive(
-			data,
-			persistence.o
-		)).map({ Notification($0) })
+	public func execute() async -> CommandSession {
+		return await withUnsafeContinuation { cont in
+		let __cont_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(cont as AnyObject).toOpaque())
+		return c_borogove.borogove_command_execute(
+			self.o,
+			{ (a, ctx) in
+				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<CommandSession, Never>
+				cont.resume(returning: CommandSession(a!))
+			},
+			__cont_ptr
+		)
+		}
 	}
 
 	deinit {
@@ -1214,7 +1197,7 @@ public class Push: SDKObject, @unchecked Sendable {
 	}
 }
 
-public class Notification: SDKObject, @unchecked Sendable {
+public class Chat: SDKObject, @unchecked Sendable {
 	public let o: UnsafeMutableRawPointer
 
 	internal init(_ ptr: UnsafeMutableRawPointer) {
@@ -1222,430 +1205,856 @@ public class Notification: SDKObject, @unchecked Sendable {
 	}
 
 	/**
-	 The title
+	 ID of this Chat
 	 */
-	public var title: String {
+	public var chatId: String {
 		get {
-			useString(c_borogove.borogove_notification_title(o))!
+			useString(c_borogove.borogove_chat_chat_id(o))!
 		}
 	}
 
 	/**
-	 The body text
+	 Current state of this chat
 	 */
-	public var body: String {
+	public var uiState: UiState {
 		get {
-			useString(c_borogove.borogove_notification_body(o))!
+			c_borogove.borogove_chat_ui_state(o)
 		}
 	}
 
 	/**
-	 The ID of the associated account
+	 Is this chat blocked?
 	 */
-	public var accountId: String {
+	public var isBlocked: Bool {
 		get {
-			useString(c_borogove.borogove_notification_account_id(o))!
+			c_borogove.borogove_chat_is_blocked(o)
 		}
 	}
 
 	/**
-	 The ID of the associated chat
+	 The most recent message in this chat
 	 */
-	public var chatId: String {
+	public var lastMessage: ChatMessage? {
 		get {
-			useString(c_borogove.borogove_notification_chat_id(o))!
+			(c_borogove.borogove_chat_last_message(o)).map({ ChatMessage($0) })
 		}
 	}
 
 	/**
-	 The ID of the message sender
+	 Has this chat ever been bookmarked?
 	 */
-	public var senderId: String {
+	public var isBookmarked: Bool {
 		get {
-			useString(c_borogove.borogove_notification_sender_id(o))!
+			c_borogove.borogove_chat_is_bookmarked(o)
 		}
 	}
 
 	/**
-	 The serverId of the message
+	 Fetch a page of messages before some point
+	 
+	 @param beforeId id of the message to look before
+	 @param beforeTime timestamp of the message to look before,
+	        String in format YYYY-MM-DDThh:mm:ss[.sss]+00:00
+	 @returns Promise resolving to an array of ChatMessage that are found
 	 */
-	public var messageId: String {
-		get {
-			useString(c_borogove.borogove_notification_message_id(o))!
+	public func getMessagesBefore(beforeId: String?, beforeTime: String?) async -> Array<ChatMessage> {
+		return await withUnsafeContinuation { cont in
+		let __cont_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(cont as AnyObject).toOpaque())
+		return c_borogove.borogove_chat_get_messages_before(
+			self.o,
+			beforeId,
+			beforeTime,
+			{ (a, a_length, ctx) in
+				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<Array<ChatMessage>, Never>
+				cont.resume(returning: {let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: a, count: a_length).map({ChatMessage($0!)});c_borogove.borogove_release(a);return __r;}())
+			},
+			__cont_ptr
+		)
 		}
 	}
 
 	/**
-	 The type of the message
+	 Fetch a page of messages after some point
+	 
+	 @param afterId id of the message to look after
+	 @param afterTime timestamp of the message to look after,
+	        String in format YYYY-MM-DDThh:mm:ss[.sss]+00:00
+	 @returns Promise resolving to an array of ChatMessage that are found
 	 */
-	public var type: MessageType {
-		get {
-			c_borogove.borogove_notification_type(o)
+	public func getMessagesAfter(afterId: String?, afterTime: String?) async -> Array<ChatMessage> {
+		return await withUnsafeContinuation { cont in
+		let __cont_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(cont as AnyObject).toOpaque())
+		return c_borogove.borogove_chat_get_messages_after(
+			self.o,
+			afterId,
+			afterTime,
+			{ (a, a_length, ctx) in
+				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<Array<ChatMessage>, Never>
+				cont.resume(returning: {let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: a, count: a_length).map({ChatMessage($0!)});c_borogove.borogove_release(a);return __r;}())
+			},
+			__cont_ptr
+		)
 		}
 	}
 
 	/**
-	 If this is a call notification, the call status
+	 Fetch a page of messages around (before, including, and after) some point
+	 
+	 @param aroundId id of the message to look around
+	 @param aroundTime timestamp of the message to look around,
+	        String in format YYYY-MM-DDThh:mm:ss[.sss]+00:00
+	 @returns Promise resolving to an array of ChatMessage that are found
 	 */
-	public var callStatus: String? {
-		get {
-			useString(c_borogove.borogove_notification_call_status(o))
+	public func getMessagesAround(aroundId: String?, aroundTime: String?) async -> Array<ChatMessage> {
+		return await withUnsafeContinuation { cont in
+		let __cont_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(cont as AnyObject).toOpaque())
+		return c_borogove.borogove_chat_get_messages_around(
+			self.o,
+			aroundId,
+			aroundTime,
+			{ (a, a_length, ctx) in
+				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<Array<ChatMessage>, Never>
+				cont.resume(returning: {let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: a, count: a_length).map({ChatMessage($0!)});c_borogove.borogove_release(a);return __r;}())
+			},
+			__cont_ptr
+		)
 		}
 	}
 
 	/**
-	 If this is a call notification, the call session ID
+	 Send a message to this Chat
+	 
+	 @param message the ChatMessageBuilder to send
 	 */
-	public var callSid: String? {
-		get {
-			useString(c_borogove.borogove_notification_call_sid(o))
-		}
-	}
-
-	/**
-	 Optional image URI
-	 */
-	public var imageUri: String? {
-		get {
-			useString(c_borogove.borogove_notification_image_uri(o))
-		}
+	public func sendMessage(message: ChatMessageBuilder) -> Void {
+		return c_borogove.borogove_chat_send_message(
+			self.o,
+			message.o
+		)
 	}
 
 	/**
-	 Optional language code
+	 Signals that all messages up to and including this one have probably
+	 been displayed to the user
+	 
+	 @param message the ChatMessage most recently displayed
 	 */
-	public var lang: String? {
-		get {
-			useString(c_borogove.borogove_notification_lang(o))
-		}
+	public func markReadUpTo(message: ChatMessage) -> Void {
+		return c_borogove.borogove_chat_mark_read_up_to(
+			self.o,
+			message.o
+		)
 	}
 
 	/**
-	 Optional date and time of the event
+	 Save this Chat on the server
 	 */
-	public var timestamp: String? {
-		get {
-			useString(c_borogove.borogove_notification_timestamp(o))
-		}
+	public func bookmark() -> Void {
+		return c_borogove.borogove_chat_bookmark(
+			self.o
+		)
 	}
 
-	deinit {
-		c_borogove.borogove_release(o)
+	/**
+	 Get the list of IDs of participants in this Chat
+	 
+	 @returns array of IDs
+	 */
+	public func getParticipants() -> Array<String> {
+		return {var __ret: UnsafeMutablePointer<UnsafePointer<CChar>?>? = nil;let __ret_length = c_borogove.borogove_chat_get_participants(
+			self.o
+		, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafePointer<CChar>?>(start: __ret, count: __ret_length).map({useString($0)!});c_borogove.borogove_release(__ret);return __r;}();}()
 	}
-}
 
-public class EventEmitter: SDKObject, @unchecked Sendable {
-	public let o: UnsafeMutableRawPointer
-
-	internal init(_ ptr: UnsafeMutableRawPointer) {
-		o = ptr
+	/**
+	 Get the details for one participant in this Chat
+	 
+	 @param participantId the ID of the participant to look up
+	 */
+	public func getParticipantDetails(participantId: String) -> Participant {
+		return Participant(c_borogove.borogove_chat_get_participant_details(
+			self.o,
+			participantId
+		)!)
 	}
 
 	/**
-	 Remove an event listener of any type, no matter how it was added
-	 or what event it is for.
+	 Correct an already-send message by replacing it with a new one
 	 
-	 @param token the token that was returned when the listener was added
+	 @param localId the localId of the message to correct
+	        must be the localId of the first version ever sent, not a subsequent correction
+	 @param message the new ChatMessage to replace it with
 	 */
-	public func removeEventListener(token: Int32) -> Void {
-		return c_borogove.borogove_event_emitter_remove_event_listener(
+	public func correctMessage(localId: String, message: ChatMessageBuilder) -> Void {
+		return c_borogove.borogove_chat_correct_message(
 			self.o,
-			token
+			localId,
+			message.o
 		)
 	}
 
-	deinit {
-		c_borogove.borogove_release(o)
-	}
-}
-
-public class AudioFormat: SDKObject, @unchecked Sendable {
-	public let o: UnsafeMutableRawPointer
-
-	internal init(_ ptr: UnsafeMutableRawPointer) {
-		o = ptr
-	}
-
-	public init(format: String, payloadType: UInt8, clockRate: Int32, channels: Int32) {
-		o = (c_borogove.borogove_calls_audio_format_new(format, payloadType, clockRate, channels))
-	}
-
-	public var clockRate: Int32 {
-		get {
-			c_borogove.borogove_calls_audio_format_clock_rate(o)
-		}
-	}
-
-	public var channels: Int32 {
-		get {
-			c_borogove.borogove_calls_audio_format_channels(o)
-		}
-	}
-
-	deinit {
-		c_borogove.borogove_release(o)
+	/**
+	 Add new reaction to a message in this Chat
+	 
+	 @param m ChatMessage to react to
+	 @param reaction emoji of the reaction
+	 */
+	public func addReaction(m: ChatMessage, reaction: Reaction) -> Void {
+		return c_borogove.borogove_chat_add_reaction(
+			self.o,
+			m.o,
+			reaction.o
+		)
 	}
-}
 
-public class MediaStreamTrack: SDKObject, @unchecked Sendable {
-	public let o: UnsafeMutableRawPointer
-
-	internal init(_ ptr: UnsafeMutableRawPointer) {
-		o = ptr
+	/**
+	 Remove an already-sent reaction from a message
+	 
+	 @param m ChatMessage to remove the reaction from
+	 @param reaction the emoji to remove
+	 */
+	public func removeReaction(m: ChatMessage, reaction: Reaction) -> Void {
+		return c_borogove.borogove_chat_remove_reaction(
+			self.o,
+			m.o,
+			reaction.o
+		)
 	}
 
-	public var id: String {
-		get {
-			useString(c_borogove.borogove_calls_media_stream_track_id(o))!
-		}
+	/**
+	 Call this whenever the user is typing, can call on every keystroke
+	 
+	 @param threadId optional, what thread the user has selected if any
+	 @param content optional, what the user has typed so far
+	 */
+	public func typing(threadId: String?, content: String?) -> Void {
+		return c_borogove.borogove_chat_typing(
+			self.o,
+			threadId,
+			content
+		)
 	}
 
-	public var muted: Bool {
-		get {
-			c_borogove.borogove_calls_media_stream_track_muted(o)
-		}
+	/**
+	 Call this whenever the user makes a chat or thread "active" in your UX
+	 If you call this with true you MUST later call it will false
+	 
+	 @param active true if the chat is "active", false otherwise
+	 @param threadId optional, what thread the user has selected if any
+	 */
+	public func setActive(active: Bool, threadId: String?) -> Void {
+		return c_borogove.borogove_chat_set_active(
+			self.o,
+			active,
+			threadId
+		)
 	}
 
-	public var kind: String {
-		get {
-			useString(c_borogove.borogove_calls_media_stream_track_kind(o))!
-		}
+	/**
+	 Archive this chat
+	 */
+	public func close() -> Void {
+		return c_borogove.borogove_chat_close(
+			self.o
+		)
 	}
 
-	public var supportedAudioFormats: Array<AudioFormat> {
-		get {
-			{var __ret: UnsafeMutablePointer<UnsafeMutableRawPointer?>? = nil;let __ret_length = c_borogove.borogove_calls_media_stream_track_supported_audio_formats(o, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: __ret, count: __ret_length).map({AudioFormat($0!)});c_borogove.borogove_release(__ret);return __r;}();}()
-		}
+	/**
+	 Pin or unpin this chat
+	 */
+	public func togglePinned() -> Void {
+		return c_borogove.borogove_chat_toggle_pinned(
+			self.o
+		)
 	}
 
 	/**
-	 Event fired for new inbound audio frame
-	 
-	 @param callback takes three arguments, the Signed 16-bit PCM data, the clock rate, and the number of channels
+	 Block this chat so it will not re-open
 	 */
-	public func addPCMListener(callback: @Sendable @escaping (Array<Int16>, Int32, Int32)->Void) -> Void {
-		let __callback_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(callback as AnyObject).toOpaque())
-		return c_borogove.borogove_calls_media_stream_track_add_pcm_listener(
+	public func block(reportSpam: Bool = false, spamMessage: ChatMessage? = nil, onServer: Bool = true) -> Void {
+		return c_borogove.borogove_chat_block(
 			self.o,
-			{ (a0, a0_length, a1, a2, ctx) in
-				let callback = Unmanaged<AnyObject>.fromOpaque(ctx!).takeUnretainedValue() as! @Sendable (Array<Int16>, Int32, Int32)->Void
-				return callback({let __r = UnsafeMutableBufferPointer<Int16>(start: a0, count: a0_length).map({$0});c_borogove.borogove_release(a0);return __r;}(), a1, a2)
-			},
-			__callback_ptr
+			reportSpam,
+			spamMessage?.o,
+			onServer
 		)
 	}
 
 	/**
-	 Event fired when ready for next outbound audio frame
-	 
-	 @param callback
+	 Unblock this chat so it will open again
 	 */
-	public func addReadyForPCMListener(callback: @Sendable @escaping ()->Void) -> Void {
-		let __callback_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(callback as AnyObject).toOpaque())
-		return c_borogove.borogove_calls_media_stream_track_add_ready_for_pcm_listener(
+	public func unblock(onServer: Bool = true) -> Void {
+		return c_borogove.borogove_chat_unblock(
 			self.o,
-			{ (ctx) in
-				let callback = Unmanaged<AnyObject>.fromOpaque(ctx!).takeUnretainedValue() as! @Sendable ()->Void
-				return callback()
-			},
-			__callback_ptr
+			onServer
 		)
 	}
 
 	/**
-	 Send new audio to this track
-	 
-	 @param pcm 16-bit signed linear PCM data (interleaved)
-	 @param clockRate the sampling rate of the data
-	 @param channels the number of audio channels
+	 Update notification preferences
 	 */
-	public func writePCM(pcm: Array<Int16>, clockRate: Int32, channels: Int32) -> Void {
-		return c_borogove.borogove_calls_media_stream_track_write_pcm(
+	public func setNotifications(filtered: Bool, mention: Bool, reply: Bool) -> Void {
+		return c_borogove.borogove_chat_set_notifications(
 			self.o,
-			pcm, pcm.count,
-			clockRate,
-			channels
+			filtered,
+			mention,
+			reply
 		)
 	}
 
-	public func stop() -> Void {
-		return c_borogove.borogove_calls_media_stream_track_stop(
+	/**
+	 Should notifications be filtered?
+	 */
+	public func notificationsFiltered() -> Bool {
+		return c_borogove.borogove_chat_notifications_filtered(
 			self.o
 		)
 	}
 
-	deinit {
-		c_borogove.borogove_release(o)
+	/**
+	 Should a mention produce a notification?
+	 */
+	public func notifyMention() -> Bool {
+		return c_borogove.borogove_chat_notify_mention(
+			self.o
+		)
 	}
-}
 
-public class FormOption: SDKObject, @unchecked Sendable {
-	public let o: UnsafeMutableRawPointer
+	/**
+	 Should a reply produce a notification?
+	 */
+	public func notifyReply() -> Bool {
+		return c_borogove.borogove_chat_notify_reply(
+			self.o
+		)
+	}
 
-	internal init(_ ptr: UnsafeMutableRawPointer) {
-		o = ptr
+	/**
+	 An ID of the most recent message in this chat
+	 */
+	public func lastMessageId() -> String? {
+		return useString(c_borogove.borogove_chat_last_message_id(
+			self.o
+		))
 	}
 
-	public var label: String {
-		get {
-			useString(c_borogove.borogove_form_option_label(o))!
-		}
+	/**
+	 Get the URI image to represent this Chat, or null
+	 */
+	public func getPhoto() -> String? {
+		return useString(c_borogove.borogove_chat_get_photo(
+			self.o
+		))
 	}
 
-	public var value: String {
-		get {
-			useString(c_borogove.borogove_form_option_value(o))!
-		}
+	/**
+	 Get the URI to a placeholder image to represent this Chat
+	 */
+	public func getPlaceholder() -> String {
+		return useString(c_borogove.borogove_chat_get_placeholder(
+			self.o
+		))!
 	}
 
-	deinit {
-		c_borogove.borogove_release(o)
+	/**
+	 An ID of the last message displayed to the user
+	 */
+	public func readUpTo() -> String? {
+		return useString(c_borogove.borogove_chat_read_up_to(
+			self.o
+		))
 	}
-}
 
-public protocol FormSection: SDKObject {
-}
+	/**
+	 The number of message that have not yet been displayed to the user
+	 */
+	public func unreadCount() -> Int32 {
+		return c_borogove.borogove_chat_unread_count(
+			self.o
+		)
+	}
 
-public class AnyFormSection: FormSection {
-	public let o: UnsafeMutableRawPointer
+	/**
+	 A preview of the chat, such as the most recent message body
+	 */
+	public func preview() -> String {
+		return useString(c_borogove.borogove_chat_preview(
+			self.o
+		))!
+	}
 
-	internal init(_ ptr: UnsafeMutableRawPointer) {
-		o = ptr
+	/**
+	 Set the display name to use for this chat
+	 
+	 @param displayName String to use as display name
+	 */
+	public func setDisplayName(displayName: String) -> Void {
+		return c_borogove.borogove_chat_set_display_name(
+			self.o,
+			displayName
+		)
 	}
 
-	deinit {
-		c_borogove.borogove_release(o)
+	/**
+	 The display name of this Chat
+	 */
+	public func getDisplayName() -> String {
+		return useString(c_borogove.borogove_chat_get_display_name(
+			self.o
+		))!
 	}
 
-}
+	/**
+	 Set if this chat is to be trusted with our presence, etc
+	 
+	 @param trusted Bool if trusted or not
+	 */
+	public func setTrusted(trusted: Bool) -> Void {
+		return c_borogove.borogove_chat_set_trusted(
+			self.o,
+			trusted
+		)
+	}
 
-public class FormField: SDKObject, @unchecked Sendable {
-	public let o: UnsafeMutableRawPointer
+	/**
+	 Is this a chat with an entity we trust to see our online status?
+	 */
+	public func isTrusted() -> Bool {
+		return c_borogove.borogove_chat_is_trusted(
+			self.o
+		)
+	}
 
-	internal init(_ ptr: UnsafeMutableRawPointer) {
-		o = ptr
+	/**
+	 @returns if this chat is currently syncing with the server
+	 */
+	public func syncing() -> Bool {
+		return c_borogove.borogove_chat_syncing(
+			self.o
+		)
 	}
 
-	public var name: String {
-		get {
-			useString(c_borogove.borogove_form_field_name(o))!
-		}
+	/**
+	 Can audio calls be started in this Chat?
+	 */
+	public func canAudioCall() -> Bool {
+		return c_borogove.borogove_chat_can_audio_call(
+			self.o
+		)
 	}
 
-	public var label: String? {
-		get {
-			useString(c_borogove.borogove_form_field_label(o))
-		}
+	/**
+	 Can video calls be started in this Chat?
+	 */
+	public func canVideoCall() -> Bool {
+		return c_borogove.borogove_chat_can_video_call(
+			self.o
+		)
 	}
 
-	public var desc: String? {
-		get {
-			useString(c_borogove.borogove_form_field_desc(o))
-		}
+	/**
+	 Start a new call in this Chat
+	 
+	 @param audio do we want audio in this call
+	 @param video do we want video in this call
+	 */
+	public func startCall(audio: Bool, video: Bool) -> Session {
+		return AnySession(c_borogove.borogove_chat_start_call(
+			self.o,
+			audio,
+			video
+		)!)
 	}
 
-	public var value: Array<String> {
-		get {
-			{var __ret: UnsafeMutablePointer<UnsafePointer<CChar>?>? = nil;let __ret_length = c_borogove.borogove_form_field_value(o, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafePointer<CChar>?>(start: __ret, count: __ret_length).map({useString($0)!});c_borogove.borogove_release(__ret);return __r;}();}()
-		}
+	/**
+	 Accept any incoming calls in this Chat
+	 */
+	public func acceptCall() -> Void {
+		return c_borogove.borogove_chat_accept_call(
+			self.o
+		)
 	}
 
-	public var required: Bool {
-		get {
-			c_borogove.borogove_form_field_required(o)
-		}
+	/**
+	 Hangup or reject any calls in this chat
+	 */
+	public func hangup() -> Void {
+		return c_borogove.borogove_chat_hangup(
+			self.o
+		)
 	}
 
-	public var type: String {
-		get {
-			useString(c_borogove.borogove_form_field_type(o))!
-		}
+	/**
+	 The current status of a call in this chat
+	 */
+	public func callStatus() -> CallStatus {
+		return c_borogove.borogove_chat_call_status(
+			self.o
+		)
 	}
 
-	public var datatype: String {
-		get {
-			useString(c_borogove.borogove_form_field_datatype(o))!
-		}
+	/**
+	 A DTMFSender for a call in this chat, or NULL
+	 */
+	public func dtmf() -> DTMFSender? {
+		return (c_borogove.borogove_chat_dtmf(
+			self.o
+		)).map({ DTMFSender($0) })
 	}
 
-	public var options: Array<FormOption> {
-		get {
-			{var __ret: UnsafeMutablePointer<UnsafeMutableRawPointer?>? = nil;let __ret_length = c_borogove.borogove_form_field_options(o, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: __ret, count: __ret_length).map({FormOption($0!)});c_borogove.borogove_release(__ret);return __r;}();}()
-		}
+	/**
+	 All video tracks in all active calls in this chat
+	 */
+	public func videoTracks() -> Array<MediaStreamTrack> {
+		return {var __ret: UnsafeMutablePointer<UnsafeMutableRawPointer?>? = nil;let __ret_length = c_borogove.borogove_chat_video_tracks(
+			self.o
+		, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: __ret, count: __ret_length).map({MediaStreamTrack($0!)});c_borogove.borogove_release(__ret);return __r;}();}()
 	}
 
-	public var open: Bool {
-		get {
-			c_borogove.borogove_form_field_open(o)
-		}
+	/**
+	 Get encryption mode for this chat
+	 */
+	public func encryptionMode() -> String {
+		return useString(c_borogove.borogove_chat_encryption_mode(
+			self.o
+		))!
 	}
 
-	public var rangeMin: String? {
-		get {
-			useString(c_borogove.borogove_form_field_range_min(o))
-		}
+	/**
+	 Can the user send messages to this chat?
+	 */
+	public func canSend() -> Bool {
+		return c_borogove.borogove_chat_can_send(
+			self.o
+		)
 	}
 
-	public var rangeMax: String? {
-		get {
-			useString(c_borogove.borogove_form_field_range_max(o))
-		}
+	/**
+	 Invite another chat's participants to participate in this one
+	 */
+	public func invite(other: Chat, threadId: String? = nil) -> Void {
+		return c_borogove.borogove_chat_invite(
+			self.o,
+			other.o,
+			threadId
+		)
 	}
 
-	public var regex: String? {
-		get {
-			useString(c_borogove.borogove_form_field_regex(o))
+	/**
+	 Can the user invite others to this chat?
+	 */
+	public func canInvite() -> Bool {
+		return c_borogove.borogove_chat_can_invite(
+			self.o
+		)
+	}
+
+	/**
+	 This chat's primary mode of interaction is via commands
+	 */
+	public func isApp() -> Bool {
+		return c_borogove.borogove_chat_is_app(
+			self.o
+		)
+	}
+
+	/**
+	 Does this chat provide a menu of commands?
+	 */
+	public func hasCommands() -> Bool {
+		return c_borogove.borogove_chat_has_commands(
+			self.o
+		)
+	}
+
+	public func commands() async -> Array<Command> {
+		return await withUnsafeContinuation { cont in
+		let __cont_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(cont as AnyObject).toOpaque())
+		return c_borogove.borogove_chat_commands(
+			self.o,
+			{ (a, a_length, ctx) in
+				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<Array<Command>, Never>
+				cont.resume(returning: {let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: a, count: a_length).map({Command($0!)});c_borogove.borogove_release(a);return __r;}())
+			},
+			__cont_ptr
+		)
 		}
 	}
 
+	/**
+	 The Participant that originally invited us to this Chat, if we were invited
+	 */
+	public func invitedBy() -> Participant? {
+		return (c_borogove.borogove_chat_invited_by(
+			self.o
+		)).map({ Participant($0) })
+	}
+
 	deinit {
 		c_borogove.borogove_release(o)
 	}
 }
 
-public class FormItem: SDKObject, @unchecked Sendable {
-	public let o: UnsafeMutableRawPointer
+public protocol Persistence: SDKObject {
+	func lastId(accountId: String, chatId: String?) async -> String?
 
-	internal init(_ ptr: UnsafeMutableRawPointer) {
-		o = ptr
+	func storeChats(accountId: String, chats: Array<Chat>) -> Void
+
+	func storeMessages(accountId: String, message: Array<ChatMessage>) async -> Array<ChatMessage>
+
+	func updateMessage(accountId: String, message: ChatMessage) -> Void
+
+	func updateMessageStatus(accountId: String, localId: String, status: MessageStatus, statusText: String?) async -> ChatMessage
+
+	func getMessage(accountId: String, chatId: String, serverId: String?, localId: String?) async -> ChatMessage?
+
+	func getMessagesBefore(accountId: String, chatId: String, beforeId: String?, beforeTime: String?) async -> Array<ChatMessage>
+
+	func getMessagesAfter(accountId: String, chatId: String, afterId: String?, afterTime: String?) async -> Array<ChatMessage>
+
+	func getMessagesAround(accountId: String, chatId: String, aroundId: String?, aroundTime: String?) async -> Array<ChatMessage>
+
+	func hasMedia(hashAlgorithm: String, hash: Array<UInt8>) async -> Bool
+
+	func storeMedia(mime: String, bytes: Array<UInt8>) async -> Bool
+
+	func removeMedia(hashAlgorithm: String, hash: Array<UInt8>) -> Void
+
+	func storeLogin(login: String, clientId: String, displayName: String, token: String?) -> Void
+
+	func removeAccount(accountId: String, completely: Bool) -> Void
+
+	func listAccounts() async -> Array<String>
+
+}
+
+public extension Persistence {
+	func lastId(accountId: String, chatId: String?) async -> String? {
+		return await withUnsafeContinuation { cont in
+		let __cont_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(cont as AnyObject).toOpaque())
+		return c_borogove.borogove_persistence_last_id(
+			self.o,
+			accountId,
+			chatId,
+			{ (a, ctx) in
+				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<String?, Never>
+				cont.resume(returning: useString(a))
+			},
+			__cont_ptr
+		)
+		}
 	}
 
-	public var text: String? {
-		get {
-			useString(c_borogove.borogove_form_item_text(o))
+	func storeChats(accountId: String, chats: Array<Chat>) -> Void {
+		return c_borogove.borogove_persistence_store_chats(
+			self.o,
+			accountId,
+			chats.map { $0.o }, chats.count
+		)
+	}
+
+	func storeMessages(accountId: String, message: Array<ChatMessage>) async -> Array<ChatMessage> {
+		return await withUnsafeContinuation { cont in
+		let __cont_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(cont as AnyObject).toOpaque())
+		return c_borogove.borogove_persistence_store_messages(
+			self.o,
+			accountId,
+			message.map { $0.o }, message.count,
+			{ (a, a_length, ctx) in
+				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<Array<ChatMessage>, Never>
+				cont.resume(returning: {let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: a, count: a_length).map({ChatMessage($0!)});c_borogove.borogove_release(a);return __r;}())
+			},
+			__cont_ptr
+		)
 		}
 	}
 
-	public var field: FormField? {
-		get {
-			(c_borogove.borogove_form_item_field(o)).map({ FormField($0) })
+	func updateMessage(accountId: String, message: ChatMessage) -> Void {
+		return c_borogove.borogove_persistence_update_message(
+			self.o,
+			accountId,
+			message.o
+		)
+	}
+
+	func updateMessageStatus(accountId: String, localId: String, status: MessageStatus, statusText: String?) async -> ChatMessage {
+		return await withUnsafeContinuation { cont in
+		let __cont_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(cont as AnyObject).toOpaque())
+		return c_borogove.borogove_persistence_update_message_status(
+			self.o,
+			accountId,
+			localId,
+			status,
+			statusText,
+			{ (a, ctx) in
+				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<ChatMessage, Never>
+				cont.resume(returning: ChatMessage(a!))
+			},
+			__cont_ptr
+		)
 		}
 	}
 
-	public var section: FormSection? {
-		get {
-			(c_borogove.borogove_form_item_section(o)).map({ AnyFormSection($0) })
+	func getMessage(accountId: String, chatId: String, serverId: String?, localId: String?) async -> ChatMessage? {
+		return await withUnsafeContinuation { cont in
+		let __cont_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(cont as AnyObject).toOpaque())
+		return c_borogove.borogove_persistence_get_message(
+			self.o,
+			accountId,
+			chatId,
+			serverId,
+			localId,
+			{ (a, ctx) in
+				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<ChatMessage?, Never>
+				cont.resume(returning: (a).map({ ChatMessage($0) }))
+			},
+			__cont_ptr
+		)
+		}
+	}
+
+	func getMessagesBefore(accountId: String, chatId: String, beforeId: String?, beforeTime: String?) async -> Array<ChatMessage> {
+		return await withUnsafeContinuation { cont in
+		let __cont_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(cont as AnyObject).toOpaque())
+		return c_borogove.borogove_persistence_get_messages_before(
+			self.o,
+			accountId,
+			chatId,
+			beforeId,
+			beforeTime,
+			{ (a, a_length, ctx) in
+				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<Array<ChatMessage>, Never>
+				cont.resume(returning: {let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: a, count: a_length).map({ChatMessage($0!)});c_borogove.borogove_release(a);return __r;}())
+			},
+			__cont_ptr
+		)
+		}
+	}
+
+	func getMessagesAfter(accountId: String, chatId: String, afterId: String?, afterTime: String?) async -> Array<ChatMessage> {
+		return await withUnsafeContinuation { cont in
+		let __cont_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(cont as AnyObject).toOpaque())
+		return c_borogove.borogove_persistence_get_messages_after(
+			self.o,
+			accountId,
+			chatId,
+			afterId,
+			afterTime,
+			{ (a, a_length, ctx) in
+				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<Array<ChatMessage>, Never>
+				cont.resume(returning: {let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: a, count: a_length).map({ChatMessage($0!)});c_borogove.borogove_release(a);return __r;}())
+			},
+			__cont_ptr
+		)
+		}
+	}
+
+	func getMessagesAround(accountId: String, chatId: String, aroundId: String?, aroundTime: String?) async -> Array<ChatMessage> {
+		return await withUnsafeContinuation { cont in
+		let __cont_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(cont as AnyObject).toOpaque())
+		return c_borogove.borogove_persistence_get_messages_around(
+			self.o,
+			accountId,
+			chatId,
+			aroundId,
+			aroundTime,
+			{ (a, a_length, ctx) in
+				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<Array<ChatMessage>, Never>
+				cont.resume(returning: {let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: a, count: a_length).map({ChatMessage($0!)});c_borogove.borogove_release(a);return __r;}())
+			},
+			__cont_ptr
+		)
 		}
 	}
 
-	public var status: String? {
-		get {
-			useString(c_borogove.borogove_form_item_status(o))
+	func hasMedia(hashAlgorithm: String, hash: Array<UInt8>) async -> Bool {
+		return await withUnsafeContinuation { cont in
+		let __cont_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(cont as AnyObject).toOpaque())
+		return c_borogove.borogove_persistence_has_media(
+			self.o,
+			hashAlgorithm,
+			hash, hash.count,
+			{ (a, ctx) in
+				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<Bool, Never>
+				cont.resume(returning: a)
+			},
+			__cont_ptr
+		)
+		}
+	}
+
+	func storeMedia(mime: String, bytes: Array<UInt8>) async -> Bool {
+		return await withUnsafeContinuation { cont in
+		let __cont_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(cont as AnyObject).toOpaque())
+		return c_borogove.borogove_persistence_store_media(
+			self.o,
+			mime,
+			bytes, bytes.count,
+			{ (a, ctx) in
+				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<Bool, Never>
+				cont.resume(returning: a)
+			},
+			__cont_ptr
+		)
+		}
+	}
+
+	func removeMedia(hashAlgorithm: String, hash: Array<UInt8>) -> Void {
+		return c_borogove.borogove_persistence_remove_media(
+			self.o,
+			hashAlgorithm,
+			hash, hash.count
+		)
+	}
+
+	func storeLogin(login: String, clientId: String, displayName: String, token: String?) -> Void {
+		return c_borogove.borogove_persistence_store_login(
+			self.o,
+			login,
+			clientId,
+			displayName,
+			token
+		)
+	}
+
+	func removeAccount(accountId: String, completely: Bool) -> Void {
+		return c_borogove.borogove_persistence_remove_account(
+			self.o,
+			accountId,
+			completely
+		)
+	}
+
+	func listAccounts() async -> Array<String> {
+		return await withUnsafeContinuation { cont in
+		let __cont_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(cont as AnyObject).toOpaque())
+		return c_borogove.borogove_persistence_list_accounts(
+			self.o,
+			{ (a, a_length, ctx) in
+				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<Array<String>, Never>
+				cont.resume(returning: {let __r = UnsafeMutableBufferPointer<UnsafePointer<CChar>?>(start: a, count: a_length).map({useString($0)!});c_borogove.borogove_release(a);return __r;}())
+			},
+			__cont_ptr
+		)
 		}
 	}
 
-	public var tableHeader: Array<FormField>? {
-		get {
-			{var __ret: UnsafeMutablePointer<UnsafeMutableRawPointer?>? = nil;let __ret_length = c_borogove.borogove_form_item_table_header(o, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: __ret, count: __ret_length).map({FormField($0!)});c_borogove.borogove_release(__ret);return __r;}();}()
-		}
+}
+
+public class AnyPersistence: Persistence {
+	public let o: UnsafeMutableRawPointer
+
+	internal init(_ ptr: UnsafeMutableRawPointer) {
+		o = ptr
 	}
 
 	deinit {
 		c_borogove.borogove_release(o)
 	}
+
 }
 
-public class Form: SDKObject, FormSection, @unchecked Sendable {
+public class Sqlite: SDKObject, KeyValueStore, Persistence, @unchecked Sendable {
 	public let o: UnsafeMutableRawPointer
 
 	internal init(_ ptr: UnsafeMutableRawPointer) {
@@ -1653,88 +2062,70 @@ public class Form: SDKObject, FormSection, @unchecked Sendable {
 	}
 
 	/**
-	 Is this form entirely results / read-only?
+	 Create a basic persistence layer based on sqlite
+	 
+	 @param dbfile path to sqlite database
+	 @params media a MediaStore to use for media
+	 @returns new persistence layer
 	 */
-	public func isResult() -> Bool {
-		return c_borogove.borogove_form_is_result(
-			self.o
-		)
+	public init(dbfile: String, media: MediaStore) {
+		o = (c_borogove.borogove_persistence_sqlite_new(dbfile, media.o))
 	}
 
 	/**
-	 Title of this form
+	 Get a single message
+	 
+	 @param accountId the account the message was sent or received on
+	 @param chatId the chat the message was sent or received on
+	 @param serverId the serverId of the message (optional if localId is specified)
+	 @param localId the localId of the message (optional if serverId is specified)
+	 @returns Promise resolving to the message or null
 	 */
-	public func title() -> String? {
-		return useString(c_borogove.borogove_form_title(
-			self.o
-		))
+	public func getMessage(accountId: String, chatId: String, serverId: String?, localId: String?) async -> ChatMessage? {
+		return await withUnsafeContinuation { cont in
+		let __cont_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(cont as AnyObject).toOpaque())
+		return c_borogove.borogove_persistence_sqlite_get_message(
+			self.o,
+			accountId,
+			chatId,
+			serverId,
+			localId,
+			{ (a, ctx) in
+				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<ChatMessage?, Never>
+				cont.resume(returning: (a).map({ ChatMessage($0) }))
+			},
+			__cont_ptr
+		)
+		}
 	}
 
 	/**
-	 URL to use instead of this form
+	 Remove an account from storage
+	 
+	 @param accountId the account to remove
+	 @param completely if message history, etc should be removed also
 	 */
-	public func url() -> String? {
-		return useString(c_borogove.borogove_form_url(
-			self.o
-		))
+	public func removeAccount(accountId: String, completely: Bool) -> Void {
+		return c_borogove.borogove_persistence_sqlite_remove_account(
+			self.o,
+			accountId,
+			completely
+		)
 	}
 
 	/**
-	 Items to render inside this form
+	 List all known accounts
+	 
+	 @returns Promise resolving to array of account IDs
 	 */
-	public func items() -> Array<FormItem> {
-		return {var __ret: UnsafeMutablePointer<UnsafeMutableRawPointer?>? = nil;let __ret_length = c_borogove.borogove_form_items(
-			self.o
-		, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: __ret, count: __ret_length).map({FormItem($0!)});c_borogove.borogove_release(__ret);return __r;}();}()
-	}
-
-	deinit {
-		c_borogove.borogove_release(o)
-	}
-}
-
-public class CommandSession: SDKObject, @unchecked Sendable {
-	public let o: UnsafeMutableRawPointer
-
-	internal init(_ ptr: UnsafeMutableRawPointer) {
-		o = ptr
-	}
-
-	public var name: String {
-		get {
-			useString(c_borogove.borogove_command_session_name(o))!
-		}
-	}
-
-	public var status: String {
-		get {
-			useString(c_borogove.borogove_command_session_status(o))!
-		}
-	}
-
-	public var actions: Array<FormOption> {
-		get {
-			{var __ret: UnsafeMutablePointer<UnsafeMutableRawPointer?>? = nil;let __ret_length = c_borogove.borogove_command_session_actions(o, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: __ret, count: __ret_length).map({FormOption($0!)});c_borogove.borogove_release(__ret);return __r;}();}()
-		}
-	}
-
-	public var forms: Array<Form> {
-		get {
-			{var __ret: UnsafeMutablePointer<UnsafeMutableRawPointer?>? = nil;let __ret_length = c_borogove.borogove_command_session_forms(o, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: __ret, count: __ret_length).map({Form($0!)});c_borogove.borogove_release(__ret);return __r;}();}()
-		}
-	}
-
-	public func execute(action: String? = nil, data: FormSubmitBuilder? = nil, formIdx: Int32 = 0) async -> CommandSession {
+	public func listAccounts() async -> Array<String> {
 		return await withUnsafeContinuation { cont in
 		let __cont_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(cont as AnyObject).toOpaque())
-		return c_borogove.borogove_command_session_execute(
+		return c_borogove.borogove_persistence_sqlite_list_accounts(
 			self.o,
-			action,
-			data?.o,
-			formIdx,
-			{ (a, ctx) in
-				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<CommandSession, Never>
-				cont.resume(returning: CommandSession(a!))
+			{ (a, a_length, ctx) in
+				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<Array<String>, Never>
+				cont.resume(returning: {let __r = UnsafeMutableBufferPointer<UnsafePointer<CChar>?>(start: a, count: a_length).map({useString($0)!});c_borogove.borogove_release(a);return __r;}())
 			},
 			__cont_ptr
 		)
@@ -1746,34 +2137,23 @@ public class CommandSession: SDKObject, @unchecked Sendable {
 	}
 }
 
-public class Command: SDKObject, @unchecked Sendable {
+public class FormSubmitBuilder: SDKObject, @unchecked Sendable {
 	public let o: UnsafeMutableRawPointer
 
 	internal init(_ ptr: UnsafeMutableRawPointer) {
 		o = ptr
 	}
 
-	public var name: String {
-		get {
-			useString(c_borogove.borogove_command_name(o))!
-		}
+	public init() {
+		o = (c_borogove.borogove_form_submit_builder_new())
 	}
 
-	/**
-	 Start a new session for this command. May have side effects!
-	 */
-	public func execute() async -> CommandSession {
-		return await withUnsafeContinuation { cont in
-		let __cont_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(cont as AnyObject).toOpaque())
-		return c_borogove.borogove_command_execute(
+	public func add(k: String, v: String) -> Void {
+		return c_borogove.borogove_form_submit_builder_add(
 			self.o,
-			{ (a, ctx) in
-				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<CommandSession, Never>
-				cont.resume(returning: CommandSession(a!))
-			},
-			__cont_ptr
+			k,
+			v
 		)
-		}
 	}
 
 	deinit {
@@ -1781,7 +2161,7 @@ public class Command: SDKObject, @unchecked Sendable {
 	}
 }
 
-public class Chat: SDKObject, @unchecked Sendable {
+public class ChatMessageBuilder: SDKObject, @unchecked Sendable {
 	public let o: UnsafeMutableRawPointer
 
 	internal init(_ ptr: UnsafeMutableRawPointer) {
@@ -1789,589 +2169,582 @@ public class Chat: SDKObject, @unchecked Sendable {
 	}
 
 	/**
-	 ID of this Chat
-	 */
-	public var chatId: String {
-		get {
-			useString(c_borogove.borogove_chat_chat_id(o))!
-		}
-	}
-
-	/**
-	 Current state of this chat
+	 @returns a new blank ChatMessageBuilder
 	 */
-	public var uiState: UiState {
-		get {
-			c_borogove.borogove_chat_ui_state(o)
-		}
+	public init() {
+		o = (c_borogove.borogove_chat_message_builder_new())
 	}
 
 	/**
-	 Is this chat blocked?
+	 The ID as set by the creator of this message
 	 */
-	public var isBlocked: Bool {
+	public var localId: String? {
 		get {
-			c_borogove.borogove_chat_is_blocked(o)
+			useString(c_borogove.borogove_chat_message_builder_local_id(o))
 		}
-	}
-
-	/**
-	 The most recent message in this chat
-	 */
-	public var lastMessage: ChatMessage? {
-		get {
-			(c_borogove.borogove_chat_last_message(o)).map({ ChatMessage($0) })
+		set {
+			c_borogove.borogove_chat_message_builder_set_local_id(o, newValue)
 		}
 	}
 
 	/**
-	 Has this chat ever been bookmarked?
+	 The ID as set by the authoritative server
 	 */
-	public var isBookmarked: Bool {
+	public var serverId: String? {
 		get {
-			c_borogove.borogove_chat_is_bookmarked(o)
-		}
-	}
-
-	/**
-	 Fetch a page of messages before some point
-	 
-	 @param beforeId id of the message to look before
-	 @param beforeTime timestamp of the message to look before,
-	        String in format YYYY-MM-DDThh:mm:ss[.sss]+00:00
-	 @returns Promise resolving to an array of ChatMessage that are found
-	 */
-	public func getMessagesBefore(beforeId: String?, beforeTime: String?) async -> Array<ChatMessage> {
-		return await withUnsafeContinuation { cont in
-		let __cont_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(cont as AnyObject).toOpaque())
-		return c_borogove.borogove_chat_get_messages_before(
-			self.o,
-			beforeId,
-			beforeTime,
-			{ (a, a_length, ctx) in
-				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<Array<ChatMessage>, Never>
-				cont.resume(returning: {let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: a, count: a_length).map({ChatMessage($0!)});c_borogove.borogove_release(a);return __r;}())
-			},
-			__cont_ptr
-		)
+			useString(c_borogove.borogove_chat_message_builder_server_id(o))
 		}
-	}
-
-	/**
-	 Fetch a page of messages after some point
-	 
-	 @param afterId id of the message to look after
-	 @param afterTime timestamp of the message to look after,
-	        String in format YYYY-MM-DDThh:mm:ss[.sss]+00:00
-	 @returns Promise resolving to an array of ChatMessage that are found
-	 */
-	public func getMessagesAfter(afterId: String?, afterTime: String?) async -> Array<ChatMessage> {
-		return await withUnsafeContinuation { cont in
-		let __cont_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(cont as AnyObject).toOpaque())
-		return c_borogove.borogove_chat_get_messages_after(
-			self.o,
-			afterId,
-			afterTime,
-			{ (a, a_length, ctx) in
-				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<Array<ChatMessage>, Never>
-				cont.resume(returning: {let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: a, count: a_length).map({ChatMessage($0!)});c_borogove.borogove_release(a);return __r;}())
-			},
-			__cont_ptr
-		)
+		set {
+			c_borogove.borogove_chat_message_builder_set_server_id(o, newValue)
 		}
 	}
 
 	/**
-	 Fetch a page of messages around (before, including, and after) some point
-	 
-	 @param aroundId id of the message to look around
-	 @param aroundTime timestamp of the message to look around,
-	        String in format YYYY-MM-DDThh:mm:ss[.sss]+00:00
-	 @returns Promise resolving to an array of ChatMessage that are found
+	 The ID of the server which set the serverId
 	 */
-	public func getMessagesAround(aroundId: String?, aroundTime: String?) async -> Array<ChatMessage> {
-		return await withUnsafeContinuation { cont in
-		let __cont_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(cont as AnyObject).toOpaque())
-		return c_borogove.borogove_chat_get_messages_around(
-			self.o,
-			aroundId,
-			aroundTime,
-			{ (a, a_length, ctx) in
-				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<Array<ChatMessage>, Never>
-				cont.resume(returning: {let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: a, count: a_length).map({ChatMessage($0!)});c_borogove.borogove_release(a);return __r;}())
-			},
-			__cont_ptr
-		)
+	public var serverIdBy: String? {
+		get {
+			useString(c_borogove.borogove_chat_message_builder_server_id_by(o))
+		}
+		set {
+			c_borogove.borogove_chat_message_builder_set_server_id_by(o, newValue)
 		}
 	}
 
 	/**
-	 Send a message to this Chat
-	 
-	 @param message the ChatMessageBuilder to send
+	 The type of this message (Chat, Call, etc)
 	 */
-	public func sendMessage(message: ChatMessageBuilder) -> Void {
-		return c_borogove.borogove_chat_send_message(
-			self.o,
-			message.o
-		)
+	public var type: MessageType {
+		get {
+			c_borogove.borogove_chat_message_builder_type(o)
+		}
+		set {
+			c_borogove.borogove_chat_message_builder_set_type(o, newValue)
+		}
 	}
 
 	/**
-	 Signals that all messages up to and including this one have probably
-	 been displayed to the user
-	 
-	 @param message the ChatMessage most recently displayed
+	 The timestamp of this message, in format YYYY-MM-DDThh:mm:ss[.sss]+00:00
 	 */
-	public func markReadUpTo(message: ChatMessage) -> Void {
-		return c_borogove.borogove_chat_mark_read_up_to(
-			self.o,
-			message.o
-		)
+	public var timestamp: String? {
+		get {
+			useString(c_borogove.borogove_chat_message_builder_timestamp(o))
+		}
+		set {
+			c_borogove.borogove_chat_message_builder_set_timestamp(o, newValue)
+		}
 	}
 
 	/**
-	 Save this Chat on the server
+	 The ID of the message sender
 	 */
-	public func bookmark() -> Void {
-		return c_borogove.borogove_chat_bookmark(
-			self.o
-		)
+	public var senderId: String? {
+		get {
+			useString(c_borogove.borogove_chat_message_builder_sender_id(o))
+		}
+		set {
+			c_borogove.borogove_chat_message_builder_set_sender_id(o, newValue)
+		}
 	}
 
 	/**
-	 Get the list of IDs of participants in this Chat
-	 
-	 @returns array of IDs
+	 Message this one is in reply to, or NULL
 	 */
-	public func getParticipants() -> Array<String> {
-		return {var __ret: UnsafeMutablePointer<UnsafePointer<CChar>?>? = nil;let __ret_length = c_borogove.borogove_chat_get_participants(
-			self.o
-		, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafePointer<CChar>?>(start: __ret, count: __ret_length).map({useString($0)!});c_borogove.borogove_release(__ret);return __r;}();}()
+	public var replyToMessage: ChatMessage? {
+		get {
+			(c_borogove.borogove_chat_message_builder_reply_to_message(o)).map({ ChatMessage($0) })
+		}
+		set {
+			c_borogove.borogove_chat_message_builder_set_reply_to_message(o, newValue?.o)
+		}
 	}
 
 	/**
-	 Get the details for one participant in this Chat
-	 
-	 @param participantId the ID of the participant to look up
+	 ID of the thread this message is in, or NULL
 	 */
-	public func getParticipantDetails(participantId: String) -> Participant {
-		return Participant(c_borogove.borogove_chat_get_participant_details(
-			self.o,
-			participantId
-		)!)
+	public var threadId: String? {
+		get {
+			useString(c_borogove.borogove_chat_message_builder_thread_id(o))
+		}
+		set {
+			c_borogove.borogove_chat_message_builder_set_thread_id(o, newValue)
+		}
 	}
 
 	/**
-	 Correct an already-send message by replacing it with a new one
-	 
-	 @param localId the localId of the message to correct
-	        must be the localId of the first version ever sent, not a subsequent correction
-	 @param message the new ChatMessage to replace it with
+	 Array of attachments to this message
 	 */
-	public func correctMessage(localId: String, message: ChatMessageBuilder) -> Void {
-		return c_borogove.borogove_chat_correct_message(
-			self.o,
-			localId,
-			message.o
-		)
+	public var attachments: Array<ChatAttachment> {
+		get {
+			{var __ret: UnsafeMutablePointer<UnsafeMutableRawPointer?>? = nil;let __ret_length = c_borogove.borogove_chat_message_builder_attachments(o, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: __ret, count: __ret_length).map({ChatAttachment($0!)});c_borogove.borogove_release(__ret);return __r;}();}()
+		}
 	}
 
 	/**
-	 Add new reaction to a message in this Chat
-	 
-	 @param m ChatMessage to react to
-	 @param reaction emoji of the reaction
+	 Body text of this message or NULL
 	 */
-	public func addReaction(m: ChatMessage, reaction: Reaction) -> Void {
-		return c_borogove.borogove_chat_add_reaction(
-			self.o,
-			m.o,
-			reaction.o
-		)
+	public var text: String? {
+		get {
+			useString(c_borogove.borogove_chat_message_builder_text(o))
+		}
+		set {
+			c_borogove.borogove_chat_message_builder_set_text(o, newValue)
+		}
 	}
 
 	/**
-	 Remove an already-sent reaction from a message
-	 
-	 @param m ChatMessage to remove the reaction from
-	 @param reaction the emoji to remove
+	 Language code for the body text
 	 */
-	public func removeReaction(m: ChatMessage, reaction: Reaction) -> Void {
-		return c_borogove.borogove_chat_remove_reaction(
-			self.o,
-			m.o,
-			reaction.o
-		)
+	public var lang: String? {
+		get {
+			useString(c_borogove.borogove_chat_message_builder_lang(o))
+		}
+		set {
+			c_borogove.borogove_chat_message_builder_set_lang(o, newValue)
+		}
 	}
 
 	/**
-	 Call this whenever the user is typing, can call on every keystroke
-	 
-	 @param threadId optional, what thread the user has selected if any
-	 @param content optional, what the user has typed so far
+	 Direction of this message
 	 */
-	public func typing(threadId: String?, content: String?) -> Void {
-		return c_borogove.borogove_chat_typing(
-			self.o,
-			threadId,
-			content
-		)
+	public var direction: MessageDirection {
+		get {
+			c_borogove.borogove_chat_message_builder_direction(o)
+		}
+		set {
+			c_borogove.borogove_chat_message_builder_set_direction(o, newValue)
+		}
 	}
 
 	/**
-	 Call this whenever the user makes a chat or thread "active" in your UX
-	 If you call this with true you MUST later call it will false
-	 
-	 @param active true if the chat is "active", false otherwise
-	 @param threadId optional, what thread the user has selected if any
+	 Status of this message
 	 */
-	public func setActive(active: Bool, threadId: String?) -> Void {
-		return c_borogove.borogove_chat_set_active(
-			self.o,
-			active,
-			threadId
-		)
+	public var status: MessageStatus {
+		get {
+			c_borogove.borogove_chat_message_builder_status(o)
+		}
+		set {
+			c_borogove.borogove_chat_message_builder_set_status(o, newValue)
+		}
 	}
 
 	/**
-	 Archive this chat
+	 Human readable text to go with the status
 	 */
-	public func close() -> Void {
-		return c_borogove.borogove_chat_close(
-			self.o
-		)
+	public var statusText: String? {
+		get {
+			useString(c_borogove.borogove_chat_message_builder_status_text(o))
+		}
+		set {
+			c_borogove.borogove_chat_message_builder_set_status_text(o, newValue)
+		}
 	}
 
 	/**
-	 Pin or unpin this chat
+	 Array of past versions of this message, if it has been edited
 	 */
-	public func togglePinned() -> Void {
-		return c_borogove.borogove_chat_toggle_pinned(
-			self.o
-		)
+	public var versions: Array<ChatMessage> {
+		get {
+			{var __ret: UnsafeMutablePointer<UnsafeMutableRawPointer?>? = nil;let __ret_length = c_borogove.borogove_chat_message_builder_versions(o, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: __ret, count: __ret_length).map({ChatMessage($0!)});c_borogove.borogove_release(__ret);return __r;}();}()
+		}
+		set {
+			c_borogove.borogove_chat_message_builder_set_versions(o, newValue.map { $0.o }, newValue.count)
+		}
 	}
 
 	/**
-	 Block this chat so it will not re-open
+	 Information about the encryption used by the sender of
+	 this message.
 	 */
-	public func block(reportSpam: Bool = false, spamMessage: ChatMessage? = nil, onServer: Bool = true) -> Void {
-		return c_borogove.borogove_chat_block(
-			self.o,
-			reportSpam,
-			spamMessage?.o,
-			onServer
-		)
+	public var encryption: EncryptionInfo? {
+		get {
+			(c_borogove.borogove_chat_message_builder_encryption(o)).map({ EncryptionInfo($0) })
+		}
+		set {
+			c_borogove.borogove_chat_message_builder_set_encryption(o, newValue?.o)
+		}
 	}
 
 	/**
-	 Unblock this chat so it will open again
+	 Add an attachment to this message
+	 
+	 @param attachment The ChatAttachment to add
 	 */
-	public func unblock(onServer: Bool = true) -> Void {
-		return c_borogove.borogove_chat_unblock(
+	public func addAttachment(attachment: ChatAttachment) -> Void {
+		return c_borogove.borogove_chat_message_builder_add_attachment(
 			self.o,
-			onServer
+			attachment.o
 		)
 	}
 
 	/**
-	 Update notification preferences
+	 Set rich text using an HTML string
+	 Also sets the plain text body appropriately
 	 */
-	public func setNotifications(filtered: Bool, mention: Bool, reply: Bool) -> Void {
-		return c_borogove.borogove_chat_set_notifications(
-			self.o,
-			filtered,
-			mention,
-			reply
+	public func setHtml(html: String) -> Void {
+		return c_borogove.borogove_chat_message_builder_set_html(
+			self.o,
+			html
 		)
 	}
 
 	/**
-	 Should notifications be filtered?
+	 The ID of the Chat this message is associated with
 	 */
-	public func notificationsFiltered() -> Bool {
-		return c_borogove.borogove_chat_notifications_filtered(
+	public func chatId() -> String {
+		return useString(c_borogove.borogove_chat_message_builder_chat_id(
 			self.o
-		)
+		))!
 	}
 
 	/**
-	 Should a mention produce a notification?
+	 The ID of the sender of this message
 	 */
-	public func notifyMention() -> Bool {
-		return c_borogove.borogove_chat_notify_mention(
+	public func get_senderId() -> String {
+		return useString(c_borogove.borogove_chat_message_builder_get_sender_id(
 			self.o
-		)
+		))!
 	}
 
 	/**
-	 Should a reply produce a notification?
+	 Build this builder into an immutable ChatMessage
+	 
+	 @returns the ChatMessage
 	 */
-	public func notifyReply() -> Bool {
-		return c_borogove.borogove_chat_notify_reply(
+	public func build() -> ChatMessage {
+		return ChatMessage(c_borogove.borogove_chat_message_builder_build(
 			self.o
-		)
+		)!)
 	}
 
-	/**
-	 An ID of the most recent message in this chat
-	 */
-	public func lastMessageId() -> String? {
-		return useString(c_borogove.borogove_chat_last_message_id(
+	deinit {
+		c_borogove.borogove_release(o)
+	}
+}
+
+public class ProfileItem: SDKObject, @unchecked Sendable {
+	public let o: UnsafeMutableRawPointer
+
+	internal init(_ ptr: UnsafeMutableRawPointer) {
+		o = ptr
+	}
+
+	public var id: String {
+		get {
+			useString(c_borogove.borogove_profile_item_id(o))!
+		}
+	}
+
+	public var key: String {
+		get {
+			useString(c_borogove.borogove_profile_item_key(o))!
+		}
+	}
+
+	public func parameters() -> Array<ProfileItem> {
+		return {var __ret: UnsafeMutablePointer<UnsafeMutableRawPointer?>? = nil;let __ret_length = c_borogove.borogove_profile_item_parameters(
 			self.o
-		))
+		, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: __ret, count: __ret_length).map({ProfileItem($0!)});c_borogove.borogove_release(__ret);return __r;}();}()
 	}
 
-	/**
-	 Get the URI image to represent this Chat, or null
-	 */
-	public func getPhoto() -> String? {
-		return useString(c_borogove.borogove_chat_get_photo(
+	public func text() -> Array<String> {
+		return {var __ret: UnsafeMutablePointer<UnsafePointer<CChar>?>? = nil;let __ret_length = c_borogove.borogove_profile_item_text(
 			self.o
-		))
+		, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafePointer<CChar>?>(start: __ret, count: __ret_length).map({useString($0)!});c_borogove.borogove_release(__ret);return __r;}();}()
 	}
 
-	/**
-	 Get the URI to a placeholder image to represent this Chat
-	 */
-	public func getPlaceholder() -> String {
-		return useString(c_borogove.borogove_chat_get_placeholder(
+	public func uri() -> Array<String> {
+		return {var __ret: UnsafeMutablePointer<UnsafePointer<CChar>?>? = nil;let __ret_length = c_borogove.borogove_profile_item_uri(
 			self.o
-		))!
+		, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafePointer<CChar>?>(start: __ret, count: __ret_length).map({useString($0)!});c_borogove.borogove_release(__ret);return __r;}();}()
 	}
 
-	/**
-	 An ID of the last message displayed to the user
-	 */
-	public func readUpTo() -> String? {
-		return useString(c_borogove.borogove_chat_read_up_to(
+	public func date() -> Array<String> {
+		return {var __ret: UnsafeMutablePointer<UnsafePointer<CChar>?>? = nil;let __ret_length = c_borogove.borogove_profile_item_date(
 			self.o
-		))
+		, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafePointer<CChar>?>(start: __ret, count: __ret_length).map({useString($0)!});c_borogove.borogove_release(__ret);return __r;}();}()
 	}
 
-	/**
-	 The number of message that have not yet been displayed to the user
-	 */
-	public func unreadCount() -> Int32 {
-		return c_borogove.borogove_chat_unread_count(
+	public func time() -> Array<String> {
+		return {var __ret: UnsafeMutablePointer<UnsafePointer<CChar>?>? = nil;let __ret_length = c_borogove.borogove_profile_item_time(
 			self.o
-		)
+		, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafePointer<CChar>?>(start: __ret, count: __ret_length).map({useString($0)!});c_borogove.borogove_release(__ret);return __r;}();}()
 	}
 
-	/**
-	 A preview of the chat, such as the most recent message body
-	 */
-	public func preview() -> String {
-		return useString(c_borogove.borogove_chat_preview(
+	public func datetime() -> Array<String> {
+		return {var __ret: UnsafeMutablePointer<UnsafePointer<CChar>?>? = nil;let __ret_length = c_borogove.borogove_profile_item_datetime(
 			self.o
-		))!
+		, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafePointer<CChar>?>(start: __ret, count: __ret_length).map({useString($0)!});c_borogove.borogove_release(__ret);return __r;}();}()
+	}
+
+	public func languageTag() -> Array<String> {
+		return {var __ret: UnsafeMutablePointer<UnsafePointer<CChar>?>? = nil;let __ret_length = c_borogove.borogove_profile_item_language_tag(
+			self.o
+		, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafePointer<CChar>?>(start: __ret, count: __ret_length).map({useString($0)!});c_borogove.borogove_release(__ret);return __r;}();}()
+	}
+
+	deinit {
+		c_borogove.borogove_release(o)
+	}
+}
+
+public class Profile: SDKObject, @unchecked Sendable {
+	public let o: UnsafeMutableRawPointer
+
+	internal init(_ ptr: UnsafeMutableRawPointer) {
+		o = ptr
 	}
 
 	/**
-	 Set the display name to use for this chat
-	 
-	 @param displayName String to use as display name
+	 All items in the profile
 	 */
-	public func setDisplayName(displayName: String) -> Void {
-		return c_borogove.borogove_chat_set_display_name(
+	public var items: Array<ProfileItem> {
+		get {
+			{var __ret: UnsafeMutablePointer<UnsafeMutableRawPointer?>? = nil;let __ret_length = c_borogove.borogove_profile_items(o, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: __ret, count: __ret_length).map({ProfileItem($0!)});c_borogove.borogove_release(__ret);return __r;}();}()
+		}
+	}
+
+	deinit {
+		c_borogove.borogove_release(o)
+	}
+}
+
+public class Participant: SDKObject, @unchecked Sendable {
+	public let o: UnsafeMutableRawPointer
+
+	internal init(_ ptr: UnsafeMutableRawPointer) {
+		o = ptr
+	}
+
+	public var displayName: String {
+		get {
+			useString(c_borogove.borogove_participant_display_name(o))!
+		}
+	}
+
+	public var photoUri: String? {
+		get {
+			useString(c_borogove.borogove_participant_photo_uri(o))
+		}
+	}
+
+	public var placeholderUri: String {
+		get {
+			useString(c_borogove.borogove_participant_placeholder_uri(o))!
+		}
+	}
+
+	public var isSelf: Bool {
+		get {
+			c_borogove.borogove_participant_is_self(o)
+		}
+	}
+
+	public func profile(client: Client) async -> Profile {
+		return await withUnsafeContinuation { cont in
+		let __cont_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(cont as AnyObject).toOpaque())
+		return c_borogove.borogove_participant_profile(
 			self.o,
-			displayName
+			client.o,
+			{ (a, ctx) in
+				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<Profile, Never>
+				cont.resume(returning: Profile(a!))
+			},
+			__cont_ptr
 		)
+		}
 	}
 
-	/**
-	 The display name of this Chat
-	 */
-	public func getDisplayName() -> String {
-		return useString(c_borogove.borogove_chat_get_display_name(
-			self.o
-		))!
+	deinit {
+		c_borogove.borogove_release(o)
+	}
+}
+
+public class Dummy: SDKObject, Persistence, @unchecked Sendable {
+	public let o: UnsafeMutableRawPointer
+
+	internal init(_ ptr: UnsafeMutableRawPointer) {
+		o = ptr
 	}
 
 	/**
-	 Set if this chat is to be trusted with our presence, etc
+	 Create a basic persistence layer that persists nothing
 	 
-	 @param trusted Bool if trusted or not
+	 @returns new persistence layer
 	 */
-	public func setTrusted(trusted: Bool) -> Void {
-		return c_borogove.borogove_chat_set_trusted(
-			self.o,
-			trusted
-		)
+	public init() {
+		o = (c_borogove.borogove_persistence_dummy_new())
 	}
 
-	/**
-	 Is this a chat with an entity we trust to see our online status?
-	 */
-	public func isTrusted() -> Bool {
-		return c_borogove.borogove_chat_is_trusted(
-			self.o
-		)
+	deinit {
+		c_borogove.borogove_release(o)
 	}
+}
 
-	/**
-	 @returns if this chat is currently syncing with the server
-	 */
-	public func syncing() -> Bool {
-		return c_borogove.borogove_chat_syncing(
-			self.o
-		)
+public class Push: SDKObject, @unchecked Sendable {
+	public let o: UnsafeMutableRawPointer
+
+	internal init(_ ptr: UnsafeMutableRawPointer) {
+		o = ptr
 	}
 
 	/**
-	 Can audio calls be started in this Chat?
+	 Receive a new push notification from some external system
+	 
+	 @param data the raw data from the push
+	 @param persistence the persistence layer to write into
+	 @returns a Notification representing the push data
 	 */
-	public func canAudioCall() -> Bool {
-		return c_borogove.borogove_chat_can_audio_call(
-			self.o
-		)
+	public static func receive(data: String, persistence: Persistence) -> Notification? {
+		(c_borogove.borogove_push_receive(
+			data,
+			persistence.o
+		)).map({ Notification($0) })
+	}
+
+	deinit {
+		c_borogove.borogove_release(o)
+	}
+}
+
+public class Notification: SDKObject, @unchecked Sendable {
+	public let o: UnsafeMutableRawPointer
+
+	internal init(_ ptr: UnsafeMutableRawPointer) {
+		o = ptr
 	}
 
 	/**
-	 Can video calls be started in this Chat?
+	 The title
 	 */
-	public func canVideoCall() -> Bool {
-		return c_borogove.borogove_chat_can_video_call(
-			self.o
-		)
+	public var title: String {
+		get {
+			useString(c_borogove.borogove_notification_title(o))!
+		}
 	}
 
 	/**
-	 Start a new call in this Chat
-	 
-	 @param audio do we want audio in this call
-	 @param video do we want video in this call
+	 The body text
 	 */
-	public func startCall(audio: Bool, video: Bool) -> Session {
-		return AnySession(c_borogove.borogove_chat_start_call(
-			self.o,
-			audio,
-			video
-		)!)
+	public var body: String {
+		get {
+			useString(c_borogove.borogove_notification_body(o))!
+		}
 	}
 
 	/**
-	 Accept any incoming calls in this Chat
+	 The ID of the associated account
 	 */
-	public func acceptCall() -> Void {
-		return c_borogove.borogove_chat_accept_call(
-			self.o
-		)
+	public var accountId: String {
+		get {
+			useString(c_borogove.borogove_notification_account_id(o))!
+		}
 	}
 
 	/**
-	 Hangup or reject any calls in this chat
+	 The ID of the associated chat
 	 */
-	public func hangup() -> Void {
-		return c_borogove.borogove_chat_hangup(
-			self.o
-		)
+	public var chatId: String {
+		get {
+			useString(c_borogove.borogove_notification_chat_id(o))!
+		}
 	}
 
 	/**
-	 The current status of a call in this chat
+	 The ID of the message sender
 	 */
-	public func callStatus() -> CallStatus {
-		return c_borogove.borogove_chat_call_status(
-			self.o
-		)
+	public var senderId: String {
+		get {
+			useString(c_borogove.borogove_notification_sender_id(o))!
+		}
 	}
 
 	/**
-	 A DTMFSender for a call in this chat, or NULL
+	 The serverId of the message
 	 */
-	public func dtmf() -> DTMFSender? {
-		return (c_borogove.borogove_chat_dtmf(
-			self.o
-		)).map({ DTMFSender($0) })
+	public var messageId: String {
+		get {
+			useString(c_borogove.borogove_notification_message_id(o))!
+		}
 	}
 
 	/**
-	 All video tracks in all active calls in this chat
+	 The type of the message
 	 */
-	public func videoTracks() -> Array<MediaStreamTrack> {
-		return {var __ret: UnsafeMutablePointer<UnsafeMutableRawPointer?>? = nil;let __ret_length = c_borogove.borogove_chat_video_tracks(
-			self.o
-		, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: __ret, count: __ret_length).map({MediaStreamTrack($0!)});c_borogove.borogove_release(__ret);return __r;}();}()
+	public var type: MessageType {
+		get {
+			c_borogove.borogove_notification_type(o)
+		}
 	}
 
 	/**
-	 Get encryption mode for this chat
+	 If this is a call notification, the call status
 	 */
-	public func encryptionMode() -> String {
-		return useString(c_borogove.borogove_chat_encryption_mode(
-			self.o
-		))!
+	public var callStatus: String? {
+		get {
+			useString(c_borogove.borogove_notification_call_status(o))
+		}
 	}
 
 	/**
-	 Can the user send messages to this chat?
+	 If this is a call notification, the call session ID
 	 */
-	public func canSend() -> Bool {
-		return c_borogove.borogove_chat_can_send(
-			self.o
-		)
+	public var callSid: String? {
+		get {
+			useString(c_borogove.borogove_notification_call_sid(o))
+		}
 	}
 
 	/**
-	 Invite another chat's participants to participate in this one
+	 Optional image URI
 	 */
-	public func invite(other: Chat, threadId: String? = nil) -> Void {
-		return c_borogove.borogove_chat_invite(
-			self.o,
-			other.o,
-			threadId
-		)
+	public var imageUri: String? {
+		get {
+			useString(c_borogove.borogove_notification_image_uri(o))
+		}
 	}
 
 	/**
-	 Can the user invite others to this chat?
+	 Optional language code
 	 */
-	public func canInvite() -> Bool {
-		return c_borogove.borogove_chat_can_invite(
-			self.o
-		)
+	public var lang: String? {
+		get {
+			useString(c_borogove.borogove_notification_lang(o))
+		}
 	}
 
 	/**
-	 This chat's primary mode of interaction is via commands
+	 Optional date and time of the event
 	 */
-	public func isApp() -> Bool {
-		return c_borogove.borogove_chat_is_app(
-			self.o
-		)
+	public var timestamp: String? {
+		get {
+			useString(c_borogove.borogove_notification_timestamp(o))
+		}
 	}
 
-	/**
-	 Does this chat provide a menu of commands?
-	 */
-	public func hasCommands() -> Bool {
-		return c_borogove.borogove_chat_has_commands(
-			self.o
-		)
+	deinit {
+		c_borogove.borogove_release(o)
 	}
+}
 
-	public func commands() async -> Array<Command> {
-		return await withUnsafeContinuation { cont in
-		let __cont_ptr = UnsafeMutableRawPointer(Unmanaged.passRetained(cont as AnyObject).toOpaque())
-		return c_borogove.borogove_chat_commands(
-			self.o,
-			{ (a, a_length, ctx) in
-				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<Array<Command>, Never>
-				cont.resume(returning: {let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: a, count: a_length).map({Command($0!)});c_borogove.borogove_release(a);return __r;}())
-			},
-			__cont_ptr
-		)
-		}
+public class EventEmitter: SDKObject, @unchecked Sendable {
+	public let o: UnsafeMutableRawPointer
+
+	internal init(_ ptr: UnsafeMutableRawPointer) {
+		o = ptr
 	}
 
 	/**
-	 The Participant that originally invited us to this Chat, if we were invited
+	 Remove an event listener of any type, no matter how it was added
+	 or what event it is for.
+	 
+	 @param token the token that was returned when the listener was added
 	 */
-	public func invitedBy() -> Participant? {
-		return (c_borogove.borogove_chat_invited_by(
-			self.o
-		)).map({ Participant($0) })
+	public func removeEventListener(token: Int32) -> Void {
+		return c_borogove.borogove_event_emitter_remove_event_listener(
+			self.o,
+			token
+		)
 	}
 
 	deinit {
@@ -2427,22 +2800,6 @@ public class AvailableChat: SDKObject, @unchecked Sendable {
 	}
 }
 
-public protocol Session: SDKObject {
-}
-
-public class AnySession: Session {
-	public let o: UnsafeMutableRawPointer
-
-	internal init(_ ptr: UnsafeMutableRawPointer) {
-		o = ptr
-	}
-
-	deinit {
-		c_borogove.borogove_release(o)
-	}
-
-}
-
 public class MediaStream: SDKObject, @unchecked Sendable {
 	public let o: UnsafeMutableRawPointer
 
@@ -2480,68 +2837,109 @@ public class MediaStream: SDKObject, @unchecked Sendable {
 	}
 }
 
-public class InitiatedSession: SDKObject, Session, @unchecked Sendable {
-	public let o: UnsafeMutableRawPointer
+public protocol Session: SDKObject {
+	var sid: String {
+		get
+	}
 
-	internal init(_ ptr: UnsafeMutableRawPointer) {
-		o = ptr
+	var chatId: String {
+		get
 	}
 
-	public var sid: String {
+	func accept() -> Void
+
+	func hangup() -> Void
+
+	func addMedia(streams: Array<MediaStream>) -> Void
+
+	func callStatus() -> CallStatus
+
+	func audioTracks() -> Array<MediaStreamTrack>
+
+	func videoTracks() -> Array<MediaStreamTrack>
+
+	func dtmf() -> DTMFSender?
+
+}
+
+public extension Session {
+	var sid: String {
 		get {
-			useString(c_borogove.borogove_calls_initiated_session_sid(o))!
+			useString(c_borogove.borogove_calls_session_sid(o))!
 		}
 	}
 
-	public var chatId: String {
+	var chatId: String {
 		get {
-			useString(c_borogove.borogove_calls_initiated_session_chat_id(o))!
+			useString(c_borogove.borogove_calls_session_chat_id(o))!
 		}
 	}
 
-	public func accept() -> Void {
-		return c_borogove.borogove_calls_initiated_session_accept(
+	func accept() -> Void {
+		return c_borogove.borogove_calls_session_accept(
 			self.o
 		)
 	}
 
-	public func hangup() -> Void {
-		return c_borogove.borogove_calls_initiated_session_hangup(
+	func hangup() -> Void {
+		return c_borogove.borogove_calls_session_hangup(
 			self.o
 		)
 	}
 
-	public func addMedia(streams: Array<MediaStream>) -> Void {
-		return c_borogove.borogove_calls_initiated_session_add_media(
+	func addMedia(streams: Array<MediaStream>) -> Void {
+		return c_borogove.borogove_calls_session_add_media(
 			self.o,
 			streams.map { $0.o }, streams.count
 		)
 	}
 
-	public func callStatus() -> CallStatus {
-		return c_borogove.borogove_calls_initiated_session_call_status(
+	func callStatus() -> CallStatus {
+		return c_borogove.borogove_calls_session_call_status(
 			self.o
 		)
 	}
 
-	public func audioTracks() -> Array<MediaStreamTrack> {
-		return {var __ret: UnsafeMutablePointer<UnsafeMutableRawPointer?>? = nil;let __ret_length = c_borogove.borogove_calls_initiated_session_audio_tracks(
+	func audioTracks() -> Array<MediaStreamTrack> {
+		return {var __ret: UnsafeMutablePointer<UnsafeMutableRawPointer?>? = nil;let __ret_length = c_borogove.borogove_calls_session_audio_tracks(
 			self.o
 		, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: __ret, count: __ret_length).map({MediaStreamTrack($0!)});c_borogove.borogove_release(__ret);return __r;}();}()
 	}
 
-	public func videoTracks() -> Array<MediaStreamTrack> {
-		return {var __ret: UnsafeMutablePointer<UnsafeMutableRawPointer?>? = nil;let __ret_length = c_borogove.borogove_calls_initiated_session_video_tracks(
+	func videoTracks() -> Array<MediaStreamTrack> {
+		return {var __ret: UnsafeMutablePointer<UnsafeMutableRawPointer?>? = nil;let __ret_length = c_borogove.borogove_calls_session_video_tracks(
 			self.o
 		, &__ret);return {let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: __ret, count: __ret_length).map({MediaStreamTrack($0!)});c_borogove.borogove_release(__ret);return __r;}();}()
 	}
 
-	public func dtmf() -> DTMFSender? {
-		return (c_borogove.borogove_calls_initiated_session_dtmf(
+	func dtmf() -> DTMFSender? {
+		return (c_borogove.borogove_calls_session_dtmf(
 			self.o
 		)).map({ DTMFSender($0) })
 	}
 
+}
+
+public class AnySession: Session {
+	public let o: UnsafeMutableRawPointer
+
+	internal init(_ ptr: UnsafeMutableRawPointer) {
+		o = ptr
+	}
+
+	deinit {
+		c_borogove.borogove_release(o)
+	}
+
+}
+
+public class InitiatedSession: SDKObject, Session, @unchecked Sendable {
+	public let o: UnsafeMutableRawPointer
+
+	internal init(_ ptr: UnsafeMutableRawPointer) {
+		o = ptr
+	}
+
 	public func supplyMedia(streams: Array<MediaStream>) -> Void {
 		return c_borogove.borogove_calls_initiated_session_supply_media(
 			self.o,
@@ -2671,7 +3069,7 @@ public class Client: EventEmitter, @unchecked Sendable {
 			source.o,
 			{ (a, ctx) in
 				let cont = Unmanaged<AnyObject>.fromOpaque(ctx!).takeRetainedValue() as! UnsafeContinuation<ChatAttachment?, Never>
-				cont.resume(returning: (a).map({ let x = ChatAttachment($0); print(x.name); return x }))
+				cont.resume(returning: (a).map({ ChatAttachment($0) }))
 			},
 			__cont_ptr
 		)
@@ -3032,30 +3430,6 @@ public class Client: EventEmitter, @unchecked Sendable {
 
 }
 
-public class FormSubmitBuilder: SDKObject, @unchecked Sendable {
-	public let o: UnsafeMutableRawPointer
-
-	internal init(_ ptr: UnsafeMutableRawPointer) {
-		o = ptr
-	}
-
-	public init() {
-		o = (c_borogove.borogove_form_submit_builder_new())
-	}
-
-	public func add(k: String, v: String) -> Void {
-		return c_borogove.borogove_form_submit_builder_add(
-			self.o,
-			k,
-			v
-		)
-	}
-
-	deinit {
-		c_borogove.borogove_release(o)
-	}
-}
-
 public class AttachmentSource: SDKObject, @unchecked Sendable {
 	public let o: UnsafeMutableRawPointer
 
diff --git a/Sources/c_borogove/iinclude/Sys.h b/Sources/c_borogove/iinclude/Sys.h
index 4834a8a..6a01b1c 100644
--- a/Sources/c_borogove/iinclude/Sys.h
+++ b/Sources/c_borogove/iinclude/Sys.h
@@ -49,9 +49,6 @@ class HXCPP_CLASS_ATTRIBUTES Sys_obj : public ::hx::Object
 		bool _hx_isInstanceOf(int inClassId);
 		::String __ToString() const { return HX_("Sys",ed,64,3f,00); }
 
-		static ::String getEnv(::String s);
-		static ::Dynamic getEnv_dyn();
-
 		static ::String getCwd();
 		static ::Dynamic getCwd_dyn();
 
diff --git a/Sources/c_borogove/iinclude/borogove/Client.h b/Sources/c_borogove/iinclude/borogove/Client.h
index e10a512..b5bda11 100644
--- a/Sources/c_borogove/iinclude/borogove/Client.h
+++ b/Sources/c_borogove/iinclude/borogove/Client.h
@@ -34,6 +34,7 @@ HX_DECLARE_CLASS2(borogove,calls,MediaStreamTrack)
 HX_DECLARE_CLASS2(borogove,calls,Session)
 HX_DECLARE_CLASS2(borogove,queries,GenericQuery)
 HX_DECLARE_CLASS1(haxe,IMap)
+HX_DECLARE_CLASS1(haxe,Timer)
 HX_DECLARE_CLASS2(haxe,ds,StringMap)
 HX_DECLARE_CLASS1(thenshim,Thenable)
 
@@ -88,6 +89,7 @@ class HXCPP_CLASS_ATTRIBUTES Client_obj : public  ::borogove::EventEmitter_obj
 		::String token;
 		 ::Dynamic fastCount;
 		 ::haxe::ds::StringMap pendingCaps;
+		 ::haxe::ds::StringMap brokenAvatars;
 		 ::borogove::EncryptionPolicy encryptionPolicy;
 		bool inSync;
 		void processLiveMessage( ::borogove::Stanza stanza, ::borogove::Stanza fwd, ::borogove::EncryptionInfo encryptionInfo);
@@ -256,6 +258,14 @@ class HXCPP_CLASS_ATTRIBUTES Client_obj : public  ::borogove::EventEmitter_obj
 		void sendQuery( ::borogove::queries::GenericQuery query);
 		::Dynamic sendQuery_dyn();
 
+		 ::haxe::Timer lazyQueryTimer;
+		::Array< ::Dynamic> queriesToSend;
+		void sendNextLazyQuery();
+		::Dynamic sendNextLazyQuery_dyn();
+
+		void sendQueryLazy( ::borogove::queries::GenericQuery query);
+		::Dynamic sendQueryLazy_dyn();
+
 		void publishWithOptions( ::borogove::Stanza stanza, ::borogove::Stanza options);
 		::Dynamic publishWithOptions_dyn();
 
diff --git a/Sources/c_borogove/iinclude/borogove/FormSection.h b/Sources/c_borogove/iinclude/borogove/FormSection.h
index 5b9bf0c..f02416b 100644
--- a/Sources/c_borogove/iinclude/borogove/FormSection.h
+++ b/Sources/c_borogove/iinclude/borogove/FormSection.h
@@ -17,6 +17,7 @@ class HXCPP_CLASS_ATTRIBUTES FormSection_obj {
 		typedef ::hx::Object super;
 		HX_DO_INTERFACE_RTTI;
 
+		static void __boot();
 		::String (::hx::Object :: *_hx_title)(); 
 		static inline ::String title( ::Dynamic _hx_) {
 			return (_hx_.mPtr->*( ::hx::interface_cast< ::borogove::FormSection_obj *>(_hx_.mPtr->_hx_getInterface(0xeffc2a60)))->_hx_title)();
diff --git a/Sources/c_borogove/iinclude/borogove/FormSection__Companion.h b/Sources/c_borogove/iinclude/borogove/FormSection__Companion.h
new file mode 100644
index 0000000..add6389
--- /dev/null
+++ b/Sources/c_borogove/iinclude/borogove/FormSection__Companion.h
@@ -0,0 +1,65 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_borogove_FormSection__Companion
+#define INCLUDED_borogove_FormSection__Companion
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS1(borogove,FormSection)
+HX_DECLARE_CLASS1(borogove,FormSection__Companion)
+
+namespace borogove{
+
+
+class HXCPP_CLASS_ATTRIBUTES FormSection__Companion_obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef FormSection__Companion_obj OBJ_;
+		FormSection__Companion_obj();
+
+	public:
+		enum { _hx_ClassId = 0x5fc668ac };
+
+		void __construct();
+		inline void *operator new(size_t inSize, bool inContainer=false,const char *inName="borogove.FormSection__Companion")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,false,"borogove.FormSection__Companion"); }
+
+		inline static ::hx::ObjectPtr< FormSection__Companion_obj > __new() {
+			::hx::ObjectPtr< FormSection__Companion_obj > __this = new FormSection__Companion_obj();
+			__this->__construct();
+			return __this;
+		}
+
+		inline static ::hx::ObjectPtr< FormSection__Companion_obj > __alloc(::hx::Ctx *_hx_ctx) {
+			FormSection__Companion_obj *__this = (FormSection__Companion_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(FormSection__Companion_obj), false, "borogove.FormSection__Companion"));
+			*(void **)__this = FormSection__Companion_obj::_hx_vtable;
+			return __this;
+		}
+
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~FormSection__Companion_obj();
+
+		HX_DO_RTTI_ALL;
+		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
+		static void __register();
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("FormSection__Companion",0b,09,e2,47); }
+
+		static void __boot();
+		static  ::Dynamic __meta__;
+		static ::String title__fromC(::Dynamic self);
+		static ::Dynamic title__fromC_dyn();
+
+		static size_t items__fromC(::Dynamic self,void*** outPtr);
+
+};
+
+} // end namespace borogove
+
+#endif /* INCLUDED_borogove_FormSection__Companion */ 
diff --git a/Sources/c_borogove/iinclude/borogove/Persistence__Companion.h b/Sources/c_borogove/iinclude/borogove/Persistence__Companion.h
new file mode 100644
index 0000000..cd3cd01
--- /dev/null
+++ b/Sources/c_borogove/iinclude/borogove/Persistence__Companion.h
@@ -0,0 +1,96 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_borogove_Persistence__Companion
+#define INCLUDED_borogove_Persistence__Companion
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS1(borogove,ChatMessage)
+HX_DECLARE_CLASS1(borogove,Persistence)
+HX_DECLARE_CLASS1(borogove,Persistence__Companion)
+
+namespace borogove{
+
+
+class HXCPP_CLASS_ATTRIBUTES Persistence__Companion_obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef Persistence__Companion_obj OBJ_;
+		Persistence__Companion_obj();
+
+	public:
+		enum { _hx_ClassId = 0x0f6bf1d6 };
+
+		void __construct();
+		inline void *operator new(size_t inSize, bool inContainer=false,const char *inName="borogove.Persistence__Companion")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,false,"borogove.Persistence__Companion"); }
+
+		inline static ::hx::ObjectPtr< Persistence__Companion_obj > __new() {
+			::hx::ObjectPtr< Persistence__Companion_obj > __this = new Persistence__Companion_obj();
+			__this->__construct();
+			return __this;
+		}
+
+		inline static ::hx::ObjectPtr< Persistence__Companion_obj > __alloc(::hx::Ctx *_hx_ctx) {
+			Persistence__Companion_obj *__this = (Persistence__Companion_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(Persistence__Companion_obj), false, "borogove.Persistence__Companion"));
+			*(void **)__this = Persistence__Companion_obj::_hx_vtable;
+			return __this;
+		}
+
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~Persistence__Companion_obj();
+
+		HX_DO_RTTI_ALL;
+		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
+		static void __register();
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("Persistence__Companion",6d,af,8f,96); }
+
+		static void __boot();
+		static  ::Dynamic __meta__;
+		static void lastId__fromC(::Dynamic self,::String accountId,::String chatId,::cpp::Function< void  (const char*,void*) > handler,void* handler__context);
+
+		static void storeChats__fromC(::Dynamic self,::String accountId,::cpp::Pointer< void* > chats,size_t chats__len);
+		static ::Dynamic storeChats__fromC_dyn();
+
+		static void storeMessages__fromC(::Dynamic self,::String accountId,::cpp::Pointer< void* > message,size_t message__len,::cpp::Function< void  (void**,size_t,void*) > handler,void* handler__context);
+
+		static void updateMessage__fromC(::Dynamic self,::String accountId, ::borogove::ChatMessage message);
+		static ::Dynamic updateMessage__fromC_dyn();
+
+		static void updateMessageStatus__fromC(::Dynamic self,::String accountId,::String localId,int status,::String statusText,::cpp::Function< void  (void*,void*) > handler,void* handler__context);
+
+		static void getMessage__fromC(::Dynamic self,::String accountId,::String chatId,::String serverId,::String localId,::cpp::Function< void  (void*,void*) > handler,void* handler__context);
+
+		static void getMessagesBefore__fromC(::Dynamic self,::String accountId,::String chatId,::String beforeId,::String beforeTime,::cpp::Function< void  (void**,size_t,void*) > handler,void* handler__context);
+
+		static void getMessagesAfter__fromC(::Dynamic self,::String accountId,::String chatId,::String afterId,::String afterTime,::cpp::Function< void  (void**,size_t,void*) > handler,void* handler__context);
+
+		static void getMessagesAround__fromC(::Dynamic self,::String accountId,::String chatId,::String aroundId,::String aroundTime,::cpp::Function< void  (void**,size_t,void*) > handler,void* handler__context);
+
+		static void hasMedia__fromC(::Dynamic self,::String hashAlgorithm,::cpp::Pointer< unsigned char > hash,size_t hash__len,::cpp::Function< void  (bool,void*) > handler,void* handler__context);
+
+		static void storeMedia__fromC(::Dynamic self,::String mime,::cpp::Pointer< unsigned char > bytes,size_t bytes__len,::cpp::Function< void  (bool,void*) > handler,void* handler__context);
+
+		static void removeMedia__fromC(::Dynamic self,::String hashAlgorithm,::cpp::Pointer< unsigned char > hash,size_t hash__len);
+		static ::Dynamic removeMedia__fromC_dyn();
+
+		static void storeLogin__fromC(::Dynamic self,::String login,::String clientId,::String displayName,::String token);
+		static ::Dynamic storeLogin__fromC_dyn();
+
+		static void removeAccount__fromC(::Dynamic self,::String accountId,bool completely);
+		static ::Dynamic removeAccount__fromC_dyn();
+
+		static void listAccounts__fromC(::Dynamic self,::cpp::Function< void  (const char**,size_t,void*) > handler,void* handler__context);
+
+};
+
+} // end namespace borogove
+
+#endif /* INCLUDED_borogove_Persistence__Companion */ 
diff --git a/Sources/c_borogove/iinclude/borogove/calls/InitiatedSession.h b/Sources/c_borogove/iinclude/borogove/calls/InitiatedSession.h
index 6400960..0b68814 100644
--- a/Sources/c_borogove/iinclude/borogove/calls/InitiatedSession.h
+++ b/Sources/c_borogove/iinclude/borogove/calls/InitiatedSession.h
@@ -68,13 +68,7 @@ class HXCPP_CLASS_ATTRIBUTES InitiatedSession_obj : public ::hx::Object
 		static ::Dynamic fromSessionInitiate_dyn();
 
 		::String sid;
-		::String sid__fromC();
-		::Dynamic sid__fromC_dyn();
-
 		::String chatId;
-		::String chatId__fromC();
-		::Dynamic chatId__fromC_dyn();
-
 		 ::borogove::Client client;
 		 ::borogove::JID counterpart;
 		::String _sid;
@@ -126,22 +120,15 @@ class HXCPP_CLASS_ATTRIBUTES InitiatedSession_obj : public ::hx::Object
 		void addMedia(::Array< ::Dynamic> streams);
 		::Dynamic addMedia_dyn();
 
-		void addMedia__fromC(::cpp::Pointer< void* > streams,size_t streams__len);
-		::Dynamic addMedia__fromC_dyn();
-
 		virtual int callStatus();
 		::Dynamic callStatus_dyn();
 
 		::Array< ::Dynamic> audioTracks();
 		::Dynamic audioTracks_dyn();
 
-		size_t audioTracks__fromC(void*** outPtr);
-
 		::Array< ::Dynamic> videoTracks();
 		::Dynamic videoTracks_dyn();
 
-		size_t videoTracks__fromC(void*** outPtr);
-
 		 ::borogove::calls::DTMFSender dtmf();
 		::Dynamic dtmf_dyn();
 
diff --git a/Sources/c_borogove/iinclude/borogove/calls/PeerConnection.h b/Sources/c_borogove/iinclude/borogove/calls/PeerConnection.h
index 7700410..3d08e47 100644
--- a/Sources/c_borogove/iinclude/borogove/calls/PeerConnection.h
+++ b/Sources/c_borogove/iinclude/borogove/calls/PeerConnection.h
@@ -61,6 +61,7 @@ class HXCPP_CLASS_ATTRIBUTES PeerConnection_obj : public ::hx::Object
 		 ::Dynamic waitingOnLocal;
 		Dynamic waitingOnLocal_dyn() { return waitingOnLocal;}
 		 ::haxe::ds::StringMap tracks;
+		 ::haxe::ds::StringMap remoteMedia;
 		::Array< ::Dynamic> trackListeners;
 		::Array< ::Dynamic> localCandidateListeners;
 		::Array< ::Dynamic> stateChangeListeners;
diff --git a/Sources/c_borogove/iinclude/borogove/calls/Session.h b/Sources/c_borogove/iinclude/borogove/calls/Session.h
index d621194..0c1ba2c 100644
--- a/Sources/c_borogove/iinclude/borogove/calls/Session.h
+++ b/Sources/c_borogove/iinclude/borogove/calls/Session.h
@@ -23,6 +23,7 @@ class HXCPP_CLASS_ATTRIBUTES Session_obj {
 		typedef ::hx::Object super;
 		HX_DO_INTERFACE_RTTI;
 
+		static void __boot();
 		::String (::hx::Object :: *_hx_get_sid)(); 
 		static inline ::String get_sid( ::Dynamic _hx_) {
 			return (_hx_.mPtr->*( ::hx::interface_cast< ::borogove::calls::Session_obj *>(_hx_.mPtr->_hx_getInterface(0x36e3eba2)))->_hx_get_sid)();
diff --git a/Sources/c_borogove/iinclude/borogove/calls/Session__Companion.h b/Sources/c_borogove/iinclude/borogove/calls/Session__Companion.h
new file mode 100644
index 0000000..d45f0d7
--- /dev/null
+++ b/Sources/c_borogove/iinclude/borogove/calls/Session__Companion.h
@@ -0,0 +1,88 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_borogove_calls_Session__Companion
+#define INCLUDED_borogove_calls_Session__Companion
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS2(borogove,calls,DTMFSender)
+HX_DECLARE_CLASS2(borogove,calls,Session)
+HX_DECLARE_CLASS2(borogove,calls,Session__Companion)
+
+namespace borogove{
+namespace calls{
+
+
+class HXCPP_CLASS_ATTRIBUTES Session__Companion_obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef Session__Companion_obj OBJ_;
+		Session__Companion_obj();
+
+	public:
+		enum { _hx_ClassId = 0x40166246 };
+
+		void __construct();
+		inline void *operator new(size_t inSize, bool inContainer=false,const char *inName="borogove.calls.Session__Companion")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,false,"borogove.calls.Session__Companion"); }
+
+		inline static ::hx::ObjectPtr< Session__Companion_obj > __new() {
+			::hx::ObjectPtr< Session__Companion_obj > __this = new Session__Companion_obj();
+			__this->__construct();
+			return __this;
+		}
+
+		inline static ::hx::ObjectPtr< Session__Companion_obj > __alloc(::hx::Ctx *_hx_ctx) {
+			Session__Companion_obj *__this = (Session__Companion_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(Session__Companion_obj), false, "borogove.calls.Session__Companion"));
+			*(void **)__this = Session__Companion_obj::_hx_vtable;
+			return __this;
+		}
+
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~Session__Companion_obj();
+
+		HX_DO_RTTI_ALL;
+		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
+		static void __register();
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("Session__Companion",d6,44,cc,2f); }
+
+		static void __boot();
+		static  ::Dynamic __meta__;
+		static ::String sid__fromC(::Dynamic _hx___self);
+		static ::Dynamic sid__fromC_dyn();
+
+		static ::String chatId__fromC(::Dynamic _hx___self);
+		static ::Dynamic chatId__fromC_dyn();
+
+		static void accept__fromC(::Dynamic self);
+		static ::Dynamic accept__fromC_dyn();
+
+		static void hangup__fromC(::Dynamic self);
+		static ::Dynamic hangup__fromC_dyn();
+
+		static void addMedia__fromC(::Dynamic self,::cpp::Pointer< void* > streams,size_t streams__len);
+		static ::Dynamic addMedia__fromC_dyn();
+
+		static int callStatus__fromC(::Dynamic self);
+		static ::Dynamic callStatus__fromC_dyn();
+
+		static size_t audioTracks__fromC(::Dynamic self,void*** outPtr);
+
+		static size_t videoTracks__fromC(::Dynamic self,void*** outPtr);
+
+		static  ::borogove::calls::DTMFSender dtmf__fromC(::Dynamic self);
+		static ::Dynamic dtmf__fromC_dyn();
+
+};
+
+} // end namespace borogove
+} // end namespace calls
+
+#endif /* INCLUDED_borogove_calls_Session__Companion */ 
diff --git a/Sources/c_borogove/iinclude/borogove/persistence/KeyValueStore.h b/Sources/c_borogove/iinclude/borogove/persistence/KeyValueStore.h
index 4063733..c726f31 100644
--- a/Sources/c_borogove/iinclude/borogove/persistence/KeyValueStore.h
+++ b/Sources/c_borogove/iinclude/borogove/persistence/KeyValueStore.h
@@ -18,6 +18,7 @@ class HXCPP_CLASS_ATTRIBUTES KeyValueStore_obj {
 		typedef ::hx::Object super;
 		HX_DO_INTERFACE_RTTI;
 
+		static void __boot();
 		::Dynamic (::hx::Object :: *_hx_get)(::String k); 
 		static inline ::Dynamic get( ::Dynamic _hx_,::String k) {
 			return (_hx_.mPtr->*( ::hx::interface_cast< ::borogove::persistence::KeyValueStore_obj *>(_hx_.mPtr->_hx_getInterface(0x9052f731)))->_hx_get)(k);
diff --git a/Sources/c_borogove/iinclude/borogove/persistence/KeyValueStore__Companion.h b/Sources/c_borogove/iinclude/borogove/persistence/KeyValueStore__Companion.h
new file mode 100644
index 0000000..55bba4b
--- /dev/null
+++ b/Sources/c_borogove/iinclude/borogove/persistence/KeyValueStore__Companion.h
@@ -0,0 +1,65 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_borogove_persistence_KeyValueStore__Companion
+#define INCLUDED_borogove_persistence_KeyValueStore__Companion
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS2(borogove,persistence,KeyValueStore)
+HX_DECLARE_CLASS2(borogove,persistence,KeyValueStore__Companion)
+
+namespace borogove{
+namespace persistence{
+
+
+class HXCPP_CLASS_ATTRIBUTES KeyValueStore__Companion_obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef KeyValueStore__Companion_obj OBJ_;
+		KeyValueStore__Companion_obj();
+
+	public:
+		enum { _hx_ClassId = 0x5dd44dfb };
+
+		void __construct();
+		inline void *operator new(size_t inSize, bool inContainer=false,const char *inName="borogove.persistence.KeyValueStore__Companion")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,false,"borogove.persistence.KeyValueStore__Companion"); }
+
+		inline static ::hx::ObjectPtr< KeyValueStore__Companion_obj > __new() {
+			::hx::ObjectPtr< KeyValueStore__Companion_obj > __this = new KeyValueStore__Companion_obj();
+			__this->__construct();
+			return __this;
+		}
+
+		inline static ::hx::ObjectPtr< KeyValueStore__Companion_obj > __alloc(::hx::Ctx *_hx_ctx) {
+			KeyValueStore__Companion_obj *__this = (KeyValueStore__Companion_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(KeyValueStore__Companion_obj), false, "borogove.persistence.KeyValueStore__Companion"));
+			*(void **)__this = KeyValueStore__Companion_obj::_hx_vtable;
+			return __this;
+		}
+
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~KeyValueStore__Companion_obj();
+
+		HX_DO_RTTI_ALL;
+		static void __register();
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("KeyValueStore__Companion",9d,6b,ba,51); }
+
+		static void __boot();
+		static  ::Dynamic __meta__;
+		static void get__fromC(::Dynamic self,::String k,::cpp::Function< void  (const char*,void*) > handler,void* handler__context);
+
+		static void set__fromC(::Dynamic self,::String k,::String v,::cpp::Function< void  (bool,void*) > handler,void* handler__context);
+
+};
+
+} // end namespace borogove
+} // end namespace persistence
+
+#endif /* INCLUDED_borogove_persistence_KeyValueStore__Companion */ 
diff --git a/Sources/c_borogove/iinclude/borogove/persistence/MediaStore.h b/Sources/c_borogove/iinclude/borogove/persistence/MediaStore.h
index a19160a..562c2b6 100644
--- a/Sources/c_borogove/iinclude/borogove/persistence/MediaStore.h
+++ b/Sources/c_borogove/iinclude/borogove/persistence/MediaStore.h
@@ -19,6 +19,7 @@ class HXCPP_CLASS_ATTRIBUTES MediaStore_obj {
 		typedef ::hx::Object super;
 		HX_DO_INTERFACE_RTTI;
 
+		static void __boot();
 		::Dynamic (::hx::Object :: *_hx_hasMedia)(::String hashAlgorithm,::Array< unsigned char > hash); 
 		static inline ::Dynamic hasMedia( ::Dynamic _hx_,::String hashAlgorithm,::Array< unsigned char > hash) {
 			return (_hx_.mPtr->*( ::hx::interface_cast< ::borogove::persistence::MediaStore_obj *>(_hx_.mPtr->_hx_getInterface(0xb3aaad1b)))->_hx_hasMedia)(hashAlgorithm,hash);
diff --git a/Sources/c_borogove/iinclude/borogove/persistence/MediaStore__Companion.h b/Sources/c_borogove/iinclude/borogove/persistence/MediaStore__Companion.h
new file mode 100644
index 0000000..e925cae
--- /dev/null
+++ b/Sources/c_borogove/iinclude/borogove/persistence/MediaStore__Companion.h
@@ -0,0 +1,69 @@
+// Generated by Haxe 4.3.3
+#ifndef INCLUDED_borogove_persistence_MediaStore__Companion
+#define INCLUDED_borogove_persistence_MediaStore__Companion
+
+#ifndef HXCPP_H
+#include <hxcpp.h>
+#endif
+
+HX_DECLARE_CLASS2(borogove,persistence,MediaStore)
+HX_DECLARE_CLASS2(borogove,persistence,MediaStore__Companion)
+
+namespace borogove{
+namespace persistence{
+
+
+class HXCPP_CLASS_ATTRIBUTES MediaStore__Companion_obj : public ::hx::Object
+{
+	public:
+		typedef ::hx::Object super;
+		typedef MediaStore__Companion_obj OBJ_;
+		MediaStore__Companion_obj();
+
+	public:
+		enum { _hx_ClassId = 0x7855aec5 };
+
+		void __construct();
+		inline void *operator new(size_t inSize, bool inContainer=false,const char *inName="borogove.persistence.MediaStore__Companion")
+			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
+		inline void *operator new(size_t inSize, int extra)
+			{ return ::hx::Object::operator new(inSize+extra,false,"borogove.persistence.MediaStore__Companion"); }
+
+		inline static ::hx::ObjectPtr< MediaStore__Companion_obj > __new() {
+			::hx::ObjectPtr< MediaStore__Companion_obj > __this = new MediaStore__Companion_obj();
+			__this->__construct();
+			return __this;
+		}
+
+		inline static ::hx::ObjectPtr< MediaStore__Companion_obj > __alloc(::hx::Ctx *_hx_ctx) {
+			MediaStore__Companion_obj *__this = (MediaStore__Companion_obj*)(::hx::Ctx::alloc(_hx_ctx, sizeof(MediaStore__Companion_obj), false, "borogove.persistence.MediaStore__Companion"));
+			*(void **)__this = MediaStore__Companion_obj::_hx_vtable;
+			return __this;
+		}
+
+		static void * _hx_vtable;
+		static Dynamic __CreateEmpty();
+		static Dynamic __Create(::hx::DynamicArray inArgs);
+		//~MediaStore__Companion_obj();
+
+		HX_DO_RTTI_ALL;
+		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
+		static void __register();
+		bool _hx_isInstanceOf(int inClassId);
+		::String __ToString() const { return HX_("MediaStore__Companion",ef,42,7f,c8); }
+
+		static void __boot();
+		static  ::Dynamic __meta__;
+		static void hasMedia__fromC(::Dynamic self,::String hashAlgorithm,::cpp::Pointer< unsigned char > hash,size_t hash__len,::cpp::Function< void  (bool,void*) > handler,void* handler__context);
+
+		static void removeMedia__fromC(::Dynamic self,::String hashAlgorithm,::cpp::Pointer< unsigned char > hash,size_t hash__len);
+		static ::Dynamic removeMedia__fromC_dyn();
+
+		static void storeMedia__fromC(::Dynamic self,::String mime,::cpp::Pointer< unsigned char > bytes,size_t bytes__len,::cpp::Function< void  (bool,void*) > handler,void* handler__context);
+
+};
+
+} // end namespace borogove
+} // end namespace persistence
+
+#endif /* INCLUDED_borogove_persistence_MediaStore__Companion */ 
diff --git a/Sources/c_borogove/iinclude/borogove/persistence/Sqlite.h b/Sources/c_borogove/iinclude/borogove/persistence/Sqlite.h
index 50dcfea..98d0b5e 100644
--- a/Sources/c_borogove/iinclude/borogove/persistence/Sqlite.h
+++ b/Sources/c_borogove/iinclude/borogove/persistence/Sqlite.h
@@ -55,6 +55,7 @@ class HXCPP_CLASS_ATTRIBUTES Sqlite_obj : public ::hx::Object
 
 		HX_DO_RTTI_ALL;
 		::hx::Val __Field(const ::String &inString, ::hx::PropertyAccess inCallProp);
+		static bool __GetStatic(const ::String &inString, Dynamic &outValue, ::hx::PropertyAccess inCallProp);
 		::hx::Val __SetField(const ::String &inString,const ::hx::Val &inValue, ::hx::PropertyAccess inCallProp);
 		void __GetFields(Array< ::String> &outFields);
 		static void __register();
@@ -66,6 +67,9 @@ class HXCPP_CLASS_ATTRIBUTES Sqlite_obj : public ::hx::Object
 
 		static void __boot();
 		static  ::Dynamic __meta__;
+		static ::String prepare( ::Dynamic q);
+		static ::Dynamic prepare_dyn();
+
 		 ::borogove::persistence::SqliteDriver db;
 		::Dynamic media;
 		::Dynamic get(::String k);
@@ -108,6 +112,9 @@ class HXCPP_CLASS_ATTRIBUTES Sqlite_obj : public ::hx::Object
 		::Dynamic getMessagesAround(::String accountId,::String chatId,::String aroundId,::String aroundTime);
 		::Dynamic getMessagesAround_dyn();
 
+		::Dynamic getChatUnreadDetails(::String accountId, ::borogove::Chat chat);
+		::Dynamic getChatUnreadDetails_dyn();
+
 		::Dynamic getChatsUnreadDetails(::String accountId,::Array< ::Dynamic> chats);
 		::Dynamic getChatsUnreadDetails_dyn();
 
diff --git a/Sources/c_borogove/iinclude/borogove/persistence/SqliteDriver.h b/Sources/c_borogove/iinclude/borogove/persistence/SqliteDriver.h
index 643c9af..3c51890 100644
--- a/Sources/c_borogove/iinclude/borogove/persistence/SqliteDriver.h
+++ b/Sources/c_borogove/iinclude/borogove/persistence/SqliteDriver.h
@@ -7,7 +7,6 @@
 #endif
 
 HX_DECLARE_CLASS2(borogove,persistence,SqliteDriver)
-HX_DECLARE_CLASS2(sys,db,Connection)
 HX_DECLARE_CLASS2(sys,thread,Deque)
 HX_DECLARE_CLASS2(sys,thread,IThreadPool)
 HX_DECLARE_CLASS1(thenshim,Thenable)
@@ -55,14 +54,14 @@ class HXCPP_CLASS_ATTRIBUTES SqliteDriver_obj : public ::hx::Object
 		::Dynamic ready;
 		 ::Dynamic setReady;
 		Dynamic setReady_dyn() { return setReady;}
-		::Dynamic execute(::Dynamic pool,::Array< ::String > qs,::cpp::VirtualArray params);
+		::Dynamic execute(::Dynamic pool,::Array< ::Dynamic> qs);
 		::Dynamic execute_dyn();
 
-		::Dynamic exec( ::Dynamic sql,::cpp::VirtualArray params);
-		::Dynamic exec_dyn();
+		::Dynamic execMany(::Array< ::Dynamic> qs);
+		::Dynamic execMany_dyn();
 
-		::String prepare(::Dynamic db,::String sql,::cpp::VirtualArray params);
-		::Dynamic prepare_dyn();
+		::Dynamic exec(::String sql,::cpp::VirtualArray params);
+		::Dynamic exec_dyn();
 
 };
 
diff --git a/Sources/c_borogove/iinclude/sys/db/Connection.h b/Sources/c_borogove/iinclude/sys/db/Connection.h
index cf46b5f..eb1d8c6 100644
--- a/Sources/c_borogove/iinclude/sys/db/Connection.h
+++ b/Sources/c_borogove/iinclude/sys/db/Connection.h
@@ -22,10 +22,6 @@ class HXCPP_CLASS_ATTRIBUTES Connection_obj {
 		static inline ::Dynamic request( ::Dynamic _hx_,::String s) {
 			return (_hx_.mPtr->*( ::hx::interface_cast< ::sys::db::Connection_obj *>(_hx_.mPtr->_hx_getInterface(0x6e7a3d49)))->_hx_request)(s);
 		}
-		::String (::hx::Object :: *_hx_quote)(::String s); 
-		static inline ::String quote( ::Dynamic _hx_,::String s) {
-			return (_hx_.mPtr->*( ::hx::interface_cast< ::sys::db::Connection_obj *>(_hx_.mPtr->_hx_getInterface(0x6e7a3d49)))->_hx_quote)(s);
-		}
 };
 
 } // end namespace sys
diff --git a/Sources/c_borogove/iinclude/sys/db/_Sqlite/SqliteConnection.h b/Sources/c_borogove/iinclude/sys/db/_Sqlite/SqliteConnection.h
index 7c154f8..f1b5ca5 100644
--- a/Sources/c_borogove/iinclude/sys/db/_Sqlite/SqliteConnection.h
+++ b/Sources/c_borogove/iinclude/sys/db/_Sqlite/SqliteConnection.h
@@ -55,9 +55,6 @@ class HXCPP_CLASS_ATTRIBUTES SqliteConnection_obj : public ::hx::Object
 		::Dynamic request(::String s);
 		::Dynamic request_dyn();
 
-		::String quote(::String s);
-		::Dynamic quote_dyn();
-
 };
 
 } // end namespace sys
diff --git a/Sources/c_borogove/include/borogove.h b/Sources/c_borogove/include/borogove.h
index 8373e88..18f3ef9 100644
--- a/Sources/c_borogove/include/borogove.h
+++ b/Sources/c_borogove/include/borogove.h
@@ -28,6 +28,30 @@
 
 typedef void (*borogove_panic_callback) (const char *info);
 
+enum
+#ifdef __clang__
+__attribute__((enum_extensibility(closed)))
+#endif
+borogove_ui_state {
+	Pinned = 0,
+	Open = 1,
+	Closed = 2,
+	Invited = 3
+};
+
+enum
+#ifdef __clang__
+__attribute__((enum_extensibility(closed)))
+#endif
+borogove_calls_call_status {
+	NoCall = 0,
+	Incoming = 1,
+	Outgoing = 2,
+	Connecting = 3,
+	Ongoing = 4,
+	Failed = 5
+};
+
 enum
 #ifdef __clang__
 __attribute__((enum_extensibility(closed)))
@@ -70,30 +94,6 @@ borogove_encryption_status {
 
 typedef int borogove_event_handler_token;
 
-enum
-#ifdef __clang__
-__attribute__((enum_extensibility(closed)))
-#endif
-borogove_ui_state {
-	Pinned = 0,
-	Open = 1,
-	Closed = 2,
-	Invited = 3
-};
-
-enum
-#ifdef __clang__
-__attribute__((enum_extensibility(closed)))
-#endif
-borogove_calls_call_status {
-	NoCall = 0,
-	Incoming = 1,
-	Outgoing = 2,
-	Connecting = 3,
-	Ongoing = 4,
-	Failed = 5
-};
-
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -130,6 +130,12 @@ API_PREFIX void borogove_stop(bool wait);
  */
 API_PREFIX void borogove_release(const void *ptr);
 
+API_PREFIX void borogove_persistence_media_store_has_media(void *self, const char *hashAlgorithm, const unsigned char *hash, size_t hash__len, void (*handler) (bool, void *handler__context), void *handler__context);
+
+API_PREFIX void borogove_persistence_media_store_remove_media(void *self, const char *hashAlgorithm, const unsigned char *hash, size_t hash__len);
+
+API_PREFIX void borogove_persistence_media_store_store_media(void *self, const char *mime, const unsigned char *bytes, size_t bytes__len, void (*handler) (bool, void *handler__context), void *handler__context);
+
 /**
  * Store media on the filesystem
  * 
@@ -145,1269 +151,1311 @@ API_PREFIX void *borogove_persistence_media_store_fs_new(const char *path);
  */
 API_PREFIX void borogove_persistence_media_store_fs_get_media_path(void *media_store_fs, const char *uri, void (*handler) (const char*, void *handler__context), void *handler__context);
 
-/**
- * Create a basic persistence layer based on sqlite
- * 
- * @param dbfile path to sqlite database
- * @params media a MediaStore to use for media
- * @returns new persistence layer
- */
-API_PREFIX void *borogove_persistence_sqlite_new(const char *dbfile, void *media);
+API_PREFIX void borogove_persistence_key_value_store_get(void *self, const char *k, void (*handler) (const char*, void *handler__context), void *handler__context);
+
+API_PREFIX void borogove_persistence_key_value_store_set(void *self, const char *k, const char *v, void (*handler) (bool, void *handler__context), void *handler__context);
 
 /**
- * Get a single message
- * 
- * @param accountId the account the message was sent or received on
- * @param chatId the chat the message was sent or received on
- * @param serverId the serverId of the message (optional if localId is specified)
- * @param localId the localId of the message (optional if serverId is specified)
- * @param handler which receives the message or null
+ * ID of this Chat
  */
-API_PREFIX void borogove_persistence_sqlite_get_message(void *sqlite, const char *accountId, const char *chatId, const char *serverId, const char *localId, void (*handler) (void*, void *handler__context), void *handler__context);
+API_PREFIX const char *borogove_chat_chat_id(void *chat);
 
 /**
- * Remove an account from storage
- * 
- * @param accountId the account to remove
- * @param completely if message history, etc should be removed also
+ * Current state of this chat
  */
-API_PREFIX void borogove_persistence_sqlite_remove_account(void *sqlite, const char *accountId, bool completely);
+API_PREFIX enum borogove_ui_state borogove_chat_ui_state(void *chat);
 
 /**
- * List all known accounts
- * 
- * @param handler which receives array of account IDs
+ * Is this chat blocked?
  */
-API_PREFIX void borogove_persistence_sqlite_list_accounts(void *sqlite, void (*handler) (const char**, size_t, void *handler__context), void *handler__context);
+API_PREFIX bool borogove_chat_is_blocked(void *chat);
 
 /**
- * The ID as set by the creator of this message
+ * The most recent message in this chat
  */
-API_PREFIX const char *borogove_chat_message_local_id(void *chat_message);
+API_PREFIX void *borogove_chat_last_message(void *chat);
 
 /**
- * The ID as set by the authoritative server
+ * Has this chat ever been bookmarked?
  */
-API_PREFIX const char *borogove_chat_message_server_id(void *chat_message);
+API_PREFIX bool borogove_chat_is_bookmarked(void *chat);
 
 /**
- * The ID of the server which set the serverId
+ * Fetch a page of messages before some point
+ * 
+ * @param beforeId id of the message to look before
+ * @param beforeTime timestamp of the message to look before,
+ *        String in format YYYY-MM-DDThh:mm:ss[.sss]+00:00
+ * @param handler which receives an array of ChatMessage that are found
  */
-API_PREFIX const char *borogove_chat_message_server_id_by(void *chat_message);
+API_PREFIX void borogove_chat_get_messages_before(void *chat, const char *beforeId, const char *beforeTime, void (*handler) (void**, size_t, void *handler__context), void *handler__context);
 
 /**
- * The type of this message (Chat, Call, etc)
+ * Fetch a page of messages after some point
+ * 
+ * @param afterId id of the message to look after
+ * @param afterTime timestamp of the message to look after,
+ *        String in format YYYY-MM-DDThh:mm:ss[.sss]+00:00
+ * @param handler which receives an array of ChatMessage that are found
  */
-API_PREFIX enum borogove_message_type borogove_chat_message_type(void *chat_message);
+API_PREFIX void borogove_chat_get_messages_after(void *chat, const char *afterId, const char *afterTime, void (*handler) (void**, size_t, void *handler__context), void *handler__context);
 
 /**
- * The timestamp of this message, in format YYYY-MM-DDThh:mm:ss[.sss]Z
+ * Fetch a page of messages around (before, including, and after) some point
+ * 
+ * @param aroundId id of the message to look around
+ * @param aroundTime timestamp of the message to look around,
+ *        String in format YYYY-MM-DDThh:mm:ss[.sss]+00:00
+ * @param handler which receives an array of ChatMessage that are found
  */
-API_PREFIX const char *borogove_chat_message_timestamp(void *chat_message);
+API_PREFIX void borogove_chat_get_messages_around(void *chat, const char *aroundId, const char *aroundTime, void (*handler) (void**, size_t, void *handler__context), void *handler__context);
 
 /**
- * The ID of the sender of this message
+ * Send a message to this Chat
+ * 
+ * @param message the ChatMessageBuilder to send
  */
-API_PREFIX const char *borogove_chat_message_sender_id(void *chat_message);
+API_PREFIX void borogove_chat_send_message(void *chat, void *message);
 
 /**
- * Message this one is in reply to, or NULL
+ * Signals that all messages up to and including this one have probably
+ * been displayed to the user
+ * 
+ * @param message the ChatMessage most recently displayed
  */
-API_PREFIX void *borogove_chat_message_reply_to_message(void *chat_message);
+API_PREFIX void borogove_chat_mark_read_up_to(void *chat, void *message);
 
 /**
- * ID of the thread this message is in, or NULL
+ * Save this Chat on the server
  */
-API_PREFIX const char *borogove_chat_message_thread_id(void *chat_message);
+API_PREFIX void borogove_chat_bookmark(void *chat);
 
 /**
- * Array of attachments to this message
+ * Get the list of IDs of participants in this Chat
+ * 
+ * @returns array of IDs
  */
-API_PREFIX size_t borogove_chat_message_attachments(void *chat_message, void ***outPtr);
+API_PREFIX size_t borogove_chat_get_participants(void *chat, const char ***outPtr);
 
 /**
- * List of reactions to this message
+ * Get the details for one participant in this Chat
+ * 
+ * @param participantId the ID of the participant to look up
  */
-API_PREFIX size_t borogove_chat_message_reaction_keys(void *chat_message, const char ***outPtr);
+API_PREFIX void *borogove_chat_get_participant_details(void *chat, const char *participantId);
 
 /**
- * Details of a set of reaction to this message
+ * Correct an already-send message by replacing it with a new one
+ * 
+ * @param localId the localId of the message to correct
+ *        must be the localId of the first version ever sent, not a subsequent correction
+ * @param message the new ChatMessage to replace it with
  */
-API_PREFIX size_t borogove_chat_message_reaction_details(void *chat_message, const char *reactionKey, void ***outPtr);
+API_PREFIX void borogove_chat_correct_message(void *chat, const char *localId, void *message);
 
 /**
- * Body text of this message or NULL
+ * Add new reaction to a message in this Chat
+ * 
+ * @param m ChatMessage to react to
+ * @param reaction emoji of the reaction
  */
-API_PREFIX const char *borogove_chat_message_text(void *chat_message);
+API_PREFIX void borogove_chat_add_reaction(void *chat, void *m, void *reaction);
 
 /**
- * Language code for the body text
+ * Remove an already-sent reaction from a message
+ * 
+ * @param m ChatMessage to remove the reaction from
+ * @param reaction the emoji to remove
  */
-API_PREFIX const char *borogove_chat_message_lang(void *chat_message);
+API_PREFIX void borogove_chat_remove_reaction(void *chat, void *m, void *reaction);
 
 /**
- * Direction of this message
+ * Call this whenever the user is typing, can call on every keystroke
+ * 
+ * @param threadId optional, what thread the user has selected if any
+ * @param content optional, what the user has typed so far
  */
-API_PREFIX enum borogove_message_direction borogove_chat_message_direction(void *chat_message);
+API_PREFIX void borogove_chat_typing(void *chat, const char *threadId, const char *content);
 
 /**
- * Status of this message
+ * Call this whenever the user makes a chat or thread "active" in your UX
+ * If you call this with true you MUST later call it will false
+ * 
+ * @param active true if the chat is "active", false otherwise
+ * @param threadId optional, what thread the user has selected if any
  */
-API_PREFIX enum borogove_message_status borogove_chat_message_status(void *chat_message);
+API_PREFIX void borogove_chat_set_active(void *chat, bool active, const char *threadId);
 
 /**
- * Message to go along with the message status
+ * Archive this chat
  */
-API_PREFIX const char *borogove_chat_message_status_text(void *chat_message);
+API_PREFIX void borogove_chat_close(void *chat);
 
 /**
- * Array of past versions of this message, if it has been edited
+ * Pin or unpin this chat
  */
-API_PREFIX size_t borogove_chat_message_versions(void *chat_message, void ***outPtr);
+API_PREFIX void borogove_chat_toggle_pinned(void *chat);
 
 /**
- * Information about the encryption used by the sender of
- * this message.
+ * Block this chat so it will not re-open
  */
-API_PREFIX void *borogove_chat_message_encryption(void *chat_message);
+API_PREFIX void borogove_chat_block(void *chat, bool reportSpam, void *spamMessage, bool onServer);
 
 /**
- * Create a new ChatMessage in reply to this one
+ * Unblock this chat so it will open again
  */
-API_PREFIX void *borogove_chat_message_reply(void *chat_message);
+API_PREFIX void borogove_chat_unblock(void *chat, bool onServer);
 
 /**
- * Get HTML version of the message body
- * 
- * WARNING: this is possibly untrusted HTML. You must parse or sanitize appropriately!
- * 
- * @param sender optionally specify the full details of the sender
+ * Update notification preferences
  */
-API_PREFIX const char *borogove_chat_message_html(void *chat_message, void *sender);
+API_PREFIX void borogove_chat_set_notifications(void *chat, bool filtered, bool mention, bool reply);
 
 /**
- * The ID of the Chat this message is associated with
+ * Should notifications be filtered?
  */
-API_PREFIX const char *borogove_chat_message_chat_id(void *chat_message);
+API_PREFIX bool borogove_chat_notifications_filtered(void *chat);
 
 /**
- * The ID of the account associated with this message
+ * Should a mention produce a notification?
  */
-API_PREFIX const char *borogove_chat_message_account(void *chat_message);
+API_PREFIX bool borogove_chat_notify_mention(void *chat);
 
 /**
- * Is this an incoming message?
+ * Should a reply produce a notification?
  */
-API_PREFIX bool borogove_chat_message_is_incoming(void *chat_message);
+API_PREFIX bool borogove_chat_notify_reply(void *chat);
 
 /**
- * The URI of an icon for the thread associated with this message, or NULL
+ * An ID of the most recent message in this chat
  */
-API_PREFIX const char *borogove_chat_message_thread_icon(void *chat_message);
+API_PREFIX const char *borogove_chat_last_message_id(void *chat);
 
 /**
- * The last status of the call if this message is related to a call
+ * Get the URI image to represent this Chat, or null
  */
-API_PREFIX const char *borogove_chat_message_call_status(void *chat_message);
+API_PREFIX const char *borogove_chat_get_photo(void *chat);
 
 /**
- * The session id of the call if this message is related to a call
+ * Get the URI to a placeholder image to represent this Chat
  */
-API_PREFIX const char *borogove_chat_message_call_sid(void *chat_message);
+API_PREFIX const char *borogove_chat_get_placeholder(void *chat);
 
 /**
- * The duration of the call if this message is related to a call
+ * An ID of the last message displayed to the user
  */
-API_PREFIX const char *borogove_chat_message_call_duration(void *chat_message);
+API_PREFIX const char *borogove_chat_read_up_to(void *chat);
 
 /**
- * Create a new attachment for adding to a ChatMessage
- * 
- * @param name Optional filename
- * @param mime MIME type
- * @param size Size in bytes
- * @param uri URI to attachment
+ * The number of message that have not yet been displayed to the user
  */
-API_PREFIX void *borogove_chat_attachment_create(const char *name, const char *mime, int size, const char *uri);
+API_PREFIX int borogove_chat_unread_count(void *chat);
 
 /**
- * Filename
+ * A preview of the chat, such as the most recent message body
  */
-API_PREFIX const char *borogove_chat_attachment_name(void *chat_attachment);
+API_PREFIX const char *borogove_chat_preview(void *chat);
 
 /**
- * MIME Type
+ * Set the display name to use for this chat
+ * 
+ * @param displayName String to use as display name
  */
-API_PREFIX const char *borogove_chat_attachment_mime(void *chat_attachment);
+API_PREFIX void borogove_chat_set_display_name(void *chat, const char *displayName);
 
 /**
- * Size in bytes
+ * The display name of this Chat
  */
-API_PREFIX int borogove_chat_attachment_size(void *chat_attachment);
+API_PREFIX const char *borogove_chat_get_display_name(void *chat);
 
 /**
- * URIs to data
+ * Set if this chat is to be trusted with our presence, etc
+ * 
+ * @param trusted Bool if trusted or not
  */
-API_PREFIX size_t borogove_chat_attachment_uris(void *chat_attachment, const char ***outPtr);
+API_PREFIX void borogove_chat_set_trusted(void *chat, bool trusted);
 
 /**
- * Hashes of data
+ * Is this a chat with an entity we trust to see our online status?
  */
-API_PREFIX size_t borogove_chat_attachment_hashes(void *chat_attachment, void ***outPtr);
+API_PREFIX bool borogove_chat_is_trusted(void *chat);
 
 /**
- * Create a new Hash from a hex string
- * 
- * @param algorithm name per https://xmpp.org/extensions/xep-0300.html
- * @param hash in hex format
- * @returns Hash or null on error
+ * @returns if this chat is currently syncing with the server
  */
-API_PREFIX void *borogove_hash_from_hex(const char *algorithm, const char *hash);
+API_PREFIX bool borogove_chat_syncing(void *chat);
 
 /**
- * Create a new Hash from a ni:, cid: or similar URI
- * 
- * @param uri The URI
- * @returns Hash or null on error
+ * Can audio calls be started in this Chat?
  */
-API_PREFIX void *borogove_hash_from_uri(const char *uri);
+API_PREFIX bool borogove_chat_can_audio_call(void *chat);
 
 /**
- * Hash algorithm name
+ * Can video calls be started in this Chat?
  */
-API_PREFIX const char *borogove_hash_algorithm(void *hash);
+API_PREFIX bool borogove_chat_can_video_call(void *chat);
 
 /**
- * Represent this Hash as a URI
+ * Start a new call in this Chat
  * 
- * @returns URI as a string
+ * @param audio do we want audio in this call
+ * @param video do we want video in this call
  */
-API_PREFIX const char *borogove_hash_to_uri(void *hash);
+API_PREFIX void *borogove_chat_start_call(void *chat, bool audio, bool video);
 
 /**
- * Represent this Hash as a hex string
- * 
- * @returns hex string
+ * Accept any incoming calls in this Chat
  */
-API_PREFIX const char *borogove_hash_to_hex(void *hash);
+API_PREFIX void borogove_chat_accept_call(void *chat);
 
 /**
- * Represent this Hash as a Base64 string
- * 
- * @returns Base64-encoded string
+ * Hangup or reject any calls in this chat
  */
-API_PREFIX const char *borogove_hash_to_base_64(void *hash);
+API_PREFIX void borogove_chat_hangup(void *chat);
 
 /**
- * Represent this Hash as a Base64url string
- * 
- * @returns Base64url-encoded string
+ * The current status of a call in this chat
  */
-API_PREFIX const char *borogove_hash_to_base_64_url(void *hash);
+API_PREFIX enum borogove_calls_call_status borogove_chat_call_status(void *chat);
 
 /**
- * Create a new Unicode reaction to send
- * 
- * @param unicode emoji of the reaction
- * @returns Reaction
+ * A DTMFSender for a call in this chat, or NULL
  */
-API_PREFIX void *borogove_reaction_unicode(const char *unicode);
+API_PREFIX void *borogove_chat_dtmf(void *chat);
 
 /**
- * ID of who sent this Reaction
+ * All video tracks in all active calls in this chat
  */
-API_PREFIX const char *borogove_reaction_sender_id(void *reaction);
+API_PREFIX size_t borogove_chat_video_tracks(void *chat, void ***outPtr);
 
 /**
- * Date and time when this Reaction was sent,
- * in format YYYY-MM-DDThh:mm:ss[.sss]+00:00
+ * Get encryption mode for this chat
  */
-API_PREFIX const char *borogove_reaction_timestamp(void *reaction);
+API_PREFIX const char *borogove_chat_encryption_mode(void *chat);
 
 /**
- * Key for grouping reactions
+ * Can the user send messages to this chat?
  */
-API_PREFIX const char *borogove_reaction_key(void *reaction);
-
-API_PREFIX enum borogove_encryption_status borogove_encryption_info_status(void *encryption_info);
-
-API_PREFIX const char *borogove_encryption_info_method(void *encryption_info);
-
-API_PREFIX const char *borogove_encryption_info_method_name(void *encryption_info);
-
-API_PREFIX const char *borogove_encryption_info_reason(void *encryption_info);
-
-API_PREFIX const char *borogove_encryption_info_reason_text(void *encryption_info);
+API_PREFIX bool borogove_chat_can_send(void *chat);
 
 /**
- * @returns a new blank ChatMessageBuilder
+ * Invite another chat's participants to participate in this one
  */
-API_PREFIX void *borogove_chat_message_builder_new();
+API_PREFIX void borogove_chat_invite(void *chat, void *other, const char *threadId);
 
 /**
- * The ID as set by the creator of this message
+ * Can the user invite others to this chat?
  */
-API_PREFIX const char *borogove_chat_message_builder_local_id(void *chat_message_builder);
+API_PREFIX bool borogove_chat_can_invite(void *chat);
 
 /**
- * The ID as set by the creator of this message
+ * This chat's primary mode of interaction is via commands
  */
-API_PREFIX void borogove_chat_message_builder_set_local_id(void *chat_message_builder, const char *value);
+API_PREFIX bool borogove_chat_is_app(void *chat);
 
 /**
- * The ID as set by the authoritative server
+ * Does this chat provide a menu of commands?
  */
-API_PREFIX const char *borogove_chat_message_builder_server_id(void *chat_message_builder);
+API_PREFIX bool borogove_chat_has_commands(void *chat);
+
+API_PREFIX void borogove_chat_commands(void *chat, void (*handler) (void**, size_t, void *handler__context), void *handler__context);
 
 /**
- * The ID as set by the authoritative server
+ * The Participant that originally invited us to this Chat, if we were invited
  */
-API_PREFIX void borogove_chat_message_builder_set_server_id(void *chat_message_builder, const char *value);
+API_PREFIX void *borogove_chat_invited_by(void *chat);
 
 /**
- * The ID of the server which set the serverId
+ * The ID as set by the creator of this message
  */
-API_PREFIX const char *borogove_chat_message_builder_server_id_by(void *chat_message_builder);
+API_PREFIX const char *borogove_chat_message_local_id(void *chat_message);
 
 /**
- * The ID of the server which set the serverId
+ * The ID as set by the authoritative server
  */
-API_PREFIX void borogove_chat_message_builder_set_server_id_by(void *chat_message_builder, const char *value);
+API_PREFIX const char *borogove_chat_message_server_id(void *chat_message);
 
 /**
- * The type of this message (Chat, Call, etc)
+ * The ID of the server which set the serverId
  */
-API_PREFIX enum borogove_message_type borogove_chat_message_builder_type(void *chat_message_builder);
+API_PREFIX const char *borogove_chat_message_server_id_by(void *chat_message);
 
 /**
  * The type of this message (Chat, Call, etc)
  */
-API_PREFIX void borogove_chat_message_builder_set_type(void *chat_message_builder, enum borogove_message_type value);
+API_PREFIX enum borogove_message_type borogove_chat_message_type(void *chat_message);
 
 /**
- * The timestamp of this message, in format YYYY-MM-DDThh:mm:ss[.sss]+00:00
+ * The timestamp of this message, in format YYYY-MM-DDThh:mm:ss[.sss]Z
  */
-API_PREFIX const char *borogove_chat_message_builder_timestamp(void *chat_message_builder);
+API_PREFIX const char *borogove_chat_message_timestamp(void *chat_message);
 
 /**
- * The timestamp of this message, in format YYYY-MM-DDThh:mm:ss[.sss]+00:00
+ * The ID of the sender of this message
  */
-API_PREFIX void borogove_chat_message_builder_set_timestamp(void *chat_message_builder, const char *value);
+API_PREFIX const char *borogove_chat_message_sender_id(void *chat_message);
 
 /**
- * The ID of the message sender
+ * Message this one is in reply to, or NULL
  */
-API_PREFIX const char *borogove_chat_message_builder_sender_id(void *chat_message_builder);
+API_PREFIX void *borogove_chat_message_reply_to_message(void *chat_message);
 
 /**
- * The ID of the message sender
+ * ID of the thread this message is in, or NULL
  */
-API_PREFIX void borogove_chat_message_builder_set_sender_id(void *chat_message_builder, const char *value);
+API_PREFIX const char *borogove_chat_message_thread_id(void *chat_message);
 
 /**
- * Message this one is in reply to, or NULL
+ * Array of attachments to this message
  */
-API_PREFIX void *borogove_chat_message_builder_reply_to_message(void *chat_message_builder);
+API_PREFIX size_t borogove_chat_message_attachments(void *chat_message, void ***outPtr);
 
 /**
- * Message this one is in reply to, or NULL
+ * List of reactions to this message
  */
-API_PREFIX void borogove_chat_message_builder_set_reply_to_message(void *chat_message_builder, void *value);
+API_PREFIX size_t borogove_chat_message_reaction_keys(void *chat_message, const char ***outPtr);
 
 /**
- * ID of the thread this message is in, or NULL
+ * Details of a set of reaction to this message
  */
-API_PREFIX const char *borogove_chat_message_builder_thread_id(void *chat_message_builder);
+API_PREFIX size_t borogove_chat_message_reaction_details(void *chat_message, const char *reactionKey, void ***outPtr);
 
 /**
- * ID of the thread this message is in, or NULL
+ * Body text of this message or NULL
  */
-API_PREFIX void borogove_chat_message_builder_set_thread_id(void *chat_message_builder, const char *value);
+API_PREFIX const char *borogove_chat_message_text(void *chat_message);
 
 /**
- * Array of attachments to this message
+ * Language code for the body text
  */
-API_PREFIX size_t borogove_chat_message_builder_attachments(void *chat_message_builder, void ***outPtr);
+API_PREFIX const char *borogove_chat_message_lang(void *chat_message);
 
 /**
- * Body text of this message or NULL
+ * Direction of this message
  */
-API_PREFIX const char *borogove_chat_message_builder_text(void *chat_message_builder);
+API_PREFIX enum borogove_message_direction borogove_chat_message_direction(void *chat_message);
 
 /**
- * Body text of this message or NULL
+ * Status of this message
  */
-API_PREFIX void borogove_chat_message_builder_set_text(void *chat_message_builder, const char *value);
+API_PREFIX enum borogove_message_status borogove_chat_message_status(void *chat_message);
 
 /**
- * Language code for the body text
+ * Message to go along with the message status
  */
-API_PREFIX const char *borogove_chat_message_builder_lang(void *chat_message_builder);
+API_PREFIX const char *borogove_chat_message_status_text(void *chat_message);
 
 /**
- * Language code for the body text
+ * Array of past versions of this message, if it has been edited
  */
-API_PREFIX void borogove_chat_message_builder_set_lang(void *chat_message_builder, const char *value);
+API_PREFIX size_t borogove_chat_message_versions(void *chat_message, void ***outPtr);
 
 /**
- * Direction of this message
+ * Information about the encryption used by the sender of
+ * this message.
  */
-API_PREFIX enum borogove_message_direction borogove_chat_message_builder_direction(void *chat_message_builder);
+API_PREFIX void *borogove_chat_message_encryption(void *chat_message);
 
 /**
- * Direction of this message
+ * Create a new ChatMessage in reply to this one
  */
-API_PREFIX void borogove_chat_message_builder_set_direction(void *chat_message_builder, enum borogove_message_direction value);
+API_PREFIX void *borogove_chat_message_reply(void *chat_message);
 
 /**
- * Status of this message
+ * Get HTML version of the message body
+ * 
+ * WARNING: this is possibly untrusted HTML. You must parse or sanitize appropriately!
+ * 
+ * @param sender optionally specify the full details of the sender
  */
-API_PREFIX enum borogove_message_status borogove_chat_message_builder_status(void *chat_message_builder);
+API_PREFIX const char *borogove_chat_message_html(void *chat_message, void *sender);
 
 /**
- * Status of this message
+ * The ID of the Chat this message is associated with
  */
-API_PREFIX void borogove_chat_message_builder_set_status(void *chat_message_builder, enum borogove_message_status value);
+API_PREFIX const char *borogove_chat_message_chat_id(void *chat_message);
 
 /**
- * Human readable text to go with the status
+ * The ID of the account associated with this message
  */
-API_PREFIX const char *borogove_chat_message_builder_status_text(void *chat_message_builder);
+API_PREFIX const char *borogove_chat_message_account(void *chat_message);
 
 /**
- * Human readable text to go with the status
+ * Is this an incoming message?
  */
-API_PREFIX void borogove_chat_message_builder_set_status_text(void *chat_message_builder, const char *value);
+API_PREFIX bool borogove_chat_message_is_incoming(void *chat_message);
 
 /**
- * Array of past versions of this message, if it has been edited
+ * The URI of an icon for the thread associated with this message, or NULL
  */
-API_PREFIX void borogove_chat_message_builder_set_versions(void *chat_message_builder, void *const *inPtr, size_t count);
+API_PREFIX const char *borogove_chat_message_thread_icon(void *chat_message);
 
 /**
- * Array of past versions of this message, if it has been edited
+ * The last status of the call if this message is related to a call
  */
-API_PREFIX size_t borogove_chat_message_builder_versions(void *chat_message_builder, void ***outPtr);
+API_PREFIX const char *borogove_chat_message_call_status(void *chat_message);
 
 /**
- * Information about the encryption used by the sender of
- * this message.
+ * The session id of the call if this message is related to a call
  */
-API_PREFIX void *borogove_chat_message_builder_encryption(void *chat_message_builder);
+API_PREFIX const char *borogove_chat_message_call_sid(void *chat_message);
 
 /**
- * Information about the encryption used by the sender of
- * this message.
+ * The duration of the call if this message is related to a call
  */
-API_PREFIX void borogove_chat_message_builder_set_encryption(void *chat_message_builder, void *value);
+API_PREFIX const char *borogove_chat_message_call_duration(void *chat_message);
 
 /**
- * Add an attachment to this message
+ * Create a new attachment for adding to a ChatMessage
  * 
- * @param attachment The ChatAttachment to add
+ * @param name Optional filename
+ * @param mime MIME type
+ * @param size Size in bytes
+ * @param uri URI to attachment
  */
-API_PREFIX void borogove_chat_message_builder_add_attachment(void *chat_message_builder, void *attachment);
+API_PREFIX void *borogove_chat_attachment_create(const char *name, const char *mime, int size, const char *uri);
 
 /**
- * Set rich text using an HTML string
- * Also sets the plain text body appropriately
+ * Filename
  */
-API_PREFIX void borogove_chat_message_builder_set_html(void *chat_message_builder, const char *html);
+API_PREFIX const char *borogove_chat_attachment_name(void *chat_attachment);
 
 /**
- * The ID of the Chat this message is associated with
+ * MIME Type
  */
-API_PREFIX const char *borogove_chat_message_builder_chat_id(void *chat_message_builder);
+API_PREFIX const char *borogove_chat_attachment_mime(void *chat_attachment);
 
 /**
- * The ID of the sender of this message
+ * Size in bytes
  */
-API_PREFIX const char *borogove_chat_message_builder_get_sender_id(void *chat_message_builder);
+API_PREFIX int borogove_chat_attachment_size(void *chat_attachment);
 
 /**
- * Build this builder into an immutable ChatMessage
- * 
- * @returns the ChatMessage
+ * URIs to data
  */
-API_PREFIX void *borogove_chat_message_builder_build(void *chat_message_builder);
+API_PREFIX size_t borogove_chat_attachment_uris(void *chat_attachment, const char ***outPtr);
 
-API_PREFIX const char *borogove_participant_display_name(void *participant);
-
-API_PREFIX const char *borogove_participant_photo_uri(void *participant);
-
-API_PREFIX const char *borogove_participant_placeholder_uri(void *participant);
-
-API_PREFIX bool borogove_participant_is_self(void *participant);
-
-API_PREFIX void borogove_participant_profile(void *participant, void *client, void (*handler) (void*, void *handler__context), void *handler__context);
+/**
+ * Hashes of data
+ */
+API_PREFIX size_t borogove_chat_attachment_hashes(void *chat_attachment, void ***outPtr);
 
 /**
- * All items in the profile
+ * Create a new Hash from a hex string
+ * 
+ * @param algorithm name per https://xmpp.org/extensions/xep-0300.html
+ * @param hash in hex format
+ * @returns Hash or null on error
  */
-API_PREFIX size_t borogove_profile_items(void *profile, void ***outPtr);
-
-API_PREFIX const char *borogove_profile_item_id(void *profile_item);
-
-API_PREFIX const char *borogove_profile_item_key(void *profile_item);
-
-API_PREFIX size_t borogove_profile_item_parameters(void *profile_item, void ***outPtr);
-
-API_PREFIX size_t borogove_profile_item_text(void *profile_item, const char ***outPtr);
-
-API_PREFIX size_t borogove_profile_item_uri(void *profile_item, const char ***outPtr);
-
-API_PREFIX size_t borogove_profile_item_date(void *profile_item, const char ***outPtr);
-
-API_PREFIX size_t borogove_profile_item_time(void *profile_item, const char ***outPtr);
-
-API_PREFIX size_t borogove_profile_item_datetime(void *profile_item, const char ***outPtr);
-
-API_PREFIX size_t borogove_profile_item_language_tag(void *profile_item, const char ***outPtr);
+API_PREFIX void *borogove_hash_from_hex(const char *algorithm, const char *hash);
 
 /**
- * Create a basic persistence layer that persists nothing
+ * Create a new Hash from a ni:, cid: or similar URI
  * 
- * @returns new persistence layer
+ * @param uri The URI
+ * @returns Hash or null on error
  */
-API_PREFIX void *borogove_persistence_dummy_new();
+API_PREFIX void *borogove_hash_from_uri(const char *uri);
 
 /**
- * Receive a new push notification from some external system
- * 
- * @param data the raw data from the push
- * @param persistence the persistence layer to write into
- * @returns a Notification representing the push data
+ * Hash algorithm name
  */
-API_PREFIX void *borogove_push_receive(const char *data, void *persistence);
+API_PREFIX const char *borogove_hash_algorithm(void *hash);
 
 /**
- * The title
+ * Represent this Hash as a URI
+ * 
+ * @returns URI as a string
  */
-API_PREFIX const char *borogove_notification_title(void *notification);
+API_PREFIX const char *borogove_hash_to_uri(void *hash);
 
 /**
- * The body text
+ * Represent this Hash as a hex string
+ * 
+ * @returns hex string
  */
-API_PREFIX const char *borogove_notification_body(void *notification);
+API_PREFIX const char *borogove_hash_to_hex(void *hash);
 
 /**
- * The ID of the associated account
+ * Represent this Hash as a Base64 string
+ * 
+ * @returns Base64-encoded string
  */
-API_PREFIX const char *borogove_notification_account_id(void *notification);
+API_PREFIX const char *borogove_hash_to_base_64(void *hash);
 
 /**
- * The ID of the associated chat
+ * Represent this Hash as a Base64url string
+ * 
+ * @returns Base64url-encoded string
  */
-API_PREFIX const char *borogove_notification_chat_id(void *notification);
+API_PREFIX const char *borogove_hash_to_base_64_url(void *hash);
 
 /**
- * The ID of the message sender
+ * Create a new Unicode reaction to send
+ * 
+ * @param unicode emoji of the reaction
+ * @returns Reaction
  */
-API_PREFIX const char *borogove_notification_sender_id(void *notification);
+API_PREFIX void *borogove_reaction_unicode(const char *unicode);
 
 /**
- * The serverId of the message
+ * ID of who sent this Reaction
  */
-API_PREFIX const char *borogove_notification_message_id(void *notification);
+API_PREFIX const char *borogove_reaction_sender_id(void *reaction);
 
 /**
- * The type of the message
+ * Date and time when this Reaction was sent,
+ * in format YYYY-MM-DDThh:mm:ss[.sss]+00:00
  */
-API_PREFIX enum borogove_message_type borogove_notification_type(void *notification);
+API_PREFIX const char *borogove_reaction_timestamp(void *reaction);
 
 /**
- * If this is a call notification, the call status
+ * Key for grouping reactions
  */
-API_PREFIX const char *borogove_notification_call_status(void *notification);
+API_PREFIX const char *borogove_reaction_key(void *reaction);
+
+API_PREFIX enum borogove_encryption_status borogove_encryption_info_status(void *encryption_info);
+
+API_PREFIX const char *borogove_encryption_info_method(void *encryption_info);
+
+API_PREFIX const char *borogove_encryption_info_method_name(void *encryption_info);
+
+API_PREFIX const char *borogove_encryption_info_reason(void *encryption_info);
+
+API_PREFIX const char *borogove_encryption_info_reason_text(void *encryption_info);
+
+API_PREFIX const char *borogove_calls_media_stream_track_id(void *media_stream_track);
+
+API_PREFIX bool borogove_calls_media_stream_track_muted(void *media_stream_track);
+
+API_PREFIX const char *borogove_calls_media_stream_track_kind(void *media_stream_track);
+
+API_PREFIX size_t borogove_calls_media_stream_track_supported_audio_formats(void *media_stream_track, void ***outPtr);
 
 /**
- * If this is a call notification, the call session ID
+ * Event fired for new inbound audio frame
+ * 
+ * @param callback takes three arguments, the Signed 16-bit PCM data, the clock rate, and the number of channels
  */
-API_PREFIX const char *borogove_notification_call_sid(void *notification);
+API_PREFIX void borogove_calls_media_stream_track_add_pcm_listener(void *media_stream_track, void (*callback) (short*, size_t, int, int, void*), void *callback__context);
 
 /**
- * Optional image URI
+ * Event fired when ready for next outbound audio frame
+ * 
+ * @param callback
  */
-API_PREFIX const char *borogove_notification_image_uri(void *notification);
+API_PREFIX void borogove_calls_media_stream_track_add_ready_for_pcm_listener(void *media_stream_track, void (*callback) (void*), void *callback__context);
 
 /**
- * Optional language code
+ * Send new audio to this track
+ * 
+ * @param pcm 16-bit signed linear PCM data (interleaved)
+ * @param clockRate the sampling rate of the data
+ * @param channels the number of audio channels
  */
-API_PREFIX const char *borogove_notification_lang(void *notification);
+API_PREFIX void borogove_calls_media_stream_track_write_pcm(void *media_stream_track, const short *pcm, size_t pcm__len, int clockRate, int channels);
+
+API_PREFIX void borogove_calls_media_stream_track_stop(void *media_stream_track);
+
+API_PREFIX void *borogove_calls_audio_format_new(const char *format, unsigned char payloadType, int clockRate, int channels);
+
+API_PREFIX int borogove_calls_audio_format_clock_rate(void *audio_format);
+
+API_PREFIX int borogove_calls_audio_format_channels(void *audio_format);
+
+API_PREFIX const char *borogove_command_name(void *command);
 
 /**
- * Optional date and time of the event
+ * Start a new session for this command. May have side effects!
  */
-API_PREFIX const char *borogove_notification_timestamp(void *notification);
+API_PREFIX void borogove_command_execute(void *command, void (*handler) (void*, void *handler__context), void *handler__context);
+
+API_PREFIX const char *borogove_command_session_name(void *command_session);
+
+API_PREFIX const char *borogove_command_session_status(void *command_session);
+
+API_PREFIX size_t borogove_command_session_actions(void *command_session, void ***outPtr);
+
+API_PREFIX size_t borogove_command_session_forms(void *command_session, void ***outPtr);
+
+API_PREFIX void borogove_command_session_execute(void *command_session, const char *action, void *data, int formIdx, void (*handler) (void*, void *handler__context), void *handler__context);
+
+API_PREFIX const char *borogove_form_option_label(void *form_option);
+
+API_PREFIX const char *borogove_form_option_value(void *form_option);
+
+API_PREFIX const char *borogove_form_item_text(void *form_item);
+
+API_PREFIX void *borogove_form_item_field(void *form_item);
+
+API_PREFIX void *borogove_form_item_section(void *form_item);
+
+API_PREFIX const char *borogove_form_item_status(void *form_item);
+
+API_PREFIX size_t borogove_form_item_table_header(void *form_item, void ***outPtr);
+
+API_PREFIX const char *borogove_form_field_name(void *form_field);
+
+API_PREFIX const char *borogove_form_field_label(void *form_field);
+
+API_PREFIX const char *borogove_form_field_desc(void *form_field);
+
+API_PREFIX size_t borogove_form_field_value(void *form_field, const char ***outPtr);
+
+API_PREFIX bool borogove_form_field_required(void *form_field);
+
+API_PREFIX const char *borogove_form_field_type(void *form_field);
+
+API_PREFIX const char *borogove_form_field_datatype(void *form_field);
+
+API_PREFIX size_t borogove_form_field_options(void *form_field, void ***outPtr);
+
+API_PREFIX bool borogove_form_field_open(void *form_field);
+
+API_PREFIX const char *borogove_form_field_range_min(void *form_field);
+
+API_PREFIX const char *borogove_form_field_range_max(void *form_field);
+
+API_PREFIX const char *borogove_form_field_regex(void *form_field);
+
+API_PREFIX const char *borogove_form_section_title(void *self);
+
+API_PREFIX size_t borogove_form_section_items(void *self, void ***outPtr);
 
 /**
- * Remove an event listener of any type, no matter how it was added
- * or what event it is for.
- * 
- * @param token the token that was returned when the listener was added
+ * Is this form entirely results / read-only?
  */
-API_PREFIX void borogove_event_emitter_remove_event_listener(void *event_emitter, borogove_event_handler_token token);
+API_PREFIX bool borogove_form_is_result(void *form);
 
 /**
- * Create a new Client to connect to a particular account
- * 
- * @param accountId the account to connect to
- * @param persistence the persistence layer to use for storage
+ * Title of this form
  */
-API_PREFIX void *borogove_client_new(const char *accountId, void *persistence);
+API_PREFIX const char *borogove_form_title(void *form);
 
 /**
- * Set to false to suppress sending available presence
+ * URL to use instead of this form
  */
-API_PREFIX void borogove_client_set_send_available(void *client, bool value);
+API_PREFIX const char *borogove_form_url(void *form);
 
 /**
- * Start this client running and trying to connect to the server
+ * Items to render inside this form
  */
-API_PREFIX void borogove_client_start(void *client);
+API_PREFIX size_t borogove_form_items(void *form, void ***outPtr);
+
+API_PREFIX void borogove_persistence_last_id(void *self, const char *accountId, const char *chatId, void (*handler) (const char*, void *handler__context), void *handler__context);
+
+API_PREFIX void borogove_persistence_store_chats(void *self, const char *accountId, void *const *chats, size_t chats__len);
+
+API_PREFIX void borogove_persistence_store_messages(void *self, const char *accountId, void *const *message, size_t message__len, void (*handler) (void**, size_t, void *handler__context), void *handler__context);
+
+API_PREFIX void borogove_persistence_update_message(void *self, const char *accountId, void *message);
+
+API_PREFIX void borogove_persistence_update_message_status(void *self, const char *accountId, const char *localId, enum borogove_message_status status, const char *statusText, void (*handler) (void*, void *handler__context), void *handler__context);
+
+API_PREFIX void borogove_persistence_get_message(void *self, const char *accountId, const char *chatId, const char *serverId, const char *localId, void (*handler) (void*, void *handler__context), void *handler__context);
+
+API_PREFIX void borogove_persistence_get_messages_before(void *self, const char *accountId, const char *chatId, const char *beforeId, const char *beforeTime, void (*handler) (void**, size_t, void *handler__context), void *handler__context);
+
+API_PREFIX void borogove_persistence_get_messages_after(void *self, const char *accountId, const char *chatId, const char *afterId, const char *afterTime, void (*handler) (void**, size_t, void *handler__context), void *handler__context);
+
+API_PREFIX void borogove_persistence_get_messages_around(void *self, const char *accountId, const char *chatId, const char *aroundId, const char *aroundTime, void (*handler) (void**, size_t, void *handler__context), void *handler__context);
+
+API_PREFIX void borogove_persistence_has_media(void *self, const char *hashAlgorithm, const unsigned char *hash, size_t hash__len, void (*handler) (bool, void *handler__context), void *handler__context);
+
+API_PREFIX void borogove_persistence_store_media(void *self, const char *mime, const unsigned char *bytes, size_t bytes__len, void (*handler) (bool, void *handler__context), void *handler__context);
+
+API_PREFIX void borogove_persistence_remove_media(void *self, const char *hashAlgorithm, const unsigned char *hash, size_t hash__len);
+
+API_PREFIX void borogove_persistence_store_login(void *self, const char *login, const char *clientId, const char *displayName, const char *token);
+
+API_PREFIX void borogove_persistence_remove_account(void *self, const char *accountId, bool completely);
+
+API_PREFIX void borogove_persistence_list_accounts(void *self, void (*handler) (const char**, size_t, void *handler__context), void *handler__context);
 
 /**
- * Gets the client ready to use but does not connect to the server
+ * Create a basic persistence layer based on sqlite
  * 
- * @param handler which receives true once the Client is ready
+ * @param dbfile path to sqlite database
+ * @params media a MediaStore to use for media
+ * @returns new persistence layer
  */
-API_PREFIX void borogove_client_start_offline(void *client, void (*handler) (bool, void *handler__context), void *handler__context);
+API_PREFIX void *borogove_persistence_sqlite_new(const char *dbfile, void *media);
 
 /**
- * Destroy local data for this account
+ * Get a single message
  * 
- * @param completely if true chats, messages, etc will be deleted as well
+ * @param accountId the account the message was sent or received on
+ * @param chatId the chat the message was sent or received on
+ * @param serverId the serverId of the message (optional if localId is specified)
+ * @param localId the localId of the message (optional if serverId is specified)
+ * @param handler which receives the message or null
  */
-API_PREFIX void borogove_client_logout(void *client, bool completely);
+API_PREFIX void borogove_persistence_sqlite_get_message(void *sqlite, const char *accountId, const char *chatId, const char *serverId, const char *localId, void (*handler) (void*, void *handler__context), void *handler__context);
 
 /**
- * Sets the password to be used in response to the password needed event
+ * Remove an account from storage
  * 
- * @param password
+ * @param accountId the account to remove
+ * @param completely if message history, etc should be removed also
  */
-API_PREFIX void borogove_client_use_password(void *client, const char *password);
+API_PREFIX void borogove_persistence_sqlite_remove_account(void *sqlite, const char *accountId, bool completely);
 
 /**
- * Get the account ID for this Client
+ * List all known accounts
  * 
- * @returns account id
+ * @param handler which receives array of account IDs
  */
-API_PREFIX const char *borogove_client_account_id(void *client);
+API_PREFIX void borogove_persistence_sqlite_list_accounts(void *sqlite, void (*handler) (const char**, size_t, void *handler__context), void *handler__context);
+
+API_PREFIX void *borogove_form_submit_builder_new();
+
+API_PREFIX void borogove_form_submit_builder_add(void *form_submit_builder, const char *k, const char *v);
 
 /**
- * Get the current display name for this account
- * 
- * @returns display name
+ * @returns a new blank ChatMessageBuilder
  */
-API_PREFIX const char *borogove_client_display_name(void *client);
+API_PREFIX void *borogove_chat_message_builder_new();
 
 /**
- * Set the current profile for this account on the server
- * 
- * @param profile to set
- * @param publicAccess set the access for the profile to public
+ * The ID as set by the creator of this message
  */
-API_PREFIX void borogove_client_set_profile(void *client, void *profile, bool publicAccess);
+API_PREFIX const char *borogove_chat_message_builder_local_id(void *chat_message_builder);
 
 /**
- * Turn a file into a ChatAttachment for attaching to a ChatMessage
- * 
- * @param source The AttachmentSource to use
- * @param handler which receives a ChatAttachment or null
+ * The ID as set by the creator of this message
  */
-API_PREFIX void borogove_client_prepare_attachment(void *client, void *source, void (*handler) (void*, void *handler__context), void *handler__context);
+API_PREFIX void borogove_chat_message_builder_set_local_id(void *chat_message_builder, const char *value);
 
 /**
- * @returns array of open chats, sorted by last activity
+ * The ID as set by the authoritative server
  */
-API_PREFIX size_t borogove_client_get_chats(void *client, void ***outPtr);
+API_PREFIX const char *borogove_chat_message_builder_server_id(void *chat_message_builder);
 
 /**
- * Search for chats the user can start or join
- * 
- * @param q the search query to use
- * @param callback takes two arguments, the query that was used and the array of results, and returns true if we should stop searching
+ * The ID as set by the authoritative server
  */
-API_PREFIX void borogove_client_find_available_chats(void *client, const char *q, bool (*callback) (const char*, void**, size_t, void*), void *callback__context);
+API_PREFIX void borogove_chat_message_builder_set_server_id(void *chat_message_builder, const char *value);
 
 /**
- * Start or join a chat from the search results
- * 
- * @returns the chat that was started
+ * The ID of the server which set the serverId
  */
-API_PREFIX void *borogove_client_start_chat(void *client, void *availableChat);
+API_PREFIX const char *borogove_chat_message_builder_server_id_by(void *chat_message_builder);
 
 /**
- * Find a chat by id
- * 
- * @returns the chat if known, or NULL
+ * The ID of the server which set the serverId
  */
-API_PREFIX void *borogove_client_get_chat(void *client, const char *chatId);
+API_PREFIX void borogove_chat_message_builder_set_server_id_by(void *chat_message_builder, const char *value);
 
 /**
- * Enable push notifications
- * 
- * @param push_service the address of a push proxy
- * @param vapid_private_pkcs8 the private key for signing JWT of the push service
- * @param endpoint the final target for the push proxy to forward to
- * @param p256dh A P-256 uncompressed point in ANSI X9.62 format
- * @param auth Random 16 octed value
- * @param grace Grace period during which not to generate push if another app is active for same account, in seconds (negative for none)
- * @param claims Optional additional JWT claims as key then value
+ * The type of this message (Chat, Call, etc)
  */
-API_PREFIX void borogove_client_enable_push(void *client, const char *push_service, const char *endpoint, const unsigned char *p256dh, size_t p256dh__len, const unsigned char *auth, size_t auth__len, int grace, const unsigned char *vapid_private_pkcs8, size_t vapid_private_pkcs8__len, const char *const *claims, size_t claims__len);
+API_PREFIX enum borogove_message_type borogove_chat_message_builder_type(void *chat_message_builder);
 
 /**
- * Event fired when client needs a password for authentication
- * 
- * @param handler takes one argument, the Client that needs a password
- * @returns token for use with removeEventListener
+ * The type of this message (Chat, Call, etc)
  */
-API_PREFIX borogove_event_handler_token borogove_client_add_password_needed_listener(void *client, void (*handler) (void*, void*), void *handler__context);
+API_PREFIX void borogove_chat_message_builder_set_type(void *chat_message_builder, enum borogove_message_type value);
 
 /**
- * Event fired when client is connected and fully synchronized
- * 
- * @param handler takes no arguments
- * @returns token for use with removeEventListener
+ * The timestamp of this message, in format YYYY-MM-DDThh:mm:ss[.sss]+00:00
  */
-API_PREFIX borogove_event_handler_token borogove_client_add_status_online_listener(void *client, void (*handler) (void*), void *handler__context);
+API_PREFIX const char *borogove_chat_message_builder_timestamp(void *chat_message_builder);
 
 /**
- * Event fired when client is disconnected
- * 
- * @param handler takes no arguments
- * @returns token for use with removeEventListener
+ * The timestamp of this message, in format YYYY-MM-DDThh:mm:ss[.sss]+00:00
  */
-API_PREFIX borogove_event_handler_token borogove_client_add_status_offline_listener(void *client, void (*handler) (void*), void *handler__context);
+API_PREFIX void borogove_chat_message_builder_set_timestamp(void *chat_message_builder, const char *value);
 
 /**
- * Event fired when connection fails with a fatal error and will not be retried
- * 
- * @param handler takes no arguments
- * @returns token for use with removeEventListener
+ * The ID of the message sender
  */
-API_PREFIX borogove_event_handler_token borogove_client_add_connection_failed_listener(void *client, void (*handler) (void*), void *handler__context);
+API_PREFIX const char *borogove_chat_message_builder_sender_id(void *chat_message_builder);
 
 /**
- * Event fired when TLS checks fail, to give client the chance to override
- * 
- * @param handler takes two arguments, the PEM of the cert and an array of DNS names, and must return true to accept or false to reject
- * @returns token for use with removeEventListener
+ * The ID of the message sender
  */
-API_PREFIX borogove_event_handler_token borogove_client_add_tls_check_listener(void *client, bool (*handler) (const char*, const char**, size_t, void*), void *handler__context);
+API_PREFIX void borogove_chat_message_builder_set_sender_id(void *chat_message_builder, const char *value);
 
 /**
- * Event fired when a new ChatMessage comes in on any Chat
- * Also fires when status of a ChatMessage changes,
- * when a ChatMessage is edited, or when a reaction is added
- * 
- * @param handler takes two arguments, the ChatMessage and ChatMessageEvent enum describing what happened
- * @returns token for use with removeEventListener
+ * Message this one is in reply to, or NULL
  */
-API_PREFIX borogove_event_handler_token borogove_client_add_chat_message_listener(void *client, void (*handler) (void*, int, void*), void *handler__context);
+API_PREFIX void *borogove_chat_message_builder_reply_to_message(void *chat_message_builder);
 
 /**
- * Event fired when syncing a new ChatMessage that was send when offline.
- * Normally you don't want this, but it may be useful if you want to notify on app start.
- * 
- * @param handler takes one argument, the ChatMessage
- * @returns token for use with removeEventListener
+ * Message this one is in reply to, or NULL
  */
-API_PREFIX borogove_event_handler_token borogove_client_add_sync_message_listener(void *client, void (*handler) (void*, void*), void *handler__context);
+API_PREFIX void borogove_chat_message_builder_set_reply_to_message(void *chat_message_builder, void *value);
 
 /**
- * Event fired when a Chat's metadata is updated, or when a new Chat is added
- * 
- * @param handler takes one argument, an array of Chats that were updated
- * @returns token for use with removeEventListener
+ * ID of the thread this message is in, or NULL
  */
-API_PREFIX borogove_event_handler_token borogove_client_add_chats_updated_listener(void *client, void (*handler) (void**, size_t, void*), void *handler__context);
+API_PREFIX const char *borogove_chat_message_builder_thread_id(void *chat_message_builder);
 
 /**
- * Event fired when a new call comes in
- * 
- * @param handler takes one argument, the call Session
- * @returns token for use with removeEventListener
+ * ID of the thread this message is in, or NULL
  */
-API_PREFIX borogove_event_handler_token borogove_client_add_call_ring_listener(void *client, void (*handler) (void*, void*), void *handler__context);
+API_PREFIX void borogove_chat_message_builder_set_thread_id(void *chat_message_builder, const char *value);
 
 /**
- * Event fired when a call is retracted or hung up
- * 
- * @param handler takes two arguments, the associated Chat ID and Session ID
- * @returns token for use with removeEventListener
+ * Array of attachments to this message
  */
-API_PREFIX borogove_event_handler_token borogove_client_add_call_retract_listener(void *client, void (*handler) (const char*, const char*, void*), void *handler__context);
+API_PREFIX size_t borogove_chat_message_builder_attachments(void *chat_message_builder, void ***outPtr);
 
 /**
- * Event fired when an outgoing call starts ringing
- * 
- * @param handler takes one argument, the associated Session
- * @returns token for use with removeEventListener
+ * Body text of this message or NULL
  */
-API_PREFIX borogove_event_handler_token borogove_client_add_call_ringing_listener(void *client, void (*handler) (void*, void*), void *handler__context);
+API_PREFIX const char *borogove_chat_message_builder_text(void *chat_message_builder);
 
 /**
- * Event fired when an existing call changes status (connecting, failed, etc)
- * 
- * @param handler takes one argument, the associated Session
- * @returns token for use with removeEventListener
+ * Body text of this message or NULL
  */
-API_PREFIX borogove_event_handler_token borogove_client_add_call_update_status_listener(void *client, void (*handler) (void*, void*), void *handler__context);
+API_PREFIX void borogove_chat_message_builder_set_text(void *chat_message_builder, const char *value);
 
-/**
- * Event fired when a call is asking for media to send
- * 
- * @param handler takes three arguments, the call Session,
- *        a boolean indicating if audio is desired,
- *        and a boolean indicating if video is desired
- * @returns token for use with removeEventListener
+/**
+ * Language code for the body text
  */
-API_PREFIX borogove_event_handler_token borogove_client_add_call_media_listener(void *client, void (*handler) (void*, bool, bool, void*), void *handler__context);
+API_PREFIX const char *borogove_chat_message_builder_lang(void *chat_message_builder);
 
 /**
- * Event fired when call has a new MediaStreamTrack to play
- * 
- * @param handler takes three arguments, the associated Chat ID,
- *        the new MediaStreamTrack, and an array of any associated MediaStreams
- * @returns token for use with removeEventListener
+ * Language code for the body text
  */
-API_PREFIX borogove_event_handler_token borogove_client_add_call_track_listener(void *client, void (*handler) (void*, void*, void**, size_t, void*), void *handler__context);
+API_PREFIX void borogove_chat_message_builder_set_lang(void *chat_message_builder, const char *value);
 
 /**
- * Let the SDK know the UI is in the foreground
+ * Direction of this message
  */
-API_PREFIX void borogove_client_set_in_foreground(void *client);
+API_PREFIX enum borogove_message_direction borogove_chat_message_builder_direction(void *chat_message_builder);
 
 /**
- * Let the SDK know the UI is in the foreground
+ * Direction of this message
  */
-API_PREFIX void borogove_client_set_not_in_foreground(void *client);
+API_PREFIX void borogove_chat_message_builder_set_direction(void *chat_message_builder, enum borogove_message_direction value);
 
 /**
- * ID of this Chat
+ * Status of this message
  */
-API_PREFIX const char *borogove_chat_chat_id(void *chat);
+API_PREFIX enum borogove_message_status borogove_chat_message_builder_status(void *chat_message_builder);
 
 /**
- * Current state of this chat
+ * Status of this message
  */
-API_PREFIX enum borogove_ui_state borogove_chat_ui_state(void *chat);
+API_PREFIX void borogove_chat_message_builder_set_status(void *chat_message_builder, enum borogove_message_status value);
 
 /**
- * Is this chat blocked?
+ * Human readable text to go with the status
  */
-API_PREFIX bool borogove_chat_is_blocked(void *chat);
+API_PREFIX const char *borogove_chat_message_builder_status_text(void *chat_message_builder);
 
 /**
- * The most recent message in this chat
+ * Human readable text to go with the status
  */
-API_PREFIX void *borogove_chat_last_message(void *chat);
+API_PREFIX void borogove_chat_message_builder_set_status_text(void *chat_message_builder, const char *value);
 
 /**
- * Has this chat ever been bookmarked?
+ * Array of past versions of this message, if it has been edited
  */
-API_PREFIX bool borogove_chat_is_bookmarked(void *chat);
+API_PREFIX void borogove_chat_message_builder_set_versions(void *chat_message_builder, void *const *inPtr, size_t count);
 
 /**
- * Fetch a page of messages before some point
- * 
- * @param beforeId id of the message to look before
- * @param beforeTime timestamp of the message to look before,
- *        String in format YYYY-MM-DDThh:mm:ss[.sss]+00:00
- * @param handler which receives an array of ChatMessage that are found
+ * Array of past versions of this message, if it has been edited
  */
-API_PREFIX void borogove_chat_get_messages_before(void *chat, const char *beforeId, const char *beforeTime, void (*handler) (void**, size_t, void *handler__context), void *handler__context);
+API_PREFIX size_t borogove_chat_message_builder_versions(void *chat_message_builder, void ***outPtr);
 
 /**
- * Fetch a page of messages after some point
- * 
- * @param afterId id of the message to look after
- * @param afterTime timestamp of the message to look after,
- *        String in format YYYY-MM-DDThh:mm:ss[.sss]+00:00
- * @param handler which receives an array of ChatMessage that are found
+ * Information about the encryption used by the sender of
+ * this message.
  */
-API_PREFIX void borogove_chat_get_messages_after(void *chat, const char *afterId, const char *afterTime, void (*handler) (void**, size_t, void *handler__context), void *handler__context);
+API_PREFIX void *borogove_chat_message_builder_encryption(void *chat_message_builder);
 
 /**
- * Fetch a page of messages around (before, including, and after) some point
- * 
- * @param aroundId id of the message to look around
- * @param aroundTime timestamp of the message to look around,
- *        String in format YYYY-MM-DDThh:mm:ss[.sss]+00:00
- * @param handler which receives an array of ChatMessage that are found
+ * Information about the encryption used by the sender of
+ * this message.
  */
-API_PREFIX void borogove_chat_get_messages_around(void *chat, const char *aroundId, const char *aroundTime, void (*handler) (void**, size_t, void *handler__context), void *handler__context);
+API_PREFIX void borogove_chat_message_builder_set_encryption(void *chat_message_builder, void *value);
 
 /**
- * Send a message to this Chat
+ * Add an attachment to this message
  * 
- * @param message the ChatMessageBuilder to send
+ * @param attachment The ChatAttachment to add
  */
-API_PREFIX void borogove_chat_send_message(void *chat, void *message);
+API_PREFIX void borogove_chat_message_builder_add_attachment(void *chat_message_builder, void *attachment);
 
 /**
- * Signals that all messages up to and including this one have probably
- * been displayed to the user
- * 
- * @param message the ChatMessage most recently displayed
+ * Set rich text using an HTML string
+ * Also sets the plain text body appropriately
  */
-API_PREFIX void borogove_chat_mark_read_up_to(void *chat, void *message);
+API_PREFIX void borogove_chat_message_builder_set_html(void *chat_message_builder, const char *html);
 
 /**
- * Save this Chat on the server
+ * The ID of the Chat this message is associated with
  */
-API_PREFIX void borogove_chat_bookmark(void *chat);
+API_PREFIX const char *borogove_chat_message_builder_chat_id(void *chat_message_builder);
 
 /**
- * Get the list of IDs of participants in this Chat
- * 
- * @returns array of IDs
+ * The ID of the sender of this message
  */
-API_PREFIX size_t borogove_chat_get_participants(void *chat, const char ***outPtr);
+API_PREFIX const char *borogove_chat_message_builder_get_sender_id(void *chat_message_builder);
 
 /**
- * Get the details for one participant in this Chat
+ * Build this builder into an immutable ChatMessage
  * 
- * @param participantId the ID of the participant to look up
+ * @returns the ChatMessage
  */
-API_PREFIX void *borogove_chat_get_participant_details(void *chat, const char *participantId);
+API_PREFIX void *borogove_chat_message_builder_build(void *chat_message_builder);
+
+API_PREFIX const char *borogove_participant_display_name(void *participant);
+
+API_PREFIX const char *borogove_participant_photo_uri(void *participant);
+
+API_PREFIX const char *borogove_participant_placeholder_uri(void *participant);
+
+API_PREFIX bool borogove_participant_is_self(void *participant);
+
+API_PREFIX void borogove_participant_profile(void *participant, void *client, void (*handler) (void*, void *handler__context), void *handler__context);
 
 /**
- * Correct an already-send message by replacing it with a new one
- * 
- * @param localId the localId of the message to correct
- *        must be the localId of the first version ever sent, not a subsequent correction
- * @param message the new ChatMessage to replace it with
+ * All items in the profile
  */
-API_PREFIX void borogove_chat_correct_message(void *chat, const char *localId, void *message);
+API_PREFIX size_t borogove_profile_items(void *profile, void ***outPtr);
+
+API_PREFIX const char *borogove_profile_item_id(void *profile_item);
+
+API_PREFIX const char *borogove_profile_item_key(void *profile_item);
+
+API_PREFIX size_t borogove_profile_item_parameters(void *profile_item, void ***outPtr);
+
+API_PREFIX size_t borogove_profile_item_text(void *profile_item, const char ***outPtr);
+
+API_PREFIX size_t borogove_profile_item_uri(void *profile_item, const char ***outPtr);
+
+API_PREFIX size_t borogove_profile_item_date(void *profile_item, const char ***outPtr);
+
+API_PREFIX size_t borogove_profile_item_time(void *profile_item, const char ***outPtr);
+
+API_PREFIX size_t borogove_profile_item_datetime(void *profile_item, const char ***outPtr);
+
+API_PREFIX size_t borogove_profile_item_language_tag(void *profile_item, const char ***outPtr);
 
 /**
- * Add new reaction to a message in this Chat
+ * Create a basic persistence layer that persists nothing
  * 
- * @param m ChatMessage to react to
- * @param reaction emoji of the reaction
+ * @returns new persistence layer
  */
-API_PREFIX void borogove_chat_add_reaction(void *chat, void *m, void *reaction);
+API_PREFIX void *borogove_persistence_dummy_new();
 
 /**
- * Remove an already-sent reaction from a message
+ * Receive a new push notification from some external system
  * 
- * @param m ChatMessage to remove the reaction from
- * @param reaction the emoji to remove
+ * @param data the raw data from the push
+ * @param persistence the persistence layer to write into
+ * @returns a Notification representing the push data
  */
-API_PREFIX void borogove_chat_remove_reaction(void *chat, void *m, void *reaction);
+API_PREFIX void *borogove_push_receive(const char *data, void *persistence);
 
 /**
- * Call this whenever the user is typing, can call on every keystroke
- * 
- * @param threadId optional, what thread the user has selected if any
- * @param content optional, what the user has typed so far
+ * The title
  */
-API_PREFIX void borogove_chat_typing(void *chat, const char *threadId, const char *content);
+API_PREFIX const char *borogove_notification_title(void *notification);
 
 /**
- * Call this whenever the user makes a chat or thread "active" in your UX
- * If you call this with true you MUST later call it will false
- * 
- * @param active true if the chat is "active", false otherwise
- * @param threadId optional, what thread the user has selected if any
+ * The body text
  */
-API_PREFIX void borogove_chat_set_active(void *chat, bool active, const char *threadId);
+API_PREFIX const char *borogove_notification_body(void *notification);
 
 /**
- * Archive this chat
+ * The ID of the associated account
  */
-API_PREFIX void borogove_chat_close(void *chat);
+API_PREFIX const char *borogove_notification_account_id(void *notification);
 
 /**
- * Pin or unpin this chat
+ * The ID of the associated chat
  */
-API_PREFIX void borogove_chat_toggle_pinned(void *chat);
+API_PREFIX const char *borogove_notification_chat_id(void *notification);
 
 /**
- * Block this chat so it will not re-open
+ * The ID of the message sender
  */
-API_PREFIX void borogove_chat_block(void *chat, bool reportSpam, void *spamMessage, bool onServer);
+API_PREFIX const char *borogove_notification_sender_id(void *notification);
 
 /**
- * Unblock this chat so it will open again
+ * The serverId of the message
  */
-API_PREFIX void borogove_chat_unblock(void *chat, bool onServer);
+API_PREFIX const char *borogove_notification_message_id(void *notification);
 
 /**
- * Update notification preferences
+ * The type of the message
  */
-API_PREFIX void borogove_chat_set_notifications(void *chat, bool filtered, bool mention, bool reply);
+API_PREFIX enum borogove_message_type borogove_notification_type(void *notification);
 
 /**
- * Should notifications be filtered?
+ * If this is a call notification, the call status
  */
-API_PREFIX bool borogove_chat_notifications_filtered(void *chat);
+API_PREFIX const char *borogove_notification_call_status(void *notification);
 
 /**
- * Should a mention produce a notification?
+ * If this is a call notification, the call session ID
  */
-API_PREFIX bool borogove_chat_notify_mention(void *chat);
+API_PREFIX const char *borogove_notification_call_sid(void *notification);
 
 /**
- * Should a reply produce a notification?
+ * Optional image URI
  */
-API_PREFIX bool borogove_chat_notify_reply(void *chat);
+API_PREFIX const char *borogove_notification_image_uri(void *notification);
 
 /**
- * An ID of the most recent message in this chat
+ * Optional language code
  */
-API_PREFIX const char *borogove_chat_last_message_id(void *chat);
+API_PREFIX const char *borogove_notification_lang(void *notification);
 
 /**
- * Get the URI image to represent this Chat, or null
+ * Optional date and time of the event
  */
-API_PREFIX const char *borogove_chat_get_photo(void *chat);
+API_PREFIX const char *borogove_notification_timestamp(void *notification);
 
 /**
- * Get the URI to a placeholder image to represent this Chat
+ * Remove an event listener of any type, no matter how it was added
+ * or what event it is for.
+ * 
+ * @param token the token that was returned when the listener was added
  */
-API_PREFIX const char *borogove_chat_get_placeholder(void *chat);
+API_PREFIX void borogove_event_emitter_remove_event_listener(void *event_emitter, borogove_event_handler_token token);
 
 /**
- * An ID of the last message displayed to the user
+ * Create a new Client to connect to a particular account
+ * 
+ * @param accountId the account to connect to
+ * @param persistence the persistence layer to use for storage
  */
-API_PREFIX const char *borogove_chat_read_up_to(void *chat);
+API_PREFIX void *borogove_client_new(const char *accountId, void *persistence);
 
 /**
- * The number of message that have not yet been displayed to the user
+ * Set to false to suppress sending available presence
  */
-API_PREFIX int borogove_chat_unread_count(void *chat);
+API_PREFIX void borogove_client_set_send_available(void *client, bool value);
 
 /**
- * A preview of the chat, such as the most recent message body
+ * Start this client running and trying to connect to the server
  */
-API_PREFIX const char *borogove_chat_preview(void *chat);
+API_PREFIX void borogove_client_start(void *client);
 
 /**
- * Set the display name to use for this chat
+ * Gets the client ready to use but does not connect to the server
  * 
- * @param displayName String to use as display name
+ * @param handler which receives true once the Client is ready
  */
-API_PREFIX void borogove_chat_set_display_name(void *chat, const char *displayName);
+API_PREFIX void borogove_client_start_offline(void *client, void (*handler) (bool, void *handler__context), void *handler__context);
 
 /**
- * The display name of this Chat
+ * Destroy local data for this account
+ * 
+ * @param completely if true chats, messages, etc will be deleted as well
  */
-API_PREFIX const char *borogove_chat_get_display_name(void *chat);
+API_PREFIX void borogove_client_logout(void *client, bool completely);
 
 /**
- * Set if this chat is to be trusted with our presence, etc
+ * Sets the password to be used in response to the password needed event
  * 
- * @param trusted Bool if trusted or not
+ * @param password
  */
-API_PREFIX void borogove_chat_set_trusted(void *chat, bool trusted);
+API_PREFIX void borogove_client_use_password(void *client, const char *password);
 
 /**
- * Is this a chat with an entity we trust to see our online status?
+ * Get the account ID for this Client
+ * 
+ * @returns account id
  */
-API_PREFIX bool borogove_chat_is_trusted(void *chat);
+API_PREFIX const char *borogove_client_account_id(void *client);
 
 /**
- * @returns if this chat is currently syncing with the server
+ * Get the current display name for this account
+ * 
+ * @returns display name
  */
-API_PREFIX bool borogove_chat_syncing(void *chat);
+API_PREFIX const char *borogove_client_display_name(void *client);
 
 /**
- * Can audio calls be started in this Chat?
+ * Set the current profile for this account on the server
+ * 
+ * @param profile to set
+ * @param publicAccess set the access for the profile to public
  */
-API_PREFIX bool borogove_chat_can_audio_call(void *chat);
+API_PREFIX void borogove_client_set_profile(void *client, void *profile, bool publicAccess);
 
 /**
- * Can video calls be started in this Chat?
+ * Turn a file into a ChatAttachment for attaching to a ChatMessage
+ * 
+ * @param source The AttachmentSource to use
+ * @param handler which receives a ChatAttachment or null
  */
-API_PREFIX bool borogove_chat_can_video_call(void *chat);
+API_PREFIX void borogove_client_prepare_attachment(void *client, void *source, void (*handler) (void*, void *handler__context), void *handler__context);
 
 /**
- * Start a new call in this Chat
- * 
- * @param audio do we want audio in this call
- * @param video do we want video in this call
+ * @returns array of open chats, sorted by last activity
  */
-API_PREFIX void *borogove_chat_start_call(void *chat, bool audio, bool video);
+API_PREFIX size_t borogove_client_get_chats(void *client, void ***outPtr);
 
 /**
- * Accept any incoming calls in this Chat
+ * Search for chats the user can start or join
+ * 
+ * @param q the search query to use
+ * @param callback takes two arguments, the query that was used and the array of results, and returns true if we should stop searching
  */
-API_PREFIX void borogove_chat_accept_call(void *chat);
+API_PREFIX void borogove_client_find_available_chats(void *client, const char *q, bool (*callback) (const char*, void**, size_t, void*), void *callback__context);
 
 /**
- * Hangup or reject any calls in this chat
+ * Start or join a chat from the search results
+ * 
+ * @returns the chat that was started
  */
-API_PREFIX void borogove_chat_hangup(void *chat);
+API_PREFIX void *borogove_client_start_chat(void *client, void *availableChat);
 
 /**
- * The current status of a call in this chat
+ * Find a chat by id
+ * 
+ * @returns the chat if known, or NULL
  */
-API_PREFIX enum borogove_calls_call_status borogove_chat_call_status(void *chat);
+API_PREFIX void *borogove_client_get_chat(void *client, const char *chatId);
 
 /**
- * A DTMFSender for a call in this chat, or NULL
+ * Enable push notifications
+ * 
+ * @param push_service the address of a push proxy
+ * @param vapid_private_pkcs8 the private key for signing JWT of the push service
+ * @param endpoint the final target for the push proxy to forward to
+ * @param p256dh A P-256 uncompressed point in ANSI X9.62 format
+ * @param auth Random 16 octed value
+ * @param grace Grace period during which not to generate push if another app is active for same account, in seconds (negative for none)
+ * @param claims Optional additional JWT claims as key then value
  */
-API_PREFIX void *borogove_chat_dtmf(void *chat);
+API_PREFIX void borogove_client_enable_push(void *client, const char *push_service, const char *endpoint, const unsigned char *p256dh, size_t p256dh__len, const unsigned char *auth, size_t auth__len, int grace, const unsigned char *vapid_private_pkcs8, size_t vapid_private_pkcs8__len, const char *const *claims, size_t claims__len);
 
 /**
- * All video tracks in all active calls in this chat
+ * Event fired when client needs a password for authentication
+ * 
+ * @param handler takes one argument, the Client that needs a password
+ * @returns token for use with removeEventListener
  */
-API_PREFIX size_t borogove_chat_video_tracks(void *chat, void ***outPtr);
+API_PREFIX borogove_event_handler_token borogove_client_add_password_needed_listener(void *client, void (*handler) (void*, void*), void *handler__context);
 
 /**
- * Get encryption mode for this chat
+ * Event fired when client is connected and fully synchronized
+ * 
+ * @param handler takes no arguments
+ * @returns token for use with removeEventListener
  */
-API_PREFIX const char *borogove_chat_encryption_mode(void *chat);
+API_PREFIX borogove_event_handler_token borogove_client_add_status_online_listener(void *client, void (*handler) (void*), void *handler__context);
 
 /**
- * Can the user send messages to this chat?
+ * Event fired when client is disconnected
+ * 
+ * @param handler takes no arguments
+ * @returns token for use with removeEventListener
  */
-API_PREFIX bool borogove_chat_can_send(void *chat);
+API_PREFIX borogove_event_handler_token borogove_client_add_status_offline_listener(void *client, void (*handler) (void*), void *handler__context);
 
 /**
- * Invite another chat's participants to participate in this one
+ * Event fired when connection fails with a fatal error and will not be retried
+ * 
+ * @param handler takes no arguments
+ * @returns token for use with removeEventListener
  */
-API_PREFIX void borogove_chat_invite(void *chat, void *other, const char *threadId);
+API_PREFIX borogove_event_handler_token borogove_client_add_connection_failed_listener(void *client, void (*handler) (void*), void *handler__context);
 
 /**
- * Can the user invite others to this chat?
+ * Event fired when TLS checks fail, to give client the chance to override
+ * 
+ * @param handler takes two arguments, the PEM of the cert and an array of DNS names, and must return true to accept or false to reject
+ * @returns token for use with removeEventListener
  */
-API_PREFIX bool borogove_chat_can_invite(void *chat);
+API_PREFIX borogove_event_handler_token borogove_client_add_tls_check_listener(void *client, bool (*handler) (const char*, const char**, size_t, void*), void *handler__context);
 
 /**
- * This chat's primary mode of interaction is via commands
+ * Event fired when a new ChatMessage comes in on any Chat
+ * Also fires when status of a ChatMessage changes,
+ * when a ChatMessage is edited, or when a reaction is added
+ * 
+ * @param handler takes two arguments, the ChatMessage and ChatMessageEvent enum describing what happened
+ * @returns token for use with removeEventListener
  */
-API_PREFIX bool borogove_chat_is_app(void *chat);
+API_PREFIX borogove_event_handler_token borogove_client_add_chat_message_listener(void *client, void (*handler) (void*, int, void*), void *handler__context);
 
 /**
- * Does this chat provide a menu of commands?
+ * Event fired when syncing a new ChatMessage that was send when offline.
+ * Normally you don't want this, but it may be useful if you want to notify on app start.
+ * 
+ * @param handler takes one argument, the ChatMessage
+ * @returns token for use with removeEventListener
  */
-API_PREFIX bool borogove_chat_has_commands(void *chat);
-
-API_PREFIX void borogove_chat_commands(void *chat, void (*handler) (void**, size_t, void *handler__context), void *handler__context);
+API_PREFIX borogove_event_handler_token borogove_client_add_sync_message_listener(void *client, void (*handler) (void*, void*), void *handler__context);
 
 /**
- * The Participant that originally invited us to this Chat, if we were invited
+ * Event fired when a Chat's metadata is updated, or when a new Chat is added
+ * 
+ * @param handler takes one argument, an array of Chats that were updated
+ * @returns token for use with removeEventListener
  */
-API_PREFIX void *borogove_chat_invited_by(void *chat);
-
-API_PREFIX const char *borogove_calls_media_stream_track_id(void *media_stream_track);
-
-API_PREFIX bool borogove_calls_media_stream_track_muted(void *media_stream_track);
-
-API_PREFIX const char *borogove_calls_media_stream_track_kind(void *media_stream_track);
-
-API_PREFIX size_t borogove_calls_media_stream_track_supported_audio_formats(void *media_stream_track, void ***outPtr);
+API_PREFIX borogove_event_handler_token borogove_client_add_chats_updated_listener(void *client, void (*handler) (void**, size_t, void*), void *handler__context);
 
 /**
- * Event fired for new inbound audio frame
+ * Event fired when a new call comes in
  * 
- * @param callback takes three arguments, the Signed 16-bit PCM data, the clock rate, and the number of channels
+ * @param handler takes one argument, the call Session
+ * @returns token for use with removeEventListener
  */
-API_PREFIX void borogove_calls_media_stream_track_add_pcm_listener(void *media_stream_track, void (*callback) (short*, size_t, int, int, void*), void *callback__context);
+API_PREFIX borogove_event_handler_token borogove_client_add_call_ring_listener(void *client, void (*handler) (void*, void*), void *handler__context);
 
 /**
- * Event fired when ready for next outbound audio frame
+ * Event fired when a call is retracted or hung up
  * 
- * @param callback
+ * @param handler takes two arguments, the associated Chat ID and Session ID
+ * @returns token for use with removeEventListener
  */
-API_PREFIX void borogove_calls_media_stream_track_add_ready_for_pcm_listener(void *media_stream_track, void (*callback) (void*), void *callback__context);
+API_PREFIX borogove_event_handler_token borogove_client_add_call_retract_listener(void *client, void (*handler) (const char*, const char*, void*), void *handler__context);
 
 /**
- * Send new audio to this track
+ * Event fired when an outgoing call starts ringing
  * 
- * @param pcm 16-bit signed linear PCM data (interleaved)
- * @param clockRate the sampling rate of the data
- * @param channels the number of audio channels
+ * @param handler takes one argument, the associated Session
+ * @returns token for use with removeEventListener
  */
-API_PREFIX void borogove_calls_media_stream_track_write_pcm(void *media_stream_track, const short *pcm, size_t pcm__len, int clockRate, int channels);
-
-API_PREFIX void borogove_calls_media_stream_track_stop(void *media_stream_track);
-
-API_PREFIX void *borogove_calls_audio_format_new(const char *format, unsigned char payloadType, int clockRate, int channels);
-
-API_PREFIX int borogove_calls_audio_format_clock_rate(void *audio_format);
-
-API_PREFIX int borogove_calls_audio_format_channels(void *audio_format);
-
-API_PREFIX const char *borogove_command_name(void *command);
+API_PREFIX borogove_event_handler_token borogove_client_add_call_ringing_listener(void *client, void (*handler) (void*, void*), void *handler__context);
 
 /**
- * Start a new session for this command. May have side effects!
+ * Event fired when an existing call changes status (connecting, failed, etc)
+ * 
+ * @param handler takes one argument, the associated Session
+ * @returns token for use with removeEventListener
  */
-API_PREFIX void borogove_command_execute(void *command, void (*handler) (void*, void *handler__context), void *handler__context);
-
-API_PREFIX const char *borogove_command_session_name(void *command_session);
-
-API_PREFIX const char *borogove_command_session_status(void *command_session);
-
-API_PREFIX size_t borogove_command_session_actions(void *command_session, void ***outPtr);
-
-API_PREFIX size_t borogove_command_session_forms(void *command_session, void ***outPtr);
-
-API_PREFIX void borogove_command_session_execute(void *command_session, const char *action, void *data, int formIdx, void (*handler) (void*, void *handler__context), void *handler__context);
-
-API_PREFIX const char *borogove_form_option_label(void *form_option);
-
-API_PREFIX const char *borogove_form_option_value(void *form_option);
+API_PREFIX borogove_event_handler_token borogove_client_add_call_update_status_listener(void *client, void (*handler) (void*, void*), void *handler__context);
 
 /**
- * Is this form entirely results / read-only?
+ * Event fired when a call is asking for media to send
+ * 
+ * @param handler takes three arguments, the call Session,
+ *        a boolean indicating if audio is desired,
+ *        and a boolean indicating if video is desired
+ * @returns token for use with removeEventListener
  */
-API_PREFIX bool borogove_form_is_result(void *form);
+API_PREFIX borogove_event_handler_token borogove_client_add_call_media_listener(void *client, void (*handler) (void*, bool, bool, void*), void *handler__context);
 
 /**
- * Title of this form
+ * Event fired when call has a new MediaStreamTrack to play
+ * 
+ * @param handler takes three arguments, the associated Chat ID,
+ *        the new MediaStreamTrack, and an array of any associated MediaStreams
+ * @returns token for use with removeEventListener
  */
-API_PREFIX const char *borogove_form_title(void *form);
+API_PREFIX borogove_event_handler_token borogove_client_add_call_track_listener(void *client, void (*handler) (void*, void*, void**, size_t, void*), void *handler__context);
 
 /**
- * URL to use instead of this form
+ * Let the SDK know the UI is in the foreground
  */
-API_PREFIX const char *borogove_form_url(void *form);
+API_PREFIX void borogove_client_set_in_foreground(void *client);
 
 /**
- * Items to render inside this form
+ * Let the SDK know the UI is in the foreground
  */
-API_PREFIX size_t borogove_form_items(void *form, void ***outPtr);
-
-API_PREFIX const char *borogove_form_item_text(void *form_item);
-
-API_PREFIX void *borogove_form_item_field(void *form_item);
-
-API_PREFIX void *borogove_form_item_section(void *form_item);
-
-API_PREFIX const char *borogove_form_item_status(void *form_item);
-
-API_PREFIX size_t borogove_form_item_table_header(void *form_item, void ***outPtr);
-
-API_PREFIX const char *borogove_form_field_name(void *form_field);
-
-API_PREFIX const char *borogove_form_field_label(void *form_field);
-
-API_PREFIX const char *borogove_form_field_desc(void *form_field);
-
-API_PREFIX size_t borogove_form_field_value(void *form_field, const char ***outPtr);
-
-API_PREFIX bool borogove_form_field_required(void *form_field);
-
-API_PREFIX const char *borogove_form_field_type(void *form_field);
-
-API_PREFIX const char *borogove_form_field_datatype(void *form_field);
-
-API_PREFIX size_t borogove_form_field_options(void *form_field, void ***outPtr);
-
-API_PREFIX bool borogove_form_field_open(void *form_field);
-
-API_PREFIX const char *borogove_form_field_range_min(void *form_field);
-
-API_PREFIX const char *borogove_form_field_range_max(void *form_field);
-
-API_PREFIX const char *borogove_form_field_regex(void *form_field);
+API_PREFIX void borogove_client_set_not_in_foreground(void *client);
 
 /**
  * The ID of the Chat this search result represents
@@ -1429,40 +1477,36 @@ API_PREFIX const char *borogove_available_chat_note(void *available_chat);
  */
 API_PREFIX bool borogove_available_chat_is_channel(void *available_chat);
 
-API_PREFIX const char *borogove_calls_initiated_session_sid(void *initiated_session);
-
-API_PREFIX const char *borogove_calls_initiated_session_chat_id(void *initiated_session);
-
-API_PREFIX void borogove_calls_initiated_session_accept(void *initiated_session);
+API_PREFIX void *borogove_calls_media_stream_new();
 
-API_PREFIX void borogove_calls_initiated_session_hangup(void *initiated_session);
+/**
+ * Create default bidirectional audio track
+ */
+API_PREFIX void *borogove_calls_media_stream_make_audio();
 
-API_PREFIX void borogove_calls_initiated_session_add_media(void *initiated_session, void *const *streams, size_t streams__len);
+API_PREFIX void borogove_calls_media_stream_add_track(void *media_stream, void *track);
 
-API_PREFIX enum borogove_calls_call_status borogove_calls_initiated_session_call_status(void *initiated_session);
+API_PREFIX size_t borogove_calls_media_stream_get_tracks(void *media_stream, void ***outPtr);
 
-API_PREFIX size_t borogove_calls_initiated_session_audio_tracks(void *initiated_session, void ***outPtr);
+API_PREFIX const char *borogove_calls_session_sid(void *__self);
 
-API_PREFIX size_t borogove_calls_initiated_session_video_tracks(void *initiated_session, void ***outPtr);
+API_PREFIX const char *borogove_calls_session_chat_id(void *__self);
 
-API_PREFIX void *borogove_calls_initiated_session_dtmf(void *initiated_session);
+API_PREFIX void borogove_calls_session_accept(void *self);
 
-API_PREFIX void borogove_calls_initiated_session_supply_media(void *initiated_session, void *const *streams, size_t streams__len);
+API_PREFIX void borogove_calls_session_hangup(void *self);
 
-API_PREFIX void *borogove_calls_media_stream_new();
+API_PREFIX void borogove_calls_session_add_media(void *self, void *const *streams, size_t streams__len);
 
-/**
- * Create default bidirectional audio track
- */
-API_PREFIX void *borogove_calls_media_stream_make_audio();
+API_PREFIX enum borogove_calls_call_status borogove_calls_session_call_status(void *self);
 
-API_PREFIX void borogove_calls_media_stream_add_track(void *media_stream, void *track);
+API_PREFIX size_t borogove_calls_session_audio_tracks(void *self, void ***outPtr);
 
-API_PREFIX size_t borogove_calls_media_stream_get_tracks(void *media_stream, void ***outPtr);
+API_PREFIX size_t borogove_calls_session_video_tracks(void *self, void ***outPtr);
 
-API_PREFIX void *borogove_form_submit_builder_new();
+API_PREFIX void *borogove_calls_session_dtmf(void *self);
 
-API_PREFIX void borogove_form_submit_builder_add(void *form_submit_builder, const char *k, const char *v);
+API_PREFIX void borogove_calls_initiated_session_supply_media(void *initiated_session, void *const *streams, size_t streams__len);
 
 API_PREFIX void *borogove_attachment_source_new(const char *path, const char *mime);
 
diff --git a/Sources/c_borogove/src/HaxeCBridge.cpp b/Sources/c_borogove/src/HaxeCBridge.cpp
index c0afba6..88a31a3 100644
--- a/Sources/c_borogove/src/HaxeCBridge.cpp
+++ b/Sources/c_borogove/src/HaxeCBridge.cpp
@@ -58,187 +58,187 @@
 #include <sys/thread/_Thread/Thread_Impl_.h>
 #endif
 
-HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2056_mainThreadInit,"HaxeCBridge","mainThreadInit",0x6f09ae5b,"HaxeCBridge.mainThreadInit","HaxeCBridge.hx",2056,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2071_mainThreadRun,"HaxeCBridge","mainThreadRun",0xa4afa660,"HaxeCBridge.mainThreadRun","HaxeCBridge.hx",2071,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2161_retainHaxeArray,"HaxeCBridge","retainHaxeArray",0x7373bc46,"HaxeCBridge.retainHaxeArray","HaxeCBridge.hx",2161,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2170_retainHaxeObject,"HaxeCBridge","retainHaxeObject",0xef200772,"HaxeCBridge.retainHaxeObject","HaxeCBridge.hx",2170,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2180_retainHaxeString,"HaxeCBridge","retainHaxeString",0xeb10b184,"HaxeCBridge.retainHaxeString","HaxeCBridge.hx",2180,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2187_retainPtr,"HaxeCBridge","retainPtr",0x2c61e661,"HaxeCBridge.retainPtr","HaxeCBridge.hx",2187,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2200_releaseHaxePtr,"HaxeCBridge","releaseHaxePtr",0x5df2fc29,"HaxeCBridge.releaseHaxePtr","HaxeCBridge.hx",2200,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2213_isMainThread,"HaxeCBridge","isMainThread",0x6f71c035,"HaxeCBridge.isMainThread","HaxeCBridge.hx",2213,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2218_endMainThread,"HaxeCBridge","endMainThread",0x0d9deed6,"HaxeCBridge.endMainThread","HaxeCBridge.hx",2218,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2107_mainThreadInit,"HaxeCBridge","mainThreadInit",0x6f09ae5b,"HaxeCBridge.mainThreadInit","HaxeCBridge.hx",2107,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2122_mainThreadRun,"HaxeCBridge","mainThreadRun",0xa4afa660,"HaxeCBridge.mainThreadRun","HaxeCBridge.hx",2122,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2212_retainHaxeArray,"HaxeCBridge","retainHaxeArray",0x7373bc46,"HaxeCBridge.retainHaxeArray","HaxeCBridge.hx",2212,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2221_retainHaxeObject,"HaxeCBridge","retainHaxeObject",0xef200772,"HaxeCBridge.retainHaxeObject","HaxeCBridge.hx",2221,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2231_retainHaxeString,"HaxeCBridge","retainHaxeString",0xeb10b184,"HaxeCBridge.retainHaxeString","HaxeCBridge.hx",2231,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2238_retainPtr,"HaxeCBridge","retainPtr",0x2c61e661,"HaxeCBridge.retainPtr","HaxeCBridge.hx",2238,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2251_releaseHaxePtr,"HaxeCBridge","releaseHaxePtr",0x5df2fc29,"HaxeCBridge.releaseHaxePtr","HaxeCBridge.hx",2251,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2264_isMainThread,"HaxeCBridge","isMainThread",0x6f71c035,"HaxeCBridge.isMainThread","HaxeCBridge.hx",2264,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_74d844958d4dcf5a_2269_endMainThread,"HaxeCBridge","endMainThread",0x0d9deed6,"HaxeCBridge.endMainThread","HaxeCBridge.hx",2269,0xa18550d8)
 
 void HaxeCBridge::mainThreadInit(::cpp::Function< bool  () > isMainThreadCb){
-            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2056_mainThreadInit)
-HXLINE(2062)		::_HaxeCBridge::Internal_obj::isMainThreadCb = isMainThreadCb;
-HXLINE(2063)		::_HaxeCBridge::Internal_obj::mainThreadWaitLock = ::sys::thread::_Thread::Thread_Impl__obj::get_events(::sys::thread::_Thread::HaxeThread_obj::current())->waitLock;
+            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2107_mainThreadInit)
+HXLINE(2113)		::_HaxeCBridge::Internal_obj::isMainThreadCb = isMainThreadCb;
+HXLINE(2114)		::_HaxeCBridge::Internal_obj::mainThreadWaitLock = ::sys::thread::_Thread::Thread_Impl__obj::get_events(::sys::thread::_Thread::HaxeThread_obj::current())->waitLock;
             	}
 
 
 void HaxeCBridge::mainThreadRun(::cpp::Function< void  () > processNativeCalls,::cpp::Function< bool  () > hasPendingNativeCalls,::cpp::Function< void  (const char*) > onUnhandledException){
-            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2071_mainThreadRun)
-HXLINE(2072)		try {
+            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2122_mainThreadRun)
+HXLINE(2123)		try {
             			HX_STACK_CATCHABLE( ::Dynamic, 0);
             		} catch( ::Dynamic _hx_e) {
             			if (_hx_e.IsClass<  ::Dynamic >() ){
             				HX_STACK_BEGIN_CATCH
             				 ::Dynamic _g = _hx_e;
-HXLINE(2074)				{
-HXLINE(2074)					null();
+HXLINE(2125)				{
+HXLINE(2125)					null();
             				}
-HXDLIN(2074)				 ::haxe::Exception _g1 = ::haxe::Exception_obj::caught(_g);
-HXDLIN(2074)				{
-HXLINE(2075)					 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
-HXDLIN(2075)					::Array< ::Dynamic> tmp = _g1->get_stack();
-HXDLIN(2075)					::String _hx_tmp1;
-HXDLIN(2075)					if (::hx::IsNull( tmp )) {
-HXLINE(2075)						_hx_tmp1 = HX_("null",87,9e,0e,49);
+HXDLIN(2125)				 ::haxe::Exception _g1 = ::haxe::Exception_obj::caught(_g);
+HXDLIN(2125)				{
+HXLINE(2126)					 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
+HXDLIN(2126)					::Array< ::Dynamic> tmp = _g1->get_stack();
+HXDLIN(2126)					::String _hx_tmp1;
+HXDLIN(2126)					if (::hx::IsNull( tmp )) {
+HXLINE(2126)						_hx_tmp1 = HX_("null",87,9e,0e,49);
             					}
             					else {
-HXLINE(2075)						_hx_tmp1 = ::haxe::_CallStack::CallStack_Impl__obj::toString(tmp);
+HXLINE(2126)						_hx_tmp1 = ::haxe::_CallStack::CallStack_Impl__obj::toString(tmp);
             					}
-HXDLIN(2075)					_hx_tmp(_g1, ::Dynamic(::hx::Anon_obj::Create(5)
+HXDLIN(2126)					_hx_tmp(_g1, ::Dynamic(::hx::Anon_obj::Create(5)
             						->setFixed(0,HX_("className",a3,92,3d,dc),HX_("HaxeCBridge",a6,7d,e3,bb))
             						->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,_hx_tmp1))
             						->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("mainThreadRun",28,d7,3c,8e))
             						->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("HaxeCBridge.hx",d8,50,85,a1))
-            						->setFixed(4,HX_("lineNumber",dd,81,22,76),2075)));
-HXLINE(2076)					onUnhandledException(::Std_obj::string(_g1).utf8_str());
+            						->setFixed(4,HX_("lineNumber",dd,81,22,76),2126)));
+HXLINE(2127)					onUnhandledException(::Std_obj::string(_g1).utf8_str());
             				}
             			}
             			else {
             				HX_STACK_DO_THROW(_hx_e);
             			}
             		}
-HXLINE(2083)		 ::sys::thread::EventLoop eventLoop = ::sys::thread::_Thread::Thread_Impl__obj::get_events(::sys::thread::_Thread::HaxeThread_obj::current());
-HXLINE(2085)		::Array< ::Dynamic> recycleRegular = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(2086)		::Array< ::Dynamic> recycleOneTimers = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(2087)		while(::_HaxeCBridge::Internal_obj::mainThreadLoopActive){
-HXLINE(2088)			try {
+HXLINE(2134)		 ::sys::thread::EventLoop eventLoop = ::sys::thread::_Thread::Thread_Impl__obj::get_events(::sys::thread::_Thread::HaxeThread_obj::current());
+HXLINE(2136)		::Array< ::Dynamic> recycleRegular = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(2137)		::Array< ::Dynamic> recycleOneTimers = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(2138)		while(::_HaxeCBridge::Internal_obj::mainThreadLoopActive){
+HXLINE(2139)			try {
             				HX_STACK_CATCHABLE( ::Dynamic, 0);
-HXLINE(2090)				processNativeCalls();
-HXLINE(2093)				Float now = ::Sys_obj::time();
-HXDLIN(2093)				int eventsToRunIdx = 0;
-HXDLIN(2093)				Float nextEventAt = ( (Float)(-1) );
-HXDLIN(2093)				eventLoop->mutex->acquire();
-HXDLIN(2093)				while(eventLoop->waitLock->wait(((Float)0.0))){
+HXLINE(2141)				processNativeCalls();
+HXLINE(2144)				Float now = ::Sys_obj::time();
+HXDLIN(2144)				int eventsToRunIdx = 0;
+HXDLIN(2144)				Float nextEventAt = ( (Float)(-1) );
+HXDLIN(2144)				eventLoop->mutex->acquire();
+HXDLIN(2144)				while(eventLoop->waitLock->wait(((Float)0.0))){
             				}
-HXLINE(2093)				 ::sys::thread::_EventLoop::RegularEvent current = eventLoop->regularEvents;
-HXDLIN(2093)				while(::hx::IsNotNull( current )){
-HXLINE(2093)					if ((current->nextRunTime <= now)) {
-HXLINE(2093)						eventsToRunIdx = (eventsToRunIdx + 1);
-HXDLIN(2093)						recycleRegular[(eventsToRunIdx - 1)] = current;
-HXDLIN(2093)						 ::sys::thread::_EventLoop::RegularEvent current1 = current;
-HXDLIN(2093)						current1->nextRunTime = (current1->nextRunTime + current->interval);
+HXLINE(2144)				 ::sys::thread::_EventLoop::RegularEvent current = eventLoop->regularEvents;
+HXDLIN(2144)				while(::hx::IsNotNull( current )){
+HXLINE(2144)					if ((current->nextRunTime <= now)) {
+HXLINE(2144)						eventsToRunIdx = (eventsToRunIdx + 1);
+HXDLIN(2144)						recycleRegular[(eventsToRunIdx - 1)] = current;
+HXDLIN(2144)						 ::sys::thread::_EventLoop::RegularEvent current1 = current;
+HXDLIN(2144)						current1->nextRunTime = (current1->nextRunTime + current->interval);
 HXLINE( 220)						nextEventAt = ( (Float)(-2) );
             					}
             					else {
-HXLINE(2093)						bool _hx_tmp2;
-HXDLIN(2093)						if ((nextEventAt != -1)) {
-HXLINE(2093)							_hx_tmp2 = (current->nextRunTime < nextEventAt);
+HXLINE(2144)						bool _hx_tmp2;
+HXDLIN(2144)						if ((nextEventAt != -1)) {
+HXLINE(2144)							_hx_tmp2 = (current->nextRunTime < nextEventAt);
             						}
             						else {
-HXLINE(2093)							_hx_tmp2 = true;
+HXLINE(2144)							_hx_tmp2 = true;
             						}
-HXDLIN(2093)						if (_hx_tmp2) {
+HXDLIN(2144)						if (_hx_tmp2) {
 HXLINE( 222)							nextEventAt = current->nextRunTime;
             						}
             					}
 HXLINE( 224)					current = current->next;
             				}
-HXLINE(2093)				eventLoop->mutex->release();
-HXDLIN(2093)				int _g2 = 0;
-HXDLIN(2093)				int _g3 = eventsToRunIdx;
-HXDLIN(2093)				while((_g2 < _g3)){
-HXLINE(2093)					_g2 = (_g2 + 1);
-HXDLIN(2093)					int i = (_g2 - 1);
-HXDLIN(2093)					if (!(recycleRegular->__get(i).StaticCast<  ::sys::thread::_EventLoop::RegularEvent >()->cancelled)) {
-HXLINE(2093)						recycleRegular->__get(i).StaticCast<  ::sys::thread::_EventLoop::RegularEvent >()->run();
+HXLINE(2144)				eventLoop->mutex->release();
+HXDLIN(2144)				int _g2 = 0;
+HXDLIN(2144)				int _g3 = eventsToRunIdx;
+HXDLIN(2144)				while((_g2 < _g3)){
+HXLINE(2144)					_g2 = (_g2 + 1);
+HXDLIN(2144)					int i = (_g2 - 1);
+HXDLIN(2144)					if (!(recycleRegular->__get(i).StaticCast<  ::sys::thread::_EventLoop::RegularEvent >()->cancelled)) {
+HXLINE(2144)						recycleRegular->__get(i).StaticCast<  ::sys::thread::_EventLoop::RegularEvent >()->run();
             					}
-HXDLIN(2093)					recycleRegular[i] = null();
+HXDLIN(2144)					recycleRegular[i] = null();
             				}
 HXLINE( 234)				eventsToRunIdx = 0;
-HXLINE(2093)				eventLoop->mutex->acquire();
-HXDLIN(2093)				::Array< ::Dynamic> _this = eventLoop->oneTimeEvents;
-HXDLIN(2093)				int _g_current = 0;
-HXDLIN(2093)				while((_g_current < _this->length)){
-HXLINE(2093)					 ::Dynamic _g_value = _this->__get(_g_current);
-HXDLIN(2093)					_g_current = (_g_current + 1);
-HXDLIN(2093)					if (::hx::IsNull( _g_value )) {
-HXLINE(2093)						goto _hx_goto_5;
+HXLINE(2144)				eventLoop->mutex->acquire();
+HXDLIN(2144)				::Array< ::Dynamic> _this = eventLoop->oneTimeEvents;
+HXDLIN(2144)				int _g_current = 0;
+HXDLIN(2144)				while((_g_current < _this->length)){
+HXLINE(2144)					 ::Dynamic _g_value = _this->__get(_g_current);
+HXDLIN(2144)					_g_current = (_g_current + 1);
+HXDLIN(2144)					if (::hx::IsNull( _g_value )) {
+HXLINE(2144)						goto _hx_goto_5;
             					}
             					else {
-HXLINE(2093)						eventsToRunIdx = (eventsToRunIdx + 1);
-HXDLIN(2093)						recycleOneTimers[(eventsToRunIdx - 1)] = _g_value;
-HXDLIN(2093)						eventLoop->oneTimeEvents[(_g_current - 1)] = null();
+HXLINE(2144)						eventsToRunIdx = (eventsToRunIdx + 1);
+HXDLIN(2144)						recycleOneTimers[(eventsToRunIdx - 1)] = _g_value;
+HXDLIN(2144)						eventLoop->oneTimeEvents[(_g_current - 1)] = null();
             					}
             				}
             				_hx_goto_5:;
-HXDLIN(2093)				eventLoop->oneTimeEventsIdx = 0;
-HXDLIN(2093)				bool hasPromisedEvents = (eventLoop->promisedEventsCount > 0);
-HXDLIN(2093)				eventLoop->mutex->release();
-HXDLIN(2093)				int _g4 = 0;
-HXDLIN(2093)				int _g5 = eventsToRunIdx;
-HXDLIN(2093)				while((_g4 < _g5)){
-HXLINE(2093)					_g4 = (_g4 + 1);
-HXDLIN(2093)					int i1 = (_g4 - 1);
-HXDLIN(2093)					recycleOneTimers->__get(i1)();
-HXDLIN(2093)					recycleOneTimers[i1] = null();
+HXDLIN(2144)				eventLoop->oneTimeEventsIdx = 0;
+HXDLIN(2144)				bool hasPromisedEvents = (eventLoop->promisedEventsCount > 0);
+HXDLIN(2144)				eventLoop->mutex->release();
+HXDLIN(2144)				int _g4 = 0;
+HXDLIN(2144)				int _g5 = eventsToRunIdx;
+HXDLIN(2144)				while((_g4 < _g5)){
+HXLINE(2144)					_g4 = (_g4 + 1);
+HXDLIN(2144)					int i1 = (_g4 - 1);
+HXDLIN(2144)					recycleOneTimers->__get(i1)();
+HXDLIN(2144)					recycleOneTimers[i1] = null();
             				}
-HXDLIN(2093)				if (eventLoop->isMainThread) {
-HXLINE(2093)					Float next = ::haxe::MainLoop_obj::tick();
-HXDLIN(2093)					if (::haxe::MainLoop_obj::hasEvents()) {
-HXLINE(2093)						eventsToRunIdx = (eventsToRunIdx + 1);
-HXDLIN(2093)						if ((nextEventAt > next)) {
+HXDLIN(2144)				if (eventLoop->isMainThread) {
+HXLINE(2144)					Float next = ::haxe::MainLoop_obj::tick();
+HXDLIN(2144)					if (::haxe::MainLoop_obj::hasEvents()) {
+HXLINE(2144)						eventsToRunIdx = (eventsToRunIdx + 1);
+HXDLIN(2144)						if ((nextEventAt > next)) {
 HXLINE( 264)							nextEventAt = next;
             						}
             					}
             				}
-HXLINE(2093)				if ((eventsToRunIdx > 0)) {
+HXLINE(2144)				if ((eventsToRunIdx > 0)) {
 HXLINE( 270)					nextEventAt = ( (Float)(-2) );
             				}
-HXLINE(2093)				Float eventTickInfo_nextEventAt = nextEventAt;
-HXLINE(2094)				if (hasPendingNativeCalls()) {
-HXLINE(2095)					continue;
+HXLINE(2144)				Float eventTickInfo_nextEventAt = nextEventAt;
+HXLINE(2145)				if (hasPendingNativeCalls()) {
+HXLINE(2146)					continue;
             				}
-HXLINE(2097)				Float _hx_switch_0 = eventTickInfo_nextEventAt;
+HXLINE(2148)				Float _hx_switch_0 = eventTickInfo_nextEventAt;
             				if (  (_hx_switch_0==( (Float)(-2) )) ){
-HXLINE(2098)					goto _hx_goto_7;
+HXLINE(2149)					goto _hx_goto_7;
             				}
             				if (  (_hx_switch_0==( (Float)(-1) )) ){
-HXLINE(2100)					bool _hx_tmp3;
-HXDLIN(2100)					if (::_HaxeCBridge::Internal_obj::mainThreadEndIfNoPending) {
-HXLINE(2100)						_hx_tmp3 = !(hasPromisedEvents);
+HXLINE(2151)					bool _hx_tmp3;
+HXDLIN(2151)					if (::_HaxeCBridge::Internal_obj::mainThreadEndIfNoPending) {
+HXLINE(2151)						_hx_tmp3 = !(hasPromisedEvents);
             					}
             					else {
-HXLINE(2100)						_hx_tmp3 = false;
+HXLINE(2151)						_hx_tmp3 = false;
             					}
-HXDLIN(2100)					if (_hx_tmp3) {
-HXLINE(2102)						goto _hx_goto_1;
+HXDLIN(2151)					if (_hx_tmp3) {
+HXLINE(2153)						goto _hx_goto_1;
             					}
-HXLINE(2104)					::_HaxeCBridge::Internal_obj::mainThreadWaitLock->wait(null());
-HXLINE(2099)					goto _hx_goto_7;
+HXLINE(2155)					::_HaxeCBridge::Internal_obj::mainThreadWaitLock->wait(null());
+HXLINE(2150)					goto _hx_goto_7;
             				}
             				/* default */{
-HXLINE(2106)					Float timeout = (eventTickInfo_nextEventAt - ::Sys_obj::time());
-HXLINE(2107)					::_HaxeCBridge::Internal_obj::mainThreadWaitLock->wait(::Math_obj::max(( (Float)(0) ),timeout));
+HXLINE(2157)					Float timeout = (eventTickInfo_nextEventAt - ::Sys_obj::time());
+HXLINE(2158)					::_HaxeCBridge::Internal_obj::mainThreadWaitLock->wait(::Math_obj::max(( (Float)(0) ),timeout));
             				}
             				_hx_goto_7:;
             			} catch( ::Dynamic _hx_e) {
             				if (_hx_e.IsClass<  ::Dynamic >() ){
             					HX_STACK_BEGIN_CATCH
             					 ::Dynamic _g6 = _hx_e;
-HXLINE(2109)					{
-HXLINE(2109)						null();
+HXLINE(2160)					{
+HXLINE(2160)						null();
             					}
-HXLINE(2110)					::String s;
-HXDLIN(2110)					if (::hx::IsNull( _g6 )) {
-HXLINE(2110)						s = HX_("null",87,9e,0e,49);
+HXLINE(2161)					::String s;
+HXDLIN(2161)					if (::hx::IsNull( _g6 )) {
+HXLINE(2161)						s = HX_("null",87,9e,0e,49);
             					}
             					else {
-HXLINE(2110)						s = ::Std_obj::string(_g6);
+HXLINE(2161)						s = ::Std_obj::string(_g6);
             					}
-HXDLIN(2110)					onUnhandledException(s.utf8_str());
+HXDLIN(2161)					onUnhandledException(s.utf8_str());
             				}
             				else {
             					HX_STACK_DO_THROW(_hx_e);
@@ -246,123 +246,123 @@ HXDLIN(2110)					onUnhandledException(s.utf8_str());
             			}
             		}
             		_hx_goto_1:;
-HXLINE(2115)		__hxcpp_collect(true);
+HXLINE(2166)		__hxcpp_collect(true);
             	}
 
 
 void** HaxeCBridge::retainHaxeArray(::cpp::VirtualArray haxeArray){
-            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2161_retainHaxeArray)
-HXLINE(2164)		void** ptr = (void**)haxeArray->getBase();
-HXLINE(2165)		::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXLINE(2166)		{
-HXLINE(2166)			 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN(2166)			if (::hx::IsNull( store )) {
-HXLINE(2166)				store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2212_retainHaxeArray)
+HXLINE(2215)		void** ptr = (void**)haxeArray->getBase();
+HXLINE(2216)		::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXLINE(2217)		{
+HXLINE(2217)			 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN(2217)			if (::hx::IsNull( store )) {
+HXLINE(2217)				store =  ::Dynamic(::hx::Anon_obj::Create(2)
             					->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             					->setFixed(1,HX_("value",71,7f,b8,31),haxeArray));
-HXDLIN(2166)				::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN(2217)				::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             			}
             			else {
-HXLINE(2166)				::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE(2217)				::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             			}
             		}
-HXLINE(2167)		return ptr;
+HXLINE(2218)		return ptr;
             	}
 
 
 void* HaxeCBridge::retainHaxeObject( ::Dynamic haxeObject){
-            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2170_retainHaxeObject)
-HXLINE(2172)		void* ptr = haxeObject.mPtr;
-HXLINE(2175)		::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXLINE(2176)		{
-HXLINE(2176)			 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN(2176)			if (::hx::IsNull( store )) {
-HXLINE(2176)				store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2221_retainHaxeObject)
+HXLINE(2223)		void* ptr = haxeObject.mPtr;
+HXLINE(2226)		::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXLINE(2227)		{
+HXLINE(2227)			 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN(2227)			if (::hx::IsNull( store )) {
+HXLINE(2227)				store =  ::Dynamic(::hx::Anon_obj::Create(2)
             					->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             					->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN(2176)				::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN(2227)				::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             			}
             			else {
-HXLINE(2176)				::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE(2227)				::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             			}
             		}
-HXLINE(2177)		return ptr;
+HXLINE(2228)		return ptr;
             	}
 
 
 const char* HaxeCBridge::retainHaxeString(::String haxeString){
-            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2180_retainHaxeString)
-HXLINE(2181)		const char* cStrPtr = haxeString.utf8_str();
-HXLINE(2182)		::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
-HXLINE(2183)		{
-HXLINE(2183)			 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN(2183)			if (::hx::IsNull( store )) {
-HXLINE(2183)				store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2231_retainHaxeString)
+HXLINE(2232)		const char* cStrPtr = haxeString.utf8_str();
+HXLINE(2233)		::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
+HXLINE(2234)		{
+HXLINE(2234)			 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN(2234)			if (::hx::IsNull( store )) {
+HXLINE(2234)				store =  ::Dynamic(::hx::Anon_obj::Create(2)
             					->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             					->setFixed(1,HX_("value",71,7f,b8,31),haxeString));
-HXDLIN(2183)				::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN(2234)				::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             			}
             			else {
-HXLINE(2183)				::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE(2234)				::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             			}
             		}
-HXLINE(2184)		return cStrPtr;
+HXLINE(2235)		return cStrPtr;
             	}
 
 
 void HaxeCBridge::retainPtr(::cpp::Int64 ptrInt64, ::Dynamic haxeObject){
-            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2187_retainPtr)
-HXLINE(2189)		 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXLINE(2190)		if (::hx::IsNull( store )) {
-HXLINE(2192)			store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2238_retainPtr)
+HXLINE(2240)		 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXLINE(2241)		if (::hx::IsNull( store )) {
+HXLINE(2243)			store =  ::Dynamic(::hx::Anon_obj::Create(2)
             				->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             				->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXLINE(2193)			::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXLINE(2244)			::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             		}
             		else {
-HXLINE(2196)			::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE(2247)			::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             		}
             	}
 
 
 void HaxeCBridge::releaseHaxePtr(void * haxePtr){
-            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2200_releaseHaxePtr)
-HXLINE(2201)		::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(haxePtr);
-HXLINE(2202)		 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXLINE(2203)		bool _hx_tmp;
-HXDLIN(2203)		if (::hx::IsNotNull( store )) {
-HXLINE(2203)			_hx_tmp = ::hx::IsGreater( store->__Field(HX_("refCount",7c,2e,66,86),::hx::paccDynamic),0 );
+            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2251_releaseHaxePtr)
+HXLINE(2252)		::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(haxePtr);
+HXLINE(2253)		 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXLINE(2254)		bool _hx_tmp;
+HXDLIN(2254)		if (::hx::IsNotNull( store )) {
+HXLINE(2254)			_hx_tmp = ::hx::IsGreater( store->__Field(HX_("refCount",7c,2e,66,86),::hx::paccDynamic),0 );
             		}
             		else {
-HXLINE(2203)			_hx_tmp = false;
+HXLINE(2254)			_hx_tmp = false;
             		}
-HXDLIN(2203)		if (_hx_tmp) {
-HXLINE(2204)			::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))--;
-HXLINE(2205)			if (::hx::IsLessEq( store->__Field(HX_("refCount",7c,2e,66,86),::hx::paccDynamic),0 )) {
-HXLINE(2206)				::_HaxeCBridge::Internal_obj::gcRetainMap->remove(ptrInt64);
+HXDLIN(2254)		if (_hx_tmp) {
+HXLINE(2255)			::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))--;
+HXLINE(2256)			if (::hx::IsLessEq( store->__Field(HX_("refCount",7c,2e,66,86),::hx::paccDynamic),0 )) {
+HXLINE(2257)				::_HaxeCBridge::Internal_obj::gcRetainMap->remove(ptrInt64);
             			}
             		}
             	}
 
 
 bool HaxeCBridge::isMainThread(){
-            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2213_isMainThread)
-HXDLIN(2213)		return ::_HaxeCBridge::Internal_obj::isMainThreadCb();
+            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2264_isMainThread)
+HXDLIN(2264)		return ::_HaxeCBridge::Internal_obj::isMainThreadCb();
             	}
 
 
 void HaxeCBridge::endMainThread(bool waitOnScheduledEvents){
-            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2218_endMainThread)
-HXLINE(2219)		::_HaxeCBridge::Internal_obj::mainThreadEndIfNoPending = true;
-HXLINE(2220)		bool _hx_tmp;
-HXDLIN(2220)		if (::_HaxeCBridge::Internal_obj::mainThreadLoopActive) {
-HXLINE(2220)			_hx_tmp = waitOnScheduledEvents;
+            	HX_STACKFRAME(&_hx_pos_74d844958d4dcf5a_2269_endMainThread)
+HXLINE(2270)		::_HaxeCBridge::Internal_obj::mainThreadEndIfNoPending = true;
+HXLINE(2271)		bool _hx_tmp;
+HXDLIN(2271)		if (::_HaxeCBridge::Internal_obj::mainThreadLoopActive) {
+HXLINE(2271)			_hx_tmp = waitOnScheduledEvents;
             		}
             		else {
-HXLINE(2220)			_hx_tmp = false;
+HXLINE(2271)			_hx_tmp = false;
             		}
-HXDLIN(2220)		::_HaxeCBridge::Internal_obj::mainThreadLoopActive = _hx_tmp;
-HXLINE(2221)		 ::__hxcpp_lock_release(::_HaxeCBridge::Internal_obj::mainThreadWaitLock->l);
+HXDLIN(2271)		::_HaxeCBridge::Internal_obj::mainThreadLoopActive = _hx_tmp;
+HXLINE(2272)		 ::__hxcpp_lock_release(::_HaxeCBridge::Internal_obj::mainThreadWaitLock->l);
             	}
 
 
diff --git a/Sources/c_borogove/src/Sys.cpp b/Sources/c_borogove/src/Sys.cpp
index 39a5076..bf25796 100644
--- a/Sources/c_borogove/src/Sys.cpp
+++ b/Sources/c_borogove/src/Sys.cpp
@@ -5,7 +5,6 @@
 #include <Sys.h>
 #endif
 
-HX_LOCAL_STACK_FRAME(_hx_pos_39f5eab4124248fe_59_getEnv,"Sys","getEnv",0xd9e05658,"Sys.getEnv","/usr/local/lib/haxe/std/cpp/_std/Sys.hx",59,0xd23c22f3)
 HX_LOCAL_STACK_FRAME(_hx_pos_39f5eab4124248fe_79_getCwd,"Sys","getCwd",0xd9ded99b,"Sys.getCwd","/usr/local/lib/haxe/std/cpp/_std/Sys.hx",79,0xd23c22f3)
 HX_LOCAL_STACK_FRAME(_hx_pos_39f5eab4124248fe_87_systemName,"Sys","systemName",0xbea5b6bb,"Sys.systemName","/usr/local/lib/haxe/std/cpp/_std/Sys.hx",87,0xd23c22f3)
 HX_LOCAL_STACK_FRAME(_hx_pos_39f5eab4124248fe_113_time,"Sys","time",0xf7761b2e,"Sys.time","/usr/local/lib/haxe/std/cpp/_std/Sys.hx",113,0xd23c22f3)
@@ -27,18 +26,6 @@ bool Sys_obj::_hx_isInstanceOf(int inClassId) {
 	return inClassId==(int)0x00000001 || inClassId==(int)0x7ee3a981;
 }
 
-::String Sys_obj::getEnv(::String s){
-            	HX_STACKFRAME(&_hx_pos_39f5eab4124248fe_59_getEnv)
-HXLINE(  60)		::String v = _hx_std_get_env(s);
-HXLINE(  61)		if (::hx::IsNull( v )) {
-HXLINE(  62)			return null();
-            		}
-HXLINE(  63)		return v;
-            	}
-
-
-STATIC_HX_DEFINE_DYNAMIC_FUNC1(Sys_obj,getEnv,return )
-
 ::String Sys_obj::getCwd(){
             	HX_STACKFRAME(&_hx_pos_39f5eab4124248fe_79_getCwd)
 HXDLIN(  79)		return _hx_std_get_cwd();
@@ -75,7 +62,6 @@ bool Sys_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::Prope
 		if (HX_FIELD_EQ(inName,"time") ) { outValue = time_dyn(); return true; }
 		break;
 	case 6:
-		if (HX_FIELD_EQ(inName,"getEnv") ) { outValue = getEnv_dyn(); return true; }
 		if (HX_FIELD_EQ(inName,"getCwd") ) { outValue = getCwd_dyn(); return true; }
 		break;
 	case 10:
@@ -92,7 +78,6 @@ static ::hx::StaticInfo *Sys_obj_sStaticStorageInfo = 0;
 ::hx::Class Sys_obj::__mClass;
 
 static ::String Sys_obj_sStaticFields[] = {
-	HX_("getEnv",f7,3c,1c,a3),
 	HX_("getCwd",3a,c0,1a,a3),
 	HX_("systemName",da,d8,82,f7),
 	HX_("time",0d,cc,fc,4c),
diff --git a/Sources/c_borogove/src/_HaxeCBridge/Internal.cpp b/Sources/c_borogove/src/_HaxeCBridge/Internal.cpp
index 6edb2fc..faf0e98 100644
--- a/Sources/c_borogove/src/_HaxeCBridge/Internal.cpp
+++ b/Sources/c_borogove/src/_HaxeCBridge/Internal.cpp
@@ -14,9 +14,9 @@
 #include <sys/thread/Lock.h>
 #endif
 
-HX_LOCAL_STACK_FRAME(_hx_pos_afd834d22acce778_2239_boot,"_HaxeCBridge.Internal","boot",0xcd005bdc,"_HaxeCBridge.Internal.boot","HaxeCBridge.hx",2239,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_afd834d22acce778_2240_boot,"_HaxeCBridge.Internal","boot",0xcd005bdc,"_HaxeCBridge.Internal.boot","HaxeCBridge.hx",2240,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_afd834d22acce778_2241_boot,"_HaxeCBridge.Internal","boot",0xcd005bdc,"_HaxeCBridge.Internal.boot","HaxeCBridge.hx",2241,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_afd834d22acce778_2290_boot,"_HaxeCBridge.Internal","boot",0xcd005bdc,"_HaxeCBridge.Internal.boot","HaxeCBridge.hx",2290,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_afd834d22acce778_2291_boot,"_HaxeCBridge.Internal","boot",0xcd005bdc,"_HaxeCBridge.Internal.boot","HaxeCBridge.hx",2291,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_afd834d22acce778_2292_boot,"_HaxeCBridge.Internal","boot",0xcd005bdc,"_HaxeCBridge.Internal.boot","HaxeCBridge.hx",2292,0xa18550d8)
 namespace _HaxeCBridge{
 
 void Internal_obj::__construct() { }
@@ -165,16 +165,16 @@ void Internal_obj::__register()
 void Internal_obj::__boot()
 {
 {
-            	HX_STACKFRAME(&_hx_pos_afd834d22acce778_2239_boot)
-HXDLIN(2239)		mainThreadLoopActive = true;
+            	HX_STACKFRAME(&_hx_pos_afd834d22acce778_2290_boot)
+HXDLIN(2290)		mainThreadLoopActive = true;
             	}
 {
-            	HX_STACKFRAME(&_hx_pos_afd834d22acce778_2240_boot)
-HXDLIN(2240)		mainThreadEndIfNoPending = false;
+            	HX_STACKFRAME(&_hx_pos_afd834d22acce778_2291_boot)
+HXDLIN(2291)		mainThreadEndIfNoPending = false;
             	}
 {
-            	HX_GC_STACKFRAME(&_hx_pos_afd834d22acce778_2241_boot)
-HXDLIN(2241)		gcRetainMap =  ::cpp::Int64Map_obj::__alloc( HX_CTX );
+            	HX_GC_STACKFRAME(&_hx_pos_afd834d22acce778_2292_boot)
+HXDLIN(2292)		gcRetainMap =  ::cpp::Int64Map_obj::__alloc( HX_CTX );
             	}
 }
 
diff --git a/Sources/c_borogove/src/__HaxeCBridgeBindings__.cpp b/Sources/c_borogove/src/__HaxeCBridgeBindings__.cpp
index 60bbddd..8af8dfd 100644
--- a/Sources/c_borogove/src/__HaxeCBridgeBindings__.cpp
+++ b/Sources/c_borogove/src/__HaxeCBridgeBindings__.cpp
@@ -21,42 +21,48 @@
 #include "borogove.h"
 
 #define HAXE_C_BRIDGE_LINKAGE HXCPP_EXTERN_CLASS_ATTRIBUTES
-#include <borogove/persistence/MediaStoreFS.h>
-#include <borogove/persistence/Sqlite.h>
+#include <borogove/persistence/MediaStore__Companion.h>
 #include <borogove/persistence/MediaStore.h>
+#include <borogove/persistence/MediaStoreFS.h>
+#include <borogove/persistence/KeyValueStore__Companion.h>
+#include <borogove/persistence/KeyValueStore.h>
+#include <borogove/Chat.h>
 #include <borogove/ChatMessage.h>
-#include <borogove/EncryptionInfo.h>
 #include <borogove/ChatMessageBuilder.h>
 #include <borogove/Participant.h>
-#include <borogove/ChatAttachment.h>
-#include <borogove/Hash.h>
 #include <borogove/Reaction.h>
-#include <borogove/Client.h>
-#include <borogove/Profile.h>
-#include <borogove/ProfileItem.h>
-#include <borogove/persistence/Dummy.h>
-#include <borogove/Push.h>
-#include <borogove/Persistence.h>
-#include <borogove/Notification.h>
-#include <borogove/EventEmitter.h>
-#include <borogove/ProfileBuilder.h>
-#include <borogove/AttachmentSource.h>
-#include <borogove/AvailableChat.h>
-#include <borogove/Chat.h>
 #include <borogove/calls/Session.h>
 #include <borogove/calls/DTMFSender.h>
+#include <borogove/EncryptionInfo.h>
+#include <borogove/ChatAttachment.h>
+#include <borogove/Hash.h>
 #include <borogove/calls/MediaStreamTrack.h>
 #include <borogove/calls/AudioFormat.h>
 #include <borogove/Command.h>
 #include <borogove/CommandSession.h>
 #include <borogove/FormSubmitBuilder.h>
 #include <borogove/FormOption.h>
-#include <borogove/Form.h>
 #include <borogove/FormItem.h>
 #include <borogove/FormField.h>
 #include <borogove/FormSection.h>
-#include <borogove/calls/InitiatedSession.h>
+#include <borogove/FormSection__Companion.h>
+#include <borogove/Form.h>
+#include <borogove/Persistence__Companion.h>
+#include <borogove/Persistence.h>
+#include <borogove/persistence/Sqlite.h>
+#include <borogove/Client.h>
+#include <borogove/Profile.h>
+#include <borogove/ProfileItem.h>
+#include <borogove/persistence/Dummy.h>
+#include <borogove/Push.h>
+#include <borogove/Notification.h>
+#include <borogove/EventEmitter.h>
+#include <borogove/ProfileBuilder.h>
+#include <borogove/AttachmentSource.h>
+#include <borogove/AvailableChat.h>
 #include <borogove/calls/MediaStream.h>
+#include <borogove/calls/Session__Companion.h>
+#include <borogove/calls/InitiatedSession.h>
 #include <borogove/Channel.h>
 #include <borogove/DirectChat.h>
 #include <borogove/CustomEmojiReaction.h>
@@ -263,21 +269,20 @@ void borogove_release(const void* ptr) {
 	HaxeCBridgeInternal::runInMainThread(Callback::run, (void*)ptr);
 }
 HAXE_C_BRIDGE_LINKAGE
-void *borogove_persistence_media_store_fs_new(const char *a0) {
+void borogove_persistence_media_store_has_media(void *a0, const char *a1, const unsigned char *a2, size_t a3, void (*a4) (bool, void *handler__context), void *a5) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeObject(borogove::persistence::MediaStoreFS_obj::__new(a0));
+		return borogove::persistence::MediaStore__Companion_obj::hasMedia__fromC(Dynamic((hx::Object *)a0), a1, a2, a3, cpp::Function<void(bool, void * handler__context)>(a4), a5);
 	}
 	struct Data {
-		struct {const char * a0;} args;
+		struct {void * a0; const char * a1; const unsigned char* a2; size_t a3; void (* a4) (bool, void * handler__context); void* a5;} args;
 		HxSemaphore lock;
-		void * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeObject(borogove::persistence::MediaStoreFS_obj::__new(data->args.a0));
+				borogove::persistence::MediaStore__Companion_obj::hasMedia__fromC(Dynamic((hx::Object *)data->args.a0), data->args.a1, data->args.a2, data->args.a3, cpp::Function<void(bool, void * handler__context)>(data->args.a4), data->args.a5);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -290,21 +295,20 @@ void *borogove_persistence_media_store_fs_new(const char *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1, a2, a3, a4, a5} };
 
-	// queue a callback to execute new() on the main thread and wait until execution completes
+	// queue a callback to execute hasMedia__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_persistence_media_store_fs_get_media_path(void *a0, const char *a1, void (*a2) (const char*, void *handler__context), void *a3) {
+void borogove_persistence_media_store_remove_media(void *a0, const char *a1, const unsigned char *a2, size_t a3) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::persistence::MediaStoreFS((hx::Object *)a0, true))->getMediaPath__fromC(a1, cpp::Function<void(const char*, void * handler__context)>(a2), a3);
+		return borogove::persistence::MediaStore__Companion_obj::removeMedia__fromC(Dynamic((hx::Object *)a0), a1, a2, a3);
 	}
 	struct Data {
-		struct {void * a0; const char * a1; void (* a2) (const char*, void * handler__context); void* a3;} args;
+		struct {void * a0; const char * a1; const unsigned char* a2; size_t a3;} args;
 		HxSemaphore lock;
 	};
 	struct Callback {
@@ -312,7 +316,7 @@ void borogove_persistence_media_store_fs_get_media_path(void *a0, const char *a1
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::persistence::MediaStoreFS((hx::Object *)data->args.a0, true))->getMediaPath__fromC(data->args.a1, cpp::Function<void(const char*, void * handler__context)>(data->args.a2), data->args.a3);
+				borogove::persistence::MediaStore__Companion_obj::removeMedia__fromC(Dynamic((hx::Object *)data->args.a0), data->args.a1, data->args.a2, data->args.a3);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -327,27 +331,26 @@ void borogove_persistence_media_store_fs_get_media_path(void *a0, const char *a1
 
 	Data data = { {a0, a1, a2, a3} };
 
-	// queue a callback to execute getMediaPath__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute removeMedia__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void *borogove_persistence_sqlite_new(const char *a0, void *a1) {
+void borogove_persistence_media_store_store_media(void *a0, const char *a1, const unsigned char *a2, size_t a3, void (*a4) (bool, void *handler__context), void *a5) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeObject(borogove::persistence::Sqlite_obj::__new(a0, Dynamic((hx::Object *)a1)));
+		return borogove::persistence::MediaStore__Companion_obj::storeMedia__fromC(Dynamic((hx::Object *)a0), a1, a2, a3, cpp::Function<void(bool, void * handler__context)>(a4), a5);
 	}
 	struct Data {
-		struct {const char * a0; void * a1;} args;
+		struct {void * a0; const char * a1; const unsigned char* a2; size_t a3; void (* a4) (bool, void * handler__context); void* a5;} args;
 		HxSemaphore lock;
-		void * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeObject(borogove::persistence::Sqlite_obj::__new(data->args.a0, Dynamic((hx::Object *)data->args.a1)));
+				borogove::persistence::MediaStore__Companion_obj::storeMedia__fromC(Dynamic((hx::Object *)data->args.a0), data->args.a1, data->args.a2, data->args.a3, cpp::Function<void(bool, void * handler__context)>(data->args.a4), data->args.a5);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -360,29 +363,29 @@ void *borogove_persistence_sqlite_new(const char *a0, void *a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0, a1, a2, a3, a4, a5} };
 
-	// queue a callback to execute new() on the main thread and wait until execution completes
+	// queue a callback to execute storeMedia__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_persistence_sqlite_get_message(void *a0, const char *a1, const char *a2, const char *a3, const char *a4, void (*a5) (void*, void *handler__context), void *a6) {
+void *borogove_persistence_media_store_fs_new(const char *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::persistence::Sqlite((hx::Object *)a0, true))->getMessage__fromC(a1, a2, a3, a4, cpp::Function<void(void*, void * handler__context)>(a5), a6);
+		return HaxeCBridge::retainHaxeObject(borogove::persistence::MediaStoreFS_obj::__new(a0));
 	}
 	struct Data {
-		struct {void * a0; const char * a1; const char * a2; const char * a3; const char * a4; void (* a5) (void*, void * handler__context); void* a6;} args;
+		struct {const char * a0;} args;
 		HxSemaphore lock;
+		void * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::persistence::Sqlite((hx::Object *)data->args.a0, true))->getMessage__fromC(data->args.a1, data->args.a2, data->args.a3, data->args.a4, cpp::Function<void(void*, void * handler__context)>(data->args.a5), data->args.a6);
+				data->ret = HaxeCBridge::retainHaxeObject(borogove::persistence::MediaStoreFS_obj::__new(data->args.a0));
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -395,20 +398,21 @@ void borogove_persistence_sqlite_get_message(void *a0, const char *a1, const cha
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2, a3, a4, a5, a6} };
+	Data data = { {a0} };
 
-	// queue a callback to execute getMessage__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute new() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_persistence_sqlite_remove_account(void *a0, const char *a1, bool a2) {
+void borogove_persistence_media_store_fs_get_media_path(void *a0, const char *a1, void (*a2) (const char*, void *handler__context), void *a3) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::persistence::Sqlite((hx::Object *)a0, true))->removeAccount(a1, a2);
+		return (borogove::persistence::MediaStoreFS((hx::Object *)a0, true))->getMediaPath__fromC(a1, cpp::Function<void(const char*, void * handler__context)>(a2), a3);
 	}
 	struct Data {
-		struct {void * a0; const char * a1; bool a2;} args;
+		struct {void * a0; const char * a1; void (* a2) (const char*, void * handler__context); void* a3;} args;
 		HxSemaphore lock;
 	};
 	struct Callback {
@@ -416,7 +420,7 @@ void borogove_persistence_sqlite_remove_account(void *a0, const char *a1, bool a
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::persistence::Sqlite((hx::Object *)data->args.a0, true))->removeAccount(data->args.a1, data->args.a2);
+				(borogove::persistence::MediaStoreFS((hx::Object *)data->args.a0, true))->getMediaPath__fromC(data->args.a1, cpp::Function<void(const char*, void * handler__context)>(data->args.a2), data->args.a3);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -429,20 +433,20 @@ void borogove_persistence_sqlite_remove_account(void *a0, const char *a1, bool a
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2} };
+	Data data = { {a0, a1, a2, a3} };
 
-	// queue a callback to execute removeAccount() on the main thread and wait until execution completes
+	// queue a callback to execute getMediaPath__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_persistence_sqlite_list_accounts(void *a0, void (*a1) (const char**, size_t, void *handler__context), void *a2) {
+void borogove_persistence_key_value_store_get(void *a0, const char *a1, void (*a2) (const char*, void *handler__context), void *a3) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::persistence::Sqlite((hx::Object *)a0, true))->listAccounts__fromC(cpp::Function<void(const char**, size_t, void * handler__context)>(a1), a2);
+		return borogove::persistence::KeyValueStore__Companion_obj::get__fromC(Dynamic((hx::Object *)a0), a1, cpp::Function<void(const char*, void * handler__context)>(a2), a3);
 	}
 	struct Data {
-		struct {void * a0; void (* a1) (const char**, size_t, void * handler__context); void* a2;} args;
+		struct {void * a0; const char * a1; void (* a2) (const char*, void * handler__context); void* a3;} args;
 		HxSemaphore lock;
 	};
 	struct Callback {
@@ -450,7 +454,7 @@ void borogove_persistence_sqlite_list_accounts(void *a0, void (*a1) (const char*
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::persistence::Sqlite((hx::Object *)data->args.a0, true))->listAccounts__fromC(cpp::Function<void(const char**, size_t, void * handler__context)>(data->args.a1), data->args.a2);
+				borogove::persistence::KeyValueStore__Companion_obj::get__fromC(Dynamic((hx::Object *)data->args.a0), data->args.a1, cpp::Function<void(const char*, void * handler__context)>(data->args.a2), data->args.a3);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -463,29 +467,28 @@ void borogove_persistence_sqlite_list_accounts(void *a0, void (*a1) (const char*
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2} };
+	Data data = { {a0, a1, a2, a3} };
 
-	// queue a callback to execute listAccounts__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute get__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_chat_message_local_id(void *a0) {
+void borogove_persistence_key_value_store_set(void *a0, const char *a1, const char *a2, void (*a3) (bool, void *handler__context), void *a4) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)a0, true))->localId__fromC());
+		return borogove::persistence::KeyValueStore__Companion_obj::set__fromC(Dynamic((hx::Object *)a0), a1, a2, cpp::Function<void(bool, void * handler__context)>(a3), a4);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; const char * a1; const char * a2; void (* a3) (bool, void * handler__context); void* a4;} args;
 		HxSemaphore lock;
-		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)data->args.a0, true))->localId__fromC());
+				borogove::persistence::KeyValueStore__Companion_obj::set__fromC(Dynamic((hx::Object *)data->args.a0), data->args.a1, data->args.a2, cpp::Function<void(bool, void * handler__context)>(data->args.a3), data->args.a4);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -498,18 +501,17 @@ const char *borogove_chat_message_local_id(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1, a2, a3, a4} };
 
-	// queue a callback to execute localId__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute set__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_chat_message_server_id(void *a0) {
+const char *borogove_chat_chat_id(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)a0, true))->serverId__fromC());
+		return HaxeCBridge::retainHaxeString((borogove::Chat((hx::Object *)a0, true))->chatId__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
@@ -521,7 +523,7 @@ const char *borogove_chat_message_server_id(void *a0) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)data->args.a0, true))->serverId__fromC());
+				data->ret = HaxeCBridge::retainHaxeString((borogove::Chat((hx::Object *)data->args.a0, true))->chatId__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -536,28 +538,28 @@ const char *borogove_chat_message_server_id(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute serverId__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute chatId__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_chat_message_server_id_by(void *a0) {
+enum borogove_ui_state borogove_chat_ui_state(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)a0, true))->serverIdBy__fromC());
+		return static_cast<enum borogove_ui_state>((borogove::Chat((hx::Object *)a0, true))->uiState__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		const char * ret;
+		enum borogove_ui_state ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)data->args.a0, true))->serverIdBy__fromC());
+				data->ret = static_cast<enum borogove_ui_state>((borogove::Chat((hx::Object *)data->args.a0, true))->uiState__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -572,28 +574,28 @@ const char *borogove_chat_message_server_id_by(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute serverIdBy__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute uiState__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-enum borogove_message_type borogove_chat_message_type(void *a0) {
+bool borogove_chat_is_blocked(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return static_cast<enum borogove_message_type>((borogove::ChatMessage((hx::Object *)a0, true))->type__fromC());
+		return (borogove::Chat((hx::Object *)a0, true))->isBlocked__fromC();
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		enum borogove_message_type ret;
+		bool ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = static_cast<enum borogove_message_type>((borogove::ChatMessage((hx::Object *)data->args.a0, true))->type__fromC());
+				data->ret = (borogove::Chat((hx::Object *)data->args.a0, true))->isBlocked__fromC();
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -608,28 +610,28 @@ enum borogove_message_type borogove_chat_message_type(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute type__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute isBlocked__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_chat_message_timestamp(void *a0) {
+void *borogove_chat_last_message(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)a0, true))->timestamp__fromC());
+		return HaxeCBridge::retainHaxeObject((borogove::Chat((hx::Object *)a0, true))->lastMessage__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		const char * ret;
+		void * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)data->args.a0, true))->timestamp__fromC());
+				data->ret = HaxeCBridge::retainHaxeObject((borogove::Chat((hx::Object *)data->args.a0, true))->lastMessage__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -644,28 +646,28 @@ const char *borogove_chat_message_timestamp(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute timestamp__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute lastMessage__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_chat_message_sender_id(void *a0) {
+bool borogove_chat_is_bookmarked(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)a0, true))->senderId__fromC());
+		return (borogove::Chat((hx::Object *)a0, true))->isBookmarked__fromC();
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		const char * ret;
+		bool ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)data->args.a0, true))->senderId__fromC());
+				data->ret = (borogove::Chat((hx::Object *)data->args.a0, true))->isBookmarked__fromC();
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -680,28 +682,27 @@ const char *borogove_chat_message_sender_id(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute senderId__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute isBookmarked__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void *borogove_chat_message_reply_to_message(void *a0) {
+void borogove_chat_get_messages_before(void *a0, const char *a1, const char *a2, void (*a3) (void**, size_t, void *handler__context), void *a4) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeObject((borogove::ChatMessage((hx::Object *)a0, true))->replyToMessage__fromC());
+		return (borogove::Chat((hx::Object *)a0, true))->getMessagesBefore__fromC(a1, a2, cpp::Function<void(void**, size_t, void * handler__context)>(a3), a4);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; const char * a1; const char * a2; void (* a3) (void**, size_t, void * handler__context); void* a4;} args;
 		HxSemaphore lock;
-		void * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeObject((borogove::ChatMessage((hx::Object *)data->args.a0, true))->replyToMessage__fromC());
+				(borogove::Chat((hx::Object *)data->args.a0, true))->getMessagesBefore__fromC(data->args.a1, data->args.a2, cpp::Function<void(void**, size_t, void * handler__context)>(data->args.a3), data->args.a4);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -714,30 +715,28 @@ void *borogove_chat_message_reply_to_message(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1, a2, a3, a4} };
 
-	// queue a callback to execute replyToMessage__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute getMessagesBefore__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_chat_message_thread_id(void *a0) {
+void borogove_chat_get_messages_after(void *a0, const char *a1, const char *a2, void (*a3) (void**, size_t, void *handler__context), void *a4) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)a0, true))->threadId__fromC());
+		return (borogove::Chat((hx::Object *)a0, true))->getMessagesAfter__fromC(a1, a2, cpp::Function<void(void**, size_t, void * handler__context)>(a3), a4);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; const char * a1; const char * a2; void (* a3) (void**, size_t, void * handler__context); void* a4;} args;
 		HxSemaphore lock;
-		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)data->args.a0, true))->threadId__fromC());
+				(borogove::Chat((hx::Object *)data->args.a0, true))->getMessagesAfter__fromC(data->args.a1, data->args.a2, cpp::Function<void(void**, size_t, void * handler__context)>(data->args.a3), data->args.a4);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -750,30 +749,28 @@ const char *borogove_chat_message_thread_id(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1, a2, a3, a4} };
 
-	// queue a callback to execute threadId__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute getMessagesAfter__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-size_t borogove_chat_message_attachments(void *a0, void ***a1) {
+void borogove_chat_get_messages_around(void *a0, const char *a1, const char *a2, void (*a3) (void**, size_t, void *handler__context), void *a4) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::ChatMessage((hx::Object *)a0, true))->attachments__fromC(a1);
+		return (borogove::Chat((hx::Object *)a0, true))->getMessagesAround__fromC(a1, a2, cpp::Function<void(void**, size_t, void * handler__context)>(a3), a4);
 	}
 	struct Data {
-		struct {void * a0; void*** a1;} args;
+		struct {void * a0; const char * a1; const char * a2; void (* a3) (void**, size_t, void * handler__context); void* a4;} args;
 		HxSemaphore lock;
-		size_t ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::ChatMessage((hx::Object *)data->args.a0, true))->attachments__fromC(data->args.a1);
+				(borogove::Chat((hx::Object *)data->args.a0, true))->getMessagesAround__fromC(data->args.a1, data->args.a2, cpp::Function<void(void**, size_t, void * handler__context)>(data->args.a3), data->args.a4);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -786,30 +783,28 @@ size_t borogove_chat_message_attachments(void *a0, void ***a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0, a1, a2, a3, a4} };
 
-	// queue a callback to execute attachments__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute getMessagesAround__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-size_t borogove_chat_message_reaction_keys(void *a0, const char ***a1) {
+void borogove_chat_send_message(void *a0, void *a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::ChatMessage((hx::Object *)a0, true))->reactionKeys__fromC(a1);
+		return (borogove::Chat((hx::Object *)a0, true))->sendMessage__fromC(Dynamic((hx::Object *)a1));
 	}
 	struct Data {
-		struct {void * a0; const char*** a1;} args;
+		struct {void * a0; void * a1;} args;
 		HxSemaphore lock;
-		size_t ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::ChatMessage((hx::Object *)data->args.a0, true))->reactionKeys__fromC(data->args.a1);
+				(borogove::Chat((hx::Object *)data->args.a0, true))->sendMessage__fromC(Dynamic((hx::Object *)data->args.a1));
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -824,28 +819,26 @@ size_t borogove_chat_message_reaction_keys(void *a0, const char ***a1) {
 
 	Data data = { {a0, a1} };
 
-	// queue a callback to execute reactionKeys__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute sendMessage__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-size_t borogove_chat_message_reaction_details(void *a0, const char *a1, void ***a2) {
+void borogove_chat_mark_read_up_to(void *a0, void *a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::ChatMessage((hx::Object *)a0, true))->reactionDetails__fromC(a1, a2);
+		return (borogove::Chat((hx::Object *)a0, true))->markReadUpTo__fromC(Dynamic((hx::Object *)a1));
 	}
 	struct Data {
-		struct {void * a0; const char * a1; void*** a2;} args;
+		struct {void * a0; void * a1;} args;
 		HxSemaphore lock;
-		size_t ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::ChatMessage((hx::Object *)data->args.a0, true))->reactionDetails__fromC(data->args.a1, data->args.a2);
+				(borogove::Chat((hx::Object *)data->args.a0, true))->markReadUpTo__fromC(Dynamic((hx::Object *)data->args.a1));
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -858,30 +851,28 @@ size_t borogove_chat_message_reaction_details(void *a0, const char *a1, void ***
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute reactionDetails__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute markReadUpTo__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_chat_message_text(void *a0) {
+void borogove_chat_bookmark(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)a0, true))->text__fromC());
+		return (borogove::Chat((hx::Object *)a0, true))->bookmark__fromC();
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)data->args.a0, true))->text__fromC());
+				(borogove::Chat((hx::Object *)data->args.a0, true))->bookmark__fromC();
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -896,28 +887,27 @@ const char *borogove_chat_message_text(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute text__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute bookmark__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_chat_message_lang(void *a0) {
+size_t borogove_chat_get_participants(void *a0, const char ***a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)a0, true))->lang__fromC());
+		return (borogove::Chat((hx::Object *)a0, true))->getParticipants__fromC(a1);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; const char*** a1;} args;
 		HxSemaphore lock;
-		const char * ret;
+		size_t ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)data->args.a0, true))->lang__fromC());
+				data->ret = (borogove::Chat((hx::Object *)data->args.a0, true))->getParticipants__fromC(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -930,30 +920,30 @@ const char *borogove_chat_message_lang(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute lang__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute getParticipants__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-enum borogove_message_direction borogove_chat_message_direction(void *a0) {
+void *borogove_chat_get_participant_details(void *a0, const char *a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return static_cast<enum borogove_message_direction>((borogove::ChatMessage((hx::Object *)a0, true))->direction__fromC());
+		return HaxeCBridge::retainHaxeObject((borogove::Chat((hx::Object *)a0, true))->getParticipantDetails__fromC(a1));
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; const char * a1;} args;
 		HxSemaphore lock;
-		enum borogove_message_direction ret;
+		void * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = static_cast<enum borogove_message_direction>((borogove::ChatMessage((hx::Object *)data->args.a0, true))->direction__fromC());
+				data->ret = HaxeCBridge::retainHaxeObject((borogove::Chat((hx::Object *)data->args.a0, true))->getParticipantDetails__fromC(data->args.a1));
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -966,30 +956,29 @@ enum borogove_message_direction borogove_chat_message_direction(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute direction__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute getParticipantDetails__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-enum borogove_message_status borogove_chat_message_status(void *a0) {
+void borogove_chat_correct_message(void *a0, const char *a1, void *a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return static_cast<enum borogove_message_status>((borogove::ChatMessage((hx::Object *)a0, true))->status__fromC());
+		return (borogove::Chat((hx::Object *)a0, true))->correctMessage__fromC(a1, Dynamic((hx::Object *)a2));
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; const char * a1; void * a2;} args;
 		HxSemaphore lock;
-		enum borogove_message_status ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = static_cast<enum borogove_message_status>((borogove::ChatMessage((hx::Object *)data->args.a0, true))->status__fromC());
+				(borogove::Chat((hx::Object *)data->args.a0, true))->correctMessage__fromC(data->args.a1, Dynamic((hx::Object *)data->args.a2));
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -1002,30 +991,28 @@ enum borogove_message_status borogove_chat_message_status(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1, a2} };
 
-	// queue a callback to execute status__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute correctMessage__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_chat_message_status_text(void *a0) {
+void borogove_chat_add_reaction(void *a0, void *a1, void *a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)a0, true))->statusText__fromC());
+		return (borogove::Chat((hx::Object *)a0, true))->addReaction(Dynamic((hx::Object *)a1), Dynamic((hx::Object *)a2));
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; void * a1; void * a2;} args;
 		HxSemaphore lock;
-		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)data->args.a0, true))->statusText__fromC());
+				(borogove::Chat((hx::Object *)data->args.a0, true))->addReaction(Dynamic((hx::Object *)data->args.a1), Dynamic((hx::Object *)data->args.a2));
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -1038,30 +1025,28 @@ const char *borogove_chat_message_status_text(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1, a2} };
 
-	// queue a callback to execute statusText__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute addReaction() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-size_t borogove_chat_message_versions(void *a0, void ***a1) {
+void borogove_chat_remove_reaction(void *a0, void *a1, void *a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::ChatMessage((hx::Object *)a0, true))->versions__fromC(a1);
+		return (borogove::Chat((hx::Object *)a0, true))->removeReaction__fromC(Dynamic((hx::Object *)a1), Dynamic((hx::Object *)a2));
 	}
 	struct Data {
-		struct {void * a0; void*** a1;} args;
+		struct {void * a0; void * a1; void * a2;} args;
 		HxSemaphore lock;
-		size_t ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::ChatMessage((hx::Object *)data->args.a0, true))->versions__fromC(data->args.a1);
+				(borogove::Chat((hx::Object *)data->args.a0, true))->removeReaction__fromC(Dynamic((hx::Object *)data->args.a1), Dynamic((hx::Object *)data->args.a2));
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -1074,30 +1059,28 @@ size_t borogove_chat_message_versions(void *a0, void ***a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0, a1, a2} };
 
-	// queue a callback to execute versions__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute removeReaction__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void *borogove_chat_message_encryption(void *a0) {
+void borogove_chat_typing(void *a0, const char *a1, const char *a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeObject((borogove::ChatMessage((hx::Object *)a0, true))->encryption__fromC());
+		return (borogove::Chat((hx::Object *)a0, true))->typing(a1, a2);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; const char * a1; const char * a2;} args;
 		HxSemaphore lock;
-		void * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeObject((borogove::ChatMessage((hx::Object *)data->args.a0, true))->encryption__fromC());
+				(borogove::Chat((hx::Object *)data->args.a0, true))->typing(data->args.a1, data->args.a2);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -1110,30 +1093,28 @@ void *borogove_chat_message_encryption(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1, a2} };
 
-	// queue a callback to execute encryption__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute typing() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void *borogove_chat_message_reply(void *a0) {
+void borogove_chat_set_active(void *a0, bool a1, const char *a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeObject((borogove::ChatMessage((hx::Object *)a0, true))->reply());
+		return (borogove::Chat((hx::Object *)a0, true))->setActive(a1, a2);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; bool a1; const char * a2;} args;
 		HxSemaphore lock;
-		void * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeObject((borogove::ChatMessage((hx::Object *)data->args.a0, true))->reply());
+				(borogove::Chat((hx::Object *)data->args.a0, true))->setActive(data->args.a1, data->args.a2);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -1146,30 +1127,28 @@ void *borogove_chat_message_reply(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1, a2} };
 
-	// queue a callback to execute reply() on the main thread and wait until execution completes
+	// queue a callback to execute setActive() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_chat_message_html(void *a0, void *a1) {
+void borogove_chat_close(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)a0, true))->html(Dynamic((hx::Object *)a1)));
+		return (borogove::Chat((hx::Object *)a0, true))->close__fromC();
 	}
 	struct Data {
-		struct {void * a0; void * a1;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
-		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)data->args.a0, true))->html(Dynamic((hx::Object *)data->args.a1)));
+				(borogove::Chat((hx::Object *)data->args.a0, true))->close__fromC();
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -1182,30 +1161,28 @@ const char *borogove_chat_message_html(void *a0, void *a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0} };
 
-	// queue a callback to execute html() on the main thread and wait until execution completes
+	// queue a callback to execute close__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_chat_message_chat_id(void *a0) {
+void borogove_chat_toggle_pinned(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)a0, true))->chatId());
+		return (borogove::Chat((hx::Object *)a0, true))->togglePinned();
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)data->args.a0, true))->chatId());
+				(borogove::Chat((hx::Object *)data->args.a0, true))->togglePinned();
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -1220,28 +1197,26 @@ const char *borogove_chat_message_chat_id(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute chatId() on the main thread and wait until execution completes
+	// queue a callback to execute togglePinned() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_chat_message_account(void *a0) {
+void borogove_chat_block(void *a0, bool a1, void *a2, bool a3) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)a0, true))->account());
+		return (borogove::Chat((hx::Object *)a0, true))->block(a1, Dynamic((hx::Object *)a2), a3);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; bool a1; void * a2; bool a3;} args;
 		HxSemaphore lock;
-		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)data->args.a0, true))->account());
+				(borogove::Chat((hx::Object *)data->args.a0, true))->block(data->args.a1, Dynamic((hx::Object *)data->args.a2), data->args.a3);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -1254,30 +1229,28 @@ const char *borogove_chat_message_account(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1, a2, a3} };
 
-	// queue a callback to execute account() on the main thread and wait until execution completes
+	// queue a callback to execute block() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-bool borogove_chat_message_is_incoming(void *a0) {
+void borogove_chat_unblock(void *a0, bool a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::ChatMessage((hx::Object *)a0, true))->isIncoming();
+		return (borogove::Chat((hx::Object *)a0, true))->unblock(a1);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; bool a1;} args;
 		HxSemaphore lock;
-		bool ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::ChatMessage((hx::Object *)data->args.a0, true))->isIncoming();
+				(borogove::Chat((hx::Object *)data->args.a0, true))->unblock(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -1290,30 +1263,28 @@ bool borogove_chat_message_is_incoming(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute isIncoming() on the main thread and wait until execution completes
+	// queue a callback to execute unblock() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_chat_message_thread_icon(void *a0) {
+void borogove_chat_set_notifications(void *a0, bool a1, bool a2, bool a3) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)a0, true))->threadIcon());
+		return (borogove::Chat((hx::Object *)a0, true))->setNotifications(a1, a2, a3);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; bool a1; bool a2; bool a3;} args;
 		HxSemaphore lock;
-		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)data->args.a0, true))->threadIcon());
+				(borogove::Chat((hx::Object *)data->args.a0, true))->setNotifications(data->args.a1, data->args.a2, data->args.a3);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -1326,30 +1297,29 @@ const char *borogove_chat_message_thread_icon(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1, a2, a3} };
 
-	// queue a callback to execute threadIcon() on the main thread and wait until execution completes
+	// queue a callback to execute setNotifications() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_chat_message_call_status(void *a0) {
+bool borogove_chat_notifications_filtered(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)a0, true))->callStatus());
+		return (borogove::Chat((hx::Object *)a0, true))->notificationsFiltered();
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		const char * ret;
+		bool ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)data->args.a0, true))->callStatus());
+				data->ret = (borogove::Chat((hx::Object *)data->args.a0, true))->notificationsFiltered();
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -1364,28 +1334,28 @@ const char *borogove_chat_message_call_status(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute callStatus() on the main thread and wait until execution completes
+	// queue a callback to execute notificationsFiltered() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_chat_message_call_sid(void *a0) {
+bool borogove_chat_notify_mention(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)a0, true))->callSid());
+		return (borogove::Chat((hx::Object *)a0, true))->notifyMention();
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		const char * ret;
+		bool ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)data->args.a0, true))->callSid());
+				data->ret = (borogove::Chat((hx::Object *)data->args.a0, true))->notifyMention();
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -1400,28 +1370,28 @@ const char *borogove_chat_message_call_sid(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute callSid() on the main thread and wait until execution completes
+	// queue a callback to execute notifyMention() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_chat_message_call_duration(void *a0) {
+bool borogove_chat_notify_reply(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)a0, true))->callDuration());
+		return (borogove::Chat((hx::Object *)a0, true))->notifyReply();
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		const char * ret;
+		bool ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)data->args.a0, true))->callDuration());
+				data->ret = (borogove::Chat((hx::Object *)data->args.a0, true))->notifyReply();
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -1436,28 +1406,28 @@ const char *borogove_chat_message_call_duration(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute callDuration() on the main thread and wait until execution completes
+	// queue a callback to execute notifyReply() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void *borogove_chat_attachment_create(const char *a0, const char *a1, int a2, const char *a3) {
+const char *borogove_chat_last_message_id(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeObject(borogove::ChatAttachment_obj::create(a0, a1, a2, a3));
+		return HaxeCBridge::retainHaxeString((borogove::Chat((hx::Object *)a0, true))->lastMessageId__fromC());
 	}
 	struct Data {
-		struct {const char * a0; const char * a1; int a2; const char * a3;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
-		void * ret;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeObject(borogove::ChatAttachment_obj::create(data->args.a0, data->args.a1, data->args.a2, data->args.a3));
+				data->ret = HaxeCBridge::retainHaxeString((borogove::Chat((hx::Object *)data->args.a0, true))->lastMessageId__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -1470,18 +1440,18 @@ void *borogove_chat_attachment_create(const char *a0, const char *a1, int a2, co
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2, a3} };
+	Data data = { {a0} };
 
-	// queue a callback to execute create() on the main thread and wait until execution completes
+	// queue a callback to execute lastMessageId__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_chat_attachment_name(void *a0) {
+const char *borogove_chat_get_photo(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::ChatAttachment((hx::Object *)a0, true))->name__fromC());
+		return HaxeCBridge::retainHaxeString((borogove::Chat((hx::Object *)a0, true))->getPhoto());
 	}
 	struct Data {
 		struct {void * a0;} args;
@@ -1493,7 +1463,7 @@ const char *borogove_chat_attachment_name(void *a0) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatAttachment((hx::Object *)data->args.a0, true))->name__fromC());
+				data->ret = HaxeCBridge::retainHaxeString((borogove::Chat((hx::Object *)data->args.a0, true))->getPhoto());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -1508,16 +1478,16 @@ const char *borogove_chat_attachment_name(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute name__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute getPhoto() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_chat_attachment_mime(void *a0) {
+const char *borogove_chat_get_placeholder(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::ChatAttachment((hx::Object *)a0, true))->mime__fromC());
+		return HaxeCBridge::retainHaxeString((borogove::Chat((hx::Object *)a0, true))->getPlaceholder());
 	}
 	struct Data {
 		struct {void * a0;} args;
@@ -1529,7 +1499,7 @@ const char *borogove_chat_attachment_mime(void *a0) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatAttachment((hx::Object *)data->args.a0, true))->mime__fromC());
+				data->ret = HaxeCBridge::retainHaxeString((borogove::Chat((hx::Object *)data->args.a0, true))->getPlaceholder());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -1544,28 +1514,28 @@ const char *borogove_chat_attachment_mime(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute mime__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute getPlaceholder() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-int borogove_chat_attachment_size(void *a0) {
+const char *borogove_chat_read_up_to(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::ChatAttachment((hx::Object *)a0, true))->size__fromC();
+		return HaxeCBridge::retainHaxeString((borogove::Chat((hx::Object *)a0, true))->readUpTo());
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		int ret;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::ChatAttachment((hx::Object *)data->args.a0, true))->size__fromC();
+				data->ret = HaxeCBridge::retainHaxeString((borogove::Chat((hx::Object *)data->args.a0, true))->readUpTo());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -1580,28 +1550,28 @@ int borogove_chat_attachment_size(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute size__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute readUpTo() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-size_t borogove_chat_attachment_uris(void *a0, const char ***a1) {
+int borogove_chat_unread_count(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::ChatAttachment((hx::Object *)a0, true))->uris__fromC(a1);
+		return (borogove::Chat((hx::Object *)a0, true))->unreadCount();
 	}
 	struct Data {
-		struct {void * a0; const char*** a1;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
-		size_t ret;
+		int ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::ChatAttachment((hx::Object *)data->args.a0, true))->uris__fromC(data->args.a1);
+				data->ret = (borogove::Chat((hx::Object *)data->args.a0, true))->unreadCount();
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -1614,30 +1584,30 @@ size_t borogove_chat_attachment_uris(void *a0, const char ***a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0} };
 
-	// queue a callback to execute uris__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute unreadCount() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-size_t borogove_chat_attachment_hashes(void *a0, void ***a1) {
+const char *borogove_chat_preview(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::ChatAttachment((hx::Object *)a0, true))->hashes__fromC(a1);
+		return HaxeCBridge::retainHaxeString((borogove::Chat((hx::Object *)a0, true))->preview());
 	}
 	struct Data {
-		struct {void * a0; void*** a1;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
-		size_t ret;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::ChatAttachment((hx::Object *)data->args.a0, true))->hashes__fromC(data->args.a1);
+				data->ret = HaxeCBridge::retainHaxeString((borogove::Chat((hx::Object *)data->args.a0, true))->preview());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -1650,30 +1620,29 @@ size_t borogove_chat_attachment_hashes(void *a0, void ***a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0} };
 
-	// queue a callback to execute hashes__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute preview() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void *borogove_hash_from_hex(const char *a0, const char *a1) {
+void borogove_chat_set_display_name(void *a0, const char *a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeObject(borogove::Hash_obj::fromHex(a0, a1));
+		return (borogove::Chat((hx::Object *)a0, true))->setDisplayName(a1);
 	}
 	struct Data {
-		struct {const char * a0; const char * a1;} args;
+		struct {void * a0; const char * a1;} args;
 		HxSemaphore lock;
-		void * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeObject(borogove::Hash_obj::fromHex(data->args.a0, data->args.a1));
+				(borogove::Chat((hx::Object *)data->args.a0, true))->setDisplayName(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -1688,28 +1657,27 @@ void *borogove_hash_from_hex(const char *a0, const char *a1) {
 
 	Data data = { {a0, a1} };
 
-	// queue a callback to execute fromHex() on the main thread and wait until execution completes
+	// queue a callback to execute setDisplayName() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void *borogove_hash_from_uri(const char *a0) {
+const char *borogove_chat_get_display_name(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeObject(borogove::Hash_obj::fromUri(a0));
+		return HaxeCBridge::retainHaxeString((borogove::Chat((hx::Object *)a0, true))->getDisplayName());
 	}
 	struct Data {
-		struct {const char * a0;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
-		void * ret;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeObject(borogove::Hash_obj::fromUri(data->args.a0));
+				data->ret = HaxeCBridge::retainHaxeString((borogove::Chat((hx::Object *)data->args.a0, true))->getDisplayName());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -1724,28 +1692,27 @@ void *borogove_hash_from_uri(const char *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute fromUri() on the main thread and wait until execution completes
+	// queue a callback to execute getDisplayName() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_hash_algorithm(void *a0) {
+void borogove_chat_set_trusted(void *a0, bool a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::Hash((hx::Object *)a0, true))->algorithm__fromC());
+		return (borogove::Chat((hx::Object *)a0, true))->setTrusted(a1);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; bool a1;} args;
 		HxSemaphore lock;
-		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::Hash((hx::Object *)data->args.a0, true))->algorithm__fromC());
+				(borogove::Chat((hx::Object *)data->args.a0, true))->setTrusted(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -1758,30 +1725,29 @@ const char *borogove_hash_algorithm(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute algorithm__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute setTrusted() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_hash_to_uri(void *a0) {
+bool borogove_chat_is_trusted(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::Hash((hx::Object *)a0, true))->toUri());
+		return (borogove::Chat((hx::Object *)a0, true))->isTrusted();
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		const char * ret;
+		bool ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::Hash((hx::Object *)data->args.a0, true))->toUri());
+				data->ret = (borogove::Chat((hx::Object *)data->args.a0, true))->isTrusted();
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -1796,28 +1762,28 @@ const char *borogove_hash_to_uri(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute toUri() on the main thread and wait until execution completes
+	// queue a callback to execute isTrusted() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_hash_to_hex(void *a0) {
+bool borogove_chat_syncing(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::Hash((hx::Object *)a0, true))->toHex());
+		return (borogove::Chat((hx::Object *)a0, true))->syncing();
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		const char * ret;
+		bool ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::Hash((hx::Object *)data->args.a0, true))->toHex());
+				data->ret = (borogove::Chat((hx::Object *)data->args.a0, true))->syncing();
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -1832,28 +1798,28 @@ const char *borogove_hash_to_hex(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute toHex() on the main thread and wait until execution completes
+	// queue a callback to execute syncing() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_hash_to_base_64(void *a0) {
+bool borogove_chat_can_audio_call(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::Hash((hx::Object *)a0, true))->toBase64());
+		return (borogove::Chat((hx::Object *)a0, true))->canAudioCall();
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		const char * ret;
+		bool ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::Hash((hx::Object *)data->args.a0, true))->toBase64());
+				data->ret = (borogove::Chat((hx::Object *)data->args.a0, true))->canAudioCall();
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -1868,28 +1834,28 @@ const char *borogove_hash_to_base_64(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute toBase64() on the main thread and wait until execution completes
+	// queue a callback to execute canAudioCall() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_hash_to_base_64_url(void *a0) {
+bool borogove_chat_can_video_call(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::Hash((hx::Object *)a0, true))->toBase64Url());
+		return (borogove::Chat((hx::Object *)a0, true))->canVideoCall();
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		const char * ret;
+		bool ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::Hash((hx::Object *)data->args.a0, true))->toBase64Url());
+				data->ret = (borogove::Chat((hx::Object *)data->args.a0, true))->canVideoCall();
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -1904,19 +1870,19 @@ const char *borogove_hash_to_base_64_url(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute toBase64Url() on the main thread and wait until execution completes
+	// queue a callback to execute canVideoCall() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void *borogove_reaction_unicode(const char *a0) {
+void *borogove_chat_start_call(void *a0, bool a1, bool a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeObject(borogove::Reaction_obj::unicode(a0));
+		return HaxeCBridge::retainHaxeObject((borogove::Chat((hx::Object *)a0, true))->startCall(a1, a2));
 	}
 	struct Data {
-		struct {const char * a0;} args;
+		struct {void * a0; bool a1; bool a2;} args;
 		HxSemaphore lock;
 		void * ret;
 	};
@@ -1925,7 +1891,7 @@ void *borogove_reaction_unicode(const char *a0) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeObject(borogove::Reaction_obj::unicode(data->args.a0));
+				data->ret = HaxeCBridge::retainHaxeObject((borogove::Chat((hx::Object *)data->args.a0, true))->startCall(data->args.a1, data->args.a2));
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -1938,30 +1904,29 @@ void *borogove_reaction_unicode(const char *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1, a2} };
 
-	// queue a callback to execute unicode() on the main thread and wait until execution completes
+	// queue a callback to execute startCall() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_reaction_sender_id(void *a0) {
+void borogove_chat_accept_call(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::Reaction((hx::Object *)a0, true))->senderId__fromC());
+		return (borogove::Chat((hx::Object *)a0, true))->acceptCall();
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::Reaction((hx::Object *)data->args.a0, true))->senderId__fromC());
+				(borogove::Chat((hx::Object *)data->args.a0, true))->acceptCall();
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -1976,28 +1941,26 @@ const char *borogove_reaction_sender_id(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute senderId__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute acceptCall() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_reaction_timestamp(void *a0) {
+void borogove_chat_hangup(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::Reaction((hx::Object *)a0, true))->timestamp__fromC());
+		return (borogove::Chat((hx::Object *)a0, true))->hangup();
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::Reaction((hx::Object *)data->args.a0, true))->timestamp__fromC());
+				(borogove::Chat((hx::Object *)data->args.a0, true))->hangup();
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -2012,28 +1975,27 @@ const char *borogove_reaction_timestamp(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute timestamp__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute hangup() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_reaction_key(void *a0) {
+enum borogove_calls_call_status borogove_chat_call_status(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::Reaction((hx::Object *)a0, true))->key__fromC());
+		return static_cast<enum borogove_calls_call_status>((borogove::Chat((hx::Object *)a0, true))->callStatus());
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		const char * ret;
+		enum borogove_calls_call_status ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::Reaction((hx::Object *)data->args.a0, true))->key__fromC());
+				data->ret = static_cast<enum borogove_calls_call_status>((borogove::Chat((hx::Object *)data->args.a0, true))->callStatus());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -2048,28 +2010,28 @@ const char *borogove_reaction_key(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute key__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute callStatus() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-enum borogove_encryption_status borogove_encryption_info_status(void *a0) {
+void *borogove_chat_dtmf(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return static_cast<enum borogove_encryption_status>((borogove::EncryptionInfo((hx::Object *)a0, true))->status__fromC());
+		return HaxeCBridge::retainHaxeObject((borogove::Chat((hx::Object *)a0, true))->dtmf());
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		enum borogove_encryption_status ret;
+		void * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = static_cast<enum borogove_encryption_status>((borogove::EncryptionInfo((hx::Object *)data->args.a0, true))->status__fromC());
+				data->ret = HaxeCBridge::retainHaxeObject((borogove::Chat((hx::Object *)data->args.a0, true))->dtmf());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -2084,28 +2046,28 @@ enum borogove_encryption_status borogove_encryption_info_status(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute status__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute dtmf() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_encryption_info_method(void *a0) {
+size_t borogove_chat_video_tracks(void *a0, void ***a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::EncryptionInfo((hx::Object *)a0, true))->method__fromC());
+		return (borogove::Chat((hx::Object *)a0, true))->videoTracks__fromC(a1);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; void*** a1;} args;
 		HxSemaphore lock;
-		const char * ret;
+		size_t ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::EncryptionInfo((hx::Object *)data->args.a0, true))->method__fromC());
+				data->ret = (borogove::Chat((hx::Object *)data->args.a0, true))->videoTracks__fromC(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -2118,18 +2080,18 @@ const char *borogove_encryption_info_method(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute method__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute videoTracks__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_encryption_info_method_name(void *a0) {
+const char *borogove_chat_encryption_mode(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::EncryptionInfo((hx::Object *)a0, true))->methodName__fromC());
+		return HaxeCBridge::retainHaxeString((borogove::Chat((hx::Object *)a0, true))->encryptionMode());
 	}
 	struct Data {
 		struct {void * a0;} args;
@@ -2141,7 +2103,7 @@ const char *borogove_encryption_info_method_name(void *a0) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::EncryptionInfo((hx::Object *)data->args.a0, true))->methodName__fromC());
+				data->ret = HaxeCBridge::retainHaxeString((borogove::Chat((hx::Object *)data->args.a0, true))->encryptionMode());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -2156,28 +2118,28 @@ const char *borogove_encryption_info_method_name(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute methodName__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute encryptionMode() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_encryption_info_reason(void *a0) {
+bool borogove_chat_can_send(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::EncryptionInfo((hx::Object *)a0, true))->reason__fromC());
+		return (borogove::Chat((hx::Object *)a0, true))->canSend();
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		const char * ret;
+		bool ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::EncryptionInfo((hx::Object *)data->args.a0, true))->reason__fromC());
+				data->ret = (borogove::Chat((hx::Object *)data->args.a0, true))->canSend();
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -2192,28 +2154,27 @@ const char *borogove_encryption_info_reason(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute reason__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute canSend() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_encryption_info_reason_text(void *a0) {
+void borogove_chat_invite(void *a0, void *a1, const char *a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::EncryptionInfo((hx::Object *)a0, true))->reasonText__fromC());
+		return (borogove::Chat((hx::Object *)a0, true))->invite(Dynamic((hx::Object *)a1), a2);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; void * a1; const char * a2;} args;
 		HxSemaphore lock;
-		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::EncryptionInfo((hx::Object *)data->args.a0, true))->reasonText__fromC());
+				(borogove::Chat((hx::Object *)data->args.a0, true))->invite(Dynamic((hx::Object *)data->args.a1), data->args.a2);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -2226,30 +2187,29 @@ const char *borogove_encryption_info_reason_text(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1, a2} };
 
-	// queue a callback to execute reasonText__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute invite() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void *borogove_chat_message_builder_new() {
+bool borogove_chat_can_invite(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeObject(borogove::ChatMessageBuilder_obj::__new());
+		return (borogove::Chat((hx::Object *)a0, true))->canInvite();
 	}
 	struct Data {
-		struct {} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
-		void * ret;
+		bool ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeObject(borogove::ChatMessageBuilder_obj::__new());
+				data->ret = (borogove::Chat((hx::Object *)data->args.a0, true))->canInvite();
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -2262,30 +2222,30 @@ void *borogove_chat_message_builder_new() {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {} };
+	Data data = { {a0} };
 
-	// queue a callback to execute new() on the main thread and wait until execution completes
+	// queue a callback to execute canInvite() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_chat_message_builder_local_id(void *a0) {
+bool borogove_chat_is_app(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)a0, true))->localId__fromC());
+		return (borogove::Chat((hx::Object *)a0, true))->isApp();
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		const char * ret;
+		bool ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->localId__fromC());
+				data->ret = (borogove::Chat((hx::Object *)data->args.a0, true))->isApp();
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -2300,27 +2260,28 @@ const char *borogove_chat_message_builder_local_id(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute localId__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute isApp() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_message_builder_set_local_id(void *a0, const char *a1) {
+bool borogove_chat_has_commands(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->set_localId__fromC(a1);
+		return (borogove::Chat((hx::Object *)a0, true))->hasCommands();
 	}
 	struct Data {
-		struct {void * a0; const char * a1;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
+		bool ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->set_localId__fromC(data->args.a1);
+				data->ret = (borogove::Chat((hx::Object *)data->args.a0, true))->hasCommands();
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -2333,29 +2294,29 @@ void borogove_chat_message_builder_set_local_id(void *a0, const char *a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0} };
 
-	// queue a callback to execute set_localId__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute hasCommands() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_chat_message_builder_server_id(void *a0) {
+void borogove_chat_commands(void *a0, void (*a1) (void**, size_t, void *handler__context), void *a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)a0, true))->serverId__fromC());
+		return (borogove::Chat((hx::Object *)a0, true))->commands__fromC(cpp::Function<void(void**, size_t, void * handler__context)>(a1), a2);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; void (* a1) (void**, size_t, void * handler__context); void* a2;} args;
 		HxSemaphore lock;
-		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->serverId__fromC());
+				(borogove::Chat((hx::Object *)data->args.a0, true))->commands__fromC(cpp::Function<void(void**, size_t, void * handler__context)>(data->args.a1), data->args.a2);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -2368,29 +2329,29 @@ const char *borogove_chat_message_builder_server_id(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1, a2} };
 
-	// queue a callback to execute serverId__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute commands__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_message_builder_set_server_id(void *a0, const char *a1) {
+void *borogove_chat_invited_by(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->set_serverId__fromC(a1);
+		return HaxeCBridge::retainHaxeObject((borogove::Chat((hx::Object *)a0, true))->invitedBy());
 	}
 	struct Data {
-		struct {void * a0; const char * a1;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
+		void * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->set_serverId__fromC(data->args.a1);
+				data->ret = HaxeCBridge::retainHaxeObject((borogove::Chat((hx::Object *)data->args.a0, true))->invitedBy());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -2403,17 +2364,18 @@ void borogove_chat_message_builder_set_server_id(void *a0, const char *a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0} };
 
-	// queue a callback to execute set_serverId__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute invitedBy() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_chat_message_builder_server_id_by(void *a0) {
+const char *borogove_chat_message_local_id(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)a0, true))->serverIdBy__fromC());
+		return HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)a0, true))->localId__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
@@ -2425,7 +2387,7 @@ const char *borogove_chat_message_builder_server_id_by(void *a0) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->serverIdBy__fromC());
+				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)data->args.a0, true))->localId__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -2440,27 +2402,28 @@ const char *borogove_chat_message_builder_server_id_by(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute serverIdBy__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute localId__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_message_builder_set_server_id_by(void *a0, const char *a1) {
+const char *borogove_chat_message_server_id(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->set_serverIdBy__fromC(a1);
+		return HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)a0, true))->serverId__fromC());
 	}
 	struct Data {
-		struct {void * a0; const char * a1;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->set_serverIdBy__fromC(data->args.a1);
+				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)data->args.a0, true))->serverId__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -2473,29 +2436,30 @@ void borogove_chat_message_builder_set_server_id_by(void *a0, const char *a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0} };
 
-	// queue a callback to execute set_serverIdBy__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute serverId__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-enum borogove_message_type borogove_chat_message_builder_type(void *a0) {
+const char *borogove_chat_message_server_id_by(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return static_cast<enum borogove_message_type>((borogove::ChatMessageBuilder((hx::Object *)a0, true))->type__fromC());
+		return HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)a0, true))->serverIdBy__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		enum borogove_message_type ret;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = static_cast<enum borogove_message_type>((borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->type__fromC());
+				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)data->args.a0, true))->serverIdBy__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -2510,27 +2474,28 @@ enum borogove_message_type borogove_chat_message_builder_type(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute type__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute serverIdBy__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_message_builder_set_type(void *a0, enum borogove_message_type a1) {
+enum borogove_message_type borogove_chat_message_type(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->set_type__fromC(a1);
+		return static_cast<enum borogove_message_type>((borogove::ChatMessage((hx::Object *)a0, true))->type__fromC());
 	}
 	struct Data {
-		struct {void * a0; enum borogove_message_type a1;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
+		enum borogove_message_type ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->set_type__fromC(data->args.a1);
+				data->ret = static_cast<enum borogove_message_type>((borogove::ChatMessage((hx::Object *)data->args.a0, true))->type__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -2543,17 +2508,18 @@ void borogove_chat_message_builder_set_type(void *a0, enum borogove_message_type
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0} };
 
-	// queue a callback to execute set_type__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute type__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_chat_message_builder_timestamp(void *a0) {
+const char *borogove_chat_message_timestamp(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)a0, true))->timestamp__fromC());
+		return HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)a0, true))->timestamp__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
@@ -2565,7 +2531,7 @@ const char *borogove_chat_message_builder_timestamp(void *a0) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->timestamp__fromC());
+				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)data->args.a0, true))->timestamp__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -2587,20 +2553,21 @@ const char *borogove_chat_message_builder_timestamp(void *a0) {
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_message_builder_set_timestamp(void *a0, const char *a1) {
+const char *borogove_chat_message_sender_id(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->set_timestamp__fromC(a1);
+		return HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)a0, true))->senderId__fromC());
 	}
 	struct Data {
-		struct {void * a0; const char * a1;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->set_timestamp__fromC(data->args.a1);
+				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)data->args.a0, true))->senderId__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -2613,29 +2580,30 @@ void borogove_chat_message_builder_set_timestamp(void *a0, const char *a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0} };
 
-	// queue a callback to execute set_timestamp__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute senderId__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_chat_message_builder_sender_id(void *a0) {
+void *borogove_chat_message_reply_to_message(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)a0, true))->senderId__fromC());
+		return HaxeCBridge::retainHaxeObject((borogove::ChatMessage((hx::Object *)a0, true))->replyToMessage__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		const char * ret;
+		void * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->senderId__fromC());
+				data->ret = HaxeCBridge::retainHaxeObject((borogove::ChatMessage((hx::Object *)data->args.a0, true))->replyToMessage__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -2650,27 +2618,28 @@ const char *borogove_chat_message_builder_sender_id(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute senderId__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute replyToMessage__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_message_builder_set_sender_id(void *a0, const char *a1) {
+const char *borogove_chat_message_thread_id(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->set_senderId__fromC(a1);
+		return HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)a0, true))->threadId__fromC());
 	}
 	struct Data {
-		struct {void * a0; const char * a1;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->set_senderId__fromC(data->args.a1);
+				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)data->args.a0, true))->threadId__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -2683,29 +2652,30 @@ void borogove_chat_message_builder_set_sender_id(void *a0, const char *a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0} };
 
-	// queue a callback to execute set_senderId__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute threadId__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void *borogove_chat_message_builder_reply_to_message(void *a0) {
+size_t borogove_chat_message_attachments(void *a0, void ***a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeObject((borogove::ChatMessageBuilder((hx::Object *)a0, true))->replyToMessage__fromC());
+		return (borogove::ChatMessage((hx::Object *)a0, true))->attachments__fromC(a1);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; void*** a1;} args;
 		HxSemaphore lock;
-		void * ret;
+		size_t ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeObject((borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->replyToMessage__fromC());
+				data->ret = (borogove::ChatMessage((hx::Object *)data->args.a0, true))->attachments__fromC(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -2718,29 +2688,30 @@ void *borogove_chat_message_builder_reply_to_message(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute replyToMessage__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute attachments__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_message_builder_set_reply_to_message(void *a0, void *a1) {
+size_t borogove_chat_message_reaction_keys(void *a0, const char ***a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->set_replyToMessage__fromC(Dynamic((hx::Object *)a1));
+		return (borogove::ChatMessage((hx::Object *)a0, true))->reactionKeys__fromC(a1);
 	}
 	struct Data {
-		struct {void * a0; void * a1;} args;
+		struct {void * a0; const char*** a1;} args;
 		HxSemaphore lock;
+		size_t ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->set_replyToMessage__fromC(Dynamic((hx::Object *)data->args.a1));
+				data->ret = (borogove::ChatMessage((hx::Object *)data->args.a0, true))->reactionKeys__fromC(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -2755,27 +2726,28 @@ void borogove_chat_message_builder_set_reply_to_message(void *a0, void *a1) {
 
 	Data data = { {a0, a1} };
 
-	// queue a callback to execute set_replyToMessage__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute reactionKeys__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_chat_message_builder_thread_id(void *a0) {
+size_t borogove_chat_message_reaction_details(void *a0, const char *a1, void ***a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)a0, true))->threadId__fromC());
+		return (borogove::ChatMessage((hx::Object *)a0, true))->reactionDetails__fromC(a1, a2);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; const char * a1; void*** a2;} args;
 		HxSemaphore lock;
-		const char * ret;
+		size_t ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->threadId__fromC());
+				data->ret = (borogove::ChatMessage((hx::Object *)data->args.a0, true))->reactionDetails__fromC(data->args.a1, data->args.a2);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -2788,29 +2760,30 @@ const char *borogove_chat_message_builder_thread_id(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1, a2} };
 
-	// queue a callback to execute threadId__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute reactionDetails__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_message_builder_set_thread_id(void *a0, const char *a1) {
+const char *borogove_chat_message_text(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->set_threadId__fromC(a1);
+		return HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)a0, true))->text__fromC());
 	}
 	struct Data {
-		struct {void * a0; const char * a1;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->set_threadId__fromC(data->args.a1);
+				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)data->args.a0, true))->text__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -2823,29 +2796,30 @@ void borogove_chat_message_builder_set_thread_id(void *a0, const char *a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0} };
 
-	// queue a callback to execute set_threadId__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute text__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-size_t borogove_chat_message_builder_attachments(void *a0, void ***a1) {
+const char *borogove_chat_message_lang(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->attachments__fromC(a1);
+		return HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)a0, true))->lang__fromC());
 	}
 	struct Data {
-		struct {void * a0; void*** a1;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
-		size_t ret;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->attachments__fromC(data->args.a1);
+				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)data->args.a0, true))->lang__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -2858,30 +2832,30 @@ size_t borogove_chat_message_builder_attachments(void *a0, void ***a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0} };
 
-	// queue a callback to execute attachments__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute lang__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_chat_message_builder_text(void *a0) {
+enum borogove_message_direction borogove_chat_message_direction(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)a0, true))->text__fromC());
+		return static_cast<enum borogove_message_direction>((borogove::ChatMessage((hx::Object *)a0, true))->direction__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		const char * ret;
+		enum borogove_message_direction ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->text__fromC());
+				data->ret = static_cast<enum borogove_message_direction>((borogove::ChatMessage((hx::Object *)data->args.a0, true))->direction__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -2896,27 +2870,28 @@ const char *borogove_chat_message_builder_text(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute text__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute direction__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_message_builder_set_text(void *a0, const char *a1) {
+enum borogove_message_status borogove_chat_message_status(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->set_text__fromC(a1);
+		return static_cast<enum borogove_message_status>((borogove::ChatMessage((hx::Object *)a0, true))->status__fromC());
 	}
 	struct Data {
-		struct {void * a0; const char * a1;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
+		enum borogove_message_status ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->set_text__fromC(data->args.a1);
+				data->ret = static_cast<enum borogove_message_status>((borogove::ChatMessage((hx::Object *)data->args.a0, true))->status__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -2929,17 +2904,18 @@ void borogove_chat_message_builder_set_text(void *a0, const char *a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0} };
 
-	// queue a callback to execute set_text__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute status__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_chat_message_builder_lang(void *a0) {
+const char *borogove_chat_message_status_text(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)a0, true))->lang__fromC());
+		return HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)a0, true))->statusText__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
@@ -2951,7 +2927,7 @@ const char *borogove_chat_message_builder_lang(void *a0) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->lang__fromC());
+				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)data->args.a0, true))->statusText__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -2966,27 +2942,28 @@ const char *borogove_chat_message_builder_lang(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute lang__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute statusText__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_message_builder_set_lang(void *a0, const char *a1) {
+size_t borogove_chat_message_versions(void *a0, void ***a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->set_lang__fromC(a1);
+		return (borogove::ChatMessage((hx::Object *)a0, true))->versions__fromC(a1);
 	}
 	struct Data {
-		struct {void * a0; const char * a1;} args;
+		struct {void * a0; void*** a1;} args;
 		HxSemaphore lock;
+		size_t ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->set_lang__fromC(data->args.a1);
+				data->ret = (borogove::ChatMessage((hx::Object *)data->args.a0, true))->versions__fromC(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -3001,27 +2978,28 @@ void borogove_chat_message_builder_set_lang(void *a0, const char *a1) {
 
 	Data data = { {a0, a1} };
 
-	// queue a callback to execute set_lang__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute versions__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-enum borogove_message_direction borogove_chat_message_builder_direction(void *a0) {
+void *borogove_chat_message_encryption(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return static_cast<enum borogove_message_direction>((borogove::ChatMessageBuilder((hx::Object *)a0, true))->direction__fromC());
+		return HaxeCBridge::retainHaxeObject((borogove::ChatMessage((hx::Object *)a0, true))->encryption__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		enum borogove_message_direction ret;
+		void * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = static_cast<enum borogove_message_direction>((borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->direction__fromC());
+				data->ret = HaxeCBridge::retainHaxeObject((borogove::ChatMessage((hx::Object *)data->args.a0, true))->encryption__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -3036,27 +3014,28 @@ enum borogove_message_direction borogove_chat_message_builder_direction(void *a0
 
 	Data data = { {a0} };
 
-	// queue a callback to execute direction__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute encryption__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_message_builder_set_direction(void *a0, enum borogove_message_direction a1) {
+void *borogove_chat_message_reply(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->set_direction__fromC(a1);
+		return HaxeCBridge::retainHaxeObject((borogove::ChatMessage((hx::Object *)a0, true))->reply());
 	}
 	struct Data {
-		struct {void * a0; enum borogove_message_direction a1;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
+		void * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->set_direction__fromC(data->args.a1);
+				data->ret = HaxeCBridge::retainHaxeObject((borogove::ChatMessage((hx::Object *)data->args.a0, true))->reply());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -3069,29 +3048,30 @@ void borogove_chat_message_builder_set_direction(void *a0, enum borogove_message
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0} };
 
-	// queue a callback to execute set_direction__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute reply() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-enum borogove_message_status borogove_chat_message_builder_status(void *a0) {
+const char *borogove_chat_message_html(void *a0, void *a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return static_cast<enum borogove_message_status>((borogove::ChatMessageBuilder((hx::Object *)a0, true))->status__fromC());
+		return HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)a0, true))->html(Dynamic((hx::Object *)a1)));
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; void * a1;} args;
 		HxSemaphore lock;
-		enum borogove_message_status ret;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = static_cast<enum borogove_message_status>((borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->status__fromC());
+				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)data->args.a0, true))->html(Dynamic((hx::Object *)data->args.a1)));
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -3104,29 +3084,30 @@ enum borogove_message_status borogove_chat_message_builder_status(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute status__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute html() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_message_builder_set_status(void *a0, enum borogove_message_status a1) {
+const char *borogove_chat_message_chat_id(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->set_status__fromC(a1);
+		return HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)a0, true))->chatId());
 	}
 	struct Data {
-		struct {void * a0; enum borogove_message_status a1;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->set_status__fromC(data->args.a1);
+				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)data->args.a0, true))->chatId());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -3139,17 +3120,18 @@ void borogove_chat_message_builder_set_status(void *a0, enum borogove_message_st
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0} };
 
-	// queue a callback to execute set_status__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute chatId() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_chat_message_builder_status_text(void *a0) {
+const char *borogove_chat_message_account(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)a0, true))->statusText__fromC());
+		return HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)a0, true))->account());
 	}
 	struct Data {
 		struct {void * a0;} args;
@@ -3161,7 +3143,7 @@ const char *borogove_chat_message_builder_status_text(void *a0) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->statusText__fromC());
+				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)data->args.a0, true))->account());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -3176,27 +3158,28 @@ const char *borogove_chat_message_builder_status_text(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute statusText__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute account() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_message_builder_set_status_text(void *a0, const char *a1) {
+bool borogove_chat_message_is_incoming(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->set_statusText__fromC(a1);
+		return (borogove::ChatMessage((hx::Object *)a0, true))->isIncoming();
 	}
 	struct Data {
-		struct {void * a0; const char * a1;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
+		bool ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->set_statusText__fromC(data->args.a1);
+				data->ret = (borogove::ChatMessage((hx::Object *)data->args.a0, true))->isIncoming();
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -3209,28 +3192,30 @@ void borogove_chat_message_builder_set_status_text(void *a0, const char *a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0} };
 
-	// queue a callback to execute set_statusText__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute isIncoming() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_message_builder_set_versions(void *a0, void *const *a1, size_t a2) {
+const char *borogove_chat_message_thread_icon(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->set_versions__fromC(a1, a2);
+		return HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)a0, true))->threadIcon());
 	}
 	struct Data {
-		struct {void * a0; void* const* a1; size_t a2;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->set_versions__fromC(data->args.a1, data->args.a2);
+				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)data->args.a0, true))->threadIcon());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -3243,29 +3228,30 @@ void borogove_chat_message_builder_set_versions(void *a0, void *const *a1, size_
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2} };
+	Data data = { {a0} };
 
-	// queue a callback to execute set_versions__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute threadIcon() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-size_t borogove_chat_message_builder_versions(void *a0, void ***a1) {
+const char *borogove_chat_message_call_status(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->versions__fromC(a1);
+		return HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)a0, true))->callStatus());
 	}
 	struct Data {
-		struct {void * a0; void*** a1;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
-		size_t ret;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->versions__fromC(data->args.a1);
+				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)data->args.a0, true))->callStatus());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -3278,30 +3264,30 @@ size_t borogove_chat_message_builder_versions(void *a0, void ***a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0} };
 
-	// queue a callback to execute versions__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute callStatus() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void *borogove_chat_message_builder_encryption(void *a0) {
+const char *borogove_chat_message_call_sid(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeObject((borogove::ChatMessageBuilder((hx::Object *)a0, true))->encryption__fromC());
+		return HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)a0, true))->callSid());
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		void * ret;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeObject((borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->encryption__fromC());
+				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)data->args.a0, true))->callSid());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -3316,27 +3302,28 @@ void *borogove_chat_message_builder_encryption(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute encryption__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute callSid() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_message_builder_set_encryption(void *a0, void *a1) {
+const char *borogove_chat_message_call_duration(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->set_encryption__fromC(Dynamic((hx::Object *)a1));
+		return HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)a0, true))->callDuration());
 	}
 	struct Data {
-		struct {void * a0; void * a1;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->set_encryption__fromC(Dynamic((hx::Object *)data->args.a1));
+				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessage((hx::Object *)data->args.a0, true))->callDuration());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -3349,28 +3336,30 @@ void borogove_chat_message_builder_set_encryption(void *a0, void *a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0} };
 
-	// queue a callback to execute set_encryption__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute callDuration() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_message_builder_add_attachment(void *a0, void *a1) {
+void *borogove_chat_attachment_create(const char *a0, const char *a1, int a2, const char *a3) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->addAttachment(Dynamic((hx::Object *)a1));
+		return HaxeCBridge::retainHaxeObject(borogove::ChatAttachment_obj::create(a0, a1, a2, a3));
 	}
 	struct Data {
-		struct {void * a0; void * a1;} args;
+		struct {const char * a0; const char * a1; int a2; const char * a3;} args;
 		HxSemaphore lock;
+		void * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->addAttachment(Dynamic((hx::Object *)data->args.a1));
+				data->ret = HaxeCBridge::retainHaxeObject(borogove::ChatAttachment_obj::create(data->args.a0, data->args.a1, data->args.a2, data->args.a3));
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -3383,28 +3372,30 @@ void borogove_chat_message_builder_add_attachment(void *a0, void *a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0, a1, a2, a3} };
 
-	// queue a callback to execute addAttachment() on the main thread and wait until execution completes
+	// queue a callback to execute create() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_message_builder_set_html(void *a0, const char *a1) {
+const char *borogove_chat_attachment_name(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->setHtml(a1);
+		return HaxeCBridge::retainHaxeString((borogove::ChatAttachment((hx::Object *)a0, true))->name__fromC());
 	}
 	struct Data {
-		struct {void * a0; const char * a1;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->setHtml(data->args.a1);
+				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatAttachment((hx::Object *)data->args.a0, true))->name__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -3417,17 +3408,18 @@ void borogove_chat_message_builder_set_html(void *a0, const char *a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0} };
 
-	// queue a callback to execute setHtml() on the main thread and wait until execution completes
+	// queue a callback to execute name__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_chat_message_builder_chat_id(void *a0) {
+const char *borogove_chat_attachment_mime(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)a0, true))->chatId());
+		return HaxeCBridge::retainHaxeString((borogove::ChatAttachment((hx::Object *)a0, true))->mime__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
@@ -3439,7 +3431,7 @@ const char *borogove_chat_message_builder_chat_id(void *a0) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->chatId());
+				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatAttachment((hx::Object *)data->args.a0, true))->mime__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -3454,28 +3446,28 @@ const char *borogove_chat_message_builder_chat_id(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute chatId() on the main thread and wait until execution completes
+	// queue a callback to execute mime__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_chat_message_builder_get_sender_id(void *a0) {
+int borogove_chat_attachment_size(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)a0, true))->get_senderId());
+		return (borogove::ChatAttachment((hx::Object *)a0, true))->size__fromC();
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		const char * ret;
+		int ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->get_senderId());
+				data->ret = (borogove::ChatAttachment((hx::Object *)data->args.a0, true))->size__fromC();
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -3490,28 +3482,28 @@ const char *borogove_chat_message_builder_get_sender_id(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute get_senderId() on the main thread and wait until execution completes
+	// queue a callback to execute size__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void *borogove_chat_message_builder_build(void *a0) {
+size_t borogove_chat_attachment_uris(void *a0, const char ***a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeObject((borogove::ChatMessageBuilder((hx::Object *)a0, true))->build());
+		return (borogove::ChatAttachment((hx::Object *)a0, true))->uris__fromC(a1);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; const char*** a1;} args;
 		HxSemaphore lock;
-		void * ret;
+		size_t ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeObject((borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->build());
+				data->ret = (borogove::ChatAttachment((hx::Object *)data->args.a0, true))->uris__fromC(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -3524,30 +3516,30 @@ void *borogove_chat_message_builder_build(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute build() on the main thread and wait until execution completes
+	// queue a callback to execute uris__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_participant_display_name(void *a0) {
+size_t borogove_chat_attachment_hashes(void *a0, void ***a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::Participant((hx::Object *)a0, true))->displayName__fromC());
+		return (borogove::ChatAttachment((hx::Object *)a0, true))->hashes__fromC(a1);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; void*** a1;} args;
 		HxSemaphore lock;
-		const char * ret;
+		size_t ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::Participant((hx::Object *)data->args.a0, true))->displayName__fromC());
+				data->ret = (borogove::ChatAttachment((hx::Object *)data->args.a0, true))->hashes__fromC(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -3560,30 +3552,30 @@ const char *borogove_participant_display_name(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute displayName__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute hashes__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_participant_photo_uri(void *a0) {
+void *borogove_hash_from_hex(const char *a0, const char *a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::Participant((hx::Object *)a0, true))->photoUri__fromC());
+		return HaxeCBridge::retainHaxeObject(borogove::Hash_obj::fromHex(a0, a1));
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {const char * a0; const char * a1;} args;
 		HxSemaphore lock;
-		const char * ret;
+		void * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::Participant((hx::Object *)data->args.a0, true))->photoUri__fromC());
+				data->ret = HaxeCBridge::retainHaxeObject(borogove::Hash_obj::fromHex(data->args.a0, data->args.a1));
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -3596,30 +3588,30 @@ const char *borogove_participant_photo_uri(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute photoUri__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute fromHex() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_participant_placeholder_uri(void *a0) {
+void *borogove_hash_from_uri(const char *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::Participant((hx::Object *)a0, true))->placeholderUri__fromC());
+		return HaxeCBridge::retainHaxeObject(borogove::Hash_obj::fromUri(a0));
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {const char * a0;} args;
 		HxSemaphore lock;
-		const char * ret;
+		void * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::Participant((hx::Object *)data->args.a0, true))->placeholderUri__fromC());
+				data->ret = HaxeCBridge::retainHaxeObject(borogove::Hash_obj::fromUri(data->args.a0));
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -3634,28 +3626,28 @@ const char *borogove_participant_placeholder_uri(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute placeholderUri__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute fromUri() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-bool borogove_participant_is_self(void *a0) {
+const char *borogove_hash_algorithm(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Participant((hx::Object *)a0, true))->isSelf__fromC();
+		return HaxeCBridge::retainHaxeString((borogove::Hash((hx::Object *)a0, true))->algorithm__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		bool ret;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::Participant((hx::Object *)data->args.a0, true))->isSelf__fromC();
+				data->ret = HaxeCBridge::retainHaxeString((borogove::Hash((hx::Object *)data->args.a0, true))->algorithm__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -3670,27 +3662,28 @@ bool borogove_participant_is_self(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute isSelf__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute algorithm__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_participant_profile(void *a0, void *a1, void (*a2) (void*, void *handler__context), void *a3) {
+const char *borogove_hash_to_uri(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Participant((hx::Object *)a0, true))->profile__fromC(Dynamic((hx::Object *)a1), cpp::Function<void(void*, void * handler__context)>(a2), a3);
+		return HaxeCBridge::retainHaxeString((borogove::Hash((hx::Object *)a0, true))->toUri());
 	}
 	struct Data {
-		struct {void * a0; void * a1; void (* a2) (void*, void * handler__context); void* a3;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::Participant((hx::Object *)data->args.a0, true))->profile__fromC(Dynamic((hx::Object *)data->args.a1), cpp::Function<void(void*, void * handler__context)>(data->args.a2), data->args.a3);
+				data->ret = HaxeCBridge::retainHaxeString((borogove::Hash((hx::Object *)data->args.a0, true))->toUri());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -3703,29 +3696,30 @@ void borogove_participant_profile(void *a0, void *a1, void (*a2) (void*, void *h
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2, a3} };
+	Data data = { {a0} };
 
-	// queue a callback to execute profile__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute toUri() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-size_t borogove_profile_items(void *a0, void ***a1) {
+const char *borogove_hash_to_hex(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Profile((hx::Object *)a0, true))->items__fromC(a1);
+		return HaxeCBridge::retainHaxeString((borogove::Hash((hx::Object *)a0, true))->toHex());
 	}
 	struct Data {
-		struct {void * a0; void*** a1;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
-		size_t ret;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::Profile((hx::Object *)data->args.a0, true))->items__fromC(data->args.a1);
+				data->ret = HaxeCBridge::retainHaxeString((borogove::Hash((hx::Object *)data->args.a0, true))->toHex());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -3738,18 +3732,18 @@ size_t borogove_profile_items(void *a0, void ***a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0} };
 
-	// queue a callback to execute items__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute toHex() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_profile_item_id(void *a0) {
+const char *borogove_hash_to_base_64(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::ProfileItem((hx::Object *)a0, true))->id__fromC());
+		return HaxeCBridge::retainHaxeString((borogove::Hash((hx::Object *)a0, true))->toBase64());
 	}
 	struct Data {
 		struct {void * a0;} args;
@@ -3761,7 +3755,7 @@ const char *borogove_profile_item_id(void *a0) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::ProfileItem((hx::Object *)data->args.a0, true))->id__fromC());
+				data->ret = HaxeCBridge::retainHaxeString((borogove::Hash((hx::Object *)data->args.a0, true))->toBase64());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -3776,16 +3770,16 @@ const char *borogove_profile_item_id(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute id__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute toBase64() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_profile_item_key(void *a0) {
+const char *borogove_hash_to_base_64_url(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::ProfileItem((hx::Object *)a0, true))->key__fromC());
+		return HaxeCBridge::retainHaxeString((borogove::Hash((hx::Object *)a0, true))->toBase64Url());
 	}
 	struct Data {
 		struct {void * a0;} args;
@@ -3797,7 +3791,7 @@ const char *borogove_profile_item_key(void *a0) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::ProfileItem((hx::Object *)data->args.a0, true))->key__fromC());
+				data->ret = HaxeCBridge::retainHaxeString((borogove::Hash((hx::Object *)data->args.a0, true))->toBase64Url());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -3812,28 +3806,28 @@ const char *borogove_profile_item_key(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute key__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute toBase64Url() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-size_t borogove_profile_item_parameters(void *a0, void ***a1) {
+void *borogove_reaction_unicode(const char *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::ProfileItem((hx::Object *)a0, true))->parameters__fromC(a1);
+		return HaxeCBridge::retainHaxeObject(borogove::Reaction_obj::unicode(a0));
 	}
 	struct Data {
-		struct {void * a0; void*** a1;} args;
+		struct {const char * a0;} args;
 		HxSemaphore lock;
-		size_t ret;
+		void * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::ProfileItem((hx::Object *)data->args.a0, true))->parameters__fromC(data->args.a1);
+				data->ret = HaxeCBridge::retainHaxeObject(borogove::Reaction_obj::unicode(data->args.a0));
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -3846,30 +3840,30 @@ size_t borogove_profile_item_parameters(void *a0, void ***a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0} };
 
-	// queue a callback to execute parameters__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute unicode() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-size_t borogove_profile_item_text(void *a0, const char ***a1) {
+const char *borogove_reaction_sender_id(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::ProfileItem((hx::Object *)a0, true))->text__fromC(a1);
+		return HaxeCBridge::retainHaxeString((borogove::Reaction((hx::Object *)a0, true))->senderId__fromC());
 	}
 	struct Data {
-		struct {void * a0; const char*** a1;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
-		size_t ret;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::ProfileItem((hx::Object *)data->args.a0, true))->text__fromC(data->args.a1);
+				data->ret = HaxeCBridge::retainHaxeString((borogove::Reaction((hx::Object *)data->args.a0, true))->senderId__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -3882,30 +3876,30 @@ size_t borogove_profile_item_text(void *a0, const char ***a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0} };
 
-	// queue a callback to execute text__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute senderId__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-size_t borogove_profile_item_uri(void *a0, const char ***a1) {
+const char *borogove_reaction_timestamp(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::ProfileItem((hx::Object *)a0, true))->uri__fromC(a1);
+		return HaxeCBridge::retainHaxeString((borogove::Reaction((hx::Object *)a0, true))->timestamp__fromC());
 	}
 	struct Data {
-		struct {void * a0; const char*** a1;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
-		size_t ret;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::ProfileItem((hx::Object *)data->args.a0, true))->uri__fromC(data->args.a1);
+				data->ret = HaxeCBridge::retainHaxeString((borogove::Reaction((hx::Object *)data->args.a0, true))->timestamp__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -3918,30 +3912,30 @@ size_t borogove_profile_item_uri(void *a0, const char ***a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0} };
 
-	// queue a callback to execute uri__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute timestamp__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-size_t borogove_profile_item_date(void *a0, const char ***a1) {
+const char *borogove_reaction_key(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::ProfileItem((hx::Object *)a0, true))->date__fromC(a1);
+		return HaxeCBridge::retainHaxeString((borogove::Reaction((hx::Object *)a0, true))->key__fromC());
 	}
 	struct Data {
-		struct {void * a0; const char*** a1;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
-		size_t ret;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::ProfileItem((hx::Object *)data->args.a0, true))->date__fromC(data->args.a1);
+				data->ret = HaxeCBridge::retainHaxeString((borogove::Reaction((hx::Object *)data->args.a0, true))->key__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -3954,30 +3948,30 @@ size_t borogove_profile_item_date(void *a0, const char ***a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0} };
 
-	// queue a callback to execute date__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute key__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-size_t borogove_profile_item_time(void *a0, const char ***a1) {
+enum borogove_encryption_status borogove_encryption_info_status(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::ProfileItem((hx::Object *)a0, true))->time__fromC(a1);
+		return static_cast<enum borogove_encryption_status>((borogove::EncryptionInfo((hx::Object *)a0, true))->status__fromC());
 	}
 	struct Data {
-		struct {void * a0; const char*** a1;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
-		size_t ret;
+		enum borogove_encryption_status ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::ProfileItem((hx::Object *)data->args.a0, true))->time__fromC(data->args.a1);
+				data->ret = static_cast<enum borogove_encryption_status>((borogove::EncryptionInfo((hx::Object *)data->args.a0, true))->status__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -3990,30 +3984,30 @@ size_t borogove_profile_item_time(void *a0, const char ***a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0} };
 
-	// queue a callback to execute time__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute status__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-size_t borogove_profile_item_datetime(void *a0, const char ***a1) {
+const char *borogove_encryption_info_method(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::ProfileItem((hx::Object *)a0, true))->datetime__fromC(a1);
+		return HaxeCBridge::retainHaxeString((borogove::EncryptionInfo((hx::Object *)a0, true))->method__fromC());
 	}
 	struct Data {
-		struct {void * a0; const char*** a1;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
-		size_t ret;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::ProfileItem((hx::Object *)data->args.a0, true))->datetime__fromC(data->args.a1);
+				data->ret = HaxeCBridge::retainHaxeString((borogove::EncryptionInfo((hx::Object *)data->args.a0, true))->method__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -4026,30 +4020,30 @@ size_t borogove_profile_item_datetime(void *a0, const char ***a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0} };
 
-	// queue a callback to execute datetime__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute method__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-size_t borogove_profile_item_language_tag(void *a0, const char ***a1) {
+const char *borogove_encryption_info_method_name(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::ProfileItem((hx::Object *)a0, true))->languageTag__fromC(a1);
+		return HaxeCBridge::retainHaxeString((borogove::EncryptionInfo((hx::Object *)a0, true))->methodName__fromC());
 	}
 	struct Data {
-		struct {void * a0; const char*** a1;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
-		size_t ret;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::ProfileItem((hx::Object *)data->args.a0, true))->languageTag__fromC(data->args.a1);
+				data->ret = HaxeCBridge::retainHaxeString((borogove::EncryptionInfo((hx::Object *)data->args.a0, true))->methodName__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -4062,30 +4056,30 @@ size_t borogove_profile_item_language_tag(void *a0, const char ***a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0} };
 
-	// queue a callback to execute languageTag__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute methodName__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void *borogove_persistence_dummy_new() {
+const char *borogove_encryption_info_reason(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeObject(borogove::persistence::Dummy_obj::__new());
+		return HaxeCBridge::retainHaxeString((borogove::EncryptionInfo((hx::Object *)a0, true))->reason__fromC());
 	}
 	struct Data {
-		struct {} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
-		void * ret;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeObject(borogove::persistence::Dummy_obj::__new());
+				data->ret = HaxeCBridge::retainHaxeString((borogove::EncryptionInfo((hx::Object *)data->args.a0, true))->reason__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -4098,30 +4092,30 @@ void *borogove_persistence_dummy_new() {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {} };
+	Data data = { {a0} };
 
-	// queue a callback to execute new() on the main thread and wait until execution completes
+	// queue a callback to execute reason__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void *borogove_push_receive(const char *a0, void *a1) {
+const char *borogove_encryption_info_reason_text(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeObject(borogove::Push_obj::receive(a0, Dynamic((hx::Object *)a1)));
+		return HaxeCBridge::retainHaxeString((borogove::EncryptionInfo((hx::Object *)a0, true))->reasonText__fromC());
 	}
 	struct Data {
-		struct {const char * a0; void * a1;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
-		void * ret;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeObject(borogove::Push_obj::receive(data->args.a0, Dynamic((hx::Object *)data->args.a1)));
+				data->ret = HaxeCBridge::retainHaxeString((borogove::EncryptionInfo((hx::Object *)data->args.a0, true))->reasonText__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -4134,18 +4128,18 @@ void *borogove_push_receive(const char *a0, void *a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0} };
 
-	// queue a callback to execute receive() on the main thread and wait until execution completes
+	// queue a callback to execute reasonText__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_notification_title(void *a0) {
+const char *borogove_calls_media_stream_track_id(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)a0, true))->title__fromC());
+		return HaxeCBridge::retainHaxeString((borogove::calls::MediaStreamTrack((hx::Object *)a0, true))->id__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
@@ -4157,7 +4151,7 @@ const char *borogove_notification_title(void *a0) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)data->args.a0, true))->title__fromC());
+				data->ret = HaxeCBridge::retainHaxeString((borogove::calls::MediaStreamTrack((hx::Object *)data->args.a0, true))->id__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -4172,28 +4166,28 @@ const char *borogove_notification_title(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute title__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute id__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_notification_body(void *a0) {
+bool borogove_calls_media_stream_track_muted(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)a0, true))->body__fromC());
+		return (borogove::calls::MediaStreamTrack((hx::Object *)a0, true))->muted__fromC();
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		const char * ret;
+		bool ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)data->args.a0, true))->body__fromC());
+				data->ret = (borogove::calls::MediaStreamTrack((hx::Object *)data->args.a0, true))->muted__fromC();
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -4208,16 +4202,16 @@ const char *borogove_notification_body(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute body__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute muted__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_notification_account_id(void *a0) {
+const char *borogove_calls_media_stream_track_kind(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)a0, true))->accountId__fromC());
+		return HaxeCBridge::retainHaxeString((borogove::calls::MediaStreamTrack((hx::Object *)a0, true))->kind__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
@@ -4229,7 +4223,7 @@ const char *borogove_notification_account_id(void *a0) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)data->args.a0, true))->accountId__fromC());
+				data->ret = HaxeCBridge::retainHaxeString((borogove::calls::MediaStreamTrack((hx::Object *)data->args.a0, true))->kind__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -4244,28 +4238,28 @@ const char *borogove_notification_account_id(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute accountId__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute kind__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_notification_chat_id(void *a0) {
+size_t borogove_calls_media_stream_track_supported_audio_formats(void *a0, void ***a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)a0, true))->chatId__fromC());
+		return (borogove::calls::MediaStreamTrack((hx::Object *)a0, true))->supportedAudioFormats__fromC(a1);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; void*** a1;} args;
 		HxSemaphore lock;
-		const char * ret;
+		size_t ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)data->args.a0, true))->chatId__fromC());
+				data->ret = (borogove::calls::MediaStreamTrack((hx::Object *)data->args.a0, true))->supportedAudioFormats__fromC(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -4278,30 +4272,29 @@ const char *borogove_notification_chat_id(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute chatId__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute supportedAudioFormats__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_notification_sender_id(void *a0) {
+void borogove_calls_media_stream_track_add_pcm_listener(void *a0, void (*a1) (short*, size_t, int, int, void*), void *a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)a0, true))->senderId__fromC());
+		return (borogove::calls::MediaStreamTrack((hx::Object *)a0, true))->addPCMListener__fromC(cpp::Function<void(short*, size_t, int, int, void*)>(a1), a2);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; void (* a1) (short*, size_t, int, int, void*); void* a2;} args;
 		HxSemaphore lock;
-		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)data->args.a0, true))->senderId__fromC());
+				(borogove::calls::MediaStreamTrack((hx::Object *)data->args.a0, true))->addPCMListener__fromC(cpp::Function<void(short*, size_t, int, int, void*)>(data->args.a1), data->args.a2);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -4314,30 +4307,28 @@ const char *borogove_notification_sender_id(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1, a2} };
 
-	// queue a callback to execute senderId__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute addPCMListener__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_notification_message_id(void *a0) {
+void borogove_calls_media_stream_track_add_ready_for_pcm_listener(void *a0, void (*a1) (void*), void *a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)a0, true))->messageId__fromC());
+		return (borogove::calls::MediaStreamTrack((hx::Object *)a0, true))->addReadyForPCMListener__fromC(cpp::Function<void(void*)>(a1), a2);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; void (* a1) (void*); void* a2;} args;
 		HxSemaphore lock;
-		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)data->args.a0, true))->messageId__fromC());
+				(borogove::calls::MediaStreamTrack((hx::Object *)data->args.a0, true))->addReadyForPCMListener__fromC(cpp::Function<void(void*)>(data->args.a1), data->args.a2);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -4350,30 +4341,28 @@ const char *borogove_notification_message_id(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1, a2} };
 
-	// queue a callback to execute messageId__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute addReadyForPCMListener__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-enum borogove_message_type borogove_notification_type(void *a0) {
+void borogove_calls_media_stream_track_write_pcm(void *a0, const short *a1, size_t a2, int a3, int a4) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return static_cast<enum borogove_message_type>((borogove::Notification((hx::Object *)a0, true))->type__fromC());
+		return (borogove::calls::MediaStreamTrack((hx::Object *)a0, true))->writePCM__fromC(a1, a2, a3, a4);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; const short* a1; size_t a2; int a3; int a4;} args;
 		HxSemaphore lock;
-		enum borogove_message_type ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = static_cast<enum borogove_message_type>((borogove::Notification((hx::Object *)data->args.a0, true))->type__fromC());
+				(borogove::calls::MediaStreamTrack((hx::Object *)data->args.a0, true))->writePCM__fromC(data->args.a1, data->args.a2, data->args.a3, data->args.a4);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -4386,30 +4375,28 @@ enum borogove_message_type borogove_notification_type(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1, a2, a3, a4} };
 
-	// queue a callback to execute type__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute writePCM__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_notification_call_status(void *a0) {
+void borogove_calls_media_stream_track_stop(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)a0, true))->callStatus__fromC());
+		return (borogove::calls::MediaStreamTrack((hx::Object *)a0, true))->stop();
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)data->args.a0, true))->callStatus__fromC());
+				(borogove::calls::MediaStreamTrack((hx::Object *)data->args.a0, true))->stop();
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -4424,28 +4411,27 @@ const char *borogove_notification_call_status(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute callStatus__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute stop() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_notification_call_sid(void *a0) {
+void *borogove_calls_audio_format_new(const char *a0, unsigned char a1, int a2, int a3) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)a0, true))->callSid__fromC());
+		return HaxeCBridge::retainHaxeObject(borogove::calls::AudioFormat_obj::__new(a0, a1, a2, a3));
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {const char * a0; unsigned char a1; int a2; int a3;} args;
 		HxSemaphore lock;
-		const char * ret;
+		void * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)data->args.a0, true))->callSid__fromC());
+				data->ret = HaxeCBridge::retainHaxeObject(borogove::calls::AudioFormat_obj::__new(data->args.a0, data->args.a1, data->args.a2, data->args.a3));
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -4458,30 +4444,30 @@ const char *borogove_notification_call_sid(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1, a2, a3} };
 
-	// queue a callback to execute callSid__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute new() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_notification_image_uri(void *a0) {
+int borogove_calls_audio_format_clock_rate(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)a0, true))->imageUri__fromC());
+		return (borogove::calls::AudioFormat((hx::Object *)a0, true))->clockRate__fromC();
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		const char * ret;
+		int ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)data->args.a0, true))->imageUri__fromC());
+				data->ret = (borogove::calls::AudioFormat((hx::Object *)data->args.a0, true))->clockRate__fromC();
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -4496,28 +4482,28 @@ const char *borogove_notification_image_uri(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute imageUri__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute clockRate__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_notification_lang(void *a0) {
+int borogove_calls_audio_format_channels(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)a0, true))->lang__fromC());
+		return (borogove::calls::AudioFormat((hx::Object *)a0, true))->channels__fromC();
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		const char * ret;
+		int ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)data->args.a0, true))->lang__fromC());
+				data->ret = (borogove::calls::AudioFormat((hx::Object *)data->args.a0, true))->channels__fromC();
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -4532,16 +4518,16 @@ const char *borogove_notification_lang(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute lang__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute channels__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_notification_timestamp(void *a0) {
+const char *borogove_command_name(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)a0, true))->timestamp__fromC());
+		return HaxeCBridge::retainHaxeString((borogove::Command((hx::Object *)a0, true))->name__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
@@ -4553,7 +4539,7 @@ const char *borogove_notification_timestamp(void *a0) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)data->args.a0, true))->timestamp__fromC());
+				data->ret = HaxeCBridge::retainHaxeString((borogove::Command((hx::Object *)data->args.a0, true))->name__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -4568,19 +4554,19 @@ const char *borogove_notification_timestamp(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute timestamp__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute name__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_event_emitter_remove_event_listener(void *a0, borogove_event_handler_token a1) {
+void borogove_command_execute(void *a0, void (*a1) (void*, void *handler__context), void *a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::EventEmitter((hx::Object *)a0, true))->removeEventListener(a1);
+		return (borogove::Command((hx::Object *)a0, true))->execute__fromC(cpp::Function<void(void*, void * handler__context)>(a1), a2);
 	}
 	struct Data {
-		struct {void * a0; borogove_event_handler_token a1;} args;
+		struct {void * a0; void (* a1) (void*, void * handler__context); void* a2;} args;
 		HxSemaphore lock;
 	};
 	struct Callback {
@@ -4588,7 +4574,7 @@ void borogove_event_emitter_remove_event_listener(void *a0, borogove_event_handl
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::EventEmitter((hx::Object *)data->args.a0, true))->removeEventListener(data->args.a1);
+				(borogove::Command((hx::Object *)data->args.a0, true))->execute__fromC(cpp::Function<void(void*, void * handler__context)>(data->args.a1), data->args.a2);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -4601,29 +4587,29 @@ void borogove_event_emitter_remove_event_listener(void *a0, borogove_event_handl
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0, a1, a2} };
 
-	// queue a callback to execute removeEventListener() on the main thread and wait until execution completes
+	// queue a callback to execute execute__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void *borogove_client_new(const char *a0, void *a1) {
+const char *borogove_command_session_name(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeObject(borogove::Client_obj::__new(a0, Dynamic((hx::Object *)a1)));
+		return HaxeCBridge::retainHaxeString((borogove::CommandSession((hx::Object *)a0, true))->name__fromC());
 	}
 	struct Data {
-		struct {const char * a0; void * a1;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
-		void * ret;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeObject(borogove::Client_obj::__new(data->args.a0, Dynamic((hx::Object *)data->args.a1)));
+				data->ret = HaxeCBridge::retainHaxeString((borogove::CommandSession((hx::Object *)data->args.a0, true))->name__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -4636,29 +4622,30 @@ void *borogove_client_new(const char *a0, void *a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0} };
 
-	// queue a callback to execute new() on the main thread and wait until execution completes
+	// queue a callback to execute name__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_client_set_send_available(void *a0, bool a1) {
+const char *borogove_command_session_status(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Client((hx::Object *)a0, true))->set_sendAvailable__fromC(a1);
+		return HaxeCBridge::retainHaxeString((borogove::CommandSession((hx::Object *)a0, true))->status__fromC());
 	}
 	struct Data {
-		struct {void * a0; bool a1;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::Client((hx::Object *)data->args.a0, true))->set_sendAvailable__fromC(data->args.a1);
+				data->ret = HaxeCBridge::retainHaxeString((borogove::CommandSession((hx::Object *)data->args.a0, true))->status__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -4671,28 +4658,30 @@ void borogove_client_set_send_available(void *a0, bool a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0} };
 
-	// queue a callback to execute set_sendAvailable__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute status__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_client_start(void *a0) {
+size_t borogove_command_session_actions(void *a0, void ***a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Client((hx::Object *)a0, true))->start();
+		return (borogove::CommandSession((hx::Object *)a0, true))->actions__fromC(a1);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; void*** a1;} args;
 		HxSemaphore lock;
+		size_t ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::Client((hx::Object *)data->args.a0, true))->start();
+				data->ret = (borogove::CommandSession((hx::Object *)data->args.a0, true))->actions__fromC(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -4705,28 +4694,30 @@ void borogove_client_start(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute start() on the main thread and wait until execution completes
+	// queue a callback to execute actions__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_client_start_offline(void *a0, void (*a1) (bool, void *handler__context), void *a2) {
+size_t borogove_command_session_forms(void *a0, void ***a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Client((hx::Object *)a0, true))->startOffline__fromC(cpp::Function<void(bool, void * handler__context)>(a1), a2);
+		return (borogove::CommandSession((hx::Object *)a0, true))->forms__fromC(a1);
 	}
 	struct Data {
-		struct {void * a0; void (* a1) (bool, void * handler__context); void* a2;} args;
+		struct {void * a0; void*** a1;} args;
 		HxSemaphore lock;
+		size_t ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::Client((hx::Object *)data->args.a0, true))->startOffline__fromC(cpp::Function<void(bool, void * handler__context)>(data->args.a1), data->args.a2);
+				data->ret = (borogove::CommandSession((hx::Object *)data->args.a0, true))->forms__fromC(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -4739,20 +4730,21 @@ void borogove_client_start_offline(void *a0, void (*a1) (bool, void *handler__co
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute startOffline__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute forms__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_client_logout(void *a0, bool a1) {
+void borogove_command_session_execute(void *a0, const char *a1, void *a2, int a3, void (*a4) (void*, void *handler__context), void *a5) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Client((hx::Object *)a0, true))->logout(a1);
+		return (borogove::CommandSession((hx::Object *)a0, true))->execute__fromC(a1, Dynamic((hx::Object *)a2), a3, cpp::Function<void(void*, void * handler__context)>(a4), a5);
 	}
 	struct Data {
-		struct {void * a0; bool a1;} args;
+		struct {void * a0; const char * a1; void * a2; int a3; void (* a4) (void*, void * handler__context); void* a5;} args;
 		HxSemaphore lock;
 	};
 	struct Callback {
@@ -4760,7 +4752,7 @@ void borogove_client_logout(void *a0, bool a1) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::Client((hx::Object *)data->args.a0, true))->logout(data->args.a1);
+				(borogove::CommandSession((hx::Object *)data->args.a0, true))->execute__fromC(data->args.a1, Dynamic((hx::Object *)data->args.a2), data->args.a3, cpp::Function<void(void*, void * handler__context)>(data->args.a4), data->args.a5);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -4773,28 +4765,29 @@ void borogove_client_logout(void *a0, bool a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0, a1, a2, a3, a4, a5} };
 
-	// queue a callback to execute logout() on the main thread and wait until execution completes
+	// queue a callback to execute execute__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_client_use_password(void *a0, const char *a1) {
+const char *borogove_form_option_label(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Client((hx::Object *)a0, true))->usePassword(a1);
+		return HaxeCBridge::retainHaxeString((borogove::FormOption((hx::Object *)a0, true))->label__fromC());
 	}
 	struct Data {
-		struct {void * a0; const char * a1;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::Client((hx::Object *)data->args.a0, true))->usePassword(data->args.a1);
+				data->ret = HaxeCBridge::retainHaxeString((borogove::FormOption((hx::Object *)data->args.a0, true))->label__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -4807,17 +4800,18 @@ void borogove_client_use_password(void *a0, const char *a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0} };
 
-	// queue a callback to execute usePassword() on the main thread and wait until execution completes
+	// queue a callback to execute label__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_client_account_id(void *a0) {
+const char *borogove_form_option_value(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::Client((hx::Object *)a0, true))->accountId());
+		return HaxeCBridge::retainHaxeString((borogove::FormOption((hx::Object *)a0, true))->value__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
@@ -4829,7 +4823,7 @@ const char *borogove_client_account_id(void *a0) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::Client((hx::Object *)data->args.a0, true))->accountId());
+				data->ret = HaxeCBridge::retainHaxeString((borogove::FormOption((hx::Object *)data->args.a0, true))->value__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -4844,16 +4838,16 @@ const char *borogove_client_account_id(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute accountId() on the main thread and wait until execution completes
+	// queue a callback to execute value__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_client_display_name(void *a0) {
+const char *borogove_form_item_text(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::Client((hx::Object *)a0, true))->displayName());
+		return HaxeCBridge::retainHaxeString((borogove::FormItem((hx::Object *)a0, true))->text__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
@@ -4865,7 +4859,7 @@ const char *borogove_client_display_name(void *a0) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::Client((hx::Object *)data->args.a0, true))->displayName());
+				data->ret = HaxeCBridge::retainHaxeString((borogove::FormItem((hx::Object *)data->args.a0, true))->text__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -4880,27 +4874,28 @@ const char *borogove_client_display_name(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute displayName() on the main thread and wait until execution completes
+	// queue a callback to execute text__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_client_set_profile(void *a0, void *a1, bool a2) {
+void *borogove_form_item_field(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Client((hx::Object *)a0, true))->setProfile(Dynamic((hx::Object *)a1), a2);
+		return HaxeCBridge::retainHaxeObject((borogove::FormItem((hx::Object *)a0, true))->field__fromC());
 	}
 	struct Data {
-		struct {void * a0; void * a1; bool a2;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
+		void * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::Client((hx::Object *)data->args.a0, true))->setProfile(Dynamic((hx::Object *)data->args.a1), data->args.a2);
+				data->ret = HaxeCBridge::retainHaxeObject((borogove::FormItem((hx::Object *)data->args.a0, true))->field__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -4913,28 +4908,66 @@ void borogove_client_set_profile(void *a0, void *a1, bool a2) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2} };
+	Data data = { {a0} };
 
-	// queue a callback to execute setProfile() on the main thread and wait until execution completes
+	// queue a callback to execute field__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
+HAXE_C_BRIDGE_LINKAGE
+void *borogove_form_item_section(void *a0) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return HaxeCBridge::retainHaxeObject((borogove::FormItem((hx::Object *)a0, true))->section__fromC());
+	}
+	struct Data {
+		struct {void * a0;} args;
+		HxSemaphore lock;
+		void * ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = HaxeCBridge::retainHaxeObject((borogove::FormItem((hx::Object *)data->args.a0, true))->section__fromC());
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0} };
+
+	// queue a callback to execute section__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_client_prepare_attachment(void *a0, void *a1, void (*a2) (void*, void *handler__context), void *a3) {
+const char *borogove_form_item_status(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Client((hx::Object *)a0, true))->prepareAttachment__fromC(Dynamic((hx::Object *)a1), cpp::Function<void(void*, void * handler__context)>(a2), a3);
+		return HaxeCBridge::retainHaxeString((borogove::FormItem((hx::Object *)a0, true))->status__fromC());
 	}
 	struct Data {
-		struct {void * a0; void * a1; void (* a2) (void*, void * handler__context); void* a3;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::Client((hx::Object *)data->args.a0, true))->prepareAttachment__fromC(Dynamic((hx::Object *)data->args.a1), cpp::Function<void(void*, void * handler__context)>(data->args.a2), data->args.a3);
+				data->ret = HaxeCBridge::retainHaxeString((borogove::FormItem((hx::Object *)data->args.a0, true))->status__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -4947,17 +4980,18 @@ void borogove_client_prepare_attachment(void *a0, void *a1, void (*a2) (void*, v
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2, a3} };
+	Data data = { {a0} };
 
-	// queue a callback to execute prepareAttachment__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute status__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-size_t borogove_client_get_chats(void *a0, void ***a1) {
+size_t borogove_form_item_table_header(void *a0, void ***a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Client((hx::Object *)a0, true))->getChats__fromC(a1);
+		return (borogove::FormItem((hx::Object *)a0, true))->tableHeader__fromC(a1);
 	}
 	struct Data {
 		struct {void * a0; void*** a1;} args;
@@ -4969,7 +5003,7 @@ size_t borogove_client_get_chats(void *a0, void ***a1) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::Client((hx::Object *)data->args.a0, true))->getChats__fromC(data->args.a1);
+				data->ret = (borogove::FormItem((hx::Object *)data->args.a0, true))->tableHeader__fromC(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -4984,27 +5018,28 @@ size_t borogove_client_get_chats(void *a0, void ***a1) {
 
 	Data data = { {a0, a1} };
 
-	// queue a callback to execute getChats__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute tableHeader__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_client_find_available_chats(void *a0, const char *a1, bool (*a2) (const char*, void**, size_t, void*), void *a3) {
+const char *borogove_form_field_name(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Client((hx::Object *)a0, true))->findAvailableChats__fromC(a1, cpp::Function<bool(const char*, void**, size_t, void*)>(a2), a3);
+		return HaxeCBridge::retainHaxeString((borogove::FormField((hx::Object *)a0, true))->name__fromC());
 	}
 	struct Data {
-		struct {void * a0; const char * a1; bool (* a2) (const char*, void**, size_t, void*); void* a3;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::Client((hx::Object *)data->args.a0, true))->findAvailableChats__fromC(data->args.a1, cpp::Function<bool(const char*, void**, size_t, void*)>(data->args.a2), data->args.a3);
+				data->ret = HaxeCBridge::retainHaxeString((borogove::FormField((hx::Object *)data->args.a0, true))->name__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -5017,29 +5052,30 @@ void borogove_client_find_available_chats(void *a0, const char *a1, bool (*a2) (
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2, a3} };
+	Data data = { {a0} };
 
-	// queue a callback to execute findAvailableChats__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute name__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void *borogove_client_start_chat(void *a0, void *a1) {
+const char *borogove_form_field_label(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeObject((borogove::Client((hx::Object *)a0, true))->startChat(Dynamic((hx::Object *)a1)));
+		return HaxeCBridge::retainHaxeString((borogove::FormField((hx::Object *)a0, true))->label__fromC());
 	}
 	struct Data {
-		struct {void * a0; void * a1;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
-		void * ret;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeObject((borogove::Client((hx::Object *)data->args.a0, true))->startChat(Dynamic((hx::Object *)data->args.a1)));
+				data->ret = HaxeCBridge::retainHaxeString((borogove::FormField((hx::Object *)data->args.a0, true))->label__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -5052,30 +5088,66 @@ void *borogove_client_start_chat(void *a0, void *a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0} };
 
-	// queue a callback to execute startChat() on the main thread and wait until execution completes
+	// queue a callback to execute label__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void *borogove_client_get_chat(void *a0, const char *a1) {
+const char *borogove_form_field_desc(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeObject((borogove::Client((hx::Object *)a0, true))->getChat(a1));
+		return HaxeCBridge::retainHaxeString((borogove::FormField((hx::Object *)a0, true))->desc__fromC());
 	}
 	struct Data {
-		struct {void * a0; const char * a1;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
-		void * ret;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeObject((borogove::Client((hx::Object *)data->args.a0, true))->getChat(data->args.a1));
+				data->ret = HaxeCBridge::retainHaxeString((borogove::FormField((hx::Object *)data->args.a0, true))->desc__fromC());
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0} };
+
+	// queue a callback to execute desc__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
+HAXE_C_BRIDGE_LINKAGE
+size_t borogove_form_field_value(void *a0, const char ***a1) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return (borogove::FormField((hx::Object *)a0, true))->value__fromC(a1);
+	}
+	struct Data {
+		struct {void * a0; const char*** a1;} args;
+		HxSemaphore lock;
+		size_t ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = (borogove::FormField((hx::Object *)data->args.a0, true))->value__fromC(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -5090,27 +5162,28 @@ void *borogove_client_get_chat(void *a0, const char *a1) {
 
 	Data data = { {a0, a1} };
 
-	// queue a callback to execute getChat() on the main thread and wait until execution completes
+	// queue a callback to execute value__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_client_enable_push(void *a0, const char *a1, const char *a2, const unsigned char *a3, size_t a4, const unsigned char *a5, size_t a6, int a7, const unsigned char *a8, size_t a9, const char *const *a10, size_t a11) {
+bool borogove_form_field_required(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Client((hx::Object *)a0, true))->enablePush__fromC(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);
+		return (borogove::FormField((hx::Object *)a0, true))->required__fromC();
 	}
 	struct Data {
-		struct {void * a0; const char * a1; const char * a2; const unsigned char* a3; size_t a4; const unsigned char* a5; size_t a6; int a7; const unsigned char* a8; size_t a9; const char* const* a10; size_t a11;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
+		bool ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::Client((hx::Object *)data->args.a0, true))->enablePush__fromC(data->args.a1, data->args.a2, data->args.a3, data->args.a4, data->args.a5, data->args.a6, data->args.a7, data->args.a8, data->args.a9, data->args.a10, data->args.a11);
+				data->ret = (borogove::FormField((hx::Object *)data->args.a0, true))->required__fromC();
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -5123,29 +5196,735 @@ void borogove_client_enable_push(void *a0, const char *a1, const char *a2, const
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11} };
+	Data data = { {a0} };
+
+	// queue a callback to execute required__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
+HAXE_C_BRIDGE_LINKAGE
+const char *borogove_form_field_type(void *a0) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return HaxeCBridge::retainHaxeString((borogove::FormField((hx::Object *)a0, true))->type__fromC());
+	}
+	struct Data {
+		struct {void * a0;} args;
+		HxSemaphore lock;
+		const char * ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = HaxeCBridge::retainHaxeString((borogove::FormField((hx::Object *)data->args.a0, true))->type__fromC());
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0} };
+
+	// queue a callback to execute type__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
+HAXE_C_BRIDGE_LINKAGE
+const char *borogove_form_field_datatype(void *a0) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return HaxeCBridge::retainHaxeString((borogove::FormField((hx::Object *)a0, true))->datatype__fromC());
+	}
+	struct Data {
+		struct {void * a0;} args;
+		HxSemaphore lock;
+		const char * ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = HaxeCBridge::retainHaxeString((borogove::FormField((hx::Object *)data->args.a0, true))->datatype__fromC());
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0} };
+
+	// queue a callback to execute datatype__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
+HAXE_C_BRIDGE_LINKAGE
+size_t borogove_form_field_options(void *a0, void ***a1) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return (borogove::FormField((hx::Object *)a0, true))->options__fromC(a1);
+	}
+	struct Data {
+		struct {void * a0; void*** a1;} args;
+		HxSemaphore lock;
+		size_t ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = (borogove::FormField((hx::Object *)data->args.a0, true))->options__fromC(data->args.a1);
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0, a1} };
+
+	// queue a callback to execute options__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
+HAXE_C_BRIDGE_LINKAGE
+bool borogove_form_field_open(void *a0) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return (borogove::FormField((hx::Object *)a0, true))->open__fromC();
+	}
+	struct Data {
+		struct {void * a0;} args;
+		HxSemaphore lock;
+		bool ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = (borogove::FormField((hx::Object *)data->args.a0, true))->open__fromC();
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0} };
+
+	// queue a callback to execute open__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
+HAXE_C_BRIDGE_LINKAGE
+const char *borogove_form_field_range_min(void *a0) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return HaxeCBridge::retainHaxeString((borogove::FormField((hx::Object *)a0, true))->rangeMin__fromC());
+	}
+	struct Data {
+		struct {void * a0;} args;
+		HxSemaphore lock;
+		const char * ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = HaxeCBridge::retainHaxeString((borogove::FormField((hx::Object *)data->args.a0, true))->rangeMin__fromC());
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0} };
+
+	// queue a callback to execute rangeMin__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
+HAXE_C_BRIDGE_LINKAGE
+const char *borogove_form_field_range_max(void *a0) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return HaxeCBridge::retainHaxeString((borogove::FormField((hx::Object *)a0, true))->rangeMax__fromC());
+	}
+	struct Data {
+		struct {void * a0;} args;
+		HxSemaphore lock;
+		const char * ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = HaxeCBridge::retainHaxeString((borogove::FormField((hx::Object *)data->args.a0, true))->rangeMax__fromC());
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0} };
+
+	// queue a callback to execute rangeMax__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
+HAXE_C_BRIDGE_LINKAGE
+const char *borogove_form_field_regex(void *a0) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return HaxeCBridge::retainHaxeString((borogove::FormField((hx::Object *)a0, true))->regex__fromC());
+	}
+	struct Data {
+		struct {void * a0;} args;
+		HxSemaphore lock;
+		const char * ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = HaxeCBridge::retainHaxeString((borogove::FormField((hx::Object *)data->args.a0, true))->regex__fromC());
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0} };
+
+	// queue a callback to execute regex__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
+HAXE_C_BRIDGE_LINKAGE
+const char *borogove_form_section_title(void *a0) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return HaxeCBridge::retainHaxeString(borogove::FormSection__Companion_obj::title__fromC(Dynamic((hx::Object *)a0)));
+	}
+	struct Data {
+		struct {void * a0;} args;
+		HxSemaphore lock;
+		const char * ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = HaxeCBridge::retainHaxeString(borogove::FormSection__Companion_obj::title__fromC(Dynamic((hx::Object *)data->args.a0)));
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0} };
+
+	// queue a callback to execute title__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
+HAXE_C_BRIDGE_LINKAGE
+size_t borogove_form_section_items(void *a0, void ***a1) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return borogove::FormSection__Companion_obj::items__fromC(Dynamic((hx::Object *)a0), a1);
+	}
+	struct Data {
+		struct {void * a0; void*** a1;} args;
+		HxSemaphore lock;
+		size_t ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = borogove::FormSection__Companion_obj::items__fromC(Dynamic((hx::Object *)data->args.a0), data->args.a1);
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0, a1} };
+
+	// queue a callback to execute items__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
+HAXE_C_BRIDGE_LINKAGE
+bool borogove_form_is_result(void *a0) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return (borogove::Form((hx::Object *)a0, true))->isResult();
+	}
+	struct Data {
+		struct {void * a0;} args;
+		HxSemaphore lock;
+		bool ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = (borogove::Form((hx::Object *)data->args.a0, true))->isResult();
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0} };
+
+	// queue a callback to execute isResult() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
+HAXE_C_BRIDGE_LINKAGE
+const char *borogove_form_title(void *a0) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return HaxeCBridge::retainHaxeString((borogove::Form((hx::Object *)a0, true))->title());
+	}
+	struct Data {
+		struct {void * a0;} args;
+		HxSemaphore lock;
+		const char * ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = HaxeCBridge::retainHaxeString((borogove::Form((hx::Object *)data->args.a0, true))->title());
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0} };
+
+	// queue a callback to execute title() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
+HAXE_C_BRIDGE_LINKAGE
+const char *borogove_form_url(void *a0) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return HaxeCBridge::retainHaxeString((borogove::Form((hx::Object *)a0, true))->url());
+	}
+	struct Data {
+		struct {void * a0;} args;
+		HxSemaphore lock;
+		const char * ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = HaxeCBridge::retainHaxeString((borogove::Form((hx::Object *)data->args.a0, true))->url());
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0} };
+
+	// queue a callback to execute url() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
+HAXE_C_BRIDGE_LINKAGE
+size_t borogove_form_items(void *a0, void ***a1) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return (borogove::Form((hx::Object *)a0, true))->items__fromC(a1);
+	}
+	struct Data {
+		struct {void * a0; void*** a1;} args;
+		HxSemaphore lock;
+		size_t ret;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				data->ret = (borogove::Form((hx::Object *)data->args.a0, true))->items__fromC(data->args.a1);
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0, a1} };
+
+	// queue a callback to execute items__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+	return data.ret;
+}
+
+HAXE_C_BRIDGE_LINKAGE
+void borogove_persistence_last_id(void *a0, const char *a1, const char *a2, void (*a3) (const char*, void *handler__context), void *a4) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return borogove::Persistence__Companion_obj::lastId__fromC(Dynamic((hx::Object *)a0), a1, a2, cpp::Function<void(const char*, void * handler__context)>(a3), a4);
+	}
+	struct Data {
+		struct {void * a0; const char * a1; const char * a2; void (* a3) (const char*, void * handler__context); void* a4;} args;
+		HxSemaphore lock;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				borogove::Persistence__Companion_obj::lastId__fromC(Dynamic((hx::Object *)data->args.a0), data->args.a1, data->args.a2, cpp::Function<void(const char*, void * handler__context)>(data->args.a3), data->args.a4);
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0, a1, a2, a3, a4} };
+
+	// queue a callback to execute lastId__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+}
+
+HAXE_C_BRIDGE_LINKAGE
+void borogove_persistence_store_chats(void *a0, const char *a1, void *const *a2, size_t a3) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return borogove::Persistence__Companion_obj::storeChats__fromC(Dynamic((hx::Object *)a0), a1, a2, a3);
+	}
+	struct Data {
+		struct {void * a0; const char * a1; void* const* a2; size_t a3;} args;
+		HxSemaphore lock;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				borogove::Persistence__Companion_obj::storeChats__fromC(Dynamic((hx::Object *)data->args.a0), data->args.a1, data->args.a2, data->args.a3);
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0, a1, a2, a3} };
+
+	// queue a callback to execute storeChats__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+}
+
+HAXE_C_BRIDGE_LINKAGE
+void borogove_persistence_store_messages(void *a0, const char *a1, void *const *a2, size_t a3, void (*a4) (void**, size_t, void *handler__context), void *a5) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return borogove::Persistence__Companion_obj::storeMessages__fromC(Dynamic((hx::Object *)a0), a1, a2, a3, cpp::Function<void(void**, size_t, void * handler__context)>(a4), a5);
+	}
+	struct Data {
+		struct {void * a0; const char * a1; void* const* a2; size_t a3; void (* a4) (void**, size_t, void * handler__context); void* a5;} args;
+		HxSemaphore lock;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				borogove::Persistence__Companion_obj::storeMessages__fromC(Dynamic((hx::Object *)data->args.a0), data->args.a1, data->args.a2, data->args.a3, cpp::Function<void(void**, size_t, void * handler__context)>(data->args.a4), data->args.a5);
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0, a1, a2, a3, a4, a5} };
+
+	// queue a callback to execute storeMessages__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+}
+
+HAXE_C_BRIDGE_LINKAGE
+void borogove_persistence_update_message(void *a0, const char *a1, void *a2) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return borogove::Persistence__Companion_obj::updateMessage__fromC(Dynamic((hx::Object *)a0), a1, Dynamic((hx::Object *)a2));
+	}
+	struct Data {
+		struct {void * a0; const char * a1; void * a2;} args;
+		HxSemaphore lock;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				borogove::Persistence__Companion_obj::updateMessage__fromC(Dynamic((hx::Object *)data->args.a0), data->args.a1, Dynamic((hx::Object *)data->args.a2));
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0, a1, a2} };
+
+	// queue a callback to execute updateMessage__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+}
+
+HAXE_C_BRIDGE_LINKAGE
+void borogove_persistence_update_message_status(void *a0, const char *a1, const char *a2, enum borogove_message_status a3, const char *a4, void (*a5) (void*, void *handler__context), void *a6) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return borogove::Persistence__Companion_obj::updateMessageStatus__fromC(Dynamic((hx::Object *)a0), a1, a2, a3, a4, cpp::Function<void(void*, void * handler__context)>(a5), a6);
+	}
+	struct Data {
+		struct {void * a0; const char * a1; const char * a2; enum borogove_message_status a3; const char * a4; void (* a5) (void*, void * handler__context); void* a6;} args;
+		HxSemaphore lock;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				borogove::Persistence__Companion_obj::updateMessageStatus__fromC(Dynamic((hx::Object *)data->args.a0), data->args.a1, data->args.a2, data->args.a3, data->args.a4, cpp::Function<void(void*, void * handler__context)>(data->args.a5), data->args.a6);
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0, a1, a2, a3, a4, a5, a6} };
+
+	// queue a callback to execute updateMessageStatus__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+}
+
+HAXE_C_BRIDGE_LINKAGE
+void borogove_persistence_get_message(void *a0, const char *a1, const char *a2, const char *a3, const char *a4, void (*a5) (void*, void *handler__context), void *a6) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return borogove::Persistence__Companion_obj::getMessage__fromC(Dynamic((hx::Object *)a0), a1, a2, a3, a4, cpp::Function<void(void*, void * handler__context)>(a5), a6);
+	}
+	struct Data {
+		struct {void * a0; const char * a1; const char * a2; const char * a3; const char * a4; void (* a5) (void*, void * handler__context); void* a6;} args;
+		HxSemaphore lock;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				borogove::Persistence__Companion_obj::getMessage__fromC(Dynamic((hx::Object *)data->args.a0), data->args.a1, data->args.a2, data->args.a3, data->args.a4, cpp::Function<void(void*, void * handler__context)>(data->args.a5), data->args.a6);
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0, a1, a2, a3, a4, a5, a6} };
+
+	// queue a callback to execute getMessage__fromC() on the main thread and wait until execution completes
+	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
+	data.lock.Wait();
+}
+
+HAXE_C_BRIDGE_LINKAGE
+void borogove_persistence_get_messages_before(void *a0, const char *a1, const char *a2, const char *a3, const char *a4, void (*a5) (void**, size_t, void *handler__context), void *a6) {
+	if (HaxeCBridgeInternal::isHaxeMainThread()) {
+		return borogove::Persistence__Companion_obj::getMessagesBefore__fromC(Dynamic((hx::Object *)a0), a1, a2, a3, a4, cpp::Function<void(void**, size_t, void * handler__context)>(a5), a6);
+	}
+	struct Data {
+		struct {void * a0; const char * a1; const char * a2; const char * a3; const char * a4; void (* a5) (void**, size_t, void * handler__context); void* a6;} args;
+		HxSemaphore lock;
+	};
+	struct Callback {
+		static void run(void* p) {
+			// executed within the haxe main thread
+			Data* data = (Data*) p;
+			try {
+				borogove::Persistence__Companion_obj::getMessagesBefore__fromC(Dynamic((hx::Object *)data->args.a0), data->args.a1, data->args.a2, data->args.a3, data->args.a4, cpp::Function<void(void**, size_t, void * handler__context)>(data->args.a5), data->args.a6);
+				data->lock.Set();
+			} catch(Dynamic runtimeException) {
+				data->lock.Set();
+				throw runtimeException;
+			}
+		}
+	};
+
+	#ifdef HXCPP_DEBUG
+	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
+	#endif
+
+	Data data = { {a0, a1, a2, a3, a4, a5, a6} };
 
-	// queue a callback to execute enablePush__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute getMessagesBefore__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 }
 
 HAXE_C_BRIDGE_LINKAGE
-borogove_event_handler_token borogove_client_add_password_needed_listener(void *a0, void (*a1) (void*, void*), void *a2) {
+void borogove_persistence_get_messages_after(void *a0, const char *a1, const char *a2, const char *a3, const char *a4, void (*a5) (void**, size_t, void *handler__context), void *a6) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Client((hx::Object *)a0, true))->addPasswordNeededListener__fromC(cpp::Function<void(void*, void*)>(a1), a2);
+		return borogove::Persistence__Companion_obj::getMessagesAfter__fromC(Dynamic((hx::Object *)a0), a1, a2, a3, a4, cpp::Function<void(void**, size_t, void * handler__context)>(a5), a6);
 	}
 	struct Data {
-		struct {void * a0; void (* a1) (void*, void*); void* a2;} args;
+		struct {void * a0; const char * a1; const char * a2; const char * a3; const char * a4; void (* a5) (void**, size_t, void * handler__context); void* a6;} args;
 		HxSemaphore lock;
-		borogove_event_handler_token ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::Client((hx::Object *)data->args.a0, true))->addPasswordNeededListener__fromC(cpp::Function<void(void*, void*)>(data->args.a1), data->args.a2);
+				borogove::Persistence__Companion_obj::getMessagesAfter__fromC(Dynamic((hx::Object *)data->args.a0), data->args.a1, data->args.a2, data->args.a3, data->args.a4, cpp::Function<void(void**, size_t, void * handler__context)>(data->args.a5), data->args.a6);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -5158,30 +5937,28 @@ borogove_event_handler_token borogove_client_add_password_needed_listener(void *
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2} };
+	Data data = { {a0, a1, a2, a3, a4, a5, a6} };
 
-	// queue a callback to execute addPasswordNeededListener__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute getMessagesAfter__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-borogove_event_handler_token borogove_client_add_status_online_listener(void *a0, void (*a1) (void*), void *a2) {
+void borogove_persistence_get_messages_around(void *a0, const char *a1, const char *a2, const char *a3, const char *a4, void (*a5) (void**, size_t, void *handler__context), void *a6) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Client((hx::Object *)a0, true))->addStatusOnlineListener__fromC(cpp::Function<void(void*)>(a1), a2);
+		return borogove::Persistence__Companion_obj::getMessagesAround__fromC(Dynamic((hx::Object *)a0), a1, a2, a3, a4, cpp::Function<void(void**, size_t, void * handler__context)>(a5), a6);
 	}
 	struct Data {
-		struct {void * a0; void (* a1) (void*); void* a2;} args;
+		struct {void * a0; const char * a1; const char * a2; const char * a3; const char * a4; void (* a5) (void**, size_t, void * handler__context); void* a6;} args;
 		HxSemaphore lock;
-		borogove_event_handler_token ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::Client((hx::Object *)data->args.a0, true))->addStatusOnlineListener__fromC(cpp::Function<void(void*)>(data->args.a1), data->args.a2);
+				borogove::Persistence__Companion_obj::getMessagesAround__fromC(Dynamic((hx::Object *)data->args.a0), data->args.a1, data->args.a2, data->args.a3, data->args.a4, cpp::Function<void(void**, size_t, void * handler__context)>(data->args.a5), data->args.a6);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -5194,30 +5971,28 @@ borogove_event_handler_token borogove_client_add_status_online_listener(void *a0
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2} };
+	Data data = { {a0, a1, a2, a3, a4, a5, a6} };
 
-	// queue a callback to execute addStatusOnlineListener__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute getMessagesAround__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-borogove_event_handler_token borogove_client_add_status_offline_listener(void *a0, void (*a1) (void*), void *a2) {
+void borogove_persistence_has_media(void *a0, const char *a1, const unsigned char *a2, size_t a3, void (*a4) (bool, void *handler__context), void *a5) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Client((hx::Object *)a0, true))->addStatusOfflineListener__fromC(cpp::Function<void(void*)>(a1), a2);
+		return borogove::Persistence__Companion_obj::hasMedia__fromC(Dynamic((hx::Object *)a0), a1, a2, a3, cpp::Function<void(bool, void * handler__context)>(a4), a5);
 	}
 	struct Data {
-		struct {void * a0; void (* a1) (void*); void* a2;} args;
+		struct {void * a0; const char * a1; const unsigned char* a2; size_t a3; void (* a4) (bool, void * handler__context); void* a5;} args;
 		HxSemaphore lock;
-		borogove_event_handler_token ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::Client((hx::Object *)data->args.a0, true))->addStatusOfflineListener__fromC(cpp::Function<void(void*)>(data->args.a1), data->args.a2);
+				borogove::Persistence__Companion_obj::hasMedia__fromC(Dynamic((hx::Object *)data->args.a0), data->args.a1, data->args.a2, data->args.a3, cpp::Function<void(bool, void * handler__context)>(data->args.a4), data->args.a5);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -5230,30 +6005,28 @@ borogove_event_handler_token borogove_client_add_status_offline_listener(void *a
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2} };
+	Data data = { {a0, a1, a2, a3, a4, a5} };
 
-	// queue a callback to execute addStatusOfflineListener__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute hasMedia__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-borogove_event_handler_token borogove_client_add_connection_failed_listener(void *a0, void (*a1) (void*), void *a2) {
+void borogove_persistence_store_media(void *a0, const char *a1, const unsigned char *a2, size_t a3, void (*a4) (bool, void *handler__context), void *a5) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Client((hx::Object *)a0, true))->addConnectionFailedListener__fromC(cpp::Function<void(void*)>(a1), a2);
+		return borogove::Persistence__Companion_obj::storeMedia__fromC(Dynamic((hx::Object *)a0), a1, a2, a3, cpp::Function<void(bool, void * handler__context)>(a4), a5);
 	}
 	struct Data {
-		struct {void * a0; void (* a1) (void*); void* a2;} args;
+		struct {void * a0; const char * a1; const unsigned char* a2; size_t a3; void (* a4) (bool, void * handler__context); void* a5;} args;
 		HxSemaphore lock;
-		borogove_event_handler_token ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::Client((hx::Object *)data->args.a0, true))->addConnectionFailedListener__fromC(cpp::Function<void(void*)>(data->args.a1), data->args.a2);
+				borogove::Persistence__Companion_obj::storeMedia__fromC(Dynamic((hx::Object *)data->args.a0), data->args.a1, data->args.a2, data->args.a3, cpp::Function<void(bool, void * handler__context)>(data->args.a4), data->args.a5);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -5266,30 +6039,28 @@ borogove_event_handler_token borogove_client_add_connection_failed_listener(void
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2} };
+	Data data = { {a0, a1, a2, a3, a4, a5} };
 
-	// queue a callback to execute addConnectionFailedListener__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute storeMedia__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-borogove_event_handler_token borogove_client_add_tls_check_listener(void *a0, bool (*a1) (const char*, const char**, size_t, void*), void *a2) {
+void borogove_persistence_remove_media(void *a0, const char *a1, const unsigned char *a2, size_t a3) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Client((hx::Object *)a0, true))->addTlsCheckListener__fromC(cpp::Function<bool(const char*, const char**, size_t, void*)>(a1), a2);
+		return borogove::Persistence__Companion_obj::removeMedia__fromC(Dynamic((hx::Object *)a0), a1, a2, a3);
 	}
 	struct Data {
-		struct {void * a0; bool (* a1) (const char*, const char**, size_t, void*); void* a2;} args;
+		struct {void * a0; const char * a1; const unsigned char* a2; size_t a3;} args;
 		HxSemaphore lock;
-		borogove_event_handler_token ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::Client((hx::Object *)data->args.a0, true))->addTlsCheckListener__fromC(cpp::Function<bool(const char*, const char**, size_t, void*)>(data->args.a1), data->args.a2);
+				borogove::Persistence__Companion_obj::removeMedia__fromC(Dynamic((hx::Object *)data->args.a0), data->args.a1, data->args.a2, data->args.a3);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -5302,30 +6073,28 @@ borogove_event_handler_token borogove_client_add_tls_check_listener(void *a0, bo
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2} };
+	Data data = { {a0, a1, a2, a3} };
 
-	// queue a callback to execute addTlsCheckListener__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute removeMedia__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-borogove_event_handler_token borogove_client_add_chat_message_listener(void *a0, void (*a1) (void*, int, void*), void *a2) {
+void borogove_persistence_store_login(void *a0, const char *a1, const char *a2, const char *a3, const char *a4) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Client((hx::Object *)a0, true))->addChatMessageListener__fromC(cpp::Function<void(void*, int, void*)>(a1), a2);
+		return borogove::Persistence__Companion_obj::storeLogin__fromC(Dynamic((hx::Object *)a0), a1, a2, a3, a4);
 	}
 	struct Data {
-		struct {void * a0; void (* a1) (void*, int, void*); void* a2;} args;
+		struct {void * a0; const char * a1; const char * a2; const char * a3; const char * a4;} args;
 		HxSemaphore lock;
-		borogove_event_handler_token ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::Client((hx::Object *)data->args.a0, true))->addChatMessageListener__fromC(cpp::Function<void(void*, int, void*)>(data->args.a1), data->args.a2);
+				borogove::Persistence__Companion_obj::storeLogin__fromC(Dynamic((hx::Object *)data->args.a0), data->args.a1, data->args.a2, data->args.a3, data->args.a4);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -5338,30 +6107,28 @@ borogove_event_handler_token borogove_client_add_chat_message_listener(void *a0,
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2} };
+	Data data = { {a0, a1, a2, a3, a4} };
 
-	// queue a callback to execute addChatMessageListener__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute storeLogin__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-borogove_event_handler_token borogove_client_add_sync_message_listener(void *a0, void (*a1) (void*, void*), void *a2) {
+void borogove_persistence_remove_account(void *a0, const char *a1, bool a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Client((hx::Object *)a0, true))->addSyncMessageListener__fromC(cpp::Function<void(void*, void*)>(a1), a2);
+		return borogove::Persistence__Companion_obj::removeAccount__fromC(Dynamic((hx::Object *)a0), a1, a2);
 	}
 	struct Data {
-		struct {void * a0; void (* a1) (void*, void*); void* a2;} args;
+		struct {void * a0; const char * a1; bool a2;} args;
 		HxSemaphore lock;
-		borogove_event_handler_token ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::Client((hx::Object *)data->args.a0, true))->addSyncMessageListener__fromC(cpp::Function<void(void*, void*)>(data->args.a1), data->args.a2);
+				borogove::Persistence__Companion_obj::removeAccount__fromC(Dynamic((hx::Object *)data->args.a0), data->args.a1, data->args.a2);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -5376,28 +6143,26 @@ borogove_event_handler_token borogove_client_add_sync_message_listener(void *a0,
 
 	Data data = { {a0, a1, a2} };
 
-	// queue a callback to execute addSyncMessageListener__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute removeAccount__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-borogove_event_handler_token borogove_client_add_chats_updated_listener(void *a0, void (*a1) (void**, size_t, void*), void *a2) {
+void borogove_persistence_list_accounts(void *a0, void (*a1) (const char**, size_t, void *handler__context), void *a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Client((hx::Object *)a0, true))->addChatsUpdatedListener__fromC(cpp::Function<void(void**, size_t, void*)>(a1), a2);
+		return borogove::Persistence__Companion_obj::listAccounts__fromC(Dynamic((hx::Object *)a0), cpp::Function<void(const char**, size_t, void * handler__context)>(a1), a2);
 	}
 	struct Data {
-		struct {void * a0; void (* a1) (void**, size_t, void*); void* a2;} args;
+		struct {void * a0; void (* a1) (const char**, size_t, void * handler__context); void* a2;} args;
 		HxSemaphore lock;
-		borogove_event_handler_token ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::Client((hx::Object *)data->args.a0, true))->addChatsUpdatedListener__fromC(cpp::Function<void(void**, size_t, void*)>(data->args.a1), data->args.a2);
+				borogove::Persistence__Companion_obj::listAccounts__fromC(Dynamic((hx::Object *)data->args.a0), cpp::Function<void(const char**, size_t, void * handler__context)>(data->args.a1), data->args.a2);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -5412,28 +6177,27 @@ borogove_event_handler_token borogove_client_add_chats_updated_listener(void *a0
 
 	Data data = { {a0, a1, a2} };
 
-	// queue a callback to execute addChatsUpdatedListener__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute listAccounts__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-borogove_event_handler_token borogove_client_add_call_ring_listener(void *a0, void (*a1) (void*, void*), void *a2) {
+void *borogove_persistence_sqlite_new(const char *a0, void *a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Client((hx::Object *)a0, true))->addCallRingListener__fromC(cpp::Function<void(void*, void*)>(a1), a2);
+		return HaxeCBridge::retainHaxeObject(borogove::persistence::Sqlite_obj::__new(a0, Dynamic((hx::Object *)a1)));
 	}
 	struct Data {
-		struct {void * a0; void (* a1) (void*, void*); void* a2;} args;
+		struct {const char * a0; void * a1;} args;
 		HxSemaphore lock;
-		borogove_event_handler_token ret;
+		void * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::Client((hx::Object *)data->args.a0, true))->addCallRingListener__fromC(cpp::Function<void(void*, void*)>(data->args.a1), data->args.a2);
+				data->ret = HaxeCBridge::retainHaxeObject(borogove::persistence::Sqlite_obj::__new(data->args.a0, Dynamic((hx::Object *)data->args.a1)));
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -5446,30 +6210,29 @@ borogove_event_handler_token borogove_client_add_call_ring_listener(void *a0, vo
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute addCallRingListener__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute new() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-borogove_event_handler_token borogove_client_add_call_retract_listener(void *a0, void (*a1) (const char*, const char*, void*), void *a2) {
+void borogove_persistence_sqlite_get_message(void *a0, const char *a1, const char *a2, const char *a3, const char *a4, void (*a5) (void*, void *handler__context), void *a6) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Client((hx::Object *)a0, true))->addCallRetractListener__fromC(cpp::Function<void(const char*, const char*, void*)>(a1), a2);
+		return (borogove::persistence::Sqlite((hx::Object *)a0, true))->getMessage__fromC(a1, a2, a3, a4, cpp::Function<void(void*, void * handler__context)>(a5), a6);
 	}
 	struct Data {
-		struct {void * a0; void (* a1) (const char*, const char*, void*); void* a2;} args;
+		struct {void * a0; const char * a1; const char * a2; const char * a3; const char * a4; void (* a5) (void*, void * handler__context); void* a6;} args;
 		HxSemaphore lock;
-		borogove_event_handler_token ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::Client((hx::Object *)data->args.a0, true))->addCallRetractListener__fromC(cpp::Function<void(const char*, const char*, void*)>(data->args.a1), data->args.a2);
+				(borogove::persistence::Sqlite((hx::Object *)data->args.a0, true))->getMessage__fromC(data->args.a1, data->args.a2, data->args.a3, data->args.a4, cpp::Function<void(void*, void * handler__context)>(data->args.a5), data->args.a6);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -5482,30 +6245,28 @@ borogove_event_handler_token borogove_client_add_call_retract_listener(void *a0,
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2} };
+	Data data = { {a0, a1, a2, a3, a4, a5, a6} };
 
-	// queue a callback to execute addCallRetractListener__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute getMessage__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-borogove_event_handler_token borogove_client_add_call_ringing_listener(void *a0, void (*a1) (void*, void*), void *a2) {
+void borogove_persistence_sqlite_remove_account(void *a0, const char *a1, bool a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Client((hx::Object *)a0, true))->addCallRingingListener__fromC(cpp::Function<void(void*, void*)>(a1), a2);
+		return (borogove::persistence::Sqlite((hx::Object *)a0, true))->removeAccount(a1, a2);
 	}
 	struct Data {
-		struct {void * a0; void (* a1) (void*, void*); void* a2;} args;
+		struct {void * a0; const char * a1; bool a2;} args;
 		HxSemaphore lock;
-		borogove_event_handler_token ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::Client((hx::Object *)data->args.a0, true))->addCallRingingListener__fromC(cpp::Function<void(void*, void*)>(data->args.a1), data->args.a2);
+				(borogove::persistence::Sqlite((hx::Object *)data->args.a0, true))->removeAccount(data->args.a1, data->args.a2);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -5520,28 +6281,26 @@ borogove_event_handler_token borogove_client_add_call_ringing_listener(void *a0,
 
 	Data data = { {a0, a1, a2} };
 
-	// queue a callback to execute addCallRingingListener__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute removeAccount() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-borogove_event_handler_token borogove_client_add_call_update_status_listener(void *a0, void (*a1) (void*, void*), void *a2) {
+void borogove_persistence_sqlite_list_accounts(void *a0, void (*a1) (const char**, size_t, void *handler__context), void *a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Client((hx::Object *)a0, true))->addCallUpdateStatusListener__fromC(cpp::Function<void(void*, void*)>(a1), a2);
+		return (borogove::persistence::Sqlite((hx::Object *)a0, true))->listAccounts__fromC(cpp::Function<void(const char**, size_t, void * handler__context)>(a1), a2);
 	}
 	struct Data {
-		struct {void * a0; void (* a1) (void*, void*); void* a2;} args;
+		struct {void * a0; void (* a1) (const char**, size_t, void * handler__context); void* a2;} args;
 		HxSemaphore lock;
-		borogove_event_handler_token ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::Client((hx::Object *)data->args.a0, true))->addCallUpdateStatusListener__fromC(cpp::Function<void(void*, void*)>(data->args.a1), data->args.a2);
+				(borogove::persistence::Sqlite((hx::Object *)data->args.a0, true))->listAccounts__fromC(cpp::Function<void(const char**, size_t, void * handler__context)>(data->args.a1), data->args.a2);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -5556,28 +6315,27 @@ borogove_event_handler_token borogove_client_add_call_update_status_listener(voi
 
 	Data data = { {a0, a1, a2} };
 
-	// queue a callback to execute addCallUpdateStatusListener__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute listAccounts__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-borogove_event_handler_token borogove_client_add_call_media_listener(void *a0, void (*a1) (void*, bool, bool, void*), void *a2) {
+void *borogove_form_submit_builder_new() {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Client((hx::Object *)a0, true))->addCallMediaListener__fromC(cpp::Function<void(void*, bool, bool, void*)>(a1), a2);
+		return HaxeCBridge::retainHaxeObject(borogove::FormSubmitBuilder_obj::__new());
 	}
 	struct Data {
-		struct {void * a0; void (* a1) (void*, bool, bool, void*); void* a2;} args;
+		struct {} args;
 		HxSemaphore lock;
-		borogove_event_handler_token ret;
+		void * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::Client((hx::Object *)data->args.a0, true))->addCallMediaListener__fromC(cpp::Function<void(void*, bool, bool, void*)>(data->args.a1), data->args.a2);
+				data->ret = HaxeCBridge::retainHaxeObject(borogove::FormSubmitBuilder_obj::__new());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -5590,30 +6348,29 @@ borogove_event_handler_token borogove_client_add_call_media_listener(void *a0, v
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2} };
+	Data data = { {} };
 
-	// queue a callback to execute addCallMediaListener__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute new() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-borogove_event_handler_token borogove_client_add_call_track_listener(void *a0, void (*a1) (void*, void*, void**, size_t, void*), void *a2) {
+void borogove_form_submit_builder_add(void *a0, const char *a1, const char *a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Client((hx::Object *)a0, true))->addCallTrackListener__fromC(cpp::Function<void(void*, void*, void**, size_t, void*)>(a1), a2);
+		return (borogove::FormSubmitBuilder((hx::Object *)a0, true))->add(a1, a2);
 	}
 	struct Data {
-		struct {void * a0; void (* a1) (void*, void*, void**, size_t, void*); void* a2;} args;
+		struct {void * a0; const char * a1; const char * a2;} args;
 		HxSemaphore lock;
-		borogove_event_handler_token ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::Client((hx::Object *)data->args.a0, true))->addCallTrackListener__fromC(cpp::Function<void(void*, void*, void**, size_t, void*)>(data->args.a1), data->args.a2);
+				(borogove::FormSubmitBuilder((hx::Object *)data->args.a0, true))->add(data->args.a1, data->args.a2);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -5628,27 +6385,27 @@ borogove_event_handler_token borogove_client_add_call_track_listener(void *a0, v
 
 	Data data = { {a0, a1, a2} };
 
-	// queue a callback to execute addCallTrackListener__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute add() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_client_set_in_foreground(void *a0) {
+void *borogove_chat_message_builder_new() {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Client((hx::Object *)a0, true))->setInForeground();
+		return HaxeCBridge::retainHaxeObject(borogove::ChatMessageBuilder_obj::__new());
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {} args;
 		HxSemaphore lock;
+		void * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::Client((hx::Object *)data->args.a0, true))->setInForeground();
+				data->ret = HaxeCBridge::retainHaxeObject(borogove::ChatMessageBuilder_obj::__new());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -5661,28 +6418,30 @@ void borogove_client_set_in_foreground(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {} };
 
-	// queue a callback to execute setInForeground() on the main thread and wait until execution completes
+	// queue a callback to execute new() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_client_set_not_in_foreground(void *a0) {
+const char *borogove_chat_message_builder_local_id(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Client((hx::Object *)a0, true))->setNotInForeground();
+		return HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)a0, true))->localId__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::Client((hx::Object *)data->args.a0, true))->setNotInForeground();
+				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->localId__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -5697,27 +6456,27 @@ void borogove_client_set_not_in_foreground(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute setNotInForeground() on the main thread and wait until execution completes
+	// queue a callback to execute localId__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_chat_chat_id(void *a0) {
+void borogove_chat_message_builder_set_local_id(void *a0, const char *a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::Chat((hx::Object *)a0, true))->chatId__fromC());
+		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->set_localId__fromC(a1);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; const char * a1;} args;
 		HxSemaphore lock;
-		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::Chat((hx::Object *)data->args.a0, true))->chatId__fromC());
+				(borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->set_localId__fromC(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -5730,30 +6489,29 @@ const char *borogove_chat_chat_id(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute chatId__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute set_localId__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-enum borogove_ui_state borogove_chat_ui_state(void *a0) {
+const char *borogove_chat_message_builder_server_id(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return static_cast<enum borogove_ui_state>((borogove::Chat((hx::Object *)a0, true))->uiState__fromC());
+		return HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)a0, true))->serverId__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		enum borogove_ui_state ret;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = static_cast<enum borogove_ui_state>((borogove::Chat((hx::Object *)data->args.a0, true))->uiState__fromC());
+				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->serverId__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -5768,28 +6526,27 @@ enum borogove_ui_state borogove_chat_ui_state(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute uiState__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute serverId__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-bool borogove_chat_is_blocked(void *a0) {
+void borogove_chat_message_builder_set_server_id(void *a0, const char *a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->isBlocked__fromC();
+		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->set_serverId__fromC(a1);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; const char * a1;} args;
 		HxSemaphore lock;
-		bool ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::Chat((hx::Object *)data->args.a0, true))->isBlocked__fromC();
+				(borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->set_serverId__fromC(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -5802,30 +6559,29 @@ bool borogove_chat_is_blocked(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute isBlocked__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute set_serverId__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void *borogove_chat_last_message(void *a0) {
+const char *borogove_chat_message_builder_server_id_by(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeObject((borogove::Chat((hx::Object *)a0, true))->lastMessage__fromC());
+		return HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)a0, true))->serverIdBy__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		void * ret;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeObject((borogove::Chat((hx::Object *)data->args.a0, true))->lastMessage__fromC());
+				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->serverIdBy__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -5840,28 +6596,27 @@ void *borogove_chat_last_message(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute lastMessage__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute serverIdBy__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-bool borogove_chat_is_bookmarked(void *a0) {
+void borogove_chat_message_builder_set_server_id_by(void *a0, const char *a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->isBookmarked__fromC();
+		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->set_serverIdBy__fromC(a1);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; const char * a1;} args;
 		HxSemaphore lock;
-		bool ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::Chat((hx::Object *)data->args.a0, true))->isBookmarked__fromC();
+				(borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->set_serverIdBy__fromC(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -5874,29 +6629,29 @@ bool borogove_chat_is_bookmarked(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute isBookmarked__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute set_serverIdBy__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_get_messages_before(void *a0, const char *a1, const char *a2, void (*a3) (void**, size_t, void *handler__context), void *a4) {
+enum borogove_message_type borogove_chat_message_builder_type(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->getMessagesBefore__fromC(a1, a2, cpp::Function<void(void**, size_t, void * handler__context)>(a3), a4);
+		return static_cast<enum borogove_message_type>((borogove::ChatMessageBuilder((hx::Object *)a0, true))->type__fromC());
 	}
 	struct Data {
-		struct {void * a0; const char * a1; const char * a2; void (* a3) (void**, size_t, void * handler__context); void* a4;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
+		enum borogove_message_type ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::Chat((hx::Object *)data->args.a0, true))->getMessagesBefore__fromC(data->args.a1, data->args.a2, cpp::Function<void(void**, size_t, void * handler__context)>(data->args.a3), data->args.a4);
+				data->ret = static_cast<enum borogove_message_type>((borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->type__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -5909,20 +6664,21 @@ void borogove_chat_get_messages_before(void *a0, const char *a1, const char *a2,
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2, a3, a4} };
+	Data data = { {a0} };
 
-	// queue a callback to execute getMessagesBefore__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute type__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_get_messages_after(void *a0, const char *a1, const char *a2, void (*a3) (void**, size_t, void *handler__context), void *a4) {
+void borogove_chat_message_builder_set_type(void *a0, enum borogove_message_type a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->getMessagesAfter__fromC(a1, a2, cpp::Function<void(void**, size_t, void * handler__context)>(a3), a4);
+		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->set_type__fromC(a1);
 	}
 	struct Data {
-		struct {void * a0; const char * a1; const char * a2; void (* a3) (void**, size_t, void * handler__context); void* a4;} args;
+		struct {void * a0; enum borogove_message_type a1;} args;
 		HxSemaphore lock;
 	};
 	struct Callback {
@@ -5930,7 +6686,7 @@ void borogove_chat_get_messages_after(void *a0, const char *a1, const char *a2,
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::Chat((hx::Object *)data->args.a0, true))->getMessagesAfter__fromC(data->args.a1, data->args.a2, cpp::Function<void(void**, size_t, void * handler__context)>(data->args.a3), data->args.a4);
+				(borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->set_type__fromC(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -5943,28 +6699,29 @@ void borogove_chat_get_messages_after(void *a0, const char *a1, const char *a2,
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2, a3, a4} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute getMessagesAfter__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute set_type__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_get_messages_around(void *a0, const char *a1, const char *a2, void (*a3) (void**, size_t, void *handler__context), void *a4) {
+const char *borogove_chat_message_builder_timestamp(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->getMessagesAround__fromC(a1, a2, cpp::Function<void(void**, size_t, void * handler__context)>(a3), a4);
+		return HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)a0, true))->timestamp__fromC());
 	}
 	struct Data {
-		struct {void * a0; const char * a1; const char * a2; void (* a3) (void**, size_t, void * handler__context); void* a4;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::Chat((hx::Object *)data->args.a0, true))->getMessagesAround__fromC(data->args.a1, data->args.a2, cpp::Function<void(void**, size_t, void * handler__context)>(data->args.a3), data->args.a4);
+				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->timestamp__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -5977,20 +6734,21 @@ void borogove_chat_get_messages_around(void *a0, const char *a1, const char *a2,
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2, a3, a4} };
+	Data data = { {a0} };
 
-	// queue a callback to execute getMessagesAround__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute timestamp__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_send_message(void *a0, void *a1) {
+void borogove_chat_message_builder_set_timestamp(void *a0, const char *a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->sendMessage__fromC(Dynamic((hx::Object *)a1));
+		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->set_timestamp__fromC(a1);
 	}
 	struct Data {
-		struct {void * a0; void * a1;} args;
+		struct {void * a0; const char * a1;} args;
 		HxSemaphore lock;
 	};
 	struct Callback {
@@ -5998,7 +6756,7 @@ void borogove_chat_send_message(void *a0, void *a1) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::Chat((hx::Object *)data->args.a0, true))->sendMessage__fromC(Dynamic((hx::Object *)data->args.a1));
+				(borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->set_timestamp__fromC(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -6013,26 +6771,27 @@ void borogove_chat_send_message(void *a0, void *a1) {
 
 	Data data = { {a0, a1} };
 
-	// queue a callback to execute sendMessage__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute set_timestamp__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_mark_read_up_to(void *a0, void *a1) {
+const char *borogove_chat_message_builder_sender_id(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->markReadUpTo__fromC(Dynamic((hx::Object *)a1));
+		return HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)a0, true))->senderId__fromC());
 	}
 	struct Data {
-		struct {void * a0; void * a1;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::Chat((hx::Object *)data->args.a0, true))->markReadUpTo__fromC(Dynamic((hx::Object *)data->args.a1));
+				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->senderId__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -6045,20 +6804,21 @@ void borogove_chat_mark_read_up_to(void *a0, void *a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0} };
 
-	// queue a callback to execute markReadUpTo__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute senderId__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_bookmark(void *a0) {
+void borogove_chat_message_builder_set_sender_id(void *a0, const char *a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->bookmark__fromC();
+		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->set_senderId__fromC(a1);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; const char * a1;} args;
 		HxSemaphore lock;
 	};
 	struct Callback {
@@ -6066,7 +6826,7 @@ void borogove_chat_bookmark(void *a0) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::Chat((hx::Object *)data->args.a0, true))->bookmark__fromC();
+				(borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->set_senderId__fromC(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -6079,29 +6839,29 @@ void borogove_chat_bookmark(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute bookmark__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute set_senderId__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 }
 
 HAXE_C_BRIDGE_LINKAGE
-size_t borogove_chat_get_participants(void *a0, const char ***a1) {
+void *borogove_chat_message_builder_reply_to_message(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->getParticipants__fromC(a1);
+		return HaxeCBridge::retainHaxeObject((borogove::ChatMessageBuilder((hx::Object *)a0, true))->replyToMessage__fromC());
 	}
 	struct Data {
-		struct {void * a0; const char*** a1;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
-		size_t ret;
+		void * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::Chat((hx::Object *)data->args.a0, true))->getParticipants__fromC(data->args.a1);
+				data->ret = HaxeCBridge::retainHaxeObject((borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->replyToMessage__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -6114,30 +6874,29 @@ size_t borogove_chat_get_participants(void *a0, const char ***a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0} };
 
-	// queue a callback to execute getParticipants__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute replyToMessage__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void *borogove_chat_get_participant_details(void *a0, const char *a1) {
+void borogove_chat_message_builder_set_reply_to_message(void *a0, void *a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeObject((borogove::Chat((hx::Object *)a0, true))->getParticipantDetails__fromC(a1));
+		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->set_replyToMessage__fromC(Dynamic((hx::Object *)a1));
 	}
 	struct Data {
-		struct {void * a0; const char * a1;} args;
+		struct {void * a0; void * a1;} args;
 		HxSemaphore lock;
-		void * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeObject((borogove::Chat((hx::Object *)data->args.a0, true))->getParticipantDetails__fromC(data->args.a1));
+				(borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->set_replyToMessage__fromC(Dynamic((hx::Object *)data->args.a1));
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -6152,27 +6911,27 @@ void *borogove_chat_get_participant_details(void *a0, const char *a1) {
 
 	Data data = { {a0, a1} };
 
-	// queue a callback to execute getParticipantDetails__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute set_replyToMessage__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_correct_message(void *a0, const char *a1, void *a2) {
+const char *borogove_chat_message_builder_thread_id(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->correctMessage__fromC(a1, Dynamic((hx::Object *)a2));
+		return HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)a0, true))->threadId__fromC());
 	}
 	struct Data {
-		struct {void * a0; const char * a1; void * a2;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::Chat((hx::Object *)data->args.a0, true))->correctMessage__fromC(data->args.a1, Dynamic((hx::Object *)data->args.a2));
+				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->threadId__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -6185,20 +6944,21 @@ void borogove_chat_correct_message(void *a0, const char *a1, void *a2) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2} };
+	Data data = { {a0} };
 
-	// queue a callback to execute correctMessage__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute threadId__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_add_reaction(void *a0, void *a1, void *a2) {
+void borogove_chat_message_builder_set_thread_id(void *a0, const char *a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->addReaction(Dynamic((hx::Object *)a1), Dynamic((hx::Object *)a2));
+		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->set_threadId__fromC(a1);
 	}
 	struct Data {
-		struct {void * a0; void * a1; void * a2;} args;
+		struct {void * a0; const char * a1;} args;
 		HxSemaphore lock;
 	};
 	struct Callback {
@@ -6206,7 +6966,7 @@ void borogove_chat_add_reaction(void *a0, void *a1, void *a2) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::Chat((hx::Object *)data->args.a0, true))->addReaction(Dynamic((hx::Object *)data->args.a1), Dynamic((hx::Object *)data->args.a2));
+				(borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->set_threadId__fromC(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -6219,28 +6979,29 @@ void borogove_chat_add_reaction(void *a0, void *a1, void *a2) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute addReaction() on the main thread and wait until execution completes
+	// queue a callback to execute set_threadId__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_remove_reaction(void *a0, void *a1, void *a2) {
+size_t borogove_chat_message_builder_attachments(void *a0, void ***a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->removeReaction__fromC(Dynamic((hx::Object *)a1), Dynamic((hx::Object *)a2));
+		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->attachments__fromC(a1);
 	}
 	struct Data {
-		struct {void * a0; void * a1; void * a2;} args;
+		struct {void * a0; void*** a1;} args;
 		HxSemaphore lock;
+		size_t ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::Chat((hx::Object *)data->args.a0, true))->removeReaction__fromC(Dynamic((hx::Object *)data->args.a1), Dynamic((hx::Object *)data->args.a2));
+				data->ret = (borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->attachments__fromC(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -6253,28 +7014,30 @@ void borogove_chat_remove_reaction(void *a0, void *a1, void *a2) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute removeReaction__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute attachments__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_typing(void *a0, const char *a1, const char *a2) {
+const char *borogove_chat_message_builder_text(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->typing(a1, a2);
+		return HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)a0, true))->text__fromC());
 	}
 	struct Data {
-		struct {void * a0; const char * a1; const char * a2;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::Chat((hx::Object *)data->args.a0, true))->typing(data->args.a1, data->args.a2);
+				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->text__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -6287,20 +7050,21 @@ void borogove_chat_typing(void *a0, const char *a1, const char *a2) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2} };
+	Data data = { {a0} };
 
-	// queue a callback to execute typing() on the main thread and wait until execution completes
+	// queue a callback to execute text__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_set_active(void *a0, bool a1, const char *a2) {
+void borogove_chat_message_builder_set_text(void *a0, const char *a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->setActive(a1, a2);
+		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->set_text__fromC(a1);
 	}
 	struct Data {
-		struct {void * a0; bool a1; const char * a2;} args;
+		struct {void * a0; const char * a1;} args;
 		HxSemaphore lock;
 	};
 	struct Callback {
@@ -6308,7 +7072,7 @@ void borogove_chat_set_active(void *a0, bool a1, const char *a2) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::Chat((hx::Object *)data->args.a0, true))->setActive(data->args.a1, data->args.a2);
+				(borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->set_text__fromC(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -6321,28 +7085,29 @@ void borogove_chat_set_active(void *a0, bool a1, const char *a2) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute setActive() on the main thread and wait until execution completes
+	// queue a callback to execute set_text__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_close(void *a0) {
+const char *borogove_chat_message_builder_lang(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->close__fromC();
+		return HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)a0, true))->lang__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::Chat((hx::Object *)data->args.a0, true))->close__fromC();
+				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->lang__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -6357,18 +7122,19 @@ void borogove_chat_close(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute close__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute lang__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_toggle_pinned(void *a0) {
+void borogove_chat_message_builder_set_lang(void *a0, const char *a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->togglePinned();
+		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->set_lang__fromC(a1);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; const char * a1;} args;
 		HxSemaphore lock;
 	};
 	struct Callback {
@@ -6376,7 +7142,7 @@ void borogove_chat_toggle_pinned(void *a0) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::Chat((hx::Object *)data->args.a0, true))->togglePinned();
+				(borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->set_lang__fromC(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -6389,28 +7155,29 @@ void borogove_chat_toggle_pinned(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute togglePinned() on the main thread and wait until execution completes
+	// queue a callback to execute set_lang__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_block(void *a0, bool a1, void *a2, bool a3) {
+enum borogove_message_direction borogove_chat_message_builder_direction(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->block(a1, Dynamic((hx::Object *)a2), a3);
+		return static_cast<enum borogove_message_direction>((borogove::ChatMessageBuilder((hx::Object *)a0, true))->direction__fromC());
 	}
 	struct Data {
-		struct {void * a0; bool a1; void * a2; bool a3;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
+		enum borogove_message_direction ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::Chat((hx::Object *)data->args.a0, true))->block(data->args.a1, Dynamic((hx::Object *)data->args.a2), data->args.a3);
+				data->ret = static_cast<enum borogove_message_direction>((borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->direction__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -6423,20 +7190,21 @@ void borogove_chat_block(void *a0, bool a1, void *a2, bool a3) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2, a3} };
+	Data data = { {a0} };
 
-	// queue a callback to execute block() on the main thread and wait until execution completes
+	// queue a callback to execute direction__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_unblock(void *a0, bool a1) {
+void borogove_chat_message_builder_set_direction(void *a0, enum borogove_message_direction a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->unblock(a1);
+		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->set_direction__fromC(a1);
 	}
 	struct Data {
-		struct {void * a0; bool a1;} args;
+		struct {void * a0; enum borogove_message_direction a1;} args;
 		HxSemaphore lock;
 	};
 	struct Callback {
@@ -6444,7 +7212,7 @@ void borogove_chat_unblock(void *a0, bool a1) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::Chat((hx::Object *)data->args.a0, true))->unblock(data->args.a1);
+				(borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->set_direction__fromC(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -6459,26 +7227,27 @@ void borogove_chat_unblock(void *a0, bool a1) {
 
 	Data data = { {a0, a1} };
 
-	// queue a callback to execute unblock() on the main thread and wait until execution completes
+	// queue a callback to execute set_direction__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_set_notifications(void *a0, bool a1, bool a2, bool a3) {
+enum borogove_message_status borogove_chat_message_builder_status(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->setNotifications(a1, a2, a3);
+		return static_cast<enum borogove_message_status>((borogove::ChatMessageBuilder((hx::Object *)a0, true))->status__fromC());
 	}
 	struct Data {
-		struct {void * a0; bool a1; bool a2; bool a3;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
+		enum borogove_message_status ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::Chat((hx::Object *)data->args.a0, true))->setNotifications(data->args.a1, data->args.a2, data->args.a3);
+				data->ret = static_cast<enum borogove_message_status>((borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->status__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -6491,29 +7260,29 @@ void borogove_chat_set_notifications(void *a0, bool a1, bool a2, bool a3) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2, a3} };
+	Data data = { {a0} };
 
-	// queue a callback to execute setNotifications() on the main thread and wait until execution completes
+	// queue a callback to execute status__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-bool borogove_chat_notifications_filtered(void *a0) {
+void borogove_chat_message_builder_set_status(void *a0, enum borogove_message_status a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->notificationsFiltered();
+		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->set_status__fromC(a1);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; enum borogove_message_status a1;} args;
 		HxSemaphore lock;
-		bool ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::Chat((hx::Object *)data->args.a0, true))->notificationsFiltered();
+				(borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->set_status__fromC(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -6526,30 +7295,29 @@ bool borogove_chat_notifications_filtered(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute notificationsFiltered() on the main thread and wait until execution completes
+	// queue a callback to execute set_status__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-bool borogove_chat_notify_mention(void *a0) {
+const char *borogove_chat_message_builder_status_text(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->notifyMention();
+		return HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)a0, true))->statusText__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		bool ret;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::Chat((hx::Object *)data->args.a0, true))->notifyMention();
+				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->statusText__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -6564,28 +7332,27 @@ bool borogove_chat_notify_mention(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute notifyMention() on the main thread and wait until execution completes
+	// queue a callback to execute statusText__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-bool borogove_chat_notify_reply(void *a0) {
+void borogove_chat_message_builder_set_status_text(void *a0, const char *a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->notifyReply();
+		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->set_statusText__fromC(a1);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; const char * a1;} args;
 		HxSemaphore lock;
-		bool ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::Chat((hx::Object *)data->args.a0, true))->notifyReply();
+				(borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->set_statusText__fromC(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -6598,30 +7365,28 @@ bool borogove_chat_notify_reply(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute notifyReply() on the main thread and wait until execution completes
+	// queue a callback to execute set_statusText__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_chat_last_message_id(void *a0) {
+void borogove_chat_message_builder_set_versions(void *a0, void *const *a1, size_t a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::Chat((hx::Object *)a0, true))->lastMessageId__fromC());
+		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->set_versions__fromC(a1, a2);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; void* const* a1; size_t a2;} args;
 		HxSemaphore lock;
-		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::Chat((hx::Object *)data->args.a0, true))->lastMessageId__fromC());
+				(borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->set_versions__fromC(data->args.a1, data->args.a2);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -6634,30 +7399,29 @@ const char *borogove_chat_last_message_id(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1, a2} };
 
-	// queue a callback to execute lastMessageId__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute set_versions__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_chat_get_photo(void *a0) {
+size_t borogove_chat_message_builder_versions(void *a0, void ***a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::Chat((hx::Object *)a0, true))->getPhoto());
+		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->versions__fromC(a1);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; void*** a1;} args;
 		HxSemaphore lock;
-		const char * ret;
+		size_t ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::Chat((hx::Object *)data->args.a0, true))->getPhoto());
+				data->ret = (borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->versions__fromC(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -6670,30 +7434,30 @@ const char *borogove_chat_get_photo(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute getPhoto() on the main thread and wait until execution completes
+	// queue a callback to execute versions__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_chat_get_placeholder(void *a0) {
+void *borogove_chat_message_builder_encryption(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::Chat((hx::Object *)a0, true))->getPlaceholder());
+		return HaxeCBridge::retainHaxeObject((borogove::ChatMessageBuilder((hx::Object *)a0, true))->encryption__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		const char * ret;
+		void * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::Chat((hx::Object *)data->args.a0, true))->getPlaceholder());
+				data->ret = HaxeCBridge::retainHaxeObject((borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->encryption__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -6708,28 +7472,27 @@ const char *borogove_chat_get_placeholder(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute getPlaceholder() on the main thread and wait until execution completes
+	// queue a callback to execute encryption__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_chat_read_up_to(void *a0) {
+void borogove_chat_message_builder_set_encryption(void *a0, void *a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::Chat((hx::Object *)a0, true))->readUpTo());
+		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->set_encryption__fromC(Dynamic((hx::Object *)a1));
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; void * a1;} args;
 		HxSemaphore lock;
-		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::Chat((hx::Object *)data->args.a0, true))->readUpTo());
+				(borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->set_encryption__fromC(Dynamic((hx::Object *)data->args.a1));
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -6742,30 +7505,28 @@ const char *borogove_chat_read_up_to(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute readUpTo() on the main thread and wait until execution completes
+	// queue a callback to execute set_encryption__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-int borogove_chat_unread_count(void *a0) {
+void borogove_chat_message_builder_add_attachment(void *a0, void *a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->unreadCount();
+		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->addAttachment(Dynamic((hx::Object *)a1));
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; void * a1;} args;
 		HxSemaphore lock;
-		int ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::Chat((hx::Object *)data->args.a0, true))->unreadCount();
+				(borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->addAttachment(Dynamic((hx::Object *)data->args.a1));
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -6778,30 +7539,28 @@ int borogove_chat_unread_count(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute unreadCount() on the main thread and wait until execution completes
+	// queue a callback to execute addAttachment() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_chat_preview(void *a0) {
+void borogove_chat_message_builder_set_html(void *a0, const char *a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::Chat((hx::Object *)a0, true))->preview());
+		return (borogove::ChatMessageBuilder((hx::Object *)a0, true))->setHtml(a1);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; const char * a1;} args;
 		HxSemaphore lock;
-		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::Chat((hx::Object *)data->args.a0, true))->preview());
+				(borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->setHtml(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -6814,29 +7573,29 @@ const char *borogove_chat_preview(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute preview() on the main thread and wait until execution completes
+	// queue a callback to execute setHtml() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_set_display_name(void *a0, const char *a1) {
+const char *borogove_chat_message_builder_chat_id(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->setDisplayName(a1);
+		return HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)a0, true))->chatId());
 	}
 	struct Data {
-		struct {void * a0; const char * a1;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::Chat((hx::Object *)data->args.a0, true))->setDisplayName(data->args.a1);
+				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->chatId());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -6849,17 +7608,18 @@ void borogove_chat_set_display_name(void *a0, const char *a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0} };
 
-	// queue a callback to execute setDisplayName() on the main thread and wait until execution completes
+	// queue a callback to execute chatId() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_chat_get_display_name(void *a0) {
+const char *borogove_chat_message_builder_get_sender_id(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::Chat((hx::Object *)a0, true))->getDisplayName());
+		return HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)a0, true))->get_senderId());
 	}
 	struct Data {
 		struct {void * a0;} args;
@@ -6871,7 +7631,7 @@ const char *borogove_chat_get_display_name(void *a0) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::Chat((hx::Object *)data->args.a0, true))->getDisplayName());
+				data->ret = HaxeCBridge::retainHaxeString((borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->get_senderId());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -6886,27 +7646,28 @@ const char *borogove_chat_get_display_name(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute getDisplayName() on the main thread and wait until execution completes
+	// queue a callback to execute get_senderId() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_set_trusted(void *a0, bool a1) {
+void *borogove_chat_message_builder_build(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->setTrusted(a1);
+		return HaxeCBridge::retainHaxeObject((borogove::ChatMessageBuilder((hx::Object *)a0, true))->build());
 	}
 	struct Data {
-		struct {void * a0; bool a1;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
+		void * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::Chat((hx::Object *)data->args.a0, true))->setTrusted(data->args.a1);
+				data->ret = HaxeCBridge::retainHaxeObject((borogove::ChatMessageBuilder((hx::Object *)data->args.a0, true))->build());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -6919,29 +7680,30 @@ void borogove_chat_set_trusted(void *a0, bool a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0} };
 
-	// queue a callback to execute setTrusted() on the main thread and wait until execution completes
+	// queue a callback to execute build() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-bool borogove_chat_is_trusted(void *a0) {
+const char *borogove_participant_display_name(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->isTrusted();
+		return HaxeCBridge::retainHaxeString((borogove::Participant((hx::Object *)a0, true))->displayName__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		bool ret;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::Chat((hx::Object *)data->args.a0, true))->isTrusted();
+				data->ret = HaxeCBridge::retainHaxeString((borogove::Participant((hx::Object *)data->args.a0, true))->displayName__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -6956,28 +7718,28 @@ bool borogove_chat_is_trusted(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute isTrusted() on the main thread and wait until execution completes
+	// queue a callback to execute displayName__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-bool borogove_chat_syncing(void *a0) {
+const char *borogove_participant_photo_uri(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->syncing();
+		return HaxeCBridge::retainHaxeString((borogove::Participant((hx::Object *)a0, true))->photoUri__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		bool ret;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::Chat((hx::Object *)data->args.a0, true))->syncing();
+				data->ret = HaxeCBridge::retainHaxeString((borogove::Participant((hx::Object *)data->args.a0, true))->photoUri__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -6992,28 +7754,28 @@ bool borogove_chat_syncing(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute syncing() on the main thread and wait until execution completes
+	// queue a callback to execute photoUri__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-bool borogove_chat_can_audio_call(void *a0) {
+const char *borogove_participant_placeholder_uri(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->canAudioCall();
+		return HaxeCBridge::retainHaxeString((borogove::Participant((hx::Object *)a0, true))->placeholderUri__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		bool ret;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::Chat((hx::Object *)data->args.a0, true))->canAudioCall();
+				data->ret = HaxeCBridge::retainHaxeString((borogove::Participant((hx::Object *)data->args.a0, true))->placeholderUri__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -7028,16 +7790,16 @@ bool borogove_chat_can_audio_call(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute canAudioCall() on the main thread and wait until execution completes
+	// queue a callback to execute placeholderUri__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-bool borogove_chat_can_video_call(void *a0) {
+bool borogove_participant_is_self(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->canVideoCall();
+		return (borogove::Participant((hx::Object *)a0, true))->isSelf__fromC();
 	}
 	struct Data {
 		struct {void * a0;} args;
@@ -7049,7 +7811,7 @@ bool borogove_chat_can_video_call(void *a0) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::Chat((hx::Object *)data->args.a0, true))->canVideoCall();
+				data->ret = (borogove::Participant((hx::Object *)data->args.a0, true))->isSelf__fromC();
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -7064,28 +7826,27 @@ bool borogove_chat_can_video_call(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute canVideoCall() on the main thread and wait until execution completes
+	// queue a callback to execute isSelf__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void *borogove_chat_start_call(void *a0, bool a1, bool a2) {
+void borogove_participant_profile(void *a0, void *a1, void (*a2) (void*, void *handler__context), void *a3) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeObject((borogove::Chat((hx::Object *)a0, true))->startCall(a1, a2));
+		return (borogove::Participant((hx::Object *)a0, true))->profile__fromC(Dynamic((hx::Object *)a1), cpp::Function<void(void*, void * handler__context)>(a2), a3);
 	}
 	struct Data {
-		struct {void * a0; bool a1; bool a2;} args;
+		struct {void * a0; void * a1; void (* a2) (void*, void * handler__context); void* a3;} args;
 		HxSemaphore lock;
-		void * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeObject((borogove::Chat((hx::Object *)data->args.a0, true))->startCall(data->args.a1, data->args.a2));
+				(borogove::Participant((hx::Object *)data->args.a0, true))->profile__fromC(Dynamic((hx::Object *)data->args.a1), cpp::Function<void(void*, void * handler__context)>(data->args.a2), data->args.a3);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -7098,29 +7859,29 @@ void *borogove_chat_start_call(void *a0, bool a1, bool a2) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2} };
+	Data data = { {a0, a1, a2, a3} };
 
-	// queue a callback to execute startCall() on the main thread and wait until execution completes
+	// queue a callback to execute profile__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_accept_call(void *a0) {
+size_t borogove_profile_items(void *a0, void ***a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->acceptCall();
+		return (borogove::Profile((hx::Object *)a0, true))->items__fromC(a1);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; void*** a1;} args;
 		HxSemaphore lock;
+		size_t ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::Chat((hx::Object *)data->args.a0, true))->acceptCall();
+				data->ret = (borogove::Profile((hx::Object *)data->args.a0, true))->items__fromC(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -7133,28 +7894,30 @@ void borogove_chat_accept_call(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute acceptCall() on the main thread and wait until execution completes
+	// queue a callback to execute items__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_hangup(void *a0) {
+const char *borogove_profile_item_id(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->hangup();
+		return HaxeCBridge::retainHaxeString((borogove::ProfileItem((hx::Object *)a0, true))->id__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::Chat((hx::Object *)data->args.a0, true))->hangup();
+				data->ret = HaxeCBridge::retainHaxeString((borogove::ProfileItem((hx::Object *)data->args.a0, true))->id__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -7169,27 +7932,28 @@ void borogove_chat_hangup(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute hangup() on the main thread and wait until execution completes
+	// queue a callback to execute id__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-enum borogove_calls_call_status borogove_chat_call_status(void *a0) {
+const char *borogove_profile_item_key(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return static_cast<enum borogove_calls_call_status>((borogove::Chat((hx::Object *)a0, true))->callStatus());
+		return HaxeCBridge::retainHaxeString((borogove::ProfileItem((hx::Object *)a0, true))->key__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		enum borogove_calls_call_status ret;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = static_cast<enum borogove_calls_call_status>((borogove::Chat((hx::Object *)data->args.a0, true))->callStatus());
+				data->ret = HaxeCBridge::retainHaxeString((borogove::ProfileItem((hx::Object *)data->args.a0, true))->key__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -7204,28 +7968,28 @@ enum borogove_calls_call_status borogove_chat_call_status(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute callStatus() on the main thread and wait until execution completes
+	// queue a callback to execute key__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void *borogove_chat_dtmf(void *a0) {
+size_t borogove_profile_item_parameters(void *a0, void ***a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeObject((borogove::Chat((hx::Object *)a0, true))->dtmf());
+		return (borogove::ProfileItem((hx::Object *)a0, true))->parameters__fromC(a1);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; void*** a1;} args;
 		HxSemaphore lock;
-		void * ret;
+		size_t ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeObject((borogove::Chat((hx::Object *)data->args.a0, true))->dtmf());
+				data->ret = (borogove::ProfileItem((hx::Object *)data->args.a0, true))->parameters__fromC(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -7238,21 +8002,21 @@ void *borogove_chat_dtmf(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute dtmf() on the main thread and wait until execution completes
+	// queue a callback to execute parameters__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-size_t borogove_chat_video_tracks(void *a0, void ***a1) {
+size_t borogove_profile_item_text(void *a0, const char ***a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->videoTracks__fromC(a1);
+		return (borogove::ProfileItem((hx::Object *)a0, true))->text__fromC(a1);
 	}
 	struct Data {
-		struct {void * a0; void*** a1;} args;
+		struct {void * a0; const char*** a1;} args;
 		HxSemaphore lock;
 		size_t ret;
 	};
@@ -7261,7 +8025,7 @@ size_t borogove_chat_video_tracks(void *a0, void ***a1) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::Chat((hx::Object *)data->args.a0, true))->videoTracks__fromC(data->args.a1);
+				data->ret = (borogove::ProfileItem((hx::Object *)data->args.a0, true))->text__fromC(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -7276,28 +8040,28 @@ size_t borogove_chat_video_tracks(void *a0, void ***a1) {
 
 	Data data = { {a0, a1} };
 
-	// queue a callback to execute videoTracks__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute text__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_chat_encryption_mode(void *a0) {
+size_t borogove_profile_item_uri(void *a0, const char ***a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::Chat((hx::Object *)a0, true))->encryptionMode());
+		return (borogove::ProfileItem((hx::Object *)a0, true))->uri__fromC(a1);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; const char*** a1;} args;
 		HxSemaphore lock;
-		const char * ret;
+		size_t ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::Chat((hx::Object *)data->args.a0, true))->encryptionMode());
+				data->ret = (borogove::ProfileItem((hx::Object *)data->args.a0, true))->uri__fromC(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -7310,30 +8074,30 @@ const char *borogove_chat_encryption_mode(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute encryptionMode() on the main thread and wait until execution completes
+	// queue a callback to execute uri__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-bool borogove_chat_can_send(void *a0) {
+size_t borogove_profile_item_date(void *a0, const char ***a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->canSend();
+		return (borogove::ProfileItem((hx::Object *)a0, true))->date__fromC(a1);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; const char*** a1;} args;
 		HxSemaphore lock;
-		bool ret;
+		size_t ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::Chat((hx::Object *)data->args.a0, true))->canSend();
+				data->ret = (borogove::ProfileItem((hx::Object *)data->args.a0, true))->date__fromC(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -7346,29 +8110,30 @@ bool borogove_chat_can_send(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute canSend() on the main thread and wait until execution completes
+	// queue a callback to execute date__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_invite(void *a0, void *a1, const char *a2) {
+size_t borogove_profile_item_time(void *a0, const char ***a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->invite(Dynamic((hx::Object *)a1), a2);
+		return (borogove::ProfileItem((hx::Object *)a0, true))->time__fromC(a1);
 	}
 	struct Data {
-		struct {void * a0; void * a1; const char * a2;} args;
+		struct {void * a0; const char*** a1;} args;
 		HxSemaphore lock;
+		size_t ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::Chat((hx::Object *)data->args.a0, true))->invite(Dynamic((hx::Object *)data->args.a1), data->args.a2);
+				data->ret = (borogove::ProfileItem((hx::Object *)data->args.a0, true))->time__fromC(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -7381,29 +8146,30 @@ void borogove_chat_invite(void *a0, void *a1, const char *a2) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute invite() on the main thread and wait until execution completes
+	// queue a callback to execute time__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-bool borogove_chat_can_invite(void *a0) {
+size_t borogove_profile_item_datetime(void *a0, const char ***a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->canInvite();
+		return (borogove::ProfileItem((hx::Object *)a0, true))->datetime__fromC(a1);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; const char*** a1;} args;
 		HxSemaphore lock;
-		bool ret;
+		size_t ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::Chat((hx::Object *)data->args.a0, true))->canInvite();
+				data->ret = (borogove::ProfileItem((hx::Object *)data->args.a0, true))->datetime__fromC(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -7416,30 +8182,30 @@ bool borogove_chat_can_invite(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute canInvite() on the main thread and wait until execution completes
+	// queue a callback to execute datetime__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-bool borogove_chat_is_app(void *a0) {
+size_t borogove_profile_item_language_tag(void *a0, const char ***a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->isApp();
+		return (borogove::ProfileItem((hx::Object *)a0, true))->languageTag__fromC(a1);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; const char*** a1;} args;
 		HxSemaphore lock;
-		bool ret;
+		size_t ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::Chat((hx::Object *)data->args.a0, true))->isApp();
+				data->ret = (borogove::ProfileItem((hx::Object *)data->args.a0, true))->languageTag__fromC(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -7452,30 +8218,30 @@ bool borogove_chat_is_app(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute isApp() on the main thread and wait until execution completes
+	// queue a callback to execute languageTag__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-bool borogove_chat_has_commands(void *a0) {
+void *borogove_persistence_dummy_new() {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->hasCommands();
+		return HaxeCBridge::retainHaxeObject(borogove::persistence::Dummy_obj::__new());
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {} args;
 		HxSemaphore lock;
-		bool ret;
+		void * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::Chat((hx::Object *)data->args.a0, true))->hasCommands();
+				data->ret = HaxeCBridge::retainHaxeObject(borogove::persistence::Dummy_obj::__new());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -7488,29 +8254,30 @@ bool borogove_chat_has_commands(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {} };
 
-	// queue a callback to execute hasCommands() on the main thread and wait until execution completes
+	// queue a callback to execute new() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_chat_commands(void *a0, void (*a1) (void**, size_t, void *handler__context), void *a2) {
+void *borogove_push_receive(const char *a0, void *a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Chat((hx::Object *)a0, true))->commands__fromC(cpp::Function<void(void**, size_t, void * handler__context)>(a1), a2);
+		return HaxeCBridge::retainHaxeObject(borogove::Push_obj::receive(a0, Dynamic((hx::Object *)a1)));
 	}
 	struct Data {
-		struct {void * a0; void (* a1) (void**, size_t, void * handler__context); void* a2;} args;
+		struct {const char * a0; void * a1;} args;
 		HxSemaphore lock;
+		void * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::Chat((hx::Object *)data->args.a0, true))->commands__fromC(cpp::Function<void(void**, size_t, void * handler__context)>(data->args.a1), data->args.a2);
+				data->ret = HaxeCBridge::retainHaxeObject(borogove::Push_obj::receive(data->args.a0, Dynamic((hx::Object *)data->args.a1)));
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -7523,29 +8290,30 @@ void borogove_chat_commands(void *a0, void (*a1) (void**, size_t, void *handler_
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute commands__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute receive() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void *borogove_chat_invited_by(void *a0) {
+const char *borogove_notification_title(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeObject((borogove::Chat((hx::Object *)a0, true))->invitedBy());
+		return HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)a0, true))->title__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		void * ret;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeObject((borogove::Chat((hx::Object *)data->args.a0, true))->invitedBy());
+				data->ret = HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)data->args.a0, true))->title__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -7560,16 +8328,16 @@ void *borogove_chat_invited_by(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute invitedBy() on the main thread and wait until execution completes
+	// queue a callback to execute title__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_calls_media_stream_track_id(void *a0) {
+const char *borogove_notification_body(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::calls::MediaStreamTrack((hx::Object *)a0, true))->id__fromC());
+		return HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)a0, true))->body__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
@@ -7581,7 +8349,7 @@ const char *borogove_calls_media_stream_track_id(void *a0) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::calls::MediaStreamTrack((hx::Object *)data->args.a0, true))->id__fromC());
+				data->ret = HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)data->args.a0, true))->body__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -7596,28 +8364,28 @@ const char *borogove_calls_media_stream_track_id(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute id__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute body__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-bool borogove_calls_media_stream_track_muted(void *a0) {
+const char *borogove_notification_account_id(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::calls::MediaStreamTrack((hx::Object *)a0, true))->muted__fromC();
+		return HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)a0, true))->accountId__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		bool ret;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::calls::MediaStreamTrack((hx::Object *)data->args.a0, true))->muted__fromC();
+				data->ret = HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)data->args.a0, true))->accountId__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -7632,16 +8400,16 @@ bool borogove_calls_media_stream_track_muted(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute muted__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute accountId__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_calls_media_stream_track_kind(void *a0) {
+const char *borogove_notification_chat_id(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::calls::MediaStreamTrack((hx::Object *)a0, true))->kind__fromC());
+		return HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)a0, true))->chatId__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
@@ -7653,7 +8421,7 @@ const char *borogove_calls_media_stream_track_kind(void *a0) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::calls::MediaStreamTrack((hx::Object *)data->args.a0, true))->kind__fromC());
+				data->ret = HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)data->args.a0, true))->chatId__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -7668,28 +8436,28 @@ const char *borogove_calls_media_stream_track_kind(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute kind__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute chatId__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-size_t borogove_calls_media_stream_track_supported_audio_formats(void *a0, void ***a1) {
+const char *borogove_notification_sender_id(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::calls::MediaStreamTrack((hx::Object *)a0, true))->supportedAudioFormats__fromC(a1);
+		return HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)a0, true))->senderId__fromC());
 	}
 	struct Data {
-		struct {void * a0; void*** a1;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
-		size_t ret;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::calls::MediaStreamTrack((hx::Object *)data->args.a0, true))->supportedAudioFormats__fromC(data->args.a1);
+				data->ret = HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)data->args.a0, true))->senderId__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -7702,29 +8470,30 @@ size_t borogove_calls_media_stream_track_supported_audio_formats(void *a0, void
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0} };
 
-	// queue a callback to execute supportedAudioFormats__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute senderId__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_calls_media_stream_track_add_pcm_listener(void *a0, void (*a1) (short*, size_t, int, int, void*), void *a2) {
+const char *borogove_notification_message_id(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::calls::MediaStreamTrack((hx::Object *)a0, true))->addPCMListener__fromC(cpp::Function<void(short*, size_t, int, int, void*)>(a1), a2);
+		return HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)a0, true))->messageId__fromC());
 	}
 	struct Data {
-		struct {void * a0; void (* a1) (short*, size_t, int, int, void*); void* a2;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::calls::MediaStreamTrack((hx::Object *)data->args.a0, true))->addPCMListener__fromC(cpp::Function<void(short*, size_t, int, int, void*)>(data->args.a1), data->args.a2);
+				data->ret = HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)data->args.a0, true))->messageId__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -7737,28 +8506,30 @@ void borogove_calls_media_stream_track_add_pcm_listener(void *a0, void (*a1) (sh
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2} };
+	Data data = { {a0} };
 
-	// queue a callback to execute addPCMListener__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute messageId__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_calls_media_stream_track_add_ready_for_pcm_listener(void *a0, void (*a1) (void*), void *a2) {
+enum borogove_message_type borogove_notification_type(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::calls::MediaStreamTrack((hx::Object *)a0, true))->addReadyForPCMListener__fromC(cpp::Function<void(void*)>(a1), a2);
+		return static_cast<enum borogove_message_type>((borogove::Notification((hx::Object *)a0, true))->type__fromC());
 	}
 	struct Data {
-		struct {void * a0; void (* a1) (void*); void* a2;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
+		enum borogove_message_type ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::calls::MediaStreamTrack((hx::Object *)data->args.a0, true))->addReadyForPCMListener__fromC(cpp::Function<void(void*)>(data->args.a1), data->args.a2);
+				data->ret = static_cast<enum borogove_message_type>((borogove::Notification((hx::Object *)data->args.a0, true))->type__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -7771,28 +8542,30 @@ void borogove_calls_media_stream_track_add_ready_for_pcm_listener(void *a0, void
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2} };
+	Data data = { {a0} };
 
-	// queue a callback to execute addReadyForPCMListener__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute type__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_calls_media_stream_track_write_pcm(void *a0, const short *a1, size_t a2, int a3, int a4) {
+const char *borogove_notification_call_status(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::calls::MediaStreamTrack((hx::Object *)a0, true))->writePCM__fromC(a1, a2, a3, a4);
+		return HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)a0, true))->callStatus__fromC());
 	}
 	struct Data {
-		struct {void * a0; const short* a1; size_t a2; int a3; int a4;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::calls::MediaStreamTrack((hx::Object *)data->args.a0, true))->writePCM__fromC(data->args.a1, data->args.a2, data->args.a3, data->args.a4);
+				data->ret = HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)data->args.a0, true))->callStatus__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -7805,28 +8578,30 @@ void borogove_calls_media_stream_track_write_pcm(void *a0, const short *a1, size
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2, a3, a4} };
+	Data data = { {a0} };
 
-	// queue a callback to execute writePCM__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute callStatus__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_calls_media_stream_track_stop(void *a0) {
+const char *borogove_notification_call_sid(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::calls::MediaStreamTrack((hx::Object *)a0, true))->stop();
+		return HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)a0, true))->callSid__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::calls::MediaStreamTrack((hx::Object *)data->args.a0, true))->stop();
+				data->ret = HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)data->args.a0, true))->callSid__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -7841,27 +8616,28 @@ void borogove_calls_media_stream_track_stop(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute stop() on the main thread and wait until execution completes
+	// queue a callback to execute callSid__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void *borogove_calls_audio_format_new(const char *a0, unsigned char a1, int a2, int a3) {
+const char *borogove_notification_image_uri(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeObject(borogove::calls::AudioFormat_obj::__new(a0, a1, a2, a3));
+		return HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)a0, true))->imageUri__fromC());
 	}
 	struct Data {
-		struct {const char * a0; unsigned char a1; int a2; int a3;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
-		void * ret;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeObject(borogove::calls::AudioFormat_obj::__new(data->args.a0, data->args.a1, data->args.a2, data->args.a3));
+				data->ret = HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)data->args.a0, true))->imageUri__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -7874,30 +8650,30 @@ void *borogove_calls_audio_format_new(const char *a0, unsigned char a1, int a2,
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2, a3} };
+	Data data = { {a0} };
 
-	// queue a callback to execute new() on the main thread and wait until execution completes
+	// queue a callback to execute imageUri__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-int borogove_calls_audio_format_clock_rate(void *a0) {
+const char *borogove_notification_lang(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::calls::AudioFormat((hx::Object *)a0, true))->clockRate__fromC();
+		return HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)a0, true))->lang__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		int ret;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::calls::AudioFormat((hx::Object *)data->args.a0, true))->clockRate__fromC();
+				data->ret = HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)data->args.a0, true))->lang__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -7912,28 +8688,28 @@ int borogove_calls_audio_format_clock_rate(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute clockRate__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute lang__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-int borogove_calls_audio_format_channels(void *a0) {
+const char *borogove_notification_timestamp(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::calls::AudioFormat((hx::Object *)a0, true))->channels__fromC();
+		return HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)a0, true))->timestamp__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		int ret;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::calls::AudioFormat((hx::Object *)data->args.a0, true))->channels__fromC();
+				data->ret = HaxeCBridge::retainHaxeString((borogove::Notification((hx::Object *)data->args.a0, true))->timestamp__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -7948,28 +8724,27 @@ int borogove_calls_audio_format_channels(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute channels__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute timestamp__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_command_name(void *a0) {
+void borogove_event_emitter_remove_event_listener(void *a0, borogove_event_handler_token a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::Command((hx::Object *)a0, true))->name__fromC());
+		return (borogove::EventEmitter((hx::Object *)a0, true))->removeEventListener(a1);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; borogove_event_handler_token a1;} args;
 		HxSemaphore lock;
-		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::Command((hx::Object *)data->args.a0, true))->name__fromC());
+				(borogove::EventEmitter((hx::Object *)data->args.a0, true))->removeEventListener(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -7982,29 +8757,29 @@ const char *borogove_command_name(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute name__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute removeEventListener() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_command_execute(void *a0, void (*a1) (void*, void *handler__context), void *a2) {
+void *borogove_client_new(const char *a0, void *a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Command((hx::Object *)a0, true))->execute__fromC(cpp::Function<void(void*, void * handler__context)>(a1), a2);
+		return HaxeCBridge::retainHaxeObject(borogove::Client_obj::__new(a0, Dynamic((hx::Object *)a1)));
 	}
 	struct Data {
-		struct {void * a0; void (* a1) (void*, void * handler__context); void* a2;} args;
+		struct {const char * a0; void * a1;} args;
 		HxSemaphore lock;
+		void * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::Command((hx::Object *)data->args.a0, true))->execute__fromC(cpp::Function<void(void*, void * handler__context)>(data->args.a1), data->args.a2);
+				data->ret = HaxeCBridge::retainHaxeObject(borogove::Client_obj::__new(data->args.a0, Dynamic((hx::Object *)data->args.a1)));
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -8017,29 +8792,29 @@ void borogove_command_execute(void *a0, void (*a1) (void*, void *handler__contex
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute execute__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute new() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_command_session_name(void *a0) {
+void borogove_client_set_send_available(void *a0, bool a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::CommandSession((hx::Object *)a0, true))->name__fromC());
+		return (borogove::Client((hx::Object *)a0, true))->set_sendAvailable__fromC(a1);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; bool a1;} args;
 		HxSemaphore lock;
-		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::CommandSession((hx::Object *)data->args.a0, true))->name__fromC());
+				(borogove::Client((hx::Object *)data->args.a0, true))->set_sendAvailable__fromC(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -8052,30 +8827,28 @@ const char *borogove_command_session_name(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute name__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute set_sendAvailable__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_command_session_status(void *a0) {
+void borogove_client_start(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::CommandSession((hx::Object *)a0, true))->status__fromC());
+		return (borogove::Client((hx::Object *)a0, true))->start();
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::CommandSession((hx::Object *)data->args.a0, true))->status__fromC());
+				(borogove::Client((hx::Object *)data->args.a0, true))->start();
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -8090,28 +8863,26 @@ const char *borogove_command_session_status(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute status__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute start() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-size_t borogove_command_session_actions(void *a0, void ***a1) {
+void borogove_client_start_offline(void *a0, void (*a1) (bool, void *handler__context), void *a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::CommandSession((hx::Object *)a0, true))->actions__fromC(a1);
+		return (borogove::Client((hx::Object *)a0, true))->startOffline__fromC(cpp::Function<void(bool, void * handler__context)>(a1), a2);
 	}
 	struct Data {
-		struct {void * a0; void*** a1;} args;
+		struct {void * a0; void (* a1) (bool, void * handler__context); void* a2;} args;
 		HxSemaphore lock;
-		size_t ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::CommandSession((hx::Object *)data->args.a0, true))->actions__fromC(data->args.a1);
+				(borogove::Client((hx::Object *)data->args.a0, true))->startOffline__fromC(cpp::Function<void(bool, void * handler__context)>(data->args.a1), data->args.a2);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -8124,30 +8895,28 @@ size_t borogove_command_session_actions(void *a0, void ***a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0, a1, a2} };
 
-	// queue a callback to execute actions__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute startOffline__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-size_t borogove_command_session_forms(void *a0, void ***a1) {
+void borogove_client_logout(void *a0, bool a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::CommandSession((hx::Object *)a0, true))->forms__fromC(a1);
+		return (borogove::Client((hx::Object *)a0, true))->logout(a1);
 	}
 	struct Data {
-		struct {void * a0; void*** a1;} args;
+		struct {void * a0; bool a1;} args;
 		HxSemaphore lock;
-		size_t ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::CommandSession((hx::Object *)data->args.a0, true))->forms__fromC(data->args.a1);
+				(borogove::Client((hx::Object *)data->args.a0, true))->logout(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -8162,19 +8931,18 @@ size_t borogove_command_session_forms(void *a0, void ***a1) {
 
 	Data data = { {a0, a1} };
 
-	// queue a callback to execute forms__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute logout() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_command_session_execute(void *a0, const char *a1, void *a2, int a3, void (*a4) (void*, void *handler__context), void *a5) {
+void borogove_client_use_password(void *a0, const char *a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::CommandSession((hx::Object *)a0, true))->execute__fromC(a1, Dynamic((hx::Object *)a2), a3, cpp::Function<void(void*, void * handler__context)>(a4), a5);
+		return (borogove::Client((hx::Object *)a0, true))->usePassword(a1);
 	}
 	struct Data {
-		struct {void * a0; const char * a1; void * a2; int a3; void (* a4) (void*, void * handler__context); void* a5;} args;
+		struct {void * a0; const char * a1;} args;
 		HxSemaphore lock;
 	};
 	struct Callback {
@@ -8182,7 +8950,7 @@ void borogove_command_session_execute(void *a0, const char *a1, void *a2, int a3
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::CommandSession((hx::Object *)data->args.a0, true))->execute__fromC(data->args.a1, Dynamic((hx::Object *)data->args.a2), data->args.a3, cpp::Function<void(void*, void * handler__context)>(data->args.a4), data->args.a5);
+				(borogove::Client((hx::Object *)data->args.a0, true))->usePassword(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -8195,17 +8963,17 @@ void borogove_command_session_execute(void *a0, const char *a1, void *a2, int a3
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2, a3, a4, a5} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute execute__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute usePassword() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_form_option_label(void *a0) {
+const char *borogove_client_account_id(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::FormOption((hx::Object *)a0, true))->label__fromC());
+		return HaxeCBridge::retainHaxeString((borogove::Client((hx::Object *)a0, true))->accountId());
 	}
 	struct Data {
 		struct {void * a0;} args;
@@ -8217,7 +8985,7 @@ const char *borogove_form_option_label(void *a0) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::FormOption((hx::Object *)data->args.a0, true))->label__fromC());
+				data->ret = HaxeCBridge::retainHaxeString((borogove::Client((hx::Object *)data->args.a0, true))->accountId());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -8232,16 +9000,16 @@ const char *borogove_form_option_label(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute label__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute accountId() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_form_option_value(void *a0) {
+const char *borogove_client_display_name(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::FormOption((hx::Object *)a0, true))->value__fromC());
+		return HaxeCBridge::retainHaxeString((borogove::Client((hx::Object *)a0, true))->displayName());
 	}
 	struct Data {
 		struct {void * a0;} args;
@@ -8253,7 +9021,7 @@ const char *borogove_form_option_value(void *a0) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::FormOption((hx::Object *)data->args.a0, true))->value__fromC());
+				data->ret = HaxeCBridge::retainHaxeString((borogove::Client((hx::Object *)data->args.a0, true))->displayName());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -8268,28 +9036,27 @@ const char *borogove_form_option_value(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute value__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute displayName() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-bool borogove_form_is_result(void *a0) {
+void borogove_client_set_profile(void *a0, void *a1, bool a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Form((hx::Object *)a0, true))->isResult();
+		return (borogove::Client((hx::Object *)a0, true))->setProfile(Dynamic((hx::Object *)a1), a2);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; void * a1; bool a2;} args;
 		HxSemaphore lock;
-		bool ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::Form((hx::Object *)data->args.a0, true))->isResult();
+				(borogove::Client((hx::Object *)data->args.a0, true))->setProfile(Dynamic((hx::Object *)data->args.a1), data->args.a2);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -8302,30 +9069,28 @@ bool borogove_form_is_result(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1, a2} };
 
-	// queue a callback to execute isResult() on the main thread and wait until execution completes
+	// queue a callback to execute setProfile() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_form_title(void *a0) {
+void borogove_client_prepare_attachment(void *a0, void *a1, void (*a2) (void*, void *handler__context), void *a3) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::Form((hx::Object *)a0, true))->title());
+		return (borogove::Client((hx::Object *)a0, true))->prepareAttachment__fromC(Dynamic((hx::Object *)a1), cpp::Function<void(void*, void * handler__context)>(a2), a3);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; void * a1; void (* a2) (void*, void * handler__context); void* a3;} args;
 		HxSemaphore lock;
-		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::Form((hx::Object *)data->args.a0, true))->title());
+				(borogove::Client((hx::Object *)data->args.a0, true))->prepareAttachment__fromC(Dynamic((hx::Object *)data->args.a1), cpp::Function<void(void*, void * handler__context)>(data->args.a2), data->args.a3);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -8338,30 +9103,29 @@ const char *borogove_form_title(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1, a2, a3} };
 
-	// queue a callback to execute title() on the main thread and wait until execution completes
+	// queue a callback to execute prepareAttachment__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_form_url(void *a0) {
+size_t borogove_client_get_chats(void *a0, void ***a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::Form((hx::Object *)a0, true))->url());
+		return (borogove::Client((hx::Object *)a0, true))->getChats__fromC(a1);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; void*** a1;} args;
 		HxSemaphore lock;
-		const char * ret;
+		size_t ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::Form((hx::Object *)data->args.a0, true))->url());
+				data->ret = (borogove::Client((hx::Object *)data->args.a0, true))->getChats__fromC(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -8374,30 +9138,29 @@ const char *borogove_form_url(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute url() on the main thread and wait until execution completes
+	// queue a callback to execute getChats__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-size_t borogove_form_items(void *a0, void ***a1) {
+void borogove_client_find_available_chats(void *a0, const char *a1, bool (*a2) (const char*, void**, size_t, void*), void *a3) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::Form((hx::Object *)a0, true))->items__fromC(a1);
+		return (borogove::Client((hx::Object *)a0, true))->findAvailableChats__fromC(a1, cpp::Function<bool(const char*, void**, size_t, void*)>(a2), a3);
 	}
 	struct Data {
-		struct {void * a0; void*** a1;} args;
+		struct {void * a0; const char * a1; bool (* a2) (const char*, void**, size_t, void*); void* a3;} args;
 		HxSemaphore lock;
-		size_t ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::Form((hx::Object *)data->args.a0, true))->items__fromC(data->args.a1);
+				(borogove::Client((hx::Object *)data->args.a0, true))->findAvailableChats__fromC(data->args.a1, cpp::Function<bool(const char*, void**, size_t, void*)>(data->args.a2), data->args.a3);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -8410,30 +9173,29 @@ size_t borogove_form_items(void *a0, void ***a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0, a1, a2, a3} };
 
-	// queue a callback to execute items__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute findAvailableChats__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_form_item_text(void *a0) {
+void *borogove_client_start_chat(void *a0, void *a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::FormItem((hx::Object *)a0, true))->text__fromC());
+		return HaxeCBridge::retainHaxeObject((borogove::Client((hx::Object *)a0, true))->startChat(Dynamic((hx::Object *)a1)));
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; void * a1;} args;
 		HxSemaphore lock;
-		const char * ret;
+		void * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::FormItem((hx::Object *)data->args.a0, true))->text__fromC());
+				data->ret = HaxeCBridge::retainHaxeObject((borogove::Client((hx::Object *)data->args.a0, true))->startChat(Dynamic((hx::Object *)data->args.a1)));
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -8446,21 +9208,21 @@ const char *borogove_form_item_text(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute text__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute startChat() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void *borogove_form_item_field(void *a0) {
+void *borogove_client_get_chat(void *a0, const char *a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeObject((borogove::FormItem((hx::Object *)a0, true))->field__fromC());
+		return HaxeCBridge::retainHaxeObject((borogove::Client((hx::Object *)a0, true))->getChat(a1));
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; const char * a1;} args;
 		HxSemaphore lock;
 		void * ret;
 	};
@@ -8469,7 +9231,7 @@ void *borogove_form_item_field(void *a0) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeObject((borogove::FormItem((hx::Object *)data->args.a0, true))->field__fromC());
+				data->ret = HaxeCBridge::retainHaxeObject((borogove::Client((hx::Object *)data->args.a0, true))->getChat(data->args.a1));
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -8482,30 +9244,29 @@ void *borogove_form_item_field(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute field__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute getChat() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void *borogove_form_item_section(void *a0) {
+void borogove_client_enable_push(void *a0, const char *a1, const char *a2, const unsigned char *a3, size_t a4, const unsigned char *a5, size_t a6, int a7, const unsigned char *a8, size_t a9, const char *const *a10, size_t a11) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeObject((borogove::FormItem((hx::Object *)a0, true))->section__fromC());
+		return (borogove::Client((hx::Object *)a0, true))->enablePush__fromC(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; const char * a1; const char * a2; const unsigned char* a3; size_t a4; const unsigned char* a5; size_t a6; int a7; const unsigned char* a8; size_t a9; const char* const* a10; size_t a11;} args;
 		HxSemaphore lock;
-		void * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeObject((borogove::FormItem((hx::Object *)data->args.a0, true))->section__fromC());
+				(borogove::Client((hx::Object *)data->args.a0, true))->enablePush__fromC(data->args.a1, data->args.a2, data->args.a3, data->args.a4, data->args.a5, data->args.a6, data->args.a7, data->args.a8, data->args.a9, data->args.a10, data->args.a11);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -8518,30 +9279,29 @@ void *borogove_form_item_section(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11} };
 
-	// queue a callback to execute section__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute enablePush__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_form_item_status(void *a0) {
+borogove_event_handler_token borogove_client_add_password_needed_listener(void *a0, void (*a1) (void*, void*), void *a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::FormItem((hx::Object *)a0, true))->status__fromC());
+		return (borogove::Client((hx::Object *)a0, true))->addPasswordNeededListener__fromC(cpp::Function<void(void*, void*)>(a1), a2);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; void (* a1) (void*, void*); void* a2;} args;
 		HxSemaphore lock;
-		const char * ret;
+		borogove_event_handler_token ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::FormItem((hx::Object *)data->args.a0, true))->status__fromC());
+				data->ret = (borogove::Client((hx::Object *)data->args.a0, true))->addPasswordNeededListener__fromC(cpp::Function<void(void*, void*)>(data->args.a1), data->args.a2);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -8554,30 +9314,30 @@ const char *borogove_form_item_status(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1, a2} };
 
-	// queue a callback to execute status__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute addPasswordNeededListener__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-size_t borogove_form_item_table_header(void *a0, void ***a1) {
+borogove_event_handler_token borogove_client_add_status_online_listener(void *a0, void (*a1) (void*), void *a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::FormItem((hx::Object *)a0, true))->tableHeader__fromC(a1);
+		return (borogove::Client((hx::Object *)a0, true))->addStatusOnlineListener__fromC(cpp::Function<void(void*)>(a1), a2);
 	}
 	struct Data {
-		struct {void * a0; void*** a1;} args;
+		struct {void * a0; void (* a1) (void*); void* a2;} args;
 		HxSemaphore lock;
-		size_t ret;
+		borogove_event_handler_token ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::FormItem((hx::Object *)data->args.a0, true))->tableHeader__fromC(data->args.a1);
+				data->ret = (borogove::Client((hx::Object *)data->args.a0, true))->addStatusOnlineListener__fromC(cpp::Function<void(void*)>(data->args.a1), data->args.a2);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -8590,30 +9350,30 @@ size_t borogove_form_item_table_header(void *a0, void ***a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0, a1, a2} };
 
-	// queue a callback to execute tableHeader__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute addStatusOnlineListener__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_form_field_name(void *a0) {
+borogove_event_handler_token borogove_client_add_status_offline_listener(void *a0, void (*a1) (void*), void *a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::FormField((hx::Object *)a0, true))->name__fromC());
+		return (borogove::Client((hx::Object *)a0, true))->addStatusOfflineListener__fromC(cpp::Function<void(void*)>(a1), a2);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; void (* a1) (void*); void* a2;} args;
 		HxSemaphore lock;
-		const char * ret;
+		borogove_event_handler_token ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::FormField((hx::Object *)data->args.a0, true))->name__fromC());
+				data->ret = (borogove::Client((hx::Object *)data->args.a0, true))->addStatusOfflineListener__fromC(cpp::Function<void(void*)>(data->args.a1), data->args.a2);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -8626,30 +9386,30 @@ const char *borogove_form_field_name(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1, a2} };
 
-	// queue a callback to execute name__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute addStatusOfflineListener__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_form_field_label(void *a0) {
+borogove_event_handler_token borogove_client_add_connection_failed_listener(void *a0, void (*a1) (void*), void *a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::FormField((hx::Object *)a0, true))->label__fromC());
+		return (borogove::Client((hx::Object *)a0, true))->addConnectionFailedListener__fromC(cpp::Function<void(void*)>(a1), a2);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; void (* a1) (void*); void* a2;} args;
 		HxSemaphore lock;
-		const char * ret;
+		borogove_event_handler_token ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::FormField((hx::Object *)data->args.a0, true))->label__fromC());
+				data->ret = (borogove::Client((hx::Object *)data->args.a0, true))->addConnectionFailedListener__fromC(cpp::Function<void(void*)>(data->args.a1), data->args.a2);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -8662,30 +9422,30 @@ const char *borogove_form_field_label(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1, a2} };
 
-	// queue a callback to execute label__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute addConnectionFailedListener__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_form_field_desc(void *a0) {
+borogove_event_handler_token borogove_client_add_tls_check_listener(void *a0, bool (*a1) (const char*, const char**, size_t, void*), void *a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::FormField((hx::Object *)a0, true))->desc__fromC());
+		return (borogove::Client((hx::Object *)a0, true))->addTlsCheckListener__fromC(cpp::Function<bool(const char*, const char**, size_t, void*)>(a1), a2);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; bool (* a1) (const char*, const char**, size_t, void*); void* a2;} args;
 		HxSemaphore lock;
-		const char * ret;
+		borogove_event_handler_token ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::FormField((hx::Object *)data->args.a0, true))->desc__fromC());
+				data->ret = (borogove::Client((hx::Object *)data->args.a0, true))->addTlsCheckListener__fromC(cpp::Function<bool(const char*, const char**, size_t, void*)>(data->args.a1), data->args.a2);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -8698,30 +9458,30 @@ const char *borogove_form_field_desc(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1, a2} };
 
-	// queue a callback to execute desc__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute addTlsCheckListener__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-size_t borogove_form_field_value(void *a0, const char ***a1) {
+borogove_event_handler_token borogove_client_add_chat_message_listener(void *a0, void (*a1) (void*, int, void*), void *a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::FormField((hx::Object *)a0, true))->value__fromC(a1);
+		return (borogove::Client((hx::Object *)a0, true))->addChatMessageListener__fromC(cpp::Function<void(void*, int, void*)>(a1), a2);
 	}
 	struct Data {
-		struct {void * a0; const char*** a1;} args;
+		struct {void * a0; void (* a1) (void*, int, void*); void* a2;} args;
 		HxSemaphore lock;
-		size_t ret;
+		borogove_event_handler_token ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::FormField((hx::Object *)data->args.a0, true))->value__fromC(data->args.a1);
+				data->ret = (borogove::Client((hx::Object *)data->args.a0, true))->addChatMessageListener__fromC(cpp::Function<void(void*, int, void*)>(data->args.a1), data->args.a2);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -8734,30 +9494,30 @@ size_t borogove_form_field_value(void *a0, const char ***a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0, a1, a2} };
 
-	// queue a callback to execute value__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute addChatMessageListener__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-bool borogove_form_field_required(void *a0) {
+borogove_event_handler_token borogove_client_add_sync_message_listener(void *a0, void (*a1) (void*, void*), void *a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::FormField((hx::Object *)a0, true))->required__fromC();
+		return (borogove::Client((hx::Object *)a0, true))->addSyncMessageListener__fromC(cpp::Function<void(void*, void*)>(a1), a2);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; void (* a1) (void*, void*); void* a2;} args;
 		HxSemaphore lock;
-		bool ret;
+		borogove_event_handler_token ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::FormField((hx::Object *)data->args.a0, true))->required__fromC();
+				data->ret = (borogove::Client((hx::Object *)data->args.a0, true))->addSyncMessageListener__fromC(cpp::Function<void(void*, void*)>(data->args.a1), data->args.a2);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -8770,30 +9530,30 @@ bool borogove_form_field_required(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1, a2} };
 
-	// queue a callback to execute required__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute addSyncMessageListener__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_form_field_type(void *a0) {
+borogove_event_handler_token borogove_client_add_chats_updated_listener(void *a0, void (*a1) (void**, size_t, void*), void *a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::FormField((hx::Object *)a0, true))->type__fromC());
+		return (borogove::Client((hx::Object *)a0, true))->addChatsUpdatedListener__fromC(cpp::Function<void(void**, size_t, void*)>(a1), a2);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; void (* a1) (void**, size_t, void*); void* a2;} args;
 		HxSemaphore lock;
-		const char * ret;
+		borogove_event_handler_token ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::FormField((hx::Object *)data->args.a0, true))->type__fromC());
+				data->ret = (borogove::Client((hx::Object *)data->args.a0, true))->addChatsUpdatedListener__fromC(cpp::Function<void(void**, size_t, void*)>(data->args.a1), data->args.a2);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -8806,30 +9566,30 @@ const char *borogove_form_field_type(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1, a2} };
 
-	// queue a callback to execute type__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute addChatsUpdatedListener__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_form_field_datatype(void *a0) {
+borogove_event_handler_token borogove_client_add_call_ring_listener(void *a0, void (*a1) (void*, void*), void *a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::FormField((hx::Object *)a0, true))->datatype__fromC());
+		return (borogove::Client((hx::Object *)a0, true))->addCallRingListener__fromC(cpp::Function<void(void*, void*)>(a1), a2);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; void (* a1) (void*, void*); void* a2;} args;
 		HxSemaphore lock;
-		const char * ret;
+		borogove_event_handler_token ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::FormField((hx::Object *)data->args.a0, true))->datatype__fromC());
+				data->ret = (borogove::Client((hx::Object *)data->args.a0, true))->addCallRingListener__fromC(cpp::Function<void(void*, void*)>(data->args.a1), data->args.a2);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -8842,30 +9602,30 @@ const char *borogove_form_field_datatype(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1, a2} };
 
-	// queue a callback to execute datatype__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute addCallRingListener__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-size_t borogove_form_field_options(void *a0, void ***a1) {
+borogove_event_handler_token borogove_client_add_call_retract_listener(void *a0, void (*a1) (const char*, const char*, void*), void *a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::FormField((hx::Object *)a0, true))->options__fromC(a1);
+		return (borogove::Client((hx::Object *)a0, true))->addCallRetractListener__fromC(cpp::Function<void(const char*, const char*, void*)>(a1), a2);
 	}
 	struct Data {
-		struct {void * a0; void*** a1;} args;
+		struct {void * a0; void (* a1) (const char*, const char*, void*); void* a2;} args;
 		HxSemaphore lock;
-		size_t ret;
+		borogove_event_handler_token ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::FormField((hx::Object *)data->args.a0, true))->options__fromC(data->args.a1);
+				data->ret = (borogove::Client((hx::Object *)data->args.a0, true))->addCallRetractListener__fromC(cpp::Function<void(const char*, const char*, void*)>(data->args.a1), data->args.a2);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -8878,30 +9638,30 @@ size_t borogove_form_field_options(void *a0, void ***a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0, a1, a2} };
 
-	// queue a callback to execute options__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute addCallRetractListener__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-bool borogove_form_field_open(void *a0) {
+borogove_event_handler_token borogove_client_add_call_ringing_listener(void *a0, void (*a1) (void*, void*), void *a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::FormField((hx::Object *)a0, true))->open__fromC();
+		return (borogove::Client((hx::Object *)a0, true))->addCallRingingListener__fromC(cpp::Function<void(void*, void*)>(a1), a2);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; void (* a1) (void*, void*); void* a2;} args;
 		HxSemaphore lock;
-		bool ret;
+		borogove_event_handler_token ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::FormField((hx::Object *)data->args.a0, true))->open__fromC();
+				data->ret = (borogove::Client((hx::Object *)data->args.a0, true))->addCallRingingListener__fromC(cpp::Function<void(void*, void*)>(data->args.a1), data->args.a2);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -8914,30 +9674,30 @@ bool borogove_form_field_open(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1, a2} };
 
-	// queue a callback to execute open__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute addCallRingingListener__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_form_field_range_min(void *a0) {
+borogove_event_handler_token borogove_client_add_call_update_status_listener(void *a0, void (*a1) (void*, void*), void *a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::FormField((hx::Object *)a0, true))->rangeMin__fromC());
+		return (borogove::Client((hx::Object *)a0, true))->addCallUpdateStatusListener__fromC(cpp::Function<void(void*, void*)>(a1), a2);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; void (* a1) (void*, void*); void* a2;} args;
 		HxSemaphore lock;
-		const char * ret;
+		borogove_event_handler_token ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::FormField((hx::Object *)data->args.a0, true))->rangeMin__fromC());
+				data->ret = (borogove::Client((hx::Object *)data->args.a0, true))->addCallUpdateStatusListener__fromC(cpp::Function<void(void*, void*)>(data->args.a1), data->args.a2);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -8950,30 +9710,30 @@ const char *borogove_form_field_range_min(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1, a2} };
 
-	// queue a callback to execute rangeMin__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute addCallUpdateStatusListener__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_form_field_range_max(void *a0) {
+borogove_event_handler_token borogove_client_add_call_media_listener(void *a0, void (*a1) (void*, bool, bool, void*), void *a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::FormField((hx::Object *)a0, true))->rangeMax__fromC());
+		return (borogove::Client((hx::Object *)a0, true))->addCallMediaListener__fromC(cpp::Function<void(void*, bool, bool, void*)>(a1), a2);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; void (* a1) (void*, bool, bool, void*); void* a2;} args;
 		HxSemaphore lock;
-		const char * ret;
+		borogove_event_handler_token ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::FormField((hx::Object *)data->args.a0, true))->rangeMax__fromC());
+				data->ret = (borogove::Client((hx::Object *)data->args.a0, true))->addCallMediaListener__fromC(cpp::Function<void(void*, bool, bool, void*)>(data->args.a1), data->args.a2);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -8986,30 +9746,30 @@ const char *borogove_form_field_range_max(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1, a2} };
 
-	// queue a callback to execute rangeMax__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute addCallMediaListener__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_form_field_regex(void *a0) {
+borogove_event_handler_token borogove_client_add_call_track_listener(void *a0, void (*a1) (void*, void*, void**, size_t, void*), void *a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::FormField((hx::Object *)a0, true))->regex__fromC());
+		return (borogove::Client((hx::Object *)a0, true))->addCallTrackListener__fromC(cpp::Function<void(void*, void*, void**, size_t, void*)>(a1), a2);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; void (* a1) (void*, void*, void**, size_t, void*); void* a2;} args;
 		HxSemaphore lock;
-		const char * ret;
+		borogove_event_handler_token ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::FormField((hx::Object *)data->args.a0, true))->regex__fromC());
+				data->ret = (borogove::Client((hx::Object *)data->args.a0, true))->addCallTrackListener__fromC(cpp::Function<void(void*, void*, void**, size_t, void*)>(data->args.a1), data->args.a2);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -9022,30 +9782,29 @@ const char *borogove_form_field_regex(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1, a2} };
 
-	// queue a callback to execute regex__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute addCallTrackListener__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_available_chat_chat_id(void *a0) {
+void borogove_client_set_in_foreground(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::AvailableChat((hx::Object *)a0, true))->chatId__fromC());
+		return (borogove::Client((hx::Object *)a0, true))->setInForeground();
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::AvailableChat((hx::Object *)data->args.a0, true))->chatId__fromC());
+				(borogove::Client((hx::Object *)data->args.a0, true))->setInForeground();
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -9060,28 +9819,26 @@ const char *borogove_available_chat_chat_id(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute chatId__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute setInForeground() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_available_chat_display_name(void *a0) {
+void borogove_client_set_not_in_foreground(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::AvailableChat((hx::Object *)a0, true))->displayName__fromC());
+		return (borogove::Client((hx::Object *)a0, true))->setNotInForeground();
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::AvailableChat((hx::Object *)data->args.a0, true))->displayName__fromC());
+				(borogove::Client((hx::Object *)data->args.a0, true))->setNotInForeground();
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -9096,16 +9853,15 @@ const char *borogove_available_chat_display_name(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute displayName__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute setNotInForeground() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_available_chat_note(void *a0) {
+const char *borogove_available_chat_chat_id(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::AvailableChat((hx::Object *)a0, true))->note__fromC());
+		return HaxeCBridge::retainHaxeString((borogove::AvailableChat((hx::Object *)a0, true))->chatId__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
@@ -9117,7 +9873,7 @@ const char *borogove_available_chat_note(void *a0) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::AvailableChat((hx::Object *)data->args.a0, true))->note__fromC());
+				data->ret = HaxeCBridge::retainHaxeString((borogove::AvailableChat((hx::Object *)data->args.a0, true))->chatId__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -9132,28 +9888,28 @@ const char *borogove_available_chat_note(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute note__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute chatId__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-bool borogove_available_chat_is_channel(void *a0) {
+const char *borogove_available_chat_display_name(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::AvailableChat((hx::Object *)a0, true))->isChannel();
+		return HaxeCBridge::retainHaxeString((borogove::AvailableChat((hx::Object *)a0, true))->displayName__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		bool ret;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::AvailableChat((hx::Object *)data->args.a0, true))->isChannel();
+				data->ret = HaxeCBridge::retainHaxeString((borogove::AvailableChat((hx::Object *)data->args.a0, true))->displayName__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -9168,16 +9924,16 @@ bool borogove_available_chat_is_channel(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute isChannel() on the main thread and wait until execution completes
+	// queue a callback to execute displayName__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_calls_initiated_session_sid(void *a0) {
+const char *borogove_available_chat_note(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::calls::InitiatedSession((hx::Object *)a0, true))->sid__fromC());
+		return HaxeCBridge::retainHaxeString((borogove::AvailableChat((hx::Object *)a0, true))->note__fromC());
 	}
 	struct Data {
 		struct {void * a0;} args;
@@ -9189,7 +9945,7 @@ const char *borogove_calls_initiated_session_sid(void *a0) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::calls::InitiatedSession((hx::Object *)data->args.a0, true))->sid__fromC());
+				data->ret = HaxeCBridge::retainHaxeString((borogove::AvailableChat((hx::Object *)data->args.a0, true))->note__fromC());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -9204,28 +9960,28 @@ const char *borogove_calls_initiated_session_sid(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute sid__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute note__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-const char *borogove_calls_initiated_session_chat_id(void *a0) {
+bool borogove_available_chat_is_channel(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeString((borogove::calls::InitiatedSession((hx::Object *)a0, true))->chatId__fromC());
+		return (borogove::AvailableChat((hx::Object *)a0, true))->isChannel();
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		const char * ret;
+		bool ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeString((borogove::calls::InitiatedSession((hx::Object *)data->args.a0, true))->chatId__fromC());
+				data->ret = (borogove::AvailableChat((hx::Object *)data->args.a0, true))->isChannel();
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -9240,27 +9996,28 @@ const char *borogove_calls_initiated_session_chat_id(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute chatId__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute isChannel() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_calls_initiated_session_accept(void *a0) {
+void *borogove_calls_media_stream_new() {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::calls::InitiatedSession((hx::Object *)a0, true))->accept();
+		return HaxeCBridge::retainHaxeObject(borogove::calls::MediaStream_obj::__new());
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {} args;
 		HxSemaphore lock;
+		void * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::calls::InitiatedSession((hx::Object *)data->args.a0, true))->accept();
+				data->ret = HaxeCBridge::retainHaxeObject(borogove::calls::MediaStream_obj::__new());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -9273,28 +10030,30 @@ void borogove_calls_initiated_session_accept(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {} };
 
-	// queue a callback to execute accept() on the main thread and wait until execution completes
+	// queue a callback to execute new() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_calls_initiated_session_hangup(void *a0) {
+void *borogove_calls_media_stream_make_audio() {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::calls::InitiatedSession((hx::Object *)a0, true))->hangup();
+		return HaxeCBridge::retainHaxeObject(borogove::calls::MediaStream_obj::makeAudio());
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {} args;
 		HxSemaphore lock;
+		void * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::calls::InitiatedSession((hx::Object *)data->args.a0, true))->hangup();
+				data->ret = HaxeCBridge::retainHaxeObject(borogove::calls::MediaStream_obj::makeAudio());
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -9307,20 +10066,21 @@ void borogove_calls_initiated_session_hangup(void *a0) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {} };
 
-	// queue a callback to execute hangup() on the main thread and wait until execution completes
+	// queue a callback to execute makeAudio() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_calls_initiated_session_add_media(void *a0, void *const *a1, size_t a2) {
+void borogove_calls_media_stream_add_track(void *a0, void *a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::calls::InitiatedSession((hx::Object *)a0, true))->addMedia__fromC(a1, a2);
+		return (borogove::calls::MediaStream((hx::Object *)a0, true))->addTrack(Dynamic((hx::Object *)a1));
 	}
 	struct Data {
-		struct {void * a0; void* const* a1; size_t a2;} args;
+		struct {void * a0; void * a1;} args;
 		HxSemaphore lock;
 	};
 	struct Callback {
@@ -9328,7 +10088,7 @@ void borogove_calls_initiated_session_add_media(void *a0, void *const *a1, size_
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::calls::InitiatedSession((hx::Object *)data->args.a0, true))->addMedia__fromC(data->args.a1, data->args.a2);
+				(borogove::calls::MediaStream((hx::Object *)data->args.a0, true))->addTrack(Dynamic((hx::Object *)data->args.a1));
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -9341,29 +10101,29 @@ void borogove_calls_initiated_session_add_media(void *a0, void *const *a1, size_
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute addMedia__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute addTrack() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 }
 
 HAXE_C_BRIDGE_LINKAGE
-enum borogove_calls_call_status borogove_calls_initiated_session_call_status(void *a0) {
+size_t borogove_calls_media_stream_get_tracks(void *a0, void ***a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return static_cast<enum borogove_calls_call_status>((borogove::calls::InitiatedSession((hx::Object *)a0, true))->callStatus());
+		return (borogove::calls::MediaStream((hx::Object *)a0, true))->getTracks__fromC(a1);
 	}
 	struct Data {
-		struct {void * a0;} args;
+		struct {void * a0; void*** a1;} args;
 		HxSemaphore lock;
-		enum borogove_calls_call_status ret;
+		size_t ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = static_cast<enum borogove_calls_call_status>((borogove::calls::InitiatedSession((hx::Object *)data->args.a0, true))->callStatus());
+				data->ret = (borogove::calls::MediaStream((hx::Object *)data->args.a0, true))->getTracks__fromC(data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -9376,30 +10136,30 @@ enum borogove_calls_call_status borogove_calls_initiated_session_call_status(voi
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0} };
+	Data data = { {a0, a1} };
 
-	// queue a callback to execute callStatus() on the main thread and wait until execution completes
+	// queue a callback to execute getTracks__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-size_t borogove_calls_initiated_session_audio_tracks(void *a0, void ***a1) {
+const char *borogove_calls_session_sid(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::calls::InitiatedSession((hx::Object *)a0, true))->audioTracks__fromC(a1);
+		return HaxeCBridge::retainHaxeString(borogove::calls::Session__Companion_obj::sid__fromC(Dynamic((hx::Object *)a0)));
 	}
 	struct Data {
-		struct {void * a0; void*** a1;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
-		size_t ret;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::calls::InitiatedSession((hx::Object *)data->args.a0, true))->audioTracks__fromC(data->args.a1);
+				data->ret = HaxeCBridge::retainHaxeString(borogove::calls::Session__Companion_obj::sid__fromC(Dynamic((hx::Object *)data->args.a0)));
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -9412,30 +10172,30 @@ size_t borogove_calls_initiated_session_audio_tracks(void *a0, void ***a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0} };
 
-	// queue a callback to execute audioTracks__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute sid__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-size_t borogove_calls_initiated_session_video_tracks(void *a0, void ***a1) {
+const char *borogove_calls_session_chat_id(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::calls::InitiatedSession((hx::Object *)a0, true))->videoTracks__fromC(a1);
+		return HaxeCBridge::retainHaxeString(borogove::calls::Session__Companion_obj::chatId__fromC(Dynamic((hx::Object *)a0)));
 	}
 	struct Data {
-		struct {void * a0; void*** a1;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
-		size_t ret;
+		const char * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::calls::InitiatedSession((hx::Object *)data->args.a0, true))->videoTracks__fromC(data->args.a1);
+				data->ret = HaxeCBridge::retainHaxeString(borogove::calls::Session__Companion_obj::chatId__fromC(Dynamic((hx::Object *)data->args.a0)));
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -9448,30 +10208,29 @@ size_t borogove_calls_initiated_session_video_tracks(void *a0, void ***a1) {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1} };
+	Data data = { {a0} };
 
-	// queue a callback to execute videoTracks__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute chatId__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void *borogove_calls_initiated_session_dtmf(void *a0) {
+void borogove_calls_session_accept(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeObject((borogove::calls::InitiatedSession((hx::Object *)a0, true))->dtmf());
+		return borogove::calls::Session__Companion_obj::accept__fromC(Dynamic((hx::Object *)a0));
 	}
 	struct Data {
 		struct {void * a0;} args;
 		HxSemaphore lock;
-		void * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeObject((borogove::calls::InitiatedSession((hx::Object *)data->args.a0, true))->dtmf());
+				borogove::calls::Session__Companion_obj::accept__fromC(Dynamic((hx::Object *)data->args.a0));
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -9486,19 +10245,18 @@ void *borogove_calls_initiated_session_dtmf(void *a0) {
 
 	Data data = { {a0} };
 
-	// queue a callback to execute dtmf() on the main thread and wait until execution completes
+	// queue a callback to execute accept__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_calls_initiated_session_supply_media(void *a0, void *const *a1, size_t a2) {
+void borogove_calls_session_hangup(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::calls::InitiatedSession((hx::Object *)a0, true))->supplyMedia__fromC(a1, a2);
+		return borogove::calls::Session__Companion_obj::hangup__fromC(Dynamic((hx::Object *)a0));
 	}
 	struct Data {
-		struct {void * a0; void* const* a1; size_t a2;} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
 	};
 	struct Callback {
@@ -9506,7 +10264,7 @@ void borogove_calls_initiated_session_supply_media(void *a0, void *const *a1, si
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::calls::InitiatedSession((hx::Object *)data->args.a0, true))->supplyMedia__fromC(data->args.a1, data->args.a2);
+				borogove::calls::Session__Companion_obj::hangup__fromC(Dynamic((hx::Object *)data->args.a0));
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -9519,29 +10277,28 @@ void borogove_calls_initiated_session_supply_media(void *a0, void *const *a1, si
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {a0, a1, a2} };
+	Data data = { {a0} };
 
-	// queue a callback to execute supplyMedia__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute hangup__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void *borogove_calls_media_stream_new() {
+void borogove_calls_session_add_media(void *a0, void *const *a1, size_t a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeObject(borogove::calls::MediaStream_obj::__new());
+		return borogove::calls::Session__Companion_obj::addMedia__fromC(Dynamic((hx::Object *)a0), a1, a2);
 	}
 	struct Data {
-		struct {} args;
+		struct {void * a0; void* const* a1; size_t a2;} args;
 		HxSemaphore lock;
-		void * ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeObject(borogove::calls::MediaStream_obj::__new());
+				borogove::calls::Session__Companion_obj::addMedia__fromC(Dynamic((hx::Object *)data->args.a0), data->args.a1, data->args.a2);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -9554,30 +10311,29 @@ void *borogove_calls_media_stream_new() {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {} };
+	Data data = { {a0, a1, a2} };
 
-	// queue a callback to execute new() on the main thread and wait until execution completes
+	// queue a callback to execute addMedia__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
-	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void *borogove_calls_media_stream_make_audio() {
+enum borogove_calls_call_status borogove_calls_session_call_status(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeObject(borogove::calls::MediaStream_obj::makeAudio());
+		return static_cast<enum borogove_calls_call_status>(borogove::calls::Session__Companion_obj::callStatus__fromC(Dynamic((hx::Object *)a0)));
 	}
 	struct Data {
-		struct {} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
-		void * ret;
+		enum borogove_calls_call_status ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeObject(borogove::calls::MediaStream_obj::makeAudio());
+				data->ret = static_cast<enum borogove_calls_call_status>(borogove::calls::Session__Companion_obj::callStatus__fromC(Dynamic((hx::Object *)data->args.a0)));
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -9590,29 +10346,30 @@ void *borogove_calls_media_stream_make_audio() {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {} };
+	Data data = { {a0} };
 
-	// queue a callback to execute makeAudio() on the main thread and wait until execution completes
+	// queue a callback to execute callStatus__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_calls_media_stream_add_track(void *a0, void *a1) {
+size_t borogove_calls_session_audio_tracks(void *a0, void ***a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::calls::MediaStream((hx::Object *)a0, true))->addTrack(Dynamic((hx::Object *)a1));
+		return borogove::calls::Session__Companion_obj::audioTracks__fromC(Dynamic((hx::Object *)a0), a1);
 	}
 	struct Data {
-		struct {void * a0; void * a1;} args;
+		struct {void * a0; void*** a1;} args;
 		HxSemaphore lock;
+		size_t ret;
 	};
 	struct Callback {
 		static void run(void* p) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::calls::MediaStream((hx::Object *)data->args.a0, true))->addTrack(Dynamic((hx::Object *)data->args.a1));
+				data->ret = borogove::calls::Session__Companion_obj::audioTracks__fromC(Dynamic((hx::Object *)data->args.a0), data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -9627,15 +10384,16 @@ void borogove_calls_media_stream_add_track(void *a0, void *a1) {
 
 	Data data = { {a0, a1} };
 
-	// queue a callback to execute addTrack() on the main thread and wait until execution completes
+	// queue a callback to execute audioTracks__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
+	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-size_t borogove_calls_media_stream_get_tracks(void *a0, void ***a1) {
+size_t borogove_calls_session_video_tracks(void *a0, void ***a1) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::calls::MediaStream((hx::Object *)a0, true))->getTracks__fromC(a1);
+		return borogove::calls::Session__Companion_obj::videoTracks__fromC(Dynamic((hx::Object *)a0), a1);
 	}
 	struct Data {
 		struct {void * a0; void*** a1;} args;
@@ -9647,7 +10405,7 @@ size_t borogove_calls_media_stream_get_tracks(void *a0, void ***a1) {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = (borogove::calls::MediaStream((hx::Object *)data->args.a0, true))->getTracks__fromC(data->args.a1);
+				data->ret = borogove::calls::Session__Companion_obj::videoTracks__fromC(Dynamic((hx::Object *)data->args.a0), data->args.a1);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -9662,19 +10420,19 @@ size_t borogove_calls_media_stream_get_tracks(void *a0, void ***a1) {
 
 	Data data = { {a0, a1} };
 
-	// queue a callback to execute getTracks__fromC() on the main thread and wait until execution completes
+	// queue a callback to execute videoTracks__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void *borogove_form_submit_builder_new() {
+void *borogove_calls_session_dtmf(void *a0) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return HaxeCBridge::retainHaxeObject(borogove::FormSubmitBuilder_obj::__new());
+		return HaxeCBridge::retainHaxeObject(borogove::calls::Session__Companion_obj::dtmf__fromC(Dynamic((hx::Object *)a0)));
 	}
 	struct Data {
-		struct {} args;
+		struct {void * a0;} args;
 		HxSemaphore lock;
 		void * ret;
 	};
@@ -9683,7 +10441,7 @@ void *borogove_form_submit_builder_new() {
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				data->ret = HaxeCBridge::retainHaxeObject(borogove::FormSubmitBuilder_obj::__new());
+				data->ret = HaxeCBridge::retainHaxeObject(borogove::calls::Session__Companion_obj::dtmf__fromC(Dynamic((hx::Object *)data->args.a0)));
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -9696,21 +10454,21 @@ void *borogove_form_submit_builder_new() {
 	assert(HaxeCBridgeInternal::threadRunning && "haxe thread not running, use borogove_initializeHaxeThread() to activate the haxe thread");
 	#endif
 
-	Data data = { {} };
+	Data data = { {a0} };
 
-	// queue a callback to execute new() on the main thread and wait until execution completes
+	// queue a callback to execute dtmf__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 	return data.ret;
 }
 
 HAXE_C_BRIDGE_LINKAGE
-void borogove_form_submit_builder_add(void *a0, const char *a1, const char *a2) {
+void borogove_calls_initiated_session_supply_media(void *a0, void *const *a1, size_t a2) {
 	if (HaxeCBridgeInternal::isHaxeMainThread()) {
-		return (borogove::FormSubmitBuilder((hx::Object *)a0, true))->add(a1, a2);
+		return (borogove::calls::InitiatedSession((hx::Object *)a0, true))->supplyMedia__fromC(a1, a2);
 	}
 	struct Data {
-		struct {void * a0; const char * a1; const char * a2;} args;
+		struct {void * a0; void* const* a1; size_t a2;} args;
 		HxSemaphore lock;
 	};
 	struct Callback {
@@ -9718,7 +10476,7 @@ void borogove_form_submit_builder_add(void *a0, const char *a1, const char *a2)
 			// executed within the haxe main thread
 			Data* data = (Data*) p;
 			try {
-				(borogove::FormSubmitBuilder((hx::Object *)data->args.a0, true))->add(data->args.a1, data->args.a2);
+				(borogove::calls::InitiatedSession((hx::Object *)data->args.a0, true))->supplyMedia__fromC(data->args.a1, data->args.a2);
 				data->lock.Set();
 			} catch(Dynamic runtimeException) {
 				data->lock.Set();
@@ -9733,7 +10491,7 @@ void borogove_form_submit_builder_add(void *a0, const char *a1, const char *a2)
 
 	Data data = { {a0, a1, a2} };
 
-	// queue a callback to execute add() on the main thread and wait until execution completes
+	// queue a callback to execute supplyMedia__fromC() on the main thread and wait until execution completes
 	HaxeCBridgeInternal::runInMainThread(Callback::run, &data);
 	data.lock.Wait();
 }
diff --git a/Sources/c_borogove/src/__boot__.cpp b/Sources/c_borogove/src/__boot__.cpp
index 910f3d8..18ccf0d 100644
--- a/Sources/c_borogove/src/__boot__.cpp
+++ b/Sources/c_borogove/src/__boot__.cpp
@@ -154,12 +154,27 @@
 #ifndef INCLUDED_borogove_persistence_Sqlite
 #include <borogove/persistence/Sqlite.h>
 #endif
+#ifndef INCLUDED_borogove_persistence_MediaStore__Companion
+#include <borogove/persistence/MediaStore__Companion.h>
+#endif
 #ifndef INCLUDED_borogove_persistence_MediaStoreFS
 #include <borogove/persistence/MediaStoreFS.h>
 #endif
+#ifndef INCLUDED_borogove_persistence_MediaStore
+#include <borogove/persistence/MediaStore.h>
+#endif
+#ifndef INCLUDED_borogove_persistence_KeyValueStore__Companion
+#include <borogove/persistence/KeyValueStore__Companion.h>
+#endif
+#ifndef INCLUDED_borogove_persistence_KeyValueStore
+#include <borogove/persistence/KeyValueStore.h>
+#endif
 #ifndef INCLUDED_borogove_persistence_Dummy
 #include <borogove/persistence/Dummy.h>
 #endif
+#ifndef INCLUDED_borogove_calls_Session__Companion
+#include <borogove/calls/Session__Companion.h>
+#endif
 #ifndef INCLUDED_borogove_calls_InitiatedSession
 #include <borogove/calls/InitiatedSession.h>
 #endif
@@ -169,6 +184,9 @@
 #ifndef INCLUDED_borogove_calls_IncomingProposedSession
 #include <borogove/calls/IncomingProposedSession.h>
 #endif
+#ifndef INCLUDED_borogove_calls_Session
+#include <borogove/calls/Session.h>
+#endif
 #ifndef INCLUDED_borogove_calls_MediaStream
 #include <borogove/calls/MediaStream.h>
 #endif
@@ -196,6 +214,9 @@
 #ifndef INCLUDED_borogove_Profile
 #include <borogove/Profile.h>
 #endif
+#ifndef INCLUDED_borogove_Persistence__Companion
+#include <borogove/Persistence__Companion.h>
+#endif
 #ifndef INCLUDED_borogove_Persistence
 #include <borogove/Persistence.h>
 #endif
@@ -211,12 +232,18 @@
 #ifndef INCLUDED_borogove_Hash
 #include <borogove/Hash.h>
 #endif
+#ifndef INCLUDED_borogove_FormSection__Companion
+#include <borogove/FormSection__Companion.h>
+#endif
 #ifndef INCLUDED_borogove_Form
 #include <borogove/Form.h>
 #endif
 #ifndef INCLUDED_borogove_FormItem
 #include <borogove/FormItem.h>
 #endif
+#ifndef INCLUDED_borogove_FormSection
+#include <borogove/FormSection.h>
+#endif
 #ifndef INCLUDED_borogove_EncryptionInfo
 #include <borogove/EncryptionInfo.h>
 #endif
@@ -679,6 +706,9 @@
 #ifndef INCLUDED_haxe_http_HttpBase
 #include <haxe/http/HttpBase.h>
 #endif
+#ifndef INCLUDED_haxe_format_JsonPrinter
+#include <haxe/format/JsonPrinter.h>
+#endif
 #ifndef INCLUDED_haxe_format_JsonParser
 #include <haxe/format/JsonParser.h>
 #endif
@@ -835,12 +865,6 @@
 #ifndef INCLUDED_borogove_persistence_SqliteDriver
 #include <borogove/persistence/SqliteDriver.h>
 #endif
-#ifndef INCLUDED_borogove_persistence_MediaStore
-#include <borogove/persistence/MediaStore.h>
-#endif
-#ifndef INCLUDED_borogove_persistence_KeyValueStore
-#include <borogove/persistence/KeyValueStore.h>
-#endif
 #ifndef INCLUDED_borogove_calls_Attribute
 #include <borogove/calls/Attribute.h>
 #endif
@@ -862,9 +886,6 @@
 #ifndef INCLUDED_borogove_calls_OutgoingSession
 #include <borogove/calls/OutgoingSession.h>
 #endif
-#ifndef INCLUDED_borogove_calls_Session
-#include <borogove/calls/Session.h>
-#endif
 #ifndef INCLUDED_borogove_calls_PeerConnection
 #include <borogove/calls/PeerConnection.h>
 #endif
@@ -940,9 +961,6 @@
 #ifndef INCLUDED_borogove_FormSubmitBuilder
 #include <borogove/FormSubmitBuilder.h>
 #endif
-#ifndef INCLUDED_borogove_FormSection
-#include <borogove/FormSection.h>
-#endif
 #ifndef INCLUDED_borogove_EncryptionPolicy
 #include <borogove/EncryptionPolicy.h>
 #endif
@@ -1079,11 +1097,17 @@ __files__boot();
 ::haxe::Log_obj::__register();
 ::sys::thread::_Thread::HaxeThread_obj::__register();
 ::borogove::persistence::Sqlite_obj::__register();
+::borogove::persistence::MediaStore__Companion_obj::__register();
 ::borogove::persistence::MediaStoreFS_obj::__register();
+::borogove::persistence::MediaStore_obj::__register();
+::borogove::persistence::KeyValueStore__Companion_obj::__register();
+::borogove::persistence::KeyValueStore_obj::__register();
 ::borogove::persistence::Dummy_obj::__register();
+::borogove::calls::Session__Companion_obj::__register();
 ::borogove::calls::InitiatedSession_obj::__register();
 ::borogove::calls::OutgoingProposedSession_obj::__register();
 ::borogove::calls::IncomingProposedSession_obj::__register();
+::borogove::calls::Session_obj::__register();
 ::borogove::calls::MediaStream_obj::__register();
 ::borogove::calls::MediaStreamTrack_obj::__register();
 ::borogove::calls::AudioFormat_obj::__register();
@@ -1093,13 +1117,16 @@ __files__boot();
 ::borogove::_Profile::Profile_Fields__obj::__register();
 ::borogove::ProfileItem_obj::__register();
 ::borogove::Profile_obj::__register();
+::borogove::Persistence__Companion_obj::__register();
 ::borogove::Persistence_obj::__register();
 ::borogove::Participant_obj::__register();
 ::borogove::Notification_obj::__register();
 ::borogove::NS_obj::__register();
 ::borogove::Hash_obj::__register();
+::borogove::FormSection__Companion_obj::__register();
 ::borogove::Form_obj::__register();
 ::borogove::FormItem_obj::__register();
+::borogove::FormSection_obj::__register();
 ::borogove::EncryptionInfo_obj::__register();
 ::borogove::EmojiUtil_obj::__register();
 ::borogove::FormOption_obj::__register();
@@ -1254,6 +1281,7 @@ __files__boot();
 ::haxe::io::Input_obj::__register();
 ::haxe::io::BytesBuffer_obj::__register();
 ::haxe::http::HttpBase_obj::__register();
+::haxe::format::JsonPrinter_obj::__register();
 ::haxe::format::JsonParser_obj::__register();
 ::haxe::exceptions::NotImplementedException_obj::__register();
 ::haxe::exceptions::PosException_obj::__register();
@@ -1306,8 +1334,6 @@ __files__boot();
 ::borogove::queries::BlocklistGet_obj::__register();
 ::borogove::queries::GenericQuery_obj::__register();
 ::borogove::persistence::SqliteDriver_obj::__register();
-::borogove::persistence::MediaStore_obj::__register();
-::borogove::persistence::KeyValueStore_obj::__register();
 ::borogove::calls::Attribute_obj::__register();
 ::borogove::calls::IceCandidate_obj::__register();
 ::borogove::calls::Media_obj::__register();
@@ -1315,7 +1341,6 @@ __files__boot();
 ::borogove::calls::SessionDescription_obj::__register();
 ::borogove::calls::_Session::Session_Fields__obj::__register();
 ::borogove::calls::OutgoingSession_obj::__register();
-::borogove::calls::Session_obj::__register();
 ::borogove::calls::PeerConnection_obj::__register();
 ::borogove::calls::Group_obj::__register();
 ::borogove::XEP0393_obj::__register();
@@ -1341,7 +1366,6 @@ __files__boot();
 ::borogove::GenericStream_obj::__register();
 ::borogove::FormLayoutSection_obj::__register();
 ::borogove::FormSubmitBuilder_obj::__register();
-::borogove::FormSection_obj::__register();
 ::borogove::EncryptionPolicy_obj::__register();
 ::borogove::Builder_obj::__register();
 ::borogove::Other_obj::__register();
@@ -1421,13 +1445,16 @@ __files__boot();
 ::borogove::FormOption_obj::__boot();
 ::borogove::EmojiUtil_obj::__boot();
 ::borogove::EncryptionInfo_obj::__boot();
+::borogove::FormSection_obj::__boot();
 ::borogove::FormItem_obj::__boot();
 ::borogove::Form_obj::__boot();
+::borogove::FormSection__Companion_obj::__boot();
 ::borogove::Hash_obj::__boot();
 ::borogove::NS_obj::__boot();
 ::borogove::Notification_obj::__boot();
 ::borogove::Participant_obj::__boot();
 ::borogove::Persistence_obj::__boot();
+::borogove::Persistence__Companion_obj::__boot();
 ::borogove::Profile_obj::__boot();
 ::borogove::ProfileItem_obj::__boot();
 ::borogove::_Profile::Profile_Fields__obj::__boot();
@@ -1437,11 +1464,17 @@ __files__boot();
 ::borogove::calls::AudioFormat_obj::__boot();
 ::borogove::calls::MediaStreamTrack_obj::__boot();
 ::borogove::calls::MediaStream_obj::__boot();
+::borogove::calls::Session_obj::__boot();
 ::borogove::calls::IncomingProposedSession_obj::__boot();
 ::borogove::calls::OutgoingProposedSession_obj::__boot();
 ::borogove::calls::InitiatedSession_obj::__boot();
+::borogove::calls::Session__Companion_obj::__boot();
 ::borogove::persistence::Dummy_obj::__boot();
+::borogove::persistence::KeyValueStore_obj::__boot();
+::borogove::persistence::KeyValueStore__Companion_obj::__boot();
+::borogove::persistence::MediaStore_obj::__boot();
 ::borogove::persistence::MediaStoreFS_obj::__boot();
+::borogove::persistence::MediaStore__Companion_obj::__boot();
 ::borogove::persistence::Sqlite_obj::__boot();
 ::sys::thread::_Thread::HaxeThread_obj::__boot();
 ::haxe::crypto::Base64_obj::__boot();
diff --git a/Sources/c_borogove/src/__files__.cpp b/Sources/c_borogove/src/__files__.cpp
index a2d35db..f4821fc 100644
--- a/Sources/c_borogove/src/__files__.cpp
+++ b/Sources/c_borogove/src/__files__.cpp
@@ -52,6 +52,7 @@ const char *__hxcpp_all_files[] = {
 "/usr/local/lib/haxe/std/haxe/exceptions/NotImplementedException.hx",
 "/usr/local/lib/haxe/std/haxe/exceptions/PosException.hx",
 "/usr/local/lib/haxe/std/haxe/format/JsonParser.hx",
+"/usr/local/lib/haxe/std/haxe/format/JsonPrinter.hx",
 "/usr/local/lib/haxe/std/haxe/http/HttpBase.hx",
 "/usr/local/lib/haxe/std/haxe/io/Bytes.hx",
 "/usr/local/lib/haxe/std/haxe/io/BytesBuffer.hx",
@@ -116,6 +117,8 @@ const char *__hxcpp_all_files[] = {
 "borogove/calls/Session.hx",
 "borogove/calls/SessionDescription.hx",
 "borogove/persistence/Dummy.hx",
+"borogove/persistence/KeyValueStore.hx",
+"borogove/persistence/MediaStore.hx",
 "borogove/persistence/MediaStoreFS.hx",
 "borogove/persistence/Sqlite.hx",
 "borogove/persistence/SqliteDriver.hx",
@@ -250,6 +253,7 @@ const char *__hxcpp_all_files_fullpath[] = {
 "/usr/local/lib/haxe/std/haxe/exceptions/NotImplementedException.hx",
 "/usr/local/lib/haxe/std/haxe/exceptions/PosException.hx",
 "/usr/local/lib/haxe/std/haxe/format/JsonParser.hx",
+"/usr/local/lib/haxe/std/haxe/format/JsonPrinter.hx",
 "/usr/local/lib/haxe/std/haxe/http/HttpBase.hx",
 "/usr/local/lib/haxe/std/haxe/io/Bytes.hx",
 "/usr/local/lib/haxe/std/haxe/io/BytesBuffer.hx",
@@ -314,6 +318,8 @@ const char *__hxcpp_all_files_fullpath[] = {
 "/Users/singpolyma/src/borogove/borogove/calls/Session.hx",
 "/Users/singpolyma/src/borogove/borogove/calls/SessionDescription.hx",
 "/Users/singpolyma/src/borogove/borogove/persistence/Dummy.hx",
+"/Users/singpolyma/src/borogove/borogove/persistence/KeyValueStore.hx",
+"/Users/singpolyma/src/borogove/borogove/persistence/MediaStore.hx",
 "/Users/singpolyma/src/borogove/borogove/persistence/MediaStoreFS.hx",
 "/Users/singpolyma/src/borogove/borogove/persistence/Sqlite.hx",
 "/Users/singpolyma/src/borogove/borogove/persistence/SqliteDriver.hx",
@@ -449,6 +455,7 @@ const char *__hxcpp_all_classes[] = {
 "borogove.FormSubmitBuilder",
 "borogove.Form",
 "borogove.FormLayoutSection",
+"borogove.FormSection__Companion",
 "borogove.GenericStream",
 "borogove.Hash",
 "borogove.ID",
@@ -463,6 +470,7 @@ const char *__hxcpp_all_classes[] = {
 "borogove.Outbox",
 "borogove.OutboxItem",
 "borogove.Participant",
+"borogove.Persistence__Companion",
 "borogove.Presence",
 "borogove.Profile",
 "borogove.ProfileItem",
@@ -495,8 +503,11 @@ const char *__hxcpp_all_classes[] = {
 "borogove.calls.Media",
 "borogove.calls.IceCandidate",
 "borogove.calls.Attribute",
+"borogove.calls.Session__Companion",
 "borogove.persistence.Dummy",
+"borogove.persistence.KeyValueStore__Companion",
 "borogove.persistence.MediaStoreFS",
+"borogove.persistence.MediaStore__Companion",
 "borogove.persistence.Sqlite",
 "borogove.persistence.SqliteDriver",
 "borogove.queries.GenericQuery",
@@ -552,6 +563,7 @@ const char *__hxcpp_all_classes[] = {
 "haxe.exceptions.PosException",
 "haxe.exceptions.NotImplementedException",
 "haxe.format.JsonParser",
+"haxe.format.JsonPrinter",
 "haxe.http.HttpBase",
 "haxe.io.BytesBuffer",
 "haxe.io.Input",
diff --git a/Sources/c_borogove/src/borogove/AttachmentSource.cpp b/Sources/c_borogove/src/borogove/AttachmentSource.cpp
index 63e3953..11f5667 100644
--- a/Sources/c_borogove/src/borogove/AttachmentSource.cpp
+++ b/Sources/c_borogove/src/borogove/AttachmentSource.cpp
@@ -42,10 +42,10 @@
 #endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_d724c8a9c8534014_18_new,"borogove.AttachmentSource","new",0x6c43ff9d,"borogove.AttachmentSource.new","borogove/AttachmentSource.cpp.hx",18,0xec06ee7d)
-HX_LOCAL_STACK_FRAME(_hx_pos_25944cb2fc8f2627_423_path__fromC,"borogove.AttachmentSource","path__fromC",0xf211edb1,"borogove.AttachmentSource.path__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_25944cb2fc8f2627_423_type__fromC,"borogove.AttachmentSource","type__fromC",0x0529dd3c,"borogove.AttachmentSource.type__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_25944cb2fc8f2627_423_name__fromC,"borogove.AttachmentSource","name__fromC",0x8023e1cb,"borogove.AttachmentSource.name__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_25944cb2fc8f2627_423_size__fromC,"borogove.AttachmentSource","size__fromC",0xbd120e15,"borogove.AttachmentSource.size__fromC","HaxeCBridge.hx",423,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_25944cb2fc8f2627_450_path__fromC,"borogove.AttachmentSource","path__fromC",0xf211edb1,"borogove.AttachmentSource.path__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_25944cb2fc8f2627_450_type__fromC,"borogove.AttachmentSource","type__fromC",0x0529dd3c,"borogove.AttachmentSource.type__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_25944cb2fc8f2627_450_name__fromC,"borogove.AttachmentSource","name__fromC",0x8023e1cb,"borogove.AttachmentSource.name__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_25944cb2fc8f2627_450_size__fromC,"borogove.AttachmentSource","size__fromC",0xbd120e15,"borogove.AttachmentSource.size__fromC","HaxeCBridge.hx",450,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_d724c8a9c8534014_27_tinkSource,"borogove.AttachmentSource","tinkSource",0xd8b715d0,"borogove.AttachmentSource.tinkSource","borogove/AttachmentSource.cpp.hx",27,0xec06ee7d)
 HX_LOCAL_STACK_FRAME(_hx_pos_d724c8a9c8534014_12_boot,"borogove.AttachmentSource","boot",0x4754aa55,"borogove.AttachmentSource.boot","borogove/AttachmentSource.cpp.hx",12,0xec06ee7d)
 namespace borogove{
@@ -74,32 +74,32 @@ bool AttachmentSource_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 ::String AttachmentSource_obj::path__fromC(){
-            	HX_STACKFRAME(&_hx_pos_25944cb2fc8f2627_423_path__fromC)
-HXDLIN( 423)		return this->path;
+            	HX_STACKFRAME(&_hx_pos_25944cb2fc8f2627_450_path__fromC)
+HXDLIN( 450)		return this->path;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(AttachmentSource_obj,path__fromC,return )
 
 ::String AttachmentSource_obj::type__fromC(){
-            	HX_STACKFRAME(&_hx_pos_25944cb2fc8f2627_423_type__fromC)
-HXDLIN( 423)		return this->type;
+            	HX_STACKFRAME(&_hx_pos_25944cb2fc8f2627_450_type__fromC)
+HXDLIN( 450)		return this->type;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(AttachmentSource_obj,type__fromC,return )
 
 ::String AttachmentSource_obj::name__fromC(){
-            	HX_STACKFRAME(&_hx_pos_25944cb2fc8f2627_423_name__fromC)
-HXDLIN( 423)		return this->name;
+            	HX_STACKFRAME(&_hx_pos_25944cb2fc8f2627_450_name__fromC)
+HXDLIN( 450)		return this->name;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(AttachmentSource_obj,name__fromC,return )
 
 int AttachmentSource_obj::size__fromC(){
-            	HX_STACKFRAME(&_hx_pos_25944cb2fc8f2627_423_size__fromC)
-HXDLIN( 423)		return this->size;
+            	HX_STACKFRAME(&_hx_pos_25944cb2fc8f2627_450_size__fromC)
+HXDLIN( 450)		return this->size;
             	}
 
 
diff --git a/Sources/c_borogove/src/borogove/AvailableChat.cpp b/Sources/c_borogove/src/borogove/AvailableChat.cpp
index f93538d..6a75e92 100644
--- a/Sources/c_borogove/src/borogove/AvailableChat.cpp
+++ b/Sources/c_borogove/src/borogove/AvailableChat.cpp
@@ -8,20 +8,20 @@
 #include <borogove/Caps.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_eed68530cdcabc2a_1918_new,"borogove.AvailableChat","new",0x5dac2a06,"borogove.AvailableChat.new","borogove/Chat.hx",1918,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_5767937a9c3c6668_423_chatId__fromC,"borogove.AvailableChat","chatId__fromC",0xf38d212c,"borogove.AvailableChat.chatId__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_5767937a9c3c6668_423_displayName__fromC,"borogove.AvailableChat","displayName__fromC",0x70140f86,"borogove.AvailableChat.displayName__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_5767937a9c3c6668_423_note__fromC,"borogove.AvailableChat","note__fromC",0x82768a6d,"borogove.AvailableChat.note__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_eed68530cdcabc2a_1914_isChannel,"borogove.AvailableChat","isChannel",0xad5c981f,"borogove.AvailableChat.isChannel","borogove/Chat.hx",1914,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_eed68530cdcabc2a_1894_boot,"borogove.AvailableChat","boot",0x91119bcc,"borogove.AvailableChat.boot","borogove/Chat.hx",1894,0x1763ae98)
+HX_DEFINE_STACK_FRAME(_hx_pos_eed68530cdcabc2a_1940_new,"borogove.AvailableChat","new",0x5dac2a06,"borogove.AvailableChat.new","borogove/Chat.hx",1940,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_5767937a9c3c6668_450_chatId__fromC,"borogove.AvailableChat","chatId__fromC",0xf38d212c,"borogove.AvailableChat.chatId__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_5767937a9c3c6668_450_displayName__fromC,"borogove.AvailableChat","displayName__fromC",0x70140f86,"borogove.AvailableChat.displayName__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_5767937a9c3c6668_450_note__fromC,"borogove.AvailableChat","note__fromC",0x82768a6d,"borogove.AvailableChat.note__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_eed68530cdcabc2a_1936_isChannel,"borogove.AvailableChat","isChannel",0xad5c981f,"borogove.AvailableChat.isChannel","borogove/Chat.hx",1936,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_eed68530cdcabc2a_1916_boot,"borogove.AvailableChat","boot",0x91119bcc,"borogove.AvailableChat.boot","borogove/Chat.hx",1916,0x1763ae98)
 namespace borogove{
 
 void AvailableChat_obj::__construct(::String chatId,::String displayName,::String note, ::borogove::Caps caps){
-            	HX_STACKFRAME(&_hx_pos_eed68530cdcabc2a_1918_new)
-HXLINE(1919)		this->chatId = chatId;
-HXLINE(1920)		this->displayName = displayName;
-HXLINE(1921)		this->note = note;
-HXLINE(1922)		this->caps = caps;
+            	HX_STACKFRAME(&_hx_pos_eed68530cdcabc2a_1940_new)
+HXLINE(1941)		this->chatId = chatId;
+HXLINE(1942)		this->displayName = displayName;
+HXLINE(1943)		this->note = note;
+HXLINE(1944)		this->caps = caps;
             	}
 
 Dynamic AvailableChat_obj::__CreateEmpty() { return new AvailableChat_obj; }
@@ -40,32 +40,32 @@ bool AvailableChat_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 ::String AvailableChat_obj::chatId__fromC(){
-            	HX_STACKFRAME(&_hx_pos_5767937a9c3c6668_423_chatId__fromC)
-HXDLIN( 423)		return this->chatId;
+            	HX_STACKFRAME(&_hx_pos_5767937a9c3c6668_450_chatId__fromC)
+HXDLIN( 450)		return this->chatId;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(AvailableChat_obj,chatId__fromC,return )
 
 ::String AvailableChat_obj::displayName__fromC(){
-            	HX_STACKFRAME(&_hx_pos_5767937a9c3c6668_423_displayName__fromC)
-HXDLIN( 423)		return this->displayName;
+            	HX_STACKFRAME(&_hx_pos_5767937a9c3c6668_450_displayName__fromC)
+HXDLIN( 450)		return this->displayName;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(AvailableChat_obj,displayName__fromC,return )
 
 ::String AvailableChat_obj::note__fromC(){
-            	HX_STACKFRAME(&_hx_pos_5767937a9c3c6668_423_note__fromC)
-HXDLIN( 423)		return this->note;
+            	HX_STACKFRAME(&_hx_pos_5767937a9c3c6668_450_note__fromC)
+HXDLIN( 450)		return this->note;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(AvailableChat_obj,note__fromC,return )
 
 bool AvailableChat_obj::isChannel(){
-            	HX_STACKFRAME(&_hx_pos_eed68530cdcabc2a_1914_isChannel)
-HXDLIN(1914)		return this->caps->isChannel(this->chatId);
+            	HX_STACKFRAME(&_hx_pos_eed68530cdcabc2a_1936_isChannel)
+HXDLIN(1936)		return this->caps->isChannel(this->chatId);
             	}
 
 
@@ -208,8 +208,8 @@ void AvailableChat_obj::__register()
 void AvailableChat_obj::__boot()
 {
 {
-            	HX_STACKFRAME(&_hx_pos_eed68530cdcabc2a_1894_boot)
-HXDLIN(1894)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_STACKFRAME(&_hx_pos_eed68530cdcabc2a_1916_boot)
+HXDLIN(1916)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(3)
             				->setFixed(0,HX_("chatId__fromC",06,fc,b1,94), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
diff --git a/Sources/c_borogove/src/borogove/Channel.cpp b/Sources/c_borogove/src/borogove/Channel.cpp
index 6c28b6e..4aacad3 100644
--- a/Sources/c_borogove/src/borogove/Channel.cpp
+++ b/Sources/c_borogove/src/borogove/Channel.cpp
@@ -118,6 +118,9 @@
 #ifndef INCLUDED_borogove_queries_GenericQuery
 #include <borogove/queries/GenericQuery.h>
 #endif
+#ifndef INCLUDED_borogove_queries_VcardTempGet
+#include <borogove/queries/VcardTempGet.h>
+#endif
 #ifndef INCLUDED_haxe_IMap
 #include <haxe/IMap.h>
 #endif
@@ -130,6 +133,9 @@
 #ifndef INCLUDED_haxe_ds_StringMap
 #include <haxe/ds/StringMap.h>
 #endif
+#ifndef INCLUDED_haxe_io_Bytes
+#include <haxe/io/Bytes.h>
+#endif
 #ifndef INCLUDED_haxe_iterators_MapKeyValueIterator
 #include <haxe/iterators/MapKeyValueIterator.h>
 #endif
@@ -143,100 +149,103 @@
 #include <thenshim/_Promise/Promise_Impl_.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1234_new,"borogove.Channel","new",0x12050648,"borogove.Channel.new","borogove/Chat.hx",1234,0x1763ae98)
+HX_DEFINE_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1236_new,"borogove.Channel","new",0x12050648,"borogove.Channel.new","borogove/Chat.hx",1236,0x1763ae98)
 static const ::String _hx_array_data_da6a8256_1[] = {
 	HX_("http://jabber.org/protocol/muc",07,b2,7f,c6),
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1281_selfPing,"borogove.Channel","selfPing",0x11d6c136,"borogove.Channel.selfPing","borogove/Chat.hx",1281,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1270_selfPing,"borogove.Channel","selfPing",0x11d6c136,"borogove.Channel.selfPing","borogove/Chat.hx",1270,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1256_selfPing,"borogove.Channel","selfPing",0x11d6c136,"borogove.Channel.selfPing","borogove/Chat.hx",1256,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1262_selfPing,"borogove.Channel","selfPing",0x11d6c136,"borogove.Channel.selfPing","borogove/Chat.hx",1262,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1311_join,"borogove.Channel","join",0xafc32902,"borogove.Channel.join","borogove/Chat.hx",1311,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1297_join,"borogove.Channel","join",0xafc32902,"borogove.Channel.join","borogove/Chat.hx",1297,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1322_selfPingSuccess,"borogove.Channel","selfPingSuccess",0x1336bf2d,"borogove.Channel.selfPingSuccess","borogove/Chat.hx",1322,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1333_getDisplayName,"borogove.Channel","getDisplayName",0x49aca7cf,"borogove.Channel.getDisplayName","borogove/Chat.hx",1333,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1343_description,"borogove.Channel","description",0x2f5266e4,"borogove.Channel.description","borogove/Chat.hx",1343,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1347_info,"borogove.Channel","info",0xaf192d86,"borogove.Channel.info","borogove/Chat.hx",1347,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1351_invite,"borogove.Channel","invite",0x94735ce1,"borogove.Channel.invite","borogove/Chat.hx",1351,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1364_canInvite,"borogove.Channel","canInvite",0x7f9cd9e1,"borogove.Channel.canInvite","borogove/Chat.hx",1364,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1376_canSend,"borogove.Channel","canSend",0x7a8ebf60,"borogove.Channel.canSend","borogove/Chat.hx",1376,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1388_getCaps,"borogove.Channel","getCaps",0x242315bf,"borogove.Channel.getCaps","borogove/Chat.hx",1388,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1392_setPresence,"borogove.Channel","setPresence",0x676d79e5,"borogove.Channel.setPresence","borogove/Chat.hx",1392,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1393_setPresence,"borogove.Channel","setPresence",0x676d79e5,"borogove.Channel.setPresence","borogove/Chat.hx",1393,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1403_setPresence,"borogove.Channel","setPresence",0x676d79e5,"borogove.Channel.setPresence","borogove/Chat.hx",1403,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1411_setPresence,"borogove.Channel","setPresence",0x676d79e5,"borogove.Channel.setPresence","borogove/Chat.hx",1411,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1434_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",1434,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1470_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",1470,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1497_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",1497,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1505_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",1505,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1440_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",1440,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1464_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",1464,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1456_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",1456,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1452_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",1452,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1515_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",1515,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1417_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",1417,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1527_setTrusted,"borogove.Channel","setTrusted",0xa74cb38d,"borogove.Channel.setTrusted","borogove/Chat.hx",1527,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1533_isTrusted,"borogove.Channel","isTrusted",0xa81fc915,"borogove.Channel.isTrusted","borogove/Chat.hx",1533,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1537_isPrivate,"borogove.Channel","isPrivate",0x1ae83e21,"borogove.Channel.isPrivate","borogove/Chat.hx",1537,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1541_setupNotifications,"borogove.Channel","setupNotifications",0xe0d25d83,"borogove.Channel.setupNotifications","borogove/Chat.hx",1541,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1549_refreshDisco,"borogove.Channel","refreshDisco",0x4bcfccb7,"borogove.Channel.refreshDisco","borogove/Chat.hx",1549,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1547_refreshDisco,"borogove.Channel","refreshDisco",0x4bcfccb7,"borogove.Channel.refreshDisco","borogove/Chat.hx",1547,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1560_preview,"borogove.Channel","preview",0x4bc129f0,"borogove.Channel.preview","borogove/Chat.hx",1560,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1567_livePresence,"borogove.Channel","livePresence",0x1293c65f,"borogove.Channel.livePresence","borogove/Chat.hx",1567,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1574_syncing,"borogove.Channel","syncing",0xb70d474f,"borogove.Channel.syncing","borogove/Chat.hx",1574,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1578_canAudioCall,"borogove.Channel","canAudioCall",0x430d177c,"borogove.Channel.canAudioCall","borogove/Chat.hx",1578,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1582_canVideoCall,"borogove.Channel","canVideoCall",0x490fe9a1,"borogove.Channel.canVideoCall","borogove/Chat.hx",1582,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1586_nickInUse,"borogove.Channel","nickInUse",0xd519bea7,"borogove.Channel.nickInUse","borogove/Chat.hx",1586,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1590_getFullJid,"borogove.Channel","getFullJid",0x5d591998,"borogove.Channel.getFullJid","borogove/Chat.hx",1590,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1596_getParticipants,"borogove.Channel","getParticipants",0x9c657cfe,"borogove.Channel.getParticipants","borogove/Chat.hx",1596,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1594_getParticipants,"borogove.Channel","getParticipants",0x9c657cfe,"borogove.Channel.getParticipants","borogove/Chat.hx",1594,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1601_getParticipantDetails,"borogove.Channel","getParticipantDetails",0xe879fb6d,"borogove.Channel.getParticipantDetails","borogove/Chat.hx",1601,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1615_getMessagesBefore,"borogove.Channel","getMessagesBefore",0x72d1ad89,"borogove.Channel.getMessagesBefore","borogove/Chat.hx",1615,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1621_getMessagesBefore,"borogove.Channel","getMessagesBefore",0x72d1ad89,"borogove.Channel.getMessagesBefore","borogove/Chat.hx",1621,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1613_getMessagesBefore,"borogove.Channel","getMessagesBefore",0x72d1ad89,"borogove.Channel.getMessagesBefore","borogove/Chat.hx",1613,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1637_getMessagesAfter,"borogove.Channel","getMessagesAfter",0x9a967c52,"borogove.Channel.getMessagesAfter","borogove/Chat.hx",1637,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1643_getMessagesAfter,"borogove.Channel","getMessagesAfter",0x9a967c52,"borogove.Channel.getMessagesAfter","borogove/Chat.hx",1643,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1632_getMessagesAfter,"borogove.Channel","getMessagesAfter",0x9a967c52,"borogove.Channel.getMessagesAfter","borogove/Chat.hx",1632,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1656_getMessagesAround,"borogove.Channel","getMessagesAround",0x8ea35157,"borogove.Channel.getMessagesAround","borogove/Chat.hx",1656,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1660_prepareIncomingMessage,"borogove.Channel","prepareIncomingMessage",0xe60006d2,"borogove.Channel.prepareIncomingMessage","borogove/Chat.hx",1660,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1671_prepareOutgoingMessage,"borogove.Channel","prepareOutgoingMessage",0x4c2ccc0c,"borogove.Channel.prepareOutgoingMessage","borogove/Chat.hx",1671,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1690_correctMessage,"borogove.Channel","correctMessage",0x85df7995,"borogove.Channel.correctMessage","borogove/Chat.hx",1690,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1684_correctMessage,"borogove.Channel","correctMessage",0x85df7995,"borogove.Channel.correctMessage","borogove/Chat.hx",1684,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1703_sendMessage,"borogove.Channel","sendMessage",0xf452e747,"borogove.Channel.sendMessage","borogove/Chat.hx",1703,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1721_sendMessage,"borogove.Channel","sendMessage",0xf452e747,"borogove.Channel.sendMessage","borogove/Chat.hx",1721,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1728_sendMessage,"borogove.Channel","sendMessage",0xf452e747,"borogove.Channel.sendMessage","borogove/Chat.hx",1728,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1760_removeReaction,"borogove.Channel","removeReaction",0x52276725,"borogove.Channel.removeReaction","borogove/Chat.hx",1760,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1739_removeReaction,"borogove.Channel","removeReaction",0x52276725,"borogove.Channel.removeReaction","borogove/Chat.hx",1739,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1754_removeReaction,"borogove.Channel","removeReaction",0x52276725,"borogove.Channel.removeReaction","borogove/Chat.hx",1754,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1772_sendMessageStanza,"borogove.Channel","sendMessageStanza",0x9ef9e89c,"borogove.Channel.sendMessageStanza","borogove/Chat.hx",1772,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1766_sendMessageStanza,"borogove.Channel","sendMessageStanza",0x9ef9e89c,"borogove.Channel.sendMessageStanza","borogove/Chat.hx",1766,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1777_lastMessageId,"borogove.Channel","lastMessageId",0x760f3834,"borogove.Channel.lastMessageId","borogove/Chat.hx",1777,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1782_markReadUpTo,"borogove.Channel","markReadUpTo",0x4caa3571,"borogove.Channel.markReadUpTo","borogove/Chat.hx",1782,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1797_markReadUpTo,"borogove.Channel","markReadUpTo",0x4caa3571,"borogove.Channel.markReadUpTo","borogove/Chat.hx",1797,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1781_markReadUpTo,"borogove.Channel","markReadUpTo",0x4caa3571,"borogove.Channel.markReadUpTo","borogove/Chat.hx",1781,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1284_selfPing,"borogove.Channel","selfPing",0x11d6c136,"borogove.Channel.selfPing","borogove/Chat.hx",1284,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1273_selfPing,"borogove.Channel","selfPing",0x11d6c136,"borogove.Channel.selfPing","borogove/Chat.hx",1273,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1259_selfPing,"borogove.Channel","selfPing",0x11d6c136,"borogove.Channel.selfPing","borogove/Chat.hx",1259,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1265_selfPing,"borogove.Channel","selfPing",0x11d6c136,"borogove.Channel.selfPing","borogove/Chat.hx",1265,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1314_join,"borogove.Channel","join",0xafc32902,"borogove.Channel.join","borogove/Chat.hx",1314,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1300_join,"borogove.Channel","join",0xafc32902,"borogove.Channel.join","borogove/Chat.hx",1300,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1325_selfPingSuccess,"borogove.Channel","selfPingSuccess",0x1336bf2d,"borogove.Channel.selfPingSuccess","borogove/Chat.hx",1325,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1336_getDisplayName,"borogove.Channel","getDisplayName",0x49aca7cf,"borogove.Channel.getDisplayName","borogove/Chat.hx",1336,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1346_description,"borogove.Channel","description",0x2f5266e4,"borogove.Channel.description","borogove/Chat.hx",1346,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1350_info,"borogove.Channel","info",0xaf192d86,"borogove.Channel.info","borogove/Chat.hx",1350,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1354_invite,"borogove.Channel","invite",0x94735ce1,"borogove.Channel.invite","borogove/Chat.hx",1354,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1367_canInvite,"borogove.Channel","canInvite",0x7f9cd9e1,"borogove.Channel.canInvite","borogove/Chat.hx",1367,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1379_canSend,"borogove.Channel","canSend",0x7a8ebf60,"borogove.Channel.canSend","borogove/Chat.hx",1379,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1391_getCaps,"borogove.Channel","getCaps",0x242315bf,"borogove.Channel.getCaps","borogove/Chat.hx",1391,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1395_setPresence,"borogove.Channel","setPresence",0x676d79e5,"borogove.Channel.setPresence","borogove/Chat.hx",1395,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1396_setPresence,"borogove.Channel","setPresence",0x676d79e5,"borogove.Channel.setPresence","borogove/Chat.hx",1396,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1406_setPresence,"borogove.Channel","setPresence",0x676d79e5,"borogove.Channel.setPresence","borogove/Chat.hx",1406,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1414_setPresence,"borogove.Channel","setPresence",0x676d79e5,"borogove.Channel.setPresence","borogove/Chat.hx",1414,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1437_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",1437,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1473_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",1473,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1500_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",1500,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1508_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",1508,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1443_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",1443,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1467_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",1467,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1459_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",1459,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1455_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",1455,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1518_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",1518,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1420_doSync,"borogove.Channel","doSync",0x10faca9e,"borogove.Channel.doSync","borogove/Chat.hx",1420,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1530_setTrusted,"borogove.Channel","setTrusted",0xa74cb38d,"borogove.Channel.setTrusted","borogove/Chat.hx",1530,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1536_isTrusted,"borogove.Channel","isTrusted",0xa81fc915,"borogove.Channel.isTrusted","borogove/Chat.hx",1536,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1540_isPrivate,"borogove.Channel","isPrivate",0x1ae83e21,"borogove.Channel.isPrivate","borogove/Chat.hx",1540,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1544_setupNotifications,"borogove.Channel","setupNotifications",0xe0d25d83,"borogove.Channel.setupNotifications","borogove/Chat.hx",1544,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1552_refreshDisco,"borogove.Channel","refreshDisco",0x4bcfccb7,"borogove.Channel.refreshDisco","borogove/Chat.hx",1552,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1564_refreshDisco,"borogove.Channel","refreshDisco",0x4bcfccb7,"borogove.Channel.refreshDisco","borogove/Chat.hx",1564,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1570_refreshDisco,"borogove.Channel","refreshDisco",0x4bcfccb7,"borogove.Channel.refreshDisco","borogove/Chat.hx",1570,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1567_refreshDisco,"borogove.Channel","refreshDisco",0x4bcfccb7,"borogove.Channel.refreshDisco","borogove/Chat.hx",1567,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1550_refreshDisco,"borogove.Channel","refreshDisco",0x4bcfccb7,"borogove.Channel.refreshDisco","borogove/Chat.hx",1550,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1582_preview,"borogove.Channel","preview",0x4bc129f0,"borogove.Channel.preview","borogove/Chat.hx",1582,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1589_livePresence,"borogove.Channel","livePresence",0x1293c65f,"borogove.Channel.livePresence","borogove/Chat.hx",1589,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1596_syncing,"borogove.Channel","syncing",0xb70d474f,"borogove.Channel.syncing","borogove/Chat.hx",1596,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1600_canAudioCall,"borogove.Channel","canAudioCall",0x430d177c,"borogove.Channel.canAudioCall","borogove/Chat.hx",1600,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1604_canVideoCall,"borogove.Channel","canVideoCall",0x490fe9a1,"borogove.Channel.canVideoCall","borogove/Chat.hx",1604,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1608_nickInUse,"borogove.Channel","nickInUse",0xd519bea7,"borogove.Channel.nickInUse","borogove/Chat.hx",1608,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1612_getFullJid,"borogove.Channel","getFullJid",0x5d591998,"borogove.Channel.getFullJid","borogove/Chat.hx",1612,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1618_getParticipants,"borogove.Channel","getParticipants",0x9c657cfe,"borogove.Channel.getParticipants","borogove/Chat.hx",1618,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1616_getParticipants,"borogove.Channel","getParticipants",0x9c657cfe,"borogove.Channel.getParticipants","borogove/Chat.hx",1616,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1623_getParticipantDetails,"borogove.Channel","getParticipantDetails",0xe879fb6d,"borogove.Channel.getParticipantDetails","borogove/Chat.hx",1623,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1637_getMessagesBefore,"borogove.Channel","getMessagesBefore",0x72d1ad89,"borogove.Channel.getMessagesBefore","borogove/Chat.hx",1637,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1643_getMessagesBefore,"borogove.Channel","getMessagesBefore",0x72d1ad89,"borogove.Channel.getMessagesBefore","borogove/Chat.hx",1643,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1635_getMessagesBefore,"borogove.Channel","getMessagesBefore",0x72d1ad89,"borogove.Channel.getMessagesBefore","borogove/Chat.hx",1635,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1659_getMessagesAfter,"borogove.Channel","getMessagesAfter",0x9a967c52,"borogove.Channel.getMessagesAfter","borogove/Chat.hx",1659,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1665_getMessagesAfter,"borogove.Channel","getMessagesAfter",0x9a967c52,"borogove.Channel.getMessagesAfter","borogove/Chat.hx",1665,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1654_getMessagesAfter,"borogove.Channel","getMessagesAfter",0x9a967c52,"borogove.Channel.getMessagesAfter","borogove/Chat.hx",1654,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1678_getMessagesAround,"borogove.Channel","getMessagesAround",0x8ea35157,"borogove.Channel.getMessagesAround","borogove/Chat.hx",1678,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1682_prepareIncomingMessage,"borogove.Channel","prepareIncomingMessage",0xe60006d2,"borogove.Channel.prepareIncomingMessage","borogove/Chat.hx",1682,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1693_prepareOutgoingMessage,"borogove.Channel","prepareOutgoingMessage",0x4c2ccc0c,"borogove.Channel.prepareOutgoingMessage","borogove/Chat.hx",1693,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1712_correctMessage,"borogove.Channel","correctMessage",0x85df7995,"borogove.Channel.correctMessage","borogove/Chat.hx",1712,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1706_correctMessage,"borogove.Channel","correctMessage",0x85df7995,"borogove.Channel.correctMessage","borogove/Chat.hx",1706,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1725_sendMessage,"borogove.Channel","sendMessage",0xf452e747,"borogove.Channel.sendMessage","borogove/Chat.hx",1725,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1743_sendMessage,"borogove.Channel","sendMessage",0xf452e747,"borogove.Channel.sendMessage","borogove/Chat.hx",1743,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1750_sendMessage,"borogove.Channel","sendMessage",0xf452e747,"borogove.Channel.sendMessage","borogove/Chat.hx",1750,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1782_removeReaction,"borogove.Channel","removeReaction",0x52276725,"borogove.Channel.removeReaction","borogove/Chat.hx",1782,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1761_removeReaction,"borogove.Channel","removeReaction",0x52276725,"borogove.Channel.removeReaction","borogove/Chat.hx",1761,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1776_removeReaction,"borogove.Channel","removeReaction",0x52276725,"borogove.Channel.removeReaction","borogove/Chat.hx",1776,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1794_sendMessageStanza,"borogove.Channel","sendMessageStanza",0x9ef9e89c,"borogove.Channel.sendMessageStanza","borogove/Chat.hx",1794,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1788_sendMessageStanza,"borogove.Channel","sendMessageStanza",0x9ef9e89c,"borogove.Channel.sendMessageStanza","borogove/Chat.hx",1788,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1799_lastMessageId,"borogove.Channel","lastMessageId",0x760f3834,"borogove.Channel.lastMessageId","borogove/Chat.hx",1799,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1804_markReadUpTo,"borogove.Channel","markReadUpTo",0x4caa3571,"borogove.Channel.markReadUpTo","borogove/Chat.hx",1804,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1819_markReadUpTo,"borogove.Channel","markReadUpTo",0x4caa3571,"borogove.Channel.markReadUpTo","borogove/Chat.hx",1819,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1803_markReadUpTo,"borogove.Channel","markReadUpTo",0x4caa3571,"borogove.Channel.markReadUpTo","borogove/Chat.hx",1803,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1845_bookmark,"borogove.Channel","bookmark",0x0c8bedce,"borogove.Channel.bookmark","borogove/Chat.hx",1845,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1863_bookmark,"borogove.Channel","bookmark",0x0c8bedce,"borogove.Channel.bookmark","borogove/Chat.hx",1863,0x1763ae98)
 HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1823_bookmark,"borogove.Channel","bookmark",0x0c8bedce,"borogove.Channel.bookmark","borogove/Chat.hx",1823,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1841_bookmark,"borogove.Channel","bookmark",0x0c8bedce,"borogove.Channel.bookmark","borogove/Chat.hx",1841,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1801_bookmark,"borogove.Channel","bookmark",0x0c8bedce,"borogove.Channel.bookmark","borogove/Chat.hx",1801,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1852_sendChatState,"borogove.Channel","sendChatState",0xbd4bc999,"borogove.Channel.sendChatState","borogove/Chat.hx",1852,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1868_close,"borogove.Channel","close",0x113b97a0,"borogove.Channel.close","borogove/Chat.hx",1868,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1234_boot,"borogove.Channel","boot",0xaa79794a,"borogove.Channel.boot","borogove/Chat.hx",1234,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1874_sendChatState,"borogove.Channel","sendChatState",0xbd4bc999,"borogove.Channel.sendChatState","borogove/Chat.hx",1874,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1890_close,"borogove.Channel","close",0x113b97a0,"borogove.Channel.close","borogove/Chat.hx",1890,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_bf6e937f28c6df5e_1236_boot,"borogove.Channel","boot",0xaa79794a,"borogove.Channel.boot","borogove/Chat.hx",1236,0x1763ae98)
 namespace borogove{
 
 void Channel_obj::__construct( ::borogove::Client client, ::borogove::GenericStream stream,::Dynamic persistence,::String chatId,::hx::Null< int >  __o_uiState,::hx::Null< bool >  __o_isBlocked, ::borogove::Stanza extensions,::String readUpToId,::String readUpToBy, ::borogove::Caps disco){
             		int uiState = __o_uiState.Default(1);
             		bool isBlocked = __o_isBlocked.Default(false);
-            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1234_new)
-HXLINE(1240)		this->_nickInUse = null();
-HXLINE(1239)		this->forceLive = false;
-HXLINE(1238)		this->sync = null();
-HXLINE(1237)		this->inSync = true;
-HXLINE(1236)		this->disco =  ::borogove::Caps_obj::__alloc( HX_CTX ,HX_("",00,00,00,00),::Array_obj< ::Dynamic>::__new(0),::Array_obj< ::String >::fromData( _hx_array_data_da6a8256_1,1),::Array_obj< ::Dynamic>::__new(0),null());
-HXLINE(1244)		super::__construct(client,stream,persistence,chatId,uiState,isBlocked,extensions,readUpToId,readUpToBy,null());
-HXLINE(1245)		if (::hx::IsNotNull( disco )) {
-HXLINE(1246)			this->disco = disco;
-HXLINE(1247)			if (!(disco->features->contains(HX_("http://jabber.org/protocol/muc",07,b2,7f,c6)))) {
-HXLINE(1249)				this->forceLive = true;
-HXLINE(1250)				this->outbox->start();
+            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1236_new)
+HXLINE(1243)		this->_nickInUse = null();
+HXLINE(1242)		this->forceLive = false;
+HXLINE(1241)		this->sync = null();
+HXLINE(1240)		this->inSync = false;
+HXLINE(1238)		this->disco =  ::borogove::Caps_obj::__alloc( HX_CTX ,HX_("",00,00,00,00),::Array_obj< ::Dynamic>::__new(0),::Array_obj< ::String >::fromData( _hx_array_data_da6a8256_1,1),::Array_obj< ::Dynamic>::__new(0),null());
+HXLINE(1247)		super::__construct(client,stream,persistence,chatId,uiState,isBlocked,extensions,readUpToId,readUpToBy,null());
+HXLINE(1248)		if (::hx::IsNotNull( disco )) {
+HXLINE(1249)			this->disco = disco;
+HXLINE(1250)			if (!(disco->features->contains(HX_("http://jabber.org/protocol/muc",07,b2,7f,c6)))) {
+HXLINE(1252)				this->forceLive = true;
+HXLINE(1253)				this->outbox->start();
             			}
             		}
             	}
@@ -265,104 +274,104 @@ void Channel_obj::selfPing(bool refresh){
             		void _hx_run(){
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_2, ::borogove::Channel,_gthis) HXARGC(1)
             			void _hx_run( ::borogove::Stanza response){
-            				HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1281_selfPing)
-HXLINE(1281)				if ((( (::String)(::Reflect_obj::field(response->attr,HX_("type",ba,f2,08,4d))) ) == HX_("error",c8,cb,29,73))) {
-HXLINE(1282)					 ::borogove::Stanza tmp = response->getChild(HX_("error",c8,cb,29,73),null());
-HXDLIN(1282)					 ::borogove::Stanza err;
-HXDLIN(1282)					if (::hx::IsNotNull( tmp )) {
-HXLINE(1282)						err = tmp->getChild(null(),HX_("urn:ietf:params:xml:ns:xmpp-stanzas",27,f2,3d,30));
+            				HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1284_selfPing)
+HXLINE(1284)				if ((( (::String)(::Reflect_obj::field(response->attr,HX_("type",ba,f2,08,4d))) ) == HX_("error",c8,cb,29,73))) {
+HXLINE(1285)					 ::borogove::Stanza tmp = response->getChild(HX_("error",c8,cb,29,73),null());
+HXDLIN(1285)					 ::borogove::Stanza err;
+HXDLIN(1285)					if (::hx::IsNotNull( tmp )) {
+HXLINE(1285)						err = tmp->getChild(null(),HX_("urn:ietf:params:xml:ns:xmpp-stanzas",27,f2,3d,30));
             					}
             					else {
-HXLINE(1282)						err = null();
+HXLINE(1285)						err = null();
             					}
-HXLINE(1283)					bool _hx_tmp;
-HXDLIN(1283)					if ((err->name != HX_("service-unavailable",f8,3c,11,1c))) {
-HXLINE(1283)						_hx_tmp = (err->name == HX_("feature-not-implemented",71,20,2e,96));
+HXLINE(1286)					bool _hx_tmp;
+HXDLIN(1286)					if ((err->name != HX_("service-unavailable",f8,3c,11,1c))) {
+HXLINE(1286)						_hx_tmp = (err->name == HX_("feature-not-implemented",71,20,2e,96));
             					}
             					else {
-HXLINE(1283)						_hx_tmp = true;
+HXLINE(1286)						_hx_tmp = true;
             					}
-HXDLIN(1283)					if (_hx_tmp) {
-HXLINE(1283)						_gthis->selfPingSuccess();
-HXDLIN(1283)						return;
+HXDLIN(1286)					if (_hx_tmp) {
+HXLINE(1286)						_gthis->selfPingSuccess();
+HXDLIN(1286)						return;
             					}
-HXLINE(1284)					bool _hx_tmp1;
-HXDLIN(1284)					if ((err->name != HX_("remote-server-not-found",e5,4f,ca,aa))) {
-HXLINE(1284)						_hx_tmp1 = (err->name == HX_("remote-server-timeout",fe,b0,ee,1a));
+HXLINE(1287)					bool _hx_tmp1;
+HXDLIN(1287)					if ((err->name != HX_("remote-server-not-found",e5,4f,ca,aa))) {
+HXLINE(1287)						_hx_tmp1 = (err->name == HX_("remote-server-timeout",fe,b0,ee,1a));
             					}
             					else {
-HXLINE(1284)						_hx_tmp1 = true;
+HXLINE(1287)						_hx_tmp1 = true;
             					}
-HXDLIN(1284)					if (_hx_tmp1) {
-HXLINE(1284)						_gthis->selfPingSuccess();
-HXDLIN(1284)						return;
+HXDLIN(1287)					if (_hx_tmp1) {
+HXLINE(1287)						_gthis->selfPingSuccess();
+HXDLIN(1287)						return;
             					}
-HXLINE(1285)					if ((err->name == HX_("item-not-found",4e,b5,9b,5b))) {
-HXLINE(1285)						_gthis->selfPingSuccess();
-HXDLIN(1285)						return;
+HXLINE(1288)					if ((err->name == HX_("item-not-found",4e,b5,9b,5b))) {
+HXLINE(1288)						_gthis->selfPingSuccess();
+HXDLIN(1288)						return;
             					}
-HXLINE(1286)					::haxe::Log_obj::trace(HX_("SYNC: self-ping fail, join",ea,45,f2,f0), ::Dynamic(::hx::Anon_obj::Create(5)
+HXLINE(1289)					::haxe::Log_obj::trace(HX_("SYNC: self-ping fail, join",ea,45,f2,f0), ::Dynamic(::hx::Anon_obj::Create(5)
             						->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Channel",56,82,6a,da))
             						->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis->chatId))
             						->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("selfPing",1e,60,3c,38))
             						->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Chat.hx",98,ae,63,17))
-            						->setFixed(4,HX_("lineNumber",dd,81,22,76),1286)));
-HXLINE(1287)					_gthis->join();
+            						->setFixed(4,HX_("lineNumber",dd,81,22,76),1289)));
+HXLINE(1290)					_gthis->join();
             				}
             				else {
-HXLINE(1289)					_gthis->selfPingSuccess();
+HXLINE(1292)					_gthis->selfPingSuccess();
             				}
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1270_selfPing)
-HXLINE(1271)			if (!(_gthis->disco->features->contains(HX_("http://jabber.org/protocol/muc",07,b2,7f,c6)))) {
-HXLINE(1273)				_gthis->forceLive = true;
-HXLINE(1274)				_gthis->outbox->start();
-HXLINE(1275)				return;
+            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1273_selfPing)
+HXLINE(1274)			if (!(_gthis->disco->features->contains(HX_("http://jabber.org/protocol/muc",07,b2,7f,c6)))) {
+HXLINE(1276)				_gthis->forceLive = true;
+HXLINE(1277)				_gthis->outbox->start();
+HXLINE(1278)				return;
             			}
-HXLINE(1277)			 ::borogove::GenericStream _gthis1 = _gthis->stream;
-HXLINE(1278)			::String _hx_tmp = _gthis->getFullJid()->asString();
-HXLINE(1277)			_gthis1->sendIq( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE(1280)			 ::borogove::GenericStream _gthis1 = _gthis->stream;
+HXLINE(1281)			::String _hx_tmp = _gthis->getFullJid()->asString();
+HXLINE(1280)			_gthis1->sendIq( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
             				->setFixed(0,HX_("to",7b,65,00,00),_hx_tmp)
             				->setFixed(1,HX_("type",ba,f2,08,4d),HX_("get",96,80,4e,00))))->tag(HX_("ping",72,f2,57,4a), ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:ping",8e,30,3f,fd))))->up(), ::Dynamic(new _hx_Closure_2(_gthis)));
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1256_selfPing)
-HXDLIN(1256)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1257)		if ((this->uiState == 3)) {
-HXLINE(1257)			return;
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1259_selfPing)
+HXDLIN(1259)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1260)		if ((this->uiState == 3)) {
+HXLINE(1260)			return;
             		}
-HXLINE(1259)		if ((this->uiState == 2)) {
+HXLINE(1262)		if ((this->uiState == 2)) {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             			 ::borogove::Stanza _hx_run( ::borogove::Stanza stanza){
-            				HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1262_selfPing)
-HXLINE(1263)				::Reflect_obj::setField(stanza->attr,HX_("type",ba,f2,08,4d),HX_("unavailable",50,e0,29,fd));
-HXLINE(1264)				return stanza;
+            				HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1265_selfPing)
+HXLINE(1266)				::Reflect_obj::setField(stanza->attr,HX_("type",ba,f2,08,4d),HX_("unavailable",50,e0,29,fd));
+HXLINE(1267)				return stanza;
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1260)			 ::borogove::Client _hx_tmp = this->client;
-HXDLIN(1260)			_hx_tmp->sendPresence(this->getFullJid()->asString(), ::Dynamic(new _hx_Closure_0()));
-HXLINE(1267)			return;
+HXLINE(1263)			 ::borogove::Client _hx_tmp = this->client;
+HXDLIN(1263)			_hx_tmp->sendPresence(this->getFullJid()->asString(), ::Dynamic(new _hx_Closure_0()));
+HXLINE(1270)			return;
             		}
-HXLINE(1270)		 ::Dynamic _hx_tmp1;
-HXDLIN(1270)		if (refresh) {
-HXLINE(1270)			_hx_tmp1 = this->refreshDisco_dyn();
+HXLINE(1273)		 ::Dynamic _hx_tmp1;
+HXDLIN(1273)		if (refresh) {
+HXLINE(1273)			_hx_tmp1 = this->refreshDisco_dyn();
             		}
             		else {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             			void _hx_run( ::Dynamic cb){
-            				HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1270_selfPing)
-HXLINE(1270)				cb();
+            				HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1273_selfPing)
+HXLINE(1273)				cb();
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-HXLINE(1270)			_hx_tmp1 =  ::Dynamic(new _hx_Closure_1());
+HXLINE(1273)			_hx_tmp1 =  ::Dynamic(new _hx_Closure_1());
             		}
-HXDLIN(1270)		_hx_tmp1( ::Dynamic(new _hx_Closure_3(_gthis)));
+HXDLIN(1273)		_hx_tmp1( ::Dynamic(new _hx_Closure_3(_gthis)));
             	}
 
 
@@ -371,459 +380,459 @@ HX_DEFINE_DYNAMIC_FUNC1(Channel_obj,selfPing,(void))
 void Channel_obj::join(){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Channel,_gthis) HXARGC(1)
             		 ::borogove::Stanza _hx_run( ::borogove::Stanza stanza){
-            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1311_join)
-HXLINE(1312)			stanza->tag(HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1314_join)
+HXLINE(1315)			stanza->tag(HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/muc",07,b2,7f,c6))));
-HXLINE(1313)			if (_gthis->disco->features->contains(HX_("urn:xmpp:mam:2",f5,ef,8c,da))) {
-HXLINE(1313)				stanza->tag(HX_("history",54,35,47,64), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(1316)			if (_gthis->disco->features->contains(HX_("urn:xmpp:mam:2",f5,ef,8c,da))) {
+HXLINE(1316)				stanza->tag(HX_("history",54,35,47,64), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("maxchars",b9,7f,a3,5c),HX_("0",30,00,00,00))))->up();
             			}
-HXLINE(1315)			stanza->up();
-HXLINE(1316)			return stanza;
+HXLINE(1318)			stanza->up();
+HXLINE(1319)			return stanza;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1297_join)
-HXDLIN(1297)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1298)		bool _hx_tmp;
-HXDLIN(1298)		if ((this->uiState != 3)) {
-HXLINE(1298)			_hx_tmp = (this->uiState == 2);
+            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1300_join)
+HXDLIN(1300)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1301)		bool _hx_tmp;
+HXDLIN(1301)		if ((this->uiState != 3)) {
+HXLINE(1301)			_hx_tmp = (this->uiState == 2);
             		}
             		else {
-HXLINE(1298)			_hx_tmp = true;
-            		}
-HXDLIN(1298)		if (_hx_tmp) {
-HXLINE(1300)			return;
-            		}
-HXLINE(1303)		this->presence =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE(1304)		this->_nickInUse = null();
-HXLINE(1305)		this->outbox->pause();
-HXLINE(1306)		this->inSync = false;
-HXLINE(1307)		this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
-HXLINE(1308)		 ::borogove::JID desiredFullJid = ::borogove::JID_obj::parse(this->chatId);
-HXDLIN(1308)		 ::borogove::JID desiredFullJid1 = desiredFullJid->withResource(this->client->displayName());
-HXLINE(1309)		 ::borogove::Client _hx_tmp1 = this->client;
-HXDLIN(1309)		_hx_tmp1->sendPresence(desiredFullJid1->asString(), ::Dynamic(new _hx_Closure_0(_gthis)));
-HXLINE(1319)		::Dynamic _hx_tmp2 = this->persistence;
-HXDLIN(1319)		::String _hx_tmp3 = this->client->accountId();
-HXDLIN(1319)		::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::lastId(_hx_tmp2,_hx_tmp3,this->chatId),this->doSync_dyn(),null());
+HXLINE(1301)			_hx_tmp = true;
+            		}
+HXDLIN(1301)		if (_hx_tmp) {
+HXLINE(1303)			return;
+            		}
+HXLINE(1306)		this->presence =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE(1307)		this->_nickInUse = null();
+HXLINE(1308)		this->outbox->pause();
+HXLINE(1309)		this->inSync = false;
+HXLINE(1310)		this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
+HXLINE(1311)		 ::borogove::JID desiredFullJid = ::borogove::JID_obj::parse(this->chatId);
+HXDLIN(1311)		 ::borogove::JID desiredFullJid1 = desiredFullJid->withResource(this->client->displayName());
+HXLINE(1312)		 ::borogove::Client _hx_tmp1 = this->client;
+HXDLIN(1312)		_hx_tmp1->sendPresence(desiredFullJid1->asString(), ::Dynamic(new _hx_Closure_0(_gthis)));
+HXLINE(1322)		::Dynamic _hx_tmp2 = this->persistence;
+HXDLIN(1322)		::String _hx_tmp3 = this->client->accountId();
+HXDLIN(1322)		::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::lastId(_hx_tmp2,_hx_tmp3,this->chatId),this->doSync_dyn(),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Channel_obj,join,(void))
 
 void Channel_obj::selfPingSuccess(){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1322_selfPingSuccess)
-HXLINE(1323)		::String _hx_tmp = this->nickInUse();
-HXDLIN(1323)		if ((_hx_tmp != this->client->displayName())) {
-HXLINE(1324)			 ::borogove::JID desiredFullJid = ::borogove::JID_obj::parse(this->chatId);
-HXDLIN(1324)			 ::borogove::JID desiredFullJid1 = desiredFullJid->withResource(this->client->displayName());
-HXLINE(1325)			 ::borogove::Client _hx_tmp1 = this->client;
-HXDLIN(1325)			_hx_tmp1->sendPresence(desiredFullJid1->asString(),null());
-            		}
-HXLINE(1329)		this->inSync = false;
-HXLINE(1330)		::Dynamic _hx_tmp2 = this->persistence;
-HXDLIN(1330)		::String _hx_tmp3 = this->client->accountId();
-HXDLIN(1330)		::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::lastId(_hx_tmp2,_hx_tmp3,this->chatId),this->doSync_dyn(),null());
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1325_selfPingSuccess)
+HXLINE(1326)		::String _hx_tmp = this->nickInUse();
+HXDLIN(1326)		if ((_hx_tmp != this->client->displayName())) {
+HXLINE(1327)			 ::borogove::JID desiredFullJid = ::borogove::JID_obj::parse(this->chatId);
+HXDLIN(1327)			 ::borogove::JID desiredFullJid1 = desiredFullJid->withResource(this->client->displayName());
+HXLINE(1328)			 ::borogove::Client _hx_tmp1 = this->client;
+HXDLIN(1328)			_hx_tmp1->sendPresence(desiredFullJid1->asString(),null());
+            		}
+HXLINE(1332)		this->inSync = false;
+HXLINE(1333)		::Dynamic _hx_tmp2 = this->persistence;
+HXDLIN(1333)		::String _hx_tmp3 = this->client->accountId();
+HXDLIN(1333)		::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::lastId(_hx_tmp2,_hx_tmp3,this->chatId),this->doSync_dyn(),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Channel_obj,selfPingSuccess,(void))
 
 ::String Channel_obj::getDisplayName(){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1333_getDisplayName)
-HXLINE(1334)		if ((this->displayName == this->chatId)) {
-HXLINE(1335)			 ::borogove::Stanza tmp = this->info();
-HXDLIN(1335)			 ::borogove::Stanza tmp1;
-HXDLIN(1335)			if (::hx::IsNotNull( tmp )) {
-HXLINE(1335)				tmp1 = ::borogove::_DataForm::DataForm_Impl__obj::field(tmp,HX_("muc#roomconfig_roomname",c0,87,9a,72));
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1336_getDisplayName)
+HXLINE(1337)		if ((this->displayName == this->chatId)) {
+HXLINE(1338)			 ::borogove::Stanza tmp = this->info();
+HXDLIN(1338)			 ::borogove::Stanza tmp1;
+HXDLIN(1338)			if (::hx::IsNotNull( tmp )) {
+HXLINE(1338)				tmp1 = ::borogove::_DataForm::DataForm_Impl__obj::field(tmp,HX_("muc#roomconfig_roomname",c0,87,9a,72));
             			}
             			else {
-HXLINE(1335)				tmp1 = null();
+HXLINE(1338)				tmp1 = null();
             			}
-HXDLIN(1335)			::Array< ::String > tmp2;
-HXDLIN(1335)			if (::hx::IsNotNull( tmp1 )) {
-HXLINE(1335)				tmp2 = ::borogove::_DataForm::Field_Impl__obj::get_value(tmp1);
+HXDLIN(1338)			::Array< ::String > tmp2;
+HXDLIN(1338)			if (::hx::IsNotNull( tmp1 )) {
+HXLINE(1338)				tmp2 = ::borogove::_DataForm::Field_Impl__obj::get_value(tmp1);
             			}
             			else {
-HXLINE(1335)				tmp2 = null();
+HXLINE(1338)				tmp2 = null();
             			}
-HXDLIN(1335)			::Array< ::String > title;
-HXDLIN(1335)			if (::hx::IsNotNull( tmp2 )) {
-HXLINE(1335)				title = tmp2;
+HXDLIN(1338)			::Array< ::String > title;
+HXDLIN(1338)			if (::hx::IsNotNull( tmp2 )) {
+HXLINE(1338)				title = tmp2;
             			}
             			else {
-HXLINE(1335)				title = ::Array_obj< ::String >::__new(0);
+HXLINE(1338)				title = ::Array_obj< ::String >::__new(0);
             			}
-HXDLIN(1335)			::String title1 = title->join(HX_("\n",0a,00,00,00));
-HXLINE(1336)			bool _hx_tmp;
-HXDLIN(1336)			if (::hx::IsNotNull( title1 )) {
-HXLINE(1336)				_hx_tmp = (title1 != HX_("",00,00,00,00));
+HXDLIN(1338)			::String title1 = title->join(HX_("\n",0a,00,00,00));
+HXLINE(1339)			bool _hx_tmp;
+HXDLIN(1339)			if (::hx::IsNotNull( title1 )) {
+HXLINE(1339)				_hx_tmp = (title1 != HX_("",00,00,00,00));
             			}
             			else {
-HXLINE(1336)				_hx_tmp = false;
+HXLINE(1339)				_hx_tmp = false;
             			}
-HXDLIN(1336)			if (_hx_tmp) {
-HXLINE(1336)				return title1;
+HXDLIN(1339)			if (_hx_tmp) {
+HXLINE(1339)				return title1;
             			}
             		}
-HXLINE(1339)		return this->super::getDisplayName();
+HXLINE(1342)		return this->super::getDisplayName();
             	}
 
 
 ::String Channel_obj::description(){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1343_description)
-HXDLIN(1343)		 ::borogove::Stanza tmp = this->info();
-HXDLIN(1343)		 ::borogove::Stanza tmp1;
-HXDLIN(1343)		if (::hx::IsNotNull( tmp )) {
-HXDLIN(1343)			tmp1 = ::borogove::_DataForm::DataForm_Impl__obj::field(tmp,HX_("muc#roominfo_description",4e,e4,04,f2));
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1346_description)
+HXDLIN(1346)		 ::borogove::Stanza tmp = this->info();
+HXDLIN(1346)		 ::borogove::Stanza tmp1;
+HXDLIN(1346)		if (::hx::IsNotNull( tmp )) {
+HXDLIN(1346)			tmp1 = ::borogove::_DataForm::DataForm_Impl__obj::field(tmp,HX_("muc#roominfo_description",4e,e4,04,f2));
             		}
             		else {
-HXDLIN(1343)			tmp1 = null();
+HXDLIN(1346)			tmp1 = null();
             		}
-HXDLIN(1343)		::Array< ::String > tmp2;
-HXDLIN(1343)		if (::hx::IsNotNull( tmp1 )) {
-HXDLIN(1343)			tmp2 = ::borogove::_DataForm::Field_Impl__obj::get_value(tmp1);
+HXDLIN(1346)		::Array< ::String > tmp2;
+HXDLIN(1346)		if (::hx::IsNotNull( tmp1 )) {
+HXDLIN(1346)			tmp2 = ::borogove::_DataForm::Field_Impl__obj::get_value(tmp1);
             		}
             		else {
-HXDLIN(1343)			tmp2 = null();
+HXDLIN(1346)			tmp2 = null();
             		}
-HXDLIN(1343)		::Array< ::String > _hx_tmp;
-HXDLIN(1343)		if (::hx::IsNotNull( tmp2 )) {
-HXDLIN(1343)			_hx_tmp = tmp2;
+HXDLIN(1346)		::Array< ::String > _hx_tmp;
+HXDLIN(1346)		if (::hx::IsNotNull( tmp2 )) {
+HXDLIN(1346)			_hx_tmp = tmp2;
             		}
             		else {
-HXDLIN(1343)			_hx_tmp = ::Array_obj< ::String >::__new(0);
+HXDLIN(1346)			_hx_tmp = ::Array_obj< ::String >::__new(0);
             		}
-HXDLIN(1343)		return _hx_tmp->join(HX_("\n",0a,00,00,00));
+HXDLIN(1346)		return _hx_tmp->join(HX_("\n",0a,00,00,00));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Channel_obj,description,return )
 
  ::borogove::Stanza Channel_obj::info(){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1347_info)
-HXDLIN(1347)		 ::borogove::Caps tmp = this->disco;
-HXDLIN(1347)		::Array< ::Dynamic> tmp1;
-HXDLIN(1347)		if (::hx::IsNotNull( tmp )) {
-HXDLIN(1347)			tmp1 = tmp->data;
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1350_info)
+HXDLIN(1350)		 ::borogove::Caps tmp = this->disco;
+HXDLIN(1350)		::Array< ::Dynamic> tmp1;
+HXDLIN(1350)		if (::hx::IsNotNull( tmp )) {
+HXDLIN(1350)			tmp1 = tmp->data;
             		}
             		else {
-HXDLIN(1347)			tmp1 = null();
+HXDLIN(1350)			tmp1 = null();
             		}
-HXDLIN(1347)		if (::hx::IsNotNull( tmp1 )) {
+HXDLIN(1350)		if (::hx::IsNotNull( tmp1 )) {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             			bool _hx_run( ::borogove::Stanza d){
-            				HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1347_info)
-HXDLIN(1347)				 ::borogove::Stanza tmp = ::borogove::_DataForm::DataForm_Impl__obj::field(d,HX_("FORM_TYPE",d5,96,c9,5a));
-HXDLIN(1347)				::Array< ::String > tmp1;
-HXDLIN(1347)				if (::hx::IsNotNull( tmp )) {
-HXDLIN(1347)					tmp1 = ::borogove::_DataForm::Field_Impl__obj::get_value(tmp);
+            				HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1350_info)
+HXDLIN(1350)				 ::borogove::Stanza tmp = ::borogove::_DataForm::DataForm_Impl__obj::field(d,HX_("FORM_TYPE",d5,96,c9,5a));
+HXDLIN(1350)				::Array< ::String > tmp1;
+HXDLIN(1350)				if (::hx::IsNotNull( tmp )) {
+HXDLIN(1350)					tmp1 = ::borogove::_DataForm::Field_Impl__obj::get_value(tmp);
             				}
             				else {
-HXDLIN(1347)					tmp1 = null();
+HXDLIN(1350)					tmp1 = null();
             				}
-HXDLIN(1347)				::String _hx_tmp;
-HXDLIN(1347)				if (::hx::IsNotNull( tmp1 )) {
-HXDLIN(1347)					_hx_tmp = tmp1->__get(0);
+HXDLIN(1350)				::String _hx_tmp;
+HXDLIN(1350)				if (::hx::IsNotNull( tmp1 )) {
+HXDLIN(1350)					_hx_tmp = tmp1->__get(0);
             				}
             				else {
-HXDLIN(1347)					_hx_tmp = null();
+HXDLIN(1350)					_hx_tmp = null();
             				}
-HXDLIN(1347)				return (_hx_tmp == HX_("http://jabber.org/protocol/muc#roominfo",45,80,4f,bc));
+HXDLIN(1350)				return (_hx_tmp == HX_("http://jabber.org/protocol/muc#roominfo",45,80,4f,bc));
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-HXDLIN(1347)			return ( ( ::borogove::Stanza)(::Lambda_obj::find(tmp1, ::Dynamic(new _hx_Closure_0()))) );
+HXDLIN(1350)			return ( ( ::borogove::Stanza)(::Lambda_obj::find(tmp1, ::Dynamic(new _hx_Closure_0()))) );
             		}
             		else {
-HXDLIN(1347)			return null();
+HXDLIN(1350)			return null();
             		}
-HXDLIN(1347)		return null();
+HXDLIN(1350)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Channel_obj,info,return )
 
 void Channel_obj::invite( ::borogove::Chat chat,::String threadId){
-            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1351_invite)
-HXLINE(1352)		if (this->isPrivate()) {
-HXLINE(1353)			 ::borogove::Client _hx_tmp = this->client;
-HXDLIN(1353)			_hx_tmp->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1354_invite)
+HXLINE(1355)		if (this->isPrivate()) {
+HXLINE(1356)			 ::borogove::Client _hx_tmp = this->client;
+HXDLIN(1356)			_hx_tmp->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("to",7b,65,00,00),this->chatId)))->tag(HX_("query",08,8b,ea,5d), ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/muc#admin",d3,be,2f,5a))))->tag(HX_("item",13,c5,bf,45), ::Dynamic(::hx::Anon_obj::Create(2)
             				->setFixed(0,HX_("affiliation",b0,1a,35,a1),HX_("member",5a,e2,b5,04))
             				->setFixed(1,HX_("jid",c5,ca,50,00),chat->chatId)))->up()->up());
             		}
-HXLINE(1361)		this->super::invite(chat,threadId);
+HXLINE(1364)		this->super::invite(chat,threadId);
             	}
 
 
 bool Channel_obj::canInvite(){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1364_canInvite)
-HXLINE(1365)		if (!(this->isPrivate())) {
-HXLINE(1365)			return true;
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1367_canInvite)
+HXLINE(1368)		if (!(this->isPrivate())) {
+HXLINE(1368)			return true;
             		}
-HXLINE(1366)		if (::hx::IsNull( this->_nickInUse )) {
-HXLINE(1366)			return false;
-            		}
-HXLINE(1368)		 ::borogove::Presence p = ( ( ::borogove::Presence)(this->presence->get(this->_nickInUse)) );
-HXLINE(1369)		if (::hx::IsNull( p )) {
+HXLINE(1369)		if (::hx::IsNull( this->_nickInUse )) {
 HXLINE(1369)			return false;
             		}
-HXLINE(1371)		::String _hx_tmp;
-HXDLIN(1371)		 ::borogove::Stanza tmp = p->mucUser->getChild(HX_("item",13,c5,bf,45),null());
-HXDLIN(1371)		 ::Dynamic tmp1;
-HXDLIN(1371)		if (::hx::IsNotNull( tmp )) {
-HXLINE(1371)			tmp1 = tmp->attr;
+HXLINE(1371)		 ::borogove::Presence p = ( ( ::borogove::Presence)(this->presence->get(this->_nickInUse)) );
+HXLINE(1372)		if (::hx::IsNull( p )) {
+HXLINE(1372)			return false;
+            		}
+HXLINE(1374)		::String _hx_tmp;
+HXDLIN(1374)		 ::borogove::Stanza tmp = p->mucUser->getChild(HX_("item",13,c5,bf,45),null());
+HXDLIN(1374)		 ::Dynamic tmp1;
+HXDLIN(1374)		if (::hx::IsNotNull( tmp )) {
+HXLINE(1374)			tmp1 = tmp->attr;
             		}
             		else {
-HXLINE(1371)			tmp1 = null();
+HXLINE(1374)			tmp1 = null();
             		}
-HXDLIN(1371)		::String tmp2;
-HXDLIN(1371)		if (::hx::IsNotNull( tmp1 )) {
-HXLINE(1371)			tmp2 = ( (::String)(::Reflect_obj::field(tmp1,HX_("role",76,eb,ae,4b))) );
+HXDLIN(1374)		::String tmp2;
+HXDLIN(1374)		if (::hx::IsNotNull( tmp1 )) {
+HXLINE(1374)			tmp2 = ( (::String)(::Reflect_obj::field(tmp1,HX_("role",76,eb,ae,4b))) );
             		}
             		else {
-HXLINE(1371)			tmp2 = null();
+HXLINE(1374)			tmp2 = null();
             		}
-HXDLIN(1371)		if (::hx::IsNotNull( tmp2 )) {
-HXLINE(1371)			_hx_tmp = tmp2;
+HXDLIN(1374)		if (::hx::IsNotNull( tmp2 )) {
+HXLINE(1374)			_hx_tmp = tmp2;
             		}
             		else {
-HXLINE(1371)			_hx_tmp = HX_("none",b8,12,0a,49);
+HXLINE(1374)			_hx_tmp = HX_("none",b8,12,0a,49);
             		}
-HXDLIN(1371)		if ((_hx_tmp == HX_("moderator",05,40,3b,22))) {
-HXLINE(1371)			return true;
+HXDLIN(1374)		if ((_hx_tmp == HX_("moderator",05,40,3b,22))) {
+HXLINE(1374)			return true;
             		}
-HXLINE(1373)		return false;
+HXLINE(1376)		return false;
             	}
 
 
 bool Channel_obj::canSend(){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1376_canSend)
-HXLINE(1377)		if (!(this->super::canSend())) {
-HXLINE(1377)			return false;
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1379_canSend)
+HXLINE(1380)		if (!(this->super::canSend())) {
+HXLINE(1380)			return false;
             		}
-HXLINE(1378)		if (::hx::IsNull( this->_nickInUse )) {
-HXLINE(1378)			return true;
-            		}
-HXLINE(1380)		 ::borogove::Presence p = ( ( ::borogove::Presence)(this->presence->get(this->_nickInUse)) );
-HXLINE(1381)		if (::hx::IsNull( p )) {
+HXLINE(1381)		if (::hx::IsNull( this->_nickInUse )) {
 HXLINE(1381)			return true;
             		}
-HXLINE(1383)		::String _hx_tmp;
-HXDLIN(1383)		 ::borogove::Stanza tmp = p->mucUser->getChild(HX_("item",13,c5,bf,45),null());
-HXDLIN(1383)		 ::Dynamic tmp1;
-HXDLIN(1383)		if (::hx::IsNotNull( tmp )) {
-HXLINE(1383)			tmp1 = tmp->attr;
+HXLINE(1383)		 ::borogove::Presence p = ( ( ::borogove::Presence)(this->presence->get(this->_nickInUse)) );
+HXLINE(1384)		if (::hx::IsNull( p )) {
+HXLINE(1384)			return true;
+            		}
+HXLINE(1386)		::String _hx_tmp;
+HXDLIN(1386)		 ::borogove::Stanza tmp = p->mucUser->getChild(HX_("item",13,c5,bf,45),null());
+HXDLIN(1386)		 ::Dynamic tmp1;
+HXDLIN(1386)		if (::hx::IsNotNull( tmp )) {
+HXLINE(1386)			tmp1 = tmp->attr;
             		}
             		else {
-HXLINE(1383)			tmp1 = null();
+HXLINE(1386)			tmp1 = null();
             		}
-HXDLIN(1383)		::String tmp2;
-HXDLIN(1383)		if (::hx::IsNotNull( tmp1 )) {
-HXLINE(1383)			tmp2 = ( (::String)(::Reflect_obj::field(tmp1,HX_("role",76,eb,ae,4b))) );
+HXDLIN(1386)		::String tmp2;
+HXDLIN(1386)		if (::hx::IsNotNull( tmp1 )) {
+HXLINE(1386)			tmp2 = ( (::String)(::Reflect_obj::field(tmp1,HX_("role",76,eb,ae,4b))) );
             		}
             		else {
-HXLINE(1383)			tmp2 = null();
+HXLINE(1386)			tmp2 = null();
             		}
-HXDLIN(1383)		if (::hx::IsNotNull( tmp2 )) {
-HXLINE(1383)			_hx_tmp = tmp2;
+HXDLIN(1386)		if (::hx::IsNotNull( tmp2 )) {
+HXLINE(1386)			_hx_tmp = tmp2;
             		}
             		else {
-HXLINE(1383)			_hx_tmp = HX_("none",b8,12,0a,49);
+HXLINE(1386)			_hx_tmp = HX_("none",b8,12,0a,49);
             		}
-HXDLIN(1383)		return (_hx_tmp != HX_("visitor",ae,23,32,a3));
+HXDLIN(1386)		return (_hx_tmp != HX_("visitor",ae,23,32,a3));
             	}
 
 
  ::Dynamic Channel_obj::getCaps(){
-            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1388_getCaps)
-HXDLIN(1388)		 ::haxe::ds::StringMap _g =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXDLIN(1388)		_g->set(HX_("",00,00,00,00),this->disco);
-HXDLIN(1388)		return  ::haxe::iterators::MapKeyValueIterator_obj::__alloc( HX_CTX ,_g);
+            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1391_getCaps)
+HXDLIN(1391)		 ::haxe::ds::StringMap _g =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXDLIN(1391)		_g->set(HX_("",00,00,00,00),this->disco);
+HXDLIN(1391)		return  ::haxe::iterators::MapKeyValueIterator_obj::__alloc( HX_CTX ,_g);
             	}
 
 
 void Channel_obj::setPresence(::String resource, ::borogove::Presence presence){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1392_setPresence)
-HXLINE(1393)		 ::borogove::Stanza tmp;
-HXDLIN(1393)		if (::hx::IsNotNull( presence )) {
-HXLINE(1393)			tmp = presence->mucUser;
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1395_setPresence)
+HXLINE(1396)		 ::borogove::Stanza tmp;
+HXDLIN(1396)		if (::hx::IsNotNull( presence )) {
+HXLINE(1396)			tmp = presence->mucUser;
             		}
             		else {
-HXLINE(1393)			tmp = null();
-            		}
-HXDLIN(1393)		::Array< ::String > tmp1;
-HXDLIN(1393)		if (::hx::IsNotNull( tmp )) {
-HXLINE(1393)			::Array< ::Dynamic> _this = tmp->allTags(HX_("status",32,e7,fb,05),null());
-HXDLIN(1393)			::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
-HXDLIN(1393)			{
-HXLINE(1393)				int _g = 0;
-HXDLIN(1393)				int _g1 = _this->length;
-HXDLIN(1393)				while((_g < _g1)){
-HXLINE(1393)					_g = (_g + 1);
-HXDLIN(1393)					int i = (_g - 1);
-HXDLIN(1393)					{
-HXLINE(1393)						::String inValue = ( (::String)(::Reflect_obj::field(( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this,i)) )->attr,HX_("code",2d,b1,c4,41))) );
-HXDLIN(1393)						result->__unsafe_set(i,inValue);
+HXLINE(1396)			tmp = null();
+            		}
+HXDLIN(1396)		::Array< ::String > tmp1;
+HXDLIN(1396)		if (::hx::IsNotNull( tmp )) {
+HXLINE(1396)			::Array< ::Dynamic> _this = tmp->allTags(HX_("status",32,e7,fb,05),null());
+HXDLIN(1396)			::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
+HXDLIN(1396)			{
+HXLINE(1396)				int _g = 0;
+HXDLIN(1396)				int _g1 = _this->length;
+HXDLIN(1396)				while((_g < _g1)){
+HXLINE(1396)					_g = (_g + 1);
+HXDLIN(1396)					int i = (_g - 1);
+HXDLIN(1396)					{
+HXLINE(1396)						::String inValue = ( (::String)(::Reflect_obj::field(( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this,i)) )->attr,HX_("code",2d,b1,c4,41))) );
+HXDLIN(1396)						result->__unsafe_set(i,inValue);
             					}
             				}
             			}
-HXDLIN(1393)			tmp1 = result;
+HXDLIN(1396)			tmp1 = result;
             		}
             		else {
-HXLINE(1393)			tmp1 = null();
+HXLINE(1396)			tmp1 = null();
             		}
-HXDLIN(1393)		::String oneTen;
-HXDLIN(1393)		if (::hx::IsNotNull( tmp1 )) {
+HXDLIN(1396)		::String oneTen;
+HXDLIN(1396)		if (::hx::IsNotNull( tmp1 )) {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             			bool _hx_run(::String status){
-            				HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1393_setPresence)
-HXLINE(1393)				return (status == HX_("110",50,59,25,00));
+            				HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1396_setPresence)
+HXLINE(1396)				return (status == HX_("110",50,59,25,00));
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1393)			oneTen = ( (::String)(::Lambda_obj::find(tmp1, ::Dynamic(new _hx_Closure_0()))) );
+HXLINE(1396)			oneTen = ( (::String)(::Lambda_obj::find(tmp1, ::Dynamic(new _hx_Closure_0()))) );
             		}
             		else {
-HXLINE(1393)			oneTen = null();
+HXLINE(1396)			oneTen = null();
             		}
-HXLINE(1394)		if (::hx::IsNotNull( oneTen )) {
-HXLINE(1395)			this->_nickInUse = resource;
-HXLINE(1396)			this->outbox->start();
+HXLINE(1397)		if (::hx::IsNotNull( oneTen )) {
+HXLINE(1398)			this->_nickInUse = resource;
+HXLINE(1399)			this->outbox->start();
             		}
             		else {
-HXLINE(1397)			if ((resource == this->_nickInUse)) {
-HXLINE(1398)				this->_nickInUse = null();
-HXLINE(1399)				this->outbox->pause();
+HXLINE(1400)			if ((resource == this->_nickInUse)) {
+HXLINE(1401)				this->_nickInUse = null();
+HXLINE(1402)				this->outbox->pause();
             			}
             		}
-HXLINE(1401)		bool _hx_tmp;
-HXDLIN(1401)		bool _hx_tmp1;
-HXDLIN(1401)		if (::hx::IsNotNull( presence )) {
-HXLINE(1401)			_hx_tmp1 = ::hx::IsNotNull( presence->mucUser );
+HXLINE(1404)		bool _hx_tmp;
+HXDLIN(1404)		bool _hx_tmp1;
+HXDLIN(1404)		if (::hx::IsNotNull( presence )) {
+HXLINE(1404)			_hx_tmp1 = ::hx::IsNotNull( presence->mucUser );
             		}
             		else {
-HXLINE(1401)			_hx_tmp1 = false;
+HXLINE(1404)			_hx_tmp1 = false;
             		}
-HXDLIN(1401)		if (_hx_tmp1) {
-HXLINE(1401)			_hx_tmp = ::hx::IsNull( oneTen );
+HXDLIN(1404)		if (_hx_tmp1) {
+HXLINE(1404)			_hx_tmp = ::hx::IsNull( oneTen );
             		}
             		else {
-HXLINE(1401)			_hx_tmp = false;
-            		}
-HXDLIN(1401)		if (_hx_tmp) {
-HXLINE(1402)			 ::borogove::Presence existing = ( ( ::borogove::Presence)(this->presence->get(resource)) );
-HXLINE(1403)			bool _hx_tmp2;
-HXDLIN(1403)			if (::hx::IsNotNull( existing )) {
-HXLINE(1403)				 ::borogove::Stanza tmp2;
-HXDLIN(1403)				if (::hx::IsNotNull( existing )) {
-HXLINE(1403)					tmp2 = existing->mucUser;
+HXLINE(1404)			_hx_tmp = false;
+            		}
+HXDLIN(1404)		if (_hx_tmp) {
+HXLINE(1405)			 ::borogove::Presence existing = ( ( ::borogove::Presence)(this->presence->get(resource)) );
+HXLINE(1406)			bool _hx_tmp2;
+HXDLIN(1406)			if (::hx::IsNotNull( existing )) {
+HXLINE(1406)				 ::borogove::Stanza tmp2;
+HXDLIN(1406)				if (::hx::IsNotNull( existing )) {
+HXLINE(1406)					tmp2 = existing->mucUser;
             				}
             				else {
-HXLINE(1403)					tmp2 = null();
+HXLINE(1406)					tmp2 = null();
             				}
-HXDLIN(1403)				::Array< ::String > tmp3;
-HXDLIN(1403)				if (::hx::IsNotNull( tmp2 )) {
-HXLINE(1403)					::Array< ::Dynamic> _this1 = tmp2->allTags(HX_("status",32,e7,fb,05),null());
-HXDLIN(1403)					::Array< ::String > result1 = ::Array_obj< ::String >::__new(_this1->length);
-HXDLIN(1403)					{
-HXLINE(1403)						int _g2 = 0;
-HXDLIN(1403)						int _g3 = _this1->length;
-HXDLIN(1403)						while((_g2 < _g3)){
-HXLINE(1403)							_g2 = (_g2 + 1);
-HXDLIN(1403)							int i1 = (_g2 - 1);
-HXDLIN(1403)							{
-HXLINE(1403)								::String inValue1 = ( (::String)(::Reflect_obj::field(( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this1,i1)) )->attr,HX_("code",2d,b1,c4,41))) );
-HXDLIN(1403)								result1->__unsafe_set(i1,inValue1);
+HXDLIN(1406)				::Array< ::String > tmp3;
+HXDLIN(1406)				if (::hx::IsNotNull( tmp2 )) {
+HXLINE(1406)					::Array< ::Dynamic> _this1 = tmp2->allTags(HX_("status",32,e7,fb,05),null());
+HXDLIN(1406)					::Array< ::String > result1 = ::Array_obj< ::String >::__new(_this1->length);
+HXDLIN(1406)					{
+HXLINE(1406)						int _g2 = 0;
+HXDLIN(1406)						int _g3 = _this1->length;
+HXDLIN(1406)						while((_g2 < _g3)){
+HXLINE(1406)							_g2 = (_g2 + 1);
+HXDLIN(1406)							int i1 = (_g2 - 1);
+HXDLIN(1406)							{
+HXLINE(1406)								::String inValue1 = ( (::String)(::Reflect_obj::field(( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this1,i1)) )->attr,HX_("code",2d,b1,c4,41))) );
+HXDLIN(1406)								result1->__unsafe_set(i1,inValue1);
             							}
             						}
             					}
-HXDLIN(1403)					tmp3 = result1;
+HXDLIN(1406)					tmp3 = result1;
             				}
             				else {
-HXLINE(1403)					tmp3 = null();
+HXLINE(1406)					tmp3 = null();
             				}
-HXDLIN(1403)				::String _hx_tmp3;
-HXDLIN(1403)				if (::hx::IsNotNull( tmp3 )) {
+HXDLIN(1406)				::String _hx_tmp3;
+HXDLIN(1406)				if (::hx::IsNotNull( tmp3 )) {
             					HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             					bool _hx_run(::String status){
-            						HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1403_setPresence)
-HXLINE(1403)						return (status == HX_("110",50,59,25,00));
+            						HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1406_setPresence)
+HXLINE(1406)						return (status == HX_("110",50,59,25,00));
             					}
             					HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1403)					_hx_tmp3 = ( (::String)(::Lambda_obj::find(tmp3, ::Dynamic(new _hx_Closure_1()))) );
+HXLINE(1406)					_hx_tmp3 = ( (::String)(::Lambda_obj::find(tmp3, ::Dynamic(new _hx_Closure_1()))) );
             				}
             				else {
-HXLINE(1403)					_hx_tmp3 = null();
+HXLINE(1406)					_hx_tmp3 = null();
             				}
-HXDLIN(1403)				_hx_tmp2 = ::hx::IsNotNull( _hx_tmp3 );
+HXDLIN(1406)				_hx_tmp2 = ::hx::IsNotNull( _hx_tmp3 );
             			}
             			else {
-HXLINE(1403)				_hx_tmp2 = false;
+HXLINE(1406)				_hx_tmp2 = false;
             			}
-HXDLIN(1403)			if (_hx_tmp2) {
-HXLINE(1405)				presence->mucUser->tag(HX_("status",32,e7,fb,05), ::Dynamic(::hx::Anon_obj::Create(1)
+HXDLIN(1406)			if (_hx_tmp2) {
+HXLINE(1408)				presence->mucUser->tag(HX_("status",32,e7,fb,05), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("code",2d,b1,c4,41),HX_("110",50,59,25,00))))->up();
-HXLINE(1406)				this->setPresence(resource,presence);
-HXLINE(1407)				return;
+HXLINE(1409)				this->setPresence(resource,presence);
+HXLINE(1410)				return;
             			}
             		}
-HXLINE(1410)		this->super::setPresence(resource,presence);
-HXLINE(1411)		 ::borogove::Stanza tmp4;
-HXDLIN(1411)		if (::hx::IsNotNull( presence )) {
-HXLINE(1411)			tmp4 = presence->mucUser;
+HXLINE(1413)		this->super::setPresence(resource,presence);
+HXLINE(1414)		 ::borogove::Stanza tmp4;
+HXDLIN(1414)		if (::hx::IsNotNull( presence )) {
+HXLINE(1414)			tmp4 = presence->mucUser;
             		}
             		else {
-HXLINE(1411)			tmp4 = null();
-            		}
-HXDLIN(1411)		::Array< ::String > tmp5;
-HXDLIN(1411)		if (::hx::IsNotNull( tmp4 )) {
-HXLINE(1411)			::Array< ::Dynamic> _this2 = tmp4->allTags(HX_("status",32,e7,fb,05),null());
-HXDLIN(1411)			::Array< ::String > result2 = ::Array_obj< ::String >::__new(_this2->length);
-HXDLIN(1411)			{
-HXLINE(1411)				int _g4 = 0;
-HXDLIN(1411)				int _g5 = _this2->length;
-HXDLIN(1411)				while((_g4 < _g5)){
-HXLINE(1411)					_g4 = (_g4 + 1);
-HXDLIN(1411)					int i2 = (_g4 - 1);
-HXDLIN(1411)					{
-HXLINE(1411)						::String inValue2 = ( (::String)(::Reflect_obj::field(( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this2,i2)) )->attr,HX_("code",2d,b1,c4,41))) );
-HXDLIN(1411)						result2->__unsafe_set(i2,inValue2);
+HXLINE(1414)			tmp4 = null();
+            		}
+HXDLIN(1414)		::Array< ::String > tmp5;
+HXDLIN(1414)		if (::hx::IsNotNull( tmp4 )) {
+HXLINE(1414)			::Array< ::Dynamic> _this2 = tmp4->allTags(HX_("status",32,e7,fb,05),null());
+HXDLIN(1414)			::Array< ::String > result2 = ::Array_obj< ::String >::__new(_this2->length);
+HXDLIN(1414)			{
+HXLINE(1414)				int _g4 = 0;
+HXDLIN(1414)				int _g5 = _this2->length;
+HXDLIN(1414)				while((_g4 < _g5)){
+HXLINE(1414)					_g4 = (_g4 + 1);
+HXDLIN(1414)					int i2 = (_g4 - 1);
+HXDLIN(1414)					{
+HXLINE(1414)						::String inValue2 = ( (::String)(::Reflect_obj::field(( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this2,i2)) )->attr,HX_("code",2d,b1,c4,41))) );
+HXDLIN(1414)						result2->__unsafe_set(i2,inValue2);
             					}
             				}
             			}
-HXDLIN(1411)			tmp5 = result2;
+HXDLIN(1414)			tmp5 = result2;
             		}
             		else {
-HXLINE(1411)			tmp5 = null();
+HXLINE(1414)			tmp5 = null();
             		}
-HXDLIN(1411)		::String tripleThree;
-HXDLIN(1411)		if (::hx::IsNotNull( tmp5 )) {
+HXDLIN(1414)		::String tripleThree;
+HXDLIN(1414)		if (::hx::IsNotNull( tmp5 )) {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_2) HXARGC(1)
             			bool _hx_run(::String status){
-            				HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1411_setPresence)
-HXLINE(1411)				return (status == HX_("333",93,df,26,00));
+            				HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1414_setPresence)
+HXLINE(1414)				return (status == HX_("333",93,df,26,00));
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1411)			tripleThree = ( (::String)(::Lambda_obj::find(tmp5, ::Dynamic(new _hx_Closure_2()))) );
+HXLINE(1414)			tripleThree = ( (::String)(::Lambda_obj::find(tmp5, ::Dynamic(new _hx_Closure_2()))) );
             		}
             		else {
-HXLINE(1411)			tripleThree = null();
+HXLINE(1414)			tripleThree = null();
             		}
-HXLINE(1412)		bool _hx_tmp4;
-HXDLIN(1412)		if (::hx::IsNotNull( oneTen )) {
-HXLINE(1412)			_hx_tmp4 = ::hx::IsNotNull( tripleThree );
+HXLINE(1415)		bool _hx_tmp4;
+HXDLIN(1415)		if (::hx::IsNotNull( oneTen )) {
+HXLINE(1415)			_hx_tmp4 = ::hx::IsNotNull( tripleThree );
             		}
             		else {
-HXLINE(1412)			_hx_tmp4 = false;
+HXLINE(1415)			_hx_tmp4 = false;
             		}
-HXDLIN(1412)		if (_hx_tmp4) {
-HXLINE(1413)			this->selfPing(true);
+HXDLIN(1415)		if (_hx_tmp4) {
+HXLINE(1416)			this->selfPing(true);
             		}
             	}
 
@@ -831,10 +840,10 @@ HXLINE(1413)			this->selfPing(true);
 void Channel_obj::doSync(::String lastId){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Channel,_gthis) HXARGC(2)
             		 ::borogove::ChatMessageBuilder _hx_run( ::borogove::ChatMessageBuilder builder, ::borogove::Stanza stanza){
-            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1434_doSync)
-HXLINE(1435)			builder = _gthis->prepareIncomingMessage(builder,stanza);
-HXLINE(1436)			builder->syncPoint = true;
-HXLINE(1437)			return builder;
+            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1437_doSync)
+HXLINE(1438)			builder = _gthis->prepareIncomingMessage(builder,stanza);
+HXLINE(1439)			builder->syncPoint = true;
+HXLINE(1440)			return builder;
             		}
             		HX_END_LOCAL_FUNC2(return)
 
@@ -842,178 +851,178 @@ HXLINE(1437)			return builder;
             		void _hx_run( ::Dynamic messageList){
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_8, ::borogove::Channel,_gthis,::Array< ::Dynamic>,chatMessages) HXARGC(1)
             			void _hx_run(::Array< ::Dynamic> stored){
-            				HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1470_doSync)
-HXLINE(1471)				{
-HXLINE(1471)					int _g = 0;
-HXDLIN(1471)					while((_g < stored->length)){
-HXLINE(1471)						::Array< ::Dynamic> messages = stored->__get(_g).StaticCast< ::Array< ::Dynamic> >();
-HXDLIN(1471)						_g = (_g + 1);
-HXLINE(1472)						if (::hx::IsNotNull( messages )) {
-HXLINE(1473)							int _g1 = 0;
-HXDLIN(1473)							while((_g1 < messages->length)){
-HXLINE(1473)								 ::borogove::ChatMessage message = messages->__get(_g1).StaticCast<  ::borogove::ChatMessage >();
-HXDLIN(1473)								_g1 = (_g1 + 1);
-HXLINE(1474)								_gthis->client->notifySyncMessageHandlers(message);
-HXLINE(1475)								bool _hx_tmp;
-HXDLIN(1475)								if (::hx::IsNotNull( message )) {
-HXLINE(1475)									::String _hx_tmp1 = message->chatId();
-HXDLIN(1475)									_hx_tmp = (_hx_tmp1 == _gthis->chatId);
+            				HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1473_doSync)
+HXLINE(1474)				{
+HXLINE(1474)					int _g = 0;
+HXDLIN(1474)					while((_g < stored->length)){
+HXLINE(1474)						::Array< ::Dynamic> messages = stored->__get(_g).StaticCast< ::Array< ::Dynamic> >();
+HXDLIN(1474)						_g = (_g + 1);
+HXLINE(1475)						if (::hx::IsNotNull( messages )) {
+HXLINE(1476)							int _g1 = 0;
+HXDLIN(1476)							while((_g1 < messages->length)){
+HXLINE(1476)								 ::borogove::ChatMessage message = messages->__get(_g1).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN(1476)								_g1 = (_g1 + 1);
+HXLINE(1477)								_gthis->client->notifySyncMessageHandlers(message);
+HXLINE(1478)								bool _hx_tmp;
+HXDLIN(1478)								if (::hx::IsNotNull( message )) {
+HXLINE(1478)									::String _hx_tmp1 = message->chatId();
+HXDLIN(1478)									_hx_tmp = (_hx_tmp1 == _gthis->chatId);
             								}
             								else {
-HXLINE(1475)									_hx_tmp = false;
+HXLINE(1478)									_hx_tmp = false;
             								}
-HXDLIN(1475)								if (_hx_tmp) {
-HXLINE(1475)									chatMessages->push(message);
+HXDLIN(1478)								if (_hx_tmp) {
+HXLINE(1478)									chatMessages->push(message);
             								}
-HXLINE(1476)								if ((chatMessages->length > 1000)) {
-HXLINE(1476)									chatMessages->shift().StaticCast<  ::borogove::ChatMessage >();
+HXLINE(1479)								if ((chatMessages->length > 1000)) {
+HXLINE(1479)									chatMessages->shift().StaticCast<  ::borogove::ChatMessage >();
             								}
             							}
             						}
             					}
             				}
-HXLINE(1480)				if (_gthis->sync->hasMore()) {
-HXLINE(1481)					_gthis->sync->fetchNext();
+HXLINE(1483)				if (_gthis->sync->hasMore()) {
+HXLINE(1484)					_gthis->sync->fetchNext();
             				}
             				else {
             					HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_6) HXARGC(2)
             					int _hx_run( ::borogove::ChatMessage x, ::borogove::ChatMessage y){
-            						HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1497_doSync)
-HXLINE(1497)						return ::Reflect_obj::compare(x->timestamp,y->timestamp);
+            						HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1500_doSync)
+HXLINE(1500)						return ::Reflect_obj::compare(x->timestamp,y->timestamp);
             					}
             					HX_END_LOCAL_FUNC2(return)
 
             					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_7, ::borogove::Channel,_gthis) HXARGC(1)
             					bool _hx_run( ::borogove::ChatMessage m){
-            						HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1505_doSync)
-HXLINE(1505)						::String m1 = m->serverId;
-HXDLIN(1505)						if ((m1 != _gthis->readUpTo())) {
-HXLINE(1505)							return !(m->isIncoming());
+            						HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1508_doSync)
+HXLINE(1508)						::String m1 = m->serverId;
+HXDLIN(1508)						if ((m1 != _gthis->readUpTo())) {
+HXLINE(1508)							return !(m->isIncoming());
             						}
             						else {
-HXLINE(1505)							return true;
+HXLINE(1508)							return true;
             						}
-HXDLIN(1505)						return false;
+HXDLIN(1508)						return false;
             					}
             					HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1483)					_gthis->inSync = true;
-HXLINE(1484)					_gthis->sync = null();
-HXLINE(1486)					 ::haxe::ds::StringMap serverIds =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE(1487)					::Array< ::Dynamic> dedupedMessages = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(1488)					chatMessages->reverse();
-HXLINE(1489)					{
-HXLINE(1489)						int _g2 = 0;
-HXDLIN(1489)						while((_g2 < chatMessages->length)){
-HXLINE(1489)							 ::borogove::ChatMessage m = chatMessages->__get(_g2).StaticCast<  ::borogove::ChatMessage >();
-HXDLIN(1489)							_g2 = (_g2 + 1);
-HXLINE(1490)							 ::Dynamic tmp = serverIds->get(m->serverId);
-HXDLIN(1490)							bool _hx_tmp2;
-HXDLIN(1490)							if (::hx::IsNotNull( tmp )) {
-HXLINE(1490)								_hx_tmp2 = ( (bool)(tmp) );
+HXLINE(1486)					_gthis->inSync = true;
+HXLINE(1487)					_gthis->sync = null();
+HXLINE(1489)					 ::haxe::ds::StringMap serverIds =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE(1490)					::Array< ::Dynamic> dedupedMessages = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1491)					chatMessages->reverse();
+HXLINE(1492)					{
+HXLINE(1492)						int _g2 = 0;
+HXDLIN(1492)						while((_g2 < chatMessages->length)){
+HXLINE(1492)							 ::borogove::ChatMessage m = chatMessages->__get(_g2).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN(1492)							_g2 = (_g2 + 1);
+HXLINE(1493)							 ::Dynamic tmp = serverIds->get(m->serverId);
+HXDLIN(1493)							bool _hx_tmp2;
+HXDLIN(1493)							if (::hx::IsNotNull( tmp )) {
+HXLINE(1493)								_hx_tmp2 = ( (bool)(tmp) );
             							}
             							else {
-HXLINE(1490)								_hx_tmp2 = false;
+HXLINE(1493)								_hx_tmp2 = false;
             							}
-HXDLIN(1490)							if (!(_hx_tmp2)) {
-HXLINE(1491)								dedupedMessages->unshift(m);
-HXLINE(1492)								serverIds->set(m->serverId,true);
+HXDLIN(1493)							if (!(_hx_tmp2)) {
+HXLINE(1494)								dedupedMessages->unshift(m);
+HXLINE(1495)								serverIds->set(m->serverId,true);
             							}
             						}
             					}
-HXLINE(1497)					dedupedMessages->sort( ::Dynamic(new _hx_Closure_6()));
-HXLINE(1499)					 ::borogove::ChatMessage lastFromSync = dedupedMessages->__get((dedupedMessages->length - 1)).StaticCast<  ::borogove::ChatMessage >();
-HXLINE(1500)					bool _hx_tmp3;
-HXDLIN(1500)					if (::hx::IsNotNull( lastFromSync )) {
-HXLINE(1500)						 ::borogove::ChatMessage tmp1 = _gthis->lastMessage;
-HXDLIN(1500)						::String _hx_tmp4;
-HXDLIN(1500)						if (::hx::IsNotNull( tmp1 )) {
-HXLINE(1500)							_hx_tmp4 = tmp1->timestamp;
+HXLINE(1500)					dedupedMessages->sort( ::Dynamic(new _hx_Closure_6()));
+HXLINE(1502)					 ::borogove::ChatMessage lastFromSync = dedupedMessages->__get((dedupedMessages->length - 1)).StaticCast<  ::borogove::ChatMessage >();
+HXLINE(1503)					bool _hx_tmp3;
+HXDLIN(1503)					if (::hx::IsNotNull( lastFromSync )) {
+HXLINE(1503)						 ::borogove::ChatMessage tmp1 = _gthis->lastMessage;
+HXDLIN(1503)						::String _hx_tmp4;
+HXDLIN(1503)						if (::hx::IsNotNull( tmp1 )) {
+HXLINE(1503)							_hx_tmp4 = tmp1->timestamp;
             						}
             						else {
-HXLINE(1500)							_hx_tmp4 = null();
+HXLINE(1503)							_hx_tmp4 = null();
             						}
-HXDLIN(1500)						if (::hx::IsNotNull( _hx_tmp4 )) {
-HXLINE(1500)							 ::borogove::ChatMessage tmp2 = _gthis->lastMessage;
-HXDLIN(1500)							::String _hx_tmp5;
-HXDLIN(1500)							if (::hx::IsNotNull( tmp2 )) {
-HXLINE(1500)								_hx_tmp5 = tmp2->timestamp;
+HXDLIN(1503)						if (::hx::IsNotNull( _hx_tmp4 )) {
+HXLINE(1503)							 ::borogove::ChatMessage tmp2 = _gthis->lastMessage;
+HXDLIN(1503)							::String _hx_tmp5;
+HXDLIN(1503)							if (::hx::IsNotNull( tmp2 )) {
+HXLINE(1503)								_hx_tmp5 = tmp2->timestamp;
             							}
             							else {
-HXLINE(1500)								_hx_tmp5 = null();
+HXLINE(1503)								_hx_tmp5 = null();
             							}
-HXDLIN(1500)							_hx_tmp3 = (::Reflect_obj::compare(lastFromSync->timestamp,_hx_tmp5) > 0);
+HXDLIN(1503)							_hx_tmp3 = (::Reflect_obj::compare(lastFromSync->timestamp,_hx_tmp5) > 0);
             						}
             						else {
-HXLINE(1500)							_hx_tmp3 = true;
+HXLINE(1503)							_hx_tmp3 = true;
             						}
             					}
             					else {
-HXLINE(1500)						_hx_tmp3 = false;
+HXLINE(1503)						_hx_tmp3 = false;
             					}
-HXDLIN(1500)					if (_hx_tmp3) {
-HXLINE(1501)						_gthis->setLastMessage(lastFromSync);
-HXLINE(1502)						_gthis->client->sortChats();
+HXDLIN(1503)					if (_hx_tmp3) {
+HXLINE(1504)						_gthis->setLastMessage(lastFromSync);
+HXLINE(1505)						_gthis->client->sortChats();
             					}
-HXLINE(1505)					int readIndex = ::borogove::Util_obj::findLastIndex(dedupedMessages, ::Dynamic(new _hx_Closure_7(_gthis)));
-HXLINE(1506)					if ((readIndex < 0)) {
-HXLINE(1507)						 ::borogove::Channel _gthis1 = _gthis;
-HXDLIN(1507)						int _hx_tmp6 = _gthis->unreadCount();
-HXDLIN(1507)						_gthis1->setUnreadCount((_hx_tmp6 + dedupedMessages->length));
+HXLINE(1508)					int readIndex = ::borogove::Util_obj::findLastIndex(dedupedMessages, ::Dynamic(new _hx_Closure_7(_gthis)));
+HXLINE(1509)					if ((readIndex < 0)) {
+HXLINE(1510)						 ::borogove::Channel _gthis1 = _gthis;
+HXDLIN(1510)						int _hx_tmp6 = _gthis->unreadCount();
+HXDLIN(1510)						_gthis1->setUnreadCount((_hx_tmp6 + dedupedMessages->length));
             					}
             					else {
-HXLINE(1509)						_gthis->setUnreadCount(((dedupedMessages->length - readIndex) - 1));
+HXLINE(1512)						_gthis->setUnreadCount(((dedupedMessages->length - readIndex) - 1));
             					}
-HXLINE(1511)					_gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
+HXLINE(1514)					_gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
             				}
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1440_doSync)
-HXLINE(1441)			::Array< ::Dynamic> promises = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(1442)			::Array< ::Dynamic> pageChatMessages = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(1443)			{
-HXLINE(1443)				int _g = 0;
-HXDLIN(1443)				::Array< ::Dynamic> _g1 = ( (::Array< ::Dynamic>)(messageList->__Field(HX_("messages",cc,d8,fd,34),::hx::paccDynamic)) );
-HXDLIN(1443)				while((_g < _g1->length)){
-HXLINE(1443)					 ::borogove::Message m = _g1->__get(_g).StaticCast<  ::borogove::Message >();
-HXDLIN(1443)					_g = (_g + 1);
-HXLINE(1444)					{
-HXLINE(1444)						 ::borogove::MessageStanza _g2 = m->parsed;
-HXDLIN(1444)						switch((int)(_g2->_hx_getIndex())){
+            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1443_doSync)
+HXLINE(1444)			::Array< ::Dynamic> promises = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1445)			::Array< ::Dynamic> pageChatMessages = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1446)			{
+HXLINE(1446)				int _g = 0;
+HXDLIN(1446)				::Array< ::Dynamic> _g1 = ( (::Array< ::Dynamic>)(messageList->__Field(HX_("messages",cc,d8,fd,34),::hx::paccDynamic)) );
+HXDLIN(1446)				while((_g < _g1->length)){
+HXLINE(1446)					 ::borogove::Message m = _g1->__get(_g).StaticCast<  ::borogove::Message >();
+HXDLIN(1446)					_g = (_g + 1);
+HXLINE(1447)					{
+HXLINE(1447)						 ::borogove::MessageStanza _g2 = m->parsed;
+HXDLIN(1447)						switch((int)(_g2->_hx_getIndex())){
             							case (int)0: {
             								HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             								::Array< ::Dynamic> _hx_run( ::borogove::ChatMessage m){
-            									HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1464_doSync)
-HXLINE(1464)									return ::Array_obj< ::Dynamic>::__new(1)->init(0,m);
+            									HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1467_doSync)
+HXLINE(1467)									return ::Array_obj< ::Dynamic>::__new(1)->init(0,m);
             								}
             								HX_END_LOCAL_FUNC1(return)
 
             								HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_2) HXARGC(1)
             								::Array< ::Dynamic> _hx_run( ::Dynamic _){
-            									HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1464_doSync)
-HXLINE(1464)									return ::Array_obj< ::Dynamic>::__new(0);
+            									HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1467_doSync)
+HXLINE(1467)									return ::Array_obj< ::Dynamic>::__new(0);
             								}
             								HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1459)								::Dynamic _gthis1 = _gthis->persistence;
-HXLINE(1460)								::String _hx_tmp = _gthis->client->accountId();
-HXLINE(1459)								promises->push(::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::updateMessageStatus(_gthis1,_hx_tmp,_g2->_hx_getString(0),3,_g2->_hx_getObject(1).StaticCast<  ::borogove::Stanza >()->getErrorText()), ::Dynamic(new _hx_Closure_1()), ::Dynamic(new _hx_Closure_2())));
+HXLINE(1462)								::Dynamic _gthis1 = _gthis->persistence;
+HXLINE(1463)								::String _hx_tmp = _gthis->client->accountId();
+HXLINE(1462)								promises->push(::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::updateMessageStatus(_gthis1,_hx_tmp,_g2->_hx_getString(0),3,_g2->_hx_getObject(1).StaticCast<  ::borogove::Stanza >()->getErrorText()), ::Dynamic(new _hx_Closure_1()), ::Dynamic(new _hx_Closure_2())));
             							}
             							break;
             							case (int)1: {
-HXLINE(1445)								 ::borogove::ChatMessage _g3 = _g2->_hx_getObject(0).StaticCast<  ::borogove::ChatMessage >();
-HXDLIN(1445)								{
-HXLINE(1446)									{
-HXLINE(1446)										int _g4 = 0;
-HXDLIN(1446)										::Array< ::Dynamic> _g5 = _g3->inlineHashReferences();
-HXDLIN(1446)										while((_g4 < _g5->length)){
-HXLINE(1446)											 ::borogove::Hash hash = _g5->__get(_g4).StaticCast<  ::borogove::Hash >();
-HXDLIN(1446)											_g4 = (_g4 + 1);
-HXLINE(1447)											_gthis->client->fetchMediaByHash(::Array_obj< ::Dynamic>::__new(1)->init(0,hash),::Array_obj< ::Dynamic>::__new(1)->init(0,_g3->from));
+HXLINE(1448)								 ::borogove::ChatMessage _g3 = _g2->_hx_getObject(0).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN(1448)								{
+HXLINE(1449)									{
+HXLINE(1449)										int _g4 = 0;
+HXDLIN(1449)										::Array< ::Dynamic> _g5 = _g3->inlineHashReferences();
+HXDLIN(1449)										while((_g4 < _g5->length)){
+HXLINE(1449)											 ::borogove::Hash hash = _g5->__get(_g4).StaticCast<  ::borogove::Hash >();
+HXDLIN(1449)											_g4 = (_g4 + 1);
+HXLINE(1450)											_gthis->client->fetchMediaByHash(::Array_obj< ::Dynamic>::__new(1)->init(0,hash),::Array_obj< ::Dynamic>::__new(1)->init(0,_g3->from));
             										}
             									}
-HXLINE(1449)									pageChatMessages->push(_g3);
+HXLINE(1452)									pageChatMessages->push(_g3);
             								}
             							}
             							break;
@@ -1022,30 +1031,30 @@ HXLINE(1449)									pageChatMessages->push(_g3);
             								void _hx_run( ::Dynamic resolve, ::Dynamic reject){
             									HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_3, ::Dynamic,resolve) HXARGC(1)
             									void _hx_run( ::borogove::ChatMessage _){
-            										HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1456_doSync)
-HXLINE(1456)										resolve(null());
+            										HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1459_doSync)
+HXLINE(1459)										resolve(null());
             									}
             									HX_END_LOCAL_FUNC1((void))
 
-            									HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1456_doSync)
-HXLINE(1456)									::thenshim::_Promise::Promise_Impl__obj::then(_gthis->client->moderateMessage(action), ::Dynamic(new _hx_Closure_3(resolve)),null());
+            									HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1459_doSync)
+HXLINE(1459)									::thenshim::_Promise::Promise_Impl__obj::then(_gthis->client->moderateMessage(action), ::Dynamic(new _hx_Closure_3(resolve)),null());
             								}
             								HX_END_LOCAL_FUNC2((void))
 
-HXLINE(1454)								 ::borogove::ModerationAction action = _g2->_hx_getObject(0).StaticCast<  ::borogove::ModerationAction >();
-HXLINE(1455)								promises->push(::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_4(_gthis,action))));
+HXLINE(1457)								 ::borogove::ModerationAction action = _g2->_hx_getObject(0).StaticCast<  ::borogove::ModerationAction >();
+HXLINE(1458)								promises->push(::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_4(_gthis,action))));
             							}
             							break;
             							case (int)3: {
             								HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_5) HXARGC(1)
             								::Dynamic _hx_run( ::borogove::ChatMessage _){
-            									HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1452_doSync)
-HXLINE(1452)									return null();
+            									HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1455_doSync)
+HXLINE(1455)									return null();
             								}
             								HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1452)								::Dynamic _gthis2 = _gthis->persistence;
-HXLINE(1451)								promises->push(::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeReaction(_gthis2,_gthis->client->accountId(),_g2->_hx_getObject(0).StaticCast<  ::borogove::ReactionUpdate >()), ::Dynamic(new _hx_Closure_5()),null()));
+HXLINE(1455)								::Dynamic _gthis2 = _gthis->persistence;
+HXLINE(1454)								promises->push(::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeReaction(_gthis2,_gthis->client->accountId(),_g2->_hx_getObject(0).StaticCast<  ::borogove::ReactionUpdate >()), ::Dynamic(new _hx_Closure_5()),null()));
             							}
             							break;
             							default:{
@@ -1054,97 +1063,97 @@ HXLINE(1451)								promises->push(::thenshim::_Promise::Promise_Impl__obj::then
             					}
             				}
             			}
-HXLINE(1469)			promises->push(_gthis->client->storeMessages(pageChatMessages));
-HXLINE(1470)			::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(promises), ::Dynamic(new _hx_Closure_8(_gthis,chatMessages)),null());
+HXLINE(1472)			promises->push(_gthis->client->storeMessages(pageChatMessages));
+HXLINE(1473)			::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(promises), ::Dynamic(new _hx_Closure_8(_gthis,chatMessages)),null());
             		}
             		HX_END_LOCAL_FUNC1((void))
 
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_10, ::borogove::Channel,_gthis,::String,lastId) HXARGC(1)
             		void _hx_run( ::borogove::Stanza stanza){
-            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1515_doSync)
-HXLINE(1516)			_gthis->sync = null();
-HXLINE(1517)			if (::hx::IsNotNull( lastId )) {
-HXLINE(1519)				_gthis->doSync(null());
+            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1518_doSync)
+HXLINE(1519)			_gthis->sync = null();
+HXLINE(1520)			if (::hx::IsNotNull( lastId )) {
+HXLINE(1522)				_gthis->doSync(null());
             			}
             			else {
-HXLINE(1521)				::haxe::Log_obj::trace(HX_("SYNC failed",e2,ec,6f,fa), ::Dynamic(::hx::Anon_obj::Create(5)
+HXLINE(1524)				::haxe::Log_obj::trace(HX_("SYNC failed",e2,ec,6f,fa), ::Dynamic(::hx::Anon_obj::Create(5)
             					->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Channel",56,82,6a,da))
             					->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(2)->init(0,_gthis->chatId)->init(1,stanza))
             					->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("doSync",86,5f,63,1c))
             					->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Chat.hx",98,ae,63,17))
-            					->setFixed(4,HX_("lineNumber",dd,81,22,76),1521)));
+            					->setFixed(4,HX_("lineNumber",dd,81,22,76),1524)));
             			}
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1417_doSync)
-HXDLIN(1417)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1418)		if (!(this->disco->features->contains(HX_("urn:xmpp:mam:2",f5,ef,8c,da)))) {
-HXLINE(1419)			this->inSync = true;
-HXLINE(1420)			return;
+            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1420_doSync)
+HXDLIN(1420)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1421)		if (!(this->disco->features->contains(HX_("urn:xmpp:mam:2",f5,ef,8c,da)))) {
+HXLINE(1422)			this->inSync = true;
+HXLINE(1423)			return;
             		}
-HXLINE(1422)		if (::hx::IsNotNull( this->sync )) {
-HXLINE(1422)			return;
+HXLINE(1425)		if (::hx::IsNotNull( this->sync )) {
+HXLINE(1425)			return;
             		}
-HXLINE(1424)		::String threeDaysAgo = ::borogove::Date_obj::format(::Date_obj::fromTime((::Date_obj::now()->getTime() + ((Float)-259200000.))));
-HXLINE(1430)		 ::Dynamic _hx_tmp;
-HXDLIN(1430)		if (::hx::IsNull( lastId )) {
-HXLINE(1430)			_hx_tmp =  ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(1427)		::String threeDaysAgo = ::borogove::Date_obj::format(::Date_obj::fromTime((::Date_obj::now()->getTime() + ((Float)-259200000.))));
+HXLINE(1433)		 ::Dynamic _hx_tmp;
+HXDLIN(1433)		if (::hx::IsNull( lastId )) {
+HXLINE(1433)			_hx_tmp =  ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("startTime",8f,45,f0,05),threeDaysAgo));
             		}
             		else {
-HXLINE(1430)			_hx_tmp =  ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(1433)			_hx_tmp =  ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("page",4f,da,51,4a), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("after",1c,66,a2,1d),lastId))));
             		}
-HXLINE(1427)		this->sync =  ::borogove::MessageSync_obj::__alloc( HX_CTX ,this->client,this->stream,_hx_tmp,this->chatId);
-HXLINE(1433)		this->sync->setNewestPageFirst(false);
-HXLINE(1434)		this->sync->addContext( ::Dynamic(new _hx_Closure_0(_gthis)));
-HXLINE(1439)		::Array< ::Dynamic> chatMessages = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(1440)		this->sync->onMessages( ::Dynamic(new _hx_Closure_9(_gthis,chatMessages)));
-HXLINE(1515)		this->sync->onError( ::Dynamic(new _hx_Closure_10(_gthis,lastId)));
-HXLINE(1524)		this->sync->fetchNext();
+HXLINE(1430)		this->sync =  ::borogove::MessageSync_obj::__alloc( HX_CTX ,this->client,this->stream,_hx_tmp,this->chatId);
+HXLINE(1436)		this->sync->setNewestPageFirst(false);
+HXLINE(1437)		this->sync->addContext( ::Dynamic(new _hx_Closure_0(_gthis)));
+HXLINE(1442)		::Array< ::Dynamic> chatMessages = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1443)		this->sync->onMessages( ::Dynamic(new _hx_Closure_9(_gthis,chatMessages)));
+HXLINE(1518)		this->sync->onError( ::Dynamic(new _hx_Closure_10(_gthis,lastId)));
+HXLINE(1527)		this->sync->fetchNext();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Channel_obj,doSync,(void))
 
 void Channel_obj::setTrusted(bool trusted){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1527_setTrusted)
-HXLINE(1528)		this->super::setTrusted(trusted);
-HXLINE(1529)		if (trusted) {
-HXLINE(1529)			this->selfPing(true);
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1530_setTrusted)
+HXLINE(1531)		this->super::setTrusted(trusted);
+HXLINE(1532)		if (trusted) {
+HXLINE(1532)			this->selfPing(true);
             		}
             	}
 
 
 bool Channel_obj::isTrusted(){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1533_isTrusted)
-HXDLIN(1533)		if ((this->uiState != 2)) {
-HXDLIN(1533)			return (this->uiState != 3);
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1536_isTrusted)
+HXDLIN(1536)		if ((this->uiState != 2)) {
+HXDLIN(1536)			return (this->uiState != 3);
             		}
             		else {
-HXDLIN(1533)			return false;
+HXDLIN(1536)			return false;
             		}
-HXDLIN(1533)		return false;
+HXDLIN(1536)		return false;
             	}
 
 
 bool Channel_obj::isPrivate(){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1537_isPrivate)
-HXDLIN(1537)		return this->disco->features->contains(HX_("muc_membersonly",41,e9,70,b7));
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1540_isPrivate)
+HXDLIN(1540)		return this->disco->features->contains(HX_("muc_membersonly",41,e9,70,b7));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Channel_obj,isPrivate,return )
 
 void Channel_obj::setupNotifications(){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1541_setupNotifications)
-HXLINE(1542)		if (::hx::IsNull( this->disco )) {
-HXLINE(1542)			return;
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1544_setupNotifications)
+HXLINE(1545)		if (::hx::IsNull( this->disco )) {
+HXLINE(1545)			return;
             		}
-HXLINE(1543)		if (!(this->isPrivate())) {
-HXLINE(1543)			this->notificationSettings =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE(1546)		if (!(this->isPrivate())) {
+HXLINE(1546)			this->notificationSettings =  ::Dynamic(::hx::Anon_obj::Create(2)
             				->setFixed(0,HX_("mention",ea,9e,bf,b9),true)
             				->setFixed(1,HX_("reply",2a,09,c6,e6),false));
             		}
@@ -1154,137 +1163,206 @@ HXLINE(1543)			this->notificationSettings =  ::Dynamic(::hx::Anon_obj::Create(2)
 HX_DEFINE_DYNAMIC_FUNC0(Channel_obj,setupNotifications,(void))
 
 void Channel_obj::refreshDisco( ::Dynamic callback){
-            		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::borogove::Channel,_gthis, ::borogove::queries::DiscoInfoGet,discoGet, ::Dynamic,callback) HXARGC(0)
+            		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_3, ::borogove::Channel,_gthis, ::borogove::queries::DiscoInfoGet,discoGet, ::Dynamic,callback) HXARGC(0)
             		void _hx_run(){
-            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1549_refreshDisco)
-HXLINE(1550)			if (::hx::IsNotNull( discoGet->getResult() )) {
-HXLINE(1551)				_gthis->disco = discoGet->getResult();
-HXLINE(1552)				::Dynamic _gthis1 = _gthis->persistence;
-HXDLIN(1552)				::borogove::Persistence_obj::storeCaps(_gthis1,discoGet->getResult());
-HXLINE(1553)				::Dynamic _gthis2 = _gthis->persistence;
-HXDLIN(1553)				::String _hx_tmp = _gthis->client->accountId();
-HXDLIN(1553)				::borogove::Persistence_obj::storeChats(_gthis2,_hx_tmp,::Array_obj< ::Dynamic>::__new(1)->init(0,_gthis));
+            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1552_refreshDisco)
+HXLINE(1553)			if (::hx::IsNotNull( discoGet->getResult() )) {
+HXLINE(1554)				_gthis->disco = discoGet->getResult();
+HXLINE(1555)				::Dynamic _gthis1 = _gthis->persistence;
+HXDLIN(1555)				::borogove::Persistence_obj::storeCaps(_gthis1,discoGet->getResult());
+HXLINE(1556)				::Dynamic _gthis2 = _gthis->persistence;
+HXDLIN(1556)				::String _hx_tmp = _gthis->client->accountId();
+HXDLIN(1556)				::borogove::Persistence_obj::storeChats(_gthis2,_hx_tmp,::Array_obj< ::Dynamic>::__new(1)->init(0,_gthis));
+            			}
+HXLINE(1558)			if (::hx::IsNotNull( callback )) {
+HXLINE(1558)				callback();
+            			}
+HXLINE(1559)			 ::borogove::Stanza tmp = _gthis->info();
+HXDLIN(1559)			 ::borogove::Stanza tmp1;
+HXDLIN(1559)			if (::hx::IsNotNull( tmp )) {
+HXLINE(1559)				tmp1 = ::borogove::_DataForm::DataForm_Impl__obj::field(tmp,HX_("muc#roominfo_avatarhash",55,a5,67,00));
+            			}
+            			else {
+HXLINE(1559)				tmp1 = null();
+            			}
+HXDLIN(1559)			::Array< ::String > tmp2;
+HXDLIN(1559)			if (::hx::IsNotNull( tmp1 )) {
+HXLINE(1559)				tmp2 = ::borogove::_DataForm::Field_Impl__obj::get_value(tmp1);
+            			}
+            			else {
+HXLINE(1559)				tmp2 = null();
             			}
-HXLINE(1555)			if (::hx::IsNotNull( callback )) {
-HXLINE(1555)				callback();
+HXDLIN(1559)			::String avatarSha1Hex;
+HXDLIN(1559)			if (::hx::IsNotNull( tmp2 )) {
+HXLINE(1559)				avatarSha1Hex = tmp2->join(HX_("",00,00,00,00));
+            			}
+            			else {
+HXLINE(1559)				avatarSha1Hex = null();
+            			}
+HXLINE(1560)			bool _hx_tmp1;
+HXDLIN(1560)			if (::hx::IsNotNull( avatarSha1Hex )) {
+HXLINE(1560)				_hx_tmp1 = (avatarSha1Hex != HX_("",00,00,00,00));
+            			}
+            			else {
+HXLINE(1560)				_hx_tmp1 = false;
+            			}
+HXDLIN(1560)			if (_hx_tmp1) {
+            				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_2, ::borogove::Channel,_gthis,::String,avatarSha1Hex) HXARGC(1)
+            				void _hx_run(bool has){
+            					HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1564_refreshDisco)
+HXLINE(1564)					if (!(has)) {
+            						HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::borogove::Channel,_gthis, ::borogove::queries::VcardTempGet,vcardGet) HXARGC(0)
+            						void _hx_run(){
+            							HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Channel,_gthis) HXARGC(1)
+            							 ::borogove::EventResult _hx_run(bool _){
+            								HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1570_refreshDisco)
+HXLINE(1570)								return _gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
+            							}
+            							HX_END_LOCAL_FUNC1(return)
+
+            							HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1567_refreshDisco)
+HXLINE(1568)							 ::Dynamic vcard = vcardGet->getResult();
+HXLINE(1569)							if (::hx::IsNull( vcard->__Field(HX_("photo",b2,c8,f3,c1),::hx::paccDynamic) )) {
+HXLINE(1569)								return;
+            							}
+HXLINE(1570)							::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeMedia(_gthis->persistence, ::Dynamic( ::Dynamic(vcard->__Field(HX_("photo",b2,c8,f3,c1),::hx::paccDynamic))->__Field(HX_("mime",b4,4d,5c,48),::hx::paccDynamic)),( ( ::haxe::io::Bytes)( ::Dynamic(vcard->__Field(HX_("photo",b2,c8,f3,c1),::hx::paccDynamic))->__Field(HX_("data",2a,56,63,42),::hx::paccDynamic)) )->b), ::Dynamic(new _hx_Closure_0(_gthis)),null());
+            						}
+            						HX_END_LOCAL_FUNC0((void))
+
+HXLINE(1565)						::haxe::Log_obj::trace(HX_("XYZZY no MUC avatar locally matching so fetch vcard",2c,00,99,15), ::Dynamic(::hx::Anon_obj::Create(5)
+            							->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Channel",56,82,6a,da))
+            							->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(2)->init(0,_gthis->chatId)->init(1,avatarSha1Hex))
+            							->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("refreshDisco",9f,ff,52,ed))
+            							->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Chat.hx",98,ae,63,17))
+            							->setFixed(4,HX_("lineNumber",dd,81,22,76),1565)));
+HXLINE(1566)						 ::borogove::queries::VcardTempGet vcardGet =  ::borogove::queries::VcardTempGet_obj::__alloc( HX_CTX ,::borogove::JID_obj::parse(_gthis->chatId));
+HXLINE(1567)						vcardGet->onFinished( ::Dynamic(new _hx_Closure_1(_gthis,vcardGet)));
+HXLINE(1574)						_gthis->client->sendQueryLazy(vcardGet);
+            					}
+            				}
+            				HX_END_LOCAL_FUNC1((void))
+
+HXLINE(1561)				 ::borogove::Hash hash = ::borogove::Hash_obj::fromHex(HX_("sha-1",90,a8,1c,7c),avatarSha1Hex);
+HXLINE(1562)				_gthis->avatarSha1 = hash->hash;
+HXLINE(1563)				::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::hasMedia(_gthis->persistence,HX_("sha-1",90,a8,1c,7c),_gthis->avatarSha1), ::Dynamic(new _hx_Closure_2(_gthis,avatarSha1Hex)),null());
             			}
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1547_refreshDisco)
-HXDLIN(1547)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1548)		 ::borogove::queries::DiscoInfoGet discoGet =  ::borogove::queries::DiscoInfoGet_obj::__alloc( HX_CTX ,this->chatId,null());
-HXLINE(1549)		discoGet->onFinished( ::Dynamic(new _hx_Closure_0(_gthis,discoGet,callback)));
-HXLINE(1557)		this->client->sendQuery(discoGet);
+            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1550_refreshDisco)
+HXDLIN(1550)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1551)		 ::borogove::queries::DiscoInfoGet discoGet =  ::borogove::queries::DiscoInfoGet_obj::__alloc( HX_CTX ,this->chatId,null());
+HXLINE(1552)		discoGet->onFinished( ::Dynamic(new _hx_Closure_3(_gthis,discoGet,callback)));
+HXLINE(1579)		this->client->sendQuery(discoGet);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Channel_obj,refreshDisco,(void))
 
 ::String Channel_obj::preview(){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1560_preview)
-HXLINE(1561)		if (::hx::IsNull( this->lastMessage )) {
-HXLINE(1561)			return this->super::preview();
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1582_preview)
+HXLINE(1583)		if (::hx::IsNull( this->lastMessage )) {
+HXLINE(1583)			return this->super::preview();
             		}
-HXLINE(1563)		::String _hx_tmp = (this->getParticipantDetails(this->lastMessage->senderId)->displayName + HX_(": ",a6,32,00,00));
-HXDLIN(1563)		return (_hx_tmp + this->super::preview());
+HXLINE(1585)		::String _hx_tmp = (this->getParticipantDetails(this->lastMessage->senderId)->displayName + HX_(": ",a6,32,00,00));
+HXDLIN(1585)		return (_hx_tmp + this->super::preview());
             	}
 
 
 bool Channel_obj::livePresence(){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1567_livePresence)
-HXLINE(1568)		if (this->forceLive) {
-HXLINE(1568)			return true;
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1589_livePresence)
+HXLINE(1590)		if (this->forceLive) {
+HXLINE(1590)			return true;
             		}
-HXLINE(1570)		return ::hx::IsNotNull( this->_nickInUse );
+HXLINE(1592)		return ::hx::IsNotNull( this->_nickInUse );
             	}
 
 
 bool Channel_obj::syncing(){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1574_syncing)
-HXDLIN(1574)		if (this->inSync) {
-HXDLIN(1574)			return !(this->livePresence());
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1596_syncing)
+HXDLIN(1596)		if (this->inSync) {
+HXDLIN(1596)			return !(this->livePresence());
             		}
             		else {
-HXDLIN(1574)			return true;
+HXDLIN(1596)			return true;
             		}
-HXDLIN(1574)		return false;
+HXDLIN(1596)		return false;
             	}
 
 
 bool Channel_obj::canAudioCall(){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1578_canAudioCall)
-HXDLIN(1578)		 ::borogove::Caps tmp = this->disco;
-HXDLIN(1578)		::Array< ::String > tmp1;
-HXDLIN(1578)		if (::hx::IsNotNull( tmp )) {
-HXDLIN(1578)			tmp1 = tmp->features;
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1600_canAudioCall)
+HXDLIN(1600)		 ::borogove::Caps tmp = this->disco;
+HXDLIN(1600)		::Array< ::String > tmp1;
+HXDLIN(1600)		if (::hx::IsNotNull( tmp )) {
+HXDLIN(1600)			tmp1 = tmp->features;
             		}
             		else {
-HXDLIN(1578)			tmp1 = null();
+HXDLIN(1600)			tmp1 = null();
             		}
-HXDLIN(1578)		 ::Dynamic tmp2;
-HXDLIN(1578)		if (::hx::IsNotNull( tmp1 )) {
-HXDLIN(1578)			tmp2 = tmp1->contains(HX_("urn:xmpp:jingle:apps:rtp:audio",0f,8b,54,6c));
+HXDLIN(1600)		 ::Dynamic tmp2;
+HXDLIN(1600)		if (::hx::IsNotNull( tmp1 )) {
+HXDLIN(1600)			tmp2 = tmp1->contains(HX_("urn:xmpp:jingle:apps:rtp:audio",0f,8b,54,6c));
             		}
             		else {
-HXDLIN(1578)			tmp2 = null();
+HXDLIN(1600)			tmp2 = null();
             		}
-HXDLIN(1578)		if (::hx::IsNotNull( tmp2 )) {
-HXDLIN(1578)			return ( (bool)(tmp2) );
+HXDLIN(1600)		if (::hx::IsNotNull( tmp2 )) {
+HXDLIN(1600)			return ( (bool)(tmp2) );
             		}
             		else {
-HXDLIN(1578)			return false;
+HXDLIN(1600)			return false;
             		}
-HXDLIN(1578)		return false;
+HXDLIN(1600)		return false;
             	}
 
 
 bool Channel_obj::canVideoCall(){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1582_canVideoCall)
-HXDLIN(1582)		 ::borogove::Caps tmp = this->disco;
-HXDLIN(1582)		::Array< ::String > tmp1;
-HXDLIN(1582)		if (::hx::IsNotNull( tmp )) {
-HXDLIN(1582)			tmp1 = tmp->features;
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1604_canVideoCall)
+HXDLIN(1604)		 ::borogove::Caps tmp = this->disco;
+HXDLIN(1604)		::Array< ::String > tmp1;
+HXDLIN(1604)		if (::hx::IsNotNull( tmp )) {
+HXDLIN(1604)			tmp1 = tmp->features;
             		}
             		else {
-HXDLIN(1582)			tmp1 = null();
+HXDLIN(1604)			tmp1 = null();
             		}
-HXDLIN(1582)		 ::Dynamic tmp2;
-HXDLIN(1582)		if (::hx::IsNotNull( tmp1 )) {
-HXDLIN(1582)			tmp2 = tmp1->contains(HX_("urn:xmpp:jingle:apps:rtp:video",b4,26,d0,7b));
+HXDLIN(1604)		 ::Dynamic tmp2;
+HXDLIN(1604)		if (::hx::IsNotNull( tmp1 )) {
+HXDLIN(1604)			tmp2 = tmp1->contains(HX_("urn:xmpp:jingle:apps:rtp:video",b4,26,d0,7b));
             		}
             		else {
-HXDLIN(1582)			tmp2 = null();
+HXDLIN(1604)			tmp2 = null();
             		}
-HXDLIN(1582)		if (::hx::IsNotNull( tmp2 )) {
-HXDLIN(1582)			return ( (bool)(tmp2) );
+HXDLIN(1604)		if (::hx::IsNotNull( tmp2 )) {
+HXDLIN(1604)			return ( (bool)(tmp2) );
             		}
             		else {
-HXDLIN(1582)			return false;
+HXDLIN(1604)			return false;
             		}
-HXDLIN(1582)		return false;
+HXDLIN(1604)		return false;
             	}
 
 
 ::String Channel_obj::nickInUse(){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1586_nickInUse)
-HXDLIN(1586)		::String tmp = this->_nickInUse;
-HXDLIN(1586)		if (::hx::IsNotNull( tmp )) {
-HXDLIN(1586)			return tmp;
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1608_nickInUse)
+HXDLIN(1608)		::String tmp = this->_nickInUse;
+HXDLIN(1608)		if (::hx::IsNotNull( tmp )) {
+HXDLIN(1608)			return tmp;
             		}
             		else {
-HXDLIN(1586)			return this->client->displayName();
+HXDLIN(1608)			return this->client->displayName();
             		}
-HXDLIN(1586)		return null();
+HXDLIN(1608)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Channel_obj,nickInUse,return )
 
  ::borogove::JID Channel_obj::getFullJid(){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1590_getFullJid)
-HXDLIN(1590)		 ::borogove::JID _hx_tmp = ::borogove::JID_obj::parse(this->chatId);
-HXDLIN(1590)		return _hx_tmp->withResource(this->nickInUse());
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1612_getFullJid)
+HXDLIN(1612)		 ::borogove::JID _hx_tmp = ::borogove::JID_obj::parse(this->chatId);
+HXDLIN(1612)		return _hx_tmp->withResource(this->nickInUse());
             	}
 
 
@@ -1293,220 +1371,220 @@ HX_DEFINE_DYNAMIC_FUNC0(Channel_obj,getFullJid,return )
 ::Array< ::String > Channel_obj::getParticipants(){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Channel,_gthis) HXARGC(0)
             		 ::Dynamic _hx_run(){
-            			HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1596_getParticipants)
-HXLINE(1596)			return _gthis->presence->keys();
+            			HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1618_getParticipants)
+HXLINE(1618)			return _gthis->presence->keys();
             		}
             		HX_END_LOCAL_FUNC0(return)
 
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             		bool _hx_run(::String resource){
-            			HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1596_getParticipants)
-HXLINE(1596)			return ::hx::IsNotNull( resource );
+            			HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1618_getParticipants)
+HXLINE(1618)			return ::hx::IsNotNull( resource );
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1594_getParticipants)
-HXDLIN(1594)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1595)		 ::borogove::JID jid = ::borogove::JID_obj::parse(this->chatId);
-HXLINE(1596)		::Array< ::String > _this = ::Lambda_obj::filter( ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1616_getParticipants)
+HXDLIN(1616)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1617)		 ::borogove::JID jid = ::borogove::JID_obj::parse(this->chatId);
+HXLINE(1618)		::Array< ::String > _this = ::Lambda_obj::filter( ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("iterator",ee,49,9a,93), ::Dynamic(new _hx_Closure_0(_gthis)))), ::Dynamic(new _hx_Closure_1()));
-HXDLIN(1596)		::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
-HXDLIN(1596)		{
-HXLINE(1596)			int _g = 0;
-HXDLIN(1596)			int _g1 = _this->length;
-HXDLIN(1596)			while((_g < _g1)){
-HXLINE(1596)				_g = (_g + 1);
-HXDLIN(1596)				int i = (_g - 1);
-HXDLIN(1596)				{
-HXLINE(1596)					::String resource = ( (::String)(_hx_array_unsafe_get(_this,i)) );
-HXDLIN(1596)					::String inValue =  ::borogove::JID_obj::__alloc( HX_CTX ,jid->node,jid->domain,resource,null())->asString();
-HXDLIN(1596)					result->__unsafe_set(i,inValue);
+HXDLIN(1618)		::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
+HXDLIN(1618)		{
+HXLINE(1618)			int _g = 0;
+HXDLIN(1618)			int _g1 = _this->length;
+HXDLIN(1618)			while((_g < _g1)){
+HXLINE(1618)				_g = (_g + 1);
+HXDLIN(1618)				int i = (_g - 1);
+HXDLIN(1618)				{
+HXLINE(1618)					::String resource = ( (::String)(_hx_array_unsafe_get(_this,i)) );
+HXDLIN(1618)					::String inValue =  ::borogove::JID_obj::__alloc( HX_CTX ,jid->node,jid->domain,resource,null())->asString();
+HXDLIN(1618)					result->__unsafe_set(i,inValue);
             				}
             			}
             		}
-HXDLIN(1596)		return result;
+HXDLIN(1618)		return result;
             	}
 
 
  ::borogove::Participant Channel_obj::getParticipantDetails(::String participantId){
-            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1601_getParticipantDetails)
-HXDLIN(1601)		if ((participantId == this->getFullJid()->asString())) {
-HXLINE(1602)			 ::borogove::Client chat = this->client;
-HXDLIN(1602)			 ::borogove::DirectChat chat1 = chat->getDirectChat(this->client->accountId(),false);
-HXLINE(1603)			::String _hx_tmp = this->client->displayName();
-HXDLIN(1603)			::String _hx_tmp1 = chat1->getPhoto();
-HXDLIN(1603)			::String _hx_tmp2 = chat1->getPlaceholder();
-HXDLIN(1603)			return  ::borogove::Participant_obj::__alloc( HX_CTX ,_hx_tmp,_hx_tmp1,_hx_tmp2,true,::borogove::JID_obj::parse(chat1->chatId));
+            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1623_getParticipantDetails)
+HXDLIN(1623)		if ((participantId == this->getFullJid()->asString())) {
+HXLINE(1624)			 ::borogove::Client chat = this->client;
+HXDLIN(1624)			 ::borogove::DirectChat chat1 = chat->getDirectChat(this->client->accountId(),false);
+HXLINE(1625)			::String _hx_tmp = this->client->displayName();
+HXDLIN(1625)			::String _hx_tmp1 = chat1->getPhoto();
+HXDLIN(1625)			::String _hx_tmp2 = chat1->getPlaceholder();
+HXDLIN(1625)			return  ::borogove::Participant_obj::__alloc( HX_CTX ,_hx_tmp,_hx_tmp1,_hx_tmp2,true,::borogove::JID_obj::parse(chat1->chatId));
             		}
             		else {
-HXLINE(1605)			 ::borogove::JID jid = ::borogove::JID_obj::parse(participantId);
-HXLINE(1606)			::String nick = jid->resource;
-HXLINE(1607)			::String placeholderUri;
-HXDLIN(1607)			if (::hx::IsNull( nick )) {
-HXLINE(1607)				placeholderUri = HX_(" ",20,00,00,00);
+HXLINE(1627)			 ::borogove::JID jid = ::borogove::JID_obj::parse(participantId);
+HXLINE(1628)			::String nick = jid->resource;
+HXLINE(1629)			::String placeholderUri;
+HXDLIN(1629)			if (::hx::IsNull( nick )) {
+HXLINE(1629)				placeholderUri = HX_(" ",20,00,00,00);
             			}
             			else {
-HXLINE(1607)				placeholderUri = nick.charAt(0);
+HXLINE(1629)				placeholderUri = nick.charAt(0);
             			}
-HXDLIN(1607)			::String placeholderUri1 = ::borogove::Color_obj::defaultPhoto(participantId,placeholderUri);
-HXLINE(1608)			::String _hx_tmp3;
-HXDLIN(1608)			if (::hx::IsNotNull( nick )) {
-HXLINE(1608)				_hx_tmp3 = nick;
+HXDLIN(1629)			::String placeholderUri1 = ::borogove::Color_obj::defaultPhoto(participantId,placeholderUri);
+HXLINE(1630)			::String _hx_tmp3;
+HXDLIN(1630)			if (::hx::IsNotNull( nick )) {
+HXLINE(1630)				_hx_tmp3 = nick;
             			}
             			else {
-HXLINE(1608)				_hx_tmp3 = HX_("",00,00,00,00);
+HXLINE(1630)				_hx_tmp3 = HX_("",00,00,00,00);
             			}
-HXDLIN(1608)			 ::borogove::Presence tmp = ( ( ::borogove::Presence)(this->presence->get(nick)) );
-HXDLIN(1608)			 ::borogove::Hash tmp1;
-HXDLIN(1608)			if (::hx::IsNotNull( tmp )) {
-HXLINE(1608)				tmp1 = tmp->avatarHash;
+HXDLIN(1630)			 ::borogove::Presence tmp = ( ( ::borogove::Presence)(this->presence->get(nick)) );
+HXDLIN(1630)			 ::borogove::Hash tmp1;
+HXDLIN(1630)			if (::hx::IsNotNull( tmp )) {
+HXLINE(1630)				tmp1 = tmp->avatarHash;
             			}
             			else {
-HXLINE(1608)				tmp1 = null();
+HXLINE(1630)				tmp1 = null();
             			}
-HXDLIN(1608)			::String _hx_tmp4;
-HXDLIN(1608)			if (::hx::IsNotNull( tmp1 )) {
-HXLINE(1608)				_hx_tmp4 = tmp1->toUri();
+HXDLIN(1630)			::String _hx_tmp4;
+HXDLIN(1630)			if (::hx::IsNotNull( tmp1 )) {
+HXLINE(1630)				_hx_tmp4 = tmp1->toUri();
             			}
             			else {
-HXLINE(1608)				_hx_tmp4 = null();
+HXLINE(1630)				_hx_tmp4 = null();
             			}
-HXDLIN(1608)			return  ::borogove::Participant_obj::__alloc( HX_CTX ,_hx_tmp3,_hx_tmp4,placeholderUri1,false,jid);
+HXDLIN(1630)			return  ::borogove::Participant_obj::__alloc( HX_CTX ,_hx_tmp3,_hx_tmp4,placeholderUri1,false,jid);
             		}
-HXLINE(1601)		return null();
+HXLINE(1623)		return null();
             	}
 
 
 ::Dynamic Channel_obj::getMessagesBefore(::String beforeId,::String beforeTime){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::borogove::Channel,_gthis,::String,beforeId) HXARGC(1)
             		::Dynamic _hx_run(::Array< ::Dynamic> messages){
-            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1615_getMessagesBefore)
-HXLINE(1615)			if ((messages->length > 0)) {
-HXLINE(1616)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(messages);
+            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1637_getMessagesBefore)
+HXLINE(1637)			if ((messages->length > 0)) {
+HXLINE(1638)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(messages);
             			}
             			else {
             				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Channel,_gthis) HXARGC(2)
             				 ::borogove::ChatMessageBuilder _hx_run( ::borogove::ChatMessageBuilder builder, ::borogove::Stanza stanza){
-            					HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1621_getMessagesBefore)
-HXLINE(1622)					builder = _gthis->prepareIncomingMessage(builder,stanza);
-HXLINE(1623)					builder->syncPoint = false;
-HXLINE(1624)					return builder;
+            					HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1643_getMessagesBefore)
+HXLINE(1644)					builder = _gthis->prepareIncomingMessage(builder,stanza);
+HXLINE(1645)					builder->syncPoint = false;
+HXLINE(1646)					return builder;
             				}
             				HX_END_LOCAL_FUNC2(return)
 
-HXLINE(1618)				 ::Dynamic filter =  ::Dynamic(::hx::Anon_obj::Create(0));
-HXLINE(1619)				if (::hx::IsNotNull( beforeId )) {
-HXLINE(1619)					filter->__SetField(HX_("page",4f,da,51,4a), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(1640)				 ::Dynamic filter =  ::Dynamic(::hx::Anon_obj::Create(0));
+HXLINE(1641)				if (::hx::IsNotNull( beforeId )) {
+HXLINE(1641)					filter->__SetField(HX_("page",4f,da,51,4a), ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("before",7f,54,32,9a),beforeId)),::hx::paccDynamic);
             				}
-HXLINE(1620)				 ::borogove::MessageSync sync =  ::borogove::MessageSync_obj::__alloc( HX_CTX ,_gthis->client,_gthis->stream,filter,_gthis->chatId);
-HXLINE(1621)				sync->addContext( ::Dynamic(new _hx_Closure_0(_gthis)));
-HXLINE(1626)				return _gthis->fetchFromSync(sync);
+HXLINE(1642)				 ::borogove::MessageSync sync =  ::borogove::MessageSync_obj::__alloc( HX_CTX ,_gthis->client,_gthis->stream,filter,_gthis->chatId);
+HXLINE(1643)				sync->addContext( ::Dynamic(new _hx_Closure_0(_gthis)));
+HXLINE(1648)				return _gthis->fetchFromSync(sync);
             			}
-HXLINE(1615)			return null();
+HXLINE(1637)			return null();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1613_getMessagesBefore)
-HXDLIN(1613)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1614)		::Dynamic _hx_tmp = this->persistence;
-HXDLIN(1614)		::String _hx_tmp1 = this->client->accountId();
-HXDLIN(1614)		return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getMessagesBefore(_hx_tmp,_hx_tmp1,this->chatId,beforeId,beforeTime), ::Dynamic(new _hx_Closure_1(_gthis,beforeId)),null());
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1635_getMessagesBefore)
+HXDLIN(1635)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1636)		::Dynamic _hx_tmp = this->persistence;
+HXDLIN(1636)		::String _hx_tmp1 = this->client->accountId();
+HXDLIN(1636)		return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getMessagesBefore(_hx_tmp,_hx_tmp1,this->chatId,beforeId,beforeTime), ::Dynamic(new _hx_Closure_1(_gthis,beforeId)),null());
             	}
 
 
 ::Dynamic Channel_obj::getMessagesAfter(::String afterId,::String afterTime){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::borogove::Channel,_gthis,::String,afterId) HXARGC(1)
             		::Dynamic _hx_run(::Array< ::Dynamic> messages){
-            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1637_getMessagesAfter)
-HXLINE(1637)			if ((messages->length > 0)) {
-HXLINE(1638)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(messages);
+            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1659_getMessagesAfter)
+HXLINE(1659)			if ((messages->length > 0)) {
+HXLINE(1660)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(messages);
             			}
             			else {
             				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Channel,_gthis) HXARGC(2)
             				 ::borogove::ChatMessageBuilder _hx_run( ::borogove::ChatMessageBuilder builder, ::borogove::Stanza stanza){
-            					HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1643_getMessagesAfter)
-HXLINE(1644)					builder = _gthis->prepareIncomingMessage(builder,stanza);
-HXLINE(1645)					builder->syncPoint = false;
-HXLINE(1646)					return builder;
+            					HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1665_getMessagesAfter)
+HXLINE(1666)					builder = _gthis->prepareIncomingMessage(builder,stanza);
+HXLINE(1667)					builder->syncPoint = false;
+HXLINE(1668)					return builder;
             				}
             				HX_END_LOCAL_FUNC2(return)
 
-HXLINE(1640)				 ::Dynamic filter =  ::Dynamic(::hx::Anon_obj::Create(0));
-HXLINE(1641)				if (::hx::IsNotNull( afterId )) {
-HXLINE(1641)					filter->__SetField(HX_("page",4f,da,51,4a), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(1662)				 ::Dynamic filter =  ::Dynamic(::hx::Anon_obj::Create(0));
+HXLINE(1663)				if (::hx::IsNotNull( afterId )) {
+HXLINE(1663)					filter->__SetField(HX_("page",4f,da,51,4a), ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("after",1c,66,a2,1d),afterId)),::hx::paccDynamic);
             				}
-HXLINE(1642)				 ::borogove::MessageSync sync =  ::borogove::MessageSync_obj::__alloc( HX_CTX ,_gthis->client,_gthis->stream,filter,_gthis->chatId);
-HXLINE(1643)				sync->addContext( ::Dynamic(new _hx_Closure_0(_gthis)));
-HXLINE(1648)				return _gthis->fetchFromSync(sync);
+HXLINE(1664)				 ::borogove::MessageSync sync =  ::borogove::MessageSync_obj::__alloc( HX_CTX ,_gthis->client,_gthis->stream,filter,_gthis->chatId);
+HXLINE(1665)				sync->addContext( ::Dynamic(new _hx_Closure_0(_gthis)));
+HXLINE(1670)				return _gthis->fetchFromSync(sync);
             			}
-HXLINE(1637)			return null();
+HXLINE(1659)			return null();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1632_getMessagesAfter)
-HXDLIN(1632)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1633)		bool _hx_tmp;
-HXDLIN(1633)		::String afterId1 = afterId;
-HXDLIN(1633)		if ((afterId1 == this->lastMessageId())) {
-HXLINE(1633)			_hx_tmp = !(this->syncing());
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1654_getMessagesAfter)
+HXDLIN(1654)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1655)		bool _hx_tmp;
+HXDLIN(1655)		::String afterId1 = afterId;
+HXDLIN(1655)		if ((afterId1 == this->lastMessageId())) {
+HXLINE(1655)			_hx_tmp = !(this->syncing());
             		}
             		else {
-HXLINE(1633)			_hx_tmp = false;
+HXLINE(1655)			_hx_tmp = false;
             		}
-HXDLIN(1633)		if (_hx_tmp) {
-HXLINE(1634)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(0));
+HXDLIN(1655)		if (_hx_tmp) {
+HXLINE(1656)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(0));
             		}
-HXLINE(1636)		::Dynamic _hx_tmp1 = this->persistence;
-HXDLIN(1636)		::String _hx_tmp2 = this->client->accountId();
-HXDLIN(1636)		return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getMessagesAfter(_hx_tmp1,_hx_tmp2,this->chatId,afterId,afterTime), ::Dynamic(new _hx_Closure_1(_gthis,afterId)),null());
+HXLINE(1658)		::Dynamic _hx_tmp1 = this->persistence;
+HXDLIN(1658)		::String _hx_tmp2 = this->client->accountId();
+HXDLIN(1658)		return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getMessagesAfter(_hx_tmp1,_hx_tmp2,this->chatId,afterId,afterTime), ::Dynamic(new _hx_Closure_1(_gthis,afterId)),null());
             	}
 
 
 ::Dynamic Channel_obj::getMessagesAround(::String aroundId,::String aroundTime){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1656_getMessagesAround)
-HXDLIN(1656)		::Dynamic _hx_tmp = this->persistence;
-HXDLIN(1656)		::String _hx_tmp1 = this->client->accountId();
-HXDLIN(1656)		return ::borogove::Persistence_obj::getMessagesAround(_hx_tmp,_hx_tmp1,this->chatId,aroundId,aroundTime);
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1678_getMessagesAround)
+HXDLIN(1678)		::Dynamic _hx_tmp = this->persistence;
+HXDLIN(1678)		::String _hx_tmp1 = this->client->accountId();
+HXDLIN(1678)		return ::borogove::Persistence_obj::getMessagesAround(_hx_tmp,_hx_tmp1,this->chatId,aroundId,aroundTime);
             	}
 
 
  ::borogove::ChatMessageBuilder Channel_obj::prepareIncomingMessage( ::borogove::ChatMessageBuilder message, ::borogove::Stanza stanza){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1660_prepareIncomingMessage)
-HXLINE(1661)		message->syncPoint = !(this->syncing());
-HXLINE(1662)		if ((message->type == 0)) {
-HXLINE(1662)			message->type = 3;
-            		}
-HXLINE(1663)		message->senderId = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) );
-HXLINE(1664)		::String _hx_tmp = message->get_senderId();
-HXDLIN(1664)		if ((_hx_tmp == this->getFullJid()->asString())) {
-HXLINE(1665)			message->recipients = message->replyTo;
-HXLINE(1666)			message->direction = 1;
-            		}
-HXLINE(1668)		return message;
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1682_prepareIncomingMessage)
+HXLINE(1683)		message->syncPoint = !(this->syncing());
+HXLINE(1684)		if ((message->type == 0)) {
+HXLINE(1684)			message->type = 3;
+            		}
+HXLINE(1685)		message->senderId = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) );
+HXLINE(1686)		::String _hx_tmp = message->get_senderId();
+HXDLIN(1686)		if ((_hx_tmp == this->getFullJid()->asString())) {
+HXLINE(1687)			message->recipients = message->replyTo;
+HXLINE(1688)			message->direction = 1;
+            		}
+HXLINE(1690)		return message;
             	}
 
 
  ::borogove::ChatMessageBuilder Channel_obj::prepareOutgoingMessage( ::borogove::ChatMessageBuilder message){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1671_prepareOutgoingMessage)
-HXLINE(1672)		message->type = 2;
-HXLINE(1673)		::String tmp = message->timestamp;
-HXDLIN(1673)		::String _hx_tmp;
-HXDLIN(1673)		if (::hx::IsNotNull( tmp )) {
-HXLINE(1673)			_hx_tmp = tmp;
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1693_prepareOutgoingMessage)
+HXLINE(1694)		message->type = 2;
+HXLINE(1695)		::String tmp = message->timestamp;
+HXDLIN(1695)		::String _hx_tmp;
+HXDLIN(1695)		if (::hx::IsNotNull( tmp )) {
+HXLINE(1695)			_hx_tmp = tmp;
             		}
             		else {
-HXLINE(1673)			_hx_tmp = ::borogove::Date_obj::format(::Date_obj::now());
-            		}
-HXDLIN(1673)		message->timestamp = _hx_tmp;
-HXLINE(1674)		message->direction = 1;
-HXLINE(1675)		message->from = this->client->jid;
-HXLINE(1676)		message->sender = this->getFullJid();
-HXLINE(1677)		message->replyTo = ::Array_obj< ::Dynamic>::__new(1)->init(0,message->sender);
-HXLINE(1678)		message->to = ::borogove::JID_obj::parse(this->chatId);
-HXLINE(1679)		message->recipients = ::Array_obj< ::Dynamic>::__new(1)->init(0,message->to);
-HXLINE(1680)		return message;
+HXLINE(1695)			_hx_tmp = ::borogove::Date_obj::format(::Date_obj::now());
+            		}
+HXDLIN(1695)		message->timestamp = _hx_tmp;
+HXLINE(1696)		message->direction = 1;
+HXLINE(1697)		message->from = this->client->jid;
+HXLINE(1698)		message->sender = this->getFullJid();
+HXLINE(1699)		message->replyTo = ::Array_obj< ::Dynamic>::__new(1)->init(0,message->sender);
+HXLINE(1700)		message->to = ::borogove::JID_obj::parse(this->chatId);
+HXLINE(1701)		message->recipients = ::Array_obj< ::Dynamic>::__new(1)->init(0,message->to);
+HXLINE(1702)		return message;
             	}
 
 
@@ -1515,131 +1593,131 @@ HX_DEFINE_DYNAMIC_FUNC1(Channel_obj,prepareOutgoingMessage,return )
 void Channel_obj::correctMessage(::String localId, ::borogove::ChatMessageBuilder message){
             		HX_BEGIN_LOCAL_FUNC_S5(::hx::LocalFunc,_hx_Closure_0, ::borogove::Channel,_gthis,::Array< ::Dynamic>,message1,::String,localId,::String,toSendId, ::borogove::OutboxItem,outboxItem) HXARGC(1)
             		void _hx_run(::Array< ::Dynamic> corrected){
-            			HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1690_correctMessage)
-HXLINE(1691)			::Array< ::Dynamic> _hx_tmp;
-HXDLIN(1691)			 ::borogove::ChatMessage tmp = corrected->__get(0).StaticCast<  ::borogove::ChatMessage >()->versions->__get(0).StaticCast<  ::borogove::ChatMessage >();
-HXDLIN(1691)			::String _hx_tmp1;
-HXDLIN(1691)			if (::hx::IsNotNull( tmp )) {
-HXLINE(1691)				_hx_tmp1 = tmp->localId;
+            			HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1712_correctMessage)
+HXLINE(1713)			::Array< ::Dynamic> _hx_tmp;
+HXDLIN(1713)			 ::borogove::ChatMessage tmp = corrected->__get(0).StaticCast<  ::borogove::ChatMessage >()->versions->__get(0).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN(1713)			::String _hx_tmp1;
+HXDLIN(1713)			if (::hx::IsNotNull( tmp )) {
+HXLINE(1713)				_hx_tmp1 = tmp->localId;
             			}
             			else {
-HXLINE(1691)				_hx_tmp1 = null();
+HXLINE(1713)				_hx_tmp1 = null();
             			}
-HXDLIN(1691)			if ((_hx_tmp1 == localId)) {
-HXLINE(1691)				_hx_tmp = corrected->__get(0).StaticCast<  ::borogove::ChatMessage >()->versions;
+HXDLIN(1713)			if ((_hx_tmp1 == localId)) {
+HXLINE(1713)				_hx_tmp = corrected->__get(0).StaticCast<  ::borogove::ChatMessage >()->versions;
             			}
             			else {
-HXLINE(1691)				_hx_tmp = ::Array_obj< ::Dynamic>::__new(1)->init(0,message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build());
-            			}
-HXDLIN(1691)			message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->versions = _hx_tmp;
-HXLINE(1692)			message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->localId = toSendId;
-HXLINE(1693)			 ::borogove::Channel _gthis1 = _gthis;
-HXDLIN(1693)			 ::borogove::Stanza _hx_tmp2 = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build()->asStanza();
-HXDLIN(1693)			_gthis1->sendMessageStanza(_hx_tmp2,outboxItem);
-HXLINE(1694)			_gthis->client->notifyMessageHandlers(corrected->__get(0).StaticCast<  ::borogove::ChatMessage >(),1);
-HXLINE(1695)			 ::borogove::ChatMessage tmp1 = _gthis->lastMessage;
-HXDLIN(1695)			::String _hx_tmp3;
-HXDLIN(1695)			if (::hx::IsNotNull( tmp1 )) {
-HXLINE(1695)				_hx_tmp3 = tmp1->localId;
+HXLINE(1713)				_hx_tmp = ::Array_obj< ::Dynamic>::__new(1)->init(0,message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build());
+            			}
+HXDLIN(1713)			message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->versions = _hx_tmp;
+HXLINE(1714)			message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->localId = toSendId;
+HXLINE(1715)			 ::borogove::Channel _gthis1 = _gthis;
+HXDLIN(1715)			 ::borogove::Stanza _hx_tmp2 = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build()->asStanza();
+HXDLIN(1715)			_gthis1->sendMessageStanza(_hx_tmp2,outboxItem);
+HXLINE(1716)			_gthis->client->notifyMessageHandlers(corrected->__get(0).StaticCast<  ::borogove::ChatMessage >(),1);
+HXLINE(1717)			 ::borogove::ChatMessage tmp1 = _gthis->lastMessage;
+HXDLIN(1717)			::String _hx_tmp3;
+HXDLIN(1717)			if (::hx::IsNotNull( tmp1 )) {
+HXLINE(1717)				_hx_tmp3 = tmp1->localId;
             			}
             			else {
-HXLINE(1695)				_hx_tmp3 = null();
+HXLINE(1717)				_hx_tmp3 = null();
             			}
-HXDLIN(1695)			if ((localId == _hx_tmp3)) {
-HXLINE(1696)				_gthis->setLastMessage(corrected->__get(0).StaticCast<  ::borogove::ChatMessage >());
-HXLINE(1697)				_gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
+HXDLIN(1717)			if ((localId == _hx_tmp3)) {
+HXLINE(1718)				_gthis->setLastMessage(corrected->__get(0).StaticCast<  ::borogove::ChatMessage >());
+HXLINE(1719)				_gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
             			}
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1684_correctMessage)
-HXDLIN(1684)		::Array< ::Dynamic> message1 = ::Array_obj< ::Dynamic>::__new(1)->init(0,message);
-HXDLIN(1684)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1685)		::String toSendId = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->localId;
-HXLINE(1686)		message1[0] = this->prepareOutgoingMessage(message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >());
-HXLINE(1687)		 ::borogove::ChatMessage _hx_tmp = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build();
-HXDLIN(1687)		message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->versions = ::Array_obj< ::Dynamic>::__new(1)->init(0,_hx_tmp);
-HXLINE(1688)		message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->localId = localId;
-HXLINE(1689)		 ::borogove::OutboxItem outboxItem = this->outbox->newItem();
-HXLINE(1690)		 ::borogove::Client _hx_tmp1 = this->client;
-HXDLIN(1690)		::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp1->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build())), ::Dynamic(new _hx_Closure_0(_gthis,message1,localId,toSendId,outboxItem)),null());
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1706_correctMessage)
+HXDLIN(1706)		::Array< ::Dynamic> message1 = ::Array_obj< ::Dynamic>::__new(1)->init(0,message);
+HXDLIN(1706)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1707)		::String toSendId = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->localId;
+HXLINE(1708)		message1[0] = this->prepareOutgoingMessage(message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >());
+HXLINE(1709)		 ::borogove::ChatMessage _hx_tmp = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build();
+HXDLIN(1709)		message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->versions = ::Array_obj< ::Dynamic>::__new(1)->init(0,_hx_tmp);
+HXLINE(1710)		message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->localId = localId;
+HXLINE(1711)		 ::borogove::OutboxItem outboxItem = this->outbox->newItem();
+HXLINE(1712)		 ::borogove::Client _hx_tmp1 = this->client;
+HXDLIN(1712)		::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp1->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build())), ::Dynamic(new _hx_Closure_0(_gthis,message1,localId,toSendId,outboxItem)),null());
             	}
 
 
 void Channel_obj::sendMessage( ::borogove::ChatMessageBuilder message){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1703_sendMessage)
-HXDLIN(1703)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1704)		if ((this->uiState == 3)) {
-HXLINE(1704)			this->uiState = 1;
-            		}
-HXLINE(1705)		if (::hx::IsNotNull( this->typingTimer )) {
-HXLINE(1705)			this->typingTimer->stop();
-            		}
-HXLINE(1706)		this->client->chatActivity(::hx::ObjectPtr<OBJ_>(this),null());
-HXLINE(1707)		message = this->prepareOutgoingMessage(message);
-HXLINE(1708)		 ::borogove::Stanza stanza = message->build()->asStanza();
-HXLINE(1710)		{
-HXLINE(1710)			 ::Dynamic this1 = stanza->attr;
-HXDLIN(1710)			::Reflect_obj::setField(this1,HX_("from",6a,a5,c2,43),this->getFullJid()->asString());
-            		}
-HXLINE(1711)		 ::borogove::MessageStanza fromStanza = ::borogove::Message_obj::fromStanza(stanza,this->client->jid,null(),null())->parsed;
-HXLINE(1712)		{
-HXLINE(1712)			 ::Dynamic this2 = stanza->attr;
-HXDLIN(1712)			::Reflect_obj::setField(this2,HX_("from",6a,a5,c2,43),this->client->jid->asString());
-            		}
-HXLINE(1713)		switch((int)(fromStanza->_hx_getIndex())){
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1725_sendMessage)
+HXDLIN(1725)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1726)		if ((this->uiState == 3)) {
+HXLINE(1726)			this->uiState = 1;
+            		}
+HXLINE(1727)		if (::hx::IsNotNull( this->typingTimer )) {
+HXLINE(1727)			this->typingTimer->stop();
+            		}
+HXLINE(1728)		this->client->chatActivity(::hx::ObjectPtr<OBJ_>(this),null());
+HXLINE(1729)		message = this->prepareOutgoingMessage(message);
+HXLINE(1730)		 ::borogove::Stanza stanza = message->build()->asStanza();
+HXLINE(1732)		{
+HXLINE(1732)			 ::Dynamic this1 = stanza->attr;
+HXDLIN(1732)			::Reflect_obj::setField(this1,HX_("from",6a,a5,c2,43),this->getFullJid()->asString());
+            		}
+HXLINE(1733)		 ::borogove::MessageStanza fromStanza = ::borogove::Message_obj::fromStanza(stanza,this->client->jid,null(),null())->parsed;
+HXLINE(1734)		{
+HXLINE(1734)			 ::Dynamic this2 = stanza->attr;
+HXDLIN(1734)			::Reflect_obj::setField(this2,HX_("from",6a,a5,c2,43),this->client->jid->asString());
+            		}
+HXLINE(1735)		switch((int)(fromStanza->_hx_getIndex())){
             			case (int)1: {
             				HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::borogove::Channel,_gthis, ::borogove::OutboxItem,outboxItem, ::borogove::Stanza,stanza) HXARGC(1)
             				 ::borogove::EventResult _hx_run(::Array< ::Dynamic> stored){
-            					HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1721_sendMessage)
-HXLINE(1722)					_gthis->sendMessageStanza(stanza,outboxItem);
-HXLINE(1723)					_gthis->setLastMessage(stored->__get(0).StaticCast<  ::borogove::ChatMessage >());
-HXLINE(1724)					int _hx_tmp;
-HXDLIN(1724)					if ((stored->__get(0).StaticCast<  ::borogove::ChatMessage >()->versions->length > 1)) {
-HXLINE(1724)						_hx_tmp = 1;
+            					HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1743_sendMessage)
+HXLINE(1744)					_gthis->sendMessageStanza(stanza,outboxItem);
+HXLINE(1745)					_gthis->setLastMessage(stored->__get(0).StaticCast<  ::borogove::ChatMessage >());
+HXLINE(1746)					int _hx_tmp;
+HXDLIN(1746)					if ((stored->__get(0).StaticCast<  ::borogove::ChatMessage >()->versions->length > 1)) {
+HXLINE(1746)						_hx_tmp = 1;
             					}
             					else {
-HXLINE(1724)						_hx_tmp = 0;
+HXLINE(1746)						_hx_tmp = 0;
             					}
-HXDLIN(1724)					_gthis->client->notifyMessageHandlers(stored->__get(0).StaticCast<  ::borogove::ChatMessage >(),_hx_tmp);
-HXLINE(1725)					return _gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
+HXDLIN(1746)					_gthis->client->notifyMessageHandlers(stored->__get(0).StaticCast<  ::borogove::ChatMessage >(),_hx_tmp);
+HXLINE(1747)					return _gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
             				}
             				HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1715)				if (::hx::IsNotNull( this->isActive )) {
-HXLINE(1716)					this->isActive = true;
-HXLINE(1717)					this->activeThread = message->threadId;
-HXLINE(1718)					stanza->tag(HX_("active",c6,41,46,16), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(1737)				if (::hx::IsNotNull( this->isActive )) {
+HXLINE(1738)					this->isActive = true;
+HXLINE(1739)					this->activeThread = message->threadId;
+HXLINE(1740)					stanza->tag(HX_("active",c6,41,46,16), ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/chatstates",8e,6d,41,6d))))->up();
             				}
-HXLINE(1720)				 ::borogove::OutboxItem outboxItem = this->outbox->newItem();
-HXLINE(1721)				 ::borogove::Client _hx_tmp = this->client;
-HXDLIN(1721)				::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,message->build())), ::Dynamic(new _hx_Closure_0(_gthis,outboxItem,stanza)),null());
+HXLINE(1742)				 ::borogove::OutboxItem outboxItem = this->outbox->newItem();
+HXLINE(1743)				 ::borogove::Client _hx_tmp = this->client;
+HXDLIN(1743)				::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,message->build())), ::Dynamic(new _hx_Closure_0(_gthis,outboxItem,stanza)),null());
             			}
             			break;
             			case (int)3: {
             				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::borogove::Channel,_gthis, ::borogove::Stanza,stanza) HXARGC(1)
             				void _hx_run( ::borogove::ChatMessage stored){
-            					HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1728_sendMessage)
-HXLINE(1729)					_gthis->client->sendStanza(stanza);
-HXLINE(1730)					if (::hx::IsNotNull( stored )) {
-HXLINE(1730)						_gthis->client->notifyMessageHandlers(stored,2);
+            					HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1750_sendMessage)
+HXLINE(1751)					_gthis->client->sendStanza(stanza);
+HXLINE(1752)					if (::hx::IsNotNull( stored )) {
+HXLINE(1752)						_gthis->client->notifyMessageHandlers(stored,2);
             					}
             				}
             				HX_END_LOCAL_FUNC1((void))
 
-HXLINE(1728)				::Dynamic _hx_tmp1 = this->persistence;
-HXDLIN(1728)				::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeReaction(_hx_tmp1,this->client->accountId(),fromStanza->_hx_getObject(0).StaticCast<  ::borogove::ReactionUpdate >()), ::Dynamic(new _hx_Closure_1(_gthis,stanza)),null());
+HXLINE(1750)				::Dynamic _hx_tmp1 = this->persistence;
+HXDLIN(1750)				::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeReaction(_hx_tmp1,this->client->accountId(),fromStanza->_hx_getObject(0).StaticCast<  ::borogove::ReactionUpdate >()), ::Dynamic(new _hx_Closure_1(_gthis,stanza)),null());
             			}
             			break;
             			default:{
-HXLINE(1733)				::haxe::Log_obj::trace(HX_("Invalid message",7e,ab,89,95), ::Dynamic(::hx::Anon_obj::Create(5)
+HXLINE(1755)				::haxe::Log_obj::trace(HX_("Invalid message",7e,ab,89,95), ::Dynamic(::hx::Anon_obj::Create(5)
             					->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Channel",56,82,6a,da))
             					->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,fromStanza))
             					->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("sendMessage",5f,89,1d,24))
             					->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Chat.hx",98,ae,63,17))
-            					->setFixed(4,HX_("lineNumber",dd,81,22,76),1733)));
-HXLINE(1734)				HX_STACK_DO_THROW(HX_("Trying to send invalid message.",dc,74,a0,91));
+            					->setFixed(4,HX_("lineNumber",dd,81,22,76),1755)));
+HXLINE(1756)				HX_STACK_DO_THROW(HX_("Trying to send invalid message.",dc,74,a0,91));
             			}
             		}
             	}
@@ -1648,181 +1726,181 @@ HXLINE(1734)				HX_STACK_DO_THROW(HX_("Trying to send invalid message.",dc,74,a0
 void Channel_obj::removeReaction( ::borogove::ChatMessage m, ::borogove::Reaction reaction){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_1, ::borogove::Channel,_gthis, ::borogove::ReactionUpdate,update4, ::borogove::OutboxItem,outboxItem) HXARGC(1)
             		void _hx_run( ::borogove::ChatMessage stored){
-            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1760_removeReaction)
-HXLINE(1761)			 ::borogove::Channel _gthis1 = _gthis;
-HXDLIN(1761)			 ::borogove::Stanza _hx_tmp = update4->asStanza();
-HXDLIN(1761)			_gthis1->sendMessageStanza(_hx_tmp,outboxItem);
-HXLINE(1762)			if (::hx::IsNotNull( stored )) {
-HXLINE(1762)				_gthis->client->notifyMessageHandlers(stored,2);
+            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1782_removeReaction)
+HXLINE(1783)			 ::borogove::Channel _gthis1 = _gthis;
+HXDLIN(1783)			 ::borogove::Stanza _hx_tmp = update4->asStanza();
+HXDLIN(1783)			_gthis1->sendMessageStanza(_hx_tmp,outboxItem);
+HXLINE(1784)			if (::hx::IsNotNull( stored )) {
+HXLINE(1784)				_gthis->client->notifyMessageHandlers(stored,2);
             			}
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1739_removeReaction)
-HXDLIN(1739)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1740)		if (::Std_obj::isOfType(reaction,::hx::ClassOf< ::borogove::CustomEmojiReaction >())) {
-HXLINE(1741)			if (::hx::IsNull( reaction->envelopeId )) {
-HXLINE(1741)				HX_STACK_DO_THROW(HX_("Cannot remove custom emoji reaction without envelopeId",90,e6,80,fb));
-            			}
-HXLINE(1742)			 ::borogove::ChatMessageBuilder correct = m->reply();
-HXLINE(1743)			correct->localId = ::borogove::ID_obj::_hx_long();
-HXLINE(1744)			correct->setHtml(HX_("",00,00,00,00));
-HXLINE(1745)			correct->text = null();
-HXLINE(1746)			this->correctMessage(reaction->envelopeId,correct);
-HXLINE(1747)			return;
-            		}
-HXLINE(1751)		::Array< ::Dynamic> reactions = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(1752)		{
-HXLINE(1752)			::Dynamic this1 = m->reactions;
-HXDLIN(1752)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(this1);
-HXDLIN(1752)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE(1752)				::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN(1752)				::Array< ::Dynamic> _g_value = ( (::Array< ::Dynamic>)(::haxe::IMap_obj::get(this1,key)) );
-HXLINE(1753)				if ((key != reaction->key)) {
+            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1761_removeReaction)
+HXDLIN(1761)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1762)		if (::Std_obj::isOfType(reaction,::hx::ClassOf< ::borogove::CustomEmojiReaction >())) {
+HXLINE(1763)			if (::hx::IsNull( reaction->envelopeId )) {
+HXLINE(1763)				HX_STACK_DO_THROW(HX_("Cannot remove custom emoji reaction without envelopeId",90,e6,80,fb));
+            			}
+HXLINE(1764)			 ::borogove::ChatMessageBuilder correct = m->reply();
+HXLINE(1765)			correct->localId = ::borogove::ID_obj::_hx_long();
+HXLINE(1766)			correct->setHtml(HX_("",00,00,00,00));
+HXLINE(1767)			correct->text = null();
+HXLINE(1768)			this->correctMessage(reaction->envelopeId,correct);
+HXLINE(1769)			return;
+            		}
+HXLINE(1773)		::Array< ::Dynamic> reactions = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1774)		{
+HXLINE(1774)			::Dynamic this1 = m->reactions;
+HXDLIN(1774)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(this1);
+HXDLIN(1774)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE(1774)				::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN(1774)				::Array< ::Dynamic> _g_value = ( (::Array< ::Dynamic>)(::haxe::IMap_obj::get(this1,key)) );
+HXLINE(1775)				if ((key != reaction->key)) {
             					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Channel,_gthis) HXARGC(1)
             					bool _hx_run( ::borogove::Reaction r){
-            						HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1754_removeReaction)
-HXLINE(1754)						::String r1 = r->senderId;
-HXDLIN(1754)						return (r1 == _gthis->getFullJid()->asString());
+            						HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1776_removeReaction)
+HXLINE(1776)						::String r1 = r->senderId;
+HXDLIN(1776)						return (r1 == _gthis->getFullJid()->asString());
             					}
             					HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1754)					 ::borogove::Reaction react = ( ( ::borogove::Reaction)(::Lambda_obj::find(_g_value, ::Dynamic(new _hx_Closure_0(_gthis)))) );
-HXLINE(1755)					bool _hx_tmp;
-HXDLIN(1755)					if (::hx::IsNotNull( react )) {
-HXLINE(1755)						_hx_tmp = !(::Std_obj::isOfType(react,::hx::ClassOf< ::borogove::CustomEmojiReaction >()));
+HXLINE(1776)					 ::borogove::Reaction react = ( ( ::borogove::Reaction)(::Lambda_obj::find(_g_value, ::Dynamic(new _hx_Closure_0(_gthis)))) );
+HXLINE(1777)					bool _hx_tmp;
+HXDLIN(1777)					if (::hx::IsNotNull( react )) {
+HXLINE(1777)						_hx_tmp = !(::Std_obj::isOfType(react,::hx::ClassOf< ::borogove::CustomEmojiReaction >()));
             					}
             					else {
-HXLINE(1755)						_hx_tmp = false;
+HXLINE(1777)						_hx_tmp = false;
             					}
-HXDLIN(1755)					if (_hx_tmp) {
-HXLINE(1755)						reactions->push(react);
+HXDLIN(1777)					if (_hx_tmp) {
+HXLINE(1777)						reactions->push(react);
             					}
             				}
             			}
             		}
-HXLINE(1758)		::String update = ::borogove::ID_obj::_hx_long();
-HXDLIN(1758)		::String m1 = m->serverId;
-HXDLIN(1758)		::String update1 = m->chatId();
-HXDLIN(1758)		::String update2 = m->chatId();
-HXDLIN(1758)		::String update3 = this->getFullJid()->asString();
-HXDLIN(1758)		 ::borogove::ReactionUpdate update4 =  ::borogove::ReactionUpdate_obj::__alloc( HX_CTX ,update,m1,update1,null(),update2,update3,::borogove::Date_obj::format(::Date_obj::now()),reactions,0);
-HXLINE(1759)		 ::borogove::OutboxItem outboxItem = this->outbox->newItem();
-HXLINE(1760)		::Dynamic _hx_tmp1 = this->persistence;
-HXDLIN(1760)		::String _hx_tmp2 = this->client->accountId();
-HXDLIN(1760)		::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeReaction(_hx_tmp1,_hx_tmp2,update4), ::Dynamic(new _hx_Closure_1(_gthis,update4,outboxItem)),null());
+HXLINE(1780)		::String update = ::borogove::ID_obj::_hx_long();
+HXDLIN(1780)		::String m1 = m->serverId;
+HXDLIN(1780)		::String update1 = m->chatId();
+HXDLIN(1780)		::String update2 = m->chatId();
+HXDLIN(1780)		::String update3 = this->getFullJid()->asString();
+HXDLIN(1780)		 ::borogove::ReactionUpdate update4 =  ::borogove::ReactionUpdate_obj::__alloc( HX_CTX ,update,m1,update1,null(),update2,update3,::borogove::Date_obj::format(::Date_obj::now()),reactions,0);
+HXLINE(1781)		 ::borogove::OutboxItem outboxItem = this->outbox->newItem();
+HXLINE(1782)		::Dynamic _hx_tmp1 = this->persistence;
+HXDLIN(1782)		::String _hx_tmp2 = this->client->accountId();
+HXDLIN(1782)		::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeReaction(_hx_tmp1,_hx_tmp2,update4), ::Dynamic(new _hx_Closure_1(_gthis,update4,outboxItem)),null());
             	}
 
 
 void Channel_obj::sendMessageStanza( ::borogove::Stanza stanza, ::borogove::OutboxItem outboxItem){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::Channel,_gthis, ::borogove::Stanza,stanza) HXARGC(0)
             		void _hx_run(){
-            			HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1772_sendMessageStanza)
-HXLINE(1772)			_gthis->client->sendStanza(stanza);
+            			HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1794_sendMessageStanza)
+HXLINE(1794)			_gthis->client->sendStanza(stanza);
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1766_sendMessageStanza)
-HXDLIN(1766)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1767)		if ((stanza->name != HX_("message",c7,35,11,9a))) {
-HXLINE(1767)			HX_STACK_DO_THROW(HX_("Can only send message stanza this way",cb,e1,b3,60));
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1788_sendMessageStanza)
+HXDLIN(1788)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1789)		if ((stanza->name != HX_("message",c7,35,11,9a))) {
+HXLINE(1789)			HX_STACK_DO_THROW(HX_("Can only send message stanza this way",cb,e1,b3,60));
             		}
-HXLINE(1769)		if (::hx::IsNull( outboxItem )) {
-HXLINE(1769)			outboxItem = this->outbox->newItem();
+HXLINE(1791)		if (::hx::IsNull( outboxItem )) {
+HXLINE(1791)			outboxItem = this->outbox->newItem();
             		}
-HXLINE(1770)		::Reflect_obj::setField(stanza->attr,HX_("type",ba,f2,08,4d),HX_("groupchat",97,1d,c8,e5));
-HXLINE(1771)		::Reflect_obj::setField(stanza->attr,HX_("to",7b,65,00,00),this->chatId);
-HXLINE(1772)		outboxItem->handle( ::Dynamic(new _hx_Closure_0(_gthis,stanza)));
+HXLINE(1792)		::Reflect_obj::setField(stanza->attr,HX_("type",ba,f2,08,4d),HX_("groupchat",97,1d,c8,e5));
+HXLINE(1793)		::Reflect_obj::setField(stanza->attr,HX_("to",7b,65,00,00),this->chatId);
+HXLINE(1794)		outboxItem->handle( ::Dynamic(new _hx_Closure_0(_gthis,stanza)));
             	}
 
 
 ::String Channel_obj::lastMessageId(){
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1777_lastMessageId)
-HXDLIN(1777)		 ::borogove::ChatMessage tmp = this->lastMessage;
-HXDLIN(1777)		if (::hx::IsNotNull( tmp )) {
-HXDLIN(1777)			return tmp->serverId;
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1799_lastMessageId)
+HXDLIN(1799)		 ::borogove::ChatMessage tmp = this->lastMessage;
+HXDLIN(1799)		if (::hx::IsNotNull( tmp )) {
+HXDLIN(1799)			return tmp->serverId;
             		}
             		else {
-HXDLIN(1777)			return null();
+HXDLIN(1799)			return null();
             		}
-HXDLIN(1777)		return null();
+HXDLIN(1799)		return null();
             	}
 
 
 void Channel_obj::markReadUpTo( ::borogove::ChatMessage message){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::Channel,_gthis, ::borogove::ChatMessage,message) HXARGC(1)
             		void _hx_run( ::Dynamic _){
-            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1782_markReadUpTo)
-HXLINE(1785)			bool _hx_tmp;
-HXDLIN(1785)			if (message->isIncoming()) {
-HXLINE(1785)				_hx_tmp = ::hx::IsNotNull( message->serverId );
+            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1804_markReadUpTo)
+HXLINE(1807)			bool _hx_tmp;
+HXDLIN(1807)			if (message->isIncoming()) {
+HXLINE(1807)				_hx_tmp = ::hx::IsNotNull( message->serverId );
             			}
             			else {
-HXLINE(1785)				_hx_tmp = false;
+HXLINE(1807)				_hx_tmp = false;
             			}
-HXDLIN(1785)			if (_hx_tmp) {
-HXLINE(1786)				::String _gthis1 = _gthis->chatId;
-HXDLIN(1786)				::String stanza = ::borogove::ID_obj::_hx_long();
-HXDLIN(1786)				 ::borogove::Stanza stanza1 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(3)
+HXDLIN(1807)			if (_hx_tmp) {
+HXLINE(1808)				::String _gthis1 = _gthis->chatId;
+HXDLIN(1808)				::String stanza = ::borogove::ID_obj::_hx_long();
+HXDLIN(1808)				 ::borogove::Stanza stanza1 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(3)
             					->setFixed(0,HX_("id",db,5b,00,00),stanza)
             					->setFixed(1,HX_("to",7b,65,00,00),_gthis1)
             					->setFixed(2,HX_("type",ba,f2,08,4d),HX_("groupchat",97,1d,c8,e5))))->tag(HX_("displayed",21,17,db,c1), ::Dynamic(::hx::Anon_obj::Create(2)
             					->setFixed(0,HX_("id",db,5b,00,00),message->serverId)
             					->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:chat-markers:0",96,b8,66,e7))))->up();
-HXLINE(1788)				if (::hx::IsNotNull( message->threadId )) {
-HXLINE(1789)					stanza1->textTag(HX_("thread",ca,7a,b9,8e),message->threadId,null());
+HXLINE(1810)				if (::hx::IsNotNull( message->threadId )) {
+HXLINE(1811)					stanza1->textTag(HX_("thread",ca,7a,b9,8e),message->threadId,null());
             				}
-HXLINE(1791)				_gthis->client->sendStanza(stanza1);
+HXLINE(1813)				_gthis->client->sendStanza(stanza1);
             			}
-HXLINE(1794)			_gthis->publishMds();
-HXLINE(1795)			_gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
+HXLINE(1816)			_gthis->publishMds();
+HXLINE(1817)			_gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
             		}
             		HX_END_LOCAL_FUNC1((void))
 
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             		::Dynamic _hx_run( ::Dynamic e){
-            			HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1797_markReadUpTo)
-HXLINE(1797)			if (::hx::IsNotNull( e )) {
-HXLINE(1797)				return ::thenshim::_Promise::Promise_Impl__obj::reject(e);
+            			HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1819_markReadUpTo)
+HXLINE(1819)			if (::hx::IsNotNull( e )) {
+HXLINE(1819)				return ::thenshim::_Promise::Promise_Impl__obj::reject(e);
             			}
             			else {
-HXLINE(1797)				return null();
+HXLINE(1819)				return null();
             			}
-HXDLIN(1797)			return null();
+HXDLIN(1819)			return null();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1781_markReadUpTo)
-HXDLIN(1781)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1782)		::thenshim::_Promise::Promise_Impl__obj::then(this->markReadUpToMessage(message), ::Dynamic(new _hx_Closure_0(_gthis,message)), ::Dynamic(new _hx_Closure_1()));
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1803_markReadUpTo)
+HXDLIN(1803)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1804)		::thenshim::_Promise::Promise_Impl__obj::then(this->markReadUpToMessage(message), ::Dynamic(new _hx_Closure_0(_gthis,message)), ::Dynamic(new _hx_Closure_1()));
             	}
 
 
 void Channel_obj::bookmark(){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::borogove::Channel,_gthis) HXARGC(1)
             		void _hx_run( ::borogove::Stanza response){
-            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1823_bookmark)
-HXLINE(1823)			if ((( (::String)(::Reflect_obj::field(response->attr,HX_("type",ba,f2,08,4d))) ) == HX_("error",c8,cb,29,73))) {
-HXLINE(1824)				 ::borogove::Stanza tmp = response->getChild(HX_("error",c8,cb,29,73),null());
-HXDLIN(1824)				 ::borogove::Stanza preconditionError;
-HXDLIN(1824)				if (::hx::IsNotNull( tmp )) {
-HXLINE(1824)					preconditionError = tmp->getChild(HX_("precondition-not-met",2d,db,78,db),HX_("http://jabber.org/protocol/pubsub#errors",97,74,3a,a8));
+            			HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1845_bookmark)
+HXLINE(1845)			if ((( (::String)(::Reflect_obj::field(response->attr,HX_("type",ba,f2,08,4d))) ) == HX_("error",c8,cb,29,73))) {
+HXLINE(1846)				 ::borogove::Stanza tmp = response->getChild(HX_("error",c8,cb,29,73),null());
+HXDLIN(1846)				 ::borogove::Stanza preconditionError;
+HXDLIN(1846)				if (::hx::IsNotNull( tmp )) {
+HXLINE(1846)					preconditionError = tmp->getChild(HX_("precondition-not-met",2d,db,78,db),HX_("http://jabber.org/protocol/pubsub#errors",97,74,3a,a8));
             				}
             				else {
-HXLINE(1824)					preconditionError = null();
+HXLINE(1846)					preconditionError = null();
             				}
-HXLINE(1825)				if (::hx::IsNotNull( preconditionError )) {
+HXLINE(1847)				if (::hx::IsNotNull( preconditionError )) {
             					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Channel,_gthis) HXARGC(1)
             					void _hx_run( ::borogove::Stanza response){
-            						HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1841_bookmark)
-HXLINE(1841)						if ((( (::String)(::Reflect_obj::field(response->attr,HX_("type",ba,f2,08,4d))) ) == HX_("result",dd,68,84,08))) {
-HXLINE(1842)							_gthis->bookmark();
+            						HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1863_bookmark)
+HXLINE(1863)						if ((( (::String)(::Reflect_obj::field(response->attr,HX_("type",ba,f2,08,4d))) ) == HX_("result",dd,68,84,08))) {
+HXLINE(1864)							_gthis->bookmark();
             						}
             					}
             					HX_END_LOCAL_FUNC1((void))
 
-HXLINE(1827)					 ::borogove::GenericStream _gthis1 = _gthis->stream;
-HXDLIN(1827)					_gthis1->sendIq( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(1849)					 ::borogove::GenericStream _gthis1 = _gthis->stream;
+HXDLIN(1849)					_gthis1->sendIq( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))))->tag(HX_("pubsub",e3,da,f8,66), ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/pubsub#owner",c7,28,a3,08))))->tag(HX_("configure",e6,f9,5b,c0), ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("node",02,0a,0a,49),HX_("urn:xmpp:bookmarks:1",58,3c,53,7d))))->tag(HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
@@ -1841,38 +1919,38 @@ HXDLIN(1827)					_gthis1->sendIq( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1801_bookmark)
-HXDLIN(1801)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1802)		if ((this->uiState == 3)) {
-HXLINE(1802)			this->uiState = 1;
+            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1823_bookmark)
+HXDLIN(1823)		 ::borogove::Channel _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1824)		if ((this->uiState == 3)) {
+HXLINE(1824)			this->uiState = 1;
             		}
-HXLINE(1803)		 ::borogove::GenericStream _hx_tmp = this->stream;
-HXLINE(1804)		 ::borogove::Stanza _hx_tmp1 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(1825)		 ::borogove::GenericStream _hx_tmp = this->stream;
+HXLINE(1826)		 ::borogove::Stanza _hx_tmp1 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))))->tag(HX_("pubsub",e3,da,f8,66), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/pubsub",57,94,3c,f2))))->tag(HX_("publish",8f,21,1d,ae), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("node",02,0a,0a,49),HX_("urn:xmpp:bookmarks:1",58,3c,53,7d))))->tag(HX_("item",13,c5,bf,45), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("id",db,5b,00,00),this->chatId)));
-HXLINE(1808)		::String _hx_tmp2 = this->getDisplayName();
-HXDLIN(1808)		::String _hx_tmp3;
-HXDLIN(1808)		bool _hx_tmp4;
-HXDLIN(1808)		if ((this->uiState != 2)) {
-HXLINE(1808)			_hx_tmp4 = (this->uiState == 3);
+HXLINE(1830)		::String _hx_tmp2 = this->getDisplayName();
+HXDLIN(1830)		::String _hx_tmp3;
+HXDLIN(1830)		bool _hx_tmp4;
+HXDLIN(1830)		if ((this->uiState != 2)) {
+HXLINE(1830)			_hx_tmp4 = (this->uiState == 3);
             		}
             		else {
-HXLINE(1808)			_hx_tmp4 = true;
+HXLINE(1830)			_hx_tmp4 = true;
             		}
-HXDLIN(1808)		if (_hx_tmp4) {
-HXLINE(1808)			_hx_tmp3 = HX_("false",a3,35,4f,fb);
+HXDLIN(1830)		if (_hx_tmp4) {
+HXLINE(1830)			_hx_tmp3 = HX_("false",a3,35,4f,fb);
             		}
             		else {
-HXLINE(1808)			_hx_tmp3 = HX_("true",4e,a7,03,4d);
+HXLINE(1830)			_hx_tmp3 = HX_("true",4e,a7,03,4d);
             		}
-HXLINE(1804)		 ::borogove::Stanza _hx_tmp5 = _hx_tmp1->tag(HX_("conference",1c,2b,83,41), ::Dynamic(::hx::Anon_obj::Create(3)
+HXLINE(1826)		 ::borogove::Stanza _hx_tmp5 = _hx_tmp1->tag(HX_("conference",1c,2b,83,41), ::Dynamic(::hx::Anon_obj::Create(3)
             			->setFixed(0,HX_("autojoin",d9,f6,b1,3e),_hx_tmp3)
             			->setFixed(1,HX_("name",4b,72,ff,48),_hx_tmp2)
             			->setFixed(2,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:bookmarks:1",58,3c,53,7d))));
-HXLINE(1809)		::String _hx_tmp6 = this->client->displayName();
-HXLINE(1803)		_hx_tmp->sendIq(_hx_tmp5->textTag(HX_("nick",a3,7b,05,49),_hx_tmp6,null())->addChild(this->extensions)->up()->up()->tag(HX_("publish-options",60,0b,5c,74),null())->tag(HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE(1831)		::String _hx_tmp6 = this->client->displayName();
+HXLINE(1825)		_hx_tmp->sendIq(_hx_tmp5->textTag(HX_("nick",a3,7b,05,49),_hx_tmp6,null())->addChild(this->extensions)->up()->up()->tag(HX_("publish-options",60,0b,5c,74),null())->tag(HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("type",ba,f2,08,4d),HX_("submit",18,58,06,9a))
             			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("jabber:x:data",c2,e1,e9,7c))))->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("var",e7,de,59,00),HX_("FORM_TYPE",d5,96,c9,5a))
@@ -1887,50 +1965,50 @@ HXLINE(1803)		_hx_tmp->sendIq(_hx_tmp5->textTag(HX_("nick",a3,7b,05,49),_hx_tmp6
 
 
 void Channel_obj::sendChatState(::String state,::String threadId){
-            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1852_sendChatState)
-HXLINE(1854)		::String stanza = ::borogove::ID_obj::_hx_long();
-HXLINE(1856)		::String stanza1 = this->client->jid->asString();
-HXLINE(1853)		 ::borogove::Stanza stanza2 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(4)
+            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1874_sendChatState)
+HXLINE(1876)		::String stanza = ::borogove::ID_obj::_hx_long();
+HXLINE(1878)		::String stanza1 = this->client->jid->asString();
+HXLINE(1875)		 ::borogove::Stanza stanza2 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(4)
             			->setFixed(0,HX_("id",db,5b,00,00),stanza)
             			->setFixed(1,HX_("to",7b,65,00,00),this->chatId)
             			->setFixed(2,HX_("from",6a,a5,c2,43),stanza1)
             			->setFixed(3,HX_("type",ba,f2,08,4d),HX_("groupchat",97,1d,c8,e5))))->tag(state, ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/chatstates",8e,6d,41,6d))))->up();
-HXLINE(1861)		if (::hx::IsNotNull( threadId )) {
-HXLINE(1862)			stanza2->textTag(HX_("thread",ca,7a,b9,8e),threadId,null());
+HXLINE(1883)		if (::hx::IsNotNull( threadId )) {
+HXLINE(1884)			stanza2->textTag(HX_("thread",ca,7a,b9,8e),threadId,null());
             		}
-HXLINE(1864)		this->stream->sendStanza(stanza2);
+HXLINE(1886)		this->stream->sendStanza(stanza2);
             	}
 
 
 void Channel_obj::close(){
-            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1868_close)
-HXLINE(1869)		if (::hx::IsNotNull( this->typingTimer )) {
-HXLINE(1869)			this->typingTimer->stop();
-            		}
-HXLINE(1870)		if ((this->uiState == 3)) {
-HXLINE(1871)			int _g = 0;
-HXDLIN(1871)			::Array< ::Dynamic> _g1 = this->invites();
-HXDLIN(1871)			while((_g < _g1->length)){
-HXLINE(1871)				 ::borogove::Stanza invite = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
-HXDLIN(1871)				_g = (_g + 1);
-HXLINE(1872)				 ::borogove::Client _hx_tmp = this->client;
-HXLINE(1873)				::String _hx_tmp1 = ::borogove::ID_obj::_hx_long();
-HXDLIN(1873)				 ::borogove::Stanza _hx_tmp2 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_GC_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1890_close)
+HXLINE(1891)		if (::hx::IsNotNull( this->typingTimer )) {
+HXLINE(1891)			this->typingTimer->stop();
+            		}
+HXLINE(1892)		if ((this->uiState == 3)) {
+HXLINE(1893)			int _g = 0;
+HXDLIN(1893)			::Array< ::Dynamic> _g1 = this->invites();
+HXDLIN(1893)			while((_g < _g1->length)){
+HXLINE(1893)				 ::borogove::Stanza invite = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
+HXDLIN(1893)				_g = (_g + 1);
+HXLINE(1894)				 ::borogove::Client _hx_tmp = this->client;
+HXLINE(1895)				::String _hx_tmp1 = ::borogove::ID_obj::_hx_long();
+HXDLIN(1895)				 ::borogove::Stanza _hx_tmp2 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(2)
             					->setFixed(0,HX_("id",db,5b,00,00),_hx_tmp1)
             					->setFixed(1,HX_("to",7b,65,00,00),this->chatId)))->tag(HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14))));
-HXLINE(1872)				_hx_tmp->sendStanza(_hx_tmp2->tag(HX_("decline",b6,5a,cc,e8), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(1894)				_hx_tmp->sendStanza(_hx_tmp2->tag(HX_("decline",b6,5a,cc,e8), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("to",7b,65,00,00),( (::String)(::Reflect_obj::field(invite->attr,HX_("from",6a,a5,c2,43))) ))))->up()->up());
             			}
             		}
-HXLINE(1880)		this->uiState = 2;
-HXLINE(1881)		::Dynamic _hx_tmp3 = this->persistence;
-HXDLIN(1881)		::borogove::Persistence_obj::storeChats(_hx_tmp3,this->client->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
-HXLINE(1882)		this->selfPing(false);
-HXLINE(1883)		this->bookmark();
-HXLINE(1884)		this->sendChatState(HX_("gone",5f,94,69,44),null());
-HXLINE(1885)		this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
+HXLINE(1902)		this->uiState = 2;
+HXLINE(1903)		::Dynamic _hx_tmp3 = this->persistence;
+HXDLIN(1903)		::borogove::Persistence_obj::storeChats(_hx_tmp3,this->client->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
+HXLINE(1904)		this->selfPing(false);
+HXLINE(1905)		this->bookmark();
+HXLINE(1906)		this->sendChatState(HX_("gone",5f,94,69,44),null());
+HXLINE(1907)		this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
             	}
 
 
@@ -2178,8 +2256,8 @@ void Channel_obj::__register()
 void Channel_obj::__boot()
 {
 {
-            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1234_boot)
-HXDLIN(1234)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_STACKFRAME(&_hx_pos_bf6e937f28c6df5e_1236_boot)
+HXDLIN(1236)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(25)
             				->setFixed(0,HX_("setPresence",fd,1b,38,97), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
diff --git a/Sources/c_borogove/src/borogove/Chat.cpp b/Sources/c_borogove/src/borogove/Chat.cpp
index 525410f..093fd06 100644
--- a/Sources/c_borogove/src/borogove/Chat.cpp
+++ b/Sources/c_borogove/src/borogove/Chat.cpp
@@ -1,6 +1,9 @@
 // Generated by Haxe 4.3.3
 #include <hxcpp.h>
 
+#ifndef INCLUDED_EReg
+#include <EReg.h>
+#endif
 #ifndef INCLUDED_Lambda
 #include <Lambda.h>
 #endif
@@ -152,151 +155,152 @@
 #include <thenshim/_Promise/Promise_Impl_.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_9cc1265c56ba593e_60_new,"borogove.Chat","new",0x8ce82ad7,"borogove.Chat.new","borogove/Chat.hx",60,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_371_chatId__fromC,"borogove.Chat","chatId__fromC",0x3b5eb13d,"borogove.Chat.chatId__fromC","HaxeCBridge.hx",371,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_371_uiState__fromC,"borogove.Chat","uiState__fromC",0xeee409e5,"borogove.Chat.uiState__fromC","HaxeCBridge.hx",371,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_371_isBlocked__fromC,"borogove.Chat","isBlocked__fromC",0x8b7ec7c0,"borogove.Chat.isBlocked__fromC","HaxeCBridge.hx",371,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_371_lastMessage__fromC,"borogove.Chat","lastMessage__fromC",0xda1e5df1,"borogove.Chat.lastMessage__fromC","HaxeCBridge.hx",371,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_371_isBookmarked__fromC,"borogove.Chat","isBookmarked__fromC",0x59d3f3b1,"borogove.Chat.isBookmarked__fromC","HaxeCBridge.hx",371,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_313_getMessagesBefore__fromC,"borogove.Chat","getMessagesBefore__fromC",0x7fc75d21,"borogove.Chat.getMessagesBefore__fromC","HaxeCBridge.hx",313,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_313_getMessagesAfter__fromC,"borogove.Chat","getMessagesAfter__fromC",0xee116876,"borogove.Chat.getMessagesAfter__fromC","HaxeCBridge.hx",313,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_313_getMessagesAround__fromC,"borogove.Chat","getMessagesAround__fromC",0x1557ef13,"borogove.Chat.getMessagesAround__fromC","HaxeCBridge.hx",313,0xa18550d8)
+HX_DEFINE_STACK_FRAME(_hx_pos_9cc1265c56ba593e_62_new,"borogove.Chat","new",0x8ce82ad7,"borogove.Chat.new","borogove/Chat.hx",62,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_398_chatId__fromC,"borogove.Chat","chatId__fromC",0x3b5eb13d,"borogove.Chat.chatId__fromC","HaxeCBridge.hx",398,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_398_uiState__fromC,"borogove.Chat","uiState__fromC",0xeee409e5,"borogove.Chat.uiState__fromC","HaxeCBridge.hx",398,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_398_isBlocked__fromC,"borogove.Chat","isBlocked__fromC",0x8b7ec7c0,"borogove.Chat.isBlocked__fromC","HaxeCBridge.hx",398,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_398_lastMessage__fromC,"borogove.Chat","lastMessage__fromC",0xda1e5df1,"borogove.Chat.lastMessage__fromC","HaxeCBridge.hx",398,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_398_isBookmarked__fromC,"borogove.Chat","isBookmarked__fromC",0x59d3f3b1,"borogove.Chat.isBookmarked__fromC","HaxeCBridge.hx",398,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_337_getMessagesBefore__fromC,"borogove.Chat","getMessagesBefore__fromC",0x7fc75d21,"borogove.Chat.getMessagesBefore__fromC","HaxeCBridge.hx",337,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_337_getMessagesAfter__fromC,"borogove.Chat","getMessagesAfter__fromC",0xee116876,"borogove.Chat.getMessagesAfter__fromC","HaxeCBridge.hx",337,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_337_getMessagesAround__fromC,"borogove.Chat","getMessagesAround__fromC",0x1557ef13,"borogove.Chat.getMessagesAround__fromC","HaxeCBridge.hx",337,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_169_fetchFromSync,"borogove.Chat","fetchFromSync",0x5969d876,"borogove.Chat.fetchFromSync","borogove/Chat.hx",169,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_193_fetchFromSync,"borogove.Chat","fetchFromSync",0x5969d876,"borogove.Chat.fetchFromSync","borogove/Chat.hx",193,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_168_fetchFromSync,"borogove.Chat","fetchFromSync",0x5969d876,"borogove.Chat.fetchFromSync","borogove/Chat.hx",168,0x1763ae98)
 HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_167_fetchFromSync,"borogove.Chat","fetchFromSync",0x5969d876,"borogove.Chat.fetchFromSync","borogove/Chat.hx",167,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_191_fetchFromSync,"borogove.Chat","fetchFromSync",0x5969d876,"borogove.Chat.fetchFromSync","borogove/Chat.hx",191,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_166_fetchFromSync,"borogove.Chat","fetchFromSync",0x5969d876,"borogove.Chat.fetchFromSync","borogove/Chat.hx",166,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_165_fetchFromSync,"borogove.Chat","fetchFromSync",0x5969d876,"borogove.Chat.fetchFromSync","borogove/Chat.hx",165,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_315_sendMessage__fromC,"borogove.Chat","sendMessage__fromC",0x32fe6463,"borogove.Chat.sendMessage__fromC","HaxeCBridge.hx",315,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_315_markReadUpTo__fromC,"borogove.Chat","markReadUpTo__fromC",0x3f04adb7,"borogove.Chat.markReadUpTo__fromC","HaxeCBridge.hx",315,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_315_bookmark__fromC,"borogove.Chat","bookmark__fromC",0x618f377a,"borogove.Chat.bookmark__fromC","HaxeCBridge.hx",315,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_311_getParticipants__fromC,"borogove.Chat","getParticipants__fromC",0xa2d7000c,"borogove.Chat.getParticipants__fromC","HaxeCBridge.hx",311,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_315_getParticipantDetails__fromC,"borogove.Chat","getParticipantDetails__fromC",0x40afb03d,"borogove.Chat.getParticipantDetails__fromC","HaxeCBridge.hx",315,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_315_correctMessage__fromC,"borogove.Chat","correctMessage__fromC",0xb004f7d3,"borogove.Chat.correctMessage__fromC","HaxeCBridge.hx",315,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_256_addReaction,"borogove.Chat","addReaction",0x55c74861,"borogove.Chat.addReaction","borogove/Chat.hx",256,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_260_addReaction,"borogove.Chat","addReaction",0x55c74861,"borogove.Chat.addReaction","borogove/Chat.hx",260,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_252_addReaction,"borogove.Chat","addReaction",0x55c74861,"borogove.Chat.addReaction","borogove/Chat.hx",252,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_315_removeReaction__fromC,"borogove.Chat","removeReaction__fromC",0xeaa4dc43,"borogove.Chat.removeReaction__fromC","HaxeCBridge.hx",315,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_306_typing,"borogove.Chat","typing",0xab024860,"borogove.Chat.typing","borogove/Chat.hx",306,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_285_typing,"borogove.Chat","typing",0xab024860,"borogove.Chat.typing","borogove/Chat.hx",285,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_300_typing,"borogove.Chat","typing",0xab024860,"borogove.Chat.typing","borogove/Chat.hx",300,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_324_setActive,"borogove.Chat","setActive",0x89bbc4bf,"borogove.Chat.setActive","borogove/Chat.hx",324,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_315_close__fromC,"borogove.Chat","close__fromC",0xc11a5e6a,"borogove.Chat.close__fromC","HaxeCBridge.hx",315,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_349_togglePinned,"borogove.Chat","togglePinned",0xfddcd475,"borogove.Chat.togglePinned","borogove/Chat.hx",349,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_359_block,"borogove.Chat","block",0xd3359b84,"borogove.Chat.block","borogove/Chat.hx",359,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_378_block,"borogove.Chat","block",0xd3359b84,"borogove.Chat.block","borogove/Chat.hx",378,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_406_block,"borogove.Chat","block",0xd3359b84,"borogove.Chat.block","borogove/Chat.hx",406,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_413_unblock,"borogove.Chat","unblock",0xad05ce4b,"borogove.Chat.unblock","borogove/Chat.hx",413,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_423_unblock,"borogove.Chat","unblock",0xad05ce4b,"borogove.Chat.unblock","borogove/Chat.hx",423,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_430_setNotificationsInternal,"borogove.Chat","setNotificationsInternal",0x95c15fac,"borogove.Chat.setNotificationsInternal","borogove/Chat.hx",430,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_440_setNotifications,"borogove.Chat","setNotifications",0x82bcd54f,"borogove.Chat.setNotifications","borogove/Chat.hx",440,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_451_notificationsFiltered,"borogove.Chat","notificationsFiltered",0xcab45596,"borogove.Chat.notificationsFiltered","borogove/Chat.hx",451,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_458_notifyMention,"borogove.Chat","notifyMention",0x00cf7c58,"borogove.Chat.notifyMention","borogove/Chat.hx",458,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_465_notifyReply,"borogove.Chat","notifyReply",0x65560f18,"borogove.Chat.notifyReply","borogove/Chat.hx",465,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_315_lastMessageId__fromC,"borogove.Chat","lastMessageId__fromC",0x7b1a3156,"borogove.Chat.lastMessageId__fromC","HaxeCBridge.hx",315,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_474_updateFromBookmark,"borogove.Chat","updateFromBookmark",0x8ad9a752,"borogove.Chat.updateFromBookmark","borogove/Chat.hx",474,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_484_updateFromRoster,"borogove.Chat","updateFromRoster",0xec826927,"borogove.Chat.updateFromRoster","borogove/Chat.hx",484,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_494_getPhoto,"borogove.Chat","getPhoto",0x2fa82e65,"borogove.Chat.getPhoto","borogove/Chat.hx",494,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_503_getPlaceholder,"borogove.Chat","getPlaceholder",0x7303a166,"borogove.Chat.getPlaceholder","borogove/Chat.hx",503,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_510_readUpTo,"borogove.Chat","readUpTo",0x83806d55,"borogove.Chat.readUpTo","borogove/Chat.hx",510,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_517_unreadCount,"borogove.Chat","unreadCount",0xcea74197,"borogove.Chat.unreadCount","borogove/Chat.hx",517,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_522_setUnreadCount,"borogove.Chat","setUnreadCount",0x79212e87,"borogove.Chat.setUnreadCount","borogove/Chat.hx",522,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_528_preview,"borogove.Chat","preview",0x375341ff,"borogove.Chat.preview","borogove/Chat.hx",528,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_541_setLastMessage,"borogove.Chat","setLastMessage",0x26ed0078,"borogove.Chat.setLastMessage","borogove/Chat.hx",541,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_549_setDisplayName,"borogove.Chat","setDisplayName",0x09222814,"borogove.Chat.setDisplayName","borogove/Chat.hx",549,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_557_getDisplayName,"borogove.Chat","getDisplayName",0xe9023fa0,"borogove.Chat.getDisplayName","borogove/Chat.hx",557,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_577_setPresence,"borogove.Chat","setPresence",0xc4ee4574,"borogove.Chat.setPresence","borogove/Chat.hx",577,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_581_setCaps,"borogove.Chat","setCaps",0x02b6beda,"borogove.Chat.setCaps","borogove/Chat.hx",581,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_593_removePresence,"borogove.Chat","removePresence",0x619f6988,"borogove.Chat.removePresence","borogove/Chat.hx",593,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_601_getCaps,"borogove.Chat","getCaps",0x0fb52dce,"borogove.Chat.getCaps","borogove/Chat.hx",601,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_597_getCaps,"borogove.Chat","getCaps",0x0fb52dce,"borogove.Chat.getCaps","borogove/Chat.hx",597,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_610_getResourceCaps,"borogove.Chat","getResourceCaps",0xdf352abc,"borogove.Chat.getResourceCaps","borogove/Chat.hx",610,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_615_setAvatarSha1,"borogove.Chat","setAvatarSha1",0x86f1e8b7,"borogove.Chat.setAvatarSha1","borogove/Chat.hx",615,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_623_setTrusted,"borogove.Chat","setTrusted",0xaa03cede,"borogove.Chat.setTrusted","borogove/Chat.hx",623,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_635_isTrusted,"borogove.Chat","isTrusted",0x2e7342e4,"borogove.Chat.isTrusted","borogove/Chat.hx",635,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_640_livePresence,"borogove.Chat","livePresence",0x85c517f0,"borogove.Chat.livePresence","borogove/Chat.hx",640,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_647_syncing,"borogove.Chat","syncing",0xa29f5f5e,"borogove.Chat.syncing","borogove/Chat.hx",647,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_653_canAudioCall,"borogove.Chat","canAudioCall",0xb63e690d,"borogove.Chat.canAudioCall","borogove/Chat.hx",653,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_665_canVideoCall,"borogove.Chat","canVideoCall",0xbc413b32,"borogove.Chat.canVideoCall","borogove/Chat.hx",665,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_681_startCall,"borogove.Chat","startCall",0x0e7b9fd7,"borogove.Chat.startCall","borogove/Chat.hx",681,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_690_addMedia,"borogove.Chat","addMedia",0x8cf6812c,"borogove.Chat.addMedia","borogove/Chat.hx",690,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_698_acceptCall,"borogove.Chat","acceptCall",0xf591ee2f,"borogove.Chat.acceptCall","borogove/Chat.hx",698,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_709_hangup,"borogove.Chat","hangup",0x0bc81c36,"borogove.Chat.hangup","borogove/Chat.hx",709,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_718_callStatus,"borogove.Chat","callStatus",0x71a9b0d9,"borogove.Chat.callStatus","borogove/Chat.hx",718,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_729_dtmf,"borogove.Chat","dtmf",0xb7ac8892,"borogove.Chat.dtmf","borogove/Chat.hx",729,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_742_videoTracks,"borogove.Chat","videoTracks",0xebdaebda,"borogove.Chat.videoTracks","borogove/Chat.hx",742,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_311_videoTracks__fromC,"borogove.Chat","videoTracks__fromC",0x180a13df,"borogove.Chat.videoTracks__fromC","HaxeCBridge.hx",311,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_749_encryptionMode,"borogove.Chat","encryptionMode",0xd881b46f,"borogove.Chat.encryptionMode","borogove/Chat.hx",749,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_761_canSend,"borogove.Chat","canSend",0x6620d76f,"borogove.Chat.canSend","borogove/Chat.hx",761,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_767_invite,"borogove.Chat","invite",0xf3a43bb2,"borogove.Chat.invite","borogove/Chat.hx",767,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_785_canInvite,"borogove.Chat","canInvite",0x05f053b0,"borogove.Chat.canInvite","borogove/Chat.hx",785,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_791_isApp,"borogove.Chat","isApp",0xdf814d0e,"borogove.Chat.isApp","borogove/Chat.hx",791,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_819_hasCommands,"borogove.Chat","hasCommands",0xbec2bfb9,"borogove.Chat.hasCommands","borogove/Chat.hx",819,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_834_commands,"borogove.Chat","commands",0xcc3306f1,"borogove.Chat.commands","borogove/Chat.hx",834,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_822_commands,"borogove.Chat","commands",0xcc3306f1,"borogove.Chat.commands","borogove/Chat.hx",822,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_339_sendMessage__fromC,"borogove.Chat","sendMessage__fromC",0x32fe6463,"borogove.Chat.sendMessage__fromC","HaxeCBridge.hx",339,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_339_markReadUpTo__fromC,"borogove.Chat","markReadUpTo__fromC",0x3f04adb7,"borogove.Chat.markReadUpTo__fromC","HaxeCBridge.hx",339,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_339_bookmark__fromC,"borogove.Chat","bookmark__fromC",0x618f377a,"borogove.Chat.bookmark__fromC","HaxeCBridge.hx",339,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_335_getParticipants__fromC,"borogove.Chat","getParticipants__fromC",0xa2d7000c,"borogove.Chat.getParticipants__fromC","HaxeCBridge.hx",335,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_339_getParticipantDetails__fromC,"borogove.Chat","getParticipantDetails__fromC",0x40afb03d,"borogove.Chat.getParticipantDetails__fromC","HaxeCBridge.hx",339,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_339_correctMessage__fromC,"borogove.Chat","correctMessage__fromC",0xb004f7d3,"borogove.Chat.correctMessage__fromC","HaxeCBridge.hx",339,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_258_addReaction,"borogove.Chat","addReaction",0x55c74861,"borogove.Chat.addReaction","borogove/Chat.hx",258,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_262_addReaction,"borogove.Chat","addReaction",0x55c74861,"borogove.Chat.addReaction","borogove/Chat.hx",262,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_254_addReaction,"borogove.Chat","addReaction",0x55c74861,"borogove.Chat.addReaction","borogove/Chat.hx",254,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_339_removeReaction__fromC,"borogove.Chat","removeReaction__fromC",0xeaa4dc43,"borogove.Chat.removeReaction__fromC","HaxeCBridge.hx",339,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_308_typing,"borogove.Chat","typing",0xab024860,"borogove.Chat.typing","borogove/Chat.hx",308,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_287_typing,"borogove.Chat","typing",0xab024860,"borogove.Chat.typing","borogove/Chat.hx",287,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_302_typing,"borogove.Chat","typing",0xab024860,"borogove.Chat.typing","borogove/Chat.hx",302,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_326_setActive,"borogove.Chat","setActive",0x89bbc4bf,"borogove.Chat.setActive","borogove/Chat.hx",326,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_339_close__fromC,"borogove.Chat","close__fromC",0xc11a5e6a,"borogove.Chat.close__fromC","HaxeCBridge.hx",339,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_351_togglePinned,"borogove.Chat","togglePinned",0xfddcd475,"borogove.Chat.togglePinned","borogove/Chat.hx",351,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_361_block,"borogove.Chat","block",0xd3359b84,"borogove.Chat.block","borogove/Chat.hx",361,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_380_block,"borogove.Chat","block",0xd3359b84,"borogove.Chat.block","borogove/Chat.hx",380,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_408_block,"borogove.Chat","block",0xd3359b84,"borogove.Chat.block","borogove/Chat.hx",408,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_415_unblock,"borogove.Chat","unblock",0xad05ce4b,"borogove.Chat.unblock","borogove/Chat.hx",415,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_425_unblock,"borogove.Chat","unblock",0xad05ce4b,"borogove.Chat.unblock","borogove/Chat.hx",425,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_432_setNotificationsInternal,"borogove.Chat","setNotificationsInternal",0x95c15fac,"borogove.Chat.setNotificationsInternal","borogove/Chat.hx",432,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_442_setNotifications,"borogove.Chat","setNotifications",0x82bcd54f,"borogove.Chat.setNotifications","borogove/Chat.hx",442,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_453_notificationsFiltered,"borogove.Chat","notificationsFiltered",0xcab45596,"borogove.Chat.notificationsFiltered","borogove/Chat.hx",453,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_460_notifyMention,"borogove.Chat","notifyMention",0x00cf7c58,"borogove.Chat.notifyMention","borogove/Chat.hx",460,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_467_notifyReply,"borogove.Chat","notifyReply",0x65560f18,"borogove.Chat.notifyReply","borogove/Chat.hx",467,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_339_lastMessageId__fromC,"borogove.Chat","lastMessageId__fromC",0x7b1a3156,"borogove.Chat.lastMessageId__fromC","HaxeCBridge.hx",339,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_476_updateFromBookmark,"borogove.Chat","updateFromBookmark",0x8ad9a752,"borogove.Chat.updateFromBookmark","borogove/Chat.hx",476,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_486_updateFromRoster,"borogove.Chat","updateFromRoster",0xec826927,"borogove.Chat.updateFromRoster","borogove/Chat.hx",486,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_496_getPhoto,"borogove.Chat","getPhoto",0x2fa82e65,"borogove.Chat.getPhoto","borogove/Chat.hx",496,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_505_getPlaceholder,"borogove.Chat","getPlaceholder",0x7303a166,"borogove.Chat.getPlaceholder","borogove/Chat.hx",505,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_512_readUpTo,"borogove.Chat","readUpTo",0x83806d55,"borogove.Chat.readUpTo","borogove/Chat.hx",512,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_519_unreadCount,"borogove.Chat","unreadCount",0xcea74197,"borogove.Chat.unreadCount","borogove/Chat.hx",519,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_524_setUnreadCount,"borogove.Chat","setUnreadCount",0x79212e87,"borogove.Chat.setUnreadCount","borogove/Chat.hx",524,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_530_preview,"borogove.Chat","preview",0x375341ff,"borogove.Chat.preview","borogove/Chat.hx",530,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_537_preview,"borogove.Chat","preview",0x375341ff,"borogove.Chat.preview","borogove/Chat.hx",537,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_543_setLastMessage,"borogove.Chat","setLastMessage",0x26ed0078,"borogove.Chat.setLastMessage","borogove/Chat.hx",543,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_551_setDisplayName,"borogove.Chat","setDisplayName",0x09222814,"borogove.Chat.setDisplayName","borogove/Chat.hx",551,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_559_getDisplayName,"borogove.Chat","getDisplayName",0xe9023fa0,"borogove.Chat.getDisplayName","borogove/Chat.hx",559,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_579_setPresence,"borogove.Chat","setPresence",0xc4ee4574,"borogove.Chat.setPresence","borogove/Chat.hx",579,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_583_setCaps,"borogove.Chat","setCaps",0x02b6beda,"borogove.Chat.setCaps","borogove/Chat.hx",583,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_595_removePresence,"borogove.Chat","removePresence",0x619f6988,"borogove.Chat.removePresence","borogove/Chat.hx",595,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_603_getCaps,"borogove.Chat","getCaps",0x0fb52dce,"borogove.Chat.getCaps","borogove/Chat.hx",603,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_599_getCaps,"borogove.Chat","getCaps",0x0fb52dce,"borogove.Chat.getCaps","borogove/Chat.hx",599,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_612_getResourceCaps,"borogove.Chat","getResourceCaps",0xdf352abc,"borogove.Chat.getResourceCaps","borogove/Chat.hx",612,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_617_setAvatarSha1,"borogove.Chat","setAvatarSha1",0x86f1e8b7,"borogove.Chat.setAvatarSha1","borogove/Chat.hx",617,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_625_setTrusted,"borogove.Chat","setTrusted",0xaa03cede,"borogove.Chat.setTrusted","borogove/Chat.hx",625,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_637_isTrusted,"borogove.Chat","isTrusted",0x2e7342e4,"borogove.Chat.isTrusted","borogove/Chat.hx",637,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_642_livePresence,"borogove.Chat","livePresence",0x85c517f0,"borogove.Chat.livePresence","borogove/Chat.hx",642,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_649_syncing,"borogove.Chat","syncing",0xa29f5f5e,"borogove.Chat.syncing","borogove/Chat.hx",649,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_655_canAudioCall,"borogove.Chat","canAudioCall",0xb63e690d,"borogove.Chat.canAudioCall","borogove/Chat.hx",655,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_667_canVideoCall,"borogove.Chat","canVideoCall",0xbc413b32,"borogove.Chat.canVideoCall","borogove/Chat.hx",667,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_683_startCall,"borogove.Chat","startCall",0x0e7b9fd7,"borogove.Chat.startCall","borogove/Chat.hx",683,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_692_addMedia,"borogove.Chat","addMedia",0x8cf6812c,"borogove.Chat.addMedia","borogove/Chat.hx",692,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_700_acceptCall,"borogove.Chat","acceptCall",0xf591ee2f,"borogove.Chat.acceptCall","borogove/Chat.hx",700,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_711_hangup,"borogove.Chat","hangup",0x0bc81c36,"borogove.Chat.hangup","borogove/Chat.hx",711,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_720_callStatus,"borogove.Chat","callStatus",0x71a9b0d9,"borogove.Chat.callStatus","borogove/Chat.hx",720,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_731_dtmf,"borogove.Chat","dtmf",0xb7ac8892,"borogove.Chat.dtmf","borogove/Chat.hx",731,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_744_videoTracks,"borogove.Chat","videoTracks",0xebdaebda,"borogove.Chat.videoTracks","borogove/Chat.hx",744,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_335_videoTracks__fromC,"borogove.Chat","videoTracks__fromC",0x180a13df,"borogove.Chat.videoTracks__fromC","HaxeCBridge.hx",335,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_751_encryptionMode,"borogove.Chat","encryptionMode",0xd881b46f,"borogove.Chat.encryptionMode","borogove/Chat.hx",751,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_763_canSend,"borogove.Chat","canSend",0x6620d76f,"borogove.Chat.canSend","borogove/Chat.hx",763,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_769_invite,"borogove.Chat","invite",0xf3a43bb2,"borogove.Chat.invite","borogove/Chat.hx",769,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_787_canInvite,"borogove.Chat","canInvite",0x05f053b0,"borogove.Chat.canInvite","borogove/Chat.hx",787,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_793_isApp,"borogove.Chat","isApp",0xdf814d0e,"borogove.Chat.isApp","borogove/Chat.hx",793,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_821_hasCommands,"borogove.Chat","hasCommands",0xbec2bfb9,"borogove.Chat.hasCommands","borogove/Chat.hx",821,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_836_commands,"borogove.Chat","commands",0xcc3306f1,"borogove.Chat.commands","borogove/Chat.hx",836,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_824_commands,"borogove.Chat","commands",0xcc3306f1,"borogove.Chat.commands","borogove/Chat.hx",824,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_827_commands,"borogove.Chat","commands",0xcc3306f1,"borogove.Chat.commands","borogove/Chat.hx",827,0x1763ae98)
 HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_825_commands,"borogove.Chat","commands",0xcc3306f1,"borogove.Chat.commands","borogove/Chat.hx",825,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_823_commands,"borogove.Chat","commands",0xcc3306f1,"borogove.Chat.commands","borogove/Chat.hx",823,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_313_commands__fromC,"borogove.Chat","commands__fromC",0xe84399a8,"borogove.Chat.commands__fromC","HaxeCBridge.hx",313,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_837_commandJids,"borogove.Chat","commandJids",0x11776a70,"borogove.Chat.commandJids","borogove/Chat.hx",837,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_852_invitedBy,"borogove.Chat","invitedBy",0x6066bae9,"borogove.Chat.invitedBy","borogove/Chat.hx",852,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_870_invites,"borogove.Chat","invites",0x3c100081,"borogove.Chat.invites","borogove/Chat.hx",870,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_874_recomputeUnread,"borogove.Chat","recomputeUnread",0x2d8f3a6a,"borogove.Chat.recomputeUnread","borogove/Chat.hx",874,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_873_recomputeUnread,"borogove.Chat","recomputeUnread",0x2d8f3a6a,"borogove.Chat.recomputeUnread","borogove/Chat.hx",873,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_884_markReadUpToId,"borogove.Chat","markReadUpToId",0x130d0b7d,"borogove.Chat.markReadUpToId","borogove/Chat.hx",884,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_902_markReadUpToMessage,"borogove.Chat","markReadUpToMessage",0x357a9ae5,"borogove.Chat.markReadUpToMessage","borogove/Chat.hx",902,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_894_markReadUpToMessage,"borogove.Chat","markReadUpToMessage",0x357a9ae5,"borogove.Chat.markReadUpToMessage","borogove/Chat.hx",894,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_912_publishMds,"borogove.Chat","publishMds",0xb14bb956,"borogove.Chat.publishMds","borogove/Chat.hx",912,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_60_boot,"borogove.Chat","boot",0xb65651db,"borogove.Chat.boot","borogove/Chat.hx",60,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_a94f40d98d9e57cb_337_commands__fromC,"borogove.Chat","commands__fromC",0xe84399a8,"borogove.Chat.commands__fromC","HaxeCBridge.hx",337,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_839_commandJids,"borogove.Chat","commandJids",0x11776a70,"borogove.Chat.commandJids","borogove/Chat.hx",839,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_854_invitedBy,"borogove.Chat","invitedBy",0x6066bae9,"borogove.Chat.invitedBy","borogove/Chat.hx",854,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_872_invites,"borogove.Chat","invites",0x3c100081,"borogove.Chat.invites","borogove/Chat.hx",872,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_876_recomputeUnread,"borogove.Chat","recomputeUnread",0x2d8f3a6a,"borogove.Chat.recomputeUnread","borogove/Chat.hx",876,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_875_recomputeUnread,"borogove.Chat","recomputeUnread",0x2d8f3a6a,"borogove.Chat.recomputeUnread","borogove/Chat.hx",875,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_886_markReadUpToId,"borogove.Chat","markReadUpToId",0x130d0b7d,"borogove.Chat.markReadUpToId","borogove/Chat.hx",886,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_904_markReadUpToMessage,"borogove.Chat","markReadUpToMessage",0x357a9ae5,"borogove.Chat.markReadUpToMessage","borogove/Chat.hx",904,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_896_markReadUpToMessage,"borogove.Chat","markReadUpToMessage",0x357a9ae5,"borogove.Chat.markReadUpToMessage","borogove/Chat.hx",896,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_914_publishMds,"borogove.Chat","publishMds",0xb14bb956,"borogove.Chat.publishMds","borogove/Chat.hx",914,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_9cc1265c56ba593e_62_boot,"borogove.Chat","boot",0xb65651db,"borogove.Chat.boot","borogove/Chat.hx",62,0x1763ae98)
 namespace borogove{
 
 void Chat_obj::__construct( ::borogove::Client client, ::borogove::GenericStream stream,::Dynamic persistence,::String chatId,::hx::Null< int >  __o_uiState,::hx::Null< bool >  __o_isBlocked, ::borogove::Stanza extensions,::String readUpToId,::String readUpToBy,::Array< int > omemoContactDeviceIDs){
             		int uiState = __o_uiState.Default(1);
             		bool isBlocked = __o_isBlocked.Default(false);
-            	HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_60_new)
-HXLINE( 112)		this->omemoContactDeviceIDs = null();
-HXLINE( 109)		this->_encryptionMode = 0;
-HXLINE( 108)		this->outbox =  ::borogove::Outbox_obj::__alloc( HX_CTX );
-HXLINE( 107)		this->notificationSettings = null();
-HXLINE( 106)		this->activeThread = null();
-HXLINE( 105)		this->isActive = null();
-HXLINE( 104)		this->typingTimer = null();
-HXLINE( 103)		this->typingThread = null();
-HXLINE( 102)		this->isTyping = false;
-HXLINE(  98)		this->_unreadCount = 0;
-HXLINE(  95)		this->isBookmarked = false;
-HXLINE(  87)		this->isBlocked = false;
-HXLINE(  83)		this->uiState = 1;
-HXLINE(  75)		this->jingleSessions =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE(  68)		this->trusted = false;
-HXLINE(  67)		this->presence =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE(  65)		this->avatarSha1 = null();
-HXLINE( 116)		bool _hx_tmp;
-HXDLIN( 116)		if (::hx::IsNotNull( chatId )) {
-HXLINE( 116)			_hx_tmp = (chatId == HX_("",00,00,00,00));
+            	HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_62_new)
+HXLINE( 114)		this->omemoContactDeviceIDs = null();
+HXLINE( 111)		this->_encryptionMode = 0;
+HXLINE( 110)		this->outbox =  ::borogove::Outbox_obj::__alloc( HX_CTX );
+HXLINE( 109)		this->notificationSettings = null();
+HXLINE( 108)		this->activeThread = null();
+HXLINE( 107)		this->isActive = null();
+HXLINE( 106)		this->typingTimer = null();
+HXLINE( 105)		this->typingThread = null();
+HXLINE( 104)		this->isTyping = false;
+HXLINE( 100)		this->_unreadCount = 0;
+HXLINE(  97)		this->isBookmarked = false;
+HXLINE(  89)		this->isBlocked = false;
+HXLINE(  85)		this->uiState = 1;
+HXLINE(  77)		this->jingleSessions =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE(  70)		this->trusted = false;
+HXLINE(  69)		this->presence =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE(  67)		this->avatarSha1 = null();
+HXLINE( 118)		bool _hx_tmp;
+HXDLIN( 118)		if (::hx::IsNotNull( chatId )) {
+HXLINE( 118)			_hx_tmp = (chatId == HX_("",00,00,00,00));
             		}
             		else {
-HXLINE( 116)			_hx_tmp = true;
+HXLINE( 118)			_hx_tmp = true;
             		}
-HXDLIN( 116)		if (_hx_tmp) {
-HXLINE( 117)			HX_STACK_DO_THROW(HX_("chatId may not be empty",65,1d,3c,b1));
+HXDLIN( 118)		if (_hx_tmp) {
+HXLINE( 119)			HX_STACK_DO_THROW(HX_("chatId may not be empty",65,1d,3c,b1));
             		}
-HXLINE( 119)		this->client = client;
-HXLINE( 120)		this->stream = stream;
-HXLINE( 121)		this->persistence = persistence;
-HXLINE( 122)		this->chatId = chatId;
-HXLINE( 123)		this->uiState = uiState;
-HXLINE( 124)		this->isBlocked = isBlocked;
-HXLINE( 125)		 ::borogove::Stanza _hx_tmp1;
-HXDLIN( 125)		if (::hx::IsNotNull( extensions )) {
-HXLINE( 125)			_hx_tmp1 = extensions;
+HXLINE( 121)		this->client = client;
+HXLINE( 122)		this->stream = stream;
+HXLINE( 123)		this->persistence = persistence;
+HXLINE( 124)		this->chatId = chatId;
+HXLINE( 125)		this->uiState = uiState;
+HXLINE( 126)		this->isBlocked = isBlocked;
+HXLINE( 127)		 ::borogove::Stanza _hx_tmp1;
+HXDLIN( 127)		if (::hx::IsNotNull( extensions )) {
+HXLINE( 127)			_hx_tmp1 = extensions;
             		}
             		else {
-HXLINE( 125)			_hx_tmp1 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("extensions",14,7c,70,89), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE( 127)			_hx_tmp1 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("extensions",14,7c,70,89), ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:bookmarks:1",58,3c,53,7d))));
             		}
-HXDLIN( 125)		this->extensions = _hx_tmp1;
-HXLINE( 126)		this->readUpToId = readUpToId;
-HXLINE( 127)		this->readUpToBy = readUpToBy;
-HXLINE( 128)		this->displayName = chatId;
-HXLINE( 129)		this->omemoContactDeviceIDs = omemoContactDeviceIDs;
+HXDLIN( 127)		this->extensions = _hx_tmp1;
+HXLINE( 128)		this->readUpToId = readUpToId;
+HXLINE( 129)		this->readUpToBy = readUpToBy;
+HXLINE( 130)		this->displayName = chatId;
+HXLINE( 131)		this->omemoContactDeviceIDs = omemoContactDeviceIDs;
             	}
 
 bool Chat_obj::_hx_isInstanceOf(int inClassId) {
@@ -304,40 +308,40 @@ bool Chat_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 ::String Chat_obj::chatId__fromC(){
-            	HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_371_chatId__fromC)
-HXDLIN( 371)		return this->chatId;
+            	HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_398_chatId__fromC)
+HXDLIN( 398)		return this->chatId;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,chatId__fromC,return )
 
 int Chat_obj::uiState__fromC(){
-            	HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_371_uiState__fromC)
-HXDLIN( 371)		return this->uiState;
+            	HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_398_uiState__fromC)
+HXDLIN( 398)		return this->uiState;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,uiState__fromC,return )
 
 bool Chat_obj::isBlocked__fromC(){
-            	HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_371_isBlocked__fromC)
-HXDLIN( 371)		return this->isBlocked;
+            	HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_398_isBlocked__fromC)
+HXDLIN( 398)		return this->isBlocked;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,isBlocked__fromC,return )
 
  ::borogove::ChatMessage Chat_obj::lastMessage__fromC(){
-            	HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_371_lastMessage__fromC)
-HXDLIN( 371)		return this->lastMessage;
+            	HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_398_lastMessage__fromC)
+HXDLIN( 398)		return this->lastMessage;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,lastMessage__fromC,return )
 
 bool Chat_obj::isBookmarked__fromC(){
-            	HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_371_isBookmarked__fromC)
-HXDLIN( 371)		return this->isBookmarked;
+            	HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_398_isBookmarked__fromC)
+HXDLIN( 398)		return this->isBookmarked;
             	}
 
 
@@ -348,65 +352,65 @@ HX_DEFINE_DYNAMIC_FUNC2(Chat_obj,prepareIncomingMessage,return )
 HX_DEFINE_DYNAMIC_FUNC2(Chat_obj,getMessagesBefore,return )
 
 void Chat_obj::getMessagesBefore__fromC(::String beforeId,::String beforeTime,::cpp::Function< void  (void**,size_t,void*) > handler,void* handler__context){
-            	HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_313_getMessagesBefore__fromC)
-HXDLIN( 313)		if (::hx::IsNull( handler )) {
-HXDLIN( 313)			this->getMessagesBefore(beforeId,beforeTime);
+            	HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_337_getMessagesBefore__fromC)
+HXDLIN( 337)		if (::hx::IsNull( handler )) {
+HXDLIN( 337)			this->getMessagesBefore(beforeId,beforeTime);
             		}
             		else {
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (void** HX_COMMA size_t HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
             			void _hx_run(::Array< ::Dynamic> v){
-            				HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_313_getMessagesBefore__fromC)
-HXDLIN( 313)				::cpp::Function< void  (void**,size_t,void*) > handler1 = handler;
-HXLINE( 291)				{
-HXLINE( 291)					int _g = 0;
-HXDLIN( 291)					while((_g < v->length)){
-HXLINE( 291)						 ::borogove::ChatMessage el = v->__get(_g).StaticCast<  ::borogove::ChatMessage >();
-HXDLIN( 291)						_g = (_g + 1);
-HXDLIN( 291)						{
-HXLINE( 291)							 ::Dynamic haxeObject = el;
-HXDLIN( 291)							void* ptr = haxeObject.mPtr;
-HXDLIN( 291)							::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 291)							{
-HXLINE( 291)								 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 291)								if (::hx::IsNull( store )) {
-HXLINE( 291)									store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            				HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_337_getMessagesBefore__fromC)
+HXDLIN( 337)				::cpp::Function< void  (void**,size_t,void*) > handler1 = handler;
+HXLINE( 308)				{
+HXLINE( 308)					int _g = 0;
+HXDLIN( 308)					while((_g < v->length)){
+HXLINE( 308)						 ::borogove::ChatMessage el = v->__get(_g).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN( 308)						_g = (_g + 1);
+HXDLIN( 308)						{
+HXLINE( 308)							 ::Dynamic haxeObject = el;
+HXDLIN( 308)							void* ptr = haxeObject.mPtr;
+HXDLIN( 308)							::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 308)							{
+HXLINE( 308)								 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 308)								if (::hx::IsNull( store )) {
+HXLINE( 308)									store =  ::Dynamic(::hx::Anon_obj::Create(2)
             										->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             										->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 291)									::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN( 308)									::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             								}
             								else {
-HXLINE( 291)									::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE( 308)									::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             								}
             							}
             						}
             					}
             				}
-HXDLIN( 291)				void** ptr1 = (void**)v->getBase();
-HXDLIN( 291)				::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 291)				{
-HXLINE( 291)					 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 291)					if (::hx::IsNull( store1 )) {
-HXLINE( 291)						store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 308)				void** ptr1 = (void**)v->getBase();
+HXDLIN( 308)				::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 308)				{
+HXLINE( 308)					 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 308)					if (::hx::IsNull( store1 )) {
+HXLINE( 308)						store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             							->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             							->setFixed(1,HX_("value",71,7f,b8,31),v));
-HXDLIN( 291)						::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+HXDLIN( 308)						::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
             					}
             					else {
-HXLINE( 291)						::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE( 308)						::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
             					}
             				}
-HXLINE( 313)				handler1(ptr1,( (size_t)(v->length) ),handler__context);
+HXLINE( 337)				handler1(ptr1,( (size_t)(v->length) ),handler__context);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::cpp::Function< void  (void** HX_COMMA size_t HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
             			void _hx_run( ::Dynamic e){
-            				HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_313_getMessagesBefore__fromC)
-HXDLIN( 313)				handler(null(),( (size_t)(0) ),handler__context);
+            				HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_337_getMessagesBefore__fromC)
+HXDLIN( 337)				handler(null(),( (size_t)(0) ),handler__context);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-HXDLIN( 313)			::thenshim::_Promise::Promise_Impl__obj::then(this->getMessagesBefore(beforeId,beforeTime), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
+HXDLIN( 337)			::thenshim::_Promise::Promise_Impl__obj::then(this->getMessagesBefore(beforeId,beforeTime), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
             		}
             	}
 
@@ -414,65 +418,65 @@ HXDLIN( 313)			::thenshim::_Promise::Promise_Impl__obj::then(this->getMessagesBe
 HX_DEFINE_DYNAMIC_FUNC2(Chat_obj,getMessagesAfter,return )
 
 void Chat_obj::getMessagesAfter__fromC(::String afterId,::String afterTime,::cpp::Function< void  (void**,size_t,void*) > handler,void* handler__context){
-            	HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_313_getMessagesAfter__fromC)
-HXDLIN( 313)		if (::hx::IsNull( handler )) {
-HXDLIN( 313)			this->getMessagesAfter(afterId,afterTime);
+            	HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_337_getMessagesAfter__fromC)
+HXDLIN( 337)		if (::hx::IsNull( handler )) {
+HXDLIN( 337)			this->getMessagesAfter(afterId,afterTime);
             		}
             		else {
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (void** HX_COMMA size_t HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
             			void _hx_run(::Array< ::Dynamic> v){
-            				HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_313_getMessagesAfter__fromC)
-HXDLIN( 313)				::cpp::Function< void  (void**,size_t,void*) > handler1 = handler;
-HXLINE( 291)				{
-HXLINE( 291)					int _g = 0;
-HXDLIN( 291)					while((_g < v->length)){
-HXLINE( 291)						 ::borogove::ChatMessage el = v->__get(_g).StaticCast<  ::borogove::ChatMessage >();
-HXDLIN( 291)						_g = (_g + 1);
-HXDLIN( 291)						{
-HXLINE( 291)							 ::Dynamic haxeObject = el;
-HXDLIN( 291)							void* ptr = haxeObject.mPtr;
-HXDLIN( 291)							::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 291)							{
-HXLINE( 291)								 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 291)								if (::hx::IsNull( store )) {
-HXLINE( 291)									store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            				HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_337_getMessagesAfter__fromC)
+HXDLIN( 337)				::cpp::Function< void  (void**,size_t,void*) > handler1 = handler;
+HXLINE( 308)				{
+HXLINE( 308)					int _g = 0;
+HXDLIN( 308)					while((_g < v->length)){
+HXLINE( 308)						 ::borogove::ChatMessage el = v->__get(_g).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN( 308)						_g = (_g + 1);
+HXDLIN( 308)						{
+HXLINE( 308)							 ::Dynamic haxeObject = el;
+HXDLIN( 308)							void* ptr = haxeObject.mPtr;
+HXDLIN( 308)							::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 308)							{
+HXLINE( 308)								 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 308)								if (::hx::IsNull( store )) {
+HXLINE( 308)									store =  ::Dynamic(::hx::Anon_obj::Create(2)
             										->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             										->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 291)									::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN( 308)									::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             								}
             								else {
-HXLINE( 291)									::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE( 308)									::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             								}
             							}
             						}
             					}
             				}
-HXDLIN( 291)				void** ptr1 = (void**)v->getBase();
-HXDLIN( 291)				::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 291)				{
-HXLINE( 291)					 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 291)					if (::hx::IsNull( store1 )) {
-HXLINE( 291)						store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 308)				void** ptr1 = (void**)v->getBase();
+HXDLIN( 308)				::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 308)				{
+HXLINE( 308)					 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 308)					if (::hx::IsNull( store1 )) {
+HXLINE( 308)						store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             							->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             							->setFixed(1,HX_("value",71,7f,b8,31),v));
-HXDLIN( 291)						::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+HXDLIN( 308)						::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
             					}
             					else {
-HXLINE( 291)						::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE( 308)						::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
             					}
             				}
-HXLINE( 313)				handler1(ptr1,( (size_t)(v->length) ),handler__context);
+HXLINE( 337)				handler1(ptr1,( (size_t)(v->length) ),handler__context);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::cpp::Function< void  (void** HX_COMMA size_t HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
             			void _hx_run( ::Dynamic e){
-            				HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_313_getMessagesAfter__fromC)
-HXDLIN( 313)				handler(null(),( (size_t)(0) ),handler__context);
+            				HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_337_getMessagesAfter__fromC)
+HXDLIN( 337)				handler(null(),( (size_t)(0) ),handler__context);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-HXDLIN( 313)			::thenshim::_Promise::Promise_Impl__obj::then(this->getMessagesAfter(afterId,afterTime), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
+HXDLIN( 337)			::thenshim::_Promise::Promise_Impl__obj::then(this->getMessagesAfter(afterId,afterTime), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
             		}
             	}
 
@@ -480,65 +484,65 @@ HXDLIN( 313)			::thenshim::_Promise::Promise_Impl__obj::then(this->getMessagesAf
 HX_DEFINE_DYNAMIC_FUNC2(Chat_obj,getMessagesAround,return )
 
 void Chat_obj::getMessagesAround__fromC(::String aroundId,::String aroundTime,::cpp::Function< void  (void**,size_t,void*) > handler,void* handler__context){
-            	HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_313_getMessagesAround__fromC)
-HXDLIN( 313)		if (::hx::IsNull( handler )) {
-HXDLIN( 313)			this->getMessagesAround(aroundId,aroundTime);
+            	HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_337_getMessagesAround__fromC)
+HXDLIN( 337)		if (::hx::IsNull( handler )) {
+HXDLIN( 337)			this->getMessagesAround(aroundId,aroundTime);
             		}
             		else {
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (void** HX_COMMA size_t HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
             			void _hx_run(::Array< ::Dynamic> v){
-            				HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_313_getMessagesAround__fromC)
-HXDLIN( 313)				::cpp::Function< void  (void**,size_t,void*) > handler1 = handler;
-HXLINE( 291)				{
-HXLINE( 291)					int _g = 0;
-HXDLIN( 291)					while((_g < v->length)){
-HXLINE( 291)						 ::borogove::ChatMessage el = v->__get(_g).StaticCast<  ::borogove::ChatMessage >();
-HXDLIN( 291)						_g = (_g + 1);
-HXDLIN( 291)						{
-HXLINE( 291)							 ::Dynamic haxeObject = el;
-HXDLIN( 291)							void* ptr = haxeObject.mPtr;
-HXDLIN( 291)							::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 291)							{
-HXLINE( 291)								 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 291)								if (::hx::IsNull( store )) {
-HXLINE( 291)									store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            				HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_337_getMessagesAround__fromC)
+HXDLIN( 337)				::cpp::Function< void  (void**,size_t,void*) > handler1 = handler;
+HXLINE( 308)				{
+HXLINE( 308)					int _g = 0;
+HXDLIN( 308)					while((_g < v->length)){
+HXLINE( 308)						 ::borogove::ChatMessage el = v->__get(_g).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN( 308)						_g = (_g + 1);
+HXDLIN( 308)						{
+HXLINE( 308)							 ::Dynamic haxeObject = el;
+HXDLIN( 308)							void* ptr = haxeObject.mPtr;
+HXDLIN( 308)							::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 308)							{
+HXLINE( 308)								 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 308)								if (::hx::IsNull( store )) {
+HXLINE( 308)									store =  ::Dynamic(::hx::Anon_obj::Create(2)
             										->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             										->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 291)									::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN( 308)									::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             								}
             								else {
-HXLINE( 291)									::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE( 308)									::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             								}
             							}
             						}
             					}
             				}
-HXDLIN( 291)				void** ptr1 = (void**)v->getBase();
-HXDLIN( 291)				::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 291)				{
-HXLINE( 291)					 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 291)					if (::hx::IsNull( store1 )) {
-HXLINE( 291)						store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 308)				void** ptr1 = (void**)v->getBase();
+HXDLIN( 308)				::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 308)				{
+HXLINE( 308)					 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 308)					if (::hx::IsNull( store1 )) {
+HXLINE( 308)						store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             							->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             							->setFixed(1,HX_("value",71,7f,b8,31),v));
-HXDLIN( 291)						::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+HXDLIN( 308)						::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
             					}
             					else {
-HXLINE( 291)						::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE( 308)						::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
             					}
             				}
-HXLINE( 313)				handler1(ptr1,( (size_t)(v->length) ),handler__context);
+HXLINE( 337)				handler1(ptr1,( (size_t)(v->length) ),handler__context);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::cpp::Function< void  (void** HX_COMMA size_t HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
             			void _hx_run( ::Dynamic e){
-            				HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_313_getMessagesAround__fromC)
-HXDLIN( 313)				handler(null(),( (size_t)(0) ),handler__context);
+            				HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_337_getMessagesAround__fromC)
+HXDLIN( 337)				handler(null(),( (size_t)(0) ),handler__context);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-HXDLIN( 313)			::thenshim::_Promise::Promise_Impl__obj::then(this->getMessagesAround(aroundId,aroundTime), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
+HXDLIN( 337)			::thenshim::_Promise::Promise_Impl__obj::then(this->getMessagesAround(aroundId,aroundTime), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
             		}
             	}
 
@@ -548,34 +552,34 @@ HXDLIN( 313)			::thenshim::_Promise::Promise_Impl__obj::then(this->getMessagesAr
             		void _hx_run( ::Dynamic resolve, ::Dynamic reject){
             			HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_1, ::borogove::Chat,_gthis, ::borogove::MessageSync,sync, ::Dynamic,resolve) HXARGC(1)
             			void _hx_run( ::Dynamic messageList){
-            				HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_167_fetchFromSync)
-HXLINE( 168)				::Array< ::Dynamic> chatMessages = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 169)				{
-HXLINE( 169)					int _g = 0;
-HXDLIN( 169)					::Array< ::Dynamic> _g1 = ( (::Array< ::Dynamic>)(messageList->__Field(HX_("messages",cc,d8,fd,34),::hx::paccDynamic)) );
-HXDLIN( 169)					while((_g < _g1->length)){
-HXLINE( 169)						 ::borogove::Message m = _g1->__get(_g).StaticCast<  ::borogove::Message >();
-HXDLIN( 169)						_g = (_g + 1);
-HXLINE( 170)						{
-HXLINE( 170)							 ::borogove::MessageStanza _g2 = m->parsed;
-HXDLIN( 170)							switch((int)(_g2->_hx_getIndex())){
+            				HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_169_fetchFromSync)
+HXLINE( 170)				::Array< ::Dynamic> chatMessages = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 171)				{
+HXLINE( 171)					int _g = 0;
+HXDLIN( 171)					::Array< ::Dynamic> _g1 = ( (::Array< ::Dynamic>)(messageList->__Field(HX_("messages",cc,d8,fd,34),::hx::paccDynamic)) );
+HXDLIN( 171)					while((_g < _g1->length)){
+HXLINE( 171)						 ::borogove::Message m = _g1->__get(_g).StaticCast<  ::borogove::Message >();
+HXDLIN( 171)						_g = (_g + 1);
+HXLINE( 172)						{
+HXLINE( 172)							 ::borogove::MessageStanza _g2 = m->parsed;
+HXDLIN( 172)							switch((int)(_g2->_hx_getIndex())){
             								case (int)0: {
-HXLINE( 178)									::Dynamic _gthis1 = _gthis->persistence;
-HXLINE( 179)									::String _hx_tmp = _gthis->client->accountId();
-HXLINE( 178)									::borogove::Persistence_obj::updateMessageStatus(_gthis1,_hx_tmp,_g2->_hx_getString(0),3,_g2->_hx_getObject(1).StaticCast<  ::borogove::Stanza >()->getErrorText());
+HXLINE( 180)									::Dynamic _gthis1 = _gthis->persistence;
+HXLINE( 181)									::String _hx_tmp = _gthis->client->accountId();
+HXLINE( 180)									::borogove::Persistence_obj::updateMessageStatus(_gthis1,_hx_tmp,_g2->_hx_getString(0),3,_g2->_hx_getObject(1).StaticCast<  ::borogove::Stanza >()->getErrorText());
             								}
             								break;
             								case (int)1: {
-HXLINE( 172)									chatMessages->push(_g2->_hx_getObject(0).StaticCast<  ::borogove::ChatMessage >());
+HXLINE( 174)									chatMessages->push(_g2->_hx_getObject(0).StaticCast<  ::borogove::ChatMessage >());
             								}
             								break;
             								case (int)2: {
-HXLINE( 176)									_gthis->client->moderateMessage(_g2->_hx_getObject(0).StaticCast<  ::borogove::ModerationAction >());
+HXLINE( 178)									_gthis->client->moderateMessage(_g2->_hx_getObject(0).StaticCast<  ::borogove::ModerationAction >());
             								}
             								break;
             								case (int)3: {
-HXLINE( 174)									::Dynamic _gthis2 = _gthis->persistence;
-HXDLIN( 174)									::borogove::Persistence_obj::storeReaction(_gthis2,_gthis->client->accountId(),_g2->_hx_getObject(0).StaticCast<  ::borogove::ReactionUpdate >());
+HXLINE( 176)									::Dynamic _gthis2 = _gthis->persistence;
+HXDLIN( 176)									::borogove::Persistence_obj::storeReaction(_gthis2,_gthis->client->accountId(),_g2->_hx_getObject(0).StaticCast<  ::borogove::ReactionUpdate >());
             								}
             								break;
             								default:{
@@ -584,59 +588,59 @@ HXDLIN( 174)									::borogove::Persistence_obj::storeReaction(_gthis2,_gthis->
             						}
             					}
             				}
-HXLINE( 188)				bool _hx_tmp1;
-HXDLIN( 188)				if ((chatMessages->length < 1)) {
-HXLINE( 188)					_hx_tmp1 = sync->hasMore();
+HXLINE( 190)				bool _hx_tmp1;
+HXDLIN( 190)				if ((chatMessages->length < 1)) {
+HXLINE( 190)					_hx_tmp1 = sync->hasMore();
             				}
             				else {
-HXLINE( 188)					_hx_tmp1 = false;
+HXLINE( 190)					_hx_tmp1 = false;
             				}
-HXDLIN( 188)				if (_hx_tmp1) {
-HXLINE( 189)					sync->fetchNext();
+HXDLIN( 190)				if (_hx_tmp1) {
+HXLINE( 191)					sync->fetchNext();
             				}
             				else {
             					HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::Chat,_gthis, ::Dynamic,resolve) HXARGC(1)
             					void _hx_run(::Array< ::Dynamic> chatMessages){
-            						HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_191_fetchFromSync)
-HXLINE( 192)						 ::Dynamic resolve1 = resolve;
-HXDLIN( 192)						::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 192)						{
-HXLINE( 192)							int _g1 = 0;
-HXDLIN( 192)							while((_g1 < chatMessages->length)){
-HXLINE( 192)								 ::borogove::ChatMessage v = chatMessages->__get(_g1).StaticCast<  ::borogove::ChatMessage >();
-HXDLIN( 192)								_g1 = (_g1 + 1);
-HXDLIN( 192)								bool _hx_tmp;
-HXDLIN( 192)								if (::hx::IsNotNull( v )) {
-HXLINE( 192)									::String _hx_tmp1 = v->chatId();
-HXDLIN( 192)									_hx_tmp = (_hx_tmp1 == _gthis->chatId);
+            						HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_193_fetchFromSync)
+HXLINE( 194)						 ::Dynamic resolve1 = resolve;
+HXDLIN( 194)						::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 194)						{
+HXLINE( 194)							int _g1 = 0;
+HXDLIN( 194)							while((_g1 < chatMessages->length)){
+HXLINE( 194)								 ::borogove::ChatMessage v = chatMessages->__get(_g1).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN( 194)								_g1 = (_g1 + 1);
+HXDLIN( 194)								bool _hx_tmp;
+HXDLIN( 194)								if (::hx::IsNotNull( v )) {
+HXLINE( 194)									::String _hx_tmp1 = v->chatId();
+HXDLIN( 194)									_hx_tmp = (_hx_tmp1 == _gthis->chatId);
             								}
             								else {
-HXLINE( 192)									_hx_tmp = false;
+HXLINE( 194)									_hx_tmp = false;
             								}
-HXDLIN( 192)								if (_hx_tmp) {
-HXLINE( 192)									_g->push(v);
+HXDLIN( 194)								if (_hx_tmp) {
+HXLINE( 194)									_g->push(v);
             								}
             							}
             						}
-HXDLIN( 192)						resolve1(_g);
+HXDLIN( 194)						resolve1(_g);
             					}
             					HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 191)					::thenshim::_Promise::Promise_Impl__obj::then(_gthis->client->storeMessages(chatMessages), ::Dynamic(new _hx_Closure_0(_gthis,resolve)),null());
+HXLINE( 193)					::thenshim::_Promise::Promise_Impl__obj::then(_gthis->client->storeMessages(chatMessages), ::Dynamic(new _hx_Closure_0(_gthis,resolve)),null());
             				}
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-            			HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_166_fetchFromSync)
-HXLINE( 167)			sync->onMessages( ::Dynamic(new _hx_Closure_1(_gthis,sync,resolve)));
-HXLINE( 196)			sync->onError(reject);
-HXLINE( 197)			sync->fetchNext();
+            			HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_168_fetchFromSync)
+HXLINE( 169)			sync->onMessages( ::Dynamic(new _hx_Closure_1(_gthis,sync,resolve)));
+HXLINE( 198)			sync->onError(reject);
+HXLINE( 199)			sync->fetchNext();
             		}
             		HX_END_LOCAL_FUNC2((void))
 
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_165_fetchFromSync)
-HXDLIN( 165)		 ::borogove::Chat _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 166)		return ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_2(_gthis,sync)));
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_167_fetchFromSync)
+HXDLIN( 167)		 ::borogove::Chat _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 168)		return ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_2(_gthis,sync)));
             	}
 
 
@@ -645,8 +649,8 @@ HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,fetchFromSync,return )
 HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,sendMessage,(void))
 
 void Chat_obj::sendMessage__fromC( ::borogove::ChatMessageBuilder message){
-            	HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_315_sendMessage__fromC)
-HXDLIN( 315)		this->sendMessage(message);
+            	HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_339_sendMessage__fromC)
+HXDLIN( 339)		this->sendMessage(message);
             	}
 
 
@@ -657,8 +661,8 @@ HX_DEFINE_DYNAMIC_FUNC2(Chat_obj,sendMessageStanza,(void))
 HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,markReadUpTo,(void))
 
 void Chat_obj::markReadUpTo__fromC( ::borogove::ChatMessage message){
-            	HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_315_markReadUpTo__fromC)
-HXDLIN( 315)		this->markReadUpTo(message);
+            	HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_339_markReadUpTo__fromC)
+HXDLIN( 339)		this->markReadUpTo(message);
             	}
 
 
@@ -667,8 +671,8 @@ HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,markReadUpTo__fromC,(void))
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,bookmark,(void))
 
 void Chat_obj::bookmark__fromC(){
-            	HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_315_bookmark__fromC)
-HXDLIN( 315)		this->bookmark();
+            	HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_339_bookmark__fromC)
+HXDLIN( 339)		this->bookmark();
             	}
 
 
@@ -677,63 +681,63 @@ HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,bookmark__fromC,(void))
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,getParticipants,return )
 
 size_t Chat_obj::getParticipants__fromC(const char*** outPtr){
-            	HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_311_getParticipants__fromC)
-HXDLIN( 311)		::Array< ::String > out = this->getParticipants();
-HXDLIN( 311)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 311)			::cpp::Pointer< const char** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 311)			::Array< size_t > arr = ::Array_obj< size_t >::__new(out->length);
-HXDLIN( 311)			{
-HXDLIN( 311)				int _g_current = 0;
-HXDLIN( 311)				::Array< ::String > _g_array = out;
-HXDLIN( 311)				while((_g_current < _g_array->length)){
-HXDLIN( 311)					::String _g_value = _g_array->__get(_g_current);
-HXDLIN( 311)					_g_current = (_g_current + 1);
-HXDLIN( 311)					::String el = _g_value;
-HXDLIN( 311)					{
-HXDLIN( 311)						const char* cStrPtr = el.utf8_str();
-HXDLIN( 311)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
-HXDLIN( 311)						{
-HXDLIN( 311)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 311)							if (::hx::IsNull( store )) {
-HXLINE(2192)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_335_getParticipants__fromC)
+HXDLIN( 335)		::Array< ::String > out = this->getParticipants();
+HXDLIN( 335)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 335)			::cpp::Pointer< const char** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 335)			::Array< size_t > arr = ::Array_obj< size_t >::__new(out->length);
+HXDLIN( 335)			{
+HXDLIN( 335)				int _g_current = 0;
+HXDLIN( 335)				::Array< ::String > _g_array = out;
+HXDLIN( 335)				while((_g_current < _g_array->length)){
+HXDLIN( 335)					::String _g_value = _g_array->__get(_g_current);
+HXDLIN( 335)					_g_current = (_g_current + 1);
+HXDLIN( 335)					::String el = _g_value;
+HXDLIN( 335)					{
+HXDLIN( 335)						const char* cStrPtr = el.utf8_str();
+HXDLIN( 335)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
+HXDLIN( 335)						{
+HXDLIN( 335)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 335)							if (::hx::IsNull( store )) {
+HXLINE(2243)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
             									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             									->setFixed(1,HX_("value",71,7f,b8,31),el));
-HXLINE( 311)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXLINE( 335)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             							}
             							else {
-HXDLIN( 311)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 335)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             							}
             						}
-HXDLIN( 311)						const char* ptr = cStrPtr;
-HXDLIN( 311)						arr[(_g_current - 1)] = reinterpret_cast<size_t>(ptr);
+HXDLIN( 335)						const char* ptr = cStrPtr;
+HXDLIN( 335)						arr[(_g_current - 1)] = reinterpret_cast<size_t>(ptr);
             					}
             				}
             			}
-HXDLIN( 311)			void** ptr1 = (void**)arr->getBase();
-HXDLIN( 311)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 311)			{
-HXDLIN( 311)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 311)				if (::hx::IsNull( store1 )) {
-HXLINE(2192)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 335)			void** ptr1 = (void**)arr->getBase();
+HXDLIN( 335)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 335)			{
+HXDLIN( 335)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 335)				if (::hx::IsNull( store1 )) {
+HXLINE(2243)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),arr));
-HXLINE( 311)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+HXLINE( 335)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
             				}
             				else {
-HXDLIN( 311)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 335)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXDLIN( 311)			_hx_tmp->set_ref(( (const char**)(ptr1) ));
+HXDLIN( 335)			_hx_tmp->set_ref(( (const char**)(ptr1) ));
             		}
-HXDLIN( 311)		return ( (size_t)(out->length) );
+HXDLIN( 335)		return ( (size_t)(out->length) );
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,getParticipantDetails,return )
 
  ::borogove::Participant Chat_obj::getParticipantDetails__fromC(::String participantId){
-            	HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_315_getParticipantDetails__fromC)
-HXDLIN( 315)		return this->getParticipantDetails(participantId);
+            	HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_339_getParticipantDetails__fromC)
+HXDLIN( 339)		return this->getParticipantDetails(participantId);
             	}
 
 
@@ -742,8 +746,8 @@ HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,getParticipantDetails__fromC,return )
 HX_DEFINE_DYNAMIC_FUNC2(Chat_obj,correctMessage,(void))
 
 void Chat_obj::correctMessage__fromC(::String localId, ::borogove::ChatMessageBuilder message){
-            	HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_315_correctMessage__fromC)
-HXDLIN( 315)		this->correctMessage(localId,message);
+            	HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_339_correctMessage__fromC)
+HXDLIN( 339)		this->correctMessage(localId,message);
             	}
 
 
@@ -752,35 +756,35 @@ HX_DEFINE_DYNAMIC_FUNC2(Chat_obj,correctMessage__fromC,(void))
 void Chat_obj::addReaction( ::borogove::ChatMessage m, ::borogove::Reaction reaction){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::ChatMessageBuilder,toSend) HXARGC(1)
             		::String _hx_run(::String text){
-            			HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_256_addReaction)
-HXLINE( 257)			toSend->text = ::StringTools_obj::replace(text,HX_W(u"\ufe0f",fb86,00b5),HX_("",00,00,00,00));
-HXLINE( 258)			return HX_("",00,00,00,00);
+            			HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_258_addReaction)
+HXLINE( 259)			toSend->text = ::StringTools_obj::replace(text,HX_W(u"\ufe0f",fb86,00b5),HX_("",00,00,00,00));
+HXLINE( 260)			return HX_("",00,00,00,00);
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::borogove::ChatMessageBuilder,toSend) HXARGC(2)
             		::String _hx_run(::String text,::String uri){
-            			HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_260_addReaction)
-HXLINE( 261)			 ::borogove::Hash hash = ::borogove::Hash_obj::fromUri(uri);
-HXLINE( 262)			 ::borogove::ChatMessageBuilder toSend1 = toSend;
-HXDLIN( 262)			::String _hx_tmp = ((HX_("<img alt=\"",15,9f,1a,99) + ::borogove::_Util::Util_Fields__obj::xmlEscape(text)) + HX_("\" src=\"",ab,ae,ff,d3));
-HXDLIN( 262)			::String _hx_tmp1;
-HXDLIN( 262)			if (::hx::IsNull( hash )) {
-HXLINE( 262)				_hx_tmp1 = uri;
+            			HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_262_addReaction)
+HXLINE( 263)			 ::borogove::Hash hash = ::borogove::Hash_obj::fromUri(uri);
+HXLINE( 264)			 ::borogove::ChatMessageBuilder toSend1 = toSend;
+HXDLIN( 264)			::String _hx_tmp = ((HX_("<img alt=\"",15,9f,1a,99) + ::borogove::_Util::Util_Fields__obj::xmlEscape(text)) + HX_("\" src=\"",ab,ae,ff,d3));
+HXDLIN( 264)			::String _hx_tmp1;
+HXDLIN( 264)			if (::hx::IsNull( hash )) {
+HXLINE( 264)				_hx_tmp1 = uri;
             			}
             			else {
-HXLINE( 262)				_hx_tmp1 = hash->bobUri();
+HXLINE( 264)				_hx_tmp1 = hash->bobUri();
             			}
-HXDLIN( 262)			toSend1->setHtml(((_hx_tmp + ::borogove::_Util::Util_Fields__obj::xmlEscape(_hx_tmp1)) + HX_("\" />",6d,b2,91,16)));
-HXLINE( 263)			return HX_("",00,00,00,00);
+HXDLIN( 264)			toSend1->setHtml(((_hx_tmp + ::borogove::_Util::Util_Fields__obj::xmlEscape(_hx_tmp1)) + HX_("\" />",6d,b2,91,16)));
+HXLINE( 265)			return HX_("",00,00,00,00);
             		}
             		HX_END_LOCAL_FUNC2(return)
 
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_252_addReaction)
-HXLINE( 253)		 ::borogove::ChatMessageBuilder toSend = m->reply();
-HXLINE( 254)		toSend->localId = ::borogove::ID_obj::_hx_long();
-HXLINE( 255)		reaction->render( ::Dynamic(new _hx_Closure_0(toSend)), ::Dynamic(new _hx_Closure_1(toSend)));
-HXLINE( 266)		this->sendMessage(toSend);
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_254_addReaction)
+HXLINE( 255)		 ::borogove::ChatMessageBuilder toSend = m->reply();
+HXLINE( 256)		toSend->localId = ::borogove::ID_obj::_hx_long();
+HXLINE( 257)		reaction->render( ::Dynamic(new _hx_Closure_0(toSend)), ::Dynamic(new _hx_Closure_1(toSend)));
+HXLINE( 268)		this->sendMessage(toSend);
             	}
 
 
@@ -789,8 +793,8 @@ HX_DEFINE_DYNAMIC_FUNC2(Chat_obj,addReaction,(void))
 HX_DEFINE_DYNAMIC_FUNC2(Chat_obj,removeReaction,(void))
 
 void Chat_obj::removeReaction__fromC( ::borogove::ChatMessage m, ::borogove::Reaction reaction){
-            	HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_315_removeReaction__fromC)
-HXDLIN( 315)		this->removeReaction(m,reaction);
+            	HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_339_removeReaction__fromC)
+HXDLIN( 339)		this->removeReaction(m,reaction);
             	}
 
 
@@ -801,111 +805,111 @@ HX_DEFINE_DYNAMIC_FUNC2(Chat_obj,sendChatState,(void))
 void Chat_obj::typing(::String threadId,::String content){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::borogove::Chat,_gthis) HXARGC(0)
             		void _hx_run(){
-            			HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_306_typing)
-HXLINE( 307)			_gthis->sendChatState(HX_("paused",ae,40,84,ef),_gthis->typingThread);
-HXLINE( 308)			_gthis->isTyping = false;
+            			HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_308_typing)
+HXLINE( 309)			_gthis->sendChatState(HX_("paused",ae,40,84,ef),_gthis->typingThread);
+HXLINE( 310)			_gthis->isTyping = false;
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_285_typing)
-HXDLIN( 285)		 ::borogove::Chat _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 286)		bool _hx_tmp;
-HXDLIN( 286)		if ((threadId != this->typingThread)) {
-HXLINE( 286)			_hx_tmp = this->isTyping;
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_287_typing)
+HXDLIN( 287)		 ::borogove::Chat _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 288)		bool _hx_tmp;
+HXDLIN( 288)		if ((threadId != this->typingThread)) {
+HXLINE( 288)			_hx_tmp = this->isTyping;
             		}
             		else {
-HXLINE( 286)			_hx_tmp = false;
+HXLINE( 288)			_hx_tmp = false;
             		}
-HXDLIN( 286)		if (_hx_tmp) {
-HXLINE( 288)			this->sendChatState(HX_("paused",ae,40,84,ef),this->typingThread);
-HXLINE( 289)			this->isTyping = false;
+HXDLIN( 288)		if (_hx_tmp) {
+HXLINE( 290)			this->sendChatState(HX_("paused",ae,40,84,ef),this->typingThread);
+HXLINE( 291)			this->isTyping = false;
             		}
-HXLINE( 292)		this->typingThread = threadId;
-HXLINE( 293)		if (::hx::IsNotNull( this->typingTimer )) {
-HXLINE( 293)			this->typingTimer->stop();
+HXLINE( 294)		this->typingThread = threadId;
+HXLINE( 295)		if (::hx::IsNotNull( this->typingTimer )) {
+HXLINE( 295)			this->typingTimer->stop();
             		}
-HXLINE( 295)		if ((content == HX_("",00,00,00,00))) {
-HXLINE( 296)			this->isTyping = false;
-HXLINE( 297)			this->sendChatState(HX_("active",c6,41,46,16),this->typingThread);
-HXLINE( 298)			if (::hx::IsNull( this->isActive )) {
+HXLINE( 297)		if ((content == HX_("",00,00,00,00))) {
+HXLINE( 298)			this->isTyping = false;
+HXLINE( 299)			this->sendChatState(HX_("active",c6,41,46,16),this->typingThread);
+HXLINE( 300)			if (::hx::IsNull( this->isActive )) {
             				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Chat,_gthis) HXARGC(0)
             				void _hx_run(){
-            					HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_300_typing)
-HXLINE( 300)					_gthis->sendChatState(HX_("inactive",6b,17,30,6a),_gthis->typingThread);
+            					HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_302_typing)
+HXLINE( 302)					_gthis->sendChatState(HX_("inactive",6b,17,30,6a),_gthis->typingThread);
             				}
             				HX_END_LOCAL_FUNC0((void))
 
-HXLINE( 299)				this->typingTimer = ::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_0(_gthis)),30000);
+HXLINE( 301)				this->typingTimer = ::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_0(_gthis)),30000);
             			}
-HXLINE( 303)			return;
+HXLINE( 305)			return;
             		}
-HXLINE( 306)		this->typingTimer = ::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_1(_gthis)),10000);
-HXLINE( 311)		if (this->isTyping) {
-HXLINE( 311)			return;
+HXLINE( 308)		this->typingTimer = ::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_1(_gthis)),10000);
+HXLINE( 313)		if (this->isTyping) {
+HXLINE( 313)			return;
             		}
-HXLINE( 312)		this->isTyping = true;
-HXLINE( 313)		this->sendChatState(HX_("composing",cf,0a,a5,12),this->typingThread);
+HXLINE( 314)		this->isTyping = true;
+HXLINE( 315)		this->sendChatState(HX_("composing",cf,0a,a5,12),this->typingThread);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Chat_obj,typing,(void))
 
 void Chat_obj::setActive(bool active,::String threadId){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_324_setActive)
-HXLINE( 325)		if (::hx::IsNotNull( this->typingTimer )) {
-HXLINE( 325)			this->typingTimer->stop();
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_326_setActive)
+HXLINE( 327)		if (::hx::IsNotNull( this->typingTimer )) {
+HXLINE( 327)			this->typingTimer->stop();
             		}
-HXLINE( 326)		this->isTyping = false;
-HXLINE( 328)		bool _hx_tmp;
-HXDLIN( 328)		bool _hx_tmp1;
-HXDLIN( 328)		if (( (bool)(this->isActive) )) {
-HXLINE( 328)			_hx_tmp1 = active;
+HXLINE( 328)		this->isTyping = false;
+HXLINE( 330)		bool _hx_tmp;
+HXDLIN( 330)		bool _hx_tmp1;
+HXDLIN( 330)		if (( (bool)(this->isActive) )) {
+HXLINE( 330)			_hx_tmp1 = active;
             		}
             		else {
-HXLINE( 328)			_hx_tmp1 = false;
+HXLINE( 330)			_hx_tmp1 = false;
             		}
-HXDLIN( 328)		if (_hx_tmp1) {
-HXLINE( 328)			_hx_tmp = (threadId != this->activeThread);
+HXDLIN( 330)		if (_hx_tmp1) {
+HXLINE( 330)			_hx_tmp = (threadId != this->activeThread);
             		}
             		else {
-HXLINE( 328)			_hx_tmp = false;
+HXLINE( 330)			_hx_tmp = false;
             		}
-HXDLIN( 328)		if (_hx_tmp) {
-HXLINE( 329)			this->sendChatState(HX_("inactive",6b,17,30,6a),this->activeThread);
-HXLINE( 330)			this->isActive = false;
+HXDLIN( 330)		if (_hx_tmp) {
+HXLINE( 331)			this->sendChatState(HX_("inactive",6b,17,30,6a),this->activeThread);
+HXLINE( 332)			this->isActive = false;
             		}
-HXLINE( 332)		if (::hx::IsNotNull( this->isActive )) {
-HXLINE( 333)			bool _hx_tmp2;
-HXDLIN( 333)			if (( (bool)(this->isActive) )) {
-HXLINE( 333)				_hx_tmp2 = active;
+HXLINE( 334)		if (::hx::IsNotNull( this->isActive )) {
+HXLINE( 335)			bool _hx_tmp2;
+HXDLIN( 335)			if (( (bool)(this->isActive) )) {
+HXLINE( 335)				_hx_tmp2 = active;
             			}
             			else {
-HXLINE( 333)				_hx_tmp2 = false;
+HXLINE( 335)				_hx_tmp2 = false;
             			}
-HXDLIN( 333)			if (_hx_tmp2) {
-HXLINE( 333)				return;
+HXDLIN( 335)			if (_hx_tmp2) {
+HXLINE( 335)				return;
             			}
-HXLINE( 334)			bool _hx_tmp3;
-HXDLIN( 334)			if (!(( (bool)(this->isActive) ))) {
-HXLINE( 334)				_hx_tmp3 = !(active);
+HXLINE( 336)			bool _hx_tmp3;
+HXDLIN( 336)			if (!(( (bool)(this->isActive) ))) {
+HXLINE( 336)				_hx_tmp3 = !(active);
             			}
             			else {
-HXLINE( 334)				_hx_tmp3 = false;
+HXLINE( 336)				_hx_tmp3 = false;
             			}
-HXDLIN( 334)			if (_hx_tmp3) {
-HXLINE( 334)				return;
+HXDLIN( 336)			if (_hx_tmp3) {
+HXLINE( 336)				return;
             			}
             		}
-HXLINE( 336)		this->isActive = active;
-HXLINE( 337)		this->activeThread = threadId;
-HXLINE( 338)		::String _hx_tmp4;
-HXDLIN( 338)		if (active) {
-HXLINE( 338)			_hx_tmp4 = HX_("active",c6,41,46,16);
+HXLINE( 338)		this->isActive = active;
+HXLINE( 339)		this->activeThread = threadId;
+HXLINE( 340)		::String _hx_tmp4;
+HXDLIN( 340)		if (active) {
+HXLINE( 340)			_hx_tmp4 = HX_("active",c6,41,46,16);
             		}
             		else {
-HXLINE( 338)			_hx_tmp4 = HX_("inactive",6b,17,30,6a);
+HXLINE( 340)			_hx_tmp4 = HX_("inactive",6b,17,30,6a);
             		}
-HXDLIN( 338)		this->sendChatState(_hx_tmp4,this->activeThread);
+HXDLIN( 340)		this->sendChatState(_hx_tmp4,this->activeThread);
             	}
 
 
@@ -914,27 +918,27 @@ HX_DEFINE_DYNAMIC_FUNC2(Chat_obj,setActive,(void))
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,close,(void))
 
 void Chat_obj::close__fromC(){
-            	HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_315_close__fromC)
-HXDLIN( 315)		this->close();
+            	HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_339_close__fromC)
+HXDLIN( 339)		this->close();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,close__fromC,(void))
 
 void Chat_obj::togglePinned(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_349_togglePinned)
-HXLINE( 350)		int _hx_tmp;
-HXDLIN( 350)		if ((this->uiState != 0)) {
-HXLINE( 350)			_hx_tmp = 0;
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_351_togglePinned)
+HXLINE( 352)		int _hx_tmp;
+HXDLIN( 352)		if ((this->uiState != 0)) {
+HXLINE( 352)			_hx_tmp = 0;
             		}
             		else {
-HXLINE( 350)			_hx_tmp = 1;
+HXLINE( 352)			_hx_tmp = 1;
             		}
-HXDLIN( 350)		this->uiState = _hx_tmp;
-HXLINE( 351)		::Dynamic _hx_tmp1 = this->persistence;
-HXDLIN( 351)		::borogove::Persistence_obj::storeChats(_hx_tmp1,this->client->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
-HXLINE( 352)		this->client->sortChats();
-HXLINE( 353)		this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
+HXDLIN( 352)		this->uiState = _hx_tmp;
+HXLINE( 353)		::Dynamic _hx_tmp1 = this->persistence;
+HXDLIN( 353)		::borogove::Persistence_obj::storeChats(_hx_tmp1,this->client->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
+HXLINE( 354)		this->client->sortChats();
+HXLINE( 355)		this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
             	}
 
 
@@ -943,129 +947,129 @@ HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,togglePinned,(void))
 void Chat_obj::block(::hx::Null< bool >  __o_reportSpam, ::borogove::ChatMessage spamMessage,::hx::Null< bool >  __o_onServer){
             		bool reportSpam = __o_reportSpam.Default(false);
             		bool onServer = __o_onServer.Default(true);
-            	HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_359_block)
-HXLINE( 360)		bool _hx_tmp;
-HXDLIN( 360)		if (reportSpam) {
-HXLINE( 360)			_hx_tmp = !(onServer);
+            	HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_361_block)
+HXLINE( 362)		bool _hx_tmp;
+HXDLIN( 362)		if (reportSpam) {
+HXLINE( 362)			_hx_tmp = !(onServer);
             		}
             		else {
-HXLINE( 360)			_hx_tmp = false;
+HXLINE( 362)			_hx_tmp = false;
             		}
-HXDLIN( 360)		if (_hx_tmp) {
-HXLINE( 360)			HX_STACK_DO_THROW(HX_("Can't report SPAM if not sending to server",60,59,79,c5));
+HXDLIN( 362)		if (_hx_tmp) {
+HXLINE( 362)			HX_STACK_DO_THROW(HX_("Can't report SPAM if not sending to server",60,59,79,c5));
             		}
-HXLINE( 362)		bool _hx_tmp1;
-HXDLIN( 362)		bool _hx_tmp2;
-HXDLIN( 362)		if (onServer) {
-HXLINE( 362)			_hx_tmp2 = (this->invites()->length > 0);
+HXLINE( 364)		bool _hx_tmp1;
+HXDLIN( 364)		bool _hx_tmp2;
+HXDLIN( 364)		if (onServer) {
+HXLINE( 364)			_hx_tmp2 = (this->invites()->length > 0);
             		}
             		else {
-HXLINE( 362)			_hx_tmp2 = false;
+HXLINE( 364)			_hx_tmp2 = false;
             		}
-HXDLIN( 362)		if (_hx_tmp2) {
-HXLINE( 362)			_hx_tmp1 = (this->uiState == 3);
+HXDLIN( 364)		if (_hx_tmp2) {
+HXLINE( 364)			_hx_tmp1 = (this->uiState == 3);
             		}
             		else {
-HXLINE( 362)			_hx_tmp1 = false;
+HXLINE( 364)			_hx_tmp1 = false;
             		}
-HXDLIN( 362)		if (_hx_tmp1) {
-HXLINE( 364)			{
-HXLINE( 364)				int _g = 0;
-HXDLIN( 364)				::Array< ::Dynamic> _g1 = this->invites();
-HXDLIN( 364)				while((_g < _g1->length)){
+HXDLIN( 364)		if (_hx_tmp1) {
+HXLINE( 366)			{
+HXLINE( 366)				int _g = 0;
+HXDLIN( 366)				::Array< ::Dynamic> _g1 = this->invites();
+HXDLIN( 366)				while((_g < _g1->length)){
             					HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             					void _hx_run( ::borogove::Stanza response){
-            						HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_378_block)
+            						HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_380_block)
             					}
             					HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 364)					 ::borogove::Stanza invite = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
-HXDLIN( 364)					_g = (_g + 1);
-HXLINE( 365)					 ::borogove::JID inviteFrom = ::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(invite->attr,HX_("from",6a,a5,c2,43))) ));
-HXLINE( 366)					 ::borogove::Client inviteFromBareChat = this->client;
-HXDLIN( 366)					 ::borogove::Chat inviteFromBareChat1 = inviteFromBareChat->getChat(inviteFrom->asBare()->asString());
-HXLINE( 367)					::String toBlock;
-HXDLIN( 367)					bool toBlock1;
-HXDLIN( 367)					if (::hx::IsNotNull( inviteFromBareChat1 )) {
-HXLINE( 367)						toBlock1 = ::Std_obj::isOfType(inviteFromBareChat1,::hx::ClassOf< ::borogove::Channel >());
+HXLINE( 366)					 ::borogove::Stanza invite = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
+HXDLIN( 366)					_g = (_g + 1);
+HXLINE( 367)					 ::borogove::JID inviteFrom = ::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(invite->attr,HX_("from",6a,a5,c2,43))) ));
+HXLINE( 368)					 ::borogove::Client inviteFromBareChat = this->client;
+HXDLIN( 368)					 ::borogove::Chat inviteFromBareChat1 = inviteFromBareChat->getChat(inviteFrom->asBare()->asString());
+HXLINE( 369)					::String toBlock;
+HXDLIN( 369)					bool toBlock1;
+HXDLIN( 369)					if (::hx::IsNotNull( inviteFromBareChat1 )) {
+HXLINE( 369)						toBlock1 = ::Std_obj::isOfType(inviteFromBareChat1,::hx::ClassOf< ::borogove::Channel >());
             					}
             					else {
-HXLINE( 367)						toBlock1 = false;
+HXLINE( 369)						toBlock1 = false;
             					}
-HXDLIN( 367)					if (toBlock1) {
-HXLINE( 367)						toBlock = inviteFrom->asString();
+HXDLIN( 369)					if (toBlock1) {
+HXLINE( 369)						toBlock = inviteFrom->asString();
             					}
             					else {
-HXLINE( 367)						toBlock = inviteFrom->asBare()->asString();
+HXLINE( 369)						toBlock = inviteFrom->asBare()->asString();
             					}
-HXLINE( 369)					::String iq = ::borogove::ID_obj::_hx_short();
-HXDLIN( 369)					 ::borogove::Stanza iq1 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 371)					::String iq = ::borogove::ID_obj::_hx_short();
+HXDLIN( 371)					 ::borogove::Stanza iq1 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("id",db,5b,00,00),iq)
             						->setFixed(1,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))))->tag(HX_("block",4d,75,fc,b4), ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:blocking",d1,a1,46,c3))))->tag(HX_("item",13,c5,bf,45), ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("jid",c5,ca,50,00),toBlock)));
-HXLINE( 372)					if (reportSpam) {
-HXLINE( 373)						 ::borogove::Stanza report = iq1->tag(HX_("report",b4,3c,84,06), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 374)					if (reportSpam) {
+HXLINE( 375)						 ::borogove::Stanza report = iq1->tag(HX_("report",b4,3c,84,06), ::Dynamic(::hx::Anon_obj::Create(2)
             							->setFixed(0,HX_("reason",c4,0f,9d,fc),HX_("urn:xmpp:reporting:spam",b1,09,15,35))
             							->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:reporting:1",49,f0,16,fc))));
-HXLINE( 374)						 ::borogove::Stanza stanzaIdEl = invite->getChild(HX_("stanza-id",73,8a,54,e9),HX_("urn:xmpp:sid:0",a8,4b,37,54));
-HXLINE( 375)						if (::hx::IsNotNull( stanzaIdEl )) {
-HXLINE( 375)							report->addChild(stanzaIdEl);
+HXLINE( 376)						 ::borogove::Stanza stanzaIdEl = invite->getChild(HX_("stanza-id",73,8a,54,e9),HX_("urn:xmpp:sid:0",a8,4b,37,54));
+HXLINE( 377)						if (::hx::IsNotNull( stanzaIdEl )) {
+HXLINE( 377)							report->addChild(stanzaIdEl);
             						}
-HXLINE( 376)						report->up();
+HXLINE( 378)						report->up();
             					}
-HXLINE( 378)					this->stream->sendIq(iq1, ::Dynamic(new _hx_Closure_0()));
+HXLINE( 380)					this->stream->sendIq(iq1, ::Dynamic(new _hx_Closure_0()));
             				}
             			}
-HXLINE( 380)			this->close();
-HXLINE( 381)			return;
+HXLINE( 382)			this->close();
+HXLINE( 383)			return;
             		}
-HXLINE( 384)		this->isBlocked = true;
-HXLINE( 385)		if ((this->uiState == 2)) {
-HXLINE( 386)			::Dynamic _hx_tmp3 = this->persistence;
-HXDLIN( 386)			::borogove::Persistence_obj::storeChats(_hx_tmp3,this->client->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
+HXLINE( 386)		this->isBlocked = true;
+HXLINE( 387)		if ((this->uiState == 2)) {
+HXLINE( 388)			::Dynamic _hx_tmp3 = this->persistence;
+HXDLIN( 388)			::borogove::Persistence_obj::storeChats(_hx_tmp3,this->client->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
             		}
             		else {
-HXLINE( 388)			this->close();
+HXLINE( 390)			this->close();
             		}
-HXLINE( 390)		if (onServer) {
+HXLINE( 392)		if (onServer) {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             			void _hx_run( ::borogove::Stanza response){
-            				HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_406_block)
+            				HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_408_block)
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 391)			::String iq2 = ::borogove::ID_obj::_hx_short();
-HXDLIN( 391)			 ::borogove::Stanza iq3 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 393)			::String iq2 = ::borogove::ID_obj::_hx_short();
+HXDLIN( 393)			 ::borogove::Stanza iq3 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
             				->setFixed(0,HX_("id",db,5b,00,00),iq2)
             				->setFixed(1,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))))->tag(HX_("block",4d,75,fc,b4), ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:blocking",d1,a1,46,c3))))->tag(HX_("item",13,c5,bf,45), ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("jid",c5,ca,50,00),this->chatId)));
-HXLINE( 394)			if (reportSpam) {
-HXLINE( 395)				 ::borogove::Stanza report1 = iq3->tag(HX_("report",b4,3c,84,06), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 396)			if (reportSpam) {
+HXLINE( 397)				 ::borogove::Stanza report1 = iq3->tag(HX_("report",b4,3c,84,06), ::Dynamic(::hx::Anon_obj::Create(2)
             					->setFixed(0,HX_("reason",c4,0f,9d,fc),HX_("urn:xmpp:reporting:spam",b1,09,15,35))
             					->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:reporting:1",49,f0,16,fc))));
-HXLINE( 396)				if (::hx::IsNotNull( spamMessage )) {
-HXLINE( 397)					report1->tag(HX_("stanza-id",73,8a,54,e9), ::Dynamic(::hx::Anon_obj::Create(3)
+HXLINE( 398)				if (::hx::IsNotNull( spamMessage )) {
+HXLINE( 399)					report1->tag(HX_("stanza-id",73,8a,54,e9), ::Dynamic(::hx::Anon_obj::Create(3)
             						->setFixed(0,HX_("by",d7,55,00,00),spamMessage->serverIdBy)
             						->setFixed(1,HX_("id",db,5b,00,00),spamMessage->serverId)
             						->setFixed(2,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:sid:0",a8,4b,37,54))))->up();
             				}
             				else {
-HXLINE( 399)					int _g2 = 0;
-HXDLIN( 399)					::Array< ::Dynamic> _g3 = this->invites();
-HXDLIN( 399)					while((_g2 < _g3->length)){
-HXLINE( 399)						 ::borogove::Stanza invite1 = _g3->__get(_g2).StaticCast<  ::borogove::Stanza >();
-HXDLIN( 399)						_g2 = (_g2 + 1);
-HXLINE( 400)						 ::borogove::Stanza stanzaIdEl1 = invite1->getChild(HX_("stanza-id",73,8a,54,e9),HX_("urn:xmpp:sid:0",a8,4b,37,54));
-HXLINE( 401)						if (::hx::IsNotNull( stanzaIdEl1 )) {
-HXLINE( 401)							report1->addChild(stanzaIdEl1);
+HXLINE( 401)					int _g2 = 0;
+HXDLIN( 401)					::Array< ::Dynamic> _g3 = this->invites();
+HXDLIN( 401)					while((_g2 < _g3->length)){
+HXLINE( 401)						 ::borogove::Stanza invite1 = _g3->__get(_g2).StaticCast<  ::borogove::Stanza >();
+HXDLIN( 401)						_g2 = (_g2 + 1);
+HXLINE( 402)						 ::borogove::Stanza stanzaIdEl1 = invite1->getChild(HX_("stanza-id",73,8a,54,e9),HX_("urn:xmpp:sid:0",a8,4b,37,54));
+HXLINE( 403)						if (::hx::IsNotNull( stanzaIdEl1 )) {
+HXLINE( 403)							report1->addChild(stanzaIdEl1);
             						}
             					}
             				}
-HXLINE( 404)				report1->up();
+HXLINE( 406)				report1->up();
             			}
-HXLINE( 406)			this->stream->sendIq(iq3, ::Dynamic(new _hx_Closure_1()));
+HXLINE( 408)			this->stream->sendIq(iq3, ::Dynamic(new _hx_Closure_1()));
             		}
             	}
 
@@ -1074,22 +1078,22 @@ HX_DEFINE_DYNAMIC_FUNC3(Chat_obj,block,(void))
 
 void Chat_obj::unblock(::hx::Null< bool >  __o_onServer){
             		bool onServer = __o_onServer.Default(true);
-            	HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_413_unblock)
-HXLINE( 414)		this->isBlocked = false;
-HXLINE( 415)		this->uiState = 1;
-HXLINE( 416)		::Dynamic _hx_tmp = this->persistence;
-HXDLIN( 416)		::borogove::Persistence_obj::storeChats(_hx_tmp,this->client->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
-HXLINE( 417)		this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
-HXLINE( 418)		if (onServer) {
+            	HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_415_unblock)
+HXLINE( 416)		this->isBlocked = false;
+HXLINE( 417)		this->uiState = 1;
+HXLINE( 418)		::Dynamic _hx_tmp = this->persistence;
+HXDLIN( 418)		::borogove::Persistence_obj::storeChats(_hx_tmp,this->client->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
+HXLINE( 419)		this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
+HXLINE( 420)		if (onServer) {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             			void _hx_run( ::borogove::Stanza response){
-            				HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_423_unblock)
+            				HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_425_unblock)
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 419)			 ::borogove::GenericStream _hx_tmp1 = this->stream;
-HXLINE( 420)			::String _hx_tmp2 = ::borogove::ID_obj::_hx_short();
-HXLINE( 419)			_hx_tmp1->sendIq( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 421)			 ::borogove::GenericStream _hx_tmp1 = this->stream;
+HXLINE( 422)			::String _hx_tmp2 = ::borogove::ID_obj::_hx_short();
+HXLINE( 421)			_hx_tmp1->sendIq( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
             				->setFixed(0,HX_("id",db,5b,00,00),_hx_tmp2)
             				->setFixed(1,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))))->tag(HX_("unblock",54,6c,8d,b1), ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:blocking",d1,a1,46,c3))))->tag(HX_("item",13,c5,bf,45), ::Dynamic(::hx::Anon_obj::Create(1)
@@ -1101,14 +1105,14 @@ HXLINE( 419)			_hx_tmp1->sendIq( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("i
 HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,unblock,(void))
 
 void Chat_obj::setNotificationsInternal(bool filtered,bool mention,bool reply){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_430_setNotificationsInternal)
-HXDLIN( 430)		if (filtered) {
-HXLINE( 431)			this->notificationSettings =  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_432_setNotificationsInternal)
+HXDLIN( 432)		if (filtered) {
+HXLINE( 433)			this->notificationSettings =  ::Dynamic(::hx::Anon_obj::Create(2)
             				->setFixed(0,HX_("mention",ea,9e,bf,b9),mention)
             				->setFixed(1,HX_("reply",2a,09,c6,e6),reply));
             		}
             		else {
-HXLINE( 433)			this->notificationSettings = null();
+HXLINE( 435)			this->notificationSettings = null();
             		}
             	}
 
@@ -1116,48 +1120,48 @@ HXLINE( 433)			this->notificationSettings = null();
 HX_DEFINE_DYNAMIC_FUNC3(Chat_obj,setNotificationsInternal,(void))
 
 void Chat_obj::setNotifications(bool filtered,bool mention,bool reply){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_440_setNotifications)
-HXLINE( 441)		this->setNotificationsInternal(filtered,mention,reply);
-HXLINE( 442)		::Dynamic _hx_tmp = this->persistence;
-HXDLIN( 442)		::borogove::Persistence_obj::storeChats(_hx_tmp,this->client->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
-HXLINE( 443)		this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
-HXLINE( 444)		this->client->updatePushIfEnabled();
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_442_setNotifications)
+HXLINE( 443)		this->setNotificationsInternal(filtered,mention,reply);
+HXLINE( 444)		::Dynamic _hx_tmp = this->persistence;
+HXDLIN( 444)		::borogove::Persistence_obj::storeChats(_hx_tmp,this->client->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
+HXLINE( 445)		this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
+HXLINE( 446)		this->client->updatePushIfEnabled();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC3(Chat_obj,setNotifications,(void))
 
 bool Chat_obj::notificationsFiltered(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_451_notificationsFiltered)
-HXDLIN( 451)		return ::hx::IsNotNull( this->notificationSettings );
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_453_notificationsFiltered)
+HXDLIN( 453)		return ::hx::IsNotNull( this->notificationSettings );
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,notificationsFiltered,return )
 
 bool Chat_obj::notifyMention(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_458_notifyMention)
-HXDLIN( 458)		if (::hx::IsNotNull( this->notificationSettings )) {
-HXDLIN( 458)			return ( (bool)(this->notificationSettings->__Field(HX_("mention",ea,9e,bf,b9),::hx::paccDynamic)) );
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_460_notifyMention)
+HXDLIN( 460)		if (::hx::IsNotNull( this->notificationSettings )) {
+HXDLIN( 460)			return ( (bool)(this->notificationSettings->__Field(HX_("mention",ea,9e,bf,b9),::hx::paccDynamic)) );
             		}
             		else {
-HXDLIN( 458)			return true;
+HXDLIN( 460)			return true;
             		}
-HXDLIN( 458)		return false;
+HXDLIN( 460)		return false;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,notifyMention,return )
 
 bool Chat_obj::notifyReply(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_465_notifyReply)
-HXDLIN( 465)		if (::hx::IsNotNull( this->notificationSettings )) {
-HXDLIN( 465)			return ( (bool)(this->notificationSettings->__Field(HX_("reply",2a,09,c6,e6),::hx::paccDynamic)) );
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_467_notifyReply)
+HXDLIN( 467)		if (::hx::IsNotNull( this->notificationSettings )) {
+HXDLIN( 467)			return ( (bool)(this->notificationSettings->__Field(HX_("reply",2a,09,c6,e6),::hx::paccDynamic)) );
             		}
             		else {
-HXDLIN( 465)			return true;
+HXDLIN( 467)			return true;
             		}
-HXDLIN( 465)		return false;
+HXDLIN( 467)		return false;
             	}
 
 
@@ -1166,79 +1170,79 @@ HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,notifyReply,return )
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,lastMessageId,return )
 
 ::String Chat_obj::lastMessageId__fromC(){
-            	HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_315_lastMessageId__fromC)
-HXDLIN( 315)		return this->lastMessageId();
+            	HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_339_lastMessageId__fromC)
+HXDLIN( 339)		return this->lastMessageId();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,lastMessageId__fromC,return )
 
 void Chat_obj::updateFromBookmark( ::borogove::Stanza item){
-            	HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_474_updateFromBookmark)
-HXLINE( 475)		this->isBookmarked = true;
-HXLINE( 476)		 ::borogove::Stanza conf = item->getChild(HX_("conference",1c,2b,83,41),HX_("urn:xmpp:bookmarks:1",58,3c,53,7d));
-HXLINE( 477)		::String fn = ( (::String)(::Reflect_obj::field(conf->attr,HX_("name",4b,72,ff,48))) );
-HXLINE( 478)		if (::hx::IsNotNull( fn )) {
-HXLINE( 478)			this->displayName = fn;
-            		}
-HXLINE( 479)		int _hx_tmp;
-HXDLIN( 479)		bool _hx_tmp1;
-HXDLIN( 479)		if ((( (::String)(::Reflect_obj::field(conf->attr,HX_("autojoin",d9,f6,b1,3e))) ) != HX_("1",31,00,00,00))) {
-HXLINE( 479)			_hx_tmp1 = (( (::String)(::Reflect_obj::field(conf->attr,HX_("autojoin",d9,f6,b1,3e))) ) == HX_("true",4e,a7,03,4d));
+            	HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_476_updateFromBookmark)
+HXLINE( 477)		this->isBookmarked = true;
+HXLINE( 478)		 ::borogove::Stanza conf = item->getChild(HX_("conference",1c,2b,83,41),HX_("urn:xmpp:bookmarks:1",58,3c,53,7d));
+HXLINE( 479)		::String fn = ( (::String)(::Reflect_obj::field(conf->attr,HX_("name",4b,72,ff,48))) );
+HXLINE( 480)		if (::hx::IsNotNull( fn )) {
+HXLINE( 480)			this->displayName = fn;
+            		}
+HXLINE( 481)		int _hx_tmp;
+HXDLIN( 481)		bool _hx_tmp1;
+HXDLIN( 481)		if ((( (::String)(::Reflect_obj::field(conf->attr,HX_("autojoin",d9,f6,b1,3e))) ) != HX_("1",31,00,00,00))) {
+HXLINE( 481)			_hx_tmp1 = (( (::String)(::Reflect_obj::field(conf->attr,HX_("autojoin",d9,f6,b1,3e))) ) == HX_("true",4e,a7,03,4d));
             		}
             		else {
-HXLINE( 479)			_hx_tmp1 = true;
+HXLINE( 481)			_hx_tmp1 = true;
             		}
-HXDLIN( 479)		if (_hx_tmp1) {
-HXLINE( 479)			if ((this->uiState == 0)) {
-HXLINE( 479)				_hx_tmp = 0;
+HXDLIN( 481)		if (_hx_tmp1) {
+HXLINE( 481)			if ((this->uiState == 0)) {
+HXLINE( 481)				_hx_tmp = 0;
             			}
             			else {
-HXLINE( 479)				_hx_tmp = 1;
+HXLINE( 481)				_hx_tmp = 1;
             			}
             		}
             		else {
-HXLINE( 479)			_hx_tmp = 2;
+HXLINE( 481)			_hx_tmp = 2;
             		}
-HXDLIN( 479)		this->uiState = _hx_tmp;
-HXLINE( 480)		 ::borogove::Stanza tmp = conf->getChild(HX_("extensions",14,7c,70,89),null());
-HXDLIN( 480)		 ::borogove::Stanza _hx_tmp2;
-HXDLIN( 480)		if (::hx::IsNotNull( tmp )) {
-HXLINE( 480)			_hx_tmp2 = tmp;
+HXDLIN( 481)		this->uiState = _hx_tmp;
+HXLINE( 482)		 ::borogove::Stanza tmp = conf->getChild(HX_("extensions",14,7c,70,89),null());
+HXDLIN( 482)		 ::borogove::Stanza _hx_tmp2;
+HXDLIN( 482)		if (::hx::IsNotNull( tmp )) {
+HXLINE( 482)			_hx_tmp2 = tmp;
             		}
             		else {
-HXLINE( 480)			_hx_tmp2 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("extensions",14,7c,70,89), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE( 482)			_hx_tmp2 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("extensions",14,7c,70,89), ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:bookmarks:1",58,3c,53,7d))));
             		}
-HXDLIN( 480)		this->extensions = _hx_tmp2;
+HXDLIN( 482)		this->extensions = _hx_tmp2;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,updateFromBookmark,(void))
 
 void Chat_obj::updateFromRoster( ::Dynamic item){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_484_updateFromRoster)
-HXLINE( 485)		this->isBookmarked = true;
-HXLINE( 486)		bool _hx_tmp;
-HXDLIN( 486)		if (::hx::IsNotEq( item->__Field(HX_("subscription",1d,ff,00,36),::hx::paccDynamic),HX_("both",81,88,1b,41) )) {
-HXLINE( 486)			_hx_tmp = ::hx::IsEq( item->__Field(HX_("subscription",1d,ff,00,36),::hx::paccDynamic),HX_("from",6a,a5,c2,43) );
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_486_updateFromRoster)
+HXLINE( 487)		this->isBookmarked = true;
+HXLINE( 488)		bool _hx_tmp;
+HXDLIN( 488)		if (::hx::IsNotEq( item->__Field(HX_("subscription",1d,ff,00,36),::hx::paccDynamic),HX_("both",81,88,1b,41) )) {
+HXLINE( 488)			_hx_tmp = ::hx::IsEq( item->__Field(HX_("subscription",1d,ff,00,36),::hx::paccDynamic),HX_("from",6a,a5,c2,43) );
             		}
             		else {
-HXLINE( 486)			_hx_tmp = true;
+HXLINE( 488)			_hx_tmp = true;
             		}
-HXDLIN( 486)		this->setTrusted(_hx_tmp);
-HXLINE( 487)		bool _hx_tmp1;
-HXDLIN( 487)		if (::hx::IsNotNull( item->__Field(HX_("fn",48,59,00,00),::hx::paccDynamic) )) {
-HXLINE( 487)			_hx_tmp1 = ::hx::IsNotEq( item->__Field(HX_("fn",48,59,00,00),::hx::paccDynamic),HX_("",00,00,00,00) );
+HXDLIN( 488)		this->setTrusted(_hx_tmp);
+HXLINE( 489)		bool _hx_tmp1;
+HXDLIN( 489)		if (::hx::IsNotNull( item->__Field(HX_("fn",48,59,00,00),::hx::paccDynamic) )) {
+HXLINE( 489)			_hx_tmp1 = ::hx::IsNotEq( item->__Field(HX_("fn",48,59,00,00),::hx::paccDynamic),HX_("",00,00,00,00) );
             		}
             		else {
-HXLINE( 487)			_hx_tmp1 = false;
+HXLINE( 489)			_hx_tmp1 = false;
             		}
-HXDLIN( 487)		if (_hx_tmp1) {
-HXLINE( 487)			this->displayName = ( (::String)(item->__Field(HX_("fn",48,59,00,00),::hx::paccDynamic)) );
+HXDLIN( 489)		if (_hx_tmp1) {
+HXLINE( 489)			this->displayName = ( (::String)(item->__Field(HX_("fn",48,59,00,00),::hx::paccDynamic)) );
             		}
-HXLINE( 488)		if ((this->uiState == 3)) {
-HXLINE( 488)			this->uiState = 1;
+HXLINE( 490)		if ((this->uiState == 3)) {
+HXLINE( 490)			this->uiState = 1;
             		}
             	}
 
@@ -1246,187 +1250,194 @@ HXLINE( 488)			this->uiState = 1;
 HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,updateFromRoster,(void))
 
 ::String Chat_obj::getPhoto(){
-            	HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_494_getPhoto)
-HXLINE( 495)		bool _hx_tmp;
-HXDLIN( 495)		if (::hx::IsNotNull( this->avatarSha1 )) {
-HXLINE( 495)			_hx_tmp = (::haxe::io::Bytes_obj::ofData(this->avatarSha1)->length < 1);
+            	HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_496_getPhoto)
+HXLINE( 497)		bool _hx_tmp;
+HXDLIN( 497)		if (::hx::IsNotNull( this->avatarSha1 )) {
+HXLINE( 497)			_hx_tmp = (::haxe::io::Bytes_obj::ofData(this->avatarSha1)->length < 1);
             		}
             		else {
-HXLINE( 495)			_hx_tmp = true;
+HXLINE( 497)			_hx_tmp = true;
             		}
-HXDLIN( 495)		if (_hx_tmp) {
-HXLINE( 495)			return null();
+HXDLIN( 497)		if (_hx_tmp) {
+HXLINE( 497)			return null();
             		}
-HXLINE( 496)		return  ::borogove::Hash_obj::__alloc( HX_CTX ,HX_("sha-1",90,a8,1c,7c),this->avatarSha1)->toUri();
+HXLINE( 498)		return  ::borogove::Hash_obj::__alloc( HX_CTX ,HX_("sha-1",90,a8,1c,7c),this->avatarSha1)->toUri();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,getPhoto,return )
 
 ::String Chat_obj::getPlaceholder(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_503_getPlaceholder)
-HXDLIN( 503)		::String _hx_tmp = this->chatId;
-HXDLIN( 503)		return ::borogove::Color_obj::defaultPhoto(_hx_tmp,this->getDisplayName().charAt(0).toUpperCase());
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_505_getPlaceholder)
+HXDLIN( 505)		::String _hx_tmp = this->chatId;
+HXDLIN( 505)		return ::borogove::Color_obj::defaultPhoto(_hx_tmp,this->getDisplayName().charAt(0).toUpperCase());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,getPlaceholder,return )
 
 ::String Chat_obj::readUpTo(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_510_readUpTo)
-HXDLIN( 510)		return this->readUpToId;
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_512_readUpTo)
+HXDLIN( 512)		return this->readUpToId;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,readUpTo,return )
 
 int Chat_obj::unreadCount(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_517_unreadCount)
-HXDLIN( 517)		return this->_unreadCount;
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_519_unreadCount)
+HXDLIN( 519)		return this->_unreadCount;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,unreadCount,return )
 
 void Chat_obj::setUnreadCount(int count){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_522_setUnreadCount)
-HXDLIN( 522)		this->_unreadCount = count;
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_524_setUnreadCount)
+HXDLIN( 524)		this->_unreadCount = count;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,setUnreadCount,(void))
 
 ::String Chat_obj::preview(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_528_preview)
-HXLINE( 529)		if (::hx::IsNull( this->lastMessage )) {
-HXLINE( 529)			return HX_("",00,00,00,00);
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_530_preview)
+HXLINE( 531)		if (::hx::IsNull( this->lastMessage )) {
+HXLINE( 531)			return HX_("",00,00,00,00);
             		}
-HXLINE( 531)		if ((this->lastMessage->type == 1)) {
-HXLINE( 533)			if (this->lastMessage->isIncoming()) {
-HXLINE( 533)				return HX_("Incoming Call",18,e2,4d,47);
+HXLINE( 533)		if ((this->lastMessage->type == 1)) {
+HXLINE( 535)			if (this->lastMessage->isIncoming()) {
+HXLINE( 535)				return HX_("Incoming Call",18,e2,4d,47);
             			}
             			else {
-HXLINE( 533)				return HX_("Outgoing Call",d2,04,61,e8);
+HXLINE( 535)				return HX_("Outgoing Call",d2,04,61,e8);
             			}
             		}
             		else {
-HXLINE( 535)			return this->lastMessage->text;
+            			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
+            			bool _hx_run(::String line){
+            				HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_537_preview)
+HXLINE( 537)				return !( ::EReg_obj::__alloc( HX_CTX ,HX_("(^[ \n]*$)|(^>)",bc,88,8d,c7),HX_("",00,00,00,00))->match(line));
+            			}
+            			HX_END_LOCAL_FUNC1(return)
+
+HXLINE( 537)			return ( (::String)(::Lambda_obj::find(this->lastMessage->text.split(HX_("\n",0a,00,00,00)), ::Dynamic(new _hx_Closure_0()))) );
             		}
-HXLINE( 531)		return null();
+HXLINE( 533)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,preview,return )
 
 void Chat_obj::setLastMessage( ::borogove::ChatMessage message){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_541_setLastMessage)
-HXDLIN( 541)		this->lastMessage = message;
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_543_setLastMessage)
+HXDLIN( 543)		this->lastMessage = message;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,setLastMessage,(void))
 
 void Chat_obj::setDisplayName(::String displayName){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_549_setDisplayName)
-HXLINE( 550)		this->displayName = displayName;
-HXLINE( 551)		this->bookmark();
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_551_setDisplayName)
+HXLINE( 552)		this->displayName = displayName;
+HXLINE( 553)		this->bookmark();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,setDisplayName,(void))
 
 ::String Chat_obj::getDisplayName(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_557_getDisplayName)
-HXLINE( 558)		if ((this->displayName == this->chatId)) {
-HXLINE( 559)			::String _hx_tmp = this->chatId;
-HXDLIN( 559)			if ((_hx_tmp == this->client->accountId())) {
-HXLINE( 559)				return this->client->displayName();
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_559_getDisplayName)
+HXLINE( 560)		if ((this->displayName == this->chatId)) {
+HXLINE( 561)			::String _hx_tmp = this->chatId;
+HXDLIN( 561)			if ((_hx_tmp == this->client->accountId())) {
+HXLINE( 561)				return this->client->displayName();
             			}
-HXLINE( 561)			::Array< ::String > participants = this->getParticipants();
-HXLINE( 562)			bool _hx_tmp1;
-HXDLIN( 562)			if ((participants->length > 2)) {
-HXLINE( 562)				_hx_tmp1 = (participants->length < 20);
+HXLINE( 563)			::Array< ::String > participants = this->getParticipants();
+HXLINE( 564)			bool _hx_tmp1;
+HXDLIN( 564)			if ((participants->length > 2)) {
+HXLINE( 564)				_hx_tmp1 = (participants->length < 20);
             			}
             			else {
-HXLINE( 562)				_hx_tmp1 = false;
+HXLINE( 564)				_hx_tmp1 = false;
             			}
-HXDLIN( 562)			if (_hx_tmp1) {
-HXLINE( 563)				::Array< ::String > result = ::Array_obj< ::String >::__new(participants->length);
-HXDLIN( 563)				{
-HXLINE( 563)					int _g = 0;
-HXDLIN( 563)					int _g1 = participants->length;
-HXDLIN( 563)					while((_g < _g1)){
-HXLINE( 563)						_g = (_g + 1);
-HXDLIN( 563)						int i = (_g - 1);
-HXDLIN( 563)						{
-HXLINE( 563)							::String id = ( (::String)(_hx_array_unsafe_get(participants,i)) );
-HXLINE( 564)							 ::borogove::Participant p;
-HXDLIN( 564)							if ((id == this->chatId)) {
-HXLINE( 564)								p = null();
+HXDLIN( 564)			if (_hx_tmp1) {
+HXLINE( 565)				::Array< ::String > result = ::Array_obj< ::String >::__new(participants->length);
+HXDLIN( 565)				{
+HXLINE( 565)					int _g = 0;
+HXDLIN( 565)					int _g1 = participants->length;
+HXDLIN( 565)					while((_g < _g1)){
+HXLINE( 565)						_g = (_g + 1);
+HXDLIN( 565)						int i = (_g - 1);
+HXDLIN( 565)						{
+HXLINE( 565)							::String id = ( (::String)(_hx_array_unsafe_get(participants,i)) );
+HXLINE( 566)							 ::borogove::Participant p;
+HXDLIN( 566)							if ((id == this->chatId)) {
+HXLINE( 566)								p = null();
             							}
             							else {
-HXLINE( 564)								p = this->getParticipantDetails(id);
+HXLINE( 566)								p = this->getParticipantDetails(id);
             							}
-HXLINE( 563)							::String inValue;
-HXLINE( 565)							bool inValue1;
-HXDLIN( 565)							if (::hx::IsNotNull( p )) {
-HXLINE( 565)								inValue1 = p->isSelf;
+HXLINE( 565)							::String inValue;
+HXLINE( 567)							bool inValue1;
+HXDLIN( 567)							if (::hx::IsNotNull( p )) {
+HXLINE( 567)								inValue1 = p->isSelf;
             							}
             							else {
-HXLINE( 565)								inValue1 = true;
+HXLINE( 567)								inValue1 = true;
             							}
-HXDLIN( 565)							if (inValue1) {
-HXLINE( 563)								inValue = null();
+HXDLIN( 567)							if (inValue1) {
+HXLINE( 565)								inValue = null();
             							}
             							else {
-HXLINE( 563)								inValue = p->displayName;
+HXLINE( 565)								inValue = p->displayName;
             							}
-HXDLIN( 563)							result->__unsafe_set(i,inValue);
+HXDLIN( 565)							result->__unsafe_set(i,inValue);
             						}
             					}
             				}
-HXDLIN( 563)				::Array< ::String > _g2 = ::Array_obj< ::String >::__new(0);
-HXDLIN( 563)				{
-HXLINE( 563)					int _g3 = 0;
-HXDLIN( 563)					while((_g3 < result->length)){
-HXLINE( 563)						::String v = result->__get(_g3);
-HXDLIN( 563)						_g3 = (_g3 + 1);
-HXDLIN( 563)						if (::hx::IsNotNull( v )) {
-HXLINE( 563)							_g2->push(v);
+HXDLIN( 565)				::Array< ::String > _g2 = ::Array_obj< ::String >::__new(0);
+HXDLIN( 565)				{
+HXLINE( 565)					int _g3 = 0;
+HXDLIN( 565)					while((_g3 < result->length)){
+HXLINE( 565)						::String v = result->__get(_g3);
+HXDLIN( 565)						_g3 = (_g3 + 1);
+HXDLIN( 565)						if (::hx::IsNotNull( v )) {
+HXLINE( 565)							_g2->push(v);
             						}
             					}
             				}
-HXDLIN( 563)				return _g2->join(HX_(", ",74,26,00,00));
+HXDLIN( 565)				return _g2->join(HX_(", ",74,26,00,00));
             			}
             		}
             		else {
-HXLINE( 568)			if ((this->uiState == 3)) {
-HXLINE( 569)				return ((((HX_("",00,00,00,00) + this->displayName) + HX_(" (",08,1c,00,00)) + this->chatId) + HX_(")",29,00,00,00));
+HXLINE( 570)			if ((this->uiState == 3)) {
+HXLINE( 571)				return ((((HX_("",00,00,00,00) + this->displayName) + HX_(" (",08,1c,00,00)) + this->chatId) + HX_(")",29,00,00,00));
             			}
             		}
-HXLINE( 572)		return this->displayName;
+HXLINE( 574)		return this->displayName;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,getDisplayName,return )
 
 void Chat_obj::setPresence(::String resource, ::borogove::Presence presence){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_577_setPresence)
-HXDLIN( 577)		this->presence->set(resource,presence);
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_579_setPresence)
+HXDLIN( 579)		this->presence->set(resource,presence);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Chat_obj,setPresence,(void))
 
 void Chat_obj::setCaps(::String resource, ::borogove::Caps caps){
-            	HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_581_setCaps)
-HXLINE( 582)		 ::borogove::Presence presence = ( ( ::borogove::Presence)(this->presence->get(resource)) );
-HXLINE( 583)		if (::hx::IsNotNull( presence )) {
-HXLINE( 584)			presence->caps = caps;
-HXLINE( 585)			this->setPresence(resource,presence);
+            	HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_583_setCaps)
+HXLINE( 584)		 ::borogove::Presence presence = ( ( ::borogove::Presence)(this->presence->get(resource)) );
+HXLINE( 585)		if (::hx::IsNotNull( presence )) {
+HXLINE( 586)			presence->caps = caps;
+HXLINE( 587)			this->setPresence(resource,presence);
             		}
             		else {
-HXLINE( 587)			this->setPresence(resource, ::borogove::Presence_obj::__alloc( HX_CTX ,caps,null(),null()));
+HXLINE( 589)			this->setPresence(resource, ::borogove::Presence_obj::__alloc( HX_CTX ,caps,null(),null()));
             		}
             	}
 
@@ -1434,8 +1445,8 @@ HXLINE( 587)			this->setPresence(resource, ::borogove::Presence_obj::__alloc( HX
 HX_DEFINE_DYNAMIC_FUNC2(Chat_obj,setCaps,(void))
 
 void Chat_obj::removePresence(::String resource){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_593_removePresence)
-HXDLIN( 593)		this->presence->remove(resource);
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_595_removePresence)
+HXDLIN( 595)		this->presence->remove(resource);
             	}
 
 
@@ -1444,17 +1455,17 @@ HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,removePresence,(void))
  ::Dynamic Chat_obj::getCaps(){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,iter) HXARGC(0)
             		 ::Dynamic _hx_run(){
-            			HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_601_getCaps)
-HXLINE( 602)			 ::Dynamic n = iter->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
-HXLINE( 603)			return  ::Dynamic(::hx::Anon_obj::Create(2)
+            			HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_603_getCaps)
+HXLINE( 604)			 ::Dynamic n = iter->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
+HXLINE( 605)			return  ::Dynamic(::hx::Anon_obj::Create(2)
             				->setFixed(0,HX_("key",9f,89,51,00), ::Dynamic(n->__Field(HX_("key",9f,89,51,00),::hx::paccDynamic)))
             				->setFixed(1,HX_("value",71,7f,b8,31),( ( ::borogove::Presence)(n->__Field(HX_("value",71,7f,b8,31),::hx::paccDynamic)) )->caps));
             		}
             		HX_END_LOCAL_FUNC0(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_597_getCaps)
-HXLINE( 598)		 ::Dynamic iter =  ::haxe::iterators::MapKeyValueIterator_obj::__alloc( HX_CTX ,this->presence);
-HXLINE( 599)		return  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_599_getCaps)
+HXLINE( 600)		 ::Dynamic iter =  ::haxe::iterators::MapKeyValueIterator_obj::__alloc( HX_CTX ,this->presence);
+HXLINE( 601)		return  ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("hasNext",6d,a5,46,18), ::Dynamic(iter->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)))
             			->setFixed(1,HX_("next",f3,84,02,49), ::Dynamic(new _hx_Closure_0(iter))));
             	}
@@ -1463,48 +1474,48 @@ HXLINE( 599)		return  ::Dynamic(::hx::Anon_obj::Create(2)
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,getCaps,return )
 
  ::borogove::Caps Chat_obj::getResourceCaps(::String resource){
-            	HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_610_getResourceCaps)
-HXDLIN( 610)		 ::borogove::Presence tmp = ( ( ::borogove::Presence)(this->presence->get(resource)) );
-HXDLIN( 610)		 ::borogove::Caps tmp1;
-HXDLIN( 610)		if (::hx::IsNotNull( tmp )) {
-HXDLIN( 610)			tmp1 = tmp->caps;
+            	HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_612_getResourceCaps)
+HXDLIN( 612)		 ::borogove::Presence tmp = ( ( ::borogove::Presence)(this->presence->get(resource)) );
+HXDLIN( 612)		 ::borogove::Caps tmp1;
+HXDLIN( 612)		if (::hx::IsNotNull( tmp )) {
+HXDLIN( 612)			tmp1 = tmp->caps;
             		}
             		else {
-HXDLIN( 610)			tmp1 = null();
+HXDLIN( 612)			tmp1 = null();
             		}
-HXDLIN( 610)		if (::hx::IsNotNull( tmp1 )) {
-HXDLIN( 610)			return tmp1;
+HXDLIN( 612)		if (::hx::IsNotNull( tmp1 )) {
+HXDLIN( 612)			return tmp1;
             		}
             		else {
-HXDLIN( 610)			return  ::borogove::Caps_obj::__alloc( HX_CTX ,HX_("",00,00,00,00),::Array_obj< ::Dynamic>::__new(0),::Array_obj< ::String >::__new(0),::Array_obj< ::Dynamic>::__new(0),null());
+HXDLIN( 612)			return  ::borogove::Caps_obj::__alloc( HX_CTX ,HX_("",00,00,00,00),::Array_obj< ::Dynamic>::__new(0),::Array_obj< ::String >::__new(0),::Array_obj< ::Dynamic>::__new(0),null());
             		}
-HXDLIN( 610)		return null();
+HXDLIN( 612)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,getResourceCaps,return )
 
 void Chat_obj::setAvatarSha1(::Array< unsigned char > sha1){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_615_setAvatarSha1)
-HXDLIN( 615)		this->avatarSha1 = sha1;
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_617_setAvatarSha1)
+HXDLIN( 617)		this->avatarSha1 = sha1;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,setAvatarSha1,(void))
 
 void Chat_obj::setTrusted(bool trusted){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_623_setTrusted)
-HXLINE( 624)		this->trusted = trusted;
-HXLINE( 625)		bool _hx_tmp;
-HXDLIN( 625)		if (trusted) {
-HXLINE( 625)			_hx_tmp = (this->uiState == 3);
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_625_setTrusted)
+HXLINE( 626)		this->trusted = trusted;
+HXLINE( 627)		bool _hx_tmp;
+HXDLIN( 627)		if (trusted) {
+HXLINE( 627)			_hx_tmp = (this->uiState == 3);
             		}
             		else {
-HXLINE( 625)			_hx_tmp = false;
+HXLINE( 627)			_hx_tmp = false;
             		}
-HXDLIN( 625)		if (_hx_tmp) {
-HXLINE( 626)			this->uiState = 1;
-HXLINE( 627)			this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
+HXDLIN( 627)		if (_hx_tmp) {
+HXLINE( 628)			this->uiState = 1;
+HXLINE( 629)			this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
             		}
             	}
 
@@ -1512,152 +1523,152 @@ HXLINE( 627)			this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::Virt
 HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,setTrusted,(void))
 
 bool Chat_obj::isTrusted(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_635_isTrusted)
-HXDLIN( 635)		if (!(this->trusted)) {
-HXDLIN( 635)			::String _hx_tmp = this->chatId;
-HXDLIN( 635)			return (_hx_tmp == this->client->accountId());
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_637_isTrusted)
+HXDLIN( 637)		if (!(this->trusted)) {
+HXDLIN( 637)			::String _hx_tmp = this->chatId;
+HXDLIN( 637)			return (_hx_tmp == this->client->accountId());
             		}
             		else {
-HXDLIN( 635)			return true;
+HXDLIN( 637)			return true;
             		}
-HXDLIN( 635)		return false;
+HXDLIN( 637)		return false;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,isTrusted,return )
 
 bool Chat_obj::livePresence(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_640_livePresence)
-HXDLIN( 640)		return true;
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_642_livePresence)
+HXDLIN( 642)		return true;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,livePresence,return )
 
 bool Chat_obj::syncing(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_647_syncing)
-HXDLIN( 647)		return !(this->client->inSync);
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_649_syncing)
+HXDLIN( 649)		return !(this->client->inSync);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,syncing,return )
 
 bool Chat_obj::canAudioCall(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_653_canAudioCall)
-HXLINE( 655)		{
-HXLINE( 655)			::Dynamic this1 = this->presence;
-HXDLIN( 655)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(this1);
-HXDLIN( 655)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 656)				bool _hx_tmp;
-HXDLIN( 656)				 ::borogove::Caps tmp = ( ( ::borogove::Presence)(::haxe::IMap_obj::get(this1,_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)())) )->caps;
-HXDLIN( 656)				::Array< ::String > tmp1;
-HXDLIN( 656)				if (::hx::IsNotNull( tmp )) {
-HXLINE( 656)					tmp1 = tmp->features;
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_655_canAudioCall)
+HXLINE( 657)		{
+HXLINE( 657)			::Dynamic this1 = this->presence;
+HXDLIN( 657)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(this1);
+HXDLIN( 657)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 658)				bool _hx_tmp;
+HXDLIN( 658)				 ::borogove::Caps tmp = ( ( ::borogove::Presence)(::haxe::IMap_obj::get(this1,_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)())) )->caps;
+HXDLIN( 658)				::Array< ::String > tmp1;
+HXDLIN( 658)				if (::hx::IsNotNull( tmp )) {
+HXLINE( 658)					tmp1 = tmp->features;
             				}
             				else {
-HXLINE( 656)					tmp1 = null();
+HXLINE( 658)					tmp1 = null();
             				}
-HXDLIN( 656)				 ::Dynamic tmp2;
-HXDLIN( 656)				if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 656)					tmp2 = tmp1->contains(HX_("urn:xmpp:jingle:apps:rtp:audio",0f,8b,54,6c));
+HXDLIN( 658)				 ::Dynamic tmp2;
+HXDLIN( 658)				if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 658)					tmp2 = tmp1->contains(HX_("urn:xmpp:jingle:apps:rtp:audio",0f,8b,54,6c));
             				}
             				else {
-HXLINE( 656)					tmp2 = null();
+HXLINE( 658)					tmp2 = null();
             				}
-HXDLIN( 656)				if (::hx::IsNotNull( tmp2 )) {
-HXLINE( 656)					_hx_tmp = ( (bool)(tmp2) );
+HXDLIN( 658)				if (::hx::IsNotNull( tmp2 )) {
+HXLINE( 658)					_hx_tmp = ( (bool)(tmp2) );
             				}
             				else {
-HXLINE( 656)					_hx_tmp = false;
+HXLINE( 658)					_hx_tmp = false;
             				}
-HXDLIN( 656)				if (_hx_tmp) {
-HXLINE( 656)					return true;
+HXDLIN( 658)				if (_hx_tmp) {
+HXLINE( 658)					return true;
             				}
             			}
             		}
-HXLINE( 659)		return false;
+HXLINE( 661)		return false;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,canAudioCall,return )
 
 bool Chat_obj::canVideoCall(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_665_canVideoCall)
-HXLINE( 667)		{
-HXLINE( 667)			::Dynamic this1 = this->presence;
-HXDLIN( 667)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(this1);
-HXDLIN( 667)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 668)				bool _hx_tmp;
-HXDLIN( 668)				 ::borogove::Caps tmp = ( ( ::borogove::Presence)(::haxe::IMap_obj::get(this1,_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)())) )->caps;
-HXDLIN( 668)				::Array< ::String > tmp1;
-HXDLIN( 668)				if (::hx::IsNotNull( tmp )) {
-HXLINE( 668)					tmp1 = tmp->features;
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_667_canVideoCall)
+HXLINE( 669)		{
+HXLINE( 669)			::Dynamic this1 = this->presence;
+HXDLIN( 669)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(this1);
+HXDLIN( 669)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 670)				bool _hx_tmp;
+HXDLIN( 670)				 ::borogove::Caps tmp = ( ( ::borogove::Presence)(::haxe::IMap_obj::get(this1,_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)())) )->caps;
+HXDLIN( 670)				::Array< ::String > tmp1;
+HXDLIN( 670)				if (::hx::IsNotNull( tmp )) {
+HXLINE( 670)					tmp1 = tmp->features;
             				}
             				else {
-HXLINE( 668)					tmp1 = null();
+HXLINE( 670)					tmp1 = null();
             				}
-HXDLIN( 668)				 ::Dynamic tmp2;
-HXDLIN( 668)				if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 668)					tmp2 = tmp1->contains(HX_("urn:xmpp:jingle:apps:rtp:video",b4,26,d0,7b));
+HXDLIN( 670)				 ::Dynamic tmp2;
+HXDLIN( 670)				if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 670)					tmp2 = tmp1->contains(HX_("urn:xmpp:jingle:apps:rtp:video",b4,26,d0,7b));
             				}
             				else {
-HXLINE( 668)					tmp2 = null();
+HXLINE( 670)					tmp2 = null();
             				}
-HXDLIN( 668)				if (::hx::IsNotNull( tmp2 )) {
-HXLINE( 668)					_hx_tmp = ( (bool)(tmp2) );
+HXDLIN( 670)				if (::hx::IsNotNull( tmp2 )) {
+HXLINE( 670)					_hx_tmp = ( (bool)(tmp2) );
             				}
             				else {
-HXLINE( 668)					_hx_tmp = false;
+HXLINE( 670)					_hx_tmp = false;
             				}
-HXDLIN( 668)				if (_hx_tmp) {
-HXLINE( 668)					return true;
+HXDLIN( 670)				if (_hx_tmp) {
+HXLINE( 670)					return true;
             				}
             			}
             		}
-HXLINE( 671)		return false;
+HXLINE( 673)		return false;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,canVideoCall,return )
 
 ::Dynamic Chat_obj::startCall(bool audio,bool video){
-            	HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_681_startCall)
-HXLINE( 682)		if ((this->uiState == 3)) {
-HXLINE( 682)			this->uiState = 1;
+            	HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_683_startCall)
+HXLINE( 684)		if ((this->uiState == 3)) {
+HXLINE( 684)			this->uiState = 1;
             		}
-HXLINE( 683)		 ::borogove::Client session = this->client;
-HXDLIN( 683)		 ::borogove::calls::OutgoingProposedSession session1 =  ::borogove::calls::OutgoingProposedSession_obj::__alloc( HX_CTX ,session,::borogove::JID_obj::parse(this->chatId));
-HXLINE( 684)		{
-HXLINE( 684)			::Dynamic this1 = this->jingleSessions;
-HXDLIN( 684)			( ( ::haxe::ds::StringMap)(this1) )->set(session1->get_sid(),session1);
+HXLINE( 685)		 ::borogove::Client session = this->client;
+HXDLIN( 685)		 ::borogove::calls::OutgoingProposedSession session1 =  ::borogove::calls::OutgoingProposedSession_obj::__alloc( HX_CTX ,session,::borogove::JID_obj::parse(this->chatId));
+HXLINE( 686)		{
+HXLINE( 686)			::Dynamic this1 = this->jingleSessions;
+HXDLIN( 686)			( ( ::haxe::ds::StringMap)(this1) )->set(session1->get_sid(),session1);
             		}
-HXLINE( 685)		session1->propose(audio,video);
-HXLINE( 686)		return session1;
+HXLINE( 687)		session1->propose(audio,video);
+HXLINE( 688)		return session1;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Chat_obj,startCall,return )
 
 void Chat_obj::addMedia(::Array< ::Dynamic> streams){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_690_addMedia)
-HXLINE( 691)		if ((this->callStatus() != 4)) {
-HXLINE( 691)			HX_STACK_DO_THROW(HX_("cannot add media when no call ongoing",6a,0b,2b,6e));
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_692_addMedia)
+HXLINE( 693)		if ((this->callStatus() != 4)) {
+HXLINE( 693)			HX_STACK_DO_THROW(HX_("cannot add media when no call ongoing",6a,0b,2b,6e));
             		}
-HXLINE( 692)		::borogove::calls::Session_obj::addMedia(this->jingleSessions->iterator()->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)(),streams);
+HXLINE( 694)		::borogove::calls::Session_obj::addMedia(this->jingleSessions->iterator()->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)(),streams);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,addMedia,(void))
 
 void Chat_obj::acceptCall(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_698_acceptCall)
-HXLINE( 699)		if ((this->uiState == 3)) {
-HXLINE( 699)			this->uiState = 1;
-            		}
-HXLINE( 700)		{
-HXLINE( 700)			 ::Dynamic session = this->jingleSessions->iterator();
-HXDLIN( 700)			while(( (bool)(session->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 701)				::borogove::calls::Session_obj::accept(session->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_700_acceptCall)
+HXLINE( 701)		if ((this->uiState == 3)) {
+HXLINE( 701)			this->uiState = 1;
+            		}
+HXLINE( 702)		{
+HXLINE( 702)			 ::Dynamic session = this->jingleSessions->iterator();
+HXDLIN( 702)			while(( (bool)(session->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 703)				::borogove::calls::Session_obj::accept(session->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
             			}
             		}
             	}
@@ -1666,14 +1677,14 @@ HXLINE( 701)				::borogove::calls::Session_obj::accept(session->__Field(HX_("nex
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,acceptCall,(void))
 
 void Chat_obj::hangup(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_709_hangup)
-HXDLIN( 709)		 ::Dynamic session = this->jingleSessions->iterator();
-HXDLIN( 709)		while(( (bool)(session->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXDLIN( 709)			::Dynamic session1 = session->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
-HXLINE( 710)			::borogove::calls::Session_obj::hangup(session1);
-HXLINE( 711)			{
-HXLINE( 711)				::Dynamic this1 = this->jingleSessions;
-HXDLIN( 711)				( ( ::haxe::ds::StringMap)(this1) )->remove(::borogove::calls::Session_obj::get_sid(session1));
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_711_hangup)
+HXDLIN( 711)		 ::Dynamic session = this->jingleSessions->iterator();
+HXDLIN( 711)		while(( (bool)(session->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXDLIN( 711)			::Dynamic session1 = session->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
+HXLINE( 712)			::borogove::calls::Session_obj::hangup(session1);
+HXLINE( 713)			{
+HXLINE( 713)				::Dynamic this1 = this->jingleSessions;
+HXDLIN( 713)				( ( ::haxe::ds::StringMap)(this1) )->remove(::borogove::calls::Session_obj::get_sid(session1));
             			}
             		}
             	}
@@ -1682,234 +1693,234 @@ HXDLIN( 711)				( ( ::haxe::ds::StringMap)(this1) )->remove(::borogove::calls::S
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,hangup,(void))
 
 int Chat_obj::callStatus(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_718_callStatus)
-HXLINE( 719)		{
-HXLINE( 719)			 ::Dynamic session = this->jingleSessions->iterator();
-HXDLIN( 719)			while(( (bool)(session->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 720)				return ::borogove::calls::Session_obj::callStatus(session->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_720_callStatus)
+HXLINE( 721)		{
+HXLINE( 721)			 ::Dynamic session = this->jingleSessions->iterator();
+HXDLIN( 721)			while(( (bool)(session->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 722)				return ::borogove::calls::Session_obj::callStatus(session->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
             			}
             		}
-HXLINE( 723)		return 0;
+HXLINE( 725)		return 0;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,callStatus,return )
 
  ::borogove::calls::DTMFSender Chat_obj::dtmf(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_729_dtmf)
-HXLINE( 730)		{
-HXLINE( 730)			 ::Dynamic session = this->jingleSessions->iterator();
-HXDLIN( 730)			while(( (bool)(session->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 731)				 ::borogove::calls::DTMFSender dtmf = ::borogove::calls::Session_obj::dtmf(session->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
-HXLINE( 732)				if (::hx::IsNotNull( dtmf )) {
-HXLINE( 732)					return dtmf;
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_731_dtmf)
+HXLINE( 732)		{
+HXLINE( 732)			 ::Dynamic session = this->jingleSessions->iterator();
+HXDLIN( 732)			while(( (bool)(session->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 733)				 ::borogove::calls::DTMFSender dtmf = ::borogove::calls::Session_obj::dtmf(session->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
+HXLINE( 734)				if (::hx::IsNotNull( dtmf )) {
+HXLINE( 734)					return dtmf;
             				}
             			}
             		}
-HXLINE( 735)		return null();
+HXLINE( 737)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,dtmf,return )
 
 ::Array< ::Dynamic> Chat_obj::videoTracks(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_742_videoTracks)
-HXDLIN( 742)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 742)		{
-HXDLIN( 742)			 ::Dynamic x = this->jingleSessions->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 742)			while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXDLIN( 742)				_g->push(::borogove::calls::Session_obj::videoTracks(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()));
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_744_videoTracks)
+HXDLIN( 744)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 744)		{
+HXDLIN( 744)			 ::Dynamic x = this->jingleSessions->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN( 744)			while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXDLIN( 744)				_g->push(::borogove::calls::Session_obj::videoTracks(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()));
             			}
             		}
-HXDLIN( 742)		::Array< ::Dynamic> _g1 = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 742)		{
-HXDLIN( 742)			 ::Dynamic e = _g->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 742)			while(( (bool)(e->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXDLIN( 742)				 ::Dynamic x1 = e->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 742)				while(( (bool)(x1->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXDLIN( 742)					_g1->push(x1->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
+HXDLIN( 744)		::Array< ::Dynamic> _g1 = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 744)		{
+HXDLIN( 744)			 ::Dynamic e = _g->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN( 744)			while(( (bool)(e->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXDLIN( 744)				 ::Dynamic x1 = e->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN( 744)				while(( (bool)(x1->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXDLIN( 744)					_g1->push(x1->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
             				}
             			}
             		}
-HXDLIN( 742)		return _g1;
+HXDLIN( 744)		return _g1;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,videoTracks,return )
 
 size_t Chat_obj::videoTracks__fromC(void*** outPtr){
-            	HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_311_videoTracks__fromC)
-HXDLIN( 311)		::Array< ::Dynamic> out = this->videoTracks();
-HXDLIN( 311)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 311)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 311)			{
-HXDLIN( 311)				int _g = 0;
-HXDLIN( 311)				while((_g < out->length)){
-HXDLIN( 311)					 ::borogove::calls::MediaStreamTrack el = out->__get(_g).StaticCast<  ::borogove::calls::MediaStreamTrack >();
-HXDLIN( 311)					_g = (_g + 1);
-HXDLIN( 311)					{
-HXDLIN( 311)						 ::Dynamic haxeObject = el;
-HXDLIN( 311)						void* ptr = haxeObject.mPtr;
-HXDLIN( 311)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 311)						{
-HXDLIN( 311)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 311)							if (::hx::IsNull( store )) {
-HXDLIN( 311)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_335_videoTracks__fromC)
+HXDLIN( 335)		::Array< ::Dynamic> out = this->videoTracks();
+HXDLIN( 335)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 335)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 335)			{
+HXDLIN( 335)				int _g = 0;
+HXDLIN( 335)				while((_g < out->length)){
+HXDLIN( 335)					 ::borogove::calls::MediaStreamTrack el = out->__get(_g).StaticCast<  ::borogove::calls::MediaStreamTrack >();
+HXDLIN( 335)					_g = (_g + 1);
+HXDLIN( 335)					{
+HXDLIN( 335)						 ::Dynamic haxeObject = el;
+HXDLIN( 335)						void* ptr = haxeObject.mPtr;
+HXDLIN( 335)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 335)						{
+HXDLIN( 335)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 335)							if (::hx::IsNull( store )) {
+HXDLIN( 335)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
             									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             									->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 311)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN( 335)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             							}
             							else {
-HXDLIN( 311)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 335)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             							}
             						}
             					}
             				}
             			}
-HXDLIN( 311)			void** ptr1 = (void**)out->getBase();
-HXDLIN( 311)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 311)			{
-HXDLIN( 311)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 311)				if (::hx::IsNull( store1 )) {
-HXDLIN( 311)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 335)			void** ptr1 = (void**)out->getBase();
+HXDLIN( 335)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 335)			{
+HXDLIN( 335)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 335)				if (::hx::IsNull( store1 )) {
+HXDLIN( 335)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),out));
-HXDLIN( 311)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+HXDLIN( 335)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
             				}
             				else {
-HXDLIN( 311)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 335)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXDLIN( 311)			_hx_tmp->set_ref(ptr1);
+HXDLIN( 335)			_hx_tmp->set_ref(ptr1);
             		}
-HXDLIN( 311)		return ( (size_t)(out->length) );
+HXDLIN( 335)		return ( (size_t)(out->length) );
             	}
 
 
 ::String Chat_obj::encryptionMode(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_749_encryptionMode)
-HXDLIN( 749)		switch((int)(this->_encryptionMode)){
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_751_encryptionMode)
+HXDLIN( 751)		switch((int)(this->_encryptionMode)){
             			case (int)0: {
-HXLINE( 751)				return HX_("unencrypted",8b,80,ea,f1);
+HXLINE( 753)				return HX_("unencrypted",8b,80,ea,f1);
             			}
             			break;
             			case (int)1: {
-HXLINE( 753)				return HX_("omemo",a9,a8,d3,31);
+HXLINE( 755)				return HX_("omemo",a9,a8,d3,31);
             			}
             			break;
             		}
-HXLINE( 749)		return null();
+HXLINE( 751)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,encryptionMode,return )
 
 bool Chat_obj::canSend(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_761_canSend)
-HXDLIN( 761)		return (::borogove::Caps_obj::withFeature(this->getCaps(),HX_("urn:xmpp:noreply:0",a3,10,eb,d5))->length < 1);
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_763_canSend)
+HXDLIN( 763)		return (::borogove::Caps_obj::withFeature(this->getCaps(),HX_("urn:xmpp:noreply:0",a3,10,eb,d5))->length < 1);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,canSend,return )
 
 void Chat_obj::invite( ::borogove::Chat other,::String threadId){
-            	HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_767_invite)
-HXLINE( 768)		 ::Dynamic attr =  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_769_invite)
+HXLINE( 770)		 ::Dynamic attr =  ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("jid",c5,ca,50,00),this->chatId)
             			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("jabber:x:conference",b4,78,c2,fc)));
-HXLINE( 772)		if (::hx::IsNotNull( threadId )) {
-HXLINE( 773)			::Reflect_obj::setField(attr,HX_("continue",67,e0,c8,31),HX_("true",4e,a7,03,4d));
-HXLINE( 774)			::Reflect_obj::setField(attr,HX_("thread",ca,7a,b9,8e),threadId);
+HXLINE( 774)		if (::hx::IsNotNull( threadId )) {
+HXLINE( 775)			::Reflect_obj::setField(attr,HX_("continue",67,e0,c8,31),HX_("true",4e,a7,03,4d));
+HXLINE( 776)			::Reflect_obj::setField(attr,HX_("thread",ca,7a,b9,8e),threadId);
             		}
-HXLINE( 776)		other->sendMessageStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a),null())->tag(HX_("x",78,00,00,00),attr)->up(),null());
+HXLINE( 778)		other->sendMessageStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a),null())->tag(HX_("x",78,00,00,00),attr)->up(),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Chat_obj,invite,(void))
 
 bool Chat_obj::canInvite(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_785_canInvite)
-HXDLIN( 785)		return false;
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_787_canInvite)
+HXDLIN( 787)		return false;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,canInvite,return )
 
 bool Chat_obj::isApp(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_791_isApp)
-HXLINE( 792)		if ((::Lambda_obj::array( ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_793_isApp)
+HXLINE( 794)		if ((::Lambda_obj::array( ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("iterator",ee,49,9a,93),this->getCaps_dyn())))->get_length() < 1)) {
-HXLINE( 794)			if ((this->chatId.indexOf(HX_("@",40,00,00,00),null()) < 0)) {
-HXLINE( 794)				return this->hasCommands();
+HXLINE( 796)			if ((this->chatId.indexOf(HX_("@",40,00,00,00),null()) < 0)) {
+HXLINE( 796)				return this->hasCommands();
             			}
             			else {
-HXLINE( 794)				return false;
+HXLINE( 796)				return false;
             			}
             		}
-HXLINE( 797)		bool bot = (::borogove::Caps_obj::withIdentity(this->getCaps(),HX_("client",4b,ca,4f,0a),HX_("bot",07,be,4a,00))->length > 0);
-HXLINE( 798)		bool client = (::borogove::Caps_obj::withIdentity(this->getCaps(),HX_("client",4b,ca,4f,0a),null())->length > 0);
-HXLINE( 799)		bool account = (::borogove::Caps_obj::withIdentity(this->getCaps(),HX_("account",ad,fc,59,a1),null())->length > 0);
-HXLINE( 801)		bool _hx_tmp;
-HXDLIN( 801)		bool _hx_tmp1;
-HXDLIN( 801)		if (!(client)) {
-HXLINE( 801)			_hx_tmp1 = account;
+HXLINE( 799)		bool bot = (::borogove::Caps_obj::withIdentity(this->getCaps(),HX_("client",4b,ca,4f,0a),HX_("bot",07,be,4a,00))->length > 0);
+HXLINE( 800)		bool client = (::borogove::Caps_obj::withIdentity(this->getCaps(),HX_("client",4b,ca,4f,0a),null())->length > 0);
+HXLINE( 801)		bool account = (::borogove::Caps_obj::withIdentity(this->getCaps(),HX_("account",ad,fc,59,a1),null())->length > 0);
+HXLINE( 803)		bool _hx_tmp;
+HXDLIN( 803)		bool _hx_tmp1;
+HXDLIN( 803)		if (!(client)) {
+HXLINE( 803)			_hx_tmp1 = account;
             		}
             		else {
-HXLINE( 801)			_hx_tmp1 = true;
+HXLINE( 803)			_hx_tmp1 = true;
             		}
-HXDLIN( 801)		if (_hx_tmp1) {
-HXLINE( 801)			_hx_tmp = !(bot);
+HXDLIN( 803)		if (_hx_tmp1) {
+HXLINE( 803)			_hx_tmp = !(bot);
             		}
             		else {
-HXLINE( 801)			_hx_tmp = false;
+HXLINE( 803)			_hx_tmp = false;
             		}
-HXDLIN( 801)		if (_hx_tmp) {
-HXLINE( 801)			return false;
+HXDLIN( 803)		if (_hx_tmp) {
+HXLINE( 803)			return false;
             		}
-HXLINE( 803)		bool noReply = (::borogove::Caps_obj::withFeature(this->getCaps(),HX_("urn:xmpp:noreply:0",a3,10,eb,d5))->length > 0);
-HXLINE( 805)		bool _hx_tmp2;
-HXDLIN( 805)		if (bot) {
-HXLINE( 805)			_hx_tmp2 = noReply;
+HXLINE( 805)		bool noReply = (::borogove::Caps_obj::withFeature(this->getCaps(),HX_("urn:xmpp:noreply:0",a3,10,eb,d5))->length > 0);
+HXLINE( 807)		bool _hx_tmp2;
+HXDLIN( 807)		if (bot) {
+HXLINE( 807)			_hx_tmp2 = noReply;
             		}
             		else {
-HXLINE( 805)			_hx_tmp2 = false;
+HXLINE( 807)			_hx_tmp2 = false;
             		}
-HXDLIN( 805)		if (_hx_tmp2) {
-HXLINE( 805)			return this->hasCommands();
+HXDLIN( 807)		if (_hx_tmp2) {
+HXLINE( 807)			return this->hasCommands();
             		}
-HXLINE( 807)		bool conference = (::borogove::Caps_obj::withIdentity(this->getCaps(),HX_("conference",1c,2b,83,41),null())->length > 0);
-HXLINE( 809)		bool _hx_tmp3;
-HXDLIN( 809)		if (conference) {
-HXLINE( 809)			_hx_tmp3 = (this->chatId.indexOf(HX_("@",40,00,00,00),null()) < 0);
+HXLINE( 809)		bool conference = (::borogove::Caps_obj::withIdentity(this->getCaps(),HX_("conference",1c,2b,83,41),null())->length > 0);
+HXLINE( 811)		bool _hx_tmp3;
+HXDLIN( 811)		if (conference) {
+HXLINE( 811)			_hx_tmp3 = (this->chatId.indexOf(HX_("@",40,00,00,00),null()) < 0);
             		}
             		else {
-HXLINE( 809)			_hx_tmp3 = false;
+HXLINE( 811)			_hx_tmp3 = false;
             		}
-HXDLIN( 809)		if (_hx_tmp3) {
-HXLINE( 809)			return this->hasCommands();
+HXDLIN( 811)		if (_hx_tmp3) {
+HXLINE( 811)			return this->hasCommands();
             		}
-HXLINE( 812)		bool _hx_tmp4;
-HXDLIN( 812)		if (!(client)) {
-HXLINE( 812)			_hx_tmp4 = !(conference);
+HXLINE( 814)		bool _hx_tmp4;
+HXDLIN( 814)		if (!(client)) {
+HXLINE( 814)			_hx_tmp4 = !(conference);
             		}
             		else {
-HXLINE( 812)			_hx_tmp4 = false;
+HXLINE( 814)			_hx_tmp4 = false;
             		}
-HXDLIN( 812)		if (_hx_tmp4) {
-HXLINE( 812)			return this->hasCommands();
+HXDLIN( 814)		if (_hx_tmp4) {
+HXLINE( 814)			return this->hasCommands();
             		}
             		else {
-HXLINE( 812)			return false;
+HXLINE( 814)			return false;
             		}
-HXDLIN( 812)		return false;
+HXDLIN( 814)		return false;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,isApp,return )
 
 bool Chat_obj::hasCommands(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_819_hasCommands)
-HXDLIN( 819)		return (this->commandJids()->length > 0);
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_821_hasCommands)
+HXDLIN( 821)		return (this->commandJids()->length > 0);
             	}
 
 
@@ -1918,250 +1929,250 @@ HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,hasCommands,return )
 ::Dynamic Chat_obj::commands(){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_2) HXARGC(1)
             		::Array< ::Dynamic> _hx_run(::Array< ::Dynamic> commands){
-            			HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_834_commands)
-HXLINE( 834)			::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 834)			{
-HXLINE( 834)				int _g_current = 0;
-HXDLIN( 834)				while((_g_current < commands->length)){
-HXLINE( 834)					_g_current = (_g_current + 1);
-HXDLIN( 834)					{
-HXLINE( 834)						 ::Dynamic x = commands->__get((_g_current - 1)).StaticCast< ::Array< ::Dynamic> >()->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 834)						while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 834)							_g->push(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
+            			HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_836_commands)
+HXLINE( 836)			::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 836)			{
+HXLINE( 836)				int _g_current = 0;
+HXDLIN( 836)				while((_g_current < commands->length)){
+HXLINE( 836)					_g_current = (_g_current + 1);
+HXDLIN( 836)					{
+HXLINE( 836)						 ::Dynamic x = commands->__get((_g_current - 1)).StaticCast< ::Array< ::Dynamic> >()->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN( 836)						while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 836)							_g->push(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
             						}
             					}
             				}
             			}
-HXDLIN( 834)			return _g;
+HXDLIN( 836)			return _g;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_822_commands)
-HXDLIN( 822)		 ::borogove::Chat _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 823)		::Array< ::Dynamic> _this = this->commandJids();
-HXDLIN( 823)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_this->length);
-HXDLIN( 823)		{
-HXLINE( 823)			int _g = 0;
-HXDLIN( 823)			int _g1 = _this->length;
-HXDLIN( 823)			while((_g < _g1)){
-HXLINE( 823)				_g = (_g + 1);
-HXDLIN( 823)				int i = (_g - 1);
-HXDLIN( 823)				{
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_824_commands)
+HXDLIN( 824)		 ::borogove::Chat _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 825)		::Array< ::Dynamic> _this = this->commandJids();
+HXDLIN( 825)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_this->length);
+HXDLIN( 825)		{
+HXLINE( 825)			int _g = 0;
+HXDLIN( 825)			int _g1 = _this->length;
+HXDLIN( 825)			while((_g < _g1)){
+HXLINE( 825)				_g = (_g + 1);
+HXDLIN( 825)				int i = (_g - 1);
+HXDLIN( 825)				{
             					HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::borogove::Chat,_gthis, ::borogove::JID,jid) HXARGC(2)
             					void _hx_run( ::Dynamic resolve, ::Dynamic reject){
             						HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_0, ::borogove::Chat,_gthis, ::Dynamic,resolve, ::borogove::JID,jid, ::borogove::queries::DiscoItemsGet,itemsGet) HXARGC(0)
             						void _hx_run(){
-            							HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_825_commands)
-HXLINE( 826)							jid->asBare();
-HXLINE( 827)							 ::Dynamic resolve1 = resolve;
-HXDLIN( 827)							::Array< ::Dynamic> _this;
-HXDLIN( 827)							::Array< ::Dynamic> tmp = itemsGet->getResult();
-HXDLIN( 827)							if (::hx::IsNotNull( tmp )) {
-HXLINE( 827)								_this = tmp;
+            							HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_827_commands)
+HXLINE( 828)							jid->asBare();
+HXLINE( 829)							 ::Dynamic resolve1 = resolve;
+HXDLIN( 829)							::Array< ::Dynamic> _this;
+HXDLIN( 829)							::Array< ::Dynamic> tmp = itemsGet->getResult();
+HXDLIN( 829)							if (::hx::IsNotNull( tmp )) {
+HXLINE( 829)								_this = tmp;
             							}
             							else {
-HXLINE( 827)								_this = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 829)								_this = ::Array_obj< ::Dynamic>::__new(0);
             							}
-HXDLIN( 827)							::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 827)							{
-HXLINE( 827)								int _g1 = 0;
-HXDLIN( 827)								::Array< ::Dynamic> _g2 = _this;
-HXDLIN( 827)								while((_g1 < _g2->length)){
-HXLINE( 827)									 ::Dynamic v = _g2->__get(_g1);
-HXDLIN( 827)									_g1 = (_g1 + 1);
-HXLINE( 830)									bool inValue;
-HXDLIN( 830)									bool inValue1;
-HXDLIN( 830)									if (::hx::IsNotNull( v->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic) )) {
-HXLINE( 830)										inValue1 = ( ( ::borogove::JID)(v->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)) )->asBare()->equals(jid);
+HXDLIN( 829)							::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 829)							{
+HXLINE( 829)								int _g1 = 0;
+HXDLIN( 829)								::Array< ::Dynamic> _g2 = _this;
+HXDLIN( 829)								while((_g1 < _g2->length)){
+HXLINE( 829)									 ::Dynamic v = _g2->__get(_g1);
+HXDLIN( 829)									_g1 = (_g1 + 1);
+HXLINE( 832)									bool inValue;
+HXDLIN( 832)									bool inValue1;
+HXDLIN( 832)									if (::hx::IsNotNull( v->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic) )) {
+HXLINE( 832)										inValue1 = ( ( ::borogove::JID)(v->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)) )->asBare()->equals(jid);
             									}
             									else {
-HXLINE( 830)										inValue1 = false;
+HXLINE( 832)										inValue1 = false;
             									}
-HXDLIN( 830)									if (inValue1) {
-HXLINE( 830)										inValue = ::hx::IsNotNull( v->__Field(HX_("node",02,0a,0a,49),::hx::paccDynamic) );
+HXDLIN( 832)									if (inValue1) {
+HXLINE( 832)										inValue = ::hx::IsNotNull( v->__Field(HX_("node",02,0a,0a,49),::hx::paccDynamic) );
             									}
             									else {
-HXLINE( 830)										inValue = false;
+HXLINE( 832)										inValue = false;
             									}
-HXLINE( 827)									if (inValue) {
-HXLINE( 827)										_g->push(v);
+HXLINE( 829)									if (inValue) {
+HXLINE( 829)										_g->push(v);
             									}
             								}
             							}
-HXDLIN( 827)							::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_g->length);
-HXDLIN( 827)							{
-HXLINE( 827)								int _g3 = 0;
-HXDLIN( 827)								int _g4 = _g->length;
-HXDLIN( 827)								while((_g3 < _g4)){
-HXLINE( 827)									_g3 = (_g3 + 1);
-HXDLIN( 827)									int i = (_g3 - 1);
-HXDLIN( 827)									{
-HXLINE( 831)										 ::Dynamic item = _hx_array_unsafe_get(_g,i);
-HXLINE( 827)										result->__unsafe_set(i, ::borogove::Command_obj::__alloc( HX_CTX ,_gthis->client,item));
+HXDLIN( 829)							::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_g->length);
+HXDLIN( 829)							{
+HXLINE( 829)								int _g3 = 0;
+HXDLIN( 829)								int _g4 = _g->length;
+HXDLIN( 829)								while((_g3 < _g4)){
+HXLINE( 829)									_g3 = (_g3 + 1);
+HXDLIN( 829)									int i = (_g3 - 1);
+HXDLIN( 829)									{
+HXLINE( 833)										 ::Dynamic item = _hx_array_unsafe_get(_g,i);
+HXLINE( 829)										result->__unsafe_set(i, ::borogove::Command_obj::__alloc( HX_CTX ,_gthis->client,item));
             									}
             								}
             							}
-HXDLIN( 827)							resolve1(result);
+HXDLIN( 829)							resolve1(result);
             						}
             						HX_END_LOCAL_FUNC0((void))
 
-            						HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_823_commands)
-HXLINE( 824)						 ::borogove::queries::DiscoItemsGet itemsGet =  ::borogove::queries::DiscoItemsGet_obj::__alloc( HX_CTX ,jid->asString(),HX_("http://jabber.org/protocol/commands",3c,af,11,6d));
-HXLINE( 825)						itemsGet->onFinished( ::Dynamic(new _hx_Closure_0(_gthis,resolve,jid,itemsGet)));
-HXLINE( 833)						_gthis->client->sendQuery(itemsGet);
+            						HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_825_commands)
+HXLINE( 826)						 ::borogove::queries::DiscoItemsGet itemsGet =  ::borogove::queries::DiscoItemsGet_obj::__alloc( HX_CTX ,jid->asString(),HX_("http://jabber.org/protocol/commands",3c,af,11,6d));
+HXLINE( 827)						itemsGet->onFinished( ::Dynamic(new _hx_Closure_0(_gthis,resolve,jid,itemsGet)));
+HXLINE( 835)						_gthis->client->sendQuery(itemsGet);
             					}
             					HX_END_LOCAL_FUNC2((void))
 
-HXLINE( 823)					 ::borogove::JID jid = ( ( ::borogove::JID)(_hx_array_unsafe_get(_this,i)) );
-HXDLIN( 823)					::Dynamic inValue = ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_1(_gthis,jid)));
-HXDLIN( 823)					result->__unsafe_set(i,inValue);
+HXLINE( 825)					 ::borogove::JID jid = ( ( ::borogove::JID)(_hx_array_unsafe_get(_this,i)) );
+HXDLIN( 825)					::Dynamic inValue = ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_1(_gthis,jid)));
+HXDLIN( 825)					result->__unsafe_set(i,inValue);
             				}
             			}
             		}
-HXDLIN( 823)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(result), ::Dynamic(new _hx_Closure_2()),null());
+HXDLIN( 825)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(result), ::Dynamic(new _hx_Closure_2()),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,commands,return )
 
 void Chat_obj::commands__fromC(::cpp::Function< void  (void**,size_t,void*) > handler,void* handler__context){
-            	HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_313_commands__fromC)
-HXDLIN( 313)		if (::hx::IsNull( handler )) {
-HXDLIN( 313)			this->commands();
+            	HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_337_commands__fromC)
+HXDLIN( 337)		if (::hx::IsNull( handler )) {
+HXDLIN( 337)			this->commands();
             		}
             		else {
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (void** HX_COMMA size_t HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
             			void _hx_run(::Array< ::Dynamic> v){
-            				HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_313_commands__fromC)
-HXDLIN( 313)				::cpp::Function< void  (void**,size_t,void*) > handler1 = handler;
-HXLINE( 291)				{
-HXLINE( 291)					int _g = 0;
-HXDLIN( 291)					while((_g < v->length)){
-HXLINE( 291)						 ::borogove::Command el = v->__get(_g).StaticCast<  ::borogove::Command >();
-HXDLIN( 291)						_g = (_g + 1);
-HXDLIN( 291)						{
-HXLINE( 291)							 ::Dynamic haxeObject = el;
-HXDLIN( 291)							void* ptr = haxeObject.mPtr;
-HXDLIN( 291)							::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 291)							{
-HXLINE( 291)								 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 291)								if (::hx::IsNull( store )) {
-HXLINE( 291)									store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            				HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_337_commands__fromC)
+HXDLIN( 337)				::cpp::Function< void  (void**,size_t,void*) > handler1 = handler;
+HXLINE( 308)				{
+HXLINE( 308)					int _g = 0;
+HXDLIN( 308)					while((_g < v->length)){
+HXLINE( 308)						 ::borogove::Command el = v->__get(_g).StaticCast<  ::borogove::Command >();
+HXDLIN( 308)						_g = (_g + 1);
+HXDLIN( 308)						{
+HXLINE( 308)							 ::Dynamic haxeObject = el;
+HXDLIN( 308)							void* ptr = haxeObject.mPtr;
+HXDLIN( 308)							::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 308)							{
+HXLINE( 308)								 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 308)								if (::hx::IsNull( store )) {
+HXLINE( 308)									store =  ::Dynamic(::hx::Anon_obj::Create(2)
             										->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             										->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 291)									::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN( 308)									::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             								}
             								else {
-HXLINE( 291)									::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE( 308)									::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             								}
             							}
             						}
             					}
             				}
-HXDLIN( 291)				void** ptr1 = (void**)v->getBase();
-HXDLIN( 291)				::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 291)				{
-HXLINE( 291)					 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 291)					if (::hx::IsNull( store1 )) {
-HXLINE( 291)						store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 308)				void** ptr1 = (void**)v->getBase();
+HXDLIN( 308)				::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 308)				{
+HXLINE( 308)					 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 308)					if (::hx::IsNull( store1 )) {
+HXLINE( 308)						store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             							->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             							->setFixed(1,HX_("value",71,7f,b8,31),v));
-HXDLIN( 291)						::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+HXDLIN( 308)						::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
             					}
             					else {
-HXLINE( 291)						::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE( 308)						::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
             					}
             				}
-HXLINE( 313)				handler1(ptr1,( (size_t)(v->length) ),handler__context);
+HXLINE( 337)				handler1(ptr1,( (size_t)(v->length) ),handler__context);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::cpp::Function< void  (void** HX_COMMA size_t HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
             			void _hx_run( ::Dynamic e){
-            				HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_313_commands__fromC)
-HXDLIN( 313)				handler(null(),( (size_t)(0) ),handler__context);
+            				HX_STACKFRAME(&_hx_pos_a94f40d98d9e57cb_337_commands__fromC)
+HXDLIN( 337)				handler(null(),( (size_t)(0) ),handler__context);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-HXDLIN( 313)			::thenshim::_Promise::Promise_Impl__obj::then(this->commands(), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
+HXDLIN( 337)			::thenshim::_Promise::Promise_Impl__obj::then(this->commands(), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
             		}
             	}
 
 
 ::Array< ::Dynamic> Chat_obj::commandJids(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_837_commandJids)
-HXLINE( 838)		::Array< ::Dynamic> jids = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 839)		 ::borogove::JID jid = ::borogove::JID_obj::parse(this->chatId);
-HXLINE( 840)		{
-HXLINE( 840)			int _g = 0;
-HXDLIN( 840)			::Array< ::String > _g1 = ::borogove::Caps_obj::withFeature(this->getCaps(),HX_("http://jabber.org/protocol/commands",3c,af,11,6d));
-HXDLIN( 840)			while((_g < _g1->length)){
-HXLINE( 840)				::String resource = _g1->__get(_g);
-HXDLIN( 840)				_g = (_g + 1);
-HXLINE( 841)				 ::borogove::JID _hx_tmp;
-HXDLIN( 841)				bool _hx_tmp1;
-HXDLIN( 841)				if ((resource != HX_("",00,00,00,00))) {
-HXLINE( 841)					_hx_tmp1 = ::hx::IsNull( resource );
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_839_commandJids)
+HXLINE( 840)		::Array< ::Dynamic> jids = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 841)		 ::borogove::JID jid = ::borogove::JID_obj::parse(this->chatId);
+HXLINE( 842)		{
+HXLINE( 842)			int _g = 0;
+HXDLIN( 842)			::Array< ::String > _g1 = ::borogove::Caps_obj::withFeature(this->getCaps(),HX_("http://jabber.org/protocol/commands",3c,af,11,6d));
+HXDLIN( 842)			while((_g < _g1->length)){
+HXLINE( 842)				::String resource = _g1->__get(_g);
+HXDLIN( 842)				_g = (_g + 1);
+HXLINE( 843)				 ::borogove::JID _hx_tmp;
+HXDLIN( 843)				bool _hx_tmp1;
+HXDLIN( 843)				if ((resource != HX_("",00,00,00,00))) {
+HXLINE( 843)					_hx_tmp1 = ::hx::IsNull( resource );
             				}
             				else {
-HXLINE( 841)					_hx_tmp1 = true;
+HXLINE( 843)					_hx_tmp1 = true;
             				}
-HXDLIN( 841)				if (_hx_tmp1) {
-HXLINE( 841)					_hx_tmp = jid;
+HXDLIN( 843)				if (_hx_tmp1) {
+HXLINE( 843)					_hx_tmp = jid;
             				}
             				else {
-HXLINE( 841)					_hx_tmp = jid->withResource(resource);
+HXLINE( 843)					_hx_tmp = jid->withResource(resource);
             				}
-HXDLIN( 841)				jids->push(_hx_tmp);
+HXDLIN( 843)				jids->push(_hx_tmp);
             			}
             		}
-HXLINE( 843)		bool _hx_tmp2;
-HXDLIN( 843)		if ((jids->length < 1)) {
-HXLINE( 843)			_hx_tmp2 = jid->isDomain();
+HXLINE( 845)		bool _hx_tmp2;
+HXDLIN( 845)		if ((jids->length < 1)) {
+HXLINE( 845)			_hx_tmp2 = jid->isDomain();
             		}
             		else {
-HXLINE( 843)			_hx_tmp2 = false;
+HXLINE( 845)			_hx_tmp2 = false;
             		}
-HXDLIN( 843)		if (_hx_tmp2) {
-HXLINE( 844)			jids->push(jid);
+HXDLIN( 845)		if (_hx_tmp2) {
+HXLINE( 846)			jids->push(jid);
             		}
-HXLINE( 846)		return jids;
+HXLINE( 848)		return jids;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,commandJids,return )
 
  ::borogove::Participant Chat_obj::invitedBy(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_852_invitedBy)
-HXLINE( 853)		::Array< ::Dynamic> inviteEls = this->invites();
-HXLINE( 854)		if ((inviteEls->length < 1)) {
-HXLINE( 854)			return null();
-            		}
-HXLINE( 856)		 ::borogove::JID inviteFrom = ::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(inviteEls->__get(0).StaticCast<  ::borogove::Stanza >()->attr,HX_("from",6a,a5,c2,43))) ));
-HXLINE( 857)		::String bare = inviteFrom->asBare()->asString();
-HXLINE( 858)		 ::borogove::Chat maybeChannel = this->client->getChat(bare);
-HXLINE( 859)		if (::hx::IsNotNull( maybeChannel )) {
-HXLINE( 860)			 ::borogove::Channel channel = ( ( ::borogove::Channel)(::borogove::_Util::Util_Fields__obj::downcast(maybeChannel,::hx::ClassOf< ::borogove::Channel >())) );
-HXLINE( 861)			if (::hx::IsNotNull( channel )) {
-HXLINE( 862)				return channel->getParticipantDetails(inviteFrom->asString());
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_854_invitedBy)
+HXLINE( 855)		::Array< ::Dynamic> inviteEls = this->invites();
+HXLINE( 856)		if ((inviteEls->length < 1)) {
+HXLINE( 856)			return null();
+            		}
+HXLINE( 858)		 ::borogove::JID inviteFrom = ::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(inviteEls->__get(0).StaticCast<  ::borogove::Stanza >()->attr,HX_("from",6a,a5,c2,43))) ));
+HXLINE( 859)		::String bare = inviteFrom->asBare()->asString();
+HXLINE( 860)		 ::borogove::Chat maybeChannel = this->client->getChat(bare);
+HXLINE( 861)		if (::hx::IsNotNull( maybeChannel )) {
+HXLINE( 862)			 ::borogove::Channel channel = ( ( ::borogove::Channel)(::borogove::_Util::Util_Fields__obj::downcast(maybeChannel,::hx::ClassOf< ::borogove::Channel >())) );
+HXLINE( 863)			if (::hx::IsNotNull( channel )) {
+HXLINE( 864)				return channel->getParticipantDetails(inviteFrom->asString());
             			}
             		}
-HXLINE( 866)		 ::borogove::Chat _hx_tmp;
-HXDLIN( 866)		if (::hx::IsNotNull( maybeChannel )) {
-HXLINE( 866)			_hx_tmp = maybeChannel;
+HXLINE( 868)		 ::borogove::Chat _hx_tmp;
+HXDLIN( 868)		if (::hx::IsNotNull( maybeChannel )) {
+HXLINE( 868)			_hx_tmp = maybeChannel;
             		}
             		else {
-HXLINE( 866)			_hx_tmp = this->client->getDirectChat(bare,null());
+HXLINE( 868)			_hx_tmp = this->client->getDirectChat(bare,null());
             		}
-HXDLIN( 866)		return _hx_tmp->getParticipantDetails(bare);
+HXDLIN( 868)		return _hx_tmp->getParticipantDetails(bare);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,invitedBy,return )
 
 ::Array< ::Dynamic> Chat_obj::invites(){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_870_invites)
-HXDLIN( 870)		return this->extensions->allTags(HX_("invite",c9,f1,db,9f),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14));
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_872_invites)
+HXDLIN( 872)		return this->extensions->allTags(HX_("invite",c9,f1,db,9f),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14));
             	}
 
 
@@ -2170,52 +2181,52 @@ HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,invites,return )
 ::Dynamic Chat_obj::recomputeUnread(){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Chat,_gthis) HXARGC(1)
             		void _hx_run(::Array< ::Dynamic> messages){
-            			HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_874_recomputeUnread)
-HXLINE( 875)			int i = messages->length;
-HXLINE( 876)			while(true){
-HXLINE( 876)				i = (i - 1);
-HXDLIN( 876)				if (!((i >= 0))) {
-HXLINE( 876)					goto _hx_goto_121;
+            			HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_876_recomputeUnread)
+HXLINE( 877)			int i = messages->length;
+HXLINE( 878)			while(true){
+HXLINE( 878)				i = (i - 1);
+HXDLIN( 878)				if (!((i >= 0))) {
+HXLINE( 878)					goto _hx_goto_122;
             				}
-HXLINE( 877)				bool _hx_tmp;
-HXDLIN( 877)				if ((messages->__get(i).StaticCast<  ::borogove::ChatMessage >()->serverId != _gthis->readUpToId)) {
-HXLINE( 877)					_hx_tmp = !(messages->__get(i).StaticCast<  ::borogove::ChatMessage >()->isIncoming());
+HXLINE( 879)				bool _hx_tmp;
+HXDLIN( 879)				if ((messages->__get(i).StaticCast<  ::borogove::ChatMessage >()->serverId != _gthis->readUpToId)) {
+HXLINE( 879)					_hx_tmp = !(messages->__get(i).StaticCast<  ::borogove::ChatMessage >()->isIncoming());
             				}
             				else {
-HXLINE( 877)					_hx_tmp = true;
+HXLINE( 879)					_hx_tmp = true;
             				}
-HXDLIN( 877)				if (_hx_tmp) {
-HXLINE( 877)					goto _hx_goto_121;
+HXDLIN( 879)				if (_hx_tmp) {
+HXLINE( 879)					goto _hx_goto_122;
             				}
             			}
-            			_hx_goto_121:;
-HXLINE( 879)			_gthis->setUnreadCount((messages->length - (i + 1)));
+            			_hx_goto_122:;
+HXLINE( 881)			_gthis->setUnreadCount((messages->length - (i + 1)));
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_873_recomputeUnread)
-HXDLIN( 873)		 ::borogove::Chat _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 874)		::Dynamic _hx_tmp = this->persistence;
-HXDLIN( 874)		::String _hx_tmp1 = this->client->accountId();
-HXDLIN( 874)		return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getMessagesBefore(_hx_tmp,_hx_tmp1,this->chatId,null(),null()), ::Dynamic(new _hx_Closure_0(_gthis)),null());
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_875_recomputeUnread)
+HXDLIN( 875)		 ::borogove::Chat _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 876)		::Dynamic _hx_tmp = this->persistence;
+HXDLIN( 876)		::String _hx_tmp1 = this->client->accountId();
+HXDLIN( 876)		return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getMessagesBefore(_hx_tmp,_hx_tmp1,this->chatId,null(),null()), ::Dynamic(new _hx_Closure_0(_gthis)),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Chat_obj,recomputeUnread,return )
 
 ::Dynamic Chat_obj::markReadUpToId(::String upTo,::String upToBy){
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_884_markReadUpToId)
-HXLINE( 885)		if (::hx::IsNull( upTo )) {
-HXLINE( 885)			return ::thenshim::_Promise::Promise_Impl__obj::reject(null());
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_886_markReadUpToId)
+HXLINE( 887)		if (::hx::IsNull( upTo )) {
+HXLINE( 887)			return ::thenshim::_Promise::Promise_Impl__obj::reject(null());
             		}
-HXLINE( 886)		if ((this->readUpTo() == upTo)) {
-HXLINE( 886)			return ::thenshim::_Promise::Promise_Impl__obj::reject(null());
+HXLINE( 888)		if ((this->readUpTo() == upTo)) {
+HXLINE( 888)			return ::thenshim::_Promise::Promise_Impl__obj::reject(null());
             		}
-HXLINE( 888)		this->readUpToId = upTo;
-HXLINE( 889)		this->readUpToBy = upToBy;
-HXLINE( 890)		::Dynamic _hx_tmp = this->persistence;
-HXDLIN( 890)		::borogove::Persistence_obj::storeChats(_hx_tmp,this->client->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
-HXLINE( 891)		return this->recomputeUnread();
+HXLINE( 890)		this->readUpToId = upTo;
+HXLINE( 891)		this->readUpToBy = upToBy;
+HXLINE( 892)		::Dynamic _hx_tmp = this->persistence;
+HXDLIN( 892)		::borogove::Persistence_obj::storeChats(_hx_tmp,this->client->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
+HXLINE( 893)		return this->recomputeUnread();
             	}
 
 
@@ -2224,65 +2235,65 @@ HX_DEFINE_DYNAMIC_FUNC2(Chat_obj,markReadUpToId,return )
 ::Dynamic Chat_obj::markReadUpToMessage( ::borogove::ChatMessage message){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::Chat,_gthis, ::borogove::ChatMessage,message) HXARGC(1)
             		::Dynamic _hx_run( ::borogove::ChatMessage readMessage){
-            			HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_902_markReadUpToMessage)
-HXLINE( 903)			bool _hx_tmp;
-HXDLIN( 903)			if (::hx::IsNotNull( readMessage )) {
-HXLINE( 903)				_hx_tmp = (::Reflect_obj::compare(message->timestamp,readMessage->timestamp) <= 0);
+            			HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_904_markReadUpToMessage)
+HXLINE( 905)			bool _hx_tmp;
+HXDLIN( 905)			if (::hx::IsNotNull( readMessage )) {
+HXLINE( 905)				_hx_tmp = (::Reflect_obj::compare(message->timestamp,readMessage->timestamp) <= 0);
             			}
             			else {
-HXLINE( 903)				_hx_tmp = false;
+HXLINE( 905)				_hx_tmp = false;
             			}
-HXDLIN( 903)			if (_hx_tmp) {
-HXLINE( 904)				return ::thenshim::_Promise::Promise_Impl__obj::reject(null());
+HXDLIN( 905)			if (_hx_tmp) {
+HXLINE( 906)				return ::thenshim::_Promise::Promise_Impl__obj::reject(null());
             			}
-HXLINE( 907)			return _gthis->markReadUpToId(message->serverId,message->serverIdBy);
+HXLINE( 909)			return _gthis->markReadUpToId(message->serverId,message->serverIdBy);
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_894_markReadUpToMessage)
-HXDLIN( 894)		 ::borogove::Chat _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 895)		bool _hx_tmp;
-HXDLIN( 895)		if (::hx::IsNotNull( message->serverId )) {
-HXLINE( 895)			::String _hx_tmp1 = message->chatId();
-HXDLIN( 895)			_hx_tmp = (_hx_tmp1 != this->chatId);
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_896_markReadUpToMessage)
+HXDLIN( 896)		 ::borogove::Chat _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 897)		bool _hx_tmp;
+HXDLIN( 897)		if (::hx::IsNotNull( message->serverId )) {
+HXLINE( 897)			::String _hx_tmp1 = message->chatId();
+HXDLIN( 897)			_hx_tmp = (_hx_tmp1 != this->chatId);
             		}
             		else {
-HXLINE( 895)			_hx_tmp = true;
+HXLINE( 897)			_hx_tmp = true;
             		}
-HXDLIN( 895)		if (_hx_tmp) {
-HXLINE( 895)			return ::thenshim::_Promise::Promise_Impl__obj::reject(null());
+HXDLIN( 897)		if (_hx_tmp) {
+HXLINE( 897)			return ::thenshim::_Promise::Promise_Impl__obj::reject(null());
             		}
-HXLINE( 896)		::String _hx_tmp2 = this->readUpTo();
-HXDLIN( 896)		if ((_hx_tmp2 == message->serverId)) {
-HXLINE( 896)			return ::thenshim::_Promise::Promise_Impl__obj::reject(null());
+HXLINE( 898)		::String _hx_tmp2 = this->readUpTo();
+HXDLIN( 898)		if ((_hx_tmp2 == message->serverId)) {
+HXLINE( 898)			return ::thenshim::_Promise::Promise_Impl__obj::reject(null());
             		}
-HXLINE( 898)		if (::hx::IsNull( this->readUpTo() )) {
-HXLINE( 899)			return this->markReadUpToId(message->serverId,message->serverIdBy);
+HXLINE( 900)		if (::hx::IsNull( this->readUpTo() )) {
+HXLINE( 901)			return this->markReadUpToId(message->serverId,message->serverIdBy);
             		}
-HXLINE( 902)		::Dynamic _hx_tmp3 = this->persistence;
-HXDLIN( 902)		::String _hx_tmp4 = this->client->accountId();
-HXDLIN( 902)		::String _hx_tmp5 = this->chatId;
-HXDLIN( 902)		return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getMessage(_hx_tmp3,_hx_tmp4,_hx_tmp5,this->readUpTo(),null()), ::Dynamic(new _hx_Closure_0(_gthis,message)),null());
+HXLINE( 904)		::Dynamic _hx_tmp3 = this->persistence;
+HXDLIN( 904)		::String _hx_tmp4 = this->client->accountId();
+HXDLIN( 904)		::String _hx_tmp5 = this->chatId;
+HXDLIN( 904)		return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getMessage(_hx_tmp3,_hx_tmp4,_hx_tmp5,this->readUpTo(),null()), ::Dynamic(new _hx_Closure_0(_gthis,message)),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Chat_obj,markReadUpToMessage,return )
 
 void Chat_obj::publishMds(){
-            	HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_912_publishMds)
-HXDLIN( 912)		 ::borogove::Client _hx_tmp = this->client;
-HXLINE( 913)		 ::borogove::Stanza _hx_tmp1 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_GC_STACKFRAME(&_hx_pos_9cc1265c56ba593e_914_publishMds)
+HXDLIN( 914)		 ::borogove::Client _hx_tmp = this->client;
+HXLINE( 915)		 ::borogove::Stanza _hx_tmp1 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))))->tag(HX_("pubsub",e3,da,f8,66), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/pubsub",57,94,3c,f2))))->tag(HX_("publish",8f,21,1d,ae), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("node",02,0a,0a,49),HX_("urn:xmpp:mds:displayed:0",bd,60,cc,fb))))->tag(HX_("item",13,c5,bf,45), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("id",db,5b,00,00),this->chatId)))->tag(HX_("displayed",21,17,db,c1), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:mds:displayed:0",bd,60,cc,fb))));
-HXLINE( 918)		::String _hx_tmp2 = this->readUpTo();
-HXLINE( 913)		 ::borogove::Stanza _hx_tmp3 = _hx_tmp1->tag(HX_("stanza-id",73,8a,54,e9), ::Dynamic(::hx::Anon_obj::Create(3)
+HXLINE( 920)		::String _hx_tmp2 = this->readUpTo();
+HXLINE( 915)		 ::borogove::Stanza _hx_tmp3 = _hx_tmp1->tag(HX_("stanza-id",73,8a,54,e9), ::Dynamic(::hx::Anon_obj::Create(3)
             			->setFixed(0,HX_("by",d7,55,00,00),this->readUpToBy)
             			->setFixed(1,HX_("id",db,5b,00,00),_hx_tmp2)
             			->setFixed(2,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:sid:0",a8,4b,37,54))))->up()->up()->up();
-HXLINE( 912)		_hx_tmp->publishWithOptions(_hx_tmp3, ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 914)		_hx_tmp->publishWithOptions(_hx_tmp3, ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("type",ba,f2,08,4d),HX_("submit",18,58,06,9a))
             			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("jabber:x:data",c2,e1,e9,7c))))->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("var",e7,de,59,00),HX_("FORM_TYPE",d5,96,c9,5a))
@@ -2776,8 +2787,8 @@ void Chat_obj::__register()
 void Chat_obj::__boot()
 {
 {
-            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_60_boot)
-HXDLIN(  60)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_STACKFRAME(&_hx_pos_9cc1265c56ba593e_62_boot)
+HXDLIN(  62)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(34)
             				->setFixed(0,HX_("getParticipants__fromC",23,94,42,88), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
diff --git a/Sources/c_borogove/src/borogove/ChatAttachment.cpp b/Sources/c_borogove/src/borogove/ChatAttachment.cpp
index baa7ca6..e789bc7 100644
--- a/Sources/c_borogove/src/borogove/ChatAttachment.cpp
+++ b/Sources/c_borogove/src/borogove/ChatAttachment.cpp
@@ -18,11 +18,11 @@
 #endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_eade94af8cfe154e_60_new,"borogove.ChatAttachment","new",0x0991249a,"borogove.ChatAttachment.new","borogove/ChatMessage.hx",60,0xe4a3cadd)
-HX_LOCAL_STACK_FRAME(_hx_pos_824d5e0f7ace9ae5_423_name__fromC,"borogove.ChatAttachment","name__fromC",0x1dc9cbc8,"borogove.ChatAttachment.name__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_824d5e0f7ace9ae5_423_mime__fromC,"borogove.ChatAttachment","mime__fromC",0x9f3f1f7f,"borogove.ChatAttachment.mime__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_824d5e0f7ace9ae5_423_size__fromC,"borogove.ChatAttachment","size__fromC",0x5ab7f812,"borogove.ChatAttachment.size__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_824d5e0f7ace9ae5_397_uris__fromC,"borogove.ChatAttachment","uris__fromC",0x3dcd4a0c,"borogove.ChatAttachment.uris__fromC","HaxeCBridge.hx",397,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_824d5e0f7ace9ae5_397_hashes__fromC,"borogove.ChatAttachment","hashes__fromC",0xa2cd28f7,"borogove.ChatAttachment.hashes__fromC","HaxeCBridge.hx",397,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_824d5e0f7ace9ae5_450_name__fromC,"borogove.ChatAttachment","name__fromC",0x1dc9cbc8,"borogove.ChatAttachment.name__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_824d5e0f7ace9ae5_450_mime__fromC,"borogove.ChatAttachment","mime__fromC",0x9f3f1f7f,"borogove.ChatAttachment.mime__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_824d5e0f7ace9ae5_450_size__fromC,"borogove.ChatAttachment","size__fromC",0x5ab7f812,"borogove.ChatAttachment.size__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_824d5e0f7ace9ae5_424_uris__fromC,"borogove.ChatAttachment","uris__fromC",0x3dcd4a0c,"borogove.ChatAttachment.uris__fromC","HaxeCBridge.hx",424,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_824d5e0f7ace9ae5_424_hashes__fromC,"borogove.ChatAttachment","hashes__fromC",0xa2cd28f7,"borogove.ChatAttachment.hashes__fromC","HaxeCBridge.hx",424,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_eade94af8cfe154e_78_create,"borogove.ChatAttachment","create",0xc334f302,"borogove.ChatAttachment.create","borogove/ChatMessage.hx",78,0xe4a3cadd)
 HX_LOCAL_STACK_FRAME(_hx_pos_eade94af8cfe154e_32_boot,"borogove.ChatAttachment","boot",0x4d87e2b8,"borogove.ChatAttachment.boot","borogove/ChatMessage.hx",32,0xe4a3cadd)
 namespace borogove{
@@ -52,130 +52,130 @@ bool ChatAttachment_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 ::String ChatAttachment_obj::name__fromC(){
-            	HX_STACKFRAME(&_hx_pos_824d5e0f7ace9ae5_423_name__fromC)
-HXDLIN( 423)		return this->name;
+            	HX_STACKFRAME(&_hx_pos_824d5e0f7ace9ae5_450_name__fromC)
+HXDLIN( 450)		return this->name;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatAttachment_obj,name__fromC,return )
 
 ::String ChatAttachment_obj::mime__fromC(){
-            	HX_STACKFRAME(&_hx_pos_824d5e0f7ace9ae5_423_mime__fromC)
-HXDLIN( 423)		return this->mime;
+            	HX_STACKFRAME(&_hx_pos_824d5e0f7ace9ae5_450_mime__fromC)
+HXDLIN( 450)		return this->mime;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatAttachment_obj,mime__fromC,return )
 
  ::Dynamic ChatAttachment_obj::size__fromC(){
-            	HX_STACKFRAME(&_hx_pos_824d5e0f7ace9ae5_423_size__fromC)
-HXDLIN( 423)		return this->size;
+            	HX_STACKFRAME(&_hx_pos_824d5e0f7ace9ae5_450_size__fromC)
+HXDLIN( 450)		return this->size;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatAttachment_obj,size__fromC,return )
 
 size_t ChatAttachment_obj::uris__fromC(const char*** outPtr){
-            	HX_STACKFRAME(&_hx_pos_824d5e0f7ace9ae5_397_uris__fromC)
-HXDLIN( 397)		::Array< ::String > x = this->uris;
-HXDLIN( 397)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 397)			::cpp::Pointer< const char** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 397)			::Array< ::String > x1 = x;
-HXDLIN( 397)			::Array< size_t > arr = ::Array_obj< size_t >::__new(x1->length);
-HXDLIN( 397)			{
-HXDLIN( 397)				int _g_current = 0;
-HXDLIN( 397)				::Array< ::String > _g_array = x1;
-HXDLIN( 397)				while((_g_current < _g_array->length)){
-HXDLIN( 397)					::String _g_value = _g_array->__get(_g_current);
-HXDLIN( 397)					_g_current = (_g_current + 1);
-HXDLIN( 397)					::String el = _g_value;
-HXDLIN( 397)					{
-HXDLIN( 397)						const char* cStrPtr = el.utf8_str();
-HXDLIN( 397)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
-HXDLIN( 397)						{
-HXDLIN( 397)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 397)							if (::hx::IsNull( store )) {
-HXLINE(2192)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_824d5e0f7ace9ae5_424_uris__fromC)
+HXDLIN( 424)		::Array< ::String > x = this->uris;
+HXDLIN( 424)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 424)			::cpp::Pointer< const char** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 424)			::Array< ::String > x1 = x;
+HXDLIN( 424)			::Array< size_t > arr = ::Array_obj< size_t >::__new(x1->length);
+HXDLIN( 424)			{
+HXDLIN( 424)				int _g_current = 0;
+HXDLIN( 424)				::Array< ::String > _g_array = x1;
+HXDLIN( 424)				while((_g_current < _g_array->length)){
+HXDLIN( 424)					::String _g_value = _g_array->__get(_g_current);
+HXDLIN( 424)					_g_current = (_g_current + 1);
+HXDLIN( 424)					::String el = _g_value;
+HXDLIN( 424)					{
+HXDLIN( 424)						const char* cStrPtr = el.utf8_str();
+HXDLIN( 424)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
+HXDLIN( 424)						{
+HXDLIN( 424)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 424)							if (::hx::IsNull( store )) {
+HXLINE(2243)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
             									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             									->setFixed(1,HX_("value",71,7f,b8,31),el));
-HXLINE( 397)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXLINE( 424)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             							}
             							else {
-HXDLIN( 397)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 424)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             							}
             						}
-HXDLIN( 397)						const char* ptr = cStrPtr;
-HXDLIN( 397)						arr[(_g_current - 1)] = reinterpret_cast<size_t>(ptr);
+HXDLIN( 424)						const char* ptr = cStrPtr;
+HXDLIN( 424)						arr[(_g_current - 1)] = reinterpret_cast<size_t>(ptr);
             					}
             				}
             			}
-HXDLIN( 397)			void** ptr1 = (void**)arr->getBase();
-HXDLIN( 397)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 397)			{
-HXDLIN( 397)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 397)				if (::hx::IsNull( store1 )) {
-HXLINE(2192)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 424)			void** ptr1 = (void**)arr->getBase();
+HXDLIN( 424)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 424)			{
+HXDLIN( 424)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 424)				if (::hx::IsNull( store1 )) {
+HXLINE(2243)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),arr));
-HXLINE( 397)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+HXLINE( 424)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
             				}
             				else {
-HXDLIN( 397)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 424)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXDLIN( 397)			_hx_tmp->set_ref(( (const char**)(ptr1) ));
+HXDLIN( 424)			_hx_tmp->set_ref(( (const char**)(ptr1) ));
             		}
-HXDLIN( 397)		return ( (size_t)(x->length) );
+HXDLIN( 424)		return ( (size_t)(x->length) );
             	}
 
 
 size_t ChatAttachment_obj::hashes__fromC(void*** outPtr){
-            	HX_STACKFRAME(&_hx_pos_824d5e0f7ace9ae5_397_hashes__fromC)
-HXDLIN( 397)		::Array< ::Dynamic> x = this->hashes;
-HXDLIN( 397)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 397)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 397)			::Array< ::Dynamic> x1 = x;
-HXDLIN( 397)			{
-HXDLIN( 397)				int _g = 0;
-HXDLIN( 397)				while((_g < x1->length)){
-HXDLIN( 397)					 ::borogove::Hash el = x1->__get(_g).StaticCast<  ::borogove::Hash >();
-HXDLIN( 397)					_g = (_g + 1);
-HXDLIN( 397)					{
-HXDLIN( 397)						 ::Dynamic haxeObject = el;
-HXDLIN( 397)						void* ptr = haxeObject.mPtr;
-HXDLIN( 397)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 397)						{
-HXDLIN( 397)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 397)							if (::hx::IsNull( store )) {
-HXDLIN( 397)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_824d5e0f7ace9ae5_424_hashes__fromC)
+HXDLIN( 424)		::Array< ::Dynamic> x = this->hashes;
+HXDLIN( 424)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 424)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 424)			::Array< ::Dynamic> x1 = x;
+HXDLIN( 424)			{
+HXDLIN( 424)				int _g = 0;
+HXDLIN( 424)				while((_g < x1->length)){
+HXDLIN( 424)					 ::borogove::Hash el = x1->__get(_g).StaticCast<  ::borogove::Hash >();
+HXDLIN( 424)					_g = (_g + 1);
+HXDLIN( 424)					{
+HXDLIN( 424)						 ::Dynamic haxeObject = el;
+HXDLIN( 424)						void* ptr = haxeObject.mPtr;
+HXDLIN( 424)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 424)						{
+HXDLIN( 424)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 424)							if (::hx::IsNull( store )) {
+HXDLIN( 424)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
             									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             									->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 397)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN( 424)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             							}
             							else {
-HXDLIN( 397)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 424)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             							}
             						}
             					}
             				}
             			}
-HXDLIN( 397)			void** ptr1 = (void**)x1->getBase();
-HXDLIN( 397)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 397)			{
-HXDLIN( 397)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 397)				if (::hx::IsNull( store1 )) {
-HXDLIN( 397)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 424)			void** ptr1 = (void**)x1->getBase();
+HXDLIN( 424)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 424)			{
+HXDLIN( 424)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 424)				if (::hx::IsNull( store1 )) {
+HXDLIN( 424)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),x1));
-HXDLIN( 397)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+HXDLIN( 424)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
             				}
             				else {
-HXDLIN( 397)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 424)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXDLIN( 397)			_hx_tmp->set_ref(ptr1);
+HXDLIN( 424)			_hx_tmp->set_ref(ptr1);
             		}
-HXDLIN( 397)		return ( (size_t)(x->length) );
+HXDLIN( 424)		return ( (size_t)(x->length) );
             	}
 
 
diff --git a/Sources/c_borogove/src/borogove/ChatMessage.cpp b/Sources/c_borogove/src/borogove/ChatMessage.cpp
index 435524a..9f2c567 100644
--- a/Sources/c_borogove/src/borogove/ChatMessage.cpp
+++ b/Sources/c_borogove/src/borogove/ChatMessage.cpp
@@ -102,26 +102,26 @@
 #endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_20f00185d7354fd9_245_new,"borogove.ChatMessage","new",0x63820ad4,"borogove.ChatMessage.new","borogove/ChatMessage.hx",245,0xe4a3cadd)
-HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_423_localId__fromC,"borogove.ChatMessage","localId__fromC",0x08ebd91f,"borogove.ChatMessage.localId__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_423_serverId__fromC,"borogove.ChatMessage","serverId__fromC",0x2996d32f,"borogove.ChatMessage.serverId__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_423_serverIdBy__fromC,"borogove.ChatMessage","serverIdBy__fromC",0xde126f98,"borogove.ChatMessage.serverIdBy__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_423_type__fromC,"borogove.ChatMessage","type__fromC",0x1bc87773,"borogove.ChatMessage.type__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_423_timestamp__fromC,"borogove.ChatMessage","timestamp__fromC",0x0b0acf6f,"borogove.ChatMessage.timestamp__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_423_senderId__fromC,"borogove.ChatMessage","senderId__fromC",0x731f27fd,"borogove.ChatMessage.senderId__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_371_replyToMessage__fromC,"borogove.ChatMessage","replyToMessage__fromC",0x9a6a4d2b,"borogove.ChatMessage.replyToMessage__fromC","HaxeCBridge.hx",371,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_423_threadId__fromC,"borogove.ChatMessage","threadId__fromC",0x2157ea48,"borogove.ChatMessage.threadId__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_397_attachments__fromC,"borogove.ChatMessage","attachments__fromC",0x5cad7f55,"borogove.ChatMessage.attachments__fromC","HaxeCBridge.hx",397,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_360_reactionKeys__fromC,"borogove.ChatMessage","reactionKeys__fromC",0x298e4650,"borogove.ChatMessage.reactionKeys__fromC","HaxeCBridge.hx",360,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_450_localId__fromC,"borogove.ChatMessage","localId__fromC",0x08ebd91f,"borogove.ChatMessage.localId__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_450_serverId__fromC,"borogove.ChatMessage","serverId__fromC",0x2996d32f,"borogove.ChatMessage.serverId__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_450_serverIdBy__fromC,"borogove.ChatMessage","serverIdBy__fromC",0xde126f98,"borogove.ChatMessage.serverIdBy__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_450_type__fromC,"borogove.ChatMessage","type__fromC",0x1bc87773,"borogove.ChatMessage.type__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_450_timestamp__fromC,"borogove.ChatMessage","timestamp__fromC",0x0b0acf6f,"borogove.ChatMessage.timestamp__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_450_senderId__fromC,"borogove.ChatMessage","senderId__fromC",0x731f27fd,"borogove.ChatMessage.senderId__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_398_replyToMessage__fromC,"borogove.ChatMessage","replyToMessage__fromC",0x9a6a4d2b,"borogove.ChatMessage.replyToMessage__fromC","HaxeCBridge.hx",398,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_450_threadId__fromC,"borogove.ChatMessage","threadId__fromC",0x2157ea48,"borogove.ChatMessage.threadId__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_424_attachments__fromC,"borogove.ChatMessage","attachments__fromC",0x5cad7f55,"borogove.ChatMessage.attachments__fromC","HaxeCBridge.hx",424,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_385_reactionKeys__fromC,"borogove.ChatMessage","reactionKeys__fromC",0x298e4650,"borogove.ChatMessage.reactionKeys__fromC","HaxeCBridge.hx",385,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_164_get_reactionKeys,"borogove.ChatMessage","get_reactionKeys",0xa96ab7d2,"borogove.ChatMessage.get_reactionKeys","borogove/ChatMessage.hx",164,0xe4a3cadd)
 HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_171_reactionDetails,"borogove.ChatMessage","reactionDetails",0x6f916c8d,"borogove.ChatMessage.reactionDetails","borogove/ChatMessage.hx",171,0xe4a3cadd)
-HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_311_reactionDetails__fromC,"borogove.ChatMessage","reactionDetails__fromC",0x4e695f8c,"borogove.ChatMessage.reactionDetails__fromC","HaxeCBridge.hx",311,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_423_text__fromC,"borogove.ChatMessage","text__fromC",0x077711e0,"borogove.ChatMessage.text__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_423_lang__fromC,"borogove.ChatMessage","lang__fromC",0xda5bf2bf,"borogove.ChatMessage.lang__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_423_direction__fromC,"borogove.ChatMessage","direction__fromC",0x7f45b126,"borogove.ChatMessage.direction__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_423_status__fromC,"borogove.ChatMessage","status__fromC",0xd2e906fb,"borogove.ChatMessage.status__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_423_statusText__fromC,"borogove.ChatMessage","statusText__fromC",0x6864dace,"borogove.ChatMessage.statusText__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_397_versions__fromC,"borogove.ChatMessage","versions__fromC",0xbcbe8bf2,"borogove.ChatMessage.versions__fromC","HaxeCBridge.hx",397,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_423_encryption__fromC,"borogove.ChatMessage","encryption__fromC",0xe59a97ca,"borogove.ChatMessage.encryption__fromC","HaxeCBridge.hx",423,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_335_reactionDetails__fromC,"borogove.ChatMessage","reactionDetails__fromC",0x4e695f8c,"borogove.ChatMessage.reactionDetails__fromC","HaxeCBridge.hx",335,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_450_text__fromC,"borogove.ChatMessage","text__fromC",0x077711e0,"borogove.ChatMessage.text__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_450_lang__fromC,"borogove.ChatMessage","lang__fromC",0xda5bf2bf,"borogove.ChatMessage.lang__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_450_direction__fromC,"borogove.ChatMessage","direction__fromC",0x7f45b126,"borogove.ChatMessage.direction__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_450_status__fromC,"borogove.ChatMessage","status__fromC",0xd2e906fb,"borogove.ChatMessage.status__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_450_statusText__fromC,"borogove.ChatMessage","statusText__fromC",0x6864dace,"borogove.ChatMessage.statusText__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_424_versions__fromC,"borogove.ChatMessage","versions__fromC",0xbcbe8bf2,"borogove.ChatMessage.versions__fromC","HaxeCBridge.hx",424,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_9b90dadd5b659bbe_450_encryption__fromC,"borogove.ChatMessage","encryption__fromC",0xe59a97ca,"borogove.ChatMessage.encryption__fromC","HaxeCBridge.hx",450,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_286_reply,"borogove.ChatMessage","reply",0x1dcec89e,"borogove.ChatMessage.reply","borogove/ChatMessage.hx",286,0xe4a3cadd)
 HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_295_getReplyId,"borogove.ChatMessage","getReplyId",0xd1e4a9bb,"borogove.ChatMessage.getReplyId","borogove/ChatMessage.hx",295,0xe4a3cadd)
 HX_LOCAL_STACK_FRAME(_hx_pos_20f00185d7354fd9_301_set_replyToMessage,"borogove.ChatMessage","set_replyToMessage",0xaa5f8a4b,"borogove.ChatMessage.set_replyToMessage","borogove/ChatMessage.hx",301,0xe4a3cadd)
@@ -276,169 +276,169 @@ bool ChatMessage_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 ::String ChatMessage_obj::localId__fromC(){
-            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_423_localId__fromC)
-HXDLIN( 423)		return this->localId;
+            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_450_localId__fromC)
+HXDLIN( 450)		return this->localId;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,localId__fromC,return )
 
 ::String ChatMessage_obj::serverId__fromC(){
-            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_423_serverId__fromC)
-HXDLIN( 423)		return this->serverId;
+            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_450_serverId__fromC)
+HXDLIN( 450)		return this->serverId;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,serverId__fromC,return )
 
 ::String ChatMessage_obj::serverIdBy__fromC(){
-            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_423_serverIdBy__fromC)
-HXDLIN( 423)		return this->serverIdBy;
+            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_450_serverIdBy__fromC)
+HXDLIN( 450)		return this->serverIdBy;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,serverIdBy__fromC,return )
 
 int ChatMessage_obj::type__fromC(){
-            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_423_type__fromC)
-HXDLIN( 423)		return this->type;
+            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_450_type__fromC)
+HXDLIN( 450)		return this->type;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,type__fromC,return )
 
 ::String ChatMessage_obj::timestamp__fromC(){
-            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_423_timestamp__fromC)
-HXDLIN( 423)		return this->timestamp;
+            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_450_timestamp__fromC)
+HXDLIN( 450)		return this->timestamp;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,timestamp__fromC,return )
 
 ::String ChatMessage_obj::senderId__fromC(){
-            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_423_senderId__fromC)
-HXDLIN( 423)		return this->senderId;
+            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_450_senderId__fromC)
+HXDLIN( 450)		return this->senderId;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,senderId__fromC,return )
 
  ::borogove::ChatMessage ChatMessage_obj::replyToMessage__fromC(){
-            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_371_replyToMessage__fromC)
-HXDLIN( 371)		return this->replyToMessage;
+            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_398_replyToMessage__fromC)
+HXDLIN( 398)		return this->replyToMessage;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,replyToMessage__fromC,return )
 
 ::String ChatMessage_obj::threadId__fromC(){
-            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_423_threadId__fromC)
-HXDLIN( 423)		return this->threadId;
+            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_450_threadId__fromC)
+HXDLIN( 450)		return this->threadId;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,threadId__fromC,return )
 
 size_t ChatMessage_obj::attachments__fromC(void*** outPtr){
-            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_397_attachments__fromC)
-HXDLIN( 397)		::Array< ::Dynamic> x = this->attachments;
-HXDLIN( 397)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 397)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 397)			::Array< ::Dynamic> x1 = x;
-HXDLIN( 397)			{
-HXDLIN( 397)				int _g = 0;
-HXDLIN( 397)				while((_g < x1->length)){
-HXDLIN( 397)					 ::borogove::ChatAttachment el = x1->__get(_g).StaticCast<  ::borogove::ChatAttachment >();
-HXDLIN( 397)					_g = (_g + 1);
-HXDLIN( 397)					{
-HXDLIN( 397)						 ::Dynamic haxeObject = el;
-HXDLIN( 397)						void* ptr = haxeObject.mPtr;
-HXDLIN( 397)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 397)						{
-HXDLIN( 397)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 397)							if (::hx::IsNull( store )) {
-HXDLIN( 397)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_424_attachments__fromC)
+HXDLIN( 424)		::Array< ::Dynamic> x = this->attachments;
+HXDLIN( 424)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 424)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 424)			::Array< ::Dynamic> x1 = x;
+HXDLIN( 424)			{
+HXDLIN( 424)				int _g = 0;
+HXDLIN( 424)				while((_g < x1->length)){
+HXDLIN( 424)					 ::borogove::ChatAttachment el = x1->__get(_g).StaticCast<  ::borogove::ChatAttachment >();
+HXDLIN( 424)					_g = (_g + 1);
+HXDLIN( 424)					{
+HXDLIN( 424)						 ::Dynamic haxeObject = el;
+HXDLIN( 424)						void* ptr = haxeObject.mPtr;
+HXDLIN( 424)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 424)						{
+HXDLIN( 424)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 424)							if (::hx::IsNull( store )) {
+HXDLIN( 424)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
             									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             									->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 397)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN( 424)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             							}
             							else {
-HXDLIN( 397)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 424)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             							}
             						}
             					}
             				}
             			}
-HXDLIN( 397)			void** ptr1 = (void**)x1->getBase();
-HXDLIN( 397)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 397)			{
-HXDLIN( 397)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 397)				if (::hx::IsNull( store1 )) {
-HXDLIN( 397)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 424)			void** ptr1 = (void**)x1->getBase();
+HXDLIN( 424)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 424)			{
+HXDLIN( 424)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 424)				if (::hx::IsNull( store1 )) {
+HXDLIN( 424)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),x1));
-HXDLIN( 397)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+HXDLIN( 424)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
             				}
             				else {
-HXDLIN( 397)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 424)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXDLIN( 397)			_hx_tmp->set_ref(ptr1);
+HXDLIN( 424)			_hx_tmp->set_ref(ptr1);
             		}
-HXDLIN( 397)		return ( (size_t)(x->length) );
+HXDLIN( 424)		return ( (size_t)(x->length) );
             	}
 
 
 size_t ChatMessage_obj::reactionKeys__fromC(const char*** outPtr){
-            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_360_reactionKeys__fromC)
-HXDLIN( 360)		::Array< ::String > x = this->get_reactionKeys();
-HXDLIN( 360)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 360)			::cpp::Pointer< const char** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 360)			::Array< size_t > arr = ::Array_obj< size_t >::__new(x->length);
-HXDLIN( 360)			{
-HXDLIN( 360)				int _g_current = 0;
-HXDLIN( 360)				::Array< ::String > _g_array = x;
-HXDLIN( 360)				while((_g_current < _g_array->length)){
-HXDLIN( 360)					::String _g_value = _g_array->__get(_g_current);
-HXDLIN( 360)					_g_current = (_g_current + 1);
-HXDLIN( 360)					::String el = _g_value;
-HXDLIN( 360)					{
-HXDLIN( 360)						const char* cStrPtr = el.utf8_str();
-HXDLIN( 360)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
-HXDLIN( 360)						{
-HXDLIN( 360)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 360)							if (::hx::IsNull( store )) {
-HXLINE(2192)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_385_reactionKeys__fromC)
+HXDLIN( 385)		::Array< ::String > x = this->get_reactionKeys();
+HXDLIN( 385)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 385)			::cpp::Pointer< const char** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 385)			::Array< size_t > arr = ::Array_obj< size_t >::__new(x->length);
+HXDLIN( 385)			{
+HXDLIN( 385)				int _g_current = 0;
+HXDLIN( 385)				::Array< ::String > _g_array = x;
+HXDLIN( 385)				while((_g_current < _g_array->length)){
+HXDLIN( 385)					::String _g_value = _g_array->__get(_g_current);
+HXDLIN( 385)					_g_current = (_g_current + 1);
+HXDLIN( 385)					::String el = _g_value;
+HXDLIN( 385)					{
+HXDLIN( 385)						const char* cStrPtr = el.utf8_str();
+HXDLIN( 385)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
+HXDLIN( 385)						{
+HXDLIN( 385)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 385)							if (::hx::IsNull( store )) {
+HXLINE(2243)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
             									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             									->setFixed(1,HX_("value",71,7f,b8,31),el));
-HXLINE( 360)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXLINE( 385)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             							}
             							else {
-HXDLIN( 360)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 385)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             							}
             						}
-HXDLIN( 360)						const char* ptr = cStrPtr;
-HXDLIN( 360)						arr[(_g_current - 1)] = reinterpret_cast<size_t>(ptr);
+HXDLIN( 385)						const char* ptr = cStrPtr;
+HXDLIN( 385)						arr[(_g_current - 1)] = reinterpret_cast<size_t>(ptr);
             					}
             				}
             			}
-HXDLIN( 360)			void** ptr1 = (void**)arr->getBase();
-HXDLIN( 360)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 360)			{
-HXDLIN( 360)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 360)				if (::hx::IsNull( store1 )) {
-HXLINE(2192)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 385)			void** ptr1 = (void**)arr->getBase();
+HXDLIN( 385)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 385)			{
+HXDLIN( 385)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 385)				if (::hx::IsNull( store1 )) {
+HXLINE(2243)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),arr));
-HXLINE( 360)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+HXLINE( 385)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
             				}
             				else {
-HXDLIN( 360)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 385)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXDLIN( 360)			_hx_tmp->set_ref(( (const char**)(ptr1) ));
+HXDLIN( 385)			_hx_tmp->set_ref(( (const char**)(ptr1) ));
             		}
-HXDLIN( 360)		return ( (size_t)(x->length) );
+HXDLIN( 385)		return ( (size_t)(x->length) );
             	}
 
 
@@ -475,147 +475,147 @@ HXDLIN( 171)		return null();
 HX_DEFINE_DYNAMIC_FUNC1(ChatMessage_obj,reactionDetails,return )
 
 size_t ChatMessage_obj::reactionDetails__fromC(::String reactionKey,void*** outPtr){
-            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_311_reactionDetails__fromC)
-HXDLIN( 311)		::Array< ::Dynamic> out = this->reactionDetails(reactionKey);
-HXDLIN( 311)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 311)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 311)			{
-HXDLIN( 311)				int _g = 0;
-HXDLIN( 311)				while((_g < out->length)){
-HXDLIN( 311)					 ::borogove::Reaction el = out->__get(_g).StaticCast<  ::borogove::Reaction >();
-HXDLIN( 311)					_g = (_g + 1);
-HXDLIN( 311)					{
-HXDLIN( 311)						 ::Dynamic haxeObject = el;
-HXDLIN( 311)						void* ptr = haxeObject.mPtr;
-HXDLIN( 311)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 311)						{
-HXDLIN( 311)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 311)							if (::hx::IsNull( store )) {
-HXDLIN( 311)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_335_reactionDetails__fromC)
+HXDLIN( 335)		::Array< ::Dynamic> out = this->reactionDetails(reactionKey);
+HXDLIN( 335)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 335)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 335)			{
+HXDLIN( 335)				int _g = 0;
+HXDLIN( 335)				while((_g < out->length)){
+HXDLIN( 335)					 ::borogove::Reaction el = out->__get(_g).StaticCast<  ::borogove::Reaction >();
+HXDLIN( 335)					_g = (_g + 1);
+HXDLIN( 335)					{
+HXDLIN( 335)						 ::Dynamic haxeObject = el;
+HXDLIN( 335)						void* ptr = haxeObject.mPtr;
+HXDLIN( 335)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 335)						{
+HXDLIN( 335)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 335)							if (::hx::IsNull( store )) {
+HXDLIN( 335)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
             									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             									->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 311)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN( 335)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             							}
             							else {
-HXDLIN( 311)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 335)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             							}
             						}
             					}
             				}
             			}
-HXDLIN( 311)			void** ptr1 = (void**)out->getBase();
-HXDLIN( 311)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 311)			{
-HXDLIN( 311)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 311)				if (::hx::IsNull( store1 )) {
-HXDLIN( 311)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 335)			void** ptr1 = (void**)out->getBase();
+HXDLIN( 335)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 335)			{
+HXDLIN( 335)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 335)				if (::hx::IsNull( store1 )) {
+HXDLIN( 335)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),out));
-HXDLIN( 311)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+HXDLIN( 335)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
             				}
             				else {
-HXDLIN( 311)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 335)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXDLIN( 311)			_hx_tmp->set_ref(ptr1);
+HXDLIN( 335)			_hx_tmp->set_ref(ptr1);
             		}
-HXDLIN( 311)		return ( (size_t)(out->length) );
+HXDLIN( 335)		return ( (size_t)(out->length) );
             	}
 
 
 ::String ChatMessage_obj::text__fromC(){
-            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_423_text__fromC)
-HXDLIN( 423)		return this->text;
+            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_450_text__fromC)
+HXDLIN( 450)		return this->text;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,text__fromC,return )
 
 ::String ChatMessage_obj::lang__fromC(){
-            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_423_lang__fromC)
-HXDLIN( 423)		return this->lang;
+            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_450_lang__fromC)
+HXDLIN( 450)		return this->lang;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,lang__fromC,return )
 
 int ChatMessage_obj::direction__fromC(){
-            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_423_direction__fromC)
-HXDLIN( 423)		return this->direction;
+            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_450_direction__fromC)
+HXDLIN( 450)		return this->direction;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,direction__fromC,return )
 
 int ChatMessage_obj::status__fromC(){
-            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_423_status__fromC)
-HXDLIN( 423)		return this->status;
+            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_450_status__fromC)
+HXDLIN( 450)		return this->status;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,status__fromC,return )
 
 ::String ChatMessage_obj::statusText__fromC(){
-            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_423_statusText__fromC)
-HXDLIN( 423)		return this->statusText;
+            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_450_statusText__fromC)
+HXDLIN( 450)		return this->statusText;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessage_obj,statusText__fromC,return )
 
 size_t ChatMessage_obj::versions__fromC(void*** outPtr){
-            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_397_versions__fromC)
-HXDLIN( 397)		::Array< ::Dynamic> x = this->versions;
-HXDLIN( 397)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 397)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 397)			::Array< ::Dynamic> x1 = x;
-HXDLIN( 397)			{
-HXDLIN( 397)				int _g = 0;
-HXDLIN( 397)				while((_g < x1->length)){
-HXDLIN( 397)					 ::borogove::ChatMessage el = x1->__get(_g).StaticCast<  ::borogove::ChatMessage >();
-HXDLIN( 397)					_g = (_g + 1);
-HXDLIN( 397)					{
-HXDLIN( 397)						 ::Dynamic haxeObject = el;
-HXDLIN( 397)						void* ptr = haxeObject.mPtr;
-HXDLIN( 397)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 397)						{
-HXDLIN( 397)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 397)							if (::hx::IsNull( store )) {
-HXDLIN( 397)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_424_versions__fromC)
+HXDLIN( 424)		::Array< ::Dynamic> x = this->versions;
+HXDLIN( 424)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 424)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 424)			::Array< ::Dynamic> x1 = x;
+HXDLIN( 424)			{
+HXDLIN( 424)				int _g = 0;
+HXDLIN( 424)				while((_g < x1->length)){
+HXDLIN( 424)					 ::borogove::ChatMessage el = x1->__get(_g).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN( 424)					_g = (_g + 1);
+HXDLIN( 424)					{
+HXDLIN( 424)						 ::Dynamic haxeObject = el;
+HXDLIN( 424)						void* ptr = haxeObject.mPtr;
+HXDLIN( 424)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 424)						{
+HXDLIN( 424)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 424)							if (::hx::IsNull( store )) {
+HXDLIN( 424)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
             									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             									->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 397)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN( 424)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             							}
             							else {
-HXDLIN( 397)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 424)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             							}
             						}
             					}
             				}
             			}
-HXDLIN( 397)			void** ptr1 = (void**)x1->getBase();
-HXDLIN( 397)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 397)			{
-HXDLIN( 397)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 397)				if (::hx::IsNull( store1 )) {
-HXDLIN( 397)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 424)			void** ptr1 = (void**)x1->getBase();
+HXDLIN( 424)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 424)			{
+HXDLIN( 424)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 424)				if (::hx::IsNull( store1 )) {
+HXDLIN( 424)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),x1));
-HXDLIN( 397)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+HXDLIN( 424)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
             				}
             				else {
-HXDLIN( 397)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 424)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXDLIN( 397)			_hx_tmp->set_ref(ptr1);
+HXDLIN( 424)			_hx_tmp->set_ref(ptr1);
             		}
-HXDLIN( 397)		return ( (size_t)(x->length) );
+HXDLIN( 424)		return ( (size_t)(x->length) );
             	}
 
 
  ::borogove::EncryptionInfo ChatMessage_obj::encryption__fromC(){
-            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_423_encryption__fromC)
-HXDLIN( 423)		return this->encryption;
+            	HX_STACKFRAME(&_hx_pos_9b90dadd5b659bbe_450_encryption__fromC)
+HXDLIN( 450)		return this->encryption;
             	}
 
 
diff --git a/Sources/c_borogove/src/borogove/ChatMessageBuilder.cpp b/Sources/c_borogove/src/borogove/ChatMessageBuilder.cpp
index 8b1c40d..9a83b5a 100644
--- a/Sources/c_borogove/src/borogove/ChatMessageBuilder.cpp
+++ b/Sources/c_borogove/src/borogove/ChatMessageBuilder.cpp
@@ -81,37 +81,37 @@
 #endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_c7017726c326afec_32_new,"borogove.ChatMessageBuilder","new",0xd3d5b3cb,"borogove.ChatMessageBuilder.new","borogove/ChatMessageBuilder.hx",32,0xd0295864)
-HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_423_localId__fromC,"borogove.ChatMessageBuilder","localId__fromC",0x331bf588,"borogove.ChatMessageBuilder.localId__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_434_set_localId__fromC,"borogove.ChatMessageBuilder","set_localId__fromC",0x6345e745,"borogove.ChatMessageBuilder.set_localId__fromC","HaxeCBridge.hx",434,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_423_serverId__fromC,"borogove.ChatMessageBuilder","serverId__fromC",0xe97f92a6,"borogove.ChatMessageBuilder.serverId__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_434_set_serverId__fromC,"borogove.ChatMessageBuilder","set_serverId__fromC",0xde092649,"borogove.ChatMessageBuilder.set_serverId__fromC","HaxeCBridge.hx",434,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_423_serverIdBy__fromC,"borogove.ChatMessageBuilder","serverIdBy__fromC",0xf9433acf,"borogove.ChatMessageBuilder.serverIdBy__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_434_set_serverIdBy__fromC,"borogove.ChatMessageBuilder","set_serverIdBy__fromC",0x52133d32,"borogove.ChatMessageBuilder.set_serverIdBy__fromC","HaxeCBridge.hx",434,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_423_type__fromC,"borogove.ChatMessageBuilder","type__fromC",0x8af06f6a,"borogove.ChatMessageBuilder.type__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_434_set_type__fromC,"borogove.ChatMessageBuilder","set_type__fromC",0xb7d8b58d,"borogove.ChatMessageBuilder.set_type__fromC","HaxeCBridge.hx",434,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_423_timestamp__fromC,"borogove.ChatMessageBuilder","timestamp__fromC",0x36c99818,"borogove.ChatMessageBuilder.timestamp__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_434_set_timestamp__fromC,"borogove.ChatMessageBuilder","set_timestamp__fromC",0x3aa13315,"borogove.ChatMessageBuilder.set_timestamp__fromC","HaxeCBridge.hx",434,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_371_senderId__fromC,"borogove.ChatMessageBuilder","senderId__fromC",0x3307e774,"borogove.ChatMessageBuilder.senderId__fromC","HaxeCBridge.hx",371,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_382_set_senderId__fromC,"borogove.ChatMessageBuilder","set_senderId__fromC",0x27917b17,"borogove.ChatMessageBuilder.set_senderId__fromC","HaxeCBridge.hx",382,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_423_replyToMessage__fromC,"borogove.ChatMessageBuilder","replyToMessage__fromC",0x10667fe2,"borogove.ChatMessageBuilder.replyToMessage__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_434_set_replyToMessage__fromC,"borogove.ChatMessageBuilder","set_replyToMessage__fromC",0xdf0aefc5,"borogove.ChatMessageBuilder.set_replyToMessage__fromC","HaxeCBridge.hx",434,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_423_threadId__fromC,"borogove.ChatMessageBuilder","threadId__fromC",0xe140a9bf,"borogove.ChatMessageBuilder.threadId__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_434_set_threadId__fromC,"borogove.ChatMessageBuilder","set_threadId__fromC",0xd5ca3d62,"borogove.ChatMessageBuilder.set_threadId__fromC","HaxeCBridge.hx",434,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_360_attachments__fromC,"borogove.ChatMessageBuilder","attachments__fromC",0x0c2e843e,"borogove.ChatMessageBuilder.attachments__fromC","HaxeCBridge.hx",360,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_423_text__fromC,"borogove.ChatMessageBuilder","text__fromC",0x769f09d7,"borogove.ChatMessageBuilder.text__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_434_set_text__fromC,"borogove.ChatMessageBuilder","set_text__fromC",0xa3874ffa,"borogove.ChatMessageBuilder.set_text__fromC","HaxeCBridge.hx",434,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_423_lang__fromC,"borogove.ChatMessageBuilder","lang__fromC",0x4983eab6,"borogove.ChatMessageBuilder.lang__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_434_set_lang__fromC,"borogove.ChatMessageBuilder","set_lang__fromC",0x766c30d9,"borogove.ChatMessageBuilder.set_lang__fromC","HaxeCBridge.hx",434,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_423_direction__fromC,"borogove.ChatMessageBuilder","direction__fromC",0xab0479cf,"borogove.ChatMessageBuilder.direction__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_434_set_direction__fromC,"borogove.ChatMessageBuilder","set_direction__fromC",0xaedc14cc,"borogove.ChatMessageBuilder.set_direction__fromC","HaxeCBridge.hx",434,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_423_status__fromC,"borogove.ChatMessageBuilder","status__fromC",0x55f82ab2,"borogove.ChatMessageBuilder.status__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_434_set_status__fromC,"borogove.ChatMessageBuilder","set_status__fromC",0xc2187f95,"borogove.ChatMessageBuilder.set_status__fromC","HaxeCBridge.hx",434,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_423_statusText__fromC,"borogove.ChatMessageBuilder","statusText__fromC",0x8395a605,"borogove.ChatMessageBuilder.statusText__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_434_set_statusText__fromC,"borogove.ChatMessageBuilder","set_statusText__fromC",0xdc65a868,"borogove.ChatMessageBuilder.set_statusText__fromC","HaxeCBridge.hx",434,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_412_set_versions__fromC,"borogove.ChatMessageBuilder","set_versions__fromC",0x7130df0c,"borogove.ChatMessageBuilder.set_versions__fromC","HaxeCBridge.hx",412,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_397_versions__fromC,"borogove.ChatMessageBuilder","versions__fromC",0x7ca74b69,"borogove.ChatMessageBuilder.versions__fromC","HaxeCBridge.hx",397,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_423_encryption__fromC,"borogove.ChatMessageBuilder","encryption__fromC",0x00cb6301,"borogove.ChatMessageBuilder.encryption__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_434_set_encryption__fromC,"borogove.ChatMessageBuilder","set_encryption__fromC",0x599b6564,"borogove.ChatMessageBuilder.set_encryption__fromC","HaxeCBridge.hx",434,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_450_localId__fromC,"borogove.ChatMessageBuilder","localId__fromC",0x331bf588,"borogove.ChatMessageBuilder.localId__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_461_set_localId__fromC,"borogove.ChatMessageBuilder","set_localId__fromC",0x6345e745,"borogove.ChatMessageBuilder.set_localId__fromC","HaxeCBridge.hx",461,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_450_serverId__fromC,"borogove.ChatMessageBuilder","serverId__fromC",0xe97f92a6,"borogove.ChatMessageBuilder.serverId__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_461_set_serverId__fromC,"borogove.ChatMessageBuilder","set_serverId__fromC",0xde092649,"borogove.ChatMessageBuilder.set_serverId__fromC","HaxeCBridge.hx",461,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_450_serverIdBy__fromC,"borogove.ChatMessageBuilder","serverIdBy__fromC",0xf9433acf,"borogove.ChatMessageBuilder.serverIdBy__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_461_set_serverIdBy__fromC,"borogove.ChatMessageBuilder","set_serverIdBy__fromC",0x52133d32,"borogove.ChatMessageBuilder.set_serverIdBy__fromC","HaxeCBridge.hx",461,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_450_type__fromC,"borogove.ChatMessageBuilder","type__fromC",0x8af06f6a,"borogove.ChatMessageBuilder.type__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_461_set_type__fromC,"borogove.ChatMessageBuilder","set_type__fromC",0xb7d8b58d,"borogove.ChatMessageBuilder.set_type__fromC","HaxeCBridge.hx",461,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_450_timestamp__fromC,"borogove.ChatMessageBuilder","timestamp__fromC",0x36c99818,"borogove.ChatMessageBuilder.timestamp__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_461_set_timestamp__fromC,"borogove.ChatMessageBuilder","set_timestamp__fromC",0x3aa13315,"borogove.ChatMessageBuilder.set_timestamp__fromC","HaxeCBridge.hx",461,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_398_senderId__fromC,"borogove.ChatMessageBuilder","senderId__fromC",0x3307e774,"borogove.ChatMessageBuilder.senderId__fromC","HaxeCBridge.hx",398,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_409_set_senderId__fromC,"borogove.ChatMessageBuilder","set_senderId__fromC",0x27917b17,"borogove.ChatMessageBuilder.set_senderId__fromC","HaxeCBridge.hx",409,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_450_replyToMessage__fromC,"borogove.ChatMessageBuilder","replyToMessage__fromC",0x10667fe2,"borogove.ChatMessageBuilder.replyToMessage__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_461_set_replyToMessage__fromC,"borogove.ChatMessageBuilder","set_replyToMessage__fromC",0xdf0aefc5,"borogove.ChatMessageBuilder.set_replyToMessage__fromC","HaxeCBridge.hx",461,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_450_threadId__fromC,"borogove.ChatMessageBuilder","threadId__fromC",0xe140a9bf,"borogove.ChatMessageBuilder.threadId__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_461_set_threadId__fromC,"borogove.ChatMessageBuilder","set_threadId__fromC",0xd5ca3d62,"borogove.ChatMessageBuilder.set_threadId__fromC","HaxeCBridge.hx",461,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_385_attachments__fromC,"borogove.ChatMessageBuilder","attachments__fromC",0x0c2e843e,"borogove.ChatMessageBuilder.attachments__fromC","HaxeCBridge.hx",385,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_450_text__fromC,"borogove.ChatMessageBuilder","text__fromC",0x769f09d7,"borogove.ChatMessageBuilder.text__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_461_set_text__fromC,"borogove.ChatMessageBuilder","set_text__fromC",0xa3874ffa,"borogove.ChatMessageBuilder.set_text__fromC","HaxeCBridge.hx",461,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_450_lang__fromC,"borogove.ChatMessageBuilder","lang__fromC",0x4983eab6,"borogove.ChatMessageBuilder.lang__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_461_set_lang__fromC,"borogove.ChatMessageBuilder","set_lang__fromC",0x766c30d9,"borogove.ChatMessageBuilder.set_lang__fromC","HaxeCBridge.hx",461,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_450_direction__fromC,"borogove.ChatMessageBuilder","direction__fromC",0xab0479cf,"borogove.ChatMessageBuilder.direction__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_461_set_direction__fromC,"borogove.ChatMessageBuilder","set_direction__fromC",0xaedc14cc,"borogove.ChatMessageBuilder.set_direction__fromC","HaxeCBridge.hx",461,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_450_status__fromC,"borogove.ChatMessageBuilder","status__fromC",0x55f82ab2,"borogove.ChatMessageBuilder.status__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_461_set_status__fromC,"borogove.ChatMessageBuilder","set_status__fromC",0xc2187f95,"borogove.ChatMessageBuilder.set_status__fromC","HaxeCBridge.hx",461,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_450_statusText__fromC,"borogove.ChatMessageBuilder","statusText__fromC",0x8395a605,"borogove.ChatMessageBuilder.statusText__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_461_set_statusText__fromC,"borogove.ChatMessageBuilder","set_statusText__fromC",0xdc65a868,"borogove.ChatMessageBuilder.set_statusText__fromC","HaxeCBridge.hx",461,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_439_set_versions__fromC,"borogove.ChatMessageBuilder","set_versions__fromC",0x7130df0c,"borogove.ChatMessageBuilder.set_versions__fromC","HaxeCBridge.hx",439,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_424_versions__fromC,"borogove.ChatMessageBuilder","versions__fromC",0x7ca74b69,"borogove.ChatMessageBuilder.versions__fromC","HaxeCBridge.hx",424,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_450_encryption__fromC,"borogove.ChatMessageBuilder","encryption__fromC",0x00cb6301,"borogove.ChatMessageBuilder.encryption__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_e72a7715fb4723e4_461_set_encryption__fromC,"borogove.ChatMessageBuilder","set_encryption__fromC",0x599b6564,"borogove.ChatMessageBuilder.set_encryption__fromC","HaxeCBridge.hx",461,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_c7017726c326afec_230_attachSims,"borogove.ChatMessageBuilder","attachSims",0x7e2cb3d6,"borogove.ChatMessageBuilder.attachSims","borogove/ChatMessageBuilder.hx",230,0xd0295864)
 HX_LOCAL_STACK_FRAME(_hx_pos_c7017726c326afec_251_addAttachment,"borogove.ChatMessageBuilder","addAttachment",0xfc8ec88f,"borogove.ChatMessageBuilder.addAttachment","borogove/ChatMessageBuilder.hx",251,0xd0295864)
 HX_LOCAL_STACK_FRAME(_hx_pos_c7017726c326afec_273_setHtml,"borogove.ChatMessageBuilder","setHtml",0xc42a4b18,"borogove.ChatMessageBuilder.setHtml","borogove/ChatMessageBuilder.hx",273,0xd0295864)
@@ -170,334 +170,334 @@ bool ChatMessageBuilder_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 ::String ChatMessageBuilder_obj::localId__fromC(){
-            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_423_localId__fromC)
-HXDLIN( 423)		return this->localId;
+            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_450_localId__fromC)
+HXDLIN( 450)		return this->localId;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessageBuilder_obj,localId__fromC,return )
 
 void ChatMessageBuilder_obj::set_localId__fromC(::String value){
-            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_434_set_localId__fromC)
-HXDLIN( 434)		this->localId = value;
+            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_461_set_localId__fromC)
+HXDLIN( 461)		this->localId = value;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(ChatMessageBuilder_obj,set_localId__fromC,(void))
 
 ::String ChatMessageBuilder_obj::serverId__fromC(){
-            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_423_serverId__fromC)
-HXDLIN( 423)		return this->serverId;
+            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_450_serverId__fromC)
+HXDLIN( 450)		return this->serverId;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessageBuilder_obj,serverId__fromC,return )
 
 void ChatMessageBuilder_obj::set_serverId__fromC(::String value){
-            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_434_set_serverId__fromC)
-HXDLIN( 434)		this->serverId = value;
+            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_461_set_serverId__fromC)
+HXDLIN( 461)		this->serverId = value;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(ChatMessageBuilder_obj,set_serverId__fromC,(void))
 
 ::String ChatMessageBuilder_obj::serverIdBy__fromC(){
-            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_423_serverIdBy__fromC)
-HXDLIN( 423)		return this->serverIdBy;
+            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_450_serverIdBy__fromC)
+HXDLIN( 450)		return this->serverIdBy;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessageBuilder_obj,serverIdBy__fromC,return )
 
 void ChatMessageBuilder_obj::set_serverIdBy__fromC(::String value){
-            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_434_set_serverIdBy__fromC)
-HXDLIN( 434)		this->serverIdBy = value;
+            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_461_set_serverIdBy__fromC)
+HXDLIN( 461)		this->serverIdBy = value;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(ChatMessageBuilder_obj,set_serverIdBy__fromC,(void))
 
 int ChatMessageBuilder_obj::type__fromC(){
-            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_423_type__fromC)
-HXDLIN( 423)		return this->type;
+            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_450_type__fromC)
+HXDLIN( 450)		return this->type;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessageBuilder_obj,type__fromC,return )
 
 void ChatMessageBuilder_obj::set_type__fromC(int value){
-            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_434_set_type__fromC)
-HXDLIN( 434)		this->type = value;
+            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_461_set_type__fromC)
+HXDLIN( 461)		this->type = value;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(ChatMessageBuilder_obj,set_type__fromC,(void))
 
 ::String ChatMessageBuilder_obj::timestamp__fromC(){
-            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_423_timestamp__fromC)
-HXDLIN( 423)		return this->timestamp;
+            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_450_timestamp__fromC)
+HXDLIN( 450)		return this->timestamp;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessageBuilder_obj,timestamp__fromC,return )
 
 void ChatMessageBuilder_obj::set_timestamp__fromC(::String value){
-            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_434_set_timestamp__fromC)
-HXDLIN( 434)		this->timestamp = value;
+            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_461_set_timestamp__fromC)
+HXDLIN( 461)		this->timestamp = value;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(ChatMessageBuilder_obj,set_timestamp__fromC,(void))
 
 ::String ChatMessageBuilder_obj::senderId__fromC(){
-            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_371_senderId__fromC)
-HXDLIN( 371)		return this->get_senderId();
+            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_398_senderId__fromC)
+HXDLIN( 398)		return this->get_senderId();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessageBuilder_obj,senderId__fromC,return )
 
 void ChatMessageBuilder_obj::set_senderId__fromC(::String value){
-            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_382_set_senderId__fromC)
-HXDLIN( 382)		this->senderId = value;
+            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_409_set_senderId__fromC)
+HXDLIN( 409)		this->senderId = value;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(ChatMessageBuilder_obj,set_senderId__fromC,(void))
 
  ::borogove::ChatMessage ChatMessageBuilder_obj::replyToMessage__fromC(){
-            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_423_replyToMessage__fromC)
-HXDLIN( 423)		return this->replyToMessage;
+            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_450_replyToMessage__fromC)
+HXDLIN( 450)		return this->replyToMessage;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessageBuilder_obj,replyToMessage__fromC,return )
 
 void ChatMessageBuilder_obj::set_replyToMessage__fromC( ::borogove::ChatMessage value){
-            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_434_set_replyToMessage__fromC)
-HXDLIN( 434)		this->replyToMessage = value;
+            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_461_set_replyToMessage__fromC)
+HXDLIN( 461)		this->replyToMessage = value;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(ChatMessageBuilder_obj,set_replyToMessage__fromC,(void))
 
 ::String ChatMessageBuilder_obj::threadId__fromC(){
-            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_423_threadId__fromC)
-HXDLIN( 423)		return this->threadId;
+            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_450_threadId__fromC)
+HXDLIN( 450)		return this->threadId;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessageBuilder_obj,threadId__fromC,return )
 
 void ChatMessageBuilder_obj::set_threadId__fromC(::String value){
-            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_434_set_threadId__fromC)
-HXDLIN( 434)		this->threadId = value;
+            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_461_set_threadId__fromC)
+HXDLIN( 461)		this->threadId = value;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(ChatMessageBuilder_obj,set_threadId__fromC,(void))
 
 size_t ChatMessageBuilder_obj::attachments__fromC(void*** outPtr){
-            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_360_attachments__fromC)
-HXDLIN( 360)		::Array< ::Dynamic> x = this->attachments;
-HXDLIN( 360)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 360)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 360)			{
-HXDLIN( 360)				int _g = 0;
-HXDLIN( 360)				while((_g < x->length)){
-HXDLIN( 360)					 ::borogove::ChatAttachment el = x->__get(_g).StaticCast<  ::borogove::ChatAttachment >();
-HXDLIN( 360)					_g = (_g + 1);
-HXDLIN( 360)					{
-HXDLIN( 360)						 ::Dynamic haxeObject = el;
-HXDLIN( 360)						void* ptr = haxeObject.mPtr;
-HXDLIN( 360)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 360)						{
-HXDLIN( 360)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 360)							if (::hx::IsNull( store )) {
-HXDLIN( 360)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_385_attachments__fromC)
+HXDLIN( 385)		::Array< ::Dynamic> x = this->attachments;
+HXDLIN( 385)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 385)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 385)			{
+HXDLIN( 385)				int _g = 0;
+HXDLIN( 385)				while((_g < x->length)){
+HXDLIN( 385)					 ::borogove::ChatAttachment el = x->__get(_g).StaticCast<  ::borogove::ChatAttachment >();
+HXDLIN( 385)					_g = (_g + 1);
+HXDLIN( 385)					{
+HXDLIN( 385)						 ::Dynamic haxeObject = el;
+HXDLIN( 385)						void* ptr = haxeObject.mPtr;
+HXDLIN( 385)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 385)						{
+HXDLIN( 385)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 385)							if (::hx::IsNull( store )) {
+HXDLIN( 385)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
             									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             									->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 360)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN( 385)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             							}
             							else {
-HXDLIN( 360)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 385)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             							}
             						}
             					}
             				}
             			}
-HXDLIN( 360)			void** ptr1 = (void**)x->getBase();
-HXDLIN( 360)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 360)			{
-HXDLIN( 360)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 360)				if (::hx::IsNull( store1 )) {
-HXDLIN( 360)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 385)			void** ptr1 = (void**)x->getBase();
+HXDLIN( 385)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 385)			{
+HXDLIN( 385)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 385)				if (::hx::IsNull( store1 )) {
+HXDLIN( 385)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),x));
-HXDLIN( 360)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+HXDLIN( 385)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
             				}
             				else {
-HXDLIN( 360)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 385)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXDLIN( 360)			_hx_tmp->set_ref(ptr1);
+HXDLIN( 385)			_hx_tmp->set_ref(ptr1);
             		}
-HXDLIN( 360)		return ( (size_t)(x->length) );
+HXDLIN( 385)		return ( (size_t)(x->length) );
             	}
 
 
 ::String ChatMessageBuilder_obj::text__fromC(){
-            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_423_text__fromC)
-HXDLIN( 423)		return this->text;
+            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_450_text__fromC)
+HXDLIN( 450)		return this->text;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessageBuilder_obj,text__fromC,return )
 
 void ChatMessageBuilder_obj::set_text__fromC(::String value){
-            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_434_set_text__fromC)
-HXDLIN( 434)		this->text = value;
+            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_461_set_text__fromC)
+HXDLIN( 461)		this->text = value;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(ChatMessageBuilder_obj,set_text__fromC,(void))
 
 ::String ChatMessageBuilder_obj::lang__fromC(){
-            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_423_lang__fromC)
-HXDLIN( 423)		return this->lang;
+            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_450_lang__fromC)
+HXDLIN( 450)		return this->lang;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessageBuilder_obj,lang__fromC,return )
 
 void ChatMessageBuilder_obj::set_lang__fromC(::String value){
-            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_434_set_lang__fromC)
-HXDLIN( 434)		this->lang = value;
+            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_461_set_lang__fromC)
+HXDLIN( 461)		this->lang = value;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(ChatMessageBuilder_obj,set_lang__fromC,(void))
 
 int ChatMessageBuilder_obj::direction__fromC(){
-            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_423_direction__fromC)
-HXDLIN( 423)		return this->direction;
+            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_450_direction__fromC)
+HXDLIN( 450)		return this->direction;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessageBuilder_obj,direction__fromC,return )
 
 void ChatMessageBuilder_obj::set_direction__fromC(int value){
-            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_434_set_direction__fromC)
-HXDLIN( 434)		this->direction = value;
+            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_461_set_direction__fromC)
+HXDLIN( 461)		this->direction = value;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(ChatMessageBuilder_obj,set_direction__fromC,(void))
 
 int ChatMessageBuilder_obj::status__fromC(){
-            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_423_status__fromC)
-HXDLIN( 423)		return this->status;
+            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_450_status__fromC)
+HXDLIN( 450)		return this->status;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessageBuilder_obj,status__fromC,return )
 
 void ChatMessageBuilder_obj::set_status__fromC(int value){
-            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_434_set_status__fromC)
-HXDLIN( 434)		this->status = value;
+            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_461_set_status__fromC)
+HXDLIN( 461)		this->status = value;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(ChatMessageBuilder_obj,set_status__fromC,(void))
 
 ::String ChatMessageBuilder_obj::statusText__fromC(){
-            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_423_statusText__fromC)
-HXDLIN( 423)		return this->statusText;
+            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_450_statusText__fromC)
+HXDLIN( 450)		return this->statusText;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessageBuilder_obj,statusText__fromC,return )
 
 void ChatMessageBuilder_obj::set_statusText__fromC(::String value){
-            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_434_set_statusText__fromC)
-HXDLIN( 434)		this->statusText = value;
+            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_461_set_statusText__fromC)
+HXDLIN( 461)		this->statusText = value;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(ChatMessageBuilder_obj,set_statusText__fromC,(void))
 
 void ChatMessageBuilder_obj::set_versions__fromC(::cpp::Pointer< void* > inPtr,size_t count){
-            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_412_set_versions__fromC)
-HXDLIN( 412)		::cpp::Pointer<  ::borogove::ChatMessage > _this = inPtr->reinterpret();
-HXDLIN( 412)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new();
-HXDLIN( 412)		::cpp::Pointer<  ::borogove::ChatMessage > tmp = _this;
-HXDLIN( 412)		result->setUnmanagedData(tmp,( (int)(count) ));
-HXDLIN( 412)		this->versions = result->copy();
+            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_439_set_versions__fromC)
+HXDLIN( 439)		::cpp::Pointer<  ::borogove::ChatMessage > _this = inPtr->reinterpret();
+HXDLIN( 439)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new();
+HXDLIN( 439)		::cpp::Pointer<  ::borogove::ChatMessage > tmp = _this;
+HXDLIN( 439)		result->setUnmanagedData(tmp,( (int)(count) ));
+HXDLIN( 439)		this->versions = result->copy();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(ChatMessageBuilder_obj,set_versions__fromC,(void))
 
 size_t ChatMessageBuilder_obj::versions__fromC(void*** outPtr){
-            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_397_versions__fromC)
-HXDLIN( 397)		::Array< ::Dynamic> x = this->versions;
-HXDLIN( 397)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 397)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 397)			{
-HXDLIN( 397)				int _g = 0;
-HXDLIN( 397)				while((_g < x->length)){
-HXDLIN( 397)					 ::borogove::ChatMessage el = x->__get(_g).StaticCast<  ::borogove::ChatMessage >();
-HXDLIN( 397)					_g = (_g + 1);
-HXDLIN( 397)					{
-HXDLIN( 397)						 ::Dynamic haxeObject = el;
-HXDLIN( 397)						void* ptr = haxeObject.mPtr;
-HXDLIN( 397)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 397)						{
-HXDLIN( 397)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 397)							if (::hx::IsNull( store )) {
-HXDLIN( 397)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_424_versions__fromC)
+HXDLIN( 424)		::Array< ::Dynamic> x = this->versions;
+HXDLIN( 424)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 424)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 424)			{
+HXDLIN( 424)				int _g = 0;
+HXDLIN( 424)				while((_g < x->length)){
+HXDLIN( 424)					 ::borogove::ChatMessage el = x->__get(_g).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN( 424)					_g = (_g + 1);
+HXDLIN( 424)					{
+HXDLIN( 424)						 ::Dynamic haxeObject = el;
+HXDLIN( 424)						void* ptr = haxeObject.mPtr;
+HXDLIN( 424)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 424)						{
+HXDLIN( 424)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 424)							if (::hx::IsNull( store )) {
+HXDLIN( 424)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
             									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             									->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 397)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN( 424)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             							}
             							else {
-HXDLIN( 397)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 424)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             							}
             						}
             					}
             				}
             			}
-HXDLIN( 397)			void** ptr1 = (void**)x->getBase();
-HXDLIN( 397)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 397)			{
-HXDLIN( 397)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 397)				if (::hx::IsNull( store1 )) {
-HXDLIN( 397)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 424)			void** ptr1 = (void**)x->getBase();
+HXDLIN( 424)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 424)			{
+HXDLIN( 424)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 424)				if (::hx::IsNull( store1 )) {
+HXDLIN( 424)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),x));
-HXDLIN( 397)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+HXDLIN( 424)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
             				}
             				else {
-HXDLIN( 397)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 424)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXDLIN( 397)			_hx_tmp->set_ref(ptr1);
+HXDLIN( 424)			_hx_tmp->set_ref(ptr1);
             		}
-HXDLIN( 397)		return ( (size_t)(x->length) );
+HXDLIN( 424)		return ( (size_t)(x->length) );
             	}
 
 
  ::borogove::EncryptionInfo ChatMessageBuilder_obj::encryption__fromC(){
-            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_423_encryption__fromC)
-HXDLIN( 423)		return this->encryption;
+            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_450_encryption__fromC)
+HXDLIN( 450)		return this->encryption;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ChatMessageBuilder_obj,encryption__fromC,return )
 
 void ChatMessageBuilder_obj::set_encryption__fromC( ::borogove::EncryptionInfo value){
-            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_434_set_encryption__fromC)
-HXDLIN( 434)		this->encryption = value;
+            	HX_STACKFRAME(&_hx_pos_e72a7715fb4723e4_461_set_encryption__fromC)
+HXDLIN( 461)		this->encryption = value;
             	}
 
 
diff --git a/Sources/c_borogove/src/borogove/Client.cpp b/Sources/c_borogove/src/borogove/Client.cpp
index ba4b0d9..c7cb5ad 100644
--- a/Sources/c_borogove/src/borogove/Client.cpp
+++ b/Sources/c_borogove/src/borogove/Client.cpp
@@ -341,298 +341,301 @@
 #include <tink/streams/_Stream/Handler_Impl_.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_140_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",140,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_144_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",144,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_150_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",150,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_155_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",155,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_166_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",166,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_160_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",160,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_176_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",176,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_170_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",170,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_180_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",180,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_213_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",213,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_266_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",266,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_269_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",269,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_296_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",296,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_311_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",311,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_334_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",334,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_354_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",354,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_361_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",361,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_375_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",375,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_366_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",366,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_392_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",392,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_399_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",399,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_396_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",396,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_427_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",427,0x8e157d85)
-HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_428_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",428,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_141_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",141,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_145_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",145,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_151_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",151,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_156_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",156,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_167_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",167,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_161_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",161,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_177_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",177,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_171_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",171,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_181_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",181,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_214_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",214,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_267_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",267,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_270_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",270,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_297_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",297,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_312_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",312,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_335_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",335,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_355_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",355,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_362_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",362,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_376_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",376,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_367_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",367,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_394_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",394,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_404_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",404,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_398_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",398,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_432_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",432,0x8e157d85)
+HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_433_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",433,0x8e157d85)
 HX_DEFINE_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_59_new,"borogove.Client","new",0x43de690a,"borogove.Client.new","borogove/Client.hx",59,0x8e157d85)
 static const ::String _hx_array_data_c0e6dc18_33[] = {
 	HX_("http://jabber.org/protocol/disco#info",cb,2b,7f,0b),HX_("http://jabber.org/protocol/caps",95,d0,90,e2),HX_("urn:xmpp:caps",3d,5a,a1,f4),HX_("urn:xmpp:avatar:metadata+notify",e0,89,c6,db),HX_("http://jabber.org/protocol/nick+notify",fd,dd,65,10),HX_("urn:xmpp:bookmarks:1+notify",dc,4b,f7,cc),HX_("urn:xmpp:mds:displayed:0+notify",17,ae,91,a8),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07),HX_("urn:xmpp:jingle:1",44,c4,fe,f7),HX_("urn:xmpp:jingle:apps:dtls:0",a8,cb,02,66),HX_("urn:xmpp:jingle:apps:rtp:1",ea,41,fe,5c),HX_("urn:xmpp:jingle:apps:rtp:audio",0f,8b,54,6c),HX_("urn:xmpp:jingle:apps:rtp:video",b4,26,d0,7b),HX_("urn:xmpp:jingle:transports:ice-udp:1",f3,67,4f,53),
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_382_set_sendAvailable__fromC,"borogove.Client","set_sendAvailable__fromC",0xf96cb54b,"borogove.Client.set_sendAvailable__fromC","HaxeCBridge.hx",382,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_450_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",450,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_441_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",441,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_491_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",491,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_464_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",464,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_475_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",475,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_484_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",484,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_482_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",482,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_409_set_sendAvailable__fromC,"borogove.Client","set_sendAvailable__fromC",0xf96cb54b,"borogove.Client.set_sendAvailable__fromC","HaxeCBridge.hx",409,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_455_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",455,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_446_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",446,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_496_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",496,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_469_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",469,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_480_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",480,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_489_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",489,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_487_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",487,0x8e157d85)
 static const ::String _hx_array_data_c0e6dc18_47[] = {
 	HX_("image/png",b5,cc,c1,16),
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_592_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",592,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_597_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",597,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_606_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",606,0x8e157d85)
 HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_601_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",601,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_596_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",596,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_627_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",627,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_629_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",629,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_633_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",633,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_658_start,"borogove.Client","start",0xb1ed0b8c,"borogove.Client.start","borogove/Client.hx",658,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_632_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",632,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_634_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",634,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_638_processLiveMessage,"borogove.Client","processLiveMessage",0x7e93a8a2,"borogove.Client.processLiveMessage","borogove/Client.hx",638,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_663_start,"borogove.Client","start",0xb1ed0b8c,"borogove.Client.start","borogove/Client.hx",663,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_665_start,"borogove.Client","start",0xb1ed0b8c,"borogove.Client.start","borogove/Client.hx",665,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_666_start,"borogove.Client","start",0xb1ed0b8c,"borogove.Client.start","borogove/Client.hx",666,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_673_start,"borogove.Client","start",0xb1ed0b8c,"borogove.Client.start","borogove/Client.hx",673,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_664_start,"borogove.Client","start",0xb1ed0b8c,"borogove.Client.start","borogove/Client.hx",664,0x8e157d85)
 HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_660_start,"borogove.Client","start",0xb1ed0b8c,"borogove.Client.start","borogove/Client.hx",660,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_661_start,"borogove.Client","start",0xb1ed0b8c,"borogove.Client.start","borogove/Client.hx",661,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_668_start,"borogove.Client","start",0xb1ed0b8c,"borogove.Client.start","borogove/Client.hx",668,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_659_start,"borogove.Client","start",0xb1ed0b8c,"borogove.Client.start","borogove/Client.hx",659,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_655_start,"borogove.Client","start",0xb1ed0b8c,"borogove.Client.start","borogove/Client.hx",655,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_696_startOffline,"borogove.Client","startOffline",0x284974b7,"borogove.Client.startOffline","borogove/Client.hx",696,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_706_startOffline,"borogove.Client","startOffline",0x284974b7,"borogove.Client.startOffline","borogove/Client.hx",706,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_713_startOffline,"borogove.Client","startOffline",0x284974b7,"borogove.Client.startOffline","borogove/Client.hx",713,0x8e157d85)
 HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_691_startOffline,"borogove.Client","startOffline",0x284974b7,"borogove.Client.startOffline","borogove/Client.hx",691,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_701_startOffline,"borogove.Client","startOffline",0x284974b7,"borogove.Client.startOffline","borogove/Client.hx",701,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_708_startOffline,"borogove.Client","startOffline",0x284974b7,"borogove.Client.startOffline","borogove/Client.hx",708,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_686_startOffline,"borogove.Client","startOffline",0x284974b7,"borogove.Client.startOffline","borogove/Client.hx",686,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_313_startOffline__fromC,"borogove.Client","startOffline__fromC",0x928910a2,"borogove.Client.startOffline__fromC","HaxeCBridge.hx",313,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_731_logout,"borogove.Client","logout",0x53f1a420,"borogove.Client.logout","borogove/Client.hx",731,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_727_logout,"borogove.Client","logout",0x53f1a420,"borogove.Client.logout","borogove/Client.hx",727,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_743_usePassword,"borogove.Client","usePassword",0xeb0d7d2c,"borogove.Client.usePassword","borogove/Client.hx",743,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_752_accountId,"borogove.Client","accountId",0x0c21f612,"borogove.Client.accountId","borogove/Client.hx",752,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_761_displayName,"borogove.Client","displayName",0x79246457,"borogove.Client.displayName","borogove/Client.hx",761,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_771_setProfile,"borogove.Client","setProfile",0xd7209e3d,"borogove.Client.setProfile","borogove/Client.hx",771,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_770_setProfile,"borogove.Client","setProfile",0xd7209e3d,"borogove.Client.setProfile","borogove/Client.hx",770,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_782_setProfile,"borogove.Client","setProfile",0xd7209e3d,"borogove.Client.setProfile","borogove/Client.hx",782,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_804_updateDisplayName,"borogove.Client","updateDisplayName",0x8c586c4e,"borogove.Client.updateDisplayName","borogove/Client.hx",804,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_827_onConnected,"borogove.Client","onConnected",0x0d6c1854,"borogove.Client.onConnected","borogove/Client.hx",827,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_337_startOffline__fromC,"borogove.Client","startOffline__fromC",0x928910a2,"borogove.Client.startOffline__fromC","HaxeCBridge.hx",337,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_736_logout,"borogove.Client","logout",0x53f1a420,"borogove.Client.logout","borogove/Client.hx",736,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_732_logout,"borogove.Client","logout",0x53f1a420,"borogove.Client.logout","borogove/Client.hx",732,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_748_usePassword,"borogove.Client","usePassword",0xeb0d7d2c,"borogove.Client.usePassword","borogove/Client.hx",748,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_757_accountId,"borogove.Client","accountId",0x0c21f612,"borogove.Client.accountId","borogove/Client.hx",757,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_766_displayName,"borogove.Client","displayName",0x79246457,"borogove.Client.displayName","borogove/Client.hx",766,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_776_setProfile,"borogove.Client","setProfile",0xd7209e3d,"borogove.Client.setProfile","borogove/Client.hx",776,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_775_setProfile,"borogove.Client","setProfile",0xd7209e3d,"borogove.Client.setProfile","borogove/Client.hx",775,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_787_setProfile,"borogove.Client","setProfile",0xd7209e3d,"borogove.Client.setProfile","borogove/Client.hx",787,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_809_updateDisplayName,"borogove.Client","updateDisplayName",0x8c586c4e,"borogove.Client.updateDisplayName","borogove/Client.hx",809,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_840_onConnected,"borogove.Client","onConnected",0x0d6c1854,"borogove.Client.onConnected","borogove/Client.hx",840,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_857_onConnected,"borogove.Client","onConnected",0x0d6c1854,"borogove.Client.onConnected","borogove/Client.hx",857,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_846_onConnected,"borogove.Client","onConnected",0x0d6c1854,"borogove.Client.onConnected","borogove/Client.hx",846,0x8e157d85)
 HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_844_onConnected,"borogove.Client","onConnected",0x0d6c1854,"borogove.Client.onConnected","borogove/Client.hx",844,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_833_onConnected,"borogove.Client","onConnected",0x0d6c1854,"borogove.Client.onConnected","borogove/Client.hx",833,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_831_onConnected,"borogove.Client","onConnected",0x0d6c1854,"borogove.Client.onConnected","borogove/Client.hx",831,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_812_onConnected,"borogove.Client","onConnected",0x0d6c1854,"borogove.Client.onConnected","borogove/Client.hx",812,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_888_prepareAttachment,"borogove.Client","prepareAttachment",0x49481a74,"borogove.Client.prepareAttachment","borogove/Client.hx",888,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_891_prepareAttachment,"borogove.Client","prepareAttachment",0x49481a74,"borogove.Client.prepareAttachment","borogove/Client.hx",891,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_885_prepareAttachment,"borogove.Client","prepareAttachment",0x49481a74,"borogove.Client.prepareAttachment","borogove/Client.hx",885,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_884_prepareAttachment,"borogove.Client","prepareAttachment",0x49481a74,"borogove.Client.prepareAttachment","borogove/Client.hx",884,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_313_prepareAttachment__fromC,"borogove.Client","prepareAttachment__fromC",0x6b174c85,"borogove.Client.prepareAttachment__fromC","HaxeCBridge.hx",313,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_909_prepareAttachmentFor,"borogove.Client","prepareAttachmentFor",0x302664f5,"borogove.Client.prepareAttachmentFor","borogove/Client.hx",909,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_914_prepareAttachmentFor,"borogove.Client","prepareAttachmentFor",0x302664f5,"borogove.Client.prepareAttachmentFor","borogove/Client.hx",914,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_817_onConnected,"borogove.Client","onConnected",0x0d6c1854,"borogove.Client.onConnected","borogove/Client.hx",817,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_901_prepareAttachment,"borogove.Client","prepareAttachment",0x49481a74,"borogove.Client.prepareAttachment","borogove/Client.hx",901,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_904_prepareAttachment,"borogove.Client","prepareAttachment",0x49481a74,"borogove.Client.prepareAttachment","borogove/Client.hx",904,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_898_prepareAttachment,"borogove.Client","prepareAttachment",0x49481a74,"borogove.Client.prepareAttachment","borogove/Client.hx",898,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_897_prepareAttachment,"borogove.Client","prepareAttachment",0x49481a74,"borogove.Client.prepareAttachment","borogove/Client.hx",897,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_337_prepareAttachment__fromC,"borogove.Client","prepareAttachment__fromC",0x6b174c85,"borogove.Client.prepareAttachment__fromC","HaxeCBridge.hx",337,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_922_prepareAttachmentFor,"borogove.Client","prepareAttachmentFor",0x302664f5,"borogove.Client.prepareAttachmentFor","borogove/Client.hx",922,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_927_prepareAttachmentFor,"borogove.Client","prepareAttachmentFor",0x302664f5,"borogove.Client.prepareAttachmentFor","borogove/Client.hx",927,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_928_prepareAttachmentFor,"borogove.Client","prepareAttachmentFor",0x302664f5,"borogove.Client.prepareAttachmentFor","borogove/Client.hx",928,0x8e157d85)
 HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_915_prepareAttachmentFor,"borogove.Client","prepareAttachmentFor",0x302664f5,"borogove.Client.prepareAttachmentFor","borogove/Client.hx",915,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_902_prepareAttachmentFor,"borogove.Client","prepareAttachmentFor",0x302664f5,"borogove.Client.prepareAttachmentFor","borogove/Client.hx",902,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_930_getChats,"borogove.Client","getChats",0x85446d3b,"borogove.Client.getChats","borogove/Client.hx",930,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_311_getChats__fromC,"borogove.Client","getChats__fromC",0x855ff09e,"borogove.Client.getChats__fromC","HaxeCBridge.hx",311,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_947_findAvailableChats,"borogove.Client","findAvailableChats",0x0a9648c1,"borogove.Client.findAvailableChats","borogove/Client.hx",947,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_949_findAvailableChats,"borogove.Client","findAvailableChats",0x0a9648c1,"borogove.Client.findAvailableChats","borogove/Client.hx",949,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_943_findAvailableChats,"borogove.Client","findAvailableChats",0x0a9648c1,"borogove.Client.findAvailableChats","borogove/Client.hx",943,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_939_findAvailableChats,"borogove.Client","findAvailableChats",0x0a9648c1,"borogove.Client.findAvailableChats","borogove/Client.hx",939,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_990_findAvailableChats,"borogove.Client","findAvailableChats",0x0a9648c1,"borogove.Client.findAvailableChats","borogove/Client.hx",990,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1010_findAvailableChats,"borogove.Client","findAvailableChats",0x0a9648c1,"borogove.Client.findAvailableChats","borogove/Client.hx",1010,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1011_findAvailableChats,"borogove.Client","findAvailableChats",0x0a9648c1,"borogove.Client.findAvailableChats","borogove/Client.hx",1011,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1028_findAvailableChats,"borogove.Client","findAvailableChats",0x0a9648c1,"borogove.Client.findAvailableChats","borogove/Client.hx",1028,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_255_findAvailableChats__fromC,"borogove.Client","findAvailableChats__fromC",0xd43731d8,"borogove.Client.findAvailableChats__fromC","HaxeCBridge.hx",255,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_315_findAvailableChats__fromC,"borogove.Client","findAvailableChats__fromC",0xd43731d8,"borogove.Client.findAvailableChats__fromC","HaxeCBridge.hx",315,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1057_startChat,"borogove.Client","startChat",0xdd804c84,"borogove.Client.startChat","borogove/Client.hx",1057,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1092_getChat,"borogove.Client","getChat",0xaf174438,"borogove.Client.getChat","borogove/Client.hx",1092,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1098_moderateMessage,"borogove.Client","moderateMessage",0xdbd387ee,"borogove.Client.moderateMessage","borogove/Client.hx",1098,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1096_moderateMessage,"borogove.Client","moderateMessage",0xdbd387ee,"borogove.Client.moderateMessage","borogove/Client.hx",1096,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1113_getDirectChat,"borogove.Client","getDirectChat",0xe2d04c01,"borogove.Client.getDirectChat","borogove/Client.hx",1113,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1166_enablePush,"borogove.Client","enablePush",0x34a71a93,"borogove.Client.enablePush","borogove/Client.hx",1166,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_315_enablePush__fromC,"borogove.Client","enablePush__fromC",0x26b41e46,"borogove.Client.enablePush__fromC","HaxeCBridge.hx",315,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1198_updatePushIfEnabled,"borogove.Client","updatePushIfEnabled",0x94fc7dcb,"borogove.Client.updatePushIfEnabled","borogove/Client.hx",1198,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1210_addPasswordNeededListener,"borogove.Client","addPasswordNeededListener",0xe674476f,"borogove.Client.addPasswordNeededListener","borogove/Client.hx",1210,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1209_addPasswordNeededListener,"borogove.Client","addPasswordNeededListener",0xe674476f,"borogove.Client.addPasswordNeededListener","borogove/Client.hx",1209,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_255_addPasswordNeededListener__fromC,"borogove.Client","addPasswordNeededListener__fromC",0xcb7e84ea,"borogove.Client.addPasswordNeededListener__fromC","HaxeCBridge.hx",255,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_315_addPasswordNeededListener__fromC,"borogove.Client","addPasswordNeededListener__fromC",0xcb7e84ea,"borogove.Client.addPasswordNeededListener__fromC","HaxeCBridge.hx",315,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1223_addStatusOnlineListener,"borogove.Client","addStatusOnlineListener",0xbe432964,"borogove.Client.addStatusOnlineListener","borogove/Client.hx",1223,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_244_addStatusOnlineListener__fromC,"borogove.Client","addStatusOnlineListener__fromC",0xbd04fb95,"borogove.Client.addStatusOnlineListener__fromC","HaxeCBridge.hx",244,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_315_addStatusOnlineListener__fromC,"borogove.Client","addStatusOnlineListener__fromC",0xbd04fb95,"borogove.Client.addStatusOnlineListener__fromC","HaxeCBridge.hx",315,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1236_addStatusOfflineListener,"borogove.Client","addStatusOfflineListener",0xbdd8ce9a,"borogove.Client.addStatusOfflineListener","borogove/Client.hx",1236,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_244_addStatusOfflineListener__fromC,"borogove.Client","addStatusOfflineListener__fromC",0x9e42091f,"borogove.Client.addStatusOfflineListener__fromC","HaxeCBridge.hx",244,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_315_addStatusOfflineListener__fromC,"borogove.Client","addStatusOfflineListener__fromC",0x9e42091f,"borogove.Client.addStatusOfflineListener__fromC","HaxeCBridge.hx",315,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1249_addConnectionFailedListener,"borogove.Client","addConnectionFailedListener",0xa4e943fa,"borogove.Client.addConnectionFailedListener","borogove/Client.hx",1249,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_244_addConnectionFailedListener__fromC,"borogove.Client","addConnectionFailedListener__fromC",0x3a44ffbf,"borogove.Client.addConnectionFailedListener__fromC","HaxeCBridge.hx",244,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_315_addConnectionFailedListener__fromC,"borogove.Client","addConnectionFailedListener__fromC",0x3a44ffbf,"borogove.Client.addConnectionFailedListener__fromC","HaxeCBridge.hx",315,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1263_addTlsCheckListener,"borogove.Client","addTlsCheckListener",0x84ae154c,"borogove.Client.addTlsCheckListener","borogove/Client.hx",1263,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1262_addTlsCheckListener,"borogove.Client","addTlsCheckListener",0x84ae154c,"borogove.Client.addTlsCheckListener","borogove/Client.hx",1262,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_255_addTlsCheckListener__fromC,"borogove.Client","addTlsCheckListener__fromC",0x1c54dcad,"borogove.Client.addTlsCheckListener__fromC","HaxeCBridge.hx",255,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_315_addTlsCheckListener__fromC,"borogove.Client","addTlsCheckListener__fromC",0x1c54dcad,"borogove.Client.addTlsCheckListener__fromC","HaxeCBridge.hx",315,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1293_addChatMessageListener,"borogove.Client","addChatMessageListener",0x08596558,"borogove.Client.addChatMessageListener","borogove/Client.hx",1293,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_255_addChatMessageListener__fromC,"borogove.Client","addChatMessageListener__fromC",0xa610e621,"borogove.Client.addChatMessageListener__fromC","HaxeCBridge.hx",255,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_315_addChatMessageListener__fromC,"borogove.Client","addChatMessageListener__fromC",0xa610e621,"borogove.Client.addChatMessageListener__fromC","HaxeCBridge.hx",315,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1307_addSyncMessageListener,"borogove.Client","addSyncMessageListener",0xfdfc7535,"borogove.Client.addSyncMessageListener","borogove/Client.hx",1307,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_255_addSyncMessageListener__fromC,"borogove.Client","addSyncMessageListener__fromC",0x500a3be4,"borogove.Client.addSyncMessageListener__fromC","HaxeCBridge.hx",255,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_315_addSyncMessageListener__fromC,"borogove.Client","addSyncMessageListener__fromC",0x500a3be4,"borogove.Client.addSyncMessageListener__fromC","HaxeCBridge.hx",315,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1323_addChatsUpdatedListener,"borogove.Client","addChatsUpdatedListener",0x9716ffdf,"borogove.Client.addChatsUpdatedListener","borogove/Client.hx",1323,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1333_addChatsUpdatedListener,"borogove.Client","addChatsUpdatedListener",0x9716ffdf,"borogove.Client.addChatsUpdatedListener","borogove/Client.hx",1333,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1339_addChatsUpdatedListener,"borogove.Client","addChatsUpdatedListener",0x9716ffdf,"borogove.Client.addChatsUpdatedListener","borogove/Client.hx",1339,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1337_addChatsUpdatedListener,"borogove.Client","addChatsUpdatedListener",0x9716ffdf,"borogove.Client.addChatsUpdatedListener","borogove/Client.hx",1337,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1319_addChatsUpdatedListener,"borogove.Client","addChatsUpdatedListener",0x9716ffdf,"borogove.Client.addChatsUpdatedListener","borogove/Client.hx",1319,0x8e157d85)
-static const Float _hx_array_data_c0e6dc18_167[] = {
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_943_getChats,"borogove.Client","getChats",0x85446d3b,"borogove.Client.getChats","borogove/Client.hx",943,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_335_getChats__fromC,"borogove.Client","getChats__fromC",0x855ff09e,"borogove.Client.getChats__fromC","HaxeCBridge.hx",335,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_960_findAvailableChats,"borogove.Client","findAvailableChats",0x0a9648c1,"borogove.Client.findAvailableChats","borogove/Client.hx",960,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_962_findAvailableChats,"borogove.Client","findAvailableChats",0x0a9648c1,"borogove.Client.findAvailableChats","borogove/Client.hx",962,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_956_findAvailableChats,"borogove.Client","findAvailableChats",0x0a9648c1,"borogove.Client.findAvailableChats","borogove/Client.hx",956,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_952_findAvailableChats,"borogove.Client","findAvailableChats",0x0a9648c1,"borogove.Client.findAvailableChats","borogove/Client.hx",952,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1003_findAvailableChats,"borogove.Client","findAvailableChats",0x0a9648c1,"borogove.Client.findAvailableChats","borogove/Client.hx",1003,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1023_findAvailableChats,"borogove.Client","findAvailableChats",0x0a9648c1,"borogove.Client.findAvailableChats","borogove/Client.hx",1023,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1024_findAvailableChats,"borogove.Client","findAvailableChats",0x0a9648c1,"borogove.Client.findAvailableChats","borogove/Client.hx",1024,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1041_findAvailableChats,"borogove.Client","findAvailableChats",0x0a9648c1,"borogove.Client.findAvailableChats","borogove/Client.hx",1041,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_272_findAvailableChats__fromC,"borogove.Client","findAvailableChats__fromC",0xd43731d8,"borogove.Client.findAvailableChats__fromC","HaxeCBridge.hx",272,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_339_findAvailableChats__fromC,"borogove.Client","findAvailableChats__fromC",0xd43731d8,"borogove.Client.findAvailableChats__fromC","HaxeCBridge.hx",339,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1070_startChat,"borogove.Client","startChat",0xdd804c84,"borogove.Client.startChat","borogove/Client.hx",1070,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1105_getChat,"borogove.Client","getChat",0xaf174438,"borogove.Client.getChat","borogove/Client.hx",1105,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1111_moderateMessage,"borogove.Client","moderateMessage",0xdbd387ee,"borogove.Client.moderateMessage","borogove/Client.hx",1111,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1109_moderateMessage,"borogove.Client","moderateMessage",0xdbd387ee,"borogove.Client.moderateMessage","borogove/Client.hx",1109,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1126_getDirectChat,"borogove.Client","getDirectChat",0xe2d04c01,"borogove.Client.getDirectChat","borogove/Client.hx",1126,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1179_enablePush,"borogove.Client","enablePush",0x34a71a93,"borogove.Client.enablePush","borogove/Client.hx",1179,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_339_enablePush__fromC,"borogove.Client","enablePush__fromC",0x26b41e46,"borogove.Client.enablePush__fromC","HaxeCBridge.hx",339,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1211_updatePushIfEnabled,"borogove.Client","updatePushIfEnabled",0x94fc7dcb,"borogove.Client.updatePushIfEnabled","borogove/Client.hx",1211,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1223_addPasswordNeededListener,"borogove.Client","addPasswordNeededListener",0xe674476f,"borogove.Client.addPasswordNeededListener","borogove/Client.hx",1223,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1222_addPasswordNeededListener,"borogove.Client","addPasswordNeededListener",0xe674476f,"borogove.Client.addPasswordNeededListener","borogove/Client.hx",1222,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_272_addPasswordNeededListener__fromC,"borogove.Client","addPasswordNeededListener__fromC",0xcb7e84ea,"borogove.Client.addPasswordNeededListener__fromC","HaxeCBridge.hx",272,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_339_addPasswordNeededListener__fromC,"borogove.Client","addPasswordNeededListener__fromC",0xcb7e84ea,"borogove.Client.addPasswordNeededListener__fromC","HaxeCBridge.hx",339,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1236_addStatusOnlineListener,"borogove.Client","addStatusOnlineListener",0xbe432964,"borogove.Client.addStatusOnlineListener","borogove/Client.hx",1236,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_261_addStatusOnlineListener__fromC,"borogove.Client","addStatusOnlineListener__fromC",0xbd04fb95,"borogove.Client.addStatusOnlineListener__fromC","HaxeCBridge.hx",261,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_339_addStatusOnlineListener__fromC,"borogove.Client","addStatusOnlineListener__fromC",0xbd04fb95,"borogove.Client.addStatusOnlineListener__fromC","HaxeCBridge.hx",339,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1249_addStatusOfflineListener,"borogove.Client","addStatusOfflineListener",0xbdd8ce9a,"borogove.Client.addStatusOfflineListener","borogove/Client.hx",1249,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_261_addStatusOfflineListener__fromC,"borogove.Client","addStatusOfflineListener__fromC",0x9e42091f,"borogove.Client.addStatusOfflineListener__fromC","HaxeCBridge.hx",261,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_339_addStatusOfflineListener__fromC,"borogove.Client","addStatusOfflineListener__fromC",0x9e42091f,"borogove.Client.addStatusOfflineListener__fromC","HaxeCBridge.hx",339,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1262_addConnectionFailedListener,"borogove.Client","addConnectionFailedListener",0xa4e943fa,"borogove.Client.addConnectionFailedListener","borogove/Client.hx",1262,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_261_addConnectionFailedListener__fromC,"borogove.Client","addConnectionFailedListener__fromC",0x3a44ffbf,"borogove.Client.addConnectionFailedListener__fromC","HaxeCBridge.hx",261,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_339_addConnectionFailedListener__fromC,"borogove.Client","addConnectionFailedListener__fromC",0x3a44ffbf,"borogove.Client.addConnectionFailedListener__fromC","HaxeCBridge.hx",339,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1276_addTlsCheckListener,"borogove.Client","addTlsCheckListener",0x84ae154c,"borogove.Client.addTlsCheckListener","borogove/Client.hx",1276,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1275_addTlsCheckListener,"borogove.Client","addTlsCheckListener",0x84ae154c,"borogove.Client.addTlsCheckListener","borogove/Client.hx",1275,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_272_addTlsCheckListener__fromC,"borogove.Client","addTlsCheckListener__fromC",0x1c54dcad,"borogove.Client.addTlsCheckListener__fromC","HaxeCBridge.hx",272,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_339_addTlsCheckListener__fromC,"borogove.Client","addTlsCheckListener__fromC",0x1c54dcad,"borogove.Client.addTlsCheckListener__fromC","HaxeCBridge.hx",339,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1306_addChatMessageListener,"borogove.Client","addChatMessageListener",0x08596558,"borogove.Client.addChatMessageListener","borogove/Client.hx",1306,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_272_addChatMessageListener__fromC,"borogove.Client","addChatMessageListener__fromC",0xa610e621,"borogove.Client.addChatMessageListener__fromC","HaxeCBridge.hx",272,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_339_addChatMessageListener__fromC,"borogove.Client","addChatMessageListener__fromC",0xa610e621,"borogove.Client.addChatMessageListener__fromC","HaxeCBridge.hx",339,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1320_addSyncMessageListener,"borogove.Client","addSyncMessageListener",0xfdfc7535,"borogove.Client.addSyncMessageListener","borogove/Client.hx",1320,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_272_addSyncMessageListener__fromC,"borogove.Client","addSyncMessageListener__fromC",0x500a3be4,"borogove.Client.addSyncMessageListener__fromC","HaxeCBridge.hx",272,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_339_addSyncMessageListener__fromC,"borogove.Client","addSyncMessageListener__fromC",0x500a3be4,"borogove.Client.addSyncMessageListener__fromC","HaxeCBridge.hx",339,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1336_addChatsUpdatedListener,"borogove.Client","addChatsUpdatedListener",0x9716ffdf,"borogove.Client.addChatsUpdatedListener","borogove/Client.hx",1336,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1346_addChatsUpdatedListener,"borogove.Client","addChatsUpdatedListener",0x9716ffdf,"borogove.Client.addChatsUpdatedListener","borogove/Client.hx",1346,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1352_addChatsUpdatedListener,"borogove.Client","addChatsUpdatedListener",0x9716ffdf,"borogove.Client.addChatsUpdatedListener","borogove/Client.hx",1352,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1350_addChatsUpdatedListener,"borogove.Client","addChatsUpdatedListener",0x9716ffdf,"borogove.Client.addChatsUpdatedListener","borogove/Client.hx",1350,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1332_addChatsUpdatedListener,"borogove.Client","addChatsUpdatedListener",0x9716ffdf,"borogove.Client.addChatsUpdatedListener","borogove/Client.hx",1332,0x8e157d85)
+static const Float _hx_array_data_c0e6dc18_168[] = {
 	-1.0,
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_255_addChatsUpdatedListener__fromC,"borogove.Client","addChatsUpdatedListener__fromC",0x9b34ba7a,"borogove.Client.addChatsUpdatedListener__fromC","HaxeCBridge.hx",255,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_315_addChatsUpdatedListener__fromC,"borogove.Client","addChatsUpdatedListener__fromC",0x9b34ba7a,"borogove.Client.addChatsUpdatedListener__fromC","HaxeCBridge.hx",315,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1356_addCallRingListener,"borogove.Client","addCallRingListener",0x113612ed,"borogove.Client.addCallRingListener","borogove/Client.hx",1356,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_255_addCallRingListener__fromC,"borogove.Client","addCallRingListener__fromC",0x1230452c,"borogove.Client.addCallRingListener__fromC","HaxeCBridge.hx",255,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_315_addCallRingListener__fromC,"borogove.Client","addCallRingListener__fromC",0x1230452c,"borogove.Client.addCallRingListener__fromC","HaxeCBridge.hx",315,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1369_addCallRetractListener,"borogove.Client","addCallRetractListener",0x367d108c,"borogove.Client.addCallRetractListener","borogove/Client.hx",1369,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_255_addCallRetractListener__fromC,"borogove.Client","addCallRetractListener__fromC",0x22c7c96d,"borogove.Client.addCallRetractListener__fromC","HaxeCBridge.hx",255,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_315_addCallRetractListener__fromC,"borogove.Client","addCallRetractListener__fromC",0x22c7c96d,"borogove.Client.addCallRetractListener__fromC","HaxeCBridge.hx",315,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1382_addCallRingingListener,"borogove.Client","addCallRingingListener",0x5f59e2bd,"borogove.Client.addCallRingingListener","borogove/Client.hx",1382,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_255_addCallRingingListener__fromC,"borogove.Client","addCallRingingListener__fromC",0x61b10f5c,"borogove.Client.addCallRingingListener__fromC","HaxeCBridge.hx",255,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_315_addCallRingingListener__fromC,"borogove.Client","addCallRingingListener__fromC",0x61b10f5c,"borogove.Client.addCallRingingListener__fromC","HaxeCBridge.hx",315,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1395_addCallUpdateStatusListener,"borogove.Client","addCallUpdateStatusListener",0x64a47558,"borogove.Client.addCallUpdateStatusListener","borogove/Client.hx",1395,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_255_addCallUpdateStatusListener__fromC,"borogove.Client","addCallUpdateStatusListener__fromC",0x6047d621,"borogove.Client.addCallUpdateStatusListener__fromC","HaxeCBridge.hx",255,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_315_addCallUpdateStatusListener__fromC,"borogove.Client","addCallUpdateStatusListener__fromC",0x6047d621,"borogove.Client.addCallUpdateStatusListener__fromC","HaxeCBridge.hx",315,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1410_addCallMediaListener,"borogove.Client","addCallMediaListener",0x7c3a52af,"borogove.Client.addCallMediaListener","borogove/Client.hx",1410,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_255_addCallMediaListener__fromC,"borogove.Client","addCallMediaListener__fromC",0x91fc61aa,"borogove.Client.addCallMediaListener__fromC","HaxeCBridge.hx",255,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_315_addCallMediaListener__fromC,"borogove.Client","addCallMediaListener__fromC",0x91fc61aa,"borogove.Client.addCallMediaListener__fromC","HaxeCBridge.hx",315,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1424_addCallTrackListener,"borogove.Client","addCallTrackListener",0xf44a5b56,"borogove.Client.addCallTrackListener","borogove/Client.hx",1424,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_255_addCallTrackListener__fromC,"borogove.Client","addCallTrackListener__fromC",0x1f65cbe3,"borogove.Client.addCallTrackListener__fromC","HaxeCBridge.hx",255,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_315_addCallTrackListener__fromC,"borogove.Client","addCallTrackListener__fromC",0x1f65cbe3,"borogove.Client.addCallTrackListener__fromC","HaxeCBridge.hx",315,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1434_setInForeground,"borogove.Client","setInForeground",0x844deb74,"borogove.Client.setInForeground","borogove/Client.hx",1434,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1442_setNotInForeground,"borogove.Client","setNotInForeground",0xe4d7a7cf,"borogove.Client.setNotInForeground","borogove/Client.hx",1442,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1452_fetchMediaByHash,"borogove.Client","fetchMediaByHash",0x85d7c445,"borogove.Client.fetchMediaByHash","borogove/Client.hx",1452,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1448_fetchMediaByHash,"borogove.Client","fetchMediaByHash",0x85d7c445,"borogove.Client.fetchMediaByHash","borogove/Client.hx",1448,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1463_fetchMediaByHashOneCounterpart,"borogove.Client","fetchMediaByHashOneCounterpart",0x7939134e,"borogove.Client.fetchMediaByHashOneCounterpart","borogove/Client.hx",1463,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_272_addChatsUpdatedListener__fromC,"borogove.Client","addChatsUpdatedListener__fromC",0x9b34ba7a,"borogove.Client.addChatsUpdatedListener__fromC","HaxeCBridge.hx",272,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_339_addChatsUpdatedListener__fromC,"borogove.Client","addChatsUpdatedListener__fromC",0x9b34ba7a,"borogove.Client.addChatsUpdatedListener__fromC","HaxeCBridge.hx",339,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1369_addCallRingListener,"borogove.Client","addCallRingListener",0x113612ed,"borogove.Client.addCallRingListener","borogove/Client.hx",1369,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_272_addCallRingListener__fromC,"borogove.Client","addCallRingListener__fromC",0x1230452c,"borogove.Client.addCallRingListener__fromC","HaxeCBridge.hx",272,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_339_addCallRingListener__fromC,"borogove.Client","addCallRingListener__fromC",0x1230452c,"borogove.Client.addCallRingListener__fromC","HaxeCBridge.hx",339,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1382_addCallRetractListener,"borogove.Client","addCallRetractListener",0x367d108c,"borogove.Client.addCallRetractListener","borogove/Client.hx",1382,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_272_addCallRetractListener__fromC,"borogove.Client","addCallRetractListener__fromC",0x22c7c96d,"borogove.Client.addCallRetractListener__fromC","HaxeCBridge.hx",272,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_339_addCallRetractListener__fromC,"borogove.Client","addCallRetractListener__fromC",0x22c7c96d,"borogove.Client.addCallRetractListener__fromC","HaxeCBridge.hx",339,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1395_addCallRingingListener,"borogove.Client","addCallRingingListener",0x5f59e2bd,"borogove.Client.addCallRingingListener","borogove/Client.hx",1395,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_272_addCallRingingListener__fromC,"borogove.Client","addCallRingingListener__fromC",0x61b10f5c,"borogove.Client.addCallRingingListener__fromC","HaxeCBridge.hx",272,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_339_addCallRingingListener__fromC,"borogove.Client","addCallRingingListener__fromC",0x61b10f5c,"borogove.Client.addCallRingingListener__fromC","HaxeCBridge.hx",339,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1408_addCallUpdateStatusListener,"borogove.Client","addCallUpdateStatusListener",0x64a47558,"borogove.Client.addCallUpdateStatusListener","borogove/Client.hx",1408,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_272_addCallUpdateStatusListener__fromC,"borogove.Client","addCallUpdateStatusListener__fromC",0x6047d621,"borogove.Client.addCallUpdateStatusListener__fromC","HaxeCBridge.hx",272,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_339_addCallUpdateStatusListener__fromC,"borogove.Client","addCallUpdateStatusListener__fromC",0x6047d621,"borogove.Client.addCallUpdateStatusListener__fromC","HaxeCBridge.hx",339,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1423_addCallMediaListener,"borogove.Client","addCallMediaListener",0x7c3a52af,"borogove.Client.addCallMediaListener","borogove/Client.hx",1423,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_272_addCallMediaListener__fromC,"borogove.Client","addCallMediaListener__fromC",0x91fc61aa,"borogove.Client.addCallMediaListener__fromC","HaxeCBridge.hx",272,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_339_addCallMediaListener__fromC,"borogove.Client","addCallMediaListener__fromC",0x91fc61aa,"borogove.Client.addCallMediaListener__fromC","HaxeCBridge.hx",339,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1437_addCallTrackListener,"borogove.Client","addCallTrackListener",0xf44a5b56,"borogove.Client.addCallTrackListener","borogove/Client.hx",1437,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_272_addCallTrackListener__fromC,"borogove.Client","addCallTrackListener__fromC",0x1f65cbe3,"borogove.Client.addCallTrackListener__fromC","HaxeCBridge.hx",272,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_afe14372debdebc6_339_addCallTrackListener__fromC,"borogove.Client","addCallTrackListener__fromC",0x1f65cbe3,"borogove.Client.addCallTrackListener__fromC","HaxeCBridge.hx",339,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1447_setInForeground,"borogove.Client","setInForeground",0x844deb74,"borogove.Client.setInForeground","borogove/Client.hx",1447,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1455_setNotInForeground,"borogove.Client","setNotInForeground",0xe4d7a7cf,"borogove.Client.setNotInForeground","borogove/Client.hx",1455,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1465_fetchMediaByHash,"borogove.Client","fetchMediaByHash",0x85d7c445,"borogove.Client.fetchMediaByHash","borogove/Client.hx",1465,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1461_fetchMediaByHash,"borogove.Client","fetchMediaByHash",0x85d7c445,"borogove.Client.fetchMediaByHash","borogove/Client.hx",1461,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1476_fetchMediaByHashOneCounterpart,"borogove.Client","fetchMediaByHashOneCounterpart",0x7939134e,"borogove.Client.fetchMediaByHashOneCounterpart","borogove/Client.hx",1476,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1481_fetchMediaByHashOneCounterpart,"borogove.Client","fetchMediaByHashOneCounterpart",0x7939134e,"borogove.Client.fetchMediaByHashOneCounterpart","borogove/Client.hx",1481,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1474_fetchMediaByHashOneCounterpart,"borogove.Client","fetchMediaByHashOneCounterpart",0x7939134e,"borogove.Client.fetchMediaByHashOneCounterpart","borogove/Client.hx",1474,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1485_fetchMediaByHashOneCounterpart,"borogove.Client","fetchMediaByHashOneCounterpart",0x7939134e,"borogove.Client.fetchMediaByHashOneCounterpart","borogove/Client.hx",1485,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1471_fetchMediaByHashOneCounterpart,"borogove.Client","fetchMediaByHashOneCounterpart",0x7939134e,"borogove.Client.fetchMediaByHashOneCounterpart","borogove/Client.hx",1471,0x8e157d85)
 HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1468_fetchMediaByHashOneCounterpart,"borogove.Client","fetchMediaByHashOneCounterpart",0x7939134e,"borogove.Client.fetchMediaByHashOneCounterpart","borogove/Client.hx",1468,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1461_fetchMediaByHashOneCounterpart,"borogove.Client","fetchMediaByHashOneCounterpart",0x7939134e,"borogove.Client.fetchMediaByHashOneCounterpart","borogove/Client.hx",1461,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1472_fetchMediaByHashOneCounterpart,"borogove.Client","fetchMediaByHashOneCounterpart",0x7939134e,"borogove.Client.fetchMediaByHashOneCounterpart","borogove/Client.hx",1472,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1458_fetchMediaByHashOneCounterpart,"borogove.Client","fetchMediaByHashOneCounterpart",0x7939134e,"borogove.Client.fetchMediaByHashOneCounterpart","borogove/Client.hx",1458,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1455_fetchMediaByHashOneCounterpart,"borogove.Client","fetchMediaByHashOneCounterpart",0x7939134e,"borogove.Client.fetchMediaByHashOneCounterpart","borogove/Client.hx",1455,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1484_chatActivity,"borogove.Client","chatActivity",0xdc37e2dd,"borogove.Client.chatActivity","borogove/Client.hx",1484,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1477_chatActivity,"borogove.Client","chatActivity",0xdc37e2dd,"borogove.Client.chatActivity","borogove/Client.hx",1477,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1483_chatActivity,"borogove.Client","chatActivity",0xdc37e2dd,"borogove.Client.chatActivity","borogove/Client.hx",1483,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1495_sortChats,"borogove.Client","sortChats",0x30f4e687,"borogove.Client.sortChats","borogove/Client.hx",1495,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1494_sortChats,"borogove.Client","sortChats",0x30f4e687,"borogove.Client.sortChats","borogove/Client.hx",1494,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1507_storeMessages,"borogove.Client","storeMessages",0x6129c2f7,"borogove.Client.storeMessages","borogove/Client.hx",1507,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1512_sendQuery,"borogove.Client","sendQuery",0x0127bcca,"borogove.Client.sendQuery","borogove/Client.hx",1512,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1522_publishWithOptions,"borogove.Client","publishWithOptions",0x33815b3f,"borogove.Client.publishWithOptions","borogove/Client.hx",1522,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1532_publishWithOptions,"borogove.Client","publishWithOptions",0x33815b3f,"borogove.Client.publishWithOptions","borogove/Client.hx",1532,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1516_publishWithOptions,"borogove.Client","publishWithOptions",0x33815b3f,"borogove.Client.publishWithOptions","borogove/Client.hx",1516,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1544_sendStanza,"borogove.Client","sendStanza",0x3845b5f3,"borogove.Client.sendStanza","borogove/Client.hx",1544,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1551_sendPresence,"borogove.Client","sendPresence",0x8b6a25b9,"borogove.Client.sendPresence","borogove/Client.hx",1551,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1552_sendPresence,"borogove.Client","sendPresence",0x8b6a25b9,"borogove.Client.sendPresence","borogove/Client.hx",1552,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1563_getIceServers,"borogove.Client","getIceServers",0xa62741a5,"borogove.Client.getIceServers","borogove/Client.hx",1563,0x8e157d85)
-static const ::String _hx_array_data_c0e6dc18_223[] = {
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1497_chatActivity,"borogove.Client","chatActivity",0xdc37e2dd,"borogove.Client.chatActivity","borogove/Client.hx",1497,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1490_chatActivity,"borogove.Client","chatActivity",0xdc37e2dd,"borogove.Client.chatActivity","borogove/Client.hx",1490,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1496_chatActivity,"borogove.Client","chatActivity",0xdc37e2dd,"borogove.Client.chatActivity","borogove/Client.hx",1496,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1508_sortChats,"borogove.Client","sortChats",0x30f4e687,"borogove.Client.sortChats","borogove/Client.hx",1508,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1507_sortChats,"borogove.Client","sortChats",0x30f4e687,"borogove.Client.sortChats","borogove/Client.hx",1507,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1520_storeMessages,"borogove.Client","storeMessages",0x6129c2f7,"borogove.Client.storeMessages","borogove/Client.hx",1520,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1525_sendQuery,"borogove.Client","sendQuery",0x0127bcca,"borogove.Client.sendQuery","borogove/Client.hx",1525,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1532_sendNextLazyQuery,"borogove.Client","sendNextLazyQuery",0x9ace2e43,"borogove.Client.sendNextLazyQuery","borogove/Client.hx",1532,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1530_sendNextLazyQuery,"borogove.Client","sendNextLazyQuery",0x9ace2e43,"borogove.Client.sendNextLazyQuery","borogove/Client.hx",1530,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1542_sendQueryLazy,"borogove.Client","sendQueryLazy",0xf72d265e,"borogove.Client.sendQueryLazy","borogove/Client.hx",1542,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1554_publishWithOptions,"borogove.Client","publishWithOptions",0x33815b3f,"borogove.Client.publishWithOptions","borogove/Client.hx",1554,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1564_publishWithOptions,"borogove.Client","publishWithOptions",0x33815b3f,"borogove.Client.publishWithOptions","borogove/Client.hx",1564,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1548_publishWithOptions,"borogove.Client","publishWithOptions",0x33815b3f,"borogove.Client.publishWithOptions","borogove/Client.hx",1548,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1576_sendStanza,"borogove.Client","sendStanza",0x3845b5f3,"borogove.Client.sendStanza","borogove/Client.hx",1576,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1583_sendPresence,"borogove.Client","sendPresence",0x8b6a25b9,"borogove.Client.sendPresence","borogove/Client.hx",1583,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1584_sendPresence,"borogove.Client","sendPresence",0x8b6a25b9,"borogove.Client.sendPresence","borogove/Client.hx",1584,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1595_getIceServers,"borogove.Client","getIceServers",0xa62741a5,"borogove.Client.getIceServers","borogove/Client.hx",1595,0x8e157d85)
+static const ::String _hx_array_data_c0e6dc18_227[] = {
 	HX_("stun",3a,f5,5b,4c),HX_("stuns",f9,9d,1a,84),HX_("turn",7d,eb,05,4d),HX_("turns",56,22,28,18),
 };
-static const ::String _hx_array_data_c0e6dc18_224[] = {
+static const ::String _hx_array_data_c0e6dc18_228[] = {
 	HX_("turn",7d,eb,05,4d),HX_("turns",56,22,28,18),
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1561_getIceServers,"borogove.Client","getIceServers",0xa62741a5,"borogove.Client.getIceServers","borogove/Client.hx",1561,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1593_discoverServices,"borogove.Client","discoverServices",0xca86abfd,"borogove.Client.discoverServices","borogove/Client.hx",1593,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1596_discoverServices,"borogove.Client","discoverServices",0xca86abfd,"borogove.Client.discoverServices","borogove/Client.hx",1596,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1590_discoverServices,"borogove.Client","discoverServices",0xca86abfd,"borogove.Client.discoverServices","borogove/Client.hx",1590,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1605_notifyMessageHandlers,"borogove.Client","notifyMessageHandlers",0x88b574b1,"borogove.Client.notifyMessageHandlers","borogove/Client.hx",1605,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1612_notifySyncMessageHandlers,"borogove.Client","notifySyncMessageHandlers",0x1628e516,"borogove.Client.notifySyncMessageHandlers","borogove/Client.hx",1612,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1621_rosterGet,"borogove.Client","rosterGet",0x21c107f5,"borogove.Client.rosterGet","borogove/Client.hx",1621,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1619_rosterGet,"borogove.Client","rosterGet",0x21c107f5,"borogove.Client.rosterGet","borogove/Client.hx",1619,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1636_startChatWith,"borogove.Client","startChatWith",0x4c4c80aa,"borogove.Client.startChatWith","borogove/Client.hx",1636,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1634_startChatWith,"borogove.Client","startChatWith",0x4c4c80aa,"borogove.Client.startChatWith","borogove/Client.hx",1634,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1670_mucInvite,"borogove.Client","mucInvite",0xc0e2a44e,"borogove.Client.mucInvite","borogove/Client.hx",1670,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1672_mucInvite,"borogove.Client","mucInvite",0xc0e2a44e,"borogove.Client.mucInvite","borogove/Client.hx",1672,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1673_mucInvite,"borogove.Client","mucInvite",0xc0e2a44e,"borogove.Client.mucInvite","borogove/Client.hx",1673,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1695_serverBlocked,"borogove.Client","serverBlocked",0x86ce5793,"borogove.Client.serverBlocked","borogove/Client.hx",1695,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1704_bookmarksGet,"borogove.Client","bookmarksGet",0x13a4e3af,"borogove.Client.bookmarksGet","borogove/Client.hx",1704,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1711_bookmarksGet,"borogove.Client","bookmarksGet",0x13a4e3af,"borogove.Client.bookmarksGet","borogove/Client.hx",1711,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1718_bookmarksGet,"borogove.Client","bookmarksGet",0x13a4e3af,"borogove.Client.bookmarksGet","borogove/Client.hx",1718,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1720_bookmarksGet,"borogove.Client","bookmarksGet",0x13a4e3af,"borogove.Client.bookmarksGet","borogove/Client.hx",1720,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1730_bookmarksGet,"borogove.Client","bookmarksGet",0x13a4e3af,"borogove.Client.bookmarksGet","borogove/Client.hx",1730,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1738_bookmarksGet,"borogove.Client","bookmarksGet",0x13a4e3af,"borogove.Client.bookmarksGet","borogove/Client.hx",1738,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1749_bookmarksGet,"borogove.Client","bookmarksGet",0x13a4e3af,"borogove.Client.bookmarksGet","borogove/Client.hx",1749,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1701_bookmarksGet,"borogove.Client","bookmarksGet",0x13a4e3af,"borogove.Client.bookmarksGet","borogove/Client.hx",1701,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1764_sync,"borogove.Client","sync",0x221ab671,"borogove.Client.sync","borogove/Client.hx",1764,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1768_sync,"borogove.Client","sync",0x221ab671,"borogove.Client.sync","borogove/Client.hx",1768,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1773_onMAMJMI,"borogove.Client","onMAMJMI",0xf47696c2,"borogove.Client.onMAMJMI","borogove/Client.hx",1773,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1797_doSync,"borogove.Client","doSync",0x13e60d1c,"borogove.Client.doSync","borogove/Client.hx",1797,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1833_doSync,"borogove.Client","doSync",0x13e60d1c,"borogove.Client.doSync","borogove/Client.hx",1833,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1858_doSync,"borogove.Client","doSync",0x13e60d1c,"borogove.Client.doSync","borogove/Client.hx",1858,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1802_doSync,"borogove.Client","doSync",0x13e60d1c,"borogove.Client.doSync","borogove/Client.hx",1802,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1824_doSync,"borogove.Client","doSync",0x13e60d1c,"borogove.Client.doSync","borogove/Client.hx",1824,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1816_doSync,"borogove.Client","doSync",0x13e60d1c,"borogove.Client.doSync","borogove/Client.hx",1816,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1812_doSync,"borogove.Client","doSync",0x13e60d1c,"borogove.Client.doSync","borogove/Client.hx",1812,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1864_doSync,"borogove.Client","doSync",0x13e60d1c,"borogove.Client.doSync","borogove/Client.hx",1864,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1787_doSync,"borogove.Client","doSync",0x13e60d1c,"borogove.Client.doSync","borogove/Client.hx",1787,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1876_pingAllChannels,"borogove.Client","pingAllChannels",0x95268ee9,"borogove.Client.pingAllChannels","borogove/Client.hx",1876,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1883_joinAllChannels,"borogove.Client","joinAllChannels",0x16ca5071,"borogove.Client.joinAllChannels","borogove/Client.hx",1883,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1888_joinAllChannels,"borogove.Client","joinAllChannels",0x16ca5071,"borogove.Client.joinAllChannels","borogove/Client.hx",1888,0x8e157d85)
-HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1892_joinAllChannels,"borogove.Client","joinAllChannels",0x16ca5071,"borogove.Client.joinAllChannels","borogove/Client.hx",1892,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1593_getIceServers,"borogove.Client","getIceServers",0xa62741a5,"borogove.Client.getIceServers","borogove/Client.hx",1593,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1625_discoverServices,"borogove.Client","discoverServices",0xca86abfd,"borogove.Client.discoverServices","borogove/Client.hx",1625,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1628_discoverServices,"borogove.Client","discoverServices",0xca86abfd,"borogove.Client.discoverServices","borogove/Client.hx",1628,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1622_discoverServices,"borogove.Client","discoverServices",0xca86abfd,"borogove.Client.discoverServices","borogove/Client.hx",1622,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1637_notifyMessageHandlers,"borogove.Client","notifyMessageHandlers",0x88b574b1,"borogove.Client.notifyMessageHandlers","borogove/Client.hx",1637,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1644_notifySyncMessageHandlers,"borogove.Client","notifySyncMessageHandlers",0x1628e516,"borogove.Client.notifySyncMessageHandlers","borogove/Client.hx",1644,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1653_rosterGet,"borogove.Client","rosterGet",0x21c107f5,"borogove.Client.rosterGet","borogove/Client.hx",1653,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1651_rosterGet,"borogove.Client","rosterGet",0x21c107f5,"borogove.Client.rosterGet","borogove/Client.hx",1651,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1668_startChatWith,"borogove.Client","startChatWith",0x4c4c80aa,"borogove.Client.startChatWith","borogove/Client.hx",1668,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1666_startChatWith,"borogove.Client","startChatWith",0x4c4c80aa,"borogove.Client.startChatWith","borogove/Client.hx",1666,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1702_mucInvite,"borogove.Client","mucInvite",0xc0e2a44e,"borogove.Client.mucInvite","borogove/Client.hx",1702,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1704_mucInvite,"borogove.Client","mucInvite",0xc0e2a44e,"borogove.Client.mucInvite","borogove/Client.hx",1704,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1705_mucInvite,"borogove.Client","mucInvite",0xc0e2a44e,"borogove.Client.mucInvite","borogove/Client.hx",1705,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1727_serverBlocked,"borogove.Client","serverBlocked",0x86ce5793,"borogove.Client.serverBlocked","borogove/Client.hx",1727,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1736_bookmarksGet,"borogove.Client","bookmarksGet",0x13a4e3af,"borogove.Client.bookmarksGet","borogove/Client.hx",1736,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1743_bookmarksGet,"borogove.Client","bookmarksGet",0x13a4e3af,"borogove.Client.bookmarksGet","borogove/Client.hx",1743,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1750_bookmarksGet,"borogove.Client","bookmarksGet",0x13a4e3af,"borogove.Client.bookmarksGet","borogove/Client.hx",1750,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1752_bookmarksGet,"borogove.Client","bookmarksGet",0x13a4e3af,"borogove.Client.bookmarksGet","borogove/Client.hx",1752,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1762_bookmarksGet,"borogove.Client","bookmarksGet",0x13a4e3af,"borogove.Client.bookmarksGet","borogove/Client.hx",1762,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1770_bookmarksGet,"borogove.Client","bookmarksGet",0x13a4e3af,"borogove.Client.bookmarksGet","borogove/Client.hx",1770,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1781_bookmarksGet,"borogove.Client","bookmarksGet",0x13a4e3af,"borogove.Client.bookmarksGet","borogove/Client.hx",1781,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1733_bookmarksGet,"borogove.Client","bookmarksGet",0x13a4e3af,"borogove.Client.bookmarksGet","borogove/Client.hx",1733,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1796_sync,"borogove.Client","sync",0x221ab671,"borogove.Client.sync","borogove/Client.hx",1796,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1800_sync,"borogove.Client","sync",0x221ab671,"borogove.Client.sync","borogove/Client.hx",1800,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1805_onMAMJMI,"borogove.Client","onMAMJMI",0xf47696c2,"borogove.Client.onMAMJMI","borogove/Client.hx",1805,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1829_doSync,"borogove.Client","doSync",0x13e60d1c,"borogove.Client.doSync","borogove/Client.hx",1829,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1865_doSync,"borogove.Client","doSync",0x13e60d1c,"borogove.Client.doSync","borogove/Client.hx",1865,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1890_doSync,"borogove.Client","doSync",0x13e60d1c,"borogove.Client.doSync","borogove/Client.hx",1890,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1834_doSync,"borogove.Client","doSync",0x13e60d1c,"borogove.Client.doSync","borogove/Client.hx",1834,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1856_doSync,"borogove.Client","doSync",0x13e60d1c,"borogove.Client.doSync","borogove/Client.hx",1856,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1848_doSync,"borogove.Client","doSync",0x13e60d1c,"borogove.Client.doSync","borogove/Client.hx",1848,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1844_doSync,"borogove.Client","doSync",0x13e60d1c,"borogove.Client.doSync","borogove/Client.hx",1844,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1896_doSync,"borogove.Client","doSync",0x13e60d1c,"borogove.Client.doSync","borogove/Client.hx",1896,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1819_doSync,"borogove.Client","doSync",0x13e60d1c,"borogove.Client.doSync","borogove/Client.hx",1819,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1908_pingAllChannels,"borogove.Client","pingAllChannels",0x95268ee9,"borogove.Client.pingAllChannels","borogove/Client.hx",1908,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1915_joinAllChannels,"borogove.Client","joinAllChannels",0x16ca5071,"borogove.Client.joinAllChannels","borogove/Client.hx",1915,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1920_joinAllChannels,"borogove.Client","joinAllChannels",0x16ca5071,"borogove.Client.joinAllChannels","borogove/Client.hx",1920,0x8e157d85)
+HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_1924_joinAllChannels,"borogove.Client","joinAllChannels",0x16ca5071,"borogove.Client.joinAllChannels","borogove/Client.hx",1924,0x8e157d85)
 HX_LOCAL_STACK_FRAME(_hx_pos_a492fd7f83fa2dd6_59_boot,"borogove.Client","boot",0x16d68048,"borogove.Client.boot","borogove/Client.hx",59,0x8e157d85)
 namespace borogove{
 
 void Client_obj::__construct(::String accountId,::Dynamic persistence){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Client,_gthis) HXARGC(1)
             		 ::borogove::EventResult _hx_run( ::Dynamic data){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_140_new)
-HXLINE( 140)			return _gthis->trigger(HX_("status/offline",c6,eb,eb,54), ::Dynamic(::hx::Anon_obj::Create(0)));
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_141_new)
+HXLINE( 141)			return _gthis->trigger(HX_("status/offline",c6,eb,eb,54), ::Dynamic(::hx::Anon_obj::Create(0)));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::borogove::Client,_gthis,::Dynamic,persistence) HXARGC(1)
             		 ::borogove::EventResult _hx_run( ::Dynamic data){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_144_new)
-HXLINE( 145)			_gthis->token = ( (::String)(data->__Field(HX_("token",f9,82,2b,14),::hx::paccDynamic)) );
-HXLINE( 146)			::Dynamic persistence1 = persistence;
-HXDLIN( 146)			::String _hx_tmp = _gthis->jid->asBare()->asString();
-HXDLIN( 146)			::String _hx_tmp1;
-HXDLIN( 146)			::String tmp = _gthis->stream->clientId;
-HXDLIN( 146)			if (::hx::IsNotNull( tmp )) {
-HXLINE( 146)				_hx_tmp1 = tmp;
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_145_new)
+HXLINE( 146)			_gthis->token = ( (::String)(data->__Field(HX_("token",f9,82,2b,14),::hx::paccDynamic)) );
+HXLINE( 147)			::Dynamic persistence1 = persistence;
+HXDLIN( 147)			::String _hx_tmp = _gthis->jid->asBare()->asString();
+HXDLIN( 147)			::String _hx_tmp1;
+HXDLIN( 147)			::String tmp = _gthis->stream->clientId;
+HXDLIN( 147)			if (::hx::IsNotNull( tmp )) {
+HXLINE( 147)				_hx_tmp1 = tmp;
             			}
             			else {
-HXLINE( 146)				_hx_tmp1 = _gthis->jid->resource;
+HXLINE( 147)				_hx_tmp1 = _gthis->jid->resource;
             			}
-HXDLIN( 146)			::String _hx_tmp2 = _gthis->displayName();
-HXDLIN( 146)			::borogove::Persistence_obj::storeLogin(persistence1,_hx_tmp,_hx_tmp1,_hx_tmp2,_gthis->token);
-HXLINE( 147)			return ::borogove::EventResult_obj::EventHandled_dyn();
+HXDLIN( 147)			::String _hx_tmp2 = _gthis->displayName();
+HXDLIN( 147)			::borogove::Persistence_obj::storeLogin(persistence1,_hx_tmp,_hx_tmp1,_hx_tmp2,_gthis->token);
+HXLINE( 148)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_2, ::borogove::Client,_gthis) HXARGC(1)
             		 ::borogove::EventResult _hx_run(::Array< ::Dynamic> data){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_150_new)
-HXLINE( 151)			::Array< ::Dynamic> it = _gthis->chats;
-HXDLIN( 151)			bool result = false;
-HXDLIN( 151)			{
-HXLINE( 151)				int _g = 0;
-HXDLIN( 151)				while((_g < it->length)){
-HXLINE( 151)					 ::borogove::Chat x = it->__get(_g).StaticCast<  ::borogove::Chat >();
-HXDLIN( 151)					_g = (_g + 1);
-HXDLIN( 151)					bool _hx_tmp;
-HXDLIN( 151)					if ((x->uiState != 2)) {
-HXLINE( 151)						_hx_tmp = x->syncing();
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_151_new)
+HXLINE( 152)			::Array< ::Dynamic> it = _gthis->chats;
+HXDLIN( 152)			bool result = false;
+HXDLIN( 152)			{
+HXLINE( 152)				int _g = 0;
+HXDLIN( 152)				while((_g < it->length)){
+HXLINE( 152)					 ::borogove::Chat x = it->__get(_g).StaticCast<  ::borogove::Chat >();
+HXDLIN( 152)					_g = (_g + 1);
+HXDLIN( 152)					bool _hx_tmp;
+HXDLIN( 152)					if ((x->uiState != 2)) {
+HXLINE( 152)						_hx_tmp = x->syncing();
             					}
             					else {
-HXLINE( 151)						_hx_tmp = false;
+HXLINE( 152)						_hx_tmp = false;
             					}
-HXDLIN( 151)					if (_hx_tmp) {
-HXLINE( 151)						result = true;
-HXDLIN( 151)						goto _hx_goto_0;
+HXDLIN( 152)					if (_hx_tmp) {
+HXLINE( 152)						result = true;
+HXDLIN( 152)						goto _hx_goto_0;
             					}
             				}
             				_hx_goto_0:;
             			}
-HXDLIN( 151)			_gthis->stream->emitSMupdates = !(result);
-HXLINE( 152)			return ::borogove::EventResult_obj::EventHandled_dyn();
+HXDLIN( 152)			_gthis->stream->emitSMupdates = !(result);
+HXLINE( 153)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_3, ::borogove::Client,_gthis,::Dynamic,persistence) HXARGC(1)
             		 ::borogove::EventResult _hx_run( ::Dynamic data){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_155_new)
-HXLINE( 156)			::Dynamic persistence1 = persistence;
-HXDLIN( 156)			::String _hx_tmp = _gthis->accountId();
-HXDLIN( 156)			::Array< unsigned char > _hx_tmp1;
-HXDLIN( 156)			if (_gthis->stream->emitSMupdates) {
-HXLINE( 156)				_hx_tmp1 = ( (::Array< unsigned char >)(data->__Field(HX_("sm",9a,64,00,00),::hx::paccDynamic)) );
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_156_new)
+HXLINE( 157)			::Dynamic persistence1 = persistence;
+HXDLIN( 157)			::String _hx_tmp = _gthis->accountId();
+HXDLIN( 157)			::Array< unsigned char > _hx_tmp1;
+HXDLIN( 157)			if (_gthis->stream->emitSMupdates) {
+HXLINE( 157)				_hx_tmp1 = ( (::Array< unsigned char >)(data->__Field(HX_("sm",9a,64,00,00),::hx::paccDynamic)) );
             			}
             			else {
-HXLINE( 156)				_hx_tmp1 = null();
+HXLINE( 157)				_hx_tmp1 = null();
             			}
-HXDLIN( 156)			::borogove::Persistence_obj::storeStreamManagement(persistence1,_hx_tmp,_hx_tmp1);
-HXLINE( 157)			return ::borogove::EventResult_obj::EventHandled_dyn();
+HXDLIN( 157)			::borogove::Persistence_obj::storeStreamManagement(persistence1,_hx_tmp,_hx_tmp1);
+HXLINE( 158)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
@@ -640,23 +643,23 @@ HXLINE( 157)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		 ::borogove::EventResult _hx_run( ::Dynamic data){
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_4, ::borogove::Client,_gthis) HXARGC(1)
             			void _hx_run( ::borogove::ChatMessage m){
-            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_166_new)
-HXLINE( 166)				_gthis->notifyMessageHandlers(m,3);
+            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_167_new)
+HXLINE( 167)				_gthis->notifyMessageHandlers(m,3);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_5) HXARGC(1)
             			::Dynamic _hx_run( ::Dynamic _){
-            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_166_new)
-HXLINE( 166)				return null();
+            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_167_new)
+HXLINE( 167)				return null();
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_160_new)
-HXLINE( 161)			::Dynamic persistence1 = persistence;
-HXLINE( 162)			::String _hx_tmp = _gthis->accountId();
-HXLINE( 161)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::updateMessageStatus(persistence1,_hx_tmp, ::Dynamic(data->__Field(HX_("id",db,5b,00,00),::hx::paccDynamic)),1,null()), ::Dynamic(new _hx_Closure_4(_gthis)), ::Dynamic(new _hx_Closure_5()));
-HXLINE( 167)			return ::borogove::EventResult_obj::EventHandled_dyn();
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_161_new)
+HXLINE( 162)			::Dynamic persistence1 = persistence;
+HXLINE( 163)			::String _hx_tmp = _gthis->accountId();
+HXLINE( 162)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::updateMessageStatus(persistence1,_hx_tmp, ::Dynamic(data->__Field(HX_("id",db,5b,00,00),::hx::paccDynamic)),1,null()), ::Dynamic(new _hx_Closure_4(_gthis)), ::Dynamic(new _hx_Closure_5()));
+HXLINE( 168)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
@@ -664,106 +667,106 @@ HXLINE( 167)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		 ::borogove::EventResult _hx_run( ::Dynamic data){
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_7, ::borogove::Client,_gthis) HXARGC(1)
             			void _hx_run( ::borogove::ChatMessage m){
-            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_176_new)
-HXLINE( 176)				_gthis->notifyMessageHandlers(m,3);
+            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_177_new)
+HXLINE( 177)				_gthis->notifyMessageHandlers(m,3);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_8) HXARGC(1)
             			::Dynamic _hx_run( ::Dynamic _){
-            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_176_new)
-HXLINE( 176)				return null();
+            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_177_new)
+HXLINE( 177)				return null();
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_170_new)
-HXLINE( 171)			::Dynamic persistence1 = persistence;
-HXLINE( 172)			::String _hx_tmp = _gthis->accountId();
-HXLINE( 171)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::updateMessageStatus(persistence1,_hx_tmp, ::Dynamic(data->__Field(HX_("id",db,5b,00,00),::hx::paccDynamic)),3,null()), ::Dynamic(new _hx_Closure_7(_gthis)), ::Dynamic(new _hx_Closure_8()));
-HXLINE( 177)			return ::borogove::EventResult_obj::EventHandled_dyn();
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_171_new)
+HXLINE( 172)			::Dynamic persistence1 = persistence;
+HXLINE( 173)			::String _hx_tmp = _gthis->accountId();
+HXLINE( 172)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::updateMessageStatus(persistence1,_hx_tmp, ::Dynamic(data->__Field(HX_("id",db,5b,00,00),::hx::paccDynamic)),3,null()), ::Dynamic(new _hx_Closure_7(_gthis)), ::Dynamic(new _hx_Closure_8()));
+HXLINE( 178)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_10, ::borogove::Client,_gthis) HXARGC(1)
             		 ::borogove::EventResult _hx_run( ::Dynamic event){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_180_new)
-HXLINE( 181)			 ::borogove::Stanza stanza = ( ( ::borogove::Stanza)(event->__Field(HX_("stanza",f5,5d,f7,05),::hx::paccDynamic)) );
-HXLINE( 183)			if (::hx::IsNotNull( stanza->getChild(HX_("result",dd,68,84,08),HX_("urn:xmpp:mam:2",f5,ef,8c,da)) )) {
-HXLINE( 185)				return ::borogove::EventResult_obj::EventUnhandled_dyn();
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_181_new)
+HXLINE( 182)			 ::borogove::Stanza stanza = ( ( ::borogove::Stanza)(event->__Field(HX_("stanza",f5,5d,f7,05),::hx::paccDynamic)) );
+HXLINE( 184)			if (::hx::IsNotNull( stanza->getChild(HX_("result",dd,68,84,08),HX_("urn:xmpp:mam:2",f5,ef,8c,da)) )) {
+HXLINE( 186)				return ::borogove::EventResult_obj::EventUnhandled_dyn();
             			}
-HXLINE( 188)			 ::borogove::JID from;
-HXDLIN( 188)			if (::hx::IsNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
-HXLINE( 188)				from = null();
+HXLINE( 189)			 ::borogove::JID from;
+HXDLIN( 189)			if (::hx::IsNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
+HXLINE( 189)				from = null();
             			}
             			else {
-HXLINE( 188)				from = ::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
+HXLINE( 189)				from = ::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
             			}
-HXLINE( 189)			 ::borogove::Stanza fwd = null();
-HXLINE( 190)			bool _hx_tmp;
-HXDLIN( 190)			if (::hx::IsNotNull( from )) {
-HXLINE( 190)				::String _hx_tmp1 = from->asBare()->asString();
-HXDLIN( 190)				_hx_tmp = (_hx_tmp1 == _gthis->accountId());
+HXLINE( 190)			 ::borogove::Stanza fwd = null();
+HXLINE( 191)			bool _hx_tmp;
+HXDLIN( 191)			if (::hx::IsNotNull( from )) {
+HXLINE( 191)				::String _hx_tmp1 = from->asBare()->asString();
+HXDLIN( 191)				_hx_tmp = (_hx_tmp1 == _gthis->accountId());
             			}
             			else {
-HXLINE( 190)				_hx_tmp = false;
+HXLINE( 191)				_hx_tmp = false;
             			}
-HXDLIN( 190)			if (_hx_tmp) {
-HXLINE( 191)				 ::borogove::Stanza carbon = stanza->getChild(HX_("received",21,45,fd,e2),HX_("urn:xmpp:carbons:2",02,86,9e,df));
-HXLINE( 192)				if (::hx::IsNull( carbon )) {
-HXLINE( 192)					carbon = stanza->getChild(HX_("sent",58,8d,50,4c),HX_("urn:xmpp:carbons:2",02,86,9e,df));
+HXDLIN( 191)			if (_hx_tmp) {
+HXLINE( 192)				 ::borogove::Stanza carbon = stanza->getChild(HX_("received",21,45,fd,e2),HX_("urn:xmpp:carbons:2",02,86,9e,df));
+HXLINE( 193)				if (::hx::IsNull( carbon )) {
+HXLINE( 193)					carbon = stanza->getChild(HX_("sent",58,8d,50,4c),HX_("urn:xmpp:carbons:2",02,86,9e,df));
             				}
-HXLINE( 193)				if (::hx::IsNotNull( carbon )) {
-HXLINE( 194)					 ::borogove::Stanza tmp = carbon->getChild(HX_("forwarded",64,f5,9a,17),HX_("urn:xmpp:forward:0",1f,ec,b0,d1));
-HXDLIN( 194)					if (::hx::IsNotNull( tmp )) {
-HXLINE( 194)						fwd = tmp->getFirstChild();
+HXLINE( 194)				if (::hx::IsNotNull( carbon )) {
+HXLINE( 195)					 ::borogove::Stanza tmp = carbon->getChild(HX_("forwarded",64,f5,9a,17),HX_("urn:xmpp:forward:0",1f,ec,b0,d1));
+HXDLIN( 195)					if (::hx::IsNotNull( tmp )) {
+HXLINE( 195)						fwd = tmp->getFirstChild();
             					}
             					else {
-HXLINE( 194)						fwd = null();
+HXLINE( 195)						fwd = null();
             					}
             				}
             			}
-HXLINE( 208)			_gthis->processLiveMessage(stanza,fwd,null());
-HXLINE( 209)			return ::borogove::EventResult_obj::EventHandled_dyn();
+HXLINE( 209)			_gthis->processLiveMessage(stanza,fwd,null());
+HXLINE( 210)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_11, ::borogove::Client,_gthis) HXARGC(1)
             		 ::borogove::IqResult _hx_run( ::borogove::Stanza stanza){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_213_new)
-HXLINE( 214)			 ::borogove::JID from;
-HXDLIN( 214)			if (::hx::IsNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
-HXLINE( 214)				from = null();
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_214_new)
+HXLINE( 215)			 ::borogove::JID from;
+HXDLIN( 215)			if (::hx::IsNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
+HXLINE( 215)				from = null();
             			}
             			else {
-HXLINE( 214)				from = ::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
-            			}
-HXLINE( 215)			 ::borogove::Stanza jingle = stanza->getChild(HX_("jingle",31,27,eb,1f),HX_("urn:xmpp:jingle:1",44,c4,fe,f7));
-HXLINE( 216)			 ::borogove::Client _gthis1 = _gthis;
-HXDLIN( 216)			 ::borogove::DirectChat chat = _gthis1->getDirectChat(from->asBare()->asString(),null());
-HXLINE( 217)			::Dynamic this1 = chat->jingleSessions;
-HXDLIN( 217)			::Dynamic session = ( ( ::haxe::ds::StringMap)(this1) )->get(( (::String)(::Reflect_obj::field(jingle->attr,HX_("sid",0e,9f,57,00))) ));
-HXLINE( 219)			if ((( (::String)(::Reflect_obj::field(jingle->attr,HX_("action",b6,3b,46,16))) ) == HX_("session-initiate",70,2d,30,f7))) {
-HXLINE( 220)				if (::hx::IsNotNull( session )) {
-HXLINE( 221)					try {
+HXLINE( 215)				from = ::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
+            			}
+HXLINE( 216)			 ::borogove::Stanza jingle = stanza->getChild(HX_("jingle",31,27,eb,1f),HX_("urn:xmpp:jingle:1",44,c4,fe,f7));
+HXLINE( 217)			 ::borogove::Client _gthis1 = _gthis;
+HXDLIN( 217)			 ::borogove::DirectChat chat = _gthis1->getDirectChat(from->asBare()->asString(),null());
+HXLINE( 218)			::Dynamic this1 = chat->jingleSessions;
+HXDLIN( 218)			::Dynamic session = ( ( ::haxe::ds::StringMap)(this1) )->get(( (::String)(::Reflect_obj::field(jingle->attr,HX_("sid",0e,9f,57,00))) ));
+HXLINE( 220)			if ((( (::String)(::Reflect_obj::field(jingle->attr,HX_("action",b6,3b,46,16))) ) == HX_("session-initiate",70,2d,30,f7))) {
+HXLINE( 221)				if (::hx::IsNotNull( session )) {
+HXLINE( 222)					try {
             						HX_STACK_CATCHABLE( ::Dynamic, 0);
-HXLINE( 222)						::Dynamic this2 = chat->jingleSessions;
-HXDLIN( 222)						::String key = ::borogove::calls::Session_obj::get_sid(session);
-HXDLIN( 222)						( ( ::haxe::ds::StringMap)(this2) )->set(key,::borogove::calls::Session_obj::initiate(session,stanza));
+HXLINE( 223)						::Dynamic this2 = chat->jingleSessions;
+HXDLIN( 223)						::String key = ::borogove::calls::Session_obj::get_sid(session);
+HXDLIN( 223)						( ( ::haxe::ds::StringMap)(this2) )->set(key,::borogove::calls::Session_obj::initiate(session,stanza));
             					} catch( ::Dynamic _hx_e) {
             						if (_hx_e.IsClass<  ::Dynamic >() ){
             							HX_STACK_BEGIN_CATCH
             							 ::Dynamic _g = _hx_e;
-HXLINE( 223)							 ::haxe::Exception _g1 = ::haxe::Exception_obj::caught(_g);
-HXDLIN( 223)							{
-HXLINE( 224)								::haxe::Log_obj::trace(HX_("Bad session-inititate",c5,d7,64,3f), ::Dynamic(::hx::Anon_obj::Create(5)
+HXLINE( 224)							 ::haxe::Exception _g1 = ::haxe::Exception_obj::caught(_g);
+HXDLIN( 224)							{
+HXLINE( 225)								::haxe::Log_obj::trace(HX_("Bad session-inititate",c5,d7,64,3f), ::Dynamic(::hx::Anon_obj::Create(5)
             									->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Client",18,dc,e6,c0))
             									->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,_g1))
             									->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("new",60,d0,53,00))
             									->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Client.hx",85,7d,15,8e))
-            									->setFixed(4,HX_("lineNumber",dd,81,22,76),224)));
-HXLINE( 225)								{
-HXLINE( 225)									::Dynamic this3 = chat->jingleSessions;
-HXDLIN( 225)									( ( ::haxe::ds::StringMap)(this3) )->remove(::borogove::calls::Session_obj::get_sid(session));
+            									->setFixed(4,HX_("lineNumber",dd,81,22,76),225)));
+HXLINE( 226)								{
+HXLINE( 226)									::Dynamic this3 = chat->jingleSessions;
+HXDLIN( 226)									( ( ::haxe::ds::StringMap)(this3) )->remove(::borogove::calls::Session_obj::get_sid(session));
             								}
             							}
             						}
@@ -773,513 +776,531 @@ HXDLIN( 225)									( ( ::haxe::ds::StringMap)(this3) )->remove(::borogove::cal
             					}
             				}
             				else {
-HXLINE( 228)					 ::borogove::calls::InitiatedSession newSession = ::borogove::calls::InitiatedSession_obj::fromSessionInitiate(_gthis,stanza);
-HXLINE( 229)					{
-HXLINE( 229)						::Dynamic this4 = chat->jingleSessions;
-HXDLIN( 229)						( ( ::haxe::ds::StringMap)(this4) )->set(newSession->get_sid(),newSession);
+HXLINE( 229)					 ::borogove::calls::InitiatedSession newSession = ::borogove::calls::InitiatedSession_obj::fromSessionInitiate(_gthis,stanza);
+HXLINE( 230)					{
+HXLINE( 230)						::Dynamic this4 = chat->jingleSessions;
+HXDLIN( 230)						( ( ::haxe::ds::StringMap)(this4) )->set(newSession->get_sid(),newSession);
             					}
-HXLINE( 230)					_gthis->chatActivity(chat,null());
-HXLINE( 231)					newSession->ring();
+HXLINE( 231)					_gthis->chatActivity(chat,null());
+HXLINE( 232)					newSession->ring();
             				}
             			}
-HXLINE( 235)			bool _hx_tmp;
-HXDLIN( 235)			if (::hx::IsNotNull( session )) {
-HXLINE( 235)				_hx_tmp = (( (::String)(::Reflect_obj::field(jingle->attr,HX_("action",b6,3b,46,16))) ) == HX_("session-accept",5f,92,e7,a8));
+HXLINE( 236)			bool _hx_tmp;
+HXDLIN( 236)			if (::hx::IsNotNull( session )) {
+HXLINE( 236)				_hx_tmp = (( (::String)(::Reflect_obj::field(jingle->attr,HX_("action",b6,3b,46,16))) ) == HX_("session-accept",5f,92,e7,a8));
             			}
             			else {
-HXLINE( 235)				_hx_tmp = false;
+HXLINE( 236)				_hx_tmp = false;
             			}
-HXDLIN( 235)			if (_hx_tmp) {
-HXLINE( 236)				try {
+HXDLIN( 236)			if (_hx_tmp) {
+HXLINE( 237)				try {
             					HX_STACK_CATCHABLE( ::Dynamic, 0);
-HXLINE( 237)					::Dynamic this5 = chat->jingleSessions;
-HXDLIN( 237)					::String key1 = ::borogove::calls::Session_obj::get_sid(session);
-HXDLIN( 237)					( ( ::haxe::ds::StringMap)(this5) )->set(key1,::borogove::calls::Session_obj::initiate(session,stanza));
+HXLINE( 238)					::Dynamic this5 = chat->jingleSessions;
+HXDLIN( 238)					::String key1 = ::borogove::calls::Session_obj::get_sid(session);
+HXDLIN( 238)					( ( ::haxe::ds::StringMap)(this5) )->set(key1,::borogove::calls::Session_obj::initiate(session,stanza));
             				} catch( ::Dynamic _hx_e) {
             					if (_hx_e.IsClass<  ::Dynamic >() ){
             						HX_STACK_BEGIN_CATCH
             						 ::Dynamic _g2 = _hx_e;
-HXLINE( 238)						 ::haxe::Exception _g3 = ::haxe::Exception_obj::caught(_g2);
-HXLINE( 239)						::haxe::Log_obj::trace(HX_("session-accept failed",5e,a5,74,6b), ::Dynamic(::hx::Anon_obj::Create(5)
+HXLINE( 239)						 ::haxe::Exception _g3 = ::haxe::Exception_obj::caught(_g2);
+HXLINE( 240)						::haxe::Log_obj::trace(HX_("session-accept failed",5e,a5,74,6b), ::Dynamic(::hx::Anon_obj::Create(5)
             							->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Client",18,dc,e6,c0))
             							->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,_g3))
             							->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("new",60,d0,53,00))
             							->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Client.hx",85,7d,15,8e))
-            							->setFixed(4,HX_("lineNumber",dd,81,22,76),239)));
+            							->setFixed(4,HX_("lineNumber",dd,81,22,76),240)));
             					}
             					else {
             						HX_STACK_DO_THROW(_hx_e);
             					}
             				}
             			}
-HXLINE( 243)			bool _hx_tmp1;
-HXDLIN( 243)			if (::hx::IsNotNull( session )) {
-HXLINE( 243)				_hx_tmp1 = (( (::String)(::Reflect_obj::field(jingle->attr,HX_("action",b6,3b,46,16))) ) == HX_("session-terminate",6a,23,dc,12));
+HXLINE( 244)			bool _hx_tmp1;
+HXDLIN( 244)			if (::hx::IsNotNull( session )) {
+HXLINE( 244)				_hx_tmp1 = (( (::String)(::Reflect_obj::field(jingle->attr,HX_("action",b6,3b,46,16))) ) == HX_("session-terminate",6a,23,dc,12));
             			}
             			else {
-HXLINE( 243)				_hx_tmp1 = false;
+HXLINE( 244)				_hx_tmp1 = false;
             			}
-HXDLIN( 243)			if (_hx_tmp1) {
-HXLINE( 244)				::borogove::calls::Session_obj::terminate(session);
-HXLINE( 245)				{
-HXLINE( 245)					::Dynamic this6 = chat->jingleSessions;
-HXDLIN( 245)					( ( ::haxe::ds::StringMap)(this6) )->remove(( (::String)(::Reflect_obj::field(jingle->attr,HX_("sid",0e,9f,57,00))) ));
+HXDLIN( 244)			if (_hx_tmp1) {
+HXLINE( 245)				::borogove::calls::Session_obj::terminate(session);
+HXLINE( 246)				{
+HXLINE( 246)					::Dynamic this6 = chat->jingleSessions;
+HXDLIN( 246)					( ( ::haxe::ds::StringMap)(this6) )->remove(( (::String)(::Reflect_obj::field(jingle->attr,HX_("sid",0e,9f,57,00))) ));
             				}
             			}
-HXLINE( 248)			bool _hx_tmp2;
-HXDLIN( 248)			if (::hx::IsNotNull( session )) {
-HXLINE( 248)				_hx_tmp2 = (( (::String)(::Reflect_obj::field(jingle->attr,HX_("action",b6,3b,46,16))) ) == HX_("content-add",cd,a9,a1,10));
+HXLINE( 249)			bool _hx_tmp2;
+HXDLIN( 249)			if (::hx::IsNotNull( session )) {
+HXLINE( 249)				_hx_tmp2 = (( (::String)(::Reflect_obj::field(jingle->attr,HX_("action",b6,3b,46,16))) ) == HX_("content-add",cd,a9,a1,10));
             			}
             			else {
-HXLINE( 248)				_hx_tmp2 = false;
+HXLINE( 249)				_hx_tmp2 = false;
             			}
-HXDLIN( 248)			if (_hx_tmp2) {
-HXLINE( 249)				::borogove::calls::Session_obj::contentAdd(session,stanza);
+HXDLIN( 249)			if (_hx_tmp2) {
+HXLINE( 250)				::borogove::calls::Session_obj::contentAdd(session,stanza);
             			}
-HXLINE( 252)			bool _hx_tmp3;
-HXDLIN( 252)			if (::hx::IsNotNull( session )) {
-HXLINE( 252)				_hx_tmp3 = (( (::String)(::Reflect_obj::field(jingle->attr,HX_("action",b6,3b,46,16))) ) == HX_("content-accept",dc,ee,cb,f2));
+HXLINE( 253)			bool _hx_tmp3;
+HXDLIN( 253)			if (::hx::IsNotNull( session )) {
+HXLINE( 253)				_hx_tmp3 = (( (::String)(::Reflect_obj::field(jingle->attr,HX_("action",b6,3b,46,16))) ) == HX_("content-accept",dc,ee,cb,f2));
             			}
             			else {
-HXLINE( 252)				_hx_tmp3 = false;
+HXLINE( 253)				_hx_tmp3 = false;
             			}
-HXDLIN( 252)			if (_hx_tmp3) {
-HXLINE( 253)				::borogove::calls::Session_obj::contentAccept(session,stanza);
+HXDLIN( 253)			if (_hx_tmp3) {
+HXLINE( 254)				::borogove::calls::Session_obj::contentAccept(session,stanza);
             			}
-HXLINE( 256)			bool _hx_tmp4;
-HXDLIN( 256)			if (::hx::IsNotNull( session )) {
-HXLINE( 256)				_hx_tmp4 = (( (::String)(::Reflect_obj::field(jingle->attr,HX_("action",b6,3b,46,16))) ) == HX_("transport-info",d2,9e,05,1c));
+HXLINE( 257)			bool _hx_tmp4;
+HXDLIN( 257)			if (::hx::IsNotNull( session )) {
+HXLINE( 257)				_hx_tmp4 = (( (::String)(::Reflect_obj::field(jingle->attr,HX_("action",b6,3b,46,16))) ) == HX_("transport-info",d2,9e,05,1c));
             			}
             			else {
-HXLINE( 256)				_hx_tmp4 = false;
+HXLINE( 257)				_hx_tmp4 = false;
             			}
-HXDLIN( 256)			if (_hx_tmp4) {
-HXLINE( 257)				::borogove::calls::Session_obj::transportInfo(session,stanza);
+HXDLIN( 257)			if (_hx_tmp4) {
+HXLINE( 258)				::borogove::calls::Session_obj::transportInfo(session,stanza);
             			}
-HXLINE( 261)			return ::borogove::IqResult_obj::IqResult_dyn();
+HXLINE( 262)			return ::borogove::IqResult_obj::IqResult_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_12, ::borogove::Client,_gthis) HXARGC(1)
             		 ::borogove::IqResult _hx_run( ::borogove::Stanza stanza){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_266_new)
-HXLINE( 266)			return ::borogove::IqResult_obj::IqResultElement(_gthis->caps->discoReply());
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_267_new)
+HXLINE( 267)			return ::borogove::IqResult_obj::IqResultElement(_gthis->caps->discoReply());
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_13, ::borogove::Client,_gthis,::Dynamic,persistence) HXARGC(1)
             		 ::borogove::IqResult _hx_run( ::borogove::Stanza stanza){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_269_new)
-HXLINE( 271)			bool _hx_tmp;
-HXDLIN( 271)			if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
-HXLINE( 272)				::String _hx_tmp1 = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) );
-HXLINE( 271)				_hx_tmp = (_hx_tmp1 != _gthis->jid->domain);
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_270_new)
+HXLINE( 272)			bool _hx_tmp;
+HXDLIN( 272)			if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
+HXLINE( 273)				::String _hx_tmp1 = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) );
+HXLINE( 272)				_hx_tmp = (_hx_tmp1 != _gthis->jid->domain);
             			}
             			else {
-HXLINE( 271)				_hx_tmp = false;
-            			}
-HXLINE( 270)			if (_hx_tmp) {
-HXLINE( 274)				return ::borogove::IqResult_obj::IqNoResult_dyn();
-            			}
-HXLINE( 277)			 ::borogove::queries::RosterGet roster =  ::borogove::queries::RosterGet_obj::__alloc( HX_CTX ,null());
-HXLINE( 278)			roster->handleResponse(stanza);
-HXLINE( 279)			::Array< ::Dynamic> items = roster->getResult();
-HXLINE( 280)			if ((items->length == 0)) {
-HXLINE( 280)				return ::borogove::IqResult_obj::IqNoResult_dyn();
-            			}
-HXLINE( 282)			::Array< ::Dynamic> chatsToUpdate = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 283)			{
-HXLINE( 283)				int _g = 0;
-HXDLIN( 283)				while((_g < items->length)){
-HXLINE( 283)					 ::Dynamic item = items->__get(_g);
-HXDLIN( 283)					_g = (_g + 1);
-HXLINE( 284)					if (::hx::IsNotEq( item->__Field(HX_("subscription",1d,ff,00,36),::hx::paccDynamic),HX_("remove",44,9c,88,04) )) {
-HXLINE( 285)						 ::borogove::DirectChat chat = _gthis->getDirectChat(( (::String)(item->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)) ),false);
-HXLINE( 286)						chat->updateFromRoster(item);
-HXLINE( 287)						chatsToUpdate->push(chat);
+HXLINE( 272)				_hx_tmp = false;
+            			}
+HXLINE( 271)			if (_hx_tmp) {
+HXLINE( 275)				return ::borogove::IqResult_obj::IqNoResult_dyn();
+            			}
+HXLINE( 278)			 ::borogove::queries::RosterGet roster =  ::borogove::queries::RosterGet_obj::__alloc( HX_CTX ,null());
+HXLINE( 279)			roster->handleResponse(stanza);
+HXLINE( 280)			::Array< ::Dynamic> items = roster->getResult();
+HXLINE( 281)			if ((items->length == 0)) {
+HXLINE( 281)				return ::borogove::IqResult_obj::IqNoResult_dyn();
+            			}
+HXLINE( 283)			::Array< ::Dynamic> chatsToUpdate = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 284)			{
+HXLINE( 284)				int _g = 0;
+HXDLIN( 284)				while((_g < items->length)){
+HXLINE( 284)					 ::Dynamic item = items->__get(_g);
+HXDLIN( 284)					_g = (_g + 1);
+HXLINE( 285)					if (::hx::IsNotEq( item->__Field(HX_("subscription",1d,ff,00,36),::hx::paccDynamic),HX_("remove",44,9c,88,04) )) {
+HXLINE( 286)						 ::borogove::DirectChat chat = _gthis->getDirectChat(( (::String)(item->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)) ),false);
+HXLINE( 287)						chat->updateFromRoster(item);
+HXLINE( 288)						chatsToUpdate->push(chat);
             					}
             				}
             			}
-HXLINE( 290)			::Dynamic persistence1 = persistence;
-HXDLIN( 290)			::borogove::Persistence_obj::storeChats(persistence1,_gthis->accountId(),chatsToUpdate);
-HXLINE( 291)			_gthis->trigger(HX_("chats/update",3d,8e,1d,14),chatsToUpdate);
-HXLINE( 293)			return ::borogove::IqResult_obj::IqResult_dyn();
+HXLINE( 291)			::Dynamic persistence1 = persistence;
+HXDLIN( 291)			::borogove::Persistence_obj::storeChats(persistence1,_gthis->accountId(),chatsToUpdate);
+HXLINE( 292)			_gthis->trigger(HX_("chats/update",3d,8e,1d,14),chatsToUpdate);
+HXLINE( 294)			return ::borogove::IqResult_obj::IqResult_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_14, ::borogove::Client,_gthis) HXARGC(1)
             		 ::borogove::IqResult _hx_run( ::borogove::Stanza stanza){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_296_new)
-HXLINE( 298)			bool _hx_tmp;
-HXDLIN( 298)			if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
-HXLINE( 299)				::String _hx_tmp1 = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) );
-HXLINE( 298)				_hx_tmp = (_hx_tmp1 != _gthis->jid->domain);
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_297_new)
+HXLINE( 299)			bool _hx_tmp;
+HXDLIN( 299)			if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
+HXLINE( 300)				::String _hx_tmp1 = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) );
+HXLINE( 299)				_hx_tmp = (_hx_tmp1 != _gthis->jid->domain);
             			}
             			else {
-HXLINE( 298)				_hx_tmp = false;
+HXLINE( 299)				_hx_tmp = false;
             			}
-HXLINE( 297)			if (_hx_tmp) {
-HXLINE( 301)				return ::borogove::IqResult_obj::IqNoResult_dyn();
+HXLINE( 298)			if (_hx_tmp) {
+HXLINE( 302)				return ::borogove::IqResult_obj::IqNoResult_dyn();
             			}
-HXLINE( 304)			{
-HXLINE( 304)				int _g = 0;
-HXDLIN( 304)				::Array< ::Dynamic> _g1;
-HXDLIN( 304)				 ::borogove::Stanza tmp = stanza->getChild(HX_("block",4d,75,fc,b4),HX_("urn:xmpp:blocking",d1,a1,46,c3));
-HXDLIN( 304)				::Array< ::Dynamic> tmp1;
-HXDLIN( 304)				if (::hx::IsNotNull( tmp )) {
-HXLINE( 304)					tmp1 = tmp->allTags(HX_("item",13,c5,bf,45),null());
+HXLINE( 305)			{
+HXLINE( 305)				int _g = 0;
+HXDLIN( 305)				::Array< ::Dynamic> _g1;
+HXDLIN( 305)				 ::borogove::Stanza tmp = stanza->getChild(HX_("block",4d,75,fc,b4),HX_("urn:xmpp:blocking",d1,a1,46,c3));
+HXDLIN( 305)				::Array< ::Dynamic> tmp1;
+HXDLIN( 305)				if (::hx::IsNotNull( tmp )) {
+HXLINE( 305)					tmp1 = tmp->allTags(HX_("item",13,c5,bf,45),null());
             				}
             				else {
-HXLINE( 304)					tmp1 = null();
+HXLINE( 305)					tmp1 = null();
             				}
-HXDLIN( 304)				if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 304)					_g1 = tmp1;
+HXDLIN( 305)				if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 305)					_g1 = tmp1;
             				}
             				else {
-HXLINE( 304)					_g1 = ::Array_obj< ::Dynamic>::__new(0);
-            				}
-HXDLIN( 304)				while((_g < _g1->length)){
-HXLINE( 304)					 ::borogove::Stanza item = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
-HXDLIN( 304)					_g = (_g + 1);
-HXLINE( 305)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(item->attr,HX_("jid",c5,ca,50,00))) ) )) {
-HXLINE( 305)						 ::borogove::Client _gthis1 = _gthis;
-HXDLIN( 305)						_gthis1->serverBlocked(( (::String)(::Reflect_obj::field(item->attr,HX_("jid",c5,ca,50,00))) ));
+HXLINE( 305)					_g1 = ::Array_obj< ::Dynamic>::__new(0);
+            				}
+HXDLIN( 305)				while((_g < _g1->length)){
+HXLINE( 305)					 ::borogove::Stanza item = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
+HXDLIN( 305)					_g = (_g + 1);
+HXLINE( 306)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(item->attr,HX_("jid",c5,ca,50,00))) ) )) {
+HXLINE( 306)						 ::borogove::Client _gthis1 = _gthis;
+HXDLIN( 306)						_gthis1->serverBlocked(( (::String)(::Reflect_obj::field(item->attr,HX_("jid",c5,ca,50,00))) ));
             					}
             				}
             			}
-HXLINE( 308)			return ::borogove::IqResult_obj::IqResult_dyn();
+HXLINE( 309)			return ::borogove::IqResult_obj::IqResult_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_15, ::borogove::Client,_gthis) HXARGC(1)
             		 ::borogove::IqResult _hx_run( ::borogove::Stanza stanza){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_311_new)
-HXLINE( 313)			bool _hx_tmp;
-HXDLIN( 313)			if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
-HXLINE( 314)				::String _hx_tmp1 = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) );
-HXLINE( 313)				_hx_tmp = (_hx_tmp1 != _gthis->jid->domain);
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_312_new)
+HXLINE( 314)			bool _hx_tmp;
+HXDLIN( 314)			if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
+HXLINE( 315)				::String _hx_tmp1 = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) );
+HXLINE( 314)				_hx_tmp = (_hx_tmp1 != _gthis->jid->domain);
             			}
             			else {
-HXLINE( 313)				_hx_tmp = false;
+HXLINE( 314)				_hx_tmp = false;
             			}
-HXLINE( 312)			if (_hx_tmp) {
-HXLINE( 316)				return ::borogove::IqResult_obj::IqNoResult_dyn();
+HXLINE( 313)			if (_hx_tmp) {
+HXLINE( 317)				return ::borogove::IqResult_obj::IqNoResult_dyn();
             			}
-HXLINE( 319)			 ::borogove::Stanza tmp = stanza->getChild(HX_("unblock",54,6c,8d,b1),HX_("urn:xmpp:blocking",d1,a1,46,c3));
-HXDLIN( 319)			::Array< ::Dynamic> unblocks;
-HXDLIN( 319)			if (::hx::IsNotNull( tmp )) {
-HXLINE( 319)				unblocks = tmp->allTags(HX_("item",13,c5,bf,45),null());
+HXLINE( 320)			 ::borogove::Stanza tmp = stanza->getChild(HX_("unblock",54,6c,8d,b1),HX_("urn:xmpp:blocking",d1,a1,46,c3));
+HXDLIN( 320)			::Array< ::Dynamic> unblocks;
+HXDLIN( 320)			if (::hx::IsNotNull( tmp )) {
+HXLINE( 320)				unblocks = tmp->allTags(HX_("item",13,c5,bf,45),null());
             			}
             			else {
-HXLINE( 319)				unblocks = null();
-            			}
-HXLINE( 320)			if (::hx::IsNull( unblocks )) {
-HXLINE( 322)				int _g = 0;
-HXDLIN( 322)				::Array< ::Dynamic> _g1 = _gthis->chats;
-HXDLIN( 322)				while((_g < _g1->length)){
-HXLINE( 322)					 ::borogove::Chat chat = _g1->__get(_g).StaticCast<  ::borogove::Chat >();
-HXDLIN( 322)					_g = (_g + 1);
-HXLINE( 323)					if (chat->isBlocked) {
-HXLINE( 323)						chat->unblock(false);
+HXLINE( 320)				unblocks = null();
+            			}
+HXLINE( 321)			if (::hx::IsNull( unblocks )) {
+HXLINE( 323)				int _g = 0;
+HXDLIN( 323)				::Array< ::Dynamic> _g1 = _gthis->chats;
+HXDLIN( 323)				while((_g < _g1->length)){
+HXLINE( 323)					 ::borogove::Chat chat = _g1->__get(_g).StaticCast<  ::borogove::Chat >();
+HXDLIN( 323)					_g = (_g + 1);
+HXLINE( 324)					if (chat->isBlocked) {
+HXLINE( 324)						chat->unblock(false);
             					}
             				}
             			}
             			else {
-HXLINE( 326)				int _g2 = 0;
-HXDLIN( 326)				while((_g2 < unblocks->length)){
-HXLINE( 326)					 ::borogove::Stanza item = unblocks->__get(_g2).StaticCast<  ::borogove::Stanza >();
-HXDLIN( 326)					_g2 = (_g2 + 1);
-HXLINE( 327)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(item->attr,HX_("jid",c5,ca,50,00))) ) )) {
-HXLINE( 327)						 ::borogove::Client _gthis1 = _gthis;
-HXDLIN( 327)						 ::borogove::Chat tmp1 = _gthis1->getChat(( (::String)(::Reflect_obj::field(item->attr,HX_("jid",c5,ca,50,00))) ));
-HXDLIN( 327)						if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 327)							tmp1->unblock(false);
+HXLINE( 327)				int _g2 = 0;
+HXDLIN( 327)				while((_g2 < unblocks->length)){
+HXLINE( 327)					 ::borogove::Stanza item = unblocks->__get(_g2).StaticCast<  ::borogove::Stanza >();
+HXDLIN( 327)					_g2 = (_g2 + 1);
+HXLINE( 328)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(item->attr,HX_("jid",c5,ca,50,00))) ) )) {
+HXLINE( 328)						 ::borogove::Client _gthis1 = _gthis;
+HXDLIN( 328)						 ::borogove::Chat tmp1 = _gthis1->getChat(( (::String)(::Reflect_obj::field(item->attr,HX_("jid",c5,ca,50,00))) ));
+HXDLIN( 328)						if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 328)							tmp1->unblock(false);
             						}
             					}
             				}
             			}
-HXLINE( 331)			return ::borogove::IqResult_obj::IqResult_dyn();
+HXLINE( 332)			return ::borogove::IqResult_obj::IqResult_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_25, ::borogove::Client,_gthis,::Dynamic,persistence) HXARGC(1)
             		 ::borogove::EventResult _hx_run( ::Dynamic event){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_334_new)
-HXLINE( 335)			 ::borogove::Stanza stanza = ( ( ::borogove::Stanza)(event->__Field(HX_("stanza",f5,5d,f7,05),::hx::paccDynamic)) );
-HXLINE( 336)			 ::borogove::Stanza c = stanza->getChild(HX_("c",63,00,00,00),HX_("http://jabber.org/protocol/caps",95,d0,90,e2));
-HXLINE( 337)			bool _hx_tmp;
-HXDLIN( 337)			if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
-HXLINE( 337)				_hx_tmp = ::hx::IsNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("type",ba,f2,08,4d))) ) );
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_335_new)
+HXLINE( 336)			 ::borogove::Stanza stanza = ( ( ::borogove::Stanza)(event->__Field(HX_("stanza",f5,5d,f7,05),::hx::paccDynamic)) );
+HXLINE( 337)			 ::borogove::Stanza c = stanza->getChild(HX_("c",63,00,00,00),HX_("http://jabber.org/protocol/caps",95,d0,90,e2));
+HXLINE( 338)			bool _hx_tmp;
+HXDLIN( 338)			if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
+HXLINE( 338)				_hx_tmp = ::hx::IsNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("type",ba,f2,08,4d))) ) );
             			}
             			else {
-HXLINE( 337)				_hx_tmp = false;
-            			}
-HXDLIN( 337)			if (_hx_tmp) {
-HXLINE( 338)				 ::borogove::JID from = ::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
-HXLINE( 339)				 ::borogove::Client _gthis1 = _gthis;
-HXDLIN( 339)				 ::borogove::Chat chat = _gthis1->getChat(from->asBare()->asString());
-HXLINE( 340)				if (::hx::IsNull( chat )) {
-HXLINE( 341)					 ::Dynamic _hx_tmp1 = ::haxe::Log_obj::trace;
-HXDLIN( 341)					::String _hx_tmp2 = (HX_("Presence for unknown JID: ",19,ed,d7,3f) + ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
-HXDLIN( 341)					_hx_tmp1(_hx_tmp2,::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),341,HX_("borogove.Client",18,dc,e6,c0),HX_("new",60,d0,53,00)));
-HXLINE( 342)					return ::borogove::EventResult_obj::EventUnhandled_dyn();
-            				}
-HXLINE( 345)				 ::borogove::Stanza mucUser = stanza->getChild(HX_("x",78,00,00,00),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14));
-HXLINE( 346)				::String avatarSha1Hex = stanza->findText(HX_("{vcard-temp:x:update}x/photo#",f6,a1,33,28));
-HXLINE( 347)				 ::borogove::Hash avatarSha1;
-HXDLIN( 347)				bool avatarSha11;
-HXDLIN( 347)				if (::hx::IsNotNull( avatarSha1Hex )) {
-HXLINE( 347)					avatarSha11 = (avatarSha1Hex == HX_("",00,00,00,00));
+HXLINE( 338)				_hx_tmp = false;
+            			}
+HXDLIN( 338)			if (_hx_tmp) {
+HXLINE( 339)				 ::borogove::JID from = ::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
+HXLINE( 340)				 ::borogove::Client _gthis1 = _gthis;
+HXDLIN( 340)				 ::borogove::Chat chat = _gthis1->getChat(from->asBare()->asString());
+HXLINE( 341)				if (::hx::IsNull( chat )) {
+HXLINE( 342)					 ::Dynamic _hx_tmp1 = ::haxe::Log_obj::trace;
+HXDLIN( 342)					::String _hx_tmp2 = (HX_("Presence for unknown JID: ",19,ed,d7,3f) + ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
+HXDLIN( 342)					_hx_tmp1(_hx_tmp2,::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),342,HX_("borogove.Client",18,dc,e6,c0),HX_("new",60,d0,53,00)));
+HXLINE( 343)					return ::borogove::EventResult_obj::EventUnhandled_dyn();
+            				}
+HXLINE( 346)				 ::borogove::Stanza mucUser = stanza->getChild(HX_("x",78,00,00,00),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14));
+HXLINE( 347)				::String avatarSha1Hex = stanza->findText(HX_("{vcard-temp:x:update}x/photo#",f6,a1,33,28));
+HXLINE( 348)				 ::borogove::Hash avatarSha1;
+HXDLIN( 348)				bool avatarSha11;
+HXDLIN( 348)				if (::hx::IsNotNull( avatarSha1Hex )) {
+HXLINE( 348)					avatarSha11 = (avatarSha1Hex == HX_("",00,00,00,00));
             				}
             				else {
-HXLINE( 347)					avatarSha11 = true;
+HXLINE( 348)					avatarSha11 = true;
             				}
-HXDLIN( 347)				if (avatarSha11) {
-HXLINE( 347)					avatarSha1 = null();
+HXDLIN( 348)				if (avatarSha11) {
+HXLINE( 348)					avatarSha1 = null();
             				}
             				else {
-HXLINE( 347)					avatarSha1 = ::borogove::Hash_obj::fromHex(HX_("sha-1",90,a8,1c,7c),avatarSha1Hex);
-            				}
-HXLINE( 349)				if (::hx::IsNull( c )) {
-HXLINE( 350)					 ::borogove::Chat chat1 = chat;
-HXDLIN( 350)					::String _hx_tmp3 = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) );
-HXDLIN( 350)					chat1->setPresence(::borogove::JID_obj::parse(_hx_tmp3)->resource, ::borogove::Presence_obj::__alloc( HX_CTX ,null(),mucUser,avatarSha1));
-HXLINE( 351)					::Dynamic persistence1 = persistence;
-HXDLIN( 351)					::String _hx_tmp4 = _gthis->accountId();
-HXDLIN( 351)					::borogove::Persistence_obj::storeChats(persistence1,_hx_tmp4,::Array_obj< ::Dynamic>::__new(1)->init(0,chat));
-HXLINE( 352)					if (chat->livePresence()) {
-HXLINE( 352)						_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat));
+HXLINE( 348)					avatarSha1 = ::borogove::Hash_obj::fromHex(HX_("sha-1",90,a8,1c,7c),avatarSha1Hex);
+            				}
+HXLINE( 350)				if (::hx::IsNull( c )) {
+HXLINE( 351)					 ::borogove::Chat chat1 = chat;
+HXDLIN( 351)					::String _hx_tmp3 = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) );
+HXDLIN( 351)					chat1->setPresence(::borogove::JID_obj::parse(_hx_tmp3)->resource, ::borogove::Presence_obj::__alloc( HX_CTX ,null(),mucUser,avatarSha1));
+HXLINE( 352)					::Dynamic persistence1 = persistence;
+HXDLIN( 352)					::String _hx_tmp4 = _gthis->accountId();
+HXDLIN( 352)					::borogove::Persistence_obj::storeChats(persistence1,_hx_tmp4,::Array_obj< ::Dynamic>::__new(1)->init(0,chat));
+HXLINE( 353)					if (chat->livePresence()) {
+HXLINE( 353)						_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat));
             					}
             				}
             				else {
             					HX_BEGIN_LOCAL_FUNC_S6(::hx::LocalFunc,_hx_Closure_16, ::borogove::Client,_gthis, ::borogove::Hash,avatarSha1, ::borogove::Stanza,mucUser,::Dynamic,persistence, ::borogove::Chat,chat, ::borogove::Stanza,stanza) HXARGC(1)
             					 ::borogove::Chat _hx_run( ::borogove::Caps caps){
-            						HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_354_new)
-HXLINE( 355)						 ::borogove::Chat chat1 = chat;
-HXDLIN( 355)						::String handleCaps = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) );
-HXDLIN( 355)						chat1->setPresence(::borogove::JID_obj::parse(handleCaps)->resource, ::borogove::Presence_obj::__alloc( HX_CTX ,caps,mucUser,avatarSha1));
-HXLINE( 356)						bool handleCaps1;
-HXDLIN( 356)						if (::hx::IsNotNull( mucUser )) {
-HXLINE( 356)							handleCaps1 = chat->livePresence();
+            						HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_355_new)
+HXLINE( 356)						 ::borogove::Chat chat1 = chat;
+HXDLIN( 356)						::String handleCaps = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) );
+HXDLIN( 356)						chat1->setPresence(::borogove::JID_obj::parse(handleCaps)->resource, ::borogove::Presence_obj::__alloc( HX_CTX ,caps,mucUser,avatarSha1));
+HXLINE( 357)						bool handleCaps1;
+HXDLIN( 357)						if (::hx::IsNotNull( mucUser )) {
+HXLINE( 357)							handleCaps1 = chat->livePresence();
             						}
             						else {
-HXLINE( 356)							handleCaps1 = true;
+HXLINE( 357)							handleCaps1 = true;
             						}
-HXDLIN( 356)						if (handleCaps1) {
-HXLINE( 356)							::Dynamic persistence1 = persistence;
-HXDLIN( 356)							::String handleCaps2 = _gthis->accountId();
-HXDLIN( 356)							::borogove::Persistence_obj::storeChats(persistence1,handleCaps2,::Array_obj< ::Dynamic>::__new(1)->init(0,chat));
+HXDLIN( 357)						if (handleCaps1) {
+HXLINE( 357)							::Dynamic persistence1 = persistence;
+HXDLIN( 357)							::String handleCaps2 = _gthis->accountId();
+HXDLIN( 357)							::borogove::Persistence_obj::storeChats(persistence1,handleCaps2,::Array_obj< ::Dynamic>::__new(1)->init(0,chat));
             						}
-HXLINE( 357)						return chat;
+HXLINE( 358)						return chat;
             					}
             					HX_END_LOCAL_FUNC1(return)
 
             					HX_BEGIN_LOCAL_FUNC_S5(::hx::LocalFunc,_hx_Closure_19, ::borogove::Client,_gthis,::Dynamic,persistence, ::Dynamic,handleCaps, ::borogove::Stanza,stanza, ::borogove::Stanza,c) HXARGC(1)
             					void _hx_run( ::borogove::Caps caps){
-            						HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_361_new)
-HXLINE( 361)						if (::hx::IsNull( caps )) {
-HXLINE( 362)							::Dynamic this1 = _gthis->pendingCaps;
-HXDLIN( 362)							::Array< ::Dynamic> pending = ( (::Array< ::Dynamic>)(( ( ::haxe::ds::StringMap)(this1) )->get(( (::String)(::Reflect_obj::field(c->attr,HX_("ver",63,e2,59,00))) ))) );
-HXLINE( 363)							if (::hx::IsNull( pending )) {
+            						HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_362_new)
+HXLINE( 362)						if (::hx::IsNull( caps )) {
+HXLINE( 363)							::Dynamic this1 = _gthis->pendingCaps;
+HXDLIN( 363)							::Array< ::Dynamic> pending = ( (::Array< ::Dynamic>)(( ( ::haxe::ds::StringMap)(this1) )->get(( (::String)(::Reflect_obj::field(c->attr,HX_("ver",63,e2,59,00))) ))) );
+HXLINE( 364)							if (::hx::IsNull( pending )) {
             								HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_18, ::borogove::Client,_gthis,::Dynamic,persistence, ::borogove::queries::DiscoInfoGet,discoGet2, ::borogove::Stanza,c) HXARGC(0)
             								void _hx_run(){
             									HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_17, ::haxe::ds::StringMap,chatsToUpdate) HXARGC(0)
             									 ::Dynamic _hx_run(){
-            										HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_375_new)
-HXLINE( 375)										return chatsToUpdate->iterator();
+            										HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_376_new)
+HXLINE( 376)										return chatsToUpdate->iterator();
             									}
             									HX_END_LOCAL_FUNC0(return)
 
-            									HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_366_new)
-HXLINE( 367)									 ::haxe::ds::StringMap chatsToUpdate =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE( 368)									::Array< ::Dynamic> handlers;
-HXDLIN( 368)									::Dynamic this1 = _gthis->pendingCaps;
-HXDLIN( 368)									::Array< ::Dynamic> tmp = ( (::Array< ::Dynamic>)(( ( ::haxe::ds::StringMap)(this1) )->get(( (::String)(::Reflect_obj::field(c->attr,HX_("ver",63,e2,59,00))) ))) );
-HXDLIN( 368)									if (::hx::IsNotNull( tmp )) {
-HXLINE( 368)										handlers = tmp;
+            									HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_367_new)
+HXLINE( 368)									 ::haxe::ds::StringMap chatsToUpdate =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 369)									::Array< ::Dynamic> handlers;
+HXDLIN( 369)									::Dynamic this1 = _gthis->pendingCaps;
+HXDLIN( 369)									::Array< ::Dynamic> tmp = ( (::Array< ::Dynamic>)(( ( ::haxe::ds::StringMap)(this1) )->get(( (::String)(::Reflect_obj::field(c->attr,HX_("ver",63,e2,59,00))) ))) );
+HXDLIN( 369)									if (::hx::IsNotNull( tmp )) {
+HXLINE( 369)										handlers = tmp;
             									}
             									else {
-HXLINE( 368)										handlers = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 369)										handlers = ::Array_obj< ::Dynamic>::__new(0);
             									}
-HXLINE( 369)									{
-HXLINE( 369)										::Dynamic this2 = _gthis->pendingCaps;
-HXDLIN( 369)										( ( ::haxe::ds::StringMap)(this2) )->remove(( (::String)(::Reflect_obj::field(c->attr,HX_("ver",63,e2,59,00))) ));
+HXLINE( 370)									{
+HXLINE( 370)										::Dynamic this2 = _gthis->pendingCaps;
+HXDLIN( 370)										( ( ::haxe::ds::StringMap)(this2) )->remove(( (::String)(::Reflect_obj::field(c->attr,HX_("ver",63,e2,59,00))) ));
             									}
-HXLINE( 370)									if (::hx::IsNotNull( discoGet2->getResult() )) {
-HXLINE( 370)										::Dynamic persistence1 = persistence;
-HXDLIN( 370)										::borogove::Persistence_obj::storeCaps(persistence1,discoGet2->getResult());
+HXLINE( 371)									if (::hx::IsNotNull( discoGet2->getResult() )) {
+HXLINE( 371)										::Dynamic persistence1 = persistence;
+HXDLIN( 371)										::borogove::Persistence_obj::storeCaps(persistence1,discoGet2->getResult());
             									}
-HXLINE( 371)									{
-HXLINE( 371)										int _g = 0;
-HXDLIN( 371)										while((_g < handlers->length)){
-HXLINE( 371)											 ::Dynamic handler = handlers->__get(_g);
-HXDLIN( 371)											_g = (_g + 1);
-HXLINE( 372)											 ::borogove::Chat c1 = ( ( ::borogove::Chat)(handler(discoGet2->getResult())) );
-HXLINE( 373)											if (c1->livePresence()) {
-HXLINE( 373)												chatsToUpdate->set(c1->chatId,c1);
+HXLINE( 372)									{
+HXLINE( 372)										int _g = 0;
+HXDLIN( 372)										while((_g < handlers->length)){
+HXLINE( 372)											 ::Dynamic handler = handlers->__get(_g);
+HXDLIN( 372)											_g = (_g + 1);
+HXLINE( 373)											 ::borogove::Chat c1 = ( ( ::borogove::Chat)(handler(discoGet2->getResult())) );
+HXLINE( 374)											if (c1->livePresence()) {
+HXLINE( 374)												chatsToUpdate->set(c1->chatId,c1);
             											}
             										}
             									}
-HXLINE( 375)									 ::borogove::Client _gthis1 = _gthis;
-HXDLIN( 375)									_gthis1->trigger(HX_("chats/update",3d,8e,1d,14),::Lambda_obj::array( ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE( 376)									 ::borogove::Client _gthis1 = _gthis;
+HXDLIN( 376)									_gthis1->trigger(HX_("chats/update",3d,8e,1d,14),::Lambda_obj::array( ::Dynamic(::hx::Anon_obj::Create(1)
             										->setFixed(0,HX_("iterator",ee,49,9a,93), ::Dynamic(new _hx_Closure_17(chatsToUpdate))))));
             								}
             								HX_END_LOCAL_FUNC0((void))
 
-HXLINE( 364)								{
-HXLINE( 364)									::Dynamic this2 = _gthis->pendingCaps;
-HXDLIN( 364)									::String key = ( (::String)(::Reflect_obj::field(c->attr,HX_("ver",63,e2,59,00))) );
-HXDLIN( 364)									( ( ::haxe::ds::StringMap)(this2) )->set(key,::Array_obj< ::Dynamic>::__new(1)->init(0,handleCaps));
+HXLINE( 365)								{
+HXLINE( 365)									::Dynamic this2 = _gthis->pendingCaps;
+HXDLIN( 365)									::String key = ( (::String)(::Reflect_obj::field(c->attr,HX_("ver",63,e2,59,00))) );
+HXDLIN( 365)									( ( ::haxe::ds::StringMap)(this2) )->set(key,::Array_obj< ::Dynamic>::__new(1)->init(0,handleCaps));
             								}
-HXLINE( 365)								::String discoGet = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) );
-HXDLIN( 365)								::String discoGet1 = (( (::String)(::Reflect_obj::field(c->attr,HX_("node",02,0a,0a,49))) ) + HX_("#",23,00,00,00));
-HXDLIN( 365)								 ::borogove::queries::DiscoInfoGet discoGet2 =  ::borogove::queries::DiscoInfoGet_obj::__alloc( HX_CTX ,discoGet,(discoGet1 + ( (::String)(::Reflect_obj::field(c->attr,HX_("ver",63,e2,59,00))) )));
-HXLINE( 366)								discoGet2->onFinished( ::Dynamic(new _hx_Closure_18(_gthis,persistence,discoGet2,c)));
-HXLINE( 377)								_gthis->sendQuery(discoGet2);
+HXLINE( 366)								::String discoGet = ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) );
+HXDLIN( 366)								::String discoGet1 = (( (::String)(::Reflect_obj::field(c->attr,HX_("node",02,0a,0a,49))) ) + HX_("#",23,00,00,00));
+HXDLIN( 366)								 ::borogove::queries::DiscoInfoGet discoGet2 =  ::borogove::queries::DiscoInfoGet_obj::__alloc( HX_CTX ,discoGet,(discoGet1 + ( (::String)(::Reflect_obj::field(c->attr,HX_("ver",63,e2,59,00))) )));
+HXLINE( 367)								discoGet2->onFinished( ::Dynamic(new _hx_Closure_18(_gthis,persistence,discoGet2,c)));
+HXLINE( 378)								_gthis->sendQuery(discoGet2);
             							}
             							else {
-HXLINE( 379)								pending->push(handleCaps);
+HXLINE( 380)								pending->push(handleCaps);
             							}
             						}
             						else {
-HXLINE( 382)							handleCaps(caps);
+HXLINE( 383)							handleCaps(caps);
             						}
             					}
             					HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 354)					 ::Dynamic handleCaps =  ::Dynamic(new _hx_Closure_16(_gthis,avatarSha1,mucUser,persistence,chat,stanza));
-HXLINE( 360)					::Dynamic persistence2 = persistence;
-HXDLIN( 360)					::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getCaps(persistence2,( (::String)(::Reflect_obj::field(c->attr,HX_("ver",63,e2,59,00))) )), ::Dynamic(new _hx_Closure_19(_gthis,persistence,handleCaps,stanza,c)),null());
+HXLINE( 355)					 ::Dynamic handleCaps =  ::Dynamic(new _hx_Closure_16(_gthis,avatarSha1,mucUser,persistence,chat,stanza));
+HXLINE( 361)					::Dynamic persistence2 = persistence;
+HXDLIN( 361)					::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getCaps(persistence2,( (::String)(::Reflect_obj::field(c->attr,HX_("ver",63,e2,59,00))) )), ::Dynamic(new _hx_Closure_19(_gthis,persistence,handleCaps,stanza,c)),null());
             				}
-HXLINE( 386)				if (::hx::IsNotNull( avatarSha1 )) {
-            					HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_22, ::borogove::Client,_gthis, ::borogove::JID,from,::Dynamic,persistence, ::borogove::Chat,chat) HXARGC(1)
+HXLINE( 388)				bool _hx_tmp5;
+HXDLIN( 388)				bool _hx_tmp6;
+HXDLIN( 388)				if (::hx::IsNotNull( ::Std_obj::downcast(chat,::hx::ClassOf< ::borogove::Channel >()) )) {
+HXLINE( 388)					_hx_tmp6 = ::hx::IsNotNull( avatarSha1 );
+            				}
+            				else {
+HXLINE( 388)					_hx_tmp6 = false;
+            				}
+HXDLIN( 388)				if (_hx_tmp6) {
+HXLINE( 388)					_hx_tmp5 = ::hx::IsNull( _gthis->brokenAvatars->get(avatarSha1Hex) );
+            				}
+            				else {
+HXLINE( 388)					_hx_tmp5 = false;
+            				}
+HXDLIN( 388)				if (_hx_tmp5) {
+            					HX_BEGIN_LOCAL_FUNC_S5(::hx::LocalFunc,_hx_Closure_22, ::borogove::Client,_gthis,::String,avatarSha1Hex, ::borogove::JID,from,::Dynamic,persistence, ::borogove::Chat,chat) HXARGC(1)
             					void _hx_run(bool has){
-            						HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_392_new)
-HXLINE( 392)						if (has) {
-HXLINE( 393)							if (chat->livePresence()) {
-HXLINE( 393)								_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat));
+            						HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_394_new)
+HXLINE( 394)						if (has) {
+HXLINE( 395)							if (chat->livePresence()) {
+HXLINE( 395)								_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat));
             							}
             						}
             						else {
-            							HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_21, ::borogove::Client,_gthis, ::borogove::queries::VcardTempGet,vcardGet,::Dynamic,persistence, ::borogove::Chat,chat) HXARGC(0)
+            							HX_BEGIN_LOCAL_FUNC_S6(::hx::LocalFunc,_hx_Closure_21, ::borogove::Client,_gthis,::String,avatarSha1Hex, ::borogove::queries::VcardTempGet,vcardGet, ::borogove::JID,from,::Dynamic,persistence, ::borogove::Chat,chat) HXARGC(0)
             							void _hx_run(){
             								HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_20, ::borogove::Client,_gthis, ::borogove::Chat,chat) HXARGC(1)
             								 ::borogove::EventResult _hx_run(bool _){
-            									HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_399_new)
-HXLINE( 399)									return _gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat));
+            									HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_404_new)
+HXLINE( 404)									return _gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat));
             								}
             								HX_END_LOCAL_FUNC1(return)
 
-            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_396_new)
-HXLINE( 397)								 ::Dynamic vcard = vcardGet->getResult();
-HXLINE( 398)								if (::hx::IsNull( vcard->__Field(HX_("photo",b2,c8,f3,c1),::hx::paccDynamic) )) {
-HXLINE( 398)									return;
+            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_398_new)
+HXLINE( 399)								 ::Dynamic vcard = vcardGet->getResult();
+HXLINE( 400)								if (::hx::IsNull( vcard->__Field(HX_("photo",b2,c8,f3,c1),::hx::paccDynamic) )) {
+HXLINE( 401)									_gthis->brokenAvatars->set(avatarSha1Hex,from);
+HXLINE( 402)									return;
             								}
-HXLINE( 399)								::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeMedia(persistence, ::Dynamic( ::Dynamic(vcard->__Field(HX_("photo",b2,c8,f3,c1),::hx::paccDynamic))->__Field(HX_("mime",b4,4d,5c,48),::hx::paccDynamic)),( ( ::haxe::io::Bytes)( ::Dynamic(vcard->__Field(HX_("photo",b2,c8,f3,c1),::hx::paccDynamic))->__Field(HX_("data",2a,56,63,42),::hx::paccDynamic)) )->b), ::Dynamic(new _hx_Closure_20(_gthis,chat)),null());
+HXLINE( 404)								::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeMedia(persistence, ::Dynamic( ::Dynamic(vcard->__Field(HX_("photo",b2,c8,f3,c1),::hx::paccDynamic))->__Field(HX_("mime",b4,4d,5c,48),::hx::paccDynamic)),( ( ::haxe::io::Bytes)( ::Dynamic(vcard->__Field(HX_("photo",b2,c8,f3,c1),::hx::paccDynamic))->__Field(HX_("data",2a,56,63,42),::hx::paccDynamic)) )->b), ::Dynamic(new _hx_Closure_20(_gthis,chat)),null());
             							}
             							HX_END_LOCAL_FUNC0((void))
 
-HXLINE( 395)							 ::borogove::queries::VcardTempGet vcardGet =  ::borogove::queries::VcardTempGet_obj::__alloc( HX_CTX ,from);
-HXLINE( 396)							vcardGet->onFinished( ::Dynamic(new _hx_Closure_21(_gthis,vcardGet,persistence,chat)));
-HXLINE( 403)							_gthis->sendQuery(vcardGet);
+HXLINE( 397)							 ::borogove::queries::VcardTempGet vcardGet =  ::borogove::queries::VcardTempGet_obj::__alloc( HX_CTX ,from);
+HXLINE( 398)							vcardGet->onFinished( ::Dynamic(new _hx_Closure_21(_gthis,avatarSha1Hex,vcardGet,from,persistence,chat)));
+HXLINE( 408)							_gthis->sendQueryLazy(vcardGet);
             						}
             					}
             					HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 387)					if (from->isBare()) {
-HXLINE( 388)						chat->setAvatarSha1(avatarSha1->hash);
-HXLINE( 389)						::Dynamic persistence3 = persistence;
-HXDLIN( 389)						::String _hx_tmp5 = _gthis->accountId();
-HXDLIN( 389)						::borogove::Persistence_obj::storeChats(persistence3,_hx_tmp5,::Array_obj< ::Dynamic>::__new(1)->init(0,chat));
+HXLINE( 389)					if (from->isBare()) {
+HXLINE( 390)						chat->setAvatarSha1(avatarSha1->hash);
+HXLINE( 391)						::Dynamic persistence3 = persistence;
+HXDLIN( 391)						::String _hx_tmp7 = _gthis->accountId();
+HXDLIN( 391)						::borogove::Persistence_obj::storeChats(persistence3,_hx_tmp7,::Array_obj< ::Dynamic>::__new(1)->init(0,chat));
             					}
-HXLINE( 391)					::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::hasMedia(persistence,HX_("sha-1",90,a8,1c,7c),avatarSha1->hash), ::Dynamic(new _hx_Closure_22(_gthis,from,persistence,chat)),null());
+HXLINE( 393)					::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::hasMedia(persistence,HX_("sha-1",90,a8,1c,7c),avatarSha1->hash), ::Dynamic(new _hx_Closure_22(_gthis,avatarSha1Hex,from,persistence,chat)),null());
             				}
-HXLINE( 407)				return ::borogove::EventResult_obj::EventHandled_dyn();
+HXLINE( 412)				return ::borogove::EventResult_obj::EventHandled_dyn();
             			}
-HXLINE( 410)			bool _hx_tmp6;
-HXDLIN( 410)			if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
-HXLINE( 410)				_hx_tmp6 = (( (::String)(::Reflect_obj::field(stanza->attr,HX_("type",ba,f2,08,4d))) ) == HX_("unavailable",50,e0,29,fd));
+HXLINE( 415)			bool _hx_tmp8;
+HXDLIN( 415)			if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
+HXLINE( 415)				_hx_tmp8 = (( (::String)(::Reflect_obj::field(stanza->attr,HX_("type",ba,f2,08,4d))) ) == HX_("unavailable",50,e0,29,fd));
             			}
             			else {
-HXLINE( 410)				_hx_tmp6 = false;
-            			}
-HXDLIN( 410)			if (_hx_tmp6) {
-HXLINE( 411)				 ::borogove::Client _gthis2 = _gthis;
-HXDLIN( 411)				 ::borogove::Chat chat2 = _gthis2->getChat(::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ))->asBare()->asString());
-HXLINE( 412)				if (::hx::IsNull( chat2 )) {
-HXLINE( 413)					 ::Dynamic _hx_tmp7 = ::haxe::Log_obj::trace;
-HXDLIN( 413)					::String _hx_tmp8 = (HX_("Presence for unknown JID: ",19,ed,d7,3f) + ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
-HXDLIN( 413)					_hx_tmp7(_hx_tmp8,::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),413,HX_("borogove.Client",18,dc,e6,c0),HX_("new",60,d0,53,00)));
-HXLINE( 414)					return ::borogove::EventResult_obj::EventUnhandled_dyn();
-            				}
-HXLINE( 417)				chat2->removePresence(::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ))->resource);
-HXLINE( 418)				::Dynamic persistence4 = persistence;
-HXDLIN( 418)				::borogove::Persistence_obj::storeChats(persistence4,_gthis->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat2));
-HXLINE( 419)				_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat2));
-            			}
-HXLINE( 422)			bool _hx_tmp9;
-HXDLIN( 422)			if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
-HXLINE( 422)				_hx_tmp9 = (( (::String)(::Reflect_obj::field(stanza->attr,HX_("type",ba,f2,08,4d))) ) == HX_("subscribe",4a,0b,18,19));
+HXLINE( 415)				_hx_tmp8 = false;
+            			}
+HXDLIN( 415)			if (_hx_tmp8) {
+HXLINE( 416)				 ::borogove::Client _gthis2 = _gthis;
+HXDLIN( 416)				 ::borogove::Chat chat2 = _gthis2->getChat(::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ))->asBare()->asString());
+HXLINE( 417)				if (::hx::IsNull( chat2 )) {
+HXLINE( 418)					 ::Dynamic _hx_tmp9 = ::haxe::Log_obj::trace;
+HXDLIN( 418)					::String _hx_tmp10 = (HX_("Presence for unknown JID: ",19,ed,d7,3f) + ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
+HXDLIN( 418)					_hx_tmp9(_hx_tmp10,::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),418,HX_("borogove.Client",18,dc,e6,c0),HX_("new",60,d0,53,00)));
+HXLINE( 419)					return ::borogove::EventResult_obj::EventUnhandled_dyn();
+            				}
+HXLINE( 422)				chat2->removePresence(::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ))->resource);
+HXLINE( 423)				::Dynamic persistence4 = persistence;
+HXDLIN( 423)				::borogove::Persistence_obj::storeChats(persistence4,_gthis->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat2));
+HXLINE( 424)				_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat2));
+            			}
+HXLINE( 427)			bool _hx_tmp11;
+HXDLIN( 427)			if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
+HXLINE( 427)				_hx_tmp11 = (( (::String)(::Reflect_obj::field(stanza->attr,HX_("type",ba,f2,08,4d))) ) == HX_("subscribe",4a,0b,18,19));
             			}
             			else {
-HXLINE( 422)				_hx_tmp9 = false;
-            			}
-HXDLIN( 422)			if (_hx_tmp9) {
-HXLINE( 423)				 ::borogove::JID from1 = ::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
-HXLINE( 424)				 ::borogove::Client _gthis3 = _gthis;
-HXDLIN( 424)				 ::borogove::Chat chat3 = _gthis3->getChat(from1->asBare()->asString());
-HXLINE( 425)				::String nick = stanza->getChildText(HX_("nick",a3,7b,05,49),HX_("http://jabber.org/protocol/nick",17,30,dc,e9));
-HXLINE( 426)				if (::hx::IsNull( chat3 )) {
+HXLINE( 427)				_hx_tmp11 = false;
+            			}
+HXDLIN( 427)			if (_hx_tmp11) {
+HXLINE( 428)				 ::borogove::JID from1 = ::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
+HXLINE( 429)				 ::borogove::Client _gthis3 = _gthis;
+HXDLIN( 429)				 ::borogove::Chat chat3 = _gthis3->getChat(from1->asBare()->asString());
+HXLINE( 430)				::String nick = stanza->getChildText(HX_("nick",a3,7b,05,49),HX_("http://jabber.org/protocol/nick",17,30,dc,e9));
+HXLINE( 431)				if (::hx::IsNull( chat3 )) {
             					HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_23) HXARGC(1)
             					int _hx_run( ::borogove::Caps _){
-            						HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_427_new)
-HXLINE( 427)						return 3;
+            						HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_432_new)
+HXLINE( 432)						return 3;
             					}
             					HX_END_LOCAL_FUNC1(return)
 
             					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_24,::String,nick) HXARGC(1)
             					void _hx_run( ::borogove::Chat chat){
-            						HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_428_new)
-HXLINE( 428)						bool _hx_tmp;
-HXDLIN( 428)						if ((chat->displayName == chat->chatId)) {
-HXLINE( 428)							_hx_tmp = ::hx::IsNotNull( nick );
+            						HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_433_new)
+HXLINE( 433)						bool _hx_tmp;
+HXDLIN( 433)						if ((chat->displayName == chat->chatId)) {
+HXLINE( 433)							_hx_tmp = ::hx::IsNotNull( nick );
             						}
             						else {
-HXLINE( 428)							_hx_tmp = false;
+HXLINE( 433)							_hx_tmp = false;
             						}
-HXDLIN( 428)						if (_hx_tmp) {
-HXLINE( 428)							chat->displayName = nick;
+HXDLIN( 433)						if (_hx_tmp) {
+HXLINE( 433)							chat->displayName = nick;
             						}
             					}
             					HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 427)					 ::borogove::Client _gthis4 = _gthis;
-HXDLIN( 427)					_gthis4->startChatWith(from1->asBare()->asString(), ::Dynamic(new _hx_Closure_23()), ::Dynamic(new _hx_Closure_24(nick)));
+HXLINE( 432)					 ::borogove::Client _gthis4 = _gthis;
+HXDLIN( 432)					_gthis4->startChatWith(from1->asBare()->asString(), ::Dynamic(new _hx_Closure_23()), ::Dynamic(new _hx_Closure_24(nick)));
             				}
             				else {
-HXLINE( 430)					if ((chat3->uiState == 2)) {
-HXLINE( 431)						chat3->uiState = 3;
-HXLINE( 432)						bool _hx_tmp10;
-HXDLIN( 432)						if ((chat3->displayName == chat3->chatId)) {
-HXLINE( 432)							_hx_tmp10 = ::hx::IsNotNull( nick );
+HXLINE( 435)					if ((chat3->uiState == 2)) {
+HXLINE( 436)						chat3->uiState = 3;
+HXLINE( 437)						bool _hx_tmp12;
+HXDLIN( 437)						if ((chat3->displayName == chat3->chatId)) {
+HXLINE( 437)							_hx_tmp12 = ::hx::IsNotNull( nick );
             						}
             						else {
-HXLINE( 432)							_hx_tmp10 = false;
+HXLINE( 437)							_hx_tmp12 = false;
             						}
-HXDLIN( 432)						if (_hx_tmp10) {
-HXLINE( 432)							chat3->displayName = nick;
+HXDLIN( 437)						if (_hx_tmp12) {
+HXLINE( 437)							chat3->displayName = nick;
             						}
             					}
             				}
             			}
-HXLINE( 436)			return ::borogove::EventResult_obj::EventUnhandled_dyn();
+HXLINE( 441)			return ::borogove::EventResult_obj::EventUnhandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_59_new)
-HXLINE(1153)		this->enabledPushData = null();
-HXLINE( 113)		this->inSync = false;
-HXLINE( 101)		this->encryptionPolicy =  ::borogove::EncryptionPolicy_obj::__alloc( HX_CTX ,true,true,true);
+HXLINE(1529)		this->queriesToSend = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1528)		this->lazyQueryTimer = null();
+HXLINE(1166)		this->enabledPushData = null();
+HXLINE( 114)		this->inSync = false;
+HXLINE( 102)		this->encryptionPolicy =  ::borogove::EncryptionPolicy_obj::__alloc( HX_CTX ,true,true,true);
+HXLINE( 100)		this->brokenAvatars =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
 HXLINE(  99)		this->pendingCaps =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
 HXLINE(  98)		this->fastCount = null();
 HXLINE(  97)		this->token = null();
@@ -1287,46 +1308,46 @@ HXLINE(  96)		this->fastMechanism = null();
 HXLINE(  69)		this->caps =  ::borogove::Caps_obj::__alloc( HX_CTX ,HX_("https://borogove.dev",57,2d,84,ed),::Array_obj< ::Dynamic>::__new(0),::Array_obj< ::String >::fromData( _hx_array_data_c0e6dc18_33,14),::Array_obj< ::Dynamic>::__new(0),null());
 HXLINE(  67)		this->chats = ::Array_obj< ::Dynamic>::__new(0);
 HXLINE(  63)		this->sendAvailable = true;
-HXLINE( 121)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 122)		bool _hx_tmp;
-HXDLIN( 122)		if (::hx::IsNotNull( accountId )) {
-HXLINE( 122)			_hx_tmp = (accountId == HX_("",00,00,00,00));
+HXLINE( 122)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 123)		bool _hx_tmp;
+HXDLIN( 123)		if (::hx::IsNotNull( accountId )) {
+HXLINE( 123)			_hx_tmp = (accountId == HX_("",00,00,00,00));
             		}
             		else {
-HXLINE( 122)			_hx_tmp = true;
+HXLINE( 123)			_hx_tmp = true;
             		}
-HXDLIN( 122)		if (_hx_tmp) {
-HXLINE( 123)			HX_STACK_DO_THROW(HX_("accountId cannot be empty",f5,9e,fd,03));
+HXDLIN( 123)		if (_hx_tmp) {
+HXLINE( 124)			HX_STACK_DO_THROW(HX_("accountId cannot be empty",f5,9e,fd,03));
             		}
-HXLINE( 127)		 ::sys::thread::EventLoop mainLoop = ::sys::thread::_Thread::Thread_Impl__obj::get_events(::sys::thread::_Thread::HaxeThread_obj::current());
-HXLINE( 129)		::hx::TCast<  ::thenshim::fallback::FallbackPromiseFactory >::cast(::thenshim::_Promise::Promise_Impl__obj::factory)->scheduler->addNext = mainLoop->run_dyn();
-HXLINE( 131)		super::__construct();
-HXLINE( 132)		this->jid = ::borogove::JID_obj::parse(accountId);
-HXLINE( 133)		::String tmp = this->jid->node;
-HXDLIN( 133)		::String _hx_tmp1;
-HXDLIN( 133)		if (::hx::IsNotNull( tmp )) {
-HXLINE( 133)			_hx_tmp1 = tmp;
+HXLINE( 128)		 ::sys::thread::EventLoop mainLoop = ::sys::thread::_Thread::Thread_Impl__obj::get_events(::sys::thread::_Thread::HaxeThread_obj::current());
+HXLINE( 130)		::hx::TCast<  ::thenshim::fallback::FallbackPromiseFactory >::cast(::thenshim::_Promise::Promise_Impl__obj::factory)->scheduler->addNext = mainLoop->run_dyn();
+HXLINE( 132)		super::__construct();
+HXLINE( 133)		this->jid = ::borogove::JID_obj::parse(accountId);
+HXLINE( 134)		::String tmp = this->jid->node;
+HXDLIN( 134)		::String _hx_tmp1;
+HXDLIN( 134)		if (::hx::IsNotNull( tmp )) {
+HXLINE( 134)			_hx_tmp1 = tmp;
             		}
             		else {
-HXLINE( 133)			_hx_tmp1 = this->jid->asString();
-            		}
-HXDLIN( 133)		this->_displayName = _hx_tmp1;
-HXLINE( 134)		this->persistence = persistence;
-HXLINE( 138)		this->stream =  ::borogove::streams::XmppStropheStream_obj::__alloc( HX_CTX );
-HXLINE( 139)		this->stream->on(HX_("status/online",10,05,0e,d2),this->onConnected_dyn());
-HXLINE( 140)		this->stream->on(HX_("status/offline",c6,eb,eb,54), ::Dynamic(new _hx_Closure_0(_gthis)));
-HXLINE( 144)		this->stream->on(HX_("fast-token",48,5f,c2,26), ::Dynamic(new _hx_Closure_1(_gthis,persistence)));
-HXLINE( 150)		this->on(HX_("chats/update",3d,8e,1d,14), ::Dynamic(new _hx_Closure_2(_gthis)));
-HXLINE( 155)		this->stream->on(HX_("sm/update",1e,16,63,46), ::Dynamic(new _hx_Closure_3(_gthis,persistence)));
-HXLINE( 160)		this->stream->on(HX_("sm/ack",14,b2,12,dd), ::Dynamic(new _hx_Closure_6(_gthis,persistence)));
-HXLINE( 170)		this->stream->on(HX_("sm/fail",b3,aa,95,96), ::Dynamic(new _hx_Closure_9(_gthis,persistence)));
-HXLINE( 180)		this->stream->on(HX_("message",c7,35,11,9a), ::Dynamic(new _hx_Closure_10(_gthis)));
-HXLINE( 213)		this->stream->onIq(::borogove::IqRequestType_obj::Set_dyn(),HX_("jingle",31,27,eb,1f),HX_("urn:xmpp:jingle:1",44,c4,fe,f7), ::Dynamic(new _hx_Closure_11(_gthis)));
-HXLINE( 265)		this->stream->onIq(::borogove::IqRequestType_obj::Get_dyn(),HX_("query",08,8b,ea,5d),HX_("http://jabber.org/protocol/disco#info",cb,2b,7f,0b), ::Dynamic(new _hx_Closure_12(_gthis)));
-HXLINE( 269)		this->stream->onIq(::borogove::IqRequestType_obj::Set_dyn(),HX_("query",08,8b,ea,5d),HX_("jabber:iq:roster",47,76,6e,06), ::Dynamic(new _hx_Closure_13(_gthis,persistence)));
-HXLINE( 296)		this->stream->onIq(::borogove::IqRequestType_obj::Set_dyn(),HX_("block",4d,75,fc,b4),HX_("urn:xmpp:blocking",d1,a1,46,c3), ::Dynamic(new _hx_Closure_14(_gthis)));
-HXLINE( 311)		this->stream->onIq(::borogove::IqRequestType_obj::Set_dyn(),HX_("unblock",54,6c,8d,b1),HX_("urn:xmpp:blocking",d1,a1,46,c3), ::Dynamic(new _hx_Closure_15(_gthis)));
-HXLINE( 334)		this->stream->on(HX_("presence",3b,52,d7,66), ::Dynamic(new _hx_Closure_25(_gthis,persistence)));
+HXLINE( 134)			_hx_tmp1 = this->jid->asString();
+            		}
+HXDLIN( 134)		this->_displayName = _hx_tmp1;
+HXLINE( 135)		this->persistence = persistence;
+HXLINE( 139)		this->stream =  ::borogove::streams::XmppStropheStream_obj::__alloc( HX_CTX );
+HXLINE( 140)		this->stream->on(HX_("status/online",10,05,0e,d2),this->onConnected_dyn());
+HXLINE( 141)		this->stream->on(HX_("status/offline",c6,eb,eb,54), ::Dynamic(new _hx_Closure_0(_gthis)));
+HXLINE( 145)		this->stream->on(HX_("fast-token",48,5f,c2,26), ::Dynamic(new _hx_Closure_1(_gthis,persistence)));
+HXLINE( 151)		this->on(HX_("chats/update",3d,8e,1d,14), ::Dynamic(new _hx_Closure_2(_gthis)));
+HXLINE( 156)		this->stream->on(HX_("sm/update",1e,16,63,46), ::Dynamic(new _hx_Closure_3(_gthis,persistence)));
+HXLINE( 161)		this->stream->on(HX_("sm/ack",14,b2,12,dd), ::Dynamic(new _hx_Closure_6(_gthis,persistence)));
+HXLINE( 171)		this->stream->on(HX_("sm/fail",b3,aa,95,96), ::Dynamic(new _hx_Closure_9(_gthis,persistence)));
+HXLINE( 181)		this->stream->on(HX_("message",c7,35,11,9a), ::Dynamic(new _hx_Closure_10(_gthis)));
+HXLINE( 214)		this->stream->onIq(::borogove::IqRequestType_obj::Set_dyn(),HX_("jingle",31,27,eb,1f),HX_("urn:xmpp:jingle:1",44,c4,fe,f7), ::Dynamic(new _hx_Closure_11(_gthis)));
+HXLINE( 266)		this->stream->onIq(::borogove::IqRequestType_obj::Get_dyn(),HX_("query",08,8b,ea,5d),HX_("http://jabber.org/protocol/disco#info",cb,2b,7f,0b), ::Dynamic(new _hx_Closure_12(_gthis)));
+HXLINE( 270)		this->stream->onIq(::borogove::IqRequestType_obj::Set_dyn(),HX_("query",08,8b,ea,5d),HX_("jabber:iq:roster",47,76,6e,06), ::Dynamic(new _hx_Closure_13(_gthis,persistence)));
+HXLINE( 297)		this->stream->onIq(::borogove::IqRequestType_obj::Set_dyn(),HX_("block",4d,75,fc,b4),HX_("urn:xmpp:blocking",d1,a1,46,c3), ::Dynamic(new _hx_Closure_14(_gthis)));
+HXLINE( 312)		this->stream->onIq(::borogove::IqRequestType_obj::Set_dyn(),HX_("unblock",54,6c,8d,b1),HX_("urn:xmpp:blocking",d1,a1,46,c3), ::Dynamic(new _hx_Closure_15(_gthis)));
+HXLINE( 335)		this->stream->on(HX_("presence",3b,52,d7,66), ::Dynamic(new _hx_Closure_25(_gthis,persistence)));
             	}
 
 Dynamic Client_obj::__CreateEmpty() { return new Client_obj; }
@@ -1349,8 +1370,8 @@ bool Client_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 void Client_obj::set_sendAvailable__fromC(bool value){
-            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_382_set_sendAvailable__fromC)
-HXDLIN( 382)		this->sendAvailable = value;
+            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_409_set_sendAvailable__fromC)
+HXDLIN( 409)		this->sendAvailable = value;
             	}
 
 
@@ -1359,145 +1380,145 @@ HX_DEFINE_DYNAMIC_FUNC1(Client_obj,set_sendAvailable__fromC,(void))
 void Client_obj::processLiveMessage( ::borogove::Stanza stanza, ::borogove::Stanza fwd, ::borogove::EncryptionInfo encryptionInfo){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Client,_gthis) HXARGC(2)
             		 ::borogove::ChatMessageBuilder _hx_run( ::borogove::ChatMessageBuilder builder, ::borogove::Stanza stanza){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_450_processLiveMessage)
-HXLINE( 451)			 ::borogove::Client _gthis1 = _gthis;
-HXDLIN( 451)			 ::borogove::Chat chat = _gthis1->getChat(builder->chatId());
-HXLINE( 452)			bool message;
-HXDLIN( 452)			if (::hx::IsNull( chat )) {
-HXLINE( 452)				message = (( (::String)(::Reflect_obj::field(stanza->attr,HX_("type",ba,f2,08,4d))) ) != HX_("groupchat",97,1d,c8,e5));
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_455_processLiveMessage)
+HXLINE( 456)			 ::borogove::Client _gthis1 = _gthis;
+HXDLIN( 456)			 ::borogove::Chat chat = _gthis1->getChat(builder->chatId());
+HXLINE( 457)			bool message;
+HXDLIN( 457)			if (::hx::IsNull( chat )) {
+HXLINE( 457)				message = (( (::String)(::Reflect_obj::field(stanza->attr,HX_("type",ba,f2,08,4d))) ) != HX_("groupchat",97,1d,c8,e5));
             			}
             			else {
-HXLINE( 452)				message = false;
+HXLINE( 457)				message = false;
             			}
-HXDLIN( 452)			if (message) {
-HXLINE( 452)				 ::borogove::Client _gthis2 = _gthis;
-HXDLIN( 452)				chat = _gthis2->getDirectChat(builder->chatId(),null());
+HXDLIN( 457)			if (message) {
+HXLINE( 457)				 ::borogove::Client _gthis2 = _gthis;
+HXDLIN( 457)				chat = _gthis2->getDirectChat(builder->chatId(),null());
             			}
-HXLINE( 453)			if (::hx::IsNull( chat )) {
-HXLINE( 453)				return builder;
+HXLINE( 458)			if (::hx::IsNull( chat )) {
+HXLINE( 458)				return builder;
             			}
-HXLINE( 454)			return chat->prepareIncomingMessage(builder,stanza);
+HXLINE( 459)			return chat->prepareIncomingMessage(builder,stanza);
             		}
             		HX_END_LOCAL_FUNC2(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_441_processLiveMessage)
-HXDLIN( 441)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 442)		 ::borogove::JID from;
-HXDLIN( 442)		if (::hx::IsNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
-HXLINE( 442)			from = null();
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_446_processLiveMessage)
+HXDLIN( 446)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 447)		 ::borogove::JID from;
+HXDLIN( 447)		if (::hx::IsNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
+HXLINE( 447)			from = null();
             		}
             		else {
-HXLINE( 442)			from = ::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
+HXLINE( 447)			from = ::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
             		}
-HXLINE( 444)		bool _hx_tmp;
-HXDLIN( 444)		if ((( (::String)(::Reflect_obj::field(stanza->attr,HX_("type",ba,f2,08,4d))) ) == HX_("error",c8,cb,29,73))) {
-HXLINE( 444)			_hx_tmp = ::hx::IsNotNull( from );
+HXLINE( 449)		bool _hx_tmp;
+HXDLIN( 449)		if ((( (::String)(::Reflect_obj::field(stanza->attr,HX_("type",ba,f2,08,4d))) ) == HX_("error",c8,cb,29,73))) {
+HXLINE( 449)			_hx_tmp = ::hx::IsNotNull( from );
             		}
             		else {
-HXLINE( 444)			_hx_tmp = false;
+HXLINE( 449)			_hx_tmp = false;
             		}
-HXDLIN( 444)		if (_hx_tmp) {
-HXLINE( 446)			 ::borogove::Channel channel = ( ( ::borogove::Channel)(::Std_obj::downcast(this->getChat(from->asBare()->asString()),::hx::ClassOf< ::borogove::Channel >())) );
-HXLINE( 447)			if (::hx::IsNotNull( channel )) {
-HXLINE( 447)				channel->selfPing(true);
+HXDLIN( 449)		if (_hx_tmp) {
+HXLINE( 451)			 ::borogove::Channel channel = ( ( ::borogove::Channel)(::Std_obj::downcast(this->getChat(from->asBare()->asString()),::hx::ClassOf< ::borogove::Channel >())) );
+HXLINE( 452)			if (::hx::IsNotNull( channel )) {
+HXLINE( 452)				channel->selfPing(true);
             			}
             		}
-HXLINE( 450)		 ::borogove::Message message = ::borogove::Message_obj::fromStanza(stanza,this->jid, ::Dynamic(new _hx_Closure_0(_gthis)),encryptionInfo);
-HXLINE( 457)		{
-HXLINE( 457)			 ::borogove::MessageStanza _g = message->parsed;
-HXDLIN( 457)			switch((int)(_g->_hx_getIndex())){
+HXLINE( 455)		 ::borogove::Message message = ::borogove::Message_obj::fromStanza(stanza,this->jid, ::Dynamic(new _hx_Closure_0(_gthis)),encryptionInfo);
+HXLINE( 462)		{
+HXLINE( 462)			 ::borogove::MessageStanza _g = message->parsed;
+HXDLIN( 462)			switch((int)(_g->_hx_getIndex())){
             				case (int)0: {
             					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::borogove::Client,_gthis) HXARGC(1)
             					void _hx_run( ::borogove::ChatMessage m){
-            						HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_491_processLiveMessage)
-HXLINE( 491)						_gthis->notifyMessageHandlers(m,3);
+            						HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_496_processLiveMessage)
+HXLINE( 496)						_gthis->notifyMessageHandlers(m,3);
             					}
             					HX_END_LOCAL_FUNC1((void))
 
             					HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_2) HXARGC(1)
             					::Dynamic _hx_run( ::Dynamic _){
-            						HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_491_processLiveMessage)
-HXLINE( 491)						return null();
+            						HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_496_processLiveMessage)
+HXLINE( 496)						return null();
             					}
             					HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 486)					::Dynamic _hx_tmp1 = this->persistence;
-HXLINE( 487)					::String _hx_tmp2 = this->accountId();
-HXLINE( 486)					::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::updateMessageStatus(_hx_tmp1,_hx_tmp2,_g->_hx_getString(0),3,_g->_hx_getObject(1).StaticCast<  ::borogove::Stanza >()->getErrorText()), ::Dynamic(new _hx_Closure_1(_gthis)), ::Dynamic(new _hx_Closure_2()));
+HXLINE( 491)					::Dynamic _hx_tmp1 = this->persistence;
+HXLINE( 492)					::String _hx_tmp2 = this->accountId();
+HXLINE( 491)					::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::updateMessageStatus(_hx_tmp1,_hx_tmp2,_g->_hx_getString(0),3,_g->_hx_getObject(1).StaticCast<  ::borogove::Stanza >()->getErrorText()), ::Dynamic(new _hx_Closure_1(_gthis)), ::Dynamic(new _hx_Closure_2()));
             				}
             				break;
             				case (int)1: {
-HXLINE( 458)					 ::borogove::ChatMessage _g1 = _g->_hx_getObject(0).StaticCast<  ::borogove::ChatMessage >();
-HXDLIN( 458)					{
-HXLINE( 459)						{
-HXLINE( 459)							int _g2 = 0;
-HXDLIN( 459)							::Array< ::Dynamic> _g3 = _g1->inlineHashReferences();
-HXDLIN( 459)							while((_g2 < _g3->length)){
-HXLINE( 459)								 ::borogove::Hash hash = _g3->__get(_g2).StaticCast<  ::borogove::Hash >();
-HXDLIN( 459)								_g2 = (_g2 + 1);
-HXLINE( 460)								this->fetchMediaByHash(::Array_obj< ::Dynamic>::__new(1)->init(0,hash),::Array_obj< ::Dynamic>::__new(1)->init(0,_g1->from));
+HXLINE( 463)					 ::borogove::ChatMessage _g1 = _g->_hx_getObject(0).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN( 463)					{
+HXLINE( 464)						{
+HXLINE( 464)							int _g2 = 0;
+HXDLIN( 464)							::Array< ::Dynamic> _g3 = _g1->inlineHashReferences();
+HXDLIN( 464)							while((_g2 < _g3->length)){
+HXLINE( 464)								 ::borogove::Hash hash = _g3->__get(_g2).StaticCast<  ::borogove::Hash >();
+HXDLIN( 464)								_g2 = (_g2 + 1);
+HXLINE( 465)								this->fetchMediaByHash(::Array_obj< ::Dynamic>::__new(1)->init(0,hash),::Array_obj< ::Dynamic>::__new(1)->init(0,_g1->from));
             							}
             						}
-HXLINE( 462)						 ::borogove::Chat chat = this->getChat(_g1->chatId());
-HXLINE( 463)						if (::hx::IsNotNull( chat )) {
+HXLINE( 467)						 ::borogove::Chat chat = this->getChat(_g1->chatId());
+HXLINE( 468)						if (::hx::IsNotNull( chat )) {
             							HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_3, ::borogove::Client,_gthis, ::borogove::Chat,chat) HXARGC(1)
             							void _hx_run( ::borogove::ChatMessage chatMessage){
-            								HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_464_processLiveMessage)
-HXLINE( 465)								int updateChat;
-HXDLIN( 465)								if ((chatMessage->versions->length > 1)) {
-HXLINE( 465)									updateChat = 1;
+            								HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_469_processLiveMessage)
+HXLINE( 470)								int updateChat;
+HXDLIN( 470)								if ((chatMessage->versions->length > 1)) {
+HXLINE( 470)									updateChat = 1;
             								}
             								else {
-HXLINE( 465)									updateChat = 0;
+HXLINE( 470)									updateChat = 0;
             								}
-HXDLIN( 465)								_gthis->notifyMessageHandlers(chatMessage,updateChat);
-HXLINE( 466)								bool updateChat1;
-HXDLIN( 466)								bool updateChat2;
-HXDLIN( 466)								if ((chatMessage->versions->length >= 1)) {
-HXLINE( 466)									::String updateChat3 = chat->lastMessageId();
-HXDLIN( 466)									updateChat2 = (updateChat3 == chatMessage->serverId);
+HXDLIN( 470)								_gthis->notifyMessageHandlers(chatMessage,updateChat);
+HXLINE( 471)								bool updateChat1;
+HXDLIN( 471)								bool updateChat2;
+HXDLIN( 471)								if ((chatMessage->versions->length >= 1)) {
+HXLINE( 471)									::String updateChat3 = chat->lastMessageId();
+HXDLIN( 471)									updateChat2 = (updateChat3 == chatMessage->serverId);
             								}
             								else {
-HXLINE( 466)									updateChat2 = true;
+HXLINE( 471)									updateChat2 = true;
             								}
-HXDLIN( 466)								if (!(updateChat2)) {
-HXLINE( 466)									::String updateChat4 = chat->lastMessageId();
-HXDLIN( 466)									updateChat1 = (updateChat4 == chatMessage->localId);
+HXDLIN( 471)								if (!(updateChat2)) {
+HXLINE( 471)									::String updateChat4 = chat->lastMessageId();
+HXDLIN( 471)									updateChat1 = (updateChat4 == chatMessage->localId);
             								}
             								else {
-HXLINE( 466)									updateChat1 = true;
+HXLINE( 471)									updateChat1 = true;
             								}
-HXDLIN( 466)								if (updateChat1) {
-HXLINE( 467)									chat->setLastMessage(chatMessage);
-HXLINE( 468)									if ((chatMessage->versions->length < 1)) {
-HXLINE( 468)										 ::borogove::Chat chat1 = chat;
-HXDLIN( 468)										int updateChat5;
-HXDLIN( 468)										if (chatMessage->isIncoming()) {
-HXLINE( 468)											updateChat5 = (chat->unreadCount() + 1);
+HXDLIN( 471)								if (updateChat1) {
+HXLINE( 472)									chat->setLastMessage(chatMessage);
+HXLINE( 473)									if ((chatMessage->versions->length < 1)) {
+HXLINE( 473)										 ::borogove::Chat chat1 = chat;
+HXDLIN( 473)										int updateChat5;
+HXDLIN( 473)										if (chatMessage->isIncoming()) {
+HXLINE( 473)											updateChat5 = (chat->unreadCount() + 1);
             										}
             										else {
-HXLINE( 468)											updateChat5 = 0;
+HXLINE( 473)											updateChat5 = 0;
             										}
-HXDLIN( 468)										chat1->setUnreadCount(updateChat5);
+HXDLIN( 473)										chat1->setUnreadCount(updateChat5);
             									}
-HXLINE( 469)									_gthis->chatActivity(chat,null());
+HXLINE( 474)									_gthis->chatActivity(chat,null());
             								}
             							}
             							HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 464)							 ::Dynamic updateChat =  ::Dynamic(new _hx_Closure_3(_gthis,chat));
-HXLINE( 472)							if (::hx::IsNull( _g1->serverId )) {
-HXLINE( 473)								updateChat(_g1);
+HXLINE( 469)							 ::Dynamic updateChat =  ::Dynamic(new _hx_Closure_3(_gthis,chat));
+HXLINE( 477)							if (::hx::IsNull( _g1->serverId )) {
+HXLINE( 478)								updateChat(_g1);
             							}
             							else {
             								HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_4, ::Dynamic,updateChat) HXARGC(1)
             								void _hx_run(::Array< ::Dynamic> stored){
-            									HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_475_processLiveMessage)
-HXLINE( 475)									updateChat(stored->__get(0).StaticCast<  ::borogove::ChatMessage >());
+            									HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_480_processLiveMessage)
+HXLINE( 480)									updateChat(stored->__get(0).StaticCast<  ::borogove::ChatMessage >());
             								}
             								HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 475)								::thenshim::_Promise::Promise_Impl__obj::then(this->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,_g1)), ::Dynamic(new _hx_Closure_4(updateChat)),null());
+HXLINE( 480)								::thenshim::_Promise::Promise_Impl__obj::then(this->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,_g1)), ::Dynamic(new _hx_Closure_4(updateChat)),null());
             							}
             						}
             					}
@@ -1506,151 +1527,151 @@ HXLINE( 475)								::thenshim::_Promise::Promise_Impl__obj::then(this->storeMes
             				case (int)2: {
             					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_5, ::borogove::Client,_gthis) HXARGC(1)
             					void _hx_run( ::borogove::ChatMessage stored){
-            						HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_484_processLiveMessage)
-HXLINE( 484)						if (::hx::IsNotNull( stored )) {
-HXLINE( 484)							_gthis->notifyMessageHandlers(stored,1);
+            						HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_489_processLiveMessage)
+HXLINE( 489)						if (::hx::IsNotNull( stored )) {
+HXLINE( 489)							_gthis->notifyMessageHandlers(stored,1);
             						}
             					}
             					HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 484)					::thenshim::_Promise::Promise_Impl__obj::then(this->moderateMessage(_g->_hx_getObject(0).StaticCast<  ::borogove::ModerationAction >()), ::Dynamic(new _hx_Closure_5(_gthis)),null());
+HXLINE( 489)					::thenshim::_Promise::Promise_Impl__obj::then(this->moderateMessage(_g->_hx_getObject(0).StaticCast<  ::borogove::ModerationAction >()), ::Dynamic(new _hx_Closure_5(_gthis)),null());
             				}
             				break;
             				case (int)3: {
-HXLINE( 478)					 ::borogove::ReactionUpdate _g4 = _g->_hx_getObject(0).StaticCast<  ::borogove::ReactionUpdate >();
-HXDLIN( 478)					{
+HXLINE( 483)					 ::borogove::ReactionUpdate _g4 = _g->_hx_getObject(0).StaticCast<  ::borogove::ReactionUpdate >();
+HXDLIN( 483)					{
             						HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_6, ::borogove::Client,_gthis) HXARGC(1)
             						void _hx_run( ::borogove::ChatMessage stored){
-            							HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_482_processLiveMessage)
-HXLINE( 482)							if (::hx::IsNotNull( stored )) {
-HXLINE( 482)								_gthis->notifyMessageHandlers(stored,2);
+            							HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_487_processLiveMessage)
+HXLINE( 487)							if (::hx::IsNotNull( stored )) {
+HXLINE( 487)								_gthis->notifyMessageHandlers(stored,2);
             							}
             						}
             						HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 479)						{
-HXLINE( 479)							int _g5 = 0;
-HXDLIN( 479)							::Array< ::Dynamic> _g6 = _g4->inlineHashReferences();
-HXDLIN( 479)							while((_g5 < _g6->length)){
-HXLINE( 479)								 ::borogove::Hash hash1 = _g6->__get(_g5).StaticCast<  ::borogove::Hash >();
-HXDLIN( 479)								_g5 = (_g5 + 1);
-HXLINE( 480)								this->fetchMediaByHash(::Array_obj< ::Dynamic>::__new(1)->init(0,hash1),::Array_obj< ::Dynamic>::__new(1)->init(0,from));
+HXLINE( 484)						{
+HXLINE( 484)							int _g5 = 0;
+HXDLIN( 484)							::Array< ::Dynamic> _g6 = _g4->inlineHashReferences();
+HXDLIN( 484)							while((_g5 < _g6->length)){
+HXLINE( 484)								 ::borogove::Hash hash1 = _g6->__get(_g5).StaticCast<  ::borogove::Hash >();
+HXDLIN( 484)								_g5 = (_g5 + 1);
+HXLINE( 485)								this->fetchMediaByHash(::Array_obj< ::Dynamic>::__new(1)->init(0,hash1),::Array_obj< ::Dynamic>::__new(1)->init(0,from));
             							}
             						}
-HXLINE( 482)						::Dynamic _hx_tmp3 = this->persistence;
-HXDLIN( 482)						::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeReaction(_hx_tmp3,this->accountId(),_g4), ::Dynamic(new _hx_Closure_6(_gthis)),null());
+HXLINE( 487)						::Dynamic _hx_tmp3 = this->persistence;
+HXDLIN( 487)						::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeReaction(_hx_tmp3,this->accountId(),_g4), ::Dynamic(new _hx_Closure_6(_gthis)),null());
             					}
             				}
             				break;
             				case (int)4: {
-HXLINE( 493)					::String message1 = message->chatId;
-HXDLIN( 493)					 ::borogove::Chat _hx_tmp4 = this->getChat(message->chatId);
-HXDLIN( 493)					this->mucInvite(message1,_hx_tmp4,message->senderId,message->threadId,_g->_hx_getString(0),_g->_hx_getString(1),_g->_hx_getString(2),_g->_hx_getString(3));
+HXLINE( 498)					::String message1 = message->chatId;
+HXDLIN( 498)					 ::borogove::Chat _hx_tmp4 = this->getChat(message->chatId);
+HXDLIN( 498)					this->mucInvite(message1,_hx_tmp4,message->senderId,message->threadId,_g->_hx_getString(0),_g->_hx_getString(1),_g->_hx_getString(2),_g->_hx_getString(3));
             				}
             				break;
             				default:{
-HXLINE( 496)					 ::Dynamic _hx_tmp5 = ::haxe::Log_obj::trace;
-HXDLIN( 496)					::String _hx_tmp6 = (HX_("Ignoring non-chat message: ",f6,a5,6f,ca) + stanza->toString());
-HXDLIN( 496)					_hx_tmp5(_hx_tmp6,::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),496,HX_("borogove.Client",18,dc,e6,c0),HX_("processLiveMessage",0c,f2,77,58)));
+HXLINE( 501)					 ::Dynamic _hx_tmp5 = ::haxe::Log_obj::trace;
+HXDLIN( 501)					::String _hx_tmp6 = (HX_("Ignoring non-chat message: ",f6,a5,6f,ca) + stanza->toString());
+HXDLIN( 501)					_hx_tmp5(_hx_tmp6,::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),501,HX_("borogove.Client",18,dc,e6,c0),HX_("processLiveMessage",0c,f2,77,58)));
             				}
             			}
             		}
-HXLINE( 500)		 ::borogove::Stanza jmiP = stanza->getChild(HX_("propose",fe,fe,e9,f9),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
-HXLINE( 501)		bool _hx_tmp7;
-HXDLIN( 501)		if (::hx::IsNotNull( jmiP )) {
-HXLINE( 501)			_hx_tmp7 = ::hx::IsNotNull( ( (::String)(::Reflect_obj::field(jmiP->attr,HX_("id",db,5b,00,00))) ) );
+HXLINE( 505)		 ::borogove::Stanza jmiP = stanza->getChild(HX_("propose",fe,fe,e9,f9),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
+HXLINE( 506)		bool _hx_tmp7;
+HXDLIN( 506)		if (::hx::IsNotNull( jmiP )) {
+HXLINE( 506)			_hx_tmp7 = ::hx::IsNotNull( ( (::String)(::Reflect_obj::field(jmiP->attr,HX_("id",db,5b,00,00))) ) );
             		}
             		else {
-HXLINE( 501)			_hx_tmp7 = false;
+HXLINE( 506)			_hx_tmp7 = false;
             		}
-HXDLIN( 501)		if (_hx_tmp7) {
-HXLINE( 502)			 ::borogove::calls::IncomingProposedSession session =  ::borogove::calls::IncomingProposedSession_obj::__alloc( HX_CTX ,::hx::ObjectPtr<OBJ_>(this),from,( (::String)(::Reflect_obj::field(jmiP->attr,HX_("id",db,5b,00,00))) ));
-HXLINE( 503)			 ::borogove::DirectChat chat1 = this->getDirectChat(from->asBare()->asString(),null());
-HXLINE( 504)			::Dynamic this1 = chat1->jingleSessions;
-HXDLIN( 504)			if (!(( ( ::haxe::ds::StringMap)(this1) )->exists(session->get_sid()))) {
-HXLINE( 505)				{
-HXLINE( 505)					::Dynamic this2 = chat1->jingleSessions;
-HXDLIN( 505)					( ( ::haxe::ds::StringMap)(this2) )->set(session->get_sid(),session);
+HXDLIN( 506)		if (_hx_tmp7) {
+HXLINE( 507)			 ::borogove::calls::IncomingProposedSession session =  ::borogove::calls::IncomingProposedSession_obj::__alloc( HX_CTX ,::hx::ObjectPtr<OBJ_>(this),from,( (::String)(::Reflect_obj::field(jmiP->attr,HX_("id",db,5b,00,00))) ));
+HXLINE( 508)			 ::borogove::DirectChat chat1 = this->getDirectChat(from->asBare()->asString(),null());
+HXLINE( 509)			::Dynamic this1 = chat1->jingleSessions;
+HXDLIN( 509)			if (!(( ( ::haxe::ds::StringMap)(this1) )->exists(session->get_sid()))) {
+HXLINE( 510)				{
+HXLINE( 510)					::Dynamic this2 = chat1->jingleSessions;
+HXDLIN( 510)					( ( ::haxe::ds::StringMap)(this2) )->set(session->get_sid(),session);
             				}
-HXLINE( 506)				this->chatActivity(chat1,null());
-HXLINE( 507)				session->ring();
+HXLINE( 511)				this->chatActivity(chat1,null());
+HXLINE( 512)				session->ring();
             			}
             		}
-HXLINE( 511)		 ::borogove::Stanza jmiR = stanza->getChild(HX_("retract",01,e2,b9,fc),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
-HXLINE( 512)		bool _hx_tmp8;
-HXDLIN( 512)		if (::hx::IsNotNull( jmiR )) {
-HXLINE( 512)			_hx_tmp8 = ::hx::IsNotNull( ( (::String)(::Reflect_obj::field(jmiR->attr,HX_("id",db,5b,00,00))) ) );
+HXLINE( 516)		 ::borogove::Stanza jmiR = stanza->getChild(HX_("retract",01,e2,b9,fc),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
+HXLINE( 517)		bool _hx_tmp8;
+HXDLIN( 517)		if (::hx::IsNotNull( jmiR )) {
+HXLINE( 517)			_hx_tmp8 = ::hx::IsNotNull( ( (::String)(::Reflect_obj::field(jmiR->attr,HX_("id",db,5b,00,00))) ) );
             		}
             		else {
-HXLINE( 512)			_hx_tmp8 = false;
+HXLINE( 517)			_hx_tmp8 = false;
             		}
-HXDLIN( 512)		if (_hx_tmp8) {
-HXLINE( 513)			 ::borogove::DirectChat chat2 = this->getDirectChat(from->asBare()->asString(),null());
-HXLINE( 514)			::Dynamic this3 = chat2->jingleSessions;
-HXDLIN( 514)			::Dynamic session1 = ( ( ::haxe::ds::StringMap)(this3) )->get(( (::String)(::Reflect_obj::field(jmiR->attr,HX_("id",db,5b,00,00))) ));
-HXLINE( 515)			if (::hx::IsNotNull( session1 )) {
-HXLINE( 516)				::borogove::calls::Session_obj::retract(session1);
-HXLINE( 517)				{
-HXLINE( 517)					::Dynamic this4 = chat2->jingleSessions;
-HXDLIN( 517)					( ( ::haxe::ds::StringMap)(this4) )->remove(::borogove::calls::Session_obj::get_sid(session1));
+HXDLIN( 517)		if (_hx_tmp8) {
+HXLINE( 518)			 ::borogove::DirectChat chat2 = this->getDirectChat(from->asBare()->asString(),null());
+HXLINE( 519)			::Dynamic this3 = chat2->jingleSessions;
+HXDLIN( 519)			::Dynamic session1 = ( ( ::haxe::ds::StringMap)(this3) )->get(( (::String)(::Reflect_obj::field(jmiR->attr,HX_("id",db,5b,00,00))) ));
+HXLINE( 520)			if (::hx::IsNotNull( session1 )) {
+HXLINE( 521)				::borogove::calls::Session_obj::retract(session1);
+HXLINE( 522)				{
+HXLINE( 522)					::Dynamic this4 = chat2->jingleSessions;
+HXDLIN( 522)					( ( ::haxe::ds::StringMap)(this4) )->remove(::borogove::calls::Session_obj::get_sid(session1));
             				}
             			}
             		}
-HXLINE( 522)		 ::borogove::Stanza jmiProFwd;
-HXDLIN( 522)		if (::hx::IsNotNull( fwd )) {
-HXLINE( 522)			jmiProFwd = fwd->getChild(HX_("proceed",2e,96,4a,f1),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
+HXLINE( 527)		 ::borogove::Stanza jmiProFwd;
+HXDLIN( 527)		if (::hx::IsNotNull( fwd )) {
+HXLINE( 527)			jmiProFwd = fwd->getChild(HX_("proceed",2e,96,4a,f1),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
             		}
             		else {
-HXLINE( 522)			jmiProFwd = null();
+HXLINE( 527)			jmiProFwd = null();
             		}
-HXLINE( 523)		bool _hx_tmp9;
-HXDLIN( 523)		if (::hx::IsNotNull( jmiProFwd )) {
-HXLINE( 523)			_hx_tmp9 = ::hx::IsNotNull( ( (::String)(::Reflect_obj::field(jmiProFwd->attr,HX_("id",db,5b,00,00))) ) );
+HXLINE( 528)		bool _hx_tmp9;
+HXDLIN( 528)		if (::hx::IsNotNull( jmiProFwd )) {
+HXLINE( 528)			_hx_tmp9 = ::hx::IsNotNull( ( (::String)(::Reflect_obj::field(jmiProFwd->attr,HX_("id",db,5b,00,00))) ) );
             		}
             		else {
-HXLINE( 523)			_hx_tmp9 = false;
+HXLINE( 528)			_hx_tmp9 = false;
             		}
-HXDLIN( 523)		if (_hx_tmp9) {
-HXLINE( 524)			 ::borogove::DirectChat chat3 = this->getDirectChat(::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(fwd->attr,HX_("to",7b,65,00,00))) ))->asBare()->asString(),null());
-HXLINE( 525)			::Dynamic this5 = chat3->jingleSessions;
-HXDLIN( 525)			::Dynamic session2 = ( ( ::haxe::ds::StringMap)(this5) )->get(( (::String)(::Reflect_obj::field(jmiProFwd->attr,HX_("id",db,5b,00,00))) ));
-HXLINE( 526)			if (::hx::IsNotNull( session2 )) {
-HXLINE( 527)				::borogove::calls::Session_obj::retract(session2);
-HXLINE( 528)				{
-HXLINE( 528)					::Dynamic this6 = chat3->jingleSessions;
-HXDLIN( 528)					( ( ::haxe::ds::StringMap)(this6) )->remove(::borogove::calls::Session_obj::get_sid(session2));
+HXDLIN( 528)		if (_hx_tmp9) {
+HXLINE( 529)			 ::borogove::DirectChat chat3 = this->getDirectChat(::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(fwd->attr,HX_("to",7b,65,00,00))) ))->asBare()->asString(),null());
+HXLINE( 530)			::Dynamic this5 = chat3->jingleSessions;
+HXDLIN( 530)			::Dynamic session2 = ( ( ::haxe::ds::StringMap)(this5) )->get(( (::String)(::Reflect_obj::field(jmiProFwd->attr,HX_("id",db,5b,00,00))) ));
+HXLINE( 531)			if (::hx::IsNotNull( session2 )) {
+HXLINE( 532)				::borogove::calls::Session_obj::retract(session2);
+HXLINE( 533)				{
+HXLINE( 533)					::Dynamic this6 = chat3->jingleSessions;
+HXDLIN( 533)					( ( ::haxe::ds::StringMap)(this6) )->remove(::borogove::calls::Session_obj::get_sid(session2));
             				}
             			}
             		}
-HXLINE( 532)		 ::borogove::Stanza jmiPro = stanza->getChild(HX_("proceed",2e,96,4a,f1),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
-HXLINE( 533)		bool _hx_tmp10;
-HXDLIN( 533)		if (::hx::IsNotNull( jmiPro )) {
-HXLINE( 533)			_hx_tmp10 = ::hx::IsNotNull( ( (::String)(::Reflect_obj::field(jmiPro->attr,HX_("id",db,5b,00,00))) ) );
+HXLINE( 537)		 ::borogove::Stanza jmiPro = stanza->getChild(HX_("proceed",2e,96,4a,f1),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
+HXLINE( 538)		bool _hx_tmp10;
+HXDLIN( 538)		if (::hx::IsNotNull( jmiPro )) {
+HXLINE( 538)			_hx_tmp10 = ::hx::IsNotNull( ( (::String)(::Reflect_obj::field(jmiPro->attr,HX_("id",db,5b,00,00))) ) );
             		}
             		else {
-HXLINE( 533)			_hx_tmp10 = false;
-            		}
-HXDLIN( 533)		if (_hx_tmp10) {
-HXLINE( 534)			 ::borogove::DirectChat chat4 = this->getDirectChat(from->asBare()->asString(),null());
-HXLINE( 535)			::Dynamic this7 = chat4->jingleSessions;
-HXDLIN( 535)			::Dynamic session3 = ( ( ::haxe::ds::StringMap)(this7) )->get(( (::String)(::Reflect_obj::field(jmiPro->attr,HX_("id",db,5b,00,00))) ));
-HXLINE( 536)			if (::hx::IsNotNull( session3 )) {
-HXLINE( 537)				try {
+HXLINE( 538)			_hx_tmp10 = false;
+            		}
+HXDLIN( 538)		if (_hx_tmp10) {
+HXLINE( 539)			 ::borogove::DirectChat chat4 = this->getDirectChat(from->asBare()->asString(),null());
+HXLINE( 540)			::Dynamic this7 = chat4->jingleSessions;
+HXDLIN( 540)			::Dynamic session3 = ( ( ::haxe::ds::StringMap)(this7) )->get(( (::String)(::Reflect_obj::field(jmiPro->attr,HX_("id",db,5b,00,00))) ));
+HXLINE( 541)			if (::hx::IsNotNull( session3 )) {
+HXLINE( 542)				try {
             					HX_STACK_CATCHABLE( ::Dynamic, 0);
-HXLINE( 538)					::Dynamic this8 = chat4->jingleSessions;
-HXDLIN( 538)					::String key = ::borogove::calls::Session_obj::get_sid(session3);
-HXDLIN( 538)					( ( ::haxe::ds::StringMap)(this8) )->set(key,::borogove::calls::Session_obj::initiate(session3,stanza));
+HXLINE( 543)					::Dynamic this8 = chat4->jingleSessions;
+HXDLIN( 543)					::String key = ::borogove::calls::Session_obj::get_sid(session3);
+HXDLIN( 543)					( ( ::haxe::ds::StringMap)(this8) )->set(key,::borogove::calls::Session_obj::initiate(session3,stanza));
             				} catch( ::Dynamic _hx_e) {
             					if (_hx_e.IsClass<  ::Dynamic >() ){
             						HX_STACK_BEGIN_CATCH
             						 ::Dynamic _g7 = _hx_e;
-HXLINE( 539)						 ::haxe::Exception _g8 = ::haxe::Exception_obj::caught(_g7);
-HXLINE( 540)						::haxe::Log_obj::trace(HX_("JMI proceed failed",29,32,fb,3c), ::Dynamic(::hx::Anon_obj::Create(5)
+HXLINE( 544)						 ::haxe::Exception _g8 = ::haxe::Exception_obj::caught(_g7);
+HXLINE( 545)						::haxe::Log_obj::trace(HX_("JMI proceed failed",29,32,fb,3c), ::Dynamic(::hx::Anon_obj::Create(5)
             							->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Client",18,dc,e6,c0))
             							->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,_g8))
             							->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("processLiveMessage",0c,f2,77,58))
             							->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Client.hx",85,7d,15,8e))
-            							->setFixed(4,HX_("lineNumber",dd,81,22,76),540)));
+            							->setFixed(4,HX_("lineNumber",dd,81,22,76),545)));
             					}
             					else {
             						HX_STACK_DO_THROW(_hx_e);
@@ -1658,289 +1679,289 @@ HXLINE( 540)						::haxe::Log_obj::trace(HX_("JMI proceed failed",29,32,fb,3c),
             				}
             			}
             		}
-HXLINE( 545)		 ::borogove::Stanza jmiRej = stanza->getChild(HX_("reject",5f,51,85,02),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
-HXLINE( 546)		bool _hx_tmp11;
-HXDLIN( 546)		if (::hx::IsNotNull( jmiRej )) {
-HXLINE( 546)			_hx_tmp11 = ::hx::IsNotNull( ( (::String)(::Reflect_obj::field(jmiRej->attr,HX_("id",db,5b,00,00))) ) );
+HXLINE( 550)		 ::borogove::Stanza jmiRej = stanza->getChild(HX_("reject",5f,51,85,02),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
+HXLINE( 551)		bool _hx_tmp11;
+HXDLIN( 551)		if (::hx::IsNotNull( jmiRej )) {
+HXLINE( 551)			_hx_tmp11 = ::hx::IsNotNull( ( (::String)(::Reflect_obj::field(jmiRej->attr,HX_("id",db,5b,00,00))) ) );
             		}
             		else {
-HXLINE( 546)			_hx_tmp11 = false;
+HXLINE( 551)			_hx_tmp11 = false;
             		}
-HXDLIN( 546)		if (_hx_tmp11) {
-HXLINE( 547)			 ::borogove::DirectChat chat5 = this->getDirectChat(from->asBare()->asString(),null());
-HXLINE( 548)			::Dynamic this9 = chat5->jingleSessions;
-HXDLIN( 548)			::Dynamic session4 = ( ( ::haxe::ds::StringMap)(this9) )->get(( (::String)(::Reflect_obj::field(jmiRej->attr,HX_("id",db,5b,00,00))) ));
-HXLINE( 549)			if (::hx::IsNotNull( session4 )) {
-HXLINE( 550)				::borogove::calls::Session_obj::retract(session4);
-HXLINE( 551)				{
-HXLINE( 551)					::Dynamic this10 = chat5->jingleSessions;
-HXDLIN( 551)					( ( ::haxe::ds::StringMap)(this10) )->remove(::borogove::calls::Session_obj::get_sid(session4));
+HXDLIN( 551)		if (_hx_tmp11) {
+HXLINE( 552)			 ::borogove::DirectChat chat5 = this->getDirectChat(from->asBare()->asString(),null());
+HXLINE( 553)			::Dynamic this9 = chat5->jingleSessions;
+HXDLIN( 553)			::Dynamic session4 = ( ( ::haxe::ds::StringMap)(this9) )->get(( (::String)(::Reflect_obj::field(jmiRej->attr,HX_("id",db,5b,00,00))) ));
+HXLINE( 554)			if (::hx::IsNotNull( session4 )) {
+HXLINE( 555)				::borogove::calls::Session_obj::retract(session4);
+HXLINE( 556)				{
+HXLINE( 556)					::Dynamic this10 = chat5->jingleSessions;
+HXDLIN( 556)					( ( ::haxe::ds::StringMap)(this10) )->remove(::borogove::calls::Session_obj::get_sid(session4));
             				}
             			}
             		}
-HXLINE( 556)		if ((( (::String)(::Reflect_obj::field(stanza->attr,HX_("type",ba,f2,08,4d))) ) != HX_("error",c8,cb,29,73))) {
-HXLINE( 557)			 ::borogove::Stanza chatState = stanza->getChild(null(),HX_("http://jabber.org/protocol/chatstates",8e,6d,41,6d));
-HXLINE( 558)			 ::Dynamic userState;
-HXDLIN( 558)			::String _g9;
-HXDLIN( 558)			if (::hx::IsNotNull( chatState )) {
-HXLINE( 558)				_g9 = chatState->name;
+HXLINE( 561)		if ((( (::String)(::Reflect_obj::field(stanza->attr,HX_("type",ba,f2,08,4d))) ) != HX_("error",c8,cb,29,73))) {
+HXLINE( 562)			 ::borogove::Stanza chatState = stanza->getChild(null(),HX_("http://jabber.org/protocol/chatstates",8e,6d,41,6d));
+HXLINE( 563)			 ::Dynamic userState;
+HXDLIN( 563)			::String _g9;
+HXDLIN( 563)			if (::hx::IsNotNull( chatState )) {
+HXLINE( 563)				_g9 = chatState->name;
             			}
             			else {
-HXLINE( 558)				_g9 = null();
+HXLINE( 563)				_g9 = null();
             			}
-HXDLIN( 558)			if (::hx::IsNull( _g9 )) {
-HXLINE( 558)				userState = null();
+HXDLIN( 563)			if (::hx::IsNull( _g9 )) {
+HXLINE( 563)				userState = null();
             			}
             			else {
-HXLINE( 558)				::String _hx_switch_0 = _g9;
+HXLINE( 563)				::String _hx_switch_0 = _g9;
             				if (  (_hx_switch_0==HX_("active",c6,41,46,16)) ){
-HXLINE( 558)					userState = 2;
-HXDLIN( 558)					goto _hx_goto_37;
+HXLINE( 563)					userState = 2;
+HXDLIN( 563)					goto _hx_goto_37;
             				}
             				if (  (_hx_switch_0==HX_("composing",cf,0a,a5,12)) ){
-HXLINE( 558)					userState = 3;
-HXDLIN( 558)					goto _hx_goto_37;
+HXLINE( 563)					userState = 3;
+HXDLIN( 563)					goto _hx_goto_37;
             				}
             				if (  (_hx_switch_0==HX_("gone",5f,94,69,44)) ){
-HXLINE( 558)					userState = 0;
-HXDLIN( 558)					goto _hx_goto_37;
+HXLINE( 563)					userState = 0;
+HXDLIN( 563)					goto _hx_goto_37;
             				}
             				if (  (_hx_switch_0==HX_("inactive",6b,17,30,6a)) ){
-HXLINE( 558)					userState = 1;
-HXDLIN( 558)					goto _hx_goto_37;
+HXLINE( 563)					userState = 1;
+HXDLIN( 563)					goto _hx_goto_37;
             				}
             				if (  (_hx_switch_0==HX_("paused",ae,40,84,ef)) ){
-HXLINE( 558)					userState = 4;
-HXDLIN( 558)					goto _hx_goto_37;
+HXLINE( 563)					userState = 4;
+HXDLIN( 563)					goto _hx_goto_37;
             				}
             				/* default */{
-HXLINE( 558)					userState = null();
+HXLINE( 563)					userState = null();
             				}
             				_hx_goto_37:;
             			}
-HXLINE( 566)			if (::hx::IsNotNull( userState )) {
-HXLINE( 567)				 ::borogove::Chat chat6 = this->getChat(from->asBare()->asString());
-HXLINE( 568)				bool _hx_tmp12;
-HXDLIN( 568)				if (::hx::IsNotNull( chat6 )) {
-HXLINE( 568)					_hx_tmp12 = !(chat6->getParticipantDetails(message->senderId)->isSelf);
+HXLINE( 571)			if (::hx::IsNotNull( userState )) {
+HXLINE( 572)				 ::borogove::Chat chat6 = this->getChat(from->asBare()->asString());
+HXLINE( 573)				bool _hx_tmp12;
+HXDLIN( 573)				if (::hx::IsNotNull( chat6 )) {
+HXLINE( 573)					_hx_tmp12 = !(chat6->getParticipantDetails(message->senderId)->isSelf);
             				}
             				else {
-HXLINE( 568)					_hx_tmp12 = true;
+HXLINE( 573)					_hx_tmp12 = true;
             				}
-HXDLIN( 568)				if (_hx_tmp12) {
-HXLINE( 569)					this->trigger(HX_("chat-state/update",5c,7b,51,96), ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 573)				if (_hx_tmp12) {
+HXLINE( 574)					this->trigger(HX_("chat-state/update",5c,7b,51,96), ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("message",c7,35,11,9a),message)
             						->setFixed(1,HX_("userState",c6,23,de,2d),userState)));
             				}
             			}
             		}
-HXLINE( 574)		 ::borogove::PubsubEvent pubsubEvent = ::borogove::PubsubEvent_obj::fromStanza(stanza);
-HXLINE( 575)		bool _hx_tmp13;
-HXDLIN( 575)		bool _hx_tmp14;
-HXDLIN( 575)		bool _hx_tmp15;
-HXDLIN( 575)		if (::hx::IsNotNull( pubsubEvent )) {
-HXLINE( 575)			_hx_tmp15 = ::hx::IsNotNull( pubsubEvent->getFrom() );
+HXLINE( 579)		 ::borogove::PubsubEvent pubsubEvent = ::borogove::PubsubEvent_obj::fromStanza(stanza);
+HXLINE( 580)		bool _hx_tmp13;
+HXDLIN( 580)		bool _hx_tmp14;
+HXDLIN( 580)		bool _hx_tmp15;
+HXDLIN( 580)		if (::hx::IsNotNull( pubsubEvent )) {
+HXLINE( 580)			_hx_tmp15 = ::hx::IsNotNull( pubsubEvent->getFrom() );
             		}
             		else {
-HXLINE( 575)			_hx_tmp15 = false;
+HXLINE( 580)			_hx_tmp15 = false;
             		}
-HXDLIN( 575)		if (_hx_tmp15) {
-HXLINE( 575)			_hx_tmp14 = (pubsubEvent->getNode() == HX_("urn:xmpp:avatar:metadata",d4,65,1a,ee));
+HXDLIN( 580)		if (_hx_tmp15) {
+HXLINE( 580)			_hx_tmp14 = (pubsubEvent->getNode() == HX_("urn:xmpp:avatar:metadata",d4,65,1a,ee));
             		}
             		else {
-HXLINE( 575)			_hx_tmp14 = false;
+HXLINE( 580)			_hx_tmp14 = false;
             		}
-HXDLIN( 575)		if (_hx_tmp14) {
-HXLINE( 575)			_hx_tmp13 = (pubsubEvent->getItems()->length > 0);
+HXDLIN( 580)		if (_hx_tmp14) {
+HXLINE( 580)			_hx_tmp13 = (pubsubEvent->getItems()->length > 0);
             		}
             		else {
-HXLINE( 575)			_hx_tmp13 = false;
+HXLINE( 580)			_hx_tmp13 = false;
             		}
-HXDLIN( 575)		if (_hx_tmp13) {
-HXLINE( 576)			 ::borogove::Stanza item = pubsubEvent->getItems()->__get(0).StaticCast<  ::borogove::Stanza >();
-HXLINE( 577)			::String avatarSha1Hex = ( (::String)(::Reflect_obj::field(pubsubEvent->getItems()->__get(0).StaticCast<  ::borogove::Stanza >()->attr,HX_("id",db,5b,00,00))) );
-HXLINE( 578)			 ::borogove::Hash tmp = ::borogove::Hash_obj::fromHex(HX_("sha-1",90,a8,1c,7c),avatarSha1Hex);
-HXDLIN( 578)			::Array< unsigned char > avatarSha1;
-HXDLIN( 578)			if (::hx::IsNotNull( tmp )) {
-HXLINE( 578)				avatarSha1 = tmp->hash;
+HXDLIN( 580)		if (_hx_tmp13) {
+HXLINE( 581)			 ::borogove::Stanza item = pubsubEvent->getItems()->__get(0).StaticCast<  ::borogove::Stanza >();
+HXLINE( 582)			::String avatarSha1Hex = ( (::String)(::Reflect_obj::field(pubsubEvent->getItems()->__get(0).StaticCast<  ::borogove::Stanza >()->attr,HX_("id",db,5b,00,00))) );
+HXLINE( 583)			 ::borogove::Hash tmp = ::borogove::Hash_obj::fromHex(HX_("sha-1",90,a8,1c,7c),avatarSha1Hex);
+HXDLIN( 583)			::Array< unsigned char > avatarSha1;
+HXDLIN( 583)			if (::hx::IsNotNull( tmp )) {
+HXLINE( 583)				avatarSha1 = tmp->hash;
             			}
             			else {
-HXLINE( 578)				avatarSha1 = null();
+HXLINE( 583)				avatarSha1 = null();
             			}
-HXLINE( 579)			 ::borogove::Stanza metadata = item->getChild(HX_("metadata",6f,e7,19,40),HX_("urn:xmpp:avatar:metadata",d4,65,1a,ee));
-HXLINE( 580)			::Array< ::String > mime = ::Array_obj< ::String >::fromData( _hx_array_data_c0e6dc18_47,1);
-HXLINE( 581)			if (::hx::IsNotNull( metadata )) {
-HXLINE( 582)				 ::borogove::Stanza info = metadata->getChild(HX_("info",6e,38,bb,45),null());
-HXLINE( 583)				bool _hx_tmp16;
-HXDLIN( 583)				if (::hx::IsNotNull( info )) {
-HXLINE( 583)					_hx_tmp16 = ::hx::IsNotNull( ( (::String)(::Reflect_obj::field(info->attr,HX_("type",ba,f2,08,4d))) ) );
+HXLINE( 584)			 ::borogove::Stanza metadata = item->getChild(HX_("metadata",6f,e7,19,40),HX_("urn:xmpp:avatar:metadata",d4,65,1a,ee));
+HXLINE( 585)			::Array< ::String > mime = ::Array_obj< ::String >::fromData( _hx_array_data_c0e6dc18_47,1);
+HXLINE( 586)			if (::hx::IsNotNull( metadata )) {
+HXLINE( 587)				 ::borogove::Stanza info = metadata->getChild(HX_("info",6e,38,bb,45),null());
+HXLINE( 588)				bool _hx_tmp16;
+HXDLIN( 588)				if (::hx::IsNotNull( info )) {
+HXLINE( 588)					_hx_tmp16 = ::hx::IsNotNull( ( (::String)(::Reflect_obj::field(info->attr,HX_("type",ba,f2,08,4d))) ) );
             				}
             				else {
-HXLINE( 583)					_hx_tmp16 = false;
+HXLINE( 588)					_hx_tmp16 = false;
             				}
-HXDLIN( 583)				if (_hx_tmp16) {
-HXLINE( 584)					mime[0] = ( (::String)(::Reflect_obj::field(info->attr,HX_("type",ba,f2,08,4d))) );
+HXDLIN( 588)				if (_hx_tmp16) {
+HXLINE( 589)					mime[0] = ( (::String)(::Reflect_obj::field(info->attr,HX_("type",ba,f2,08,4d))) );
             				}
             			}
-HXLINE( 587)			if (::hx::IsNotNull( avatarSha1 )) {
+HXLINE( 592)			if (::hx::IsNotNull( avatarSha1 )) {
             				HX_BEGIN_LOCAL_FUNC_S5(::hx::LocalFunc,_hx_Closure_9, ::borogove::Client,_gthis,::Array< ::String >,mime,::String,avatarSha1Hex, ::borogove::PubsubEvent,pubsubEvent, ::borogove::DirectChat,chat7) HXARGC(1)
             				void _hx_run(bool has){
-            					HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_592_processLiveMessage)
-HXLINE( 592)					if (has) {
-HXLINE( 593)						_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat7));
+            					HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_597_processLiveMessage)
+HXLINE( 597)					if (has) {
+HXLINE( 598)						_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat7));
             					}
             					else {
             						HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_8, ::borogove::Client,_gthis,::Array< ::String >,mime, ::borogove::DirectChat,chat7, ::borogove::queries::PubsubGet,pubsubGet1) HXARGC(0)
             						void _hx_run(){
             							HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_7, ::borogove::Client,_gthis, ::borogove::DirectChat,chat7) HXARGC(1)
             							 ::borogove::EventResult _hx_run(bool _){
-            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_601_processLiveMessage)
-HXLINE( 601)								return _gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat7));
+            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_606_processLiveMessage)
+HXLINE( 606)								return _gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat7));
             							}
             							HX_END_LOCAL_FUNC1(return)
 
-            							HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_596_processLiveMessage)
-HXLINE( 597)							 ::borogove::Stanza item = pubsubGet1->getResult()->__get(0).StaticCast<  ::borogove::Stanza >();
-HXLINE( 598)							if (::hx::IsNull( item )) {
-HXLINE( 598)								return;
+            							HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_601_processLiveMessage)
+HXLINE( 602)							 ::borogove::Stanza item = pubsubGet1->getResult()->__get(0).StaticCast<  ::borogove::Stanza >();
+HXLINE( 603)							if (::hx::IsNull( item )) {
+HXLINE( 603)								return;
             							}
-HXLINE( 599)							 ::borogove::Stanza dataNode = item->getChild(HX_("data",2a,56,63,42),HX_("urn:xmpp:avatar:data",0f,7e,01,4e));
-HXLINE( 600)							if (::hx::IsNull( dataNode )) {
-HXLINE( 600)								return;
+HXLINE( 604)							 ::borogove::Stanza dataNode = item->getChild(HX_("data",2a,56,63,42),HX_("urn:xmpp:avatar:data",0f,7e,01,4e));
+HXLINE( 605)							if (::hx::IsNull( dataNode )) {
+HXLINE( 605)								return;
             							}
-HXLINE( 601)							::Dynamic _gthis1 = _gthis->persistence;
-HXDLIN( 601)							::String mime1 = mime->__get(0);
-HXDLIN( 601)							::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeMedia(_gthis1,mime1,::haxe::crypto::Base64_obj::decode(::StringTools_obj::replace(dataNode->getText(),HX_("\n",0a,00,00,00),HX_("",00,00,00,00)),null())->b), ::Dynamic(new _hx_Closure_7(_gthis,chat7)),null());
+HXLINE( 606)							::Dynamic _gthis1 = _gthis->persistence;
+HXDLIN( 606)							::String mime1 = mime->__get(0);
+HXDLIN( 606)							::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeMedia(_gthis1,mime1,::haxe::crypto::Base64_obj::decode(::StringTools_obj::replace(dataNode->getText(),HX_("\n",0a,00,00,00),HX_("",00,00,00,00)),null())->b), ::Dynamic(new _hx_Closure_7(_gthis,chat7)),null());
             						}
             						HX_END_LOCAL_FUNC0((void))
 
-HXLINE( 595)						::String pubsubGet = pubsubEvent->getFrom();
-HXDLIN( 595)						 ::borogove::queries::PubsubGet pubsubGet1 =  ::borogove::queries::PubsubGet_obj::__alloc( HX_CTX ,pubsubGet,HX_("urn:xmpp:avatar:data",0f,7e,01,4e),avatarSha1Hex);
-HXLINE( 596)						pubsubGet1->onFinished( ::Dynamic(new _hx_Closure_8(_gthis,mime,chat7,pubsubGet1)));
-HXLINE( 605)						_gthis->sendQuery(pubsubGet1);
+HXLINE( 600)						::String pubsubGet = pubsubEvent->getFrom();
+HXDLIN( 600)						 ::borogove::queries::PubsubGet pubsubGet1 =  ::borogove::queries::PubsubGet_obj::__alloc( HX_CTX ,pubsubGet,HX_("urn:xmpp:avatar:data",0f,7e,01,4e),avatarSha1Hex);
+HXLINE( 601)						pubsubGet1->onFinished( ::Dynamic(new _hx_Closure_8(_gthis,mime,chat7,pubsubGet1)));
+HXLINE( 610)						_gthis->sendQueryLazy(pubsubGet1);
             					}
             				}
             				HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 588)				 ::borogove::DirectChat chat7 = this->getDirectChat(::borogove::JID_obj::parse(pubsubEvent->getFrom())->asBare()->asString(),false);
-HXLINE( 589)				chat7->setAvatarSha1(avatarSha1);
-HXLINE( 590)				::Dynamic _hx_tmp17 = this->persistence;
-HXDLIN( 590)				::String _hx_tmp18 = this->accountId();
-HXDLIN( 590)				::borogove::Persistence_obj::storeChats(_hx_tmp17,_hx_tmp18,::Array_obj< ::Dynamic>::__new(1)->init(0,chat7));
-HXLINE( 591)				::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::hasMedia(this->persistence,HX_("sha-1",90,a8,1c,7c),avatarSha1), ::Dynamic(new _hx_Closure_9(_gthis,mime,avatarSha1Hex,pubsubEvent,chat7)),null());
+HXLINE( 593)				 ::borogove::DirectChat chat7 = this->getDirectChat(::borogove::JID_obj::parse(pubsubEvent->getFrom())->asBare()->asString(),false);
+HXLINE( 594)				chat7->setAvatarSha1(avatarSha1);
+HXLINE( 595)				::Dynamic _hx_tmp17 = this->persistence;
+HXDLIN( 595)				::String _hx_tmp18 = this->accountId();
+HXDLIN( 595)				::borogove::Persistence_obj::storeChats(_hx_tmp17,_hx_tmp18,::Array_obj< ::Dynamic>::__new(1)->init(0,chat7));
+HXLINE( 596)				::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::hasMedia(this->persistence,HX_("sha-1",90,a8,1c,7c),avatarSha1), ::Dynamic(new _hx_Closure_9(_gthis,mime,avatarSha1Hex,pubsubEvent,chat7)),null());
             			}
             		}
-HXLINE( 611)		 ::Dynamic _hx_tmp19 = ::haxe::Log_obj::trace;
-HXDLIN( 611)		::String _hx_tmp20 = (HX_("pubsubEvent ",09,6a,9f,e2) + ::Std_obj::string(::hx::IsNotNull( pubsubEvent )));
-HXDLIN( 611)		_hx_tmp19(_hx_tmp20,::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),611,HX_("borogove.Client",18,dc,e6,c0),HX_("processLiveMessage",0c,f2,77,58)));
-HXLINE( 612)		bool _hx_tmp21;
-HXDLIN( 612)		if (::hx::IsNotNull( pubsubEvent )) {
-HXLINE( 612)			_hx_tmp21 = ::hx::IsNotNull( pubsubEvent->getFrom() );
+HXLINE( 616)		 ::Dynamic _hx_tmp19 = ::haxe::Log_obj::trace;
+HXDLIN( 616)		::String _hx_tmp20 = (HX_("pubsubEvent ",09,6a,9f,e2) + ::Std_obj::string(::hx::IsNotNull( pubsubEvent )));
+HXDLIN( 616)		_hx_tmp19(_hx_tmp20,::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),616,HX_("borogove.Client",18,dc,e6,c0),HX_("processLiveMessage",0c,f2,77,58)));
+HXLINE( 617)		bool _hx_tmp21;
+HXDLIN( 617)		if (::hx::IsNotNull( pubsubEvent )) {
+HXLINE( 617)			_hx_tmp21 = ::hx::IsNotNull( pubsubEvent->getFrom() );
             		}
             		else {
-HXLINE( 612)			_hx_tmp21 = false;
+HXLINE( 617)			_hx_tmp21 = false;
             		}
-HXDLIN( 612)		if (_hx_tmp21) {
-HXLINE( 614)			::String isOwnAccount = ::borogove::JID_obj::parse(pubsubEvent->getFrom())->asBare()->asString();
-HXDLIN( 614)			bool isOwnAccount1 = (isOwnAccount == this->accountId());
-HXLINE( 615)			::String pubsubNode = pubsubEvent->getNode();
-HXLINE( 617)			bool _hx_tmp22;
-HXDLIN( 617)			bool _hx_tmp23;
-HXDLIN( 617)			if (isOwnAccount1) {
-HXLINE( 617)				_hx_tmp23 = (pubsubNode == HX_("http://jabber.org/protocol/nick",17,30,dc,e9));
+HXDLIN( 617)		if (_hx_tmp21) {
+HXLINE( 619)			::String isOwnAccount = ::borogove::JID_obj::parse(pubsubEvent->getFrom())->asBare()->asString();
+HXDLIN( 619)			bool isOwnAccount1 = (isOwnAccount == this->accountId());
+HXLINE( 620)			::String pubsubNode = pubsubEvent->getNode();
+HXLINE( 622)			bool _hx_tmp22;
+HXDLIN( 622)			bool _hx_tmp23;
+HXDLIN( 622)			if (isOwnAccount1) {
+HXLINE( 622)				_hx_tmp23 = (pubsubNode == HX_("http://jabber.org/protocol/nick",17,30,dc,e9));
             			}
             			else {
-HXLINE( 617)				_hx_tmp23 = false;
+HXLINE( 622)				_hx_tmp23 = false;
             			}
-HXDLIN( 617)			if (_hx_tmp23) {
-HXLINE( 617)				_hx_tmp22 = (pubsubEvent->getItems()->length > 0);
+HXDLIN( 622)			if (_hx_tmp23) {
+HXLINE( 622)				_hx_tmp22 = (pubsubEvent->getItems()->length > 0);
             			}
             			else {
-HXLINE( 617)				_hx_tmp22 = false;
+HXLINE( 622)				_hx_tmp22 = false;
             			}
-HXDLIN( 617)			if (_hx_tmp22) {
-HXLINE( 618)				this->updateDisplayName(pubsubEvent->getItems()->__get(0).StaticCast<  ::borogove::Stanza >()->getChildText(HX_("nick",a3,7b,05,49),HX_("http://jabber.org/protocol/nick",17,30,dc,e9)));
+HXDLIN( 622)			if (_hx_tmp22) {
+HXLINE( 623)				this->updateDisplayName(pubsubEvent->getItems()->__get(0).StaticCast<  ::borogove::Stanza >()->getChildText(HX_("nick",a3,7b,05,49),HX_("http://jabber.org/protocol/nick",17,30,dc,e9)));
             			}
-HXLINE( 621)			bool _hx_tmp24;
-HXDLIN( 621)			bool _hx_tmp25;
-HXDLIN( 621)			if (isOwnAccount1) {
-HXLINE( 621)				_hx_tmp25 = (pubsubNode == HX_("urn:xmpp:mds:displayed:0",bd,60,cc,fb));
+HXLINE( 626)			bool _hx_tmp24;
+HXDLIN( 626)			bool _hx_tmp25;
+HXDLIN( 626)			if (isOwnAccount1) {
+HXLINE( 626)				_hx_tmp25 = (pubsubNode == HX_("urn:xmpp:mds:displayed:0",bd,60,cc,fb));
             			}
             			else {
-HXLINE( 621)				_hx_tmp25 = false;
+HXLINE( 626)				_hx_tmp25 = false;
             			}
-HXDLIN( 621)			if (_hx_tmp25) {
-HXLINE( 621)				_hx_tmp24 = (pubsubEvent->getItems()->length > 0);
+HXDLIN( 626)			if (_hx_tmp25) {
+HXLINE( 626)				_hx_tmp24 = (pubsubEvent->getItems()->length > 0);
             			}
             			else {
-HXLINE( 621)				_hx_tmp24 = false;
-            			}
-HXDLIN( 621)			if (_hx_tmp24) {
-HXLINE( 622)				int _g10 = 0;
-HXDLIN( 622)				::Array< ::Dynamic> _g11 = pubsubEvent->getItems();
-HXDLIN( 622)				while((_g10 < _g11->length)){
-HXLINE( 622)					 ::borogove::Stanza item1 = _g11->__get(_g10).StaticCast<  ::borogove::Stanza >();
-HXDLIN( 622)					_g10 = (_g10 + 1);
-HXLINE( 623)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(item1->attr,HX_("id",db,5b,00,00))) ) )) {
-HXLINE( 624)						 ::borogove::Stanza tmp1 = item1->getChild(HX_("displayed",21,17,db,c1),HX_("urn:xmpp:mds:displayed:0",bd,60,cc,fb));
-HXDLIN( 624)						 ::borogove::Stanza upTo;
-HXDLIN( 624)						if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 624)							upTo = tmp1->getChild(HX_("stanza-id",73,8a,54,e9),HX_("urn:xmpp:sid:0",a8,4b,37,54));
+HXLINE( 626)				_hx_tmp24 = false;
+            			}
+HXDLIN( 626)			if (_hx_tmp24) {
+HXLINE( 627)				int _g10 = 0;
+HXDLIN( 627)				::Array< ::Dynamic> _g11 = pubsubEvent->getItems();
+HXDLIN( 627)				while((_g10 < _g11->length)){
+HXLINE( 627)					 ::borogove::Stanza item1 = _g11->__get(_g10).StaticCast<  ::borogove::Stanza >();
+HXDLIN( 627)					_g10 = (_g10 + 1);
+HXLINE( 628)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(item1->attr,HX_("id",db,5b,00,00))) ) )) {
+HXLINE( 629)						 ::borogove::Stanza tmp1 = item1->getChild(HX_("displayed",21,17,db,c1),HX_("urn:xmpp:mds:displayed:0",bd,60,cc,fb));
+HXDLIN( 629)						 ::borogove::Stanza upTo;
+HXDLIN( 629)						if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 629)							upTo = tmp1->getChild(HX_("stanza-id",73,8a,54,e9),HX_("urn:xmpp:sid:0",a8,4b,37,54));
             						}
             						else {
-HXLINE( 624)							upTo = null();
+HXLINE( 629)							upTo = null();
             						}
-HXLINE( 625)						 ::borogove::Chat chat8 = this->getChat(( (::String)(::Reflect_obj::field(item1->attr,HX_("id",db,5b,00,00))) ));
-HXLINE( 626)						if (::hx::IsNull( chat8 )) {
+HXLINE( 630)						 ::borogove::Chat chat8 = this->getChat(( (::String)(::Reflect_obj::field(item1->attr,HX_("id",db,5b,00,00))) ));
+HXLINE( 631)						if (::hx::IsNull( chat8 )) {
             							HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_10) HXARGC(1)
             							int _hx_run( ::borogove::Caps _){
-            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_627_processLiveMessage)
-HXLINE( 627)								return 2;
+            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_632_processLiveMessage)
+HXLINE( 632)								return 2;
             							}
             							HX_END_LOCAL_FUNC1(return)
 
             							HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_11, ::borogove::Stanza,upTo) HXARGC(1)
             							void _hx_run( ::borogove::Chat chat){
-            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_627_processLiveMessage)
-HXLINE( 627)								::String _hx_tmp = ( (::String)(::Reflect_obj::field(upTo->attr,HX_("id",db,5b,00,00))) );
-HXDLIN( 627)								chat->markReadUpToId(_hx_tmp,( (::String)(::Reflect_obj::field(upTo->attr,HX_("by",d7,55,00,00))) ));
+            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_632_processLiveMessage)
+HXLINE( 632)								::String _hx_tmp = ( (::String)(::Reflect_obj::field(upTo->attr,HX_("id",db,5b,00,00))) );
+HXDLIN( 632)								chat->markReadUpToId(_hx_tmp,( (::String)(::Reflect_obj::field(upTo->attr,HX_("by",d7,55,00,00))) ));
             							}
             							HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 627)							this->startChatWith(( (::String)(::Reflect_obj::field(item1->attr,HX_("id",db,5b,00,00))) ), ::Dynamic(new _hx_Closure_10()), ::Dynamic(new _hx_Closure_11(upTo)));
+HXLINE( 632)							this->startChatWith(( (::String)(::Reflect_obj::field(item1->attr,HX_("id",db,5b,00,00))) ), ::Dynamic(new _hx_Closure_10()), ::Dynamic(new _hx_Closure_11(upTo)));
             						}
             						else {
             							HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_12, ::borogove::Chat,chat8, ::borogove::Client,_gthis) HXARGC(1)
             							void _hx_run( ::Dynamic _){
-            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_629_processLiveMessage)
-HXLINE( 630)								::Dynamic _gthis1 = _gthis->persistence;
-HXDLIN( 630)								::String _hx_tmp = _gthis->accountId();
-HXDLIN( 630)								::borogove::Persistence_obj::storeChats(_gthis1,_hx_tmp,::Array_obj< ::Dynamic>::__new(1)->init(0,chat8));
-HXLINE( 631)								_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat8));
+            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_634_processLiveMessage)
+HXLINE( 635)								::Dynamic _gthis1 = _gthis->persistence;
+HXDLIN( 635)								::String _hx_tmp = _gthis->accountId();
+HXDLIN( 635)								::borogove::Persistence_obj::storeChats(_gthis1,_hx_tmp,::Array_obj< ::Dynamic>::__new(1)->init(0,chat8));
+HXLINE( 636)								_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat8));
             							}
             							HX_END_LOCAL_FUNC1((void))
 
             							HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_13) HXARGC(1)
             							::Dynamic _hx_run( ::Dynamic e){
-            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_633_processLiveMessage)
-HXLINE( 633)								if (::hx::IsNotNull( e )) {
-HXLINE( 633)									return ::thenshim::_Promise::Promise_Impl__obj::reject(e);
+            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_638_processLiveMessage)
+HXLINE( 638)								if (::hx::IsNotNull( e )) {
+HXLINE( 638)									return ::thenshim::_Promise::Promise_Impl__obj::reject(e);
             								}
             								else {
-HXLINE( 633)									return null();
+HXLINE( 638)									return null();
             								}
-HXDLIN( 633)								return null();
+HXDLIN( 638)								return null();
             							}
             							HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 629)							 ::borogove::Chat chat9 = chat8;
-HXDLIN( 629)							::String _hx_tmp26 = ( (::String)(::Reflect_obj::field(upTo->attr,HX_("id",db,5b,00,00))) );
-HXDLIN( 629)							::thenshim::_Promise::Promise_Impl__obj::then(chat9->markReadUpToId(_hx_tmp26,( (::String)(::Reflect_obj::field(upTo->attr,HX_("by",d7,55,00,00))) )), ::Dynamic(new _hx_Closure_12(chat8,_gthis)), ::Dynamic(new _hx_Closure_13()));
+HXLINE( 634)							 ::borogove::Chat chat9 = chat8;
+HXDLIN( 634)							::String _hx_tmp26 = ( (::String)(::Reflect_obj::field(upTo->attr,HX_("id",db,5b,00,00))) );
+HXDLIN( 634)							::thenshim::_Promise::Promise_Impl__obj::then(chat9->markReadUpToId(_hx_tmp26,( (::String)(::Reflect_obj::field(upTo->attr,HX_("by",d7,55,00,00))) )), ::Dynamic(new _hx_Closure_12(chat8,_gthis)), ::Dynamic(new _hx_Closure_13()));
             						}
             					}
             				}
             			}
-HXLINE( 638)			::haxe::Log_obj::trace((HX_("pubsubNode == ",a5,37,1e,6c) + pubsubNode),::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),638,HX_("borogove.Client",18,dc,e6,c0),HX_("processLiveMessage",0c,f2,77,58)));
+HXLINE( 643)			::haxe::Log_obj::trace((HX_("pubsubNode == ",a5,37,1e,6c) + pubsubNode),::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),643,HX_("borogove.Client",18,dc,e6,c0),HX_("processLiveMessage",0c,f2,77,58)));
             		}
             	}
 
@@ -1950,9 +1971,9 @@ HX_DEFINE_DYNAMIC_FUNC3(Client_obj,processLiveMessage,(void))
 void Client_obj::start(){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Client,_gthis) HXARGC(1)
             		::Dynamic _hx_run(bool _){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_658_start)
-HXLINE( 658)			::Dynamic _gthis1 = _gthis->persistence;
-HXDLIN( 658)			return ::borogove::Persistence_obj::getStreamManagement(_gthis1,_gthis->accountId());
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_663_start)
+HXLINE( 663)			::Dynamic _gthis1 = _gthis->persistence;
+HXDLIN( 663)			return ::borogove::Persistence_obj::getStreamManagement(_gthis1,_gthis->accountId());
             		}
             		HX_END_LOCAL_FUNC1(return)
 
@@ -1960,88 +1981,88 @@ HXDLIN( 658)			return ::borogove::Persistence_obj::getStreamManagement(_gthis1,_
             		void _hx_run(::Array< unsigned char > sm){
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_2, ::borogove::Client,_gthis) HXARGC(1)
             			 ::borogove::EventResult _hx_run( ::Dynamic data){
-            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_660_start)
-HXLINE( 661)				 ::Dynamic tmp = data->__Field(HX_("mechanisms",fa,b0,9e,80),::hx::paccDynamic);
-HXDLIN( 661)				 ::Dynamic tmp1;
-HXDLIN( 661)				if (::hx::IsNotNull( tmp )) {
+            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_665_start)
+HXLINE( 666)				 ::Dynamic tmp = data->__Field(HX_("mechanisms",fa,b0,9e,80),::hx::paccDynamic);
+HXDLIN( 666)				 ::Dynamic tmp1;
+HXDLIN( 666)				if (::hx::IsNotNull( tmp )) {
             					HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             					 ::Dynamic _hx_run( ::Dynamic mech){
-            						HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_661_start)
-HXLINE( 661)						return  ::Dynamic(mech->__Field(HX_("canFast",cc,aa,0d,62),::hx::paccDynamic));
+            						HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_666_start)
+HXLINE( 666)						return  ::Dynamic(mech->__Field(HX_("canFast",cc,aa,0d,62),::hx::paccDynamic));
             					}
             					HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 661)					tmp1 = tmp->__Field(HX_("find",39,d0,bb,43),::hx::paccDynamic)( ::Dynamic(new _hx_Closure_1()));
+HXLINE( 666)					tmp1 = tmp->__Field(HX_("find",39,d0,bb,43),::hx::paccDynamic)( ::Dynamic(new _hx_Closure_1()));
             				}
             				else {
-HXLINE( 661)					tmp1 = null();
+HXLINE( 666)					tmp1 = null();
             				}
-HXDLIN( 661)				::String _hx_tmp;
-HXDLIN( 661)				if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 661)					_hx_tmp = ( (::String)(tmp1->__Field(HX_("name",4b,72,ff,48),::hx::paccDynamic)) );
+HXDLIN( 666)				::String _hx_tmp;
+HXDLIN( 666)				if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 666)					_hx_tmp = ( (::String)(tmp1->__Field(HX_("name",4b,72,ff,48),::hx::paccDynamic)) );
             				}
             				else {
-HXLINE( 661)					_hx_tmp = null();
+HXLINE( 666)					_hx_tmp = null();
             				}
-HXDLIN( 661)				_gthis->fastMechanism = _hx_tmp;
-HXLINE( 662)				bool _hx_tmp1;
-HXDLIN( 662)				if (::hx::IsNotNull( _gthis->token )) {
-HXLINE( 662)					if (::hx::IsNull( _gthis->fastMechanism )) {
-HXLINE( 662)						_hx_tmp1 = ::hx::IsNotNull( data->__Field(HX_("mechanimsms",cb,6a,49,06),::hx::paccDynamic) );
+HXDLIN( 666)				_gthis->fastMechanism = _hx_tmp;
+HXLINE( 667)				bool _hx_tmp1;
+HXDLIN( 667)				if (::hx::IsNotNull( _gthis->token )) {
+HXLINE( 667)					if (::hx::IsNull( _gthis->fastMechanism )) {
+HXLINE( 667)						_hx_tmp1 = ::hx::IsNotNull( data->__Field(HX_("mechanimsms",cb,6a,49,06),::hx::paccDynamic) );
             					}
             					else {
-HXLINE( 662)						_hx_tmp1 = false;
+HXLINE( 667)						_hx_tmp1 = false;
             					}
             				}
             				else {
-HXLINE( 662)					_hx_tmp1 = true;
+HXLINE( 667)					_hx_tmp1 = true;
             				}
-HXDLIN( 662)				if (_hx_tmp1) {
-HXLINE( 663)					 ::borogove::Client _gthis1 = _gthis;
-HXDLIN( 663)					return _gthis1->trigger(HX_("auth/password-needed",80,f0,74,49), ::Dynamic(::hx::Anon_obj::Create(1)
+HXDLIN( 667)				if (_hx_tmp1) {
+HXLINE( 668)					 ::borogove::Client _gthis1 = _gthis;
+HXDLIN( 668)					return _gthis1->trigger(HX_("auth/password-needed",80,f0,74,49), ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("accountId",e8,81,54,29),_gthis->accountId())));
             				}
             				else {
-HXLINE( 665)					return _gthis->stream->trigger(HX_("auth/password",e2,5d,98,00), ::Dynamic(::hx::Anon_obj::Create(3)
+HXLINE( 670)					return _gthis->stream->trigger(HX_("auth/password",e2,5d,98,00), ::Dynamic(::hx::Anon_obj::Create(3)
             						->setFixed(0,HX_("fastCount",93,fc,67,a5),_gthis->fastCount)
             						->setFixed(1,HX_("mechanism",59,fd,7e,2e),_gthis->fastMechanism)
             						->setFixed(2,HX_("password",1b,23,d0,48),_gthis->token)));
             				}
-HXLINE( 662)				return null();
+HXLINE( 667)				return null();
             			}
             			HX_END_LOCAL_FUNC1(return)
 
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_3, ::borogove::Client,_gthis,::Array< unsigned char >,sm) HXARGC(1)
             			 ::borogove::EventResult _hx_run( ::Dynamic data){
-            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_668_start)
-HXLINE( 669)				if (::hx::IsNotNull( _gthis->token )) {
-HXLINE( 670)					_gthis->token = null();
-HXLINE( 671)					 ::borogove::GenericStream _gthis1 = _gthis->stream;
-HXDLIN( 671)					::String _hx_tmp = _gthis->jid->asString();
-HXDLIN( 671)					_gthis1->connect(_hx_tmp,sm);
+            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_673_start)
+HXLINE( 674)				if (::hx::IsNotNull( _gthis->token )) {
+HXLINE( 675)					_gthis->token = null();
+HXLINE( 676)					 ::borogove::GenericStream _gthis1 = _gthis->stream;
+HXDLIN( 676)					::String _hx_tmp = _gthis->jid->asString();
+HXDLIN( 676)					_gthis1->connect(_hx_tmp,sm);
             				}
             				else {
-HXLINE( 673)					 ::borogove::GenericStream _gthis2 = _gthis->stream;
-HXDLIN( 673)					::String _hx_tmp1 = _gthis->jid->asString();
-HXDLIN( 673)					_gthis2->connect(_hx_tmp1,sm);
+HXLINE( 678)					 ::borogove::GenericStream _gthis2 = _gthis->stream;
+HXDLIN( 678)					::String _hx_tmp1 = _gthis->jid->asString();
+HXDLIN( 678)					_gthis2->connect(_hx_tmp1,sm);
             				}
-HXLINE( 675)				return ::borogove::EventResult_obj::EventHandled_dyn();
+HXLINE( 680)				return ::borogove::EventResult_obj::EventHandled_dyn();
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_659_start)
-HXLINE( 660)			_gthis->stream->on(HX_("auth/password-needed",80,f0,74,49), ::Dynamic(new _hx_Closure_2(_gthis)));
-HXLINE( 668)			_gthis->stream->on(HX_("auth/fail",25,45,e9,d1), ::Dynamic(new _hx_Closure_3(_gthis,sm)));
-HXLINE( 677)			 ::borogove::GenericStream _gthis1 = _gthis->stream;
-HXDLIN( 677)			::String _hx_tmp = _gthis->jid->asString();
-HXDLIN( 677)			_gthis1->connect(_hx_tmp,sm);
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_664_start)
+HXLINE( 665)			_gthis->stream->on(HX_("auth/password-needed",80,f0,74,49), ::Dynamic(new _hx_Closure_2(_gthis)));
+HXLINE( 673)			_gthis->stream->on(HX_("auth/fail",25,45,e9,d1), ::Dynamic(new _hx_Closure_3(_gthis,sm)));
+HXLINE( 682)			 ::borogove::GenericStream _gthis1 = _gthis->stream;
+HXDLIN( 682)			::String _hx_tmp = _gthis->jid->asString();
+HXDLIN( 682)			_gthis1->connect(_hx_tmp,sm);
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_655_start)
-HXDLIN( 655)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 656)		this->stream->emitSMupdates = false;
-HXLINE( 657)		::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(this->startOffline(), ::Dynamic(new _hx_Closure_0(_gthis)),null()), ::Dynamic(new _hx_Closure_4(_gthis)),null());
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_660_start)
+HXDLIN( 660)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 661)		this->stream->emitSMupdates = false;
+HXLINE( 662)		::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(this->startOffline(), ::Dynamic(new _hx_Closure_0(_gthis)),null()), ::Dynamic(new _hx_Closure_4(_gthis)),null());
             	}
 
 
@@ -2050,110 +2071,110 @@ HX_DEFINE_DYNAMIC_FUNC0(Client_obj,start,(void))
 ::Dynamic Client_obj::startOffline(){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Client,_gthis) HXARGC(1)
             		::Dynamic _hx_run( ::Dynamic login){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_691_startOffline)
-HXLINE( 692)			_gthis->token = ( (::String)(login->__Field(HX_("token",f9,82,2b,14),::hx::paccDynamic)) );
-HXLINE( 693)			_gthis->fastCount = login->__Field(HX_("fastCount",93,fc,67,a5),::hx::paccDynamic);
-HXLINE( 694)			::String tmp = ( (::String)(login->__Field(HX_("clientId",06,73,8f,15),::hx::paccDynamic)) );
-HXDLIN( 694)			::String _hx_tmp;
-HXDLIN( 694)			if (::hx::IsNotNull( tmp )) {
-HXLINE( 694)				_hx_tmp = tmp;
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_696_startOffline)
+HXLINE( 697)			_gthis->token = ( (::String)(login->__Field(HX_("token",f9,82,2b,14),::hx::paccDynamic)) );
+HXLINE( 698)			_gthis->fastCount = login->__Field(HX_("fastCount",93,fc,67,a5),::hx::paccDynamic);
+HXLINE( 699)			::String tmp = ( (::String)(login->__Field(HX_("clientId",06,73,8f,15),::hx::paccDynamic)) );
+HXDLIN( 699)			::String _hx_tmp;
+HXDLIN( 699)			if (::hx::IsNotNull( tmp )) {
+HXLINE( 699)				_hx_tmp = tmp;
             			}
             			else {
-HXLINE( 694)				_hx_tmp = ::borogove::ID_obj::_hx_long();
+HXLINE( 699)				_hx_tmp = ::borogove::ID_obj::_hx_long();
             			}
-HXDLIN( 694)			_gthis->stream->clientId = _hx_tmp;
-HXLINE( 695)			_gthis->jid = _gthis->jid->withResource(_gthis->stream->clientId);
-HXLINE( 696)			bool _hx_tmp1;
-HXDLIN( 696)			if (!(_gthis->updateDisplayName(( (::String)(login->__Field(HX_("displayName",ad,11,f2,30),::hx::paccDynamic)) )))) {
-HXLINE( 696)				_hx_tmp1 = ::hx::IsNull( login->__Field(HX_("clientId",06,73,8f,15),::hx::paccDynamic) );
+HXDLIN( 699)			_gthis->stream->clientId = _hx_tmp;
+HXLINE( 700)			_gthis->jid = _gthis->jid->withResource(_gthis->stream->clientId);
+HXLINE( 701)			bool _hx_tmp1;
+HXDLIN( 701)			if (!(_gthis->updateDisplayName(( (::String)(login->__Field(HX_("displayName",ad,11,f2,30),::hx::paccDynamic)) )))) {
+HXLINE( 701)				_hx_tmp1 = ::hx::IsNull( login->__Field(HX_("clientId",06,73,8f,15),::hx::paccDynamic) );
             			}
             			else {
-HXLINE( 696)				_hx_tmp1 = false;
+HXLINE( 701)				_hx_tmp1 = false;
             			}
-HXDLIN( 696)			if (_hx_tmp1) {
-HXLINE( 697)				::Dynamic _gthis1 = _gthis->persistence;
-HXDLIN( 697)				::String _hx_tmp2 = _gthis->jid->asBare()->asString();
-HXDLIN( 697)				::String _gthis2 = _gthis->stream->clientId;
-HXDLIN( 697)				::borogove::Persistence_obj::storeLogin(_gthis1,_hx_tmp2,_gthis2,_gthis->displayName(),null());
+HXDLIN( 701)			if (_hx_tmp1) {
+HXLINE( 702)				::Dynamic _gthis1 = _gthis->persistence;
+HXDLIN( 702)				::String _hx_tmp2 = _gthis->jid->asBare()->asString();
+HXDLIN( 702)				::String _gthis2 = _gthis->stream->clientId;
+HXDLIN( 702)				::borogove::Persistence_obj::storeLogin(_gthis1,_hx_tmp2,_gthis2,_gthis->displayName(),null());
             			}
-HXLINE( 700)			::Dynamic _gthis3 = _gthis->persistence;
-HXDLIN( 700)			return ::borogove::Persistence_obj::getChats(_gthis3,_gthis->accountId());
+HXLINE( 705)			::Dynamic _gthis3 = _gthis->persistence;
+HXDLIN( 705)			return ::borogove::Persistence_obj::getChats(_gthis3,_gthis->accountId());
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::borogove::Client,_gthis) HXARGC(1)
             		::Dynamic _hx_run(::Array< ::Dynamic> protoChats){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_701_startOffline)
-HXLINE( 702)			 ::borogove::SerializedChat oneProtoChat = null();
-HXLINE( 703)			while(true){
-HXLINE( 703)				oneProtoChat = protoChats->pop().StaticCast<  ::borogove::SerializedChat >();
-HXDLIN( 703)				if (!(::hx::IsNotNull( oneProtoChat ))) {
-HXLINE( 703)					goto _hx_goto_61;
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_706_startOffline)
+HXLINE( 707)			 ::borogove::SerializedChat oneProtoChat = null();
+HXLINE( 708)			while(true){
+HXLINE( 708)				oneProtoChat = protoChats->pop().StaticCast<  ::borogove::SerializedChat >();
+HXDLIN( 708)				if (!(::hx::IsNotNull( oneProtoChat ))) {
+HXLINE( 708)					goto _hx_goto_61;
             				}
-HXLINE( 704)				::Array< ::Dynamic> _gthis1 = _gthis->chats;
-HXDLIN( 704)				_gthis1->push(oneProtoChat->toChat(_gthis,_gthis->stream,_gthis->persistence));
+HXLINE( 709)				::Array< ::Dynamic> _gthis1 = _gthis->chats;
+HXDLIN( 709)				_gthis1->push(oneProtoChat->toChat(_gthis,_gthis->stream,_gthis->persistence));
             			}
             			_hx_goto_61:;
-HXLINE( 706)			 ::borogove::Client _gthis2 = _gthis;
-HXDLIN( 706)			_gthis2->getDirectChat(_gthis->accountId(),null());
-HXLINE( 707)			::Dynamic _gthis3 = _gthis->persistence;
-HXDLIN( 707)			::String _hx_tmp = _gthis->accountId();
-HXDLIN( 707)			return ::borogove::Persistence_obj::getChatsUnreadDetails(_gthis3,_hx_tmp,_gthis->chats);
+HXLINE( 711)			 ::borogove::Client _gthis2 = _gthis;
+HXDLIN( 711)			_gthis2->getDirectChat(_gthis->accountId(),null());
+HXLINE( 712)			::Dynamic _gthis3 = _gthis->persistence;
+HXDLIN( 712)			::String _hx_tmp = _gthis->accountId();
+HXDLIN( 712)			return ::borogove::Persistence_obj::getChatsUnreadDetails(_gthis3,_hx_tmp,_gthis->chats);
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_2, ::borogove::Client,_gthis) HXARGC(1)
             		bool _hx_run(::Array< ::Dynamic> details){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_708_startOffline)
-HXLINE( 709)			{
-HXLINE( 709)				int _g = 0;
-HXDLIN( 709)				while((_g < details->length)){
-HXLINE( 709)					 ::Dynamic detail = details->__get(_g);
-HXDLIN( 709)					_g = (_g + 1);
-HXLINE( 710)					 ::borogove::Chat chat = _gthis->getChat(( (::String)(detail->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)) ));
-HXLINE( 711)					if (::hx::IsNotNull( chat )) {
-HXLINE( 712)						chat->setLastMessage(( ( ::borogove::ChatMessage)(detail->__Field(HX_("message",c7,35,11,9a),::hx::paccDynamic)) ));
-HXLINE( 713)						chat->setUnreadCount(( (int)(detail->__Field(HX_("unreadCount",20,18,f1,a0),::hx::paccDynamic)) ));
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_713_startOffline)
+HXLINE( 714)			{
+HXLINE( 714)				int _g = 0;
+HXDLIN( 714)				while((_g < details->length)){
+HXLINE( 714)					 ::Dynamic detail = details->__get(_g);
+HXDLIN( 714)					_g = (_g + 1);
+HXLINE( 715)					 ::borogove::Chat chat = _gthis->getChat(( (::String)(detail->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)) ));
+HXLINE( 716)					if (::hx::IsNotNull( chat )) {
+HXLINE( 717)						chat->setLastMessage(( ( ::borogove::ChatMessage)(detail->__Field(HX_("message",c7,35,11,9a),::hx::paccDynamic)) ));
+HXLINE( 718)						chat->setUnreadCount(( (int)(detail->__Field(HX_("unreadCount",20,18,f1,a0),::hx::paccDynamic)) ));
             					}
             				}
             			}
-HXLINE( 716)			_gthis->sortChats();
-HXLINE( 717)			_gthis->trigger(HX_("chats/update",3d,8e,1d,14),_gthis->chats);
-HXLINE( 718)			return true;
+HXLINE( 721)			_gthis->sortChats();
+HXLINE( 722)			_gthis->trigger(HX_("chats/update",3d,8e,1d,14),_gthis->chats);
+HXLINE( 723)			return true;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_686_startOffline)
-HXDLIN( 686)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 689)		__hxcpp_collect(true);
-HXLINE( 691)		::Dynamic _hx_tmp = this->persistence;
-HXDLIN( 691)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getLogin(_hx_tmp,this->accountId()), ::Dynamic(new _hx_Closure_0(_gthis)),null()), ::Dynamic(new _hx_Closure_1(_gthis)),null()), ::Dynamic(new _hx_Closure_2(_gthis)),null());
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_691_startOffline)
+HXDLIN( 691)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 694)		__hxcpp_collect(true);
+HXLINE( 696)		::Dynamic _hx_tmp = this->persistence;
+HXDLIN( 696)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getLogin(_hx_tmp,this->accountId()), ::Dynamic(new _hx_Closure_0(_gthis)),null()), ::Dynamic(new _hx_Closure_1(_gthis)),null()), ::Dynamic(new _hx_Closure_2(_gthis)),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Client_obj,startOffline,return )
 
 void Client_obj::startOffline__fromC(::cpp::Function< void  (bool,void*) > handler,void* handler__context){
-            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_313_startOffline__fromC)
-HXDLIN( 313)		if (::hx::IsNull( handler )) {
-HXDLIN( 313)			this->startOffline();
+            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_337_startOffline__fromC)
+HXDLIN( 337)		if (::hx::IsNull( handler )) {
+HXDLIN( 337)			this->startOffline();
             		}
             		else {
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (bool HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
             			void _hx_run(bool v){
-            				HX_STACKFRAME(&_hx_pos_afe14372debdebc6_313_startOffline__fromC)
-HXDLIN( 313)				handler(v,handler__context);
+            				HX_STACKFRAME(&_hx_pos_afe14372debdebc6_337_startOffline__fromC)
+HXDLIN( 337)				handler(v,handler__context);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::cpp::Function< void  (bool HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
             			void _hx_run( ::Dynamic e){
-            				HX_STACKFRAME(&_hx_pos_afe14372debdebc6_313_startOffline__fromC)
-HXDLIN( 313)				handler(false,handler__context);
+            				HX_STACKFRAME(&_hx_pos_afe14372debdebc6_337_startOffline__fromC)
+HXDLIN( 337)				handler(false,handler__context);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-HXDLIN( 313)			::thenshim::_Promise::Promise_Impl__obj::then(this->startOffline(), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
+HXDLIN( 337)			::thenshim::_Promise::Promise_Impl__obj::then(this->startOffline(), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
             		}
             	}
 
@@ -2161,26 +2182,26 @@ HXDLIN( 313)			::thenshim::_Promise::Promise_Impl__obj::then(this->startOffline(
 void Client_obj::logout(bool completely){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Client,_gthis) HXARGC(0)
             		void _hx_run(){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_731_logout)
-HXLINE( 731)			_gthis->stream->disconnect();
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_736_logout)
+HXLINE( 736)			_gthis->stream->disconnect();
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_727_logout)
-HXDLIN( 727)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 728)		::Dynamic _hx_tmp = this->persistence;
-HXDLIN( 728)		::borogove::Persistence_obj::removeAccount(_hx_tmp,this->accountId(),completely);
-HXLINE( 729)		 ::borogove::queries::Push2Disable disable =  ::borogove::queries::Push2Disable_obj::__alloc( HX_CTX ,this->jid->asBare()->asString());
-HXLINE( 730)		disable->onFinished( ::Dynamic(new _hx_Closure_0(_gthis)));
-HXLINE( 733)		this->sendQuery(disable);
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_732_logout)
+HXDLIN( 732)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 733)		::Dynamic _hx_tmp = this->persistence;
+HXDLIN( 733)		::borogove::Persistence_obj::removeAccount(_hx_tmp,this->accountId(),completely);
+HXLINE( 734)		 ::borogove::queries::Push2Disable disable =  ::borogove::queries::Push2Disable_obj::__alloc( HX_CTX ,this->jid->asBare()->asString());
+HXLINE( 735)		disable->onFinished( ::Dynamic(new _hx_Closure_0(_gthis)));
+HXLINE( 738)		this->sendQuery(disable);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Client_obj,logout,(void))
 
 void Client_obj::usePassword(::String password){
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_743_usePassword)
-HXDLIN( 743)		this->stream->trigger(HX_("auth/password",e2,5d,98,00), ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_748_usePassword)
+HXDLIN( 748)		this->stream->trigger(HX_("auth/password",e2,5d,98,00), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("requestToken",2a,35,fd,af),this->fastMechanism)
             			->setFixed(1,HX_("password",1b,23,d0,48),password)));
             	}
@@ -2189,16 +2210,16 @@ HXDLIN( 743)		this->stream->trigger(HX_("auth/password",e2,5d,98,00), ::Dynamic(
 HX_DEFINE_DYNAMIC_FUNC1(Client_obj,usePassword,(void))
 
 ::String Client_obj::accountId(){
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_752_accountId)
-HXDLIN( 752)		return this->jid->asBare()->asString();
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_757_accountId)
+HXDLIN( 757)		return this->jid->asBare()->asString();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Client_obj,accountId,return )
 
 ::String Client_obj::displayName(){
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_761_displayName)
-HXDLIN( 761)		return this->_displayName;
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_766_displayName)
+HXDLIN( 766)		return this->_displayName;
             	}
 
 
@@ -2207,59 +2228,59 @@ HX_DEFINE_DYNAMIC_FUNC0(Client_obj,displayName,return )
 void Client_obj::setProfile( ::borogove::ProfileBuilder profile,bool publicAccess){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		bool _hx_run( ::borogove::ProfileItem item){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_771_setProfile)
-HXLINE( 771)			return (item->key == HX_("fn",48,59,00,00));
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_776_setProfile)
+HXLINE( 776)			return (item->key == HX_("fn",48,59,00,00));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_770_setProfile)
-HXLINE( 771)		 ::borogove::ProfileItem fn = ( ( ::borogove::ProfileItem)(::Lambda_obj::find(profile->build()->items, ::Dynamic(new _hx_Closure_0()))) );
-HXLINE( 772)		if (::hx::IsNotNull( fn )) {
-HXLINE( 773)			::String fnText = fn->text()->__get(0);
-HXLINE( 774)			bool _hx_tmp;
-HXDLIN( 774)			bool _hx_tmp1;
-HXDLIN( 774)			if (::hx::IsNotNull( fnText )) {
-HXLINE( 774)				_hx_tmp1 = (fnText != HX_("",00,00,00,00));
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_775_setProfile)
+HXLINE( 776)		 ::borogove::ProfileItem fn = ( ( ::borogove::ProfileItem)(::Lambda_obj::find(profile->build()->items, ::Dynamic(new _hx_Closure_0()))) );
+HXLINE( 777)		if (::hx::IsNotNull( fn )) {
+HXLINE( 778)			::String fnText = fn->text()->__get(0);
+HXLINE( 779)			bool _hx_tmp;
+HXDLIN( 779)			bool _hx_tmp1;
+HXDLIN( 779)			if (::hx::IsNotNull( fnText )) {
+HXLINE( 779)				_hx_tmp1 = (fnText != HX_("",00,00,00,00));
             			}
             			else {
-HXLINE( 774)				_hx_tmp1 = false;
+HXLINE( 779)				_hx_tmp1 = false;
             			}
-HXDLIN( 774)			if (_hx_tmp1) {
-HXLINE( 774)				_hx_tmp = (fnText != this->displayName());
+HXDLIN( 779)			if (_hx_tmp1) {
+HXLINE( 779)				_hx_tmp = (fnText != this->displayName());
             			}
             			else {
-HXLINE( 774)				_hx_tmp = false;
+HXLINE( 779)				_hx_tmp = false;
             			}
-HXDLIN( 774)			if (_hx_tmp) {
+HXDLIN( 779)			if (_hx_tmp) {
             				HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             				void _hx_run( ::borogove::Stanza response){
-            					HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_782_setProfile)
+            					HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_787_setProfile)
             				}
             				HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 775)				 ::borogove::GenericStream _hx_tmp2 = this->stream;
-HXDLIN( 775)				_hx_tmp2->sendIq( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE( 780)				 ::borogove::GenericStream _hx_tmp2 = this->stream;
+HXDLIN( 780)				_hx_tmp2->sendIq( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))))->tag(HX_("pubsub",e3,da,f8,66), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/pubsub",57,94,3c,f2))))->tag(HX_("publish",8f,21,1d,ae), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("node",02,0a,0a,49),HX_("http://jabber.org/protocol/nick",17,30,dc,e9))))->tag(HX_("item",13,c5,bf,45),null())->textTag(HX_("nick",a3,7b,05,49),fnText, ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/nick",17,30,dc,e9))))->up()->up()->up(), ::Dynamic(new _hx_Closure_1()));
             			}
             		}
-HXLINE( 788)		 ::borogove::Stanza _hx_tmp3 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE( 793)		 ::borogove::Stanza _hx_tmp3 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))))->tag(HX_("pubsub",e3,da,f8,66), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/pubsub",57,94,3c,f2))))->tag(HX_("publish",8f,21,1d,ae), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("node",02,0a,0a,49),HX_("urn:xmpp:vcard4",4a,89,04,19))));
-HXDLIN( 788)		 ::borogove::Stanza _hx_tmp4 = _hx_tmp3->tag(HX_("item",13,c5,bf,45), ::Dynamic(::hx::Anon_obj::Create(1)
+HXDLIN( 793)		 ::borogove::Stanza _hx_tmp4 = _hx_tmp3->tag(HX_("item",13,c5,bf,45), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("id",db,5b,00,00),::borogove::ID_obj::_hx_long())));
-HXDLIN( 788)		 ::borogove::Stanza _hx_tmp5 = _hx_tmp4->addChild(profile->buildStanza());
-HXLINE( 800)		::String _hx_tmp6;
-HXDLIN( 800)		if (publicAccess) {
-HXLINE( 800)			_hx_tmp6 = HX_("open",ca,03,b4,49);
+HXDLIN( 793)		 ::borogove::Stanza _hx_tmp5 = _hx_tmp4->addChild(profile->buildStanza());
+HXLINE( 805)		::String _hx_tmp6;
+HXDLIN( 805)		if (publicAccess) {
+HXLINE( 805)			_hx_tmp6 = HX_("open",ca,03,b4,49);
             		}
             		else {
-HXLINE( 800)			_hx_tmp6 = HX_("presence",3b,52,d7,66);
+HXLINE( 805)			_hx_tmp6 = HX_("presence",3b,52,d7,66);
             		}
-HXLINE( 787)		this->publishWithOptions(_hx_tmp5, ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 792)		this->publishWithOptions(_hx_tmp5, ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("type",ba,f2,08,4d),HX_("submit",18,58,06,9a))
             			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("jabber:x:data",c2,e1,e9,7c))))->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("var",e7,de,59,00),HX_("FORM_TYPE",d5,96,c9,5a))
@@ -2276,38 +2297,38 @@ HXLINE( 787)		this->publishWithOptions(_hx_tmp5, ::borogove::Stanza_obj::__alloc
 HX_DEFINE_DYNAMIC_FUNC2(Client_obj,setProfile,(void))
 
 bool Client_obj::updateDisplayName(::String fn){
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_804_updateDisplayName)
-HXLINE( 805)		bool _hx_tmp;
-HXDLIN( 805)		bool _hx_tmp1;
-HXDLIN( 805)		if (::hx::IsNotNull( fn )) {
-HXLINE( 805)			_hx_tmp1 = (fn == HX_("",00,00,00,00));
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_809_updateDisplayName)
+HXLINE( 810)		bool _hx_tmp;
+HXDLIN( 810)		bool _hx_tmp1;
+HXDLIN( 810)		if (::hx::IsNotNull( fn )) {
+HXLINE( 810)			_hx_tmp1 = (fn == HX_("",00,00,00,00));
             		}
             		else {
-HXLINE( 805)			_hx_tmp1 = true;
+HXLINE( 810)			_hx_tmp1 = true;
             		}
-HXDLIN( 805)		if (!(_hx_tmp1)) {
-HXLINE( 805)			_hx_tmp = (fn == this->displayName());
+HXDLIN( 810)		if (!(_hx_tmp1)) {
+HXLINE( 810)			_hx_tmp = (fn == this->displayName());
             		}
             		else {
-HXLINE( 805)			_hx_tmp = true;
+HXLINE( 810)			_hx_tmp = true;
             		}
-HXDLIN( 805)		if (_hx_tmp) {
-HXLINE( 805)			return false;
+HXDLIN( 810)		if (_hx_tmp) {
+HXLINE( 810)			return false;
             		}
-HXLINE( 806)		this->_displayName = fn;
-HXLINE( 807)		::Dynamic _hx_tmp2 = this->persistence;
-HXDLIN( 807)		::String _hx_tmp3 = this->jid->asBare()->asString();
-HXDLIN( 807)		::String tmp = this->stream->clientId;
-HXDLIN( 807)		::String _hx_tmp4;
-HXDLIN( 807)		if (::hx::IsNotNull( tmp )) {
-HXLINE( 807)			_hx_tmp4 = tmp;
+HXLINE( 811)		this->_displayName = fn;
+HXLINE( 812)		::Dynamic _hx_tmp2 = this->persistence;
+HXDLIN( 812)		::String _hx_tmp3 = this->jid->asBare()->asString();
+HXDLIN( 812)		::String tmp = this->stream->clientId;
+HXDLIN( 812)		::String _hx_tmp4;
+HXDLIN( 812)		if (::hx::IsNotNull( tmp )) {
+HXLINE( 812)			_hx_tmp4 = tmp;
             		}
             		else {
-HXLINE( 807)			_hx_tmp4 = this->jid->resource;
+HXLINE( 812)			_hx_tmp4 = this->jid->resource;
             		}
-HXDLIN( 807)		::borogove::Persistence_obj::storeLogin(_hx_tmp2,_hx_tmp3,_hx_tmp4,fn,null());
-HXLINE( 808)		this->pingAllChannels(false);
-HXLINE( 809)		return true;
+HXDLIN( 812)		::borogove::Persistence_obj::storeLogin(_hx_tmp2,_hx_tmp3,_hx_tmp4,fn,null());
+HXLINE( 813)		this->pingAllChannels(false);
+HXLINE( 814)		return true;
             	}
 
 
@@ -2316,11 +2337,11 @@ HX_DEFINE_DYNAMIC_FUNC1(Client_obj,updateDisplayName,return )
  ::borogove::EventResult Client_obj::onConnected( ::Dynamic data){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Client,_gthis) HXARGC(2)
             		void _hx_run( ::Dynamic service, ::borogove::Caps caps){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_827_onConnected)
-HXLINE( 827)			::Dynamic _gthis1 = _gthis->persistence;
-HXDLIN( 827)			::String _hx_tmp = _gthis->accountId();
-HXDLIN( 827)			::String _hx_tmp1 = ( ( ::borogove::JID)(service->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)) )->asString();
-HXDLIN( 827)			::borogove::Persistence_obj::storeService(_gthis1,_hx_tmp,_hx_tmp1, ::Dynamic(service->__Field(HX_("name",4b,72,ff,48),::hx::paccDynamic)), ::Dynamic(service->__Field(HX_("node",02,0a,0a,49),::hx::paccDynamic)),caps);
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_840_onConnected)
+HXLINE( 840)			::Dynamic _gthis1 = _gthis->persistence;
+HXDLIN( 840)			::String _hx_tmp = _gthis->accountId();
+HXDLIN( 840)			::String _hx_tmp1 = ( ( ::borogove::JID)(service->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)) )->asString();
+HXDLIN( 840)			::borogove::Persistence_obj::storeService(_gthis1,_hx_tmp,_hx_tmp1, ::Dynamic(service->__Field(HX_("name",4b,72,ff,48),::hx::paccDynamic)), ::Dynamic(service->__Field(HX_("node",02,0a,0a,49),::hx::paccDynamic)),caps);
             		}
             		HX_END_LOCAL_FUNC2((void))
 
@@ -2330,110 +2351,125 @@ HXDLIN( 827)			::borogove::Persistence_obj::storeService(_gthis1,_hx_tmp,_hx_tmp
             			void _hx_run(bool syncFinished){
             				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::borogove::Client,_gthis) HXARGC(1)
             				void _hx_run(::Array< ::Dynamic> details){
-            					HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_844_onConnected)
-HXLINE( 845)					{
-HXLINE( 845)						int _g = 0;
-HXDLIN( 845)						while((_g < details->length)){
-HXLINE( 845)							 ::Dynamic detail = details->__get(_g);
-HXDLIN( 845)							_g = (_g + 1);
-HXLINE( 846)							 ::borogove::Chat chat;
-HXDLIN( 846)							 ::borogove::Chat tmp = _gthis->getChat(( (::String)(detail->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)) ));
-HXDLIN( 846)							if (::hx::IsNotNull( tmp )) {
-HXLINE( 846)								chat = tmp;
+            					HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_857_onConnected)
+HXLINE( 858)					{
+HXLINE( 858)						int _g = 0;
+HXDLIN( 858)						while((_g < details->length)){
+HXLINE( 858)							 ::Dynamic detail = details->__get(_g);
+HXDLIN( 858)							_g = (_g + 1);
+HXLINE( 859)							 ::borogove::Chat chat;
+HXDLIN( 859)							 ::borogove::Chat tmp = _gthis->getChat(( (::String)(detail->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)) ));
+HXDLIN( 859)							if (::hx::IsNotNull( tmp )) {
+HXLINE( 859)								chat = tmp;
             							}
             							else {
-HXLINE( 846)								chat = _gthis->getDirectChat(( (::String)(detail->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)) ),false);
+HXLINE( 859)								chat = _gthis->getDirectChat(( (::String)(detail->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)) ),false);
             							}
-HXLINE( 847)							::String initialLastId = chat->lastMessageId();
-HXLINE( 848)							chat->setLastMessage(( ( ::borogove::ChatMessage)(detail->__Field(HX_("message",c7,35,11,9a),::hx::paccDynamic)) ));
-HXLINE( 849)							chat->setUnreadCount(( (int)(detail->__Field(HX_("unreadCount",20,18,f1,a0),::hx::paccDynamic)) ));
-HXLINE( 850)							bool _hx_tmp;
-HXDLIN( 850)							if (::hx::IsGreater( detail->__Field(HX_("unreadCount",20,18,f1,a0),::hx::paccDynamic),0 )) {
-HXLINE( 850)								_hx_tmp = (initialLastId != chat->lastMessageId());
+HXLINE( 860)							::String initialLastId = chat->lastMessageId();
+HXLINE( 861)							if (::hx::IsNotNull( detail->__Field(HX_("message",c7,35,11,9a),::hx::paccDynamic) )) {
+HXLINE( 861)								chat->setLastMessage(( ( ::borogove::ChatMessage)(detail->__Field(HX_("message",c7,35,11,9a),::hx::paccDynamic)) ));
+            							}
+HXLINE( 862)							chat->setUnreadCount(( (int)(detail->__Field(HX_("unreadCount",20,18,f1,a0),::hx::paccDynamic)) ));
+HXLINE( 863)							bool _hx_tmp;
+HXDLIN( 863)							if (::hx::IsGreater( detail->__Field(HX_("unreadCount",20,18,f1,a0),::hx::paccDynamic),0 )) {
+HXLINE( 863)								_hx_tmp = (initialLastId != chat->lastMessageId());
             							}
             							else {
-HXLINE( 850)								_hx_tmp = false;
+HXLINE( 863)								_hx_tmp = false;
             							}
-HXDLIN( 850)							if (_hx_tmp) {
-HXLINE( 851)								_gthis->chatActivity(chat,false);
+HXDLIN( 863)							if (_hx_tmp) {
+HXLINE( 864)								_gthis->chatActivity(chat,false);
             							}
             						}
             					}
-HXLINE( 854)					_gthis->sortChats();
-HXLINE( 855)					_gthis->trigger(HX_("chats/update",3d,8e,1d,14),_gthis->chats);
-HXLINE( 857)					if (_gthis->sendAvailable) {
-HXLINE( 859)						 ::borogove::Client _gthis1 = _gthis;
-HXLINE( 860)						::String _hx_tmp1 = ::borogove::ID_obj::_hx_short();
-HXLINE( 859)						_gthis1->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 867)					_gthis->sortChats();
+HXLINE( 868)					_gthis->trigger(HX_("chats/update",3d,8e,1d,14),_gthis->chats);
+HXLINE( 870)					if (_gthis->sendAvailable) {
+HXLINE( 872)						 ::borogove::Client _gthis1 = _gthis;
+HXLINE( 873)						::String _hx_tmp1 = ::borogove::ID_obj::_hx_short();
+HXLINE( 872)						_gthis1->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
             							->setFixed(0,HX_("id",db,5b,00,00),_hx_tmp1)
             							->setFixed(1,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))))->tag(HX_("enable",83,ae,87,f8), ::Dynamic(::hx::Anon_obj::Create(1)
             							->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:carbons:2",02,86,9e,df))))->up());
-HXLINE( 864)						_gthis->sendPresence(null(),null());
-HXLINE( 865)						_gthis->joinAllChannels();
+HXLINE( 877)						_gthis->sendPresence(null(),null());
+HXLINE( 878)						_gthis->joinAllChannels();
             					}
-HXLINE( 867)					_gthis->trigger(HX_("status/online",10,05,0e,d2), ::Dynamic(::hx::Anon_obj::Create(0)));
-HXLINE( 868)					::haxe::Log_obj::trace(HX_("SYNC: done",c3,a6,82,dd),::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),868,HX_("borogove.Client",18,dc,e6,c0),HX_("onConnected",aa,c5,39,c5)));
+HXLINE( 880)					_gthis->trigger(HX_("status/online",10,05,0e,d2), ::Dynamic(::hx::Anon_obj::Create(0)));
+HXLINE( 881)					::haxe::Log_obj::trace(HX_("SYNC: done",c3,a6,82,dd),::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),881,HX_("borogove.Client",18,dc,e6,c0),HX_("onConnected",aa,c5,39,c5)));
             				}
             				HX_END_LOCAL_FUNC1((void))
 
-            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_833_onConnected)
-HXLINE( 834)				if (!(syncFinished)) {
-HXLINE( 835)					::haxe::Log_obj::trace(HX_("SYNC: failed",3e,4e,5e,fa),::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),835,HX_("borogove.Client",18,dc,e6,c0),HX_("onConnected",aa,c5,39,c5)));
-HXLINE( 836)					_gthis->inSync = false;
-HXLINE( 837)					_gthis->stream->disconnect();
-HXLINE( 839)					return;
+            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_846_onConnected)
+HXLINE( 847)				if (!(syncFinished)) {
+HXLINE( 848)					::haxe::Log_obj::trace(HX_("SYNC: failed",3e,4e,5e,fa),::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),848,HX_("borogove.Client",18,dc,e6,c0),HX_("onConnected",aa,c5,39,c5)));
+HXLINE( 849)					_gthis->inSync = false;
+HXLINE( 850)					_gthis->stream->disconnect();
+HXLINE( 852)					return;
             				}
-HXLINE( 842)				::haxe::Log_obj::trace(HX_("SYNC: details",21,c5,8e,ac),::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),842,HX_("borogove.Client",18,dc,e6,c0),HX_("onConnected",aa,c5,39,c5)));
-HXLINE( 843)				_gthis->inSync = true;
-HXLINE( 844)				::Dynamic _gthis1 = _gthis->persistence;
-HXDLIN( 844)				::String _hx_tmp = _gthis->accountId();
-HXDLIN( 844)				::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getChatsUnreadDetails(_gthis1,_hx_tmp,_gthis->chats), ::Dynamic(new _hx_Closure_1(_gthis)),null());
+HXLINE( 855)				::haxe::Log_obj::trace(HX_("SYNC: details",21,c5,8e,ac),::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),855,HX_("borogove.Client",18,dc,e6,c0),HX_("onConnected",aa,c5,39,c5)));
+HXLINE( 856)				_gthis->inSync = true;
+HXLINE( 857)				::Dynamic _gthis1 = _gthis->persistence;
+HXDLIN( 857)				::String _hx_tmp = _gthis->accountId();
+HXDLIN( 857)				::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getChatsUnreadDetails(_gthis1,_hx_tmp,_gthis->chats), ::Dynamic(new _hx_Closure_1(_gthis)),null());
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_831_onConnected)
-HXLINE( 832)			::haxe::Log_obj::trace(HX_("SYNC: MAM",58,33,e1,36),::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),832,HX_("borogove.Client",18,dc,e6,c0),HX_("onConnected",aa,c5,39,c5)));
-HXLINE( 833)			_gthis->sync( ::Dynamic(new _hx_Closure_2(_gthis)));
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_844_onConnected)
+HXLINE( 845)			::haxe::Log_obj::trace(HX_("SYNC: MAM",58,33,e1,36),::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),845,HX_("borogove.Client",18,dc,e6,c0),HX_("onConnected",aa,c5,39,c5)));
+HXLINE( 846)			_gthis->sync( ::Dynamic(new _hx_Closure_2(_gthis)));
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_812_onConnected)
-HXDLIN( 812)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 813)		bool _hx_tmp;
-HXDLIN( 813)		if (::hx::IsNotNull( data )) {
-HXLINE( 813)			_hx_tmp = ::hx::IsNotNull( data->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic) );
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_817_onConnected)
+HXDLIN( 817)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 818)		bool _hx_tmp;
+HXDLIN( 818)		if (::hx::IsNotNull( data )) {
+HXLINE( 818)			_hx_tmp = ::hx::IsNotNull( data->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic) );
             		}
             		else {
-HXLINE( 813)			_hx_tmp = false;
+HXLINE( 818)			_hx_tmp = false;
             		}
-HXDLIN( 813)		if (_hx_tmp) {
-HXLINE( 814)			this->jid = ::borogove::JID_obj::parse(( (::String)(data->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)) ));
-HXLINE( 815)			bool _hx_tmp1;
-HXDLIN( 815)			if (::hx::IsNull( this->stream->clientId )) {
-HXLINE( 815)				_hx_tmp1 = !(this->jid->isBare());
+HXDLIN( 818)		if (_hx_tmp) {
+HXLINE( 819)			this->jid = ::borogove::JID_obj::parse(( (::String)(data->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)) ));
+HXLINE( 820)			bool _hx_tmp1;
+HXDLIN( 820)			if (::hx::IsNull( this->stream->clientId )) {
+HXLINE( 820)				_hx_tmp1 = !(this->jid->isBare());
             			}
             			else {
-HXLINE( 815)				_hx_tmp1 = false;
-            			}
-HXDLIN( 815)			if (_hx_tmp1) {
-HXLINE( 815)				::Dynamic _hx_tmp2 = this->persistence;
-HXDLIN( 815)				::String _hx_tmp3 = this->jid->asBare()->asString();
-HXDLIN( 815)				::String _hx_tmp4 = this->jid->resource;
-HXDLIN( 815)				::borogove::Persistence_obj::storeLogin(_hx_tmp2,_hx_tmp3,_hx_tmp4,this->displayName(),null());
-            			}
-            		}
-HXLINE( 818)		if (( (bool)(data->__Field(HX_("resumed",17,0e,58,6b),::hx::paccDynamic)) )) {
-HXLINE( 819)			this->inSync = true;
-HXLINE( 820)			this->stream->emitSMupdates = true;
-HXLINE( 821)			this->trigger(HX_("status/online",10,05,0e,d2), ::Dynamic(::hx::Anon_obj::Create(0)));
-HXLINE( 822)			return ::borogove::EventResult_obj::EventHandled_dyn();
-            		}
-HXLINE( 826)		this->discoverServices( ::borogove::JID_obj::__alloc( HX_CTX ,null(),this->jid->domain,null(),null()),null(), ::Dynamic(new _hx_Closure_0(_gthis)));
-HXLINE( 829)		this->rosterGet();
-HXLINE( 830)		::haxe::Log_obj::trace(HX_("SYNC: bookmarks",1c,91,b3,0d),::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),830,HX_("borogove.Client",18,dc,e6,c0),HX_("onConnected",aa,c5,39,c5)));
-HXLINE( 831)		this->bookmarksGet( ::Dynamic(new _hx_Closure_3(_gthis)));
-HXLINE( 873)		this->trigger(HX_("session-started",0a,96,19,bc), ::Dynamic(::hx::Anon_obj::Create(0)));
-HXLINE( 875)		return ::borogove::EventResult_obj::EventHandled_dyn();
+HXLINE( 820)				_hx_tmp1 = false;
+            			}
+HXDLIN( 820)			if (_hx_tmp1) {
+HXLINE( 820)				::Dynamic _hx_tmp2 = this->persistence;
+HXDLIN( 820)				::String _hx_tmp3 = this->jid->asBare()->asString();
+HXDLIN( 820)				::String _hx_tmp4 = this->jid->resource;
+HXDLIN( 820)				::borogove::Persistence_obj::storeLogin(_hx_tmp2,_hx_tmp3,_hx_tmp4,this->displayName(),null());
+            			}
+            		}
+HXLINE( 823)		if (( (bool)(data->__Field(HX_("resumed",17,0e,58,6b),::hx::paccDynamic)) )) {
+HXLINE( 824)			this->inSync = true;
+HXLINE( 825)			{
+HXLINE( 825)				int _g = 0;
+HXDLIN( 825)				::Array< ::Dynamic> _g1 = this->getChats();
+HXDLIN( 825)				while((_g < _g1->length)){
+HXLINE( 825)					 ::borogove::Chat chat = _g1->__get(_g).StaticCast<  ::borogove::Chat >();
+HXDLIN( 825)					_g = (_g + 1);
+HXLINE( 826)					 ::borogove::Channel channel = ( ( ::borogove::Channel)(::Std_obj::downcast(chat,::hx::ClassOf< ::borogove::Channel >())) );
+HXLINE( 827)					if (::hx::IsNotNull( channel )) {
+HXLINE( 828)						channel->inSync = true;
+            					}
+            				}
+            			}
+HXLINE( 832)			this->stream->emitSMupdates = true;
+HXLINE( 833)			this->trigger(HX_("status/online",10,05,0e,d2), ::Dynamic(::hx::Anon_obj::Create(0)));
+HXLINE( 834)			this->trigger(HX_("chats/update",3d,8e,1d,14),this->chats);
+HXLINE( 835)			return ::borogove::EventResult_obj::EventHandled_dyn();
+            		}
+HXLINE( 839)		this->discoverServices( ::borogove::JID_obj::__alloc( HX_CTX ,null(),this->jid->domain,null(),null()),null(), ::Dynamic(new _hx_Closure_0(_gthis)));
+HXLINE( 842)		this->rosterGet();
+HXLINE( 843)		::haxe::Log_obj::trace(HX_("SYNC: bookmarks",1c,91,b3,0d),::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),843,HX_("borogove.Client",18,dc,e6,c0),HX_("onConnected",aa,c5,39,c5)));
+HXLINE( 844)		this->bookmarksGet( ::Dynamic(new _hx_Closure_3(_gthis)));
+HXLINE( 886)		this->trigger(HX_("session-started",0a,96,19,bc), ::Dynamic(::hx::Anon_obj::Create(0)));
+HXLINE( 888)		return ::borogove::EventResult_obj::EventHandled_dyn();
             	}
 
 
@@ -2446,106 +2482,106 @@ HX_DEFINE_DYNAMIC_FUNC1(Client_obj,onConnected,return )
             			void _hx_run( ::Dynamic resolve, ::Dynamic reject){
             				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::sha::SHA256,sha256) HXARGC(1)
             				 ::tink::streams::Handled _hx_run(::Dynamic chunk){
-            					HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_888_prepareAttachment)
-HXLINE( 889)					 ::sha::SHA256 sha2561 = sha256;
-HXDLIN( 889)					sha2561->update(::tink::chunk::ChunkObject_obj::toBytes(chunk));
-HXLINE( 890)					return ::tink::streams::Handled_obj::Resume_dyn();
+            					HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_901_prepareAttachment)
+HXLINE( 902)					 ::sha::SHA256 sha2561 = sha256;
+HXDLIN( 902)					sha2561->update(::tink::chunk::ChunkObject_obj::toBytes(chunk));
+HXLINE( 903)					return ::tink::streams::Handled_obj::Resume_dyn();
             				}
             				HX_END_LOCAL_FUNC1(return)
 
             				HX_BEGIN_LOCAL_FUNC_S6(::hx::LocalFunc,_hx_Closure_1, ::borogove::AttachmentSource,source, ::borogove::Client,_gthis, ::Dynamic,resolve, ::Dynamic,reject,::Array< ::Dynamic>,services, ::sha::SHA256,sha256) HXARGC(1)
             				void _hx_run( ::tink::streams::Conclusion o){
-            					HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_891_prepareAttachment)
-HXLINE( 891)					if ((o->_hx_getIndex() == 3)) {
-HXLINE( 893)						 ::borogove::Client _gthis1 = _gthis;
-HXDLIN( 893)						 ::borogove::AttachmentSource source1 = source;
-HXDLIN( 893)						::Array< ::Dynamic> services1 = services;
-HXDLIN( 893)						::Array< unsigned char > _hx_tmp = sha256->digest()->b;
-HXDLIN( 893)						_gthis1->prepareAttachmentFor(source1,services1,::Array_obj< ::Dynamic>::__new(1)->init(0, ::borogove::Hash_obj::__alloc( HX_CTX ,HX_("sha-256",32,dd,04,3b),_hx_tmp)),resolve);
+            					HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_904_prepareAttachment)
+HXLINE( 904)					if ((o->_hx_getIndex() == 3)) {
+HXLINE( 906)						 ::borogove::Client _gthis1 = _gthis;
+HXDLIN( 906)						 ::borogove::AttachmentSource source1 = source;
+HXDLIN( 906)						::Array< ::Dynamic> services1 = services;
+HXDLIN( 906)						::Array< unsigned char > _hx_tmp = sha256->digest()->b;
+HXDLIN( 906)						_gthis1->prepareAttachmentFor(source1,services1,::Array_obj< ::Dynamic>::__new(1)->init(0, ::borogove::Hash_obj::__alloc( HX_CTX ,HX_("sha-256",32,dd,04,3b),_hx_tmp)),resolve);
             					}
             					else {
-HXLINE( 895)						::haxe::Log_obj::trace(HX_("Error computing attachment hash",07,33,1d,57), ::Dynamic(::hx::Anon_obj::Create(5)
+HXLINE( 908)						::haxe::Log_obj::trace(HX_("Error computing attachment hash",07,33,1d,57), ::Dynamic(::hx::Anon_obj::Create(5)
             							->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Client",18,dc,e6,c0))
             							->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,o))
             							->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("prepareAttachment",4a,6c,4b,52))
             							->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Client.hx",85,7d,15,8e))
-            							->setFixed(4,HX_("lineNumber",dd,81,22,76),895)));
-HXLINE( 896)						reject(o);
+            							->setFixed(4,HX_("lineNumber",dd,81,22,76),908)));
+HXLINE( 909)						reject(o);
             					}
             				}
             				HX_END_LOCAL_FUNC1((void))
 
-            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_888_prepareAttachment)
-HXLINE( 888)				::String name = source->name;
-HXDLIN( 888)				 ::haxe::io::Input input = ::sys::io::File_obj::read(source->path,null());
-HXDLIN( 888)				 ::Dynamic options = null();
-HXDLIN( 888)				options =  ::Dynamic(::hx::Anon_obj::Create(0));
-HXDLIN( 888)				::Dynamic this1 = ::tink::io::_Worker::Worker_Impl__obj::ensure( ::Dynamic(options->__Field(HX_("worker",7e,30,9e,c9),::hx::paccDynamic)));
-HXDLIN( 888)				 ::Dynamic _g = options->__Field(HX_("chunkSize",ce,cd,77,9f),::hx::paccDynamic);
-HXDLIN( 888)				int this2;
-HXDLIN( 888)				if (::hx::IsNull( _g )) {
-HXLINE( 888)					this2 = 65536;
+            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_901_prepareAttachment)
+HXLINE( 901)				::String name = source->name;
+HXDLIN( 901)				 ::haxe::io::Input input = ::sys::io::File_obj::read(source->path,null());
+HXDLIN( 901)				 ::Dynamic options = null();
+HXDLIN( 901)				options =  ::Dynamic(::hx::Anon_obj::Create(0));
+HXDLIN( 901)				::Dynamic this1 = ::tink::io::_Worker::Worker_Impl__obj::ensure( ::Dynamic(options->__Field(HX_("worker",7e,30,9e,c9),::hx::paccDynamic)));
+HXDLIN( 901)				 ::Dynamic _g = options->__Field(HX_("chunkSize",ce,cd,77,9f),::hx::paccDynamic);
+HXDLIN( 901)				int this2;
+HXDLIN( 901)				if (::hx::IsNull( _g )) {
+HXLINE( 901)					this2 = 65536;
             				}
             				else {
-HXLINE( 888)					this2 = ( (int)(_g) );
+HXLINE( 901)					this2 = ( (int)(_g) );
             				}
-HXDLIN( 888)				::Dynamic this3 = ::tink::io::_Source::Source_Impl__obj::chunked( ::tink::io::std::InputSource_obj::__alloc( HX_CTX ,name,input,this1,::haxe::io::Bytes_obj::alloc(this2),0));
-HXDLIN( 888)				::tink::streams::StreamObject_obj::forEach(this3,::tink::streams::_Stream::Handler_Impl__obj::ofSafeSync( ::Dynamic(new _hx_Closure_0(sha256))))->handle( ::Dynamic(new _hx_Closure_1(source,_gthis,resolve,reject,services,sha256)));
+HXDLIN( 901)				::Dynamic this3 = ::tink::io::_Source::Source_Impl__obj::chunked( ::tink::io::std::InputSource_obj::__alloc( HX_CTX ,name,input,this1,::haxe::io::Bytes_obj::alloc(this2),0));
+HXDLIN( 901)				::tink::streams::StreamObject_obj::forEach(this3,::tink::streams::_Stream::Handler_Impl__obj::ofSafeSync( ::Dynamic(new _hx_Closure_0(sha256))))->handle( ::Dynamic(new _hx_Closure_1(source,_gthis,resolve,reject,services,sha256)));
             			}
             			HX_END_LOCAL_FUNC2((void))
 
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_885_prepareAttachment)
-HXLINE( 886)			 ::sha::SHA256 sha256 =  ::sha::SHA256_obj::__alloc( HX_CTX );
-HXLINE( 887)			return ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_2(_gthis,source,services,sha256)));
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_898_prepareAttachment)
+HXLINE( 899)			 ::sha::SHA256 sha256 =  ::sha::SHA256_obj::__alloc( HX_CTX );
+HXLINE( 900)			return ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_2(_gthis,source,services,sha256)));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_884_prepareAttachment)
-HXDLIN( 884)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 885)		::Dynamic _hx_tmp = this->persistence;
-HXDLIN( 885)		return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::findServicesWithFeature(_hx_tmp,this->accountId(),HX_("urn:xmpp:http:upload:0",0d,db,46,68)), ::Dynamic(new _hx_Closure_3(source,_gthis)),null());
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_897_prepareAttachment)
+HXDLIN( 897)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 898)		::Dynamic _hx_tmp = this->persistence;
+HXDLIN( 898)		return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::findServicesWithFeature(_hx_tmp,this->accountId(),HX_("urn:xmpp:http:upload:0",0d,db,46,68)), ::Dynamic(new _hx_Closure_3(source,_gthis)),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Client_obj,prepareAttachment,return )
 
 void Client_obj::prepareAttachment__fromC( ::borogove::AttachmentSource source,::cpp::Function< void  (void*,void*) > handler,void* handler__context){
-            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_313_prepareAttachment__fromC)
-HXDLIN( 313)		if (::hx::IsNull( handler )) {
-HXDLIN( 313)			this->prepareAttachment(source);
+            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_337_prepareAttachment__fromC)
+HXDLIN( 337)		if (::hx::IsNull( handler )) {
+HXDLIN( 337)			this->prepareAttachment(source);
             		}
             		else {
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (void* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
             			void _hx_run( ::borogove::ChatAttachment v){
-            				HX_STACKFRAME(&_hx_pos_afe14372debdebc6_313_prepareAttachment__fromC)
-HXDLIN( 313)				::cpp::Function< void  (void*,void*) > handler1 = handler;
-HXLINE( 297)				 ::Dynamic haxeObject = v;
-HXDLIN( 297)				void* ptr = haxeObject.mPtr;
-HXDLIN( 297)				::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 297)				{
-HXLINE( 297)					 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 297)					if (::hx::IsNull( store )) {
-HXLINE( 297)						store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            				HX_STACKFRAME(&_hx_pos_afe14372debdebc6_337_prepareAttachment__fromC)
+HXDLIN( 337)				::cpp::Function< void  (void*,void*) > handler1 = handler;
+HXLINE( 314)				 ::Dynamic haxeObject = v;
+HXDLIN( 314)				void* ptr = haxeObject.mPtr;
+HXDLIN( 314)				::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 314)				{
+HXLINE( 314)					 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 314)					if (::hx::IsNull( store )) {
+HXLINE( 314)						store =  ::Dynamic(::hx::Anon_obj::Create(2)
             							->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             							->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 297)						::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN( 314)						::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             					}
             					else {
-HXLINE( 297)						::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE( 314)						::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             					}
             				}
-HXLINE( 313)				handler1(ptr,handler__context);
+HXLINE( 337)				handler1(ptr,handler__context);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::cpp::Function< void  (void* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
             			void _hx_run( ::Dynamic e){
-            				HX_STACKFRAME(&_hx_pos_afe14372debdebc6_313_prepareAttachment__fromC)
-HXDLIN( 313)				handler(null(),handler__context);
+            				HX_STACKFRAME(&_hx_pos_afe14372debdebc6_337_prepareAttachment__fromC)
+HXDLIN( 337)				handler(null(),handler__context);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-HXDLIN( 313)			::thenshim::_Promise::Promise_Impl__obj::then(this->prepareAttachment(source), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
+HXDLIN( 337)			::thenshim::_Promise::Promise_Impl__obj::then(this->prepareAttachment(source), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
             		}
             	}
 
@@ -2553,70 +2589,70 @@ HXDLIN( 313)			::thenshim::_Promise::Promise_Impl__obj::then(this->prepareAttach
 void Client_obj::prepareAttachmentFor( ::borogove::AttachmentSource source,::Array< ::Dynamic> services,::Array< ::Dynamic> hashes, ::Dynamic callback){
             		HX_BEGIN_LOCAL_FUNC_S6(::hx::LocalFunc,_hx_Closure_2, ::borogove::AttachmentSource,source, ::borogove::Client,_gthis,::Array< ::Dynamic>,hashes,::Array< ::Dynamic>,services, ::borogove::queries::HttpUploadSlot,httpUploadSlot, ::Dynamic,callback) HXARGC(0)
             		void _hx_run(){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_909_prepareAttachmentFor)
-HXLINE( 910)			 ::Dynamic slot = httpUploadSlot->getResult();
-HXLINE( 911)			if (::hx::IsNull( slot )) {
-HXLINE( 912)				 ::borogove::Client _gthis1 = _gthis;
-HXDLIN( 912)				 ::borogove::AttachmentSource source1 = source;
-HXDLIN( 912)				::Array< ::Dynamic> _hx_tmp = services->slice(1,null());
-HXDLIN( 912)				_gthis1->prepareAttachmentFor(source1,_hx_tmp,hashes,callback);
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_922_prepareAttachmentFor)
+HXLINE( 923)			 ::Dynamic slot = httpUploadSlot->getResult();
+HXLINE( 924)			if (::hx::IsNull( slot )) {
+HXLINE( 925)				 ::borogove::Client _gthis1 = _gthis;
+HXDLIN( 925)				 ::borogove::AttachmentSource source1 = source;
+HXDLIN( 925)				::Array< ::Dynamic> _hx_tmp = services->slice(1,null());
+HXDLIN( 925)				_gthis1->prepareAttachmentFor(source1,_hx_tmp,hashes,callback);
             			}
             			else {
             				HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             				::Dynamic _hx_run( ::tink::core::TypedError e){
-            					HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_914_prepareAttachmentFor)
-HXLINE( 914)					::haxe::Log_obj::trace(HX_("WUT",76,4e,42,00), ::Dynamic(::hx::Anon_obj::Create(5)
+            					HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_927_prepareAttachmentFor)
+HXLINE( 927)					::haxe::Log_obj::trace(HX_("WUT",76,4e,42,00), ::Dynamic(::hx::Anon_obj::Create(5)
             						->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Client",18,dc,e6,c0))
             						->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,e))
             						->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("prepareAttachmentFor",df,5c,bf,82))
             						->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Client.hx",85,7d,15,8e))
-            						->setFixed(4,HX_("lineNumber",dd,81,22,76),914)));
-HXDLIN( 914)					HX_STACK_DO_THROW(e);
-HXDLIN( 914)					return null();
+            						->setFixed(4,HX_("lineNumber",dd,81,22,76),927)));
+HXDLIN( 927)					HX_STACK_DO_THROW(e);
+HXDLIN( 927)					return null();
             				}
             				HX_END_LOCAL_FUNC1(return)
 
             				HX_BEGIN_LOCAL_FUNC_S6(::hx::LocalFunc,_hx_Closure_1, ::borogove::Client,_gthis, ::Dynamic,slot, ::borogove::AttachmentSource,source,::Array< ::Dynamic>,hashes,::Array< ::Dynamic>,services, ::Dynamic,callback) HXARGC(1)
             				void _hx_run( ::tink::core::Outcome o){
-            					HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_915_prepareAttachmentFor)
-HXLINE( 915)					if ((o->_hx_getIndex() == 0)) {
-HXLINE( 916)						if ((( ( ::tink::http::ResponseHeaderBase)(( ( ::tink::http::Message)(o->_hx_getObject(0)) )->header) )->statusCode == 201)) {
-HXLINE( 917)							callback( ::borogove::ChatAttachment_obj::__alloc( HX_CTX ,source->name,source->type,source->size,::Array_obj< ::String >::__new(1)->init(0, ::Dynamic(slot->__Field(HX_("get",96,80,4e,00),::hx::paccDynamic))),hashes));
+            					HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_928_prepareAttachmentFor)
+HXLINE( 928)					if ((o->_hx_getIndex() == 0)) {
+HXLINE( 929)						if ((( ( ::tink::http::ResponseHeaderBase)(( ( ::tink::http::Message)(o->_hx_getObject(0)) )->header) )->statusCode == 201)) {
+HXLINE( 930)							callback( ::borogove::ChatAttachment_obj::__alloc( HX_CTX ,source->name,source->type,source->size,::Array_obj< ::String >::__new(1)->init(0, ::Dynamic(slot->__Field(HX_("get",96,80,4e,00),::hx::paccDynamic))),hashes));
             						}
             						else {
-HXLINE( 919)							 ::borogove::Client _gthis1 = _gthis;
-HXDLIN( 919)							 ::borogove::AttachmentSource source1 = source;
-HXDLIN( 919)							::Array< ::Dynamic> _hx_tmp = services->slice(1,null());
-HXDLIN( 919)							_gthis1->prepareAttachmentFor(source1,_hx_tmp,hashes,callback);
+HXLINE( 932)							 ::borogove::Client _gthis1 = _gthis;
+HXDLIN( 932)							 ::borogove::AttachmentSource source1 = source;
+HXDLIN( 932)							::Array< ::Dynamic> _hx_tmp = services->slice(1,null());
+HXDLIN( 932)							_gthis1->prepareAttachmentFor(source1,_hx_tmp,hashes,callback);
             						}
             					}
             					else {
-HXLINE( 919)						 ::borogove::Client _gthis2 = _gthis;
-HXDLIN( 919)						 ::borogove::AttachmentSource source2 = source;
-HXDLIN( 919)						::Array< ::Dynamic> _hx_tmp1 = services->slice(1,null());
-HXDLIN( 919)						_gthis2->prepareAttachmentFor(source2,_hx_tmp1,hashes,callback);
+HXLINE( 932)						 ::borogove::Client _gthis2 = _gthis;
+HXDLIN( 932)						 ::borogove::AttachmentSource source2 = source;
+HXDLIN( 932)						::Array< ::Dynamic> _hx_tmp1 = services->slice(1,null());
+HXDLIN( 932)						_gthis2->prepareAttachmentFor(source2,_hx_tmp1,hashes,callback);
             					}
             				}
             				HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 914)				 ::Dynamic url = ::tink::_Url::Url_Impl__obj::fromString(( (::String)(slot->__Field(HX_("put",cf,62,55,00),::hx::paccDynamic)) ));
-HXDLIN( 914)				::Array< ::Dynamic> slot1 = ( (::Array< ::Dynamic>)(slot->__Field(HX_("putHeaders",37,9f,1e,a4),::hx::paccDynamic)) );
-HXDLIN( 914)				::String options = HX_("Content-Length",fa,f8,b6,65).toLowerCase();
-HXDLIN( 914)				::Array< ::Dynamic> options1 = slot1->concat(::Array_obj< ::Dynamic>::__new(1)->init(0, ::tink::http::HeaderField_obj::__alloc( HX_CTX ,options,::tink::http::_Header::HeaderValue_Impl__obj::ofInt(source->size))));
-HXDLIN( 914)				::String name = source->name;
-HXDLIN( 914)				 ::haxe::io::Input input = ::sys::io::File_obj::read(source->path,null());
-HXDLIN( 914)				 ::Dynamic options2 = null();
-HXDLIN( 914)				options2 =  ::Dynamic(::hx::Anon_obj::Create(0));
-HXDLIN( 914)				::Dynamic options3 = ::tink::io::_Worker::Worker_Impl__obj::ensure( ::Dynamic(options2->__Field(HX_("worker",7e,30,9e,c9),::hx::paccDynamic)));
-HXDLIN( 914)				 ::Dynamic _g = options2->__Field(HX_("chunkSize",ce,cd,77,9f),::hx::paccDynamic);
-HXDLIN( 914)				int options4;
-HXDLIN( 914)				if (::hx::IsNull( _g )) {
-HXLINE( 914)					options4 = 65536;
+HXLINE( 927)				 ::Dynamic url = ::tink::_Url::Url_Impl__obj::fromString(( (::String)(slot->__Field(HX_("put",cf,62,55,00),::hx::paccDynamic)) ));
+HXDLIN( 927)				::Array< ::Dynamic> slot1 = ( (::Array< ::Dynamic>)(slot->__Field(HX_("putHeaders",37,9f,1e,a4),::hx::paccDynamic)) );
+HXDLIN( 927)				::String options = HX_("Content-Length",fa,f8,b6,65).toLowerCase();
+HXDLIN( 927)				::Array< ::Dynamic> options1 = slot1->concat(::Array_obj< ::Dynamic>::__new(1)->init(0, ::tink::http::HeaderField_obj::__alloc( HX_CTX ,options,::tink::http::_Header::HeaderValue_Impl__obj::ofInt(source->size))));
+HXDLIN( 927)				::String name = source->name;
+HXDLIN( 927)				 ::haxe::io::Input input = ::sys::io::File_obj::read(source->path,null());
+HXDLIN( 927)				 ::Dynamic options2 = null();
+HXDLIN( 927)				options2 =  ::Dynamic(::hx::Anon_obj::Create(0));
+HXDLIN( 927)				::Dynamic options3 = ::tink::io::_Worker::Worker_Impl__obj::ensure( ::Dynamic(options2->__Field(HX_("worker",7e,30,9e,c9),::hx::paccDynamic)));
+HXDLIN( 927)				 ::Dynamic _g = options2->__Field(HX_("chunkSize",ce,cd,77,9f),::hx::paccDynamic);
+HXDLIN( 927)				int options4;
+HXDLIN( 927)				if (::hx::IsNull( _g )) {
+HXLINE( 927)					options4 = 65536;
             				}
             				else {
-HXLINE( 914)					options4 = ( (int)(_g) );
+HXLINE( 927)					options4 = ( (int)(_g) );
             				}
-HXDLIN( 914)				::tink::http::_Fetch::FetchResponse_Impl__obj::all(::tink::http::Fetch_obj::fetch(url, ::Dynamic(::hx::Anon_obj::Create(3)
+HXDLIN( 927)				::tink::http::_Fetch::FetchResponse_Impl__obj::all(::tink::http::Fetch_obj::fetch(url, ::Dynamic(::hx::Anon_obj::Create(3)
             					->setFixed(0,HX_("method",e1,f6,5a,09),HX_("PUT",af,fe,3c,00))
             					->setFixed(1,HX_("body",a2,7a,1b,41),::tink::io::RealSourceTools_obj::idealize( ::tink::io::std::InputSource_obj::__alloc( HX_CTX ,name,input,options3,::haxe::io::Bytes_obj::alloc(options4),0), ::Dynamic(new _hx_Closure_0())))
             					->setFixed(2,HX_("headers",46,52,08,63),options1))))->handle( ::Dynamic(new _hx_Closure_1(_gthis,slot,source,hashes,services,callback)));
@@ -2624,87 +2660,87 @@ HXDLIN( 914)				::tink::http::_Fetch::FetchResponse_Impl__obj::all(::tink::http:
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_902_prepareAttachmentFor)
-HXDLIN( 902)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 903)		if ((services->length < 1)) {
-HXLINE( 904)			::haxe::Log_obj::trace(HX_("No HTTP upload service found",d1,5a,61,46),::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),904,HX_("borogove.Client",18,dc,e6,c0),HX_("prepareAttachmentFor",df,5c,bf,82)));
-HXLINE( 905)			callback(null());
-HXLINE( 906)			return;
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_915_prepareAttachmentFor)
+HXDLIN( 915)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 916)		if ((services->length < 1)) {
+HXLINE( 917)			::haxe::Log_obj::trace(HX_("No HTTP upload service found",d1,5a,61,46),::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),917,HX_("borogove.Client",18,dc,e6,c0),HX_("prepareAttachmentFor",df,5c,bf,82)));
+HXLINE( 918)			callback(null());
+HXLINE( 919)			return;
             		}
-HXLINE( 908)		 ::borogove::queries::HttpUploadSlot httpUploadSlot =  ::borogove::queries::HttpUploadSlot_obj::__alloc( HX_CTX ,( (::String)(services->__get(0)->__Field(HX_("serviceId",70,93,d4,bc),::hx::paccDynamic)) ),source->name,source->size,source->type,hashes);
-HXLINE( 909)		httpUploadSlot->onFinished( ::Dynamic(new _hx_Closure_2(source,_gthis,hashes,services,httpUploadSlot,callback)));
-HXLINE( 923)		this->sendQuery(httpUploadSlot);
+HXLINE( 921)		 ::borogove::queries::HttpUploadSlot httpUploadSlot =  ::borogove::queries::HttpUploadSlot_obj::__alloc( HX_CTX ,( (::String)(services->__get(0)->__Field(HX_("serviceId",70,93,d4,bc),::hx::paccDynamic)) ),source->name,source->size,source->type,hashes);
+HXLINE( 922)		httpUploadSlot->onFinished( ::Dynamic(new _hx_Closure_2(source,_gthis,hashes,services,httpUploadSlot,callback)));
+HXLINE( 936)		this->sendQuery(httpUploadSlot);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC4(Client_obj,prepareAttachmentFor,(void))
 
 ::Array< ::Dynamic> Client_obj::getChats(){
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_930_getChats)
-HXDLIN( 930)		::Array< ::Dynamic> _this = this->chats;
-HXDLIN( 930)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 930)		{
-HXDLIN( 930)			int _g1 = 0;
-HXDLIN( 930)			while((_g1 < _this->length)){
-HXDLIN( 930)				 ::borogove::Chat v = _this->__get(_g1).StaticCast<  ::borogove::Chat >();
-HXDLIN( 930)				_g1 = (_g1 + 1);
-HXDLIN( 930)				if ((v->uiState != 2)) {
-HXDLIN( 930)					_g->push(v);
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_943_getChats)
+HXDLIN( 943)		::Array< ::Dynamic> _this = this->chats;
+HXDLIN( 943)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 943)		{
+HXDLIN( 943)			int _g1 = 0;
+HXDLIN( 943)			while((_g1 < _this->length)){
+HXDLIN( 943)				 ::borogove::Chat v = _this->__get(_g1).StaticCast<  ::borogove::Chat >();
+HXDLIN( 943)				_g1 = (_g1 + 1);
+HXDLIN( 943)				if ((v->uiState != 2)) {
+HXDLIN( 943)					_g->push(v);
             				}
             			}
             		}
-HXDLIN( 930)		return _g;
+HXDLIN( 943)		return _g;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Client_obj,getChats,return )
 
 size_t Client_obj::getChats__fromC(void*** outPtr){
-            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_311_getChats__fromC)
-HXDLIN( 311)		::Array< ::Dynamic> out = this->getChats();
-HXDLIN( 311)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 311)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 311)			{
-HXDLIN( 311)				int _g = 0;
-HXDLIN( 311)				while((_g < out->length)){
-HXDLIN( 311)					 ::borogove::Chat el = out->__get(_g).StaticCast<  ::borogove::Chat >();
-HXDLIN( 311)					_g = (_g + 1);
-HXDLIN( 311)					{
-HXDLIN( 311)						 ::Dynamic haxeObject = el;
-HXDLIN( 311)						void* ptr = haxeObject.mPtr;
-HXDLIN( 311)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 311)						{
-HXDLIN( 311)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 311)							if (::hx::IsNull( store )) {
-HXDLIN( 311)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_335_getChats__fromC)
+HXDLIN( 335)		::Array< ::Dynamic> out = this->getChats();
+HXDLIN( 335)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 335)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 335)			{
+HXDLIN( 335)				int _g = 0;
+HXDLIN( 335)				while((_g < out->length)){
+HXDLIN( 335)					 ::borogove::Chat el = out->__get(_g).StaticCast<  ::borogove::Chat >();
+HXDLIN( 335)					_g = (_g + 1);
+HXDLIN( 335)					{
+HXDLIN( 335)						 ::Dynamic haxeObject = el;
+HXDLIN( 335)						void* ptr = haxeObject.mPtr;
+HXDLIN( 335)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 335)						{
+HXDLIN( 335)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 335)							if (::hx::IsNull( store )) {
+HXDLIN( 335)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
             									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             									->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 311)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN( 335)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             							}
             							else {
-HXDLIN( 311)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 335)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             							}
             						}
             					}
             				}
             			}
-HXDLIN( 311)			void** ptr1 = (void**)out->getBase();
-HXDLIN( 311)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 311)			{
-HXDLIN( 311)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 311)				if (::hx::IsNull( store1 )) {
-HXDLIN( 311)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 335)			void** ptr1 = (void**)out->getBase();
+HXDLIN( 335)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 335)			{
+HXDLIN( 335)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 335)				if (::hx::IsNull( store1 )) {
+HXDLIN( 335)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),out));
-HXDLIN( 311)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+HXDLIN( 335)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
             				}
             				else {
-HXDLIN( 311)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 335)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXDLIN( 311)			_hx_tmp->set_ref(ptr1);
+HXDLIN( 335)			_hx_tmp->set_ref(ptr1);
             		}
-HXDLIN( 311)		return ( (size_t)(out->length) );
+HXDLIN( 335)		return ( (size_t)(out->length) );
             	}
 
 
@@ -2713,338 +2749,338 @@ void Client_obj::findAvailableChats(::String q, ::Dynamic callback){
             		void _hx_run( ::borogove::JID jid, ::Dynamic __o_prepend){
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::Array< ::Dynamic>,results,bool,prepend) HXARGC(1)
             			void _hx_run( ::borogove::AvailableChat item){
-            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_947_findAvailableChats)
-HXLINE( 947)				if (prepend) {
-HXLINE( 947)					results->unshift(item);
+            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_960_findAvailableChats)
+HXLINE( 960)				if (prepend) {
+HXLINE( 960)					results->unshift(item);
             				}
             				else {
-HXLINE( 947)					results->push(item);
+HXLINE( 960)					results->push(item);
             				}
             			}
             			HX_END_LOCAL_FUNC1((void))
 
             			HX_BEGIN_LOCAL_FUNC_S8(::hx::LocalFunc,_hx_Closure_1,::String,q, ::borogove::Client,_gthis,::Array< ::Dynamic>,callback1,::Array< ::Dynamic>,results, ::Dynamic,add,::String,query, ::borogove::queries::DiscoInfoGet,discoGet, ::borogove::JID,jid) HXARGC(0)
             			void _hx_run(){
-            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_949_findAvailableChats)
-HXLINE( 950)				 ::borogove::Caps resultCaps = discoGet->getResult();
-HXLINE( 951)				if (::hx::IsNull( resultCaps )) {
-HXLINE( 952)					 ::borogove::Stanza tmp = discoGet->responseStanza;
-HXDLIN( 952)					 ::borogove::Stanza tmp1;
-HXDLIN( 952)					if (::hx::IsNotNull( tmp )) {
-HXLINE( 952)						tmp1 = tmp->getChild(HX_("error",c8,cb,29,73),null());
+            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_962_findAvailableChats)
+HXLINE( 963)				 ::borogove::Caps resultCaps = discoGet->getResult();
+HXLINE( 964)				if (::hx::IsNull( resultCaps )) {
+HXLINE( 965)					 ::borogove::Stanza tmp = discoGet->responseStanza;
+HXDLIN( 965)					 ::borogove::Stanza tmp1;
+HXDLIN( 965)					if (::hx::IsNotNull( tmp )) {
+HXLINE( 965)						tmp1 = tmp->getChild(HX_("error",c8,cb,29,73),null());
             					}
             					else {
-HXLINE( 952)						tmp1 = null();
+HXLINE( 965)						tmp1 = null();
             					}
-HXDLIN( 952)					 ::borogove::Stanza err;
-HXDLIN( 952)					if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 952)						err = tmp1->getChild(null(),HX_("urn:ietf:params:xml:ns:xmpp-stanzas",27,f2,3d,30));
+HXDLIN( 965)					 ::borogove::Stanza err;
+HXDLIN( 965)					if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 965)						err = tmp1->getChild(null(),HX_("urn:ietf:params:xml:ns:xmpp-stanzas",27,f2,3d,30));
             					}
             					else {
-HXLINE( 952)						err = null();
+HXLINE( 965)						err = null();
             					}
-HXLINE( 953)					bool checkAndAdd;
-HXDLIN( 953)					bool checkAndAdd1;
-HXDLIN( 953)					if (::hx::IsNotNull( err )) {
-HXLINE( 953)						::String checkAndAdd2;
-HXDLIN( 953)						if (::hx::IsNotNull( err )) {
-HXLINE( 953)							checkAndAdd2 = err->name;
+HXLINE( 966)					bool checkAndAdd;
+HXDLIN( 966)					bool checkAndAdd1;
+HXDLIN( 966)					if (::hx::IsNotNull( err )) {
+HXLINE( 966)						::String checkAndAdd2;
+HXDLIN( 966)						if (::hx::IsNotNull( err )) {
+HXLINE( 966)							checkAndAdd2 = err->name;
             						}
             						else {
-HXLINE( 953)							checkAndAdd2 = null();
+HXLINE( 966)							checkAndAdd2 = null();
             						}
-HXDLIN( 953)						checkAndAdd1 = (checkAndAdd2 == HX_("service-unavailable",f8,3c,11,1c));
+HXDLIN( 966)						checkAndAdd1 = (checkAndAdd2 == HX_("service-unavailable",f8,3c,11,1c));
             					}
             					else {
-HXLINE( 953)						checkAndAdd1 = true;
+HXLINE( 966)						checkAndAdd1 = true;
             					}
-HXDLIN( 953)					if (!(checkAndAdd1)) {
-HXLINE( 953)						::String checkAndAdd3;
-HXDLIN( 953)						if (::hx::IsNotNull( err )) {
-HXLINE( 953)							checkAndAdd3 = err->name;
+HXDLIN( 966)					if (!(checkAndAdd1)) {
+HXLINE( 966)						::String checkAndAdd3;
+HXDLIN( 966)						if (::hx::IsNotNull( err )) {
+HXLINE( 966)							checkAndAdd3 = err->name;
             						}
             						else {
-HXLINE( 953)							checkAndAdd3 = null();
+HXLINE( 966)							checkAndAdd3 = null();
             						}
-HXDLIN( 953)						checkAndAdd = (checkAndAdd3 == HX_("feature-not-implemented",71,20,2e,96));
+HXDLIN( 966)						checkAndAdd = (checkAndAdd3 == HX_("feature-not-implemented",71,20,2e,96));
             					}
             					else {
-HXLINE( 953)						checkAndAdd = true;
+HXLINE( 966)						checkAndAdd = true;
             					}
-HXDLIN( 953)					if (checkAndAdd) {
-HXLINE( 954)						 ::Dynamic add1 = add;
-HXDLIN( 954)						::String checkAndAdd4 = jid->asString();
-HXDLIN( 954)						::String checkAndAdd5;
-HXDLIN( 954)						if (::hx::IsNull( jid->node )) {
-HXLINE( 954)							checkAndAdd5 = query;
+HXDLIN( 966)					if (checkAndAdd) {
+HXLINE( 967)						 ::Dynamic add1 = add;
+HXDLIN( 967)						::String checkAndAdd4 = jid->asString();
+HXDLIN( 967)						::String checkAndAdd5;
+HXDLIN( 967)						if (::hx::IsNull( jid->node )) {
+HXLINE( 967)							checkAndAdd5 = query;
             						}
             						else {
-HXLINE( 954)							checkAndAdd5 = jid->node;
+HXLINE( 967)							checkAndAdd5 = jid->node;
             						}
-HXDLIN( 954)						::String checkAndAdd6 = jid->asString();
-HXDLIN( 954)						add1( ::borogove::AvailableChat_obj::__alloc( HX_CTX ,checkAndAdd4,checkAndAdd5,checkAndAdd6, ::borogove::Caps_obj::__alloc( HX_CTX ,HX_("",00,00,00,00),::Array_obj< ::Dynamic>::__new(0),::Array_obj< ::String >::__new(0),::Array_obj< ::Dynamic>::__new(0),null())));
+HXDLIN( 967)						::String checkAndAdd6 = jid->asString();
+HXDLIN( 967)						add1( ::borogove::AvailableChat_obj::__alloc( HX_CTX ,checkAndAdd4,checkAndAdd5,checkAndAdd6, ::borogove::Caps_obj::__alloc( HX_CTX ,HX_("",00,00,00,00),::Array_obj< ::Dynamic>::__new(0),::Array_obj< ::String >::__new(0),::Array_obj< ::Dynamic>::__new(0),null())));
             					}
             				}
             				else {
-HXLINE( 957)					::borogove::Persistence_obj::storeCaps(_gthis->persistence,resultCaps);
-HXLINE( 958)					 ::borogove::Identity identity = resultCaps->identities->__get(0).StaticCast<  ::borogove::Identity >();
-HXLINE( 959)					::String displayName;
-HXDLIN( 959)					::String tmp2;
-HXDLIN( 959)					if (::hx::IsNotNull( identity )) {
-HXLINE( 959)						tmp2 = identity->name;
+HXLINE( 970)					::borogove::Persistence_obj::storeCaps(_gthis->persistence,resultCaps);
+HXLINE( 971)					 ::borogove::Identity identity = resultCaps->identities->__get(0).StaticCast<  ::borogove::Identity >();
+HXLINE( 972)					::String displayName;
+HXDLIN( 972)					::String tmp2;
+HXDLIN( 972)					if (::hx::IsNotNull( identity )) {
+HXLINE( 972)						tmp2 = identity->name;
             					}
             					else {
-HXLINE( 959)						tmp2 = null();
+HXLINE( 972)						tmp2 = null();
             					}
-HXDLIN( 959)					if (::hx::IsNotNull( tmp2 )) {
-HXLINE( 959)						displayName = tmp2;
+HXDLIN( 972)					if (::hx::IsNotNull( tmp2 )) {
+HXLINE( 972)						displayName = tmp2;
             					}
             					else {
-HXLINE( 959)						displayName = query;
+HXLINE( 972)						displayName = query;
             					}
-HXLINE( 960)					::String note = jid->asString();
-HXDLIN( 960)					::String note1;
-HXDLIN( 960)					if (::hx::IsNull( identity )) {
-HXLINE( 960)						note1 = HX_("",00,00,00,00);
+HXLINE( 973)					::String note = jid->asString();
+HXDLIN( 973)					::String note1;
+HXDLIN( 973)					if (::hx::IsNull( identity )) {
+HXLINE( 973)						note1 = HX_("",00,00,00,00);
             					}
             					else {
-HXLINE( 960)						note1 = ((HX_(" (",08,1c,00,00) + identity->type) + HX_(")",29,00,00,00));
+HXLINE( 973)						note1 = ((HX_(" (",08,1c,00,00) + identity->type) + HX_(")",29,00,00,00));
             					}
-HXLINE( 961)					 ::Dynamic add2 = add;
-HXDLIN( 961)					add2( ::borogove::AvailableChat_obj::__alloc( HX_CTX ,jid->asString(),displayName,(note + note1),resultCaps));
+HXLINE( 974)					 ::Dynamic add2 = add;
+HXDLIN( 974)					add2( ::borogove::AvailableChat_obj::__alloc( HX_CTX ,jid->asString(),displayName,(note + note1),resultCaps));
             				}
-HXLINE( 963)				bool checkAndAdd7;
-HXDLIN( 963)				if (::hx::IsNotNull( callback1->__get(0) )) {
-HXLINE( 963)					checkAndAdd7 = ( (bool)(callback1->__get(0)(q,results)) );
+HXLINE( 976)				bool checkAndAdd7;
+HXDLIN( 976)				if (::hx::IsNotNull( callback1->__get(0) )) {
+HXLINE( 976)					checkAndAdd7 = ( (bool)(callback1->__get(0)(q,results)) );
             				}
             				else {
-HXLINE( 963)					checkAndAdd7 = false;
+HXLINE( 976)					checkAndAdd7 = false;
             				}
-HXDLIN( 963)				if (checkAndAdd7) {
-HXLINE( 963)					callback1[0] = null();
+HXDLIN( 976)				if (checkAndAdd7) {
+HXLINE( 976)					callback1[0] = null();
             				}
             			}
             			HX_END_LOCAL_FUNC0((void))
 
             		bool prepend = __o_prepend.Default(false);
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_943_findAvailableChats)
-HXLINE( 944)			::String key = jid->asString();
-HXDLIN( 944)			if (haveJid->get_bool(key)) {
-HXLINE( 944)				return;
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_956_findAvailableChats)
+HXLINE( 957)			::String key = jid->asString();
+HXDLIN( 957)			if (haveJid->get_bool(key)) {
+HXLINE( 957)				return;
             			}
-HXLINE( 945)			{
-HXLINE( 945)				::String k = jid->asString();
-HXDLIN( 945)				haveJid->set(k,true);
+HXLINE( 958)			{
+HXLINE( 958)				::String k = jid->asString();
+HXDLIN( 958)				haveJid->set(k,true);
             			}
-HXLINE( 947)			 ::Dynamic add =  ::Dynamic(new _hx_Closure_0(results,prepend));
-HXLINE( 948)			 ::borogove::queries::DiscoInfoGet discoGet =  ::borogove::queries::DiscoInfoGet_obj::__alloc( HX_CTX ,jid->asString(),null());
-HXLINE( 949)			discoGet->onFinished( ::Dynamic(new _hx_Closure_1(q,_gthis,callback1,results,add,query,discoGet,jid)));
-HXLINE( 965)			_gthis->sendQuery(discoGet);
+HXLINE( 960)			 ::Dynamic add =  ::Dynamic(new _hx_Closure_0(results,prepend));
+HXLINE( 961)			 ::borogove::queries::DiscoInfoGet discoGet =  ::borogove::queries::DiscoInfoGet_obj::__alloc( HX_CTX ,jid->asString(),null());
+HXLINE( 962)			discoGet->onFinished( ::Dynamic(new _hx_Closure_1(q,_gthis,callback1,results,add,query,discoGet,jid)));
+HXLINE( 978)			_gthis->sendQuery(discoGet);
             		}
             		HX_END_LOCAL_FUNC2((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_939_findAvailableChats)
-HXDLIN( 939)		::Array< ::Dynamic> callback1 = ::Array_obj< ::Dynamic>::__new(1)->init(0,callback);
-HXDLIN( 939)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 940)		 ::haxe::ds::StringMap haveJid =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE( 941)		::Array< ::Dynamic> results = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 942)		::String query = ::StringTools_obj::trim(q);
-HXLINE( 943)		 ::Dynamic checkAndAdd =  ::Dynamic(new _hx_Closure_2(_gthis,q,callback1,results,query,haveJid));
-HXLINE( 967)		 ::EReg vcard_regex =  ::EReg_obj::__alloc( HX_CTX ,HX_("\nIMPP[^:]*:xmpp:(.+)\n",e5,d9,ac,c6),HX_("",00,00,00,00));
-HXLINE( 968)		 ::borogove::JID jid;
-HXDLIN( 968)		if (::StringTools_obj::startsWith(query,HX_("xmpp:",65,3c,77,60))) {
-HXLINE( 969)			::Array< ::String > parts = query.substr(5,null()).split(HX_("?",3f,00,00,00));
-HXLINE( 968)			jid = ::borogove::JID_obj::parse(::borogove::_Util::Util_Fields__obj::uriDecode(parts->__get(0)));
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_952_findAvailableChats)
+HXDLIN( 952)		::Array< ::Dynamic> callback1 = ::Array_obj< ::Dynamic>::__new(1)->init(0,callback);
+HXDLIN( 952)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 953)		 ::haxe::ds::StringMap haveJid =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 954)		::Array< ::Dynamic> results = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 955)		::String query = ::StringTools_obj::trim(q);
+HXLINE( 956)		 ::Dynamic checkAndAdd =  ::Dynamic(new _hx_Closure_2(_gthis,q,callback1,results,query,haveJid));
+HXLINE( 980)		 ::EReg vcard_regex =  ::EReg_obj::__alloc( HX_CTX ,HX_("\nIMPP[^:]*:xmpp:(.+)\n",e5,d9,ac,c6),HX_("",00,00,00,00));
+HXLINE( 981)		 ::borogove::JID jid;
+HXDLIN( 981)		if (::StringTools_obj::startsWith(query,HX_("xmpp:",65,3c,77,60))) {
+HXLINE( 982)			::Array< ::String > parts = query.substr(5,null()).split(HX_("?",3f,00,00,00));
+HXLINE( 981)			jid = ::borogove::JID_obj::parse(::borogove::_Util::Util_Fields__obj::uriDecode(parts->__get(0)));
             		}
             		else {
-HXLINE( 971)			bool jid1;
-HXDLIN( 971)			if (::StringTools_obj::startsWith(query,HX_("BEGIN:VCARD",75,85,ee,6a))) {
-HXLINE( 971)				jid1 = vcard_regex->match(query);
+HXLINE( 984)			bool jid1;
+HXDLIN( 984)			if (::StringTools_obj::startsWith(query,HX_("BEGIN:VCARD",75,85,ee,6a))) {
+HXLINE( 984)				jid1 = vcard_regex->match(query);
             			}
             			else {
-HXLINE( 971)				jid1 = false;
+HXLINE( 984)				jid1 = false;
             			}
-HXDLIN( 971)			if (jid1) {
-HXLINE( 972)				::Array< ::String > parts1 = vcard_regex->matched(1).split(HX_("?",3f,00,00,00));
-HXLINE( 968)				jid = ::borogove::JID_obj::parse(::borogove::_Util::Util_Fields__obj::uriDecode(parts1->__get(0)));
+HXDLIN( 984)			if (jid1) {
+HXLINE( 985)				::Array< ::String > parts1 = vcard_regex->matched(1).split(HX_("?",3f,00,00,00));
+HXLINE( 981)				jid = ::borogove::JID_obj::parse(::borogove::_Util::Util_Fields__obj::uriDecode(parts1->__get(0)));
             			}
             			else {
-HXLINE( 974)				if (::StringTools_obj::startsWith(query,HX_("https://",cf,b4,ae,3e))) {
-HXLINE( 975)					::Array< ::String > hashParts = query.split(HX_("#",23,00,00,00));
-HXLINE( 976)					if ((hashParts->length > 1)) {
-HXLINE( 968)						jid = ::borogove::JID_obj::parse(::borogove::_Util::Util_Fields__obj::uriDecode(hashParts->__get(1)));
+HXLINE( 987)				if (::StringTools_obj::startsWith(query,HX_("https://",cf,b4,ae,3e))) {
+HXLINE( 988)					::Array< ::String > hashParts = query.split(HX_("#",23,00,00,00));
+HXLINE( 989)					if ((hashParts->length > 1)) {
+HXLINE( 981)						jid = ::borogove::JID_obj::parse(::borogove::_Util::Util_Fields__obj::uriDecode(hashParts->__get(1)));
             					}
             					else {
-HXLINE( 979)						::Array< ::String > pathParts = hashParts->__get(0).split(HX_("/",2f,00,00,00));
-HXLINE( 968)						jid = ::borogove::JID_obj::parse(::borogove::_Util::Util_Fields__obj::uriDecode(pathParts->__get((pathParts->length - 1))));
+HXLINE( 992)						::Array< ::String > pathParts = hashParts->__get(0).split(HX_("/",2f,00,00,00));
+HXLINE( 981)						jid = ::borogove::JID_obj::parse(::borogove::_Util::Util_Fields__obj::uriDecode(pathParts->__get((pathParts->length - 1))));
             					}
             				}
             				else {
-HXLINE( 968)					jid = ::borogove::JID_obj::parse(query);
+HXLINE( 981)					jid = ::borogove::JID_obj::parse(query);
             				}
             			}
             		}
-HXLINE( 985)		if (jid->isValid()) {
-HXLINE( 986)			checkAndAdd(jid,true);
+HXLINE( 998)		if (jid->isValid()) {
+HXLINE( 999)			checkAndAdd(jid,true);
             		}
-HXLINE( 989)		if (::StringTools_obj::startsWith(query,HX_("https://",cf,b4,ae,3e))) {
+HXLINE(1002)		if (::StringTools_obj::startsWith(query,HX_("https://",cf,b4,ae,3e))) {
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_3, ::Dynamic,checkAndAdd) HXARGC(1)
             			void _hx_run(::String xmppUri){
-            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_990_findAvailableChats)
-HXLINE( 991)				::Array< ::String > parts = xmppUri.substr(5,null()).split(HX_("?",3f,00,00,00));
-HXLINE( 992)				 ::borogove::JID jid = ::borogove::JID_obj::parse(::borogove::_Util::Util_Fields__obj::uriDecode(parts->__get(0)));
-HXLINE( 993)				if (jid->isValid()) {
-HXLINE( 993)					checkAndAdd(jid,true);
+            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1003_findAvailableChats)
+HXLINE(1004)				::Array< ::String > parts = xmppUri.substr(5,null()).split(HX_("?",3f,00,00,00));
+HXLINE(1005)				 ::borogove::JID jid = ::borogove::JID_obj::parse(::borogove::_Util::Util_Fields__obj::uriDecode(parts->__get(0)));
+HXLINE(1006)				if (jid->isValid()) {
+HXLINE(1006)					checkAndAdd(jid,true);
             				}
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 990)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::_Util::Util_Fields__obj::xmppLinkHeader(query), ::Dynamic(new _hx_Closure_3(checkAndAdd)),null());
-            		}
-HXLINE( 997)		{
-HXLINE( 997)			int _g = 0;
-HXDLIN( 997)			::Array< ::Dynamic> _g1 = this->chats;
-HXDLIN( 997)			while((_g < _g1->length)){
-HXLINE( 997)				 ::borogove::Chat chat = _g1->__get(_g).StaticCast<  ::borogove::Chat >();
-HXDLIN( 997)				_g = (_g + 1);
-HXLINE( 998)				::String chat1 = chat->chatId;
-HXDLIN( 998)				if ((chat1 != jid->asBare()->asString())) {
-HXLINE( 999)					bool _hx_tmp;
-HXDLIN( 999)					::String s = chat->chatId;
-HXDLIN( 999)					if ((s.indexOf(query.toLowerCase(),null()) == -1)) {
-HXLINE( 999)						::String s1 = chat->getDisplayName().toLowerCase();
-HXDLIN( 999)						_hx_tmp = (s1.indexOf(query.toLowerCase(),null()) != -1);
+HXLINE(1003)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::_Util::Util_Fields__obj::xmppLinkHeader(query), ::Dynamic(new _hx_Closure_3(checkAndAdd)),null());
+            		}
+HXLINE(1010)		{
+HXLINE(1010)			int _g = 0;
+HXDLIN(1010)			::Array< ::Dynamic> _g1 = this->chats;
+HXDLIN(1010)			while((_g < _g1->length)){
+HXLINE(1010)				 ::borogove::Chat chat = _g1->__get(_g).StaticCast<  ::borogove::Chat >();
+HXDLIN(1010)				_g = (_g + 1);
+HXLINE(1011)				::String chat1 = chat->chatId;
+HXDLIN(1011)				if ((chat1 != jid->asBare()->asString())) {
+HXLINE(1012)					bool _hx_tmp;
+HXDLIN(1012)					::String s = chat->chatId;
+HXDLIN(1012)					if ((s.indexOf(query.toLowerCase(),null()) == -1)) {
+HXLINE(1012)						::String s1 = chat->getDisplayName().toLowerCase();
+HXDLIN(1012)						_hx_tmp = (s1.indexOf(query.toLowerCase(),null()) != -1);
             					}
             					else {
-HXLINE( 999)						_hx_tmp = true;
+HXLINE(1012)						_hx_tmp = true;
             					}
-HXDLIN( 999)					if (_hx_tmp) {
-HXLINE(1000)						 ::borogove::Channel channel = ( ( ::borogove::Channel)(::borogove::_Util::Util_Fields__obj::downcast(chat,::hx::ClassOf< ::borogove::Channel >())) );
-HXLINE(1001)						::Array< ::Dynamic> results1 = results;
-HXDLIN(1001)						::String chat2 = chat->chatId;
-HXDLIN(1001)						::String _hx_tmp1 = chat->getDisplayName();
-HXDLIN(1001)						::String chat3 = chat->chatId;
-HXDLIN(1001)						 ::borogove::Caps _hx_tmp2;
-HXDLIN(1001)						bool _hx_tmp3;
-HXDLIN(1001)						if (::hx::IsNotNull( channel )) {
-HXLINE(1001)							_hx_tmp3 = ::hx::IsNull( channel->disco );
+HXDLIN(1012)					if (_hx_tmp) {
+HXLINE(1013)						 ::borogove::Channel channel = ( ( ::borogove::Channel)(::borogove::_Util::Util_Fields__obj::downcast(chat,::hx::ClassOf< ::borogove::Channel >())) );
+HXLINE(1014)						::Array< ::Dynamic> results1 = results;
+HXDLIN(1014)						::String chat2 = chat->chatId;
+HXDLIN(1014)						::String _hx_tmp1 = chat->getDisplayName();
+HXDLIN(1014)						::String chat3 = chat->chatId;
+HXDLIN(1014)						 ::borogove::Caps _hx_tmp2;
+HXDLIN(1014)						bool _hx_tmp3;
+HXDLIN(1014)						if (::hx::IsNotNull( channel )) {
+HXLINE(1014)							_hx_tmp3 = ::hx::IsNull( channel->disco );
             						}
             						else {
-HXLINE(1001)							_hx_tmp3 = true;
+HXLINE(1014)							_hx_tmp3 = true;
             						}
-HXDLIN(1001)						if (_hx_tmp3) {
-HXLINE(1001)							_hx_tmp2 =  ::borogove::Caps_obj::__alloc( HX_CTX ,HX_("",00,00,00,00),::Array_obj< ::Dynamic>::__new(0),::Array_obj< ::String >::__new(0),::Array_obj< ::Dynamic>::__new(0),null());
+HXDLIN(1014)						if (_hx_tmp3) {
+HXLINE(1014)							_hx_tmp2 =  ::borogove::Caps_obj::__alloc( HX_CTX ,HX_("",00,00,00,00),::Array_obj< ::Dynamic>::__new(0),::Array_obj< ::String >::__new(0),::Array_obj< ::Dynamic>::__new(0),null());
             						}
             						else {
-HXLINE(1001)							_hx_tmp2 = channel->disco;
+HXLINE(1014)							_hx_tmp2 = channel->disco;
             						}
-HXDLIN(1001)						results1->push( ::borogove::AvailableChat_obj::__alloc( HX_CTX ,chat2,_hx_tmp1,chat3,_hx_tmp2));
+HXDLIN(1014)						results1->push( ::borogove::AvailableChat_obj::__alloc( HX_CTX ,chat2,_hx_tmp1,chat3,_hx_tmp2));
             					}
             				}
-HXLINE(1004)				if (chat->isTrusted()) {
-HXLINE(1005)					 ::haxe::ds::StringMap resources =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE(1006)					{
-HXLINE(1006)						int _g2 = 0;
-HXDLIN(1006)						::Array< ::String > _g3 = ::borogove::Caps_obj::withIdentity(chat->getCaps(),HX_("gateway",04,40,59,91),null());
-HXDLIN(1006)						while((_g2 < _g3->length)){
-HXLINE(1006)							::String resource = _g3->__get(_g2);
-HXDLIN(1006)							_g2 = (_g2 + 1);
-HXLINE(1008)							::Array< ::Dynamic> identities;
-HXDLIN(1008)							 ::borogove::Caps tmp = chat->getResourceCaps(resource);
-HXDLIN(1008)							::Array< ::Dynamic> tmp1;
-HXDLIN(1008)							if (::hx::IsNotNull( tmp )) {
-HXLINE(1008)								tmp1 = tmp->identities;
+HXLINE(1017)				if (chat->isTrusted()) {
+HXLINE(1018)					 ::haxe::ds::StringMap resources =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE(1019)					{
+HXLINE(1019)						int _g2 = 0;
+HXDLIN(1019)						::Array< ::String > _g3 = ::borogove::Caps_obj::withIdentity(chat->getCaps(),HX_("gateway",04,40,59,91),null());
+HXDLIN(1019)						while((_g2 < _g3->length)){
+HXLINE(1019)							::String resource = _g3->__get(_g2);
+HXDLIN(1019)							_g2 = (_g2 + 1);
+HXLINE(1021)							::Array< ::Dynamic> identities;
+HXDLIN(1021)							 ::borogove::Caps tmp = chat->getResourceCaps(resource);
+HXDLIN(1021)							::Array< ::Dynamic> tmp1;
+HXDLIN(1021)							if (::hx::IsNotNull( tmp )) {
+HXLINE(1021)								tmp1 = tmp->identities;
             							}
             							else {
-HXLINE(1008)								tmp1 = null();
+HXLINE(1021)								tmp1 = null();
             							}
-HXDLIN(1008)							if (::hx::IsNotNull( tmp1 )) {
-HXLINE(1008)								identities = tmp1;
+HXDLIN(1021)							if (::hx::IsNotNull( tmp1 )) {
+HXLINE(1021)								identities = tmp1;
             							}
             							else {
-HXLINE(1008)								identities = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1021)								identities = ::Array_obj< ::Dynamic>::__new(0);
             							}
-HXLINE(1010)							bool _hx_tmp4;
-HXDLIN(1010)							bool _hx_tmp5;
-HXDLIN(1010)							if ((chat->chatId.indexOf(HX_("@",40,00,00,00),null()) >= 0)) {
+HXLINE(1023)							bool _hx_tmp4;
+HXDLIN(1023)							bool _hx_tmp5;
+HXDLIN(1023)							if ((chat->chatId.indexOf(HX_("@",40,00,00,00),null()) >= 0)) {
             								HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_4) HXARGC(1)
             								bool _hx_run( ::borogove::Identity i){
-            									HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1010_findAvailableChats)
-HXLINE(1010)									return (i->category == HX_("conference",1c,2b,83,41));
+            									HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1023_findAvailableChats)
+HXLINE(1023)									return (i->category == HX_("conference",1c,2b,83,41));
             								}
             								HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1010)								_hx_tmp5 = ::hx::IsNull( ::Lambda_obj::find(identities, ::Dynamic(new _hx_Closure_4())) );
+HXLINE(1023)								_hx_tmp5 = ::hx::IsNull( ::Lambda_obj::find(identities, ::Dynamic(new _hx_Closure_4())) );
             							}
             							else {
-HXLINE(1010)								_hx_tmp5 = true;
+HXLINE(1023)								_hx_tmp5 = true;
             							}
-HXDLIN(1010)							if (_hx_tmp5) {
+HXDLIN(1023)							if (_hx_tmp5) {
             								HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_5) HXARGC(1)
             								bool _hx_run( ::borogove::Identity i){
-            									HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1011_findAvailableChats)
-HXLINE(1011)									return (i->category == HX_("client",4b,ca,4f,0a));
+            									HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1024_findAvailableChats)
+HXLINE(1024)									return (i->category == HX_("client",4b,ca,4f,0a));
             								}
             								HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1010)								_hx_tmp4 = ::hx::IsNull( ::Lambda_obj::find(identities, ::Dynamic(new _hx_Closure_5())) );
+HXLINE(1023)								_hx_tmp4 = ::hx::IsNull( ::Lambda_obj::find(identities, ::Dynamic(new _hx_Closure_5())) );
             							}
             							else {
-HXLINE(1010)								_hx_tmp4 = false;
+HXLINE(1023)								_hx_tmp4 = false;
             							}
-HXLINE(1009)							if (_hx_tmp4) {
-HXLINE(1013)								resources->set(resource,true);
+HXLINE(1022)							if (_hx_tmp4) {
+HXLINE(1026)								resources->set(resource,true);
             							}
             						}
             					}
-HXLINE(1020)					bool _hx_tmp6;
-HXDLIN(1020)					if (!(this->sendAvailable)) {
-HXLINE(1020)						_hx_tmp6 = ::borogove::JID_obj::parse(chat->chatId)->isDomain();
+HXLINE(1033)					bool _hx_tmp6;
+HXDLIN(1033)					if (!(this->sendAvailable)) {
+HXLINE(1033)						_hx_tmp6 = ::borogove::JID_obj::parse(chat->chatId)->isDomain();
             					}
             					else {
-HXLINE(1020)						_hx_tmp6 = false;
+HXLINE(1033)						_hx_tmp6 = false;
             					}
-HXDLIN(1020)					if (_hx_tmp6) {
-HXLINE(1021)						::String k = null();
-HXDLIN(1021)						resources->set(k,true);
+HXDLIN(1033)					if (_hx_tmp6) {
+HXLINE(1034)						::String k = null();
+HXDLIN(1034)						resources->set(k,true);
             					}
-HXLINE(1023)					{
-HXLINE(1023)						 ::Dynamic resource1 = resources->keys();
-HXDLIN(1023)						while(( (bool)(resource1->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE(1036)					{
+HXLINE(1036)						 ::Dynamic resource1 = resources->keys();
+HXDLIN(1036)						while(( (bool)(resource1->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
             							HX_BEGIN_LOCAL_FUNC_S6(::hx::LocalFunc,_hx_Closure_6, ::borogove::queries::JabberIqGatewayGet,jigGet1,::String,query, ::borogove::JID,bareJid, ::borogove::Chat,chat,::String,resource2, ::Dynamic,checkAndAdd) HXARGC(0)
             							void _hx_run(){
-            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1028_findAvailableChats)
-HXLINE(1028)								if (::hx::IsNull( jigGet1->getResult() )) {
-HXLINE(1029)									 ::borogove::Caps caps = chat->getResourceCaps(resource2);
-HXLINE(1030)									bool _hx_tmp;
-HXDLIN(1030)									if (bareJid->isDomain()) {
-HXLINE(1030)										_hx_tmp = caps->features->contains(HX_("jid\\20escaping",73,c5,d2,4a));
+            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1041_findAvailableChats)
+HXLINE(1041)								if (::hx::IsNull( jigGet1->getResult() )) {
+HXLINE(1042)									 ::borogove::Caps caps = chat->getResourceCaps(resource2);
+HXLINE(1043)									bool _hx_tmp;
+HXDLIN(1043)									if (bareJid->isDomain()) {
+HXLINE(1043)										_hx_tmp = caps->features->contains(HX_("jid\\20escaping",73,c5,d2,4a));
             									}
             									else {
-HXLINE(1030)										_hx_tmp = false;
+HXLINE(1043)										_hx_tmp = false;
             									}
-HXDLIN(1030)									if (_hx_tmp) {
-HXLINE(1031)										 ::Dynamic checkAndAdd1 = checkAndAdd;
-HXDLIN(1031)										checkAndAdd1( ::borogove::JID_obj::__alloc( HX_CTX ,query,bareJid->domain,null(),null()),null());
+HXDLIN(1043)									if (_hx_tmp) {
+HXLINE(1044)										 ::Dynamic checkAndAdd1 = checkAndAdd;
+HXDLIN(1044)										checkAndAdd1( ::borogove::JID_obj::__alloc( HX_CTX ,query,bareJid->domain,null(),null()),null());
             									}
             									else {
-HXLINE(1032)										if (bareJid->isDomain()) {
-HXLINE(1033)											 ::Dynamic checkAndAdd2 = checkAndAdd;
-HXDLIN(1033)											::String _hx_tmp1 = ::StringTools_obj::replace(query,HX_("@",40,00,00,00),HX_("%",25,00,00,00));
-HXDLIN(1033)											checkAndAdd2( ::borogove::JID_obj::__alloc( HX_CTX ,_hx_tmp1,bareJid->domain,null(),null()),null());
+HXLINE(1045)										if (bareJid->isDomain()) {
+HXLINE(1046)											 ::Dynamic checkAndAdd2 = checkAndAdd;
+HXDLIN(1046)											::String _hx_tmp1 = ::StringTools_obj::replace(query,HX_("@",40,00,00,00),HX_("%",25,00,00,00));
+HXDLIN(1046)											checkAndAdd2( ::borogove::JID_obj::__alloc( HX_CTX ,_hx_tmp1,bareJid->domain,null(),null()),null());
             										}
             									}
             								}
             								else {
-HXLINE(1036)									 ::haxe::ds::Either _g = jigGet1->getResult();
-HXDLIN(1036)									switch((int)(_g->_hx_getIndex())){
+HXLINE(1049)									 ::haxe::ds::Either _g = jigGet1->getResult();
+HXDLIN(1049)									switch((int)(_g->_hx_getIndex())){
             										case (int)0: {
-HXLINE(1037)											return;
+HXLINE(1050)											return;
             										}
             										break;
             										case (int)1: {
-HXLINE(1039)											 ::Dynamic checkAndAdd3 = checkAndAdd;
-HXDLIN(1039)											checkAndAdd3(::borogove::JID_obj::parse(( (::String)(_g->_hx_getObject(0)) )),null());
+HXLINE(1052)											 ::Dynamic checkAndAdd3 = checkAndAdd;
+HXDLIN(1052)											checkAndAdd3(::borogove::JID_obj::parse(( (::String)(_g->_hx_getObject(0)) )),null());
             										}
             										break;
             									}
@@ -3052,50 +3088,50 @@ HXDLIN(1039)											checkAndAdd3(::borogove::JID_obj::parse(( (::String)(_g->
             							}
             							HX_END_LOCAL_FUNC0((void))
 
-HXLINE(1023)							::String resource2 = ( (::String)(resource1->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXLINE(1024)							 ::borogove::JID bareJid = ::borogove::JID_obj::parse(chat->chatId);
-HXLINE(1025)							::String bareJid1 = bareJid->node;
-HXDLIN(1025)							::String bareJid2 = bareJid->domain;
-HXDLIN(1025)							::String fullJid;
-HXDLIN(1025)							bool fullJid1;
-HXDLIN(1025)							if (bareJid->isDomain()) {
-HXLINE(1025)								fullJid1 = (resource2 == HX_("",00,00,00,00));
+HXLINE(1036)							::String resource2 = ( (::String)(resource1->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXLINE(1037)							 ::borogove::JID bareJid = ::borogove::JID_obj::parse(chat->chatId);
+HXLINE(1038)							::String bareJid1 = bareJid->node;
+HXDLIN(1038)							::String bareJid2 = bareJid->domain;
+HXDLIN(1038)							::String fullJid;
+HXDLIN(1038)							bool fullJid1;
+HXDLIN(1038)							if (bareJid->isDomain()) {
+HXLINE(1038)								fullJid1 = (resource2 == HX_("",00,00,00,00));
             							}
             							else {
-HXLINE(1025)								fullJid1 = false;
+HXLINE(1038)								fullJid1 = false;
             							}
-HXDLIN(1025)							if (fullJid1) {
-HXLINE(1025)								fullJid = null();
+HXDLIN(1038)							if (fullJid1) {
+HXLINE(1038)								fullJid = null();
             							}
             							else {
-HXLINE(1025)								fullJid = resource2;
+HXLINE(1038)								fullJid = resource2;
             							}
-HXLINE(1026)							::String jigGet =  ::borogove::JID_obj::__alloc( HX_CTX ,bareJid1,bareJid2,fullJid,null())->asString();
-HXDLIN(1026)							 ::borogove::queries::JabberIqGatewayGet jigGet1 =  ::borogove::queries::JabberIqGatewayGet_obj::__alloc( HX_CTX ,jigGet,query);
-HXLINE(1027)							jigGet1->onFinished( ::Dynamic(new _hx_Closure_6(jigGet1,query,bareJid,chat,resource2,checkAndAdd)));
-HXLINE(1043)							this->sendQuery(jigGet1);
+HXLINE(1039)							::String jigGet =  ::borogove::JID_obj::__alloc( HX_CTX ,bareJid1,bareJid2,fullJid,null())->asString();
+HXDLIN(1039)							 ::borogove::queries::JabberIqGatewayGet jigGet1 =  ::borogove::queries::JabberIqGatewayGet_obj::__alloc( HX_CTX ,jigGet,query);
+HXLINE(1040)							jigGet1->onFinished( ::Dynamic(new _hx_Closure_6(jigGet1,query,bareJid,chat,resource2,checkAndAdd)));
+HXLINE(1056)							this->sendQuery(jigGet1);
             						}
             					}
             				}
             			}
             		}
-HXLINE(1047)		bool _hx_tmp7;
-HXDLIN(1047)		if (!(jid->isValid())) {
-HXLINE(1047)			_hx_tmp7 = (results->length > 0);
+HXLINE(1060)		bool _hx_tmp7;
+HXDLIN(1060)		if (!(jid->isValid())) {
+HXLINE(1060)			_hx_tmp7 = (results->length > 0);
             		}
             		else {
-HXLINE(1047)			_hx_tmp7 = false;
+HXLINE(1060)			_hx_tmp7 = false;
             		}
-HXDLIN(1047)		if (_hx_tmp7) {
-HXLINE(1048)			bool _hx_tmp8;
-HXDLIN(1048)			if (::hx::IsNotNull( callback1->__get(0) )) {
-HXLINE(1048)				_hx_tmp8 = ( (bool)(callback1->__get(0)(q,results)) );
+HXDLIN(1060)		if (_hx_tmp7) {
+HXLINE(1061)			bool _hx_tmp8;
+HXDLIN(1061)			if (::hx::IsNotNull( callback1->__get(0) )) {
+HXLINE(1061)				_hx_tmp8 = ( (bool)(callback1->__get(0)(q,results)) );
             			}
             			else {
-HXLINE(1048)				_hx_tmp8 = false;
+HXLINE(1061)				_hx_tmp8 = false;
             			}
-HXDLIN(1048)			if (_hx_tmp8) {
-HXLINE(1048)				callback1[0] = null();
+HXDLIN(1061)			if (_hx_tmp8) {
+HXLINE(1061)				callback1[0] = null();
             			}
             		}
             	}
@@ -3106,159 +3142,159 @@ HX_DEFINE_DYNAMIC_FUNC2(Client_obj,findAvailableChats,(void))
 void Client_obj::findAvailableChats__fromC(::String q,::cpp::Function< bool  (const char*,void**,size_t,void*) > callback,void* callback__context){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,void*,callback__context,::cpp::Function< bool  (const char* HX_COMMA void** HX_COMMA size_t HX_COMMA void*) >,callback) HXARGC(2)
             		bool _hx_run(::String a0,::Array< ::Dynamic> a1){
-            			HX_STACKFRAME(&_hx_pos_afe14372debdebc6_255_findAvailableChats__fromC)
-HXLINE( 230)			const char* cStrPtr = a0.utf8_str();
-HXDLIN( 230)			::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
-HXDLIN( 230)			{
-HXLINE( 230)				 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 230)				if (::hx::IsNull( store )) {
-HXLINE( 230)					store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            			HX_STACKFRAME(&_hx_pos_afe14372debdebc6_272_findAvailableChats__fromC)
+HXLINE( 247)			const char* cStrPtr = a0.utf8_str();
+HXDLIN( 247)			::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
+HXDLIN( 247)			{
+HXLINE( 247)				 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 247)				if (::hx::IsNull( store )) {
+HXLINE( 247)					store =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),a0));
-HXDLIN( 230)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN( 247)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             				}
             				else {
-HXLINE( 230)					::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
-            				}
-            			}
-HXDLIN( 230)			const char* x0 = cStrPtr;
-HXLINE( 226)			{
-HXLINE( 226)				int _g = 0;
-HXDLIN( 226)				while((_g < a1->length)){
-HXLINE( 226)					 ::borogove::AvailableChat el = a1->__get(_g).StaticCast<  ::borogove::AvailableChat >();
-HXDLIN( 226)					_g = (_g + 1);
-HXDLIN( 226)					{
-HXLINE( 226)						 ::Dynamic haxeObject = el;
-HXDLIN( 226)						void* ptr = haxeObject.mPtr;
-HXDLIN( 226)						::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 226)						{
-HXLINE( 226)							 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 226)							if (::hx::IsNull( store1 )) {
-HXLINE( 226)								store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 247)					::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+            				}
+            			}
+HXDLIN( 247)			const char* x0 = cStrPtr;
+HXLINE( 243)			{
+HXLINE( 243)				int _g = 0;
+HXDLIN( 243)				while((_g < a1->length)){
+HXLINE( 243)					 ::borogove::AvailableChat el = a1->__get(_g).StaticCast<  ::borogove::AvailableChat >();
+HXDLIN( 243)					_g = (_g + 1);
+HXDLIN( 243)					{
+HXLINE( 243)						 ::Dynamic haxeObject = el;
+HXDLIN( 243)						void* ptr = haxeObject.mPtr;
+HXDLIN( 243)						::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 243)						{
+HXLINE( 243)							 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 243)							if (::hx::IsNull( store1 )) {
+HXLINE( 243)								store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             									->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 226)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+HXDLIN( 243)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
             							}
             							else {
-HXLINE( 226)								::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE( 243)								::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
             							}
             						}
             					}
             				}
             			}
-HXDLIN( 226)			void** ptr1 = (void**)a1->getBase();
-HXDLIN( 226)			::cpp::Int64 ptrInt642 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 226)			{
-HXLINE( 226)				 ::Dynamic store2 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt642);
-HXDLIN( 226)				if (::hx::IsNull( store2 )) {
-HXLINE( 226)					store2 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 243)			void** ptr1 = (void**)a1->getBase();
+HXDLIN( 243)			::cpp::Int64 ptrInt642 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 243)			{
+HXLINE( 243)				 ::Dynamic store2 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt642);
+HXDLIN( 243)				if (::hx::IsNull( store2 )) {
+HXLINE( 243)					store2 =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),a1));
-HXDLIN( 226)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt642,store2);
+HXDLIN( 243)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt642,store2);
             				}
             				else {
-HXLINE( 226)					::hx::FieldRef((store2).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE( 243)					::hx::FieldRef((store2).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXDLIN( 226)			int xl1 = a1->length;
-HXLINE( 252)			return callback(x0,ptr1,( (size_t)(xl1) ),callback__context);
+HXDLIN( 243)			int xl1 = a1->length;
+HXLINE( 269)			return callback(x0,ptr1,( (size_t)(xl1) ),callback__context);
             		}
             		HX_END_LOCAL_FUNC2(return)
 
-            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_315_findAvailableChats__fromC)
-HXDLIN( 315)		this->findAvailableChats(q, ::Dynamic(new _hx_Closure_0(callback__context,callback)));
+            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_339_findAvailableChats__fromC)
+HXDLIN( 339)		this->findAvailableChats(q, ::Dynamic(new _hx_Closure_0(callback__context,callback)));
             	}
 
 
  ::borogove::Chat Client_obj::startChat( ::borogove::AvailableChat availableChat){
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1057_startChat)
-HXLINE(1058)		 ::borogove::Chat existingChat = this->getChat(availableChat->chatId);
-HXLINE(1059)		if (::hx::IsNotNull( existingChat )) {
-HXLINE(1060)			 ::borogove::Channel channel = ( ( ::borogove::Channel)(::Std_obj::downcast(existingChat,::hx::ClassOf< ::borogove::Channel >())) );
-HXLINE(1061)			bool _hx_tmp;
-HXDLIN(1061)			bool _hx_tmp1;
-HXDLIN(1061)			if (::hx::IsNull( channel )) {
-HXLINE(1061)				_hx_tmp1 = availableChat->isChannel();
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1070_startChat)
+HXLINE(1071)		 ::borogove::Chat existingChat = this->getChat(availableChat->chatId);
+HXLINE(1072)		if (::hx::IsNotNull( existingChat )) {
+HXLINE(1073)			 ::borogove::Channel channel = ( ( ::borogove::Channel)(::Std_obj::downcast(existingChat,::hx::ClassOf< ::borogove::Channel >())) );
+HXLINE(1074)			bool _hx_tmp;
+HXDLIN(1074)			bool _hx_tmp1;
+HXDLIN(1074)			if (::hx::IsNull( channel )) {
+HXLINE(1074)				_hx_tmp1 = availableChat->isChannel();
             			}
             			else {
-HXLINE(1061)				_hx_tmp1 = false;
+HXLINE(1074)				_hx_tmp1 = false;
             			}
-HXDLIN(1061)			if (!(_hx_tmp1)) {
-HXLINE(1061)				if (::hx::IsNotNull( channel )) {
-HXLINE(1061)					_hx_tmp = !(availableChat->isChannel());
+HXDLIN(1074)			if (!(_hx_tmp1)) {
+HXLINE(1074)				if (::hx::IsNotNull( channel )) {
+HXLINE(1074)					_hx_tmp = !(availableChat->isChannel());
             				}
             				else {
-HXLINE(1061)					_hx_tmp = false;
+HXLINE(1074)					_hx_tmp = false;
             				}
             			}
             			else {
-HXLINE(1061)				_hx_tmp = true;
-            			}
-HXDLIN(1061)			if (_hx_tmp) {
-HXLINE(1062)				::Array< ::Dynamic> _this = this->chats;
-HXDLIN(1062)				::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN(1062)				{
-HXLINE(1062)					int _g1 = 0;
-HXDLIN(1062)					while((_g1 < _this->length)){
-HXLINE(1062)						 ::borogove::Chat v = _this->__get(_g1).StaticCast<  ::borogove::Chat >();
-HXDLIN(1062)						_g1 = (_g1 + 1);
-HXDLIN(1062)						if ((v->chatId != availableChat->chatId)) {
-HXLINE(1062)							_g->push(v);
+HXLINE(1074)				_hx_tmp = true;
+            			}
+HXDLIN(1074)			if (_hx_tmp) {
+HXLINE(1075)				::Array< ::Dynamic> _this = this->chats;
+HXDLIN(1075)				::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN(1075)				{
+HXLINE(1075)					int _g1 = 0;
+HXDLIN(1075)					while((_g1 < _this->length)){
+HXLINE(1075)						 ::borogove::Chat v = _this->__get(_g1).StaticCast<  ::borogove::Chat >();
+HXDLIN(1075)						_g1 = (_g1 + 1);
+HXDLIN(1075)						if ((v->chatId != availableChat->chatId)) {
+HXLINE(1075)							_g->push(v);
             						}
             					}
             				}
-HXDLIN(1062)				this->chats = _g;
+HXDLIN(1075)				this->chats = _g;
             			}
             			else {
-HXLINE(1064)				if ((existingChat->uiState == 2)) {
-HXLINE(1064)					existingChat->uiState = 1;
+HXLINE(1077)				if ((existingChat->uiState == 2)) {
+HXLINE(1077)					existingChat->uiState = 1;
             				}
-HXLINE(1065)				if (::hx::IsNotNull( channel )) {
-HXLINE(1065)					channel->selfPing(true);
+HXLINE(1078)				if (::hx::IsNotNull( channel )) {
+HXLINE(1078)					channel->selfPing(true);
             				}
-HXLINE(1066)				::Dynamic _hx_tmp2 = this->persistence;
-HXDLIN(1066)				::borogove::Persistence_obj::storeChats(_hx_tmp2,this->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,existingChat));
-HXLINE(1067)				this->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,existingChat));
-HXLINE(1068)				return existingChat;
+HXLINE(1079)				::Dynamic _hx_tmp2 = this->persistence;
+HXDLIN(1079)				::borogove::Persistence_obj::storeChats(_hx_tmp2,this->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,existingChat));
+HXLINE(1080)				this->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,existingChat));
+HXLINE(1081)				return existingChat;
             			}
             		}
-HXLINE(1072)		 ::borogove::Chat chat;
-HXDLIN(1072)		if (availableChat->isChannel()) {
-HXLINE(1073)			 ::borogove::Channel channel1 =  ::borogove::Channel_obj::__alloc( HX_CTX ,::hx::ObjectPtr<OBJ_>(this),this->stream,this->persistence,availableChat->chatId,1,false,null(),null(),null(),availableChat->caps);
-HXLINE(1074)			channel1->setupNotifications();
-HXLINE(1075)			this->chats->unshift(channel1);
-HXLINE(1076)			channel1->selfPing(false);
-HXLINE(1072)			chat = channel1;
+HXLINE(1085)		 ::borogove::Chat chat;
+HXDLIN(1085)		if (availableChat->isChannel()) {
+HXLINE(1086)			 ::borogove::Channel channel1 =  ::borogove::Channel_obj::__alloc( HX_CTX ,::hx::ObjectPtr<OBJ_>(this),this->stream,this->persistence,availableChat->chatId,1,false,null(),null(),null(),availableChat->caps);
+HXLINE(1087)			channel1->setupNotifications();
+HXLINE(1088)			this->chats->unshift(channel1);
+HXLINE(1089)			channel1->selfPing(false);
+HXLINE(1085)			chat = channel1;
             		}
             		else {
-HXLINE(1072)			chat = this->getDirectChat(availableChat->chatId,false);
+HXLINE(1085)			chat = this->getDirectChat(availableChat->chatId,false);
             		}
-HXLINE(1081)		::Dynamic _hx_tmp3 = this->persistence;
-HXDLIN(1081)		::borogove::Persistence_obj::storeChats(_hx_tmp3,this->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat));
-HXLINE(1082)		this->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat));
-HXLINE(1083)		return chat;
+HXLINE(1094)		::Dynamic _hx_tmp3 = this->persistence;
+HXDLIN(1094)		::borogove::Persistence_obj::storeChats(_hx_tmp3,this->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat));
+HXLINE(1095)		this->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat));
+HXLINE(1096)		return chat;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Client_obj,startChat,return )
 
  ::borogove::Chat Client_obj::getChat(::String chatId){
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1092_getChat)
-HXDLIN(1092)		::Array< ::Dynamic> it = this->chats;
-HXDLIN(1092)		 ::borogove::Chat result = null();
-HXDLIN(1092)		{
-HXDLIN(1092)			int _g = 0;
-HXDLIN(1092)			while((_g < it->length)){
-HXDLIN(1092)				 ::borogove::Chat v = it->__get(_g).StaticCast<  ::borogove::Chat >();
-HXDLIN(1092)				_g = (_g + 1);
-HXDLIN(1092)				if ((v->chatId == chatId)) {
-HXDLIN(1092)					result = v;
-HXDLIN(1092)					goto _hx_goto_117;
-            				}
-            			}
-            			_hx_goto_117:;
-            		}
-HXDLIN(1092)		return result;
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1105_getChat)
+HXDLIN(1105)		::Array< ::Dynamic> it = this->chats;
+HXDLIN(1105)		 ::borogove::Chat result = null();
+HXDLIN(1105)		{
+HXDLIN(1105)			int _g = 0;
+HXDLIN(1105)			while((_g < it->length)){
+HXDLIN(1105)				 ::borogove::Chat v = it->__get(_g).StaticCast<  ::borogove::Chat >();
+HXDLIN(1105)				_g = (_g + 1);
+HXDLIN(1105)				if ((v->chatId == chatId)) {
+HXDLIN(1105)					result = v;
+HXDLIN(1105)					goto _hx_goto_118;
+            				}
+            			}
+            			_hx_goto_118:;
+            		}
+HXDLIN(1105)		return result;
             	}
 
 
@@ -3269,45 +3305,45 @@ HX_DEFINE_DYNAMIC_FUNC1(Client_obj,getChat,return )
             		void _hx_run( ::Dynamic resolve, ::Dynamic reject){
             			HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::borogove::Client,_gthis, ::borogove::ModerationAction,action, ::Dynamic,resolve) HXARGC(1)
             			void _hx_run( ::borogove::ChatMessage moderateMessage){
-            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1098_moderateMessage)
-HXLINE(1099)				if (::hx::IsNull( moderateMessage )) {
-HXLINE(1099)					resolve(null());
-HXDLIN(1099)					return;
-            				}
-HXLINE(1100)				{
-HXLINE(1100)					int _g = 0;
-HXDLIN(1100)					::Array< ::Dynamic> _g1 = moderateMessage->attachments;
-HXDLIN(1100)					while((_g < _g1->length)){
-HXLINE(1100)						 ::borogove::ChatAttachment attachment = _g1->__get(_g).StaticCast<  ::borogove::ChatAttachment >();
-HXDLIN(1100)						_g = (_g + 1);
-HXLINE(1101)						{
-HXLINE(1101)							int _g2 = 0;
-HXDLIN(1101)							::Array< ::Dynamic> _g3 = attachment->hashes;
-HXDLIN(1101)							while((_g2 < _g3->length)){
-HXLINE(1101)								 ::borogove::Hash hash = _g3->__get(_g2).StaticCast<  ::borogove::Hash >();
-HXDLIN(1101)								_g2 = (_g2 + 1);
-HXLINE(1102)								::borogove::Persistence_obj::removeMedia(_gthis->persistence,hash->algorithm,hash->hash);
+            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1111_moderateMessage)
+HXLINE(1112)				if (::hx::IsNull( moderateMessage )) {
+HXLINE(1112)					resolve(null());
+HXDLIN(1112)					return;
+            				}
+HXLINE(1113)				{
+HXLINE(1113)					int _g = 0;
+HXDLIN(1113)					::Array< ::Dynamic> _g1 = moderateMessage->attachments;
+HXDLIN(1113)					while((_g < _g1->length)){
+HXLINE(1113)						 ::borogove::ChatAttachment attachment = _g1->__get(_g).StaticCast<  ::borogove::ChatAttachment >();
+HXDLIN(1113)						_g = (_g + 1);
+HXLINE(1114)						{
+HXLINE(1114)							int _g2 = 0;
+HXDLIN(1114)							::Array< ::Dynamic> _g3 = attachment->hashes;
+HXDLIN(1114)							while((_g2 < _g3->length)){
+HXLINE(1114)								 ::borogove::Hash hash = _g3->__get(_g2).StaticCast<  ::borogove::Hash >();
+HXDLIN(1114)								_g2 = (_g2 + 1);
+HXLINE(1115)								::borogove::Persistence_obj::removeMedia(_gthis->persistence,hash->algorithm,hash->hash);
             							}
             						}
             					}
             				}
-HXLINE(1105)				moderateMessage = ::borogove::ChatMessageBuilder_obj::makeModerated(moderateMessage,action->timestamp,action->moderatorId,action->reason);
-HXLINE(1106)				::Dynamic _gthis1 = _gthis->persistence;
-HXDLIN(1106)				::borogove::Persistence_obj::updateMessage(_gthis1,_gthis->accountId(),moderateMessage);
-HXLINE(1107)				resolve(moderateMessage);
+HXLINE(1118)				moderateMessage = ::borogove::ChatMessageBuilder_obj::makeModerated(moderateMessage,action->timestamp,action->moderatorId,action->reason);
+HXLINE(1119)				::Dynamic _gthis1 = _gthis->persistence;
+HXDLIN(1119)				::borogove::Persistence_obj::updateMessage(_gthis1,_gthis->accountId(),moderateMessage);
+HXLINE(1120)				resolve(moderateMessage);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1098_moderateMessage)
-HXLINE(1098)			::Dynamic _gthis1 = _gthis->persistence;
-HXDLIN(1098)			::String _hx_tmp = _gthis->accountId();
-HXDLIN(1098)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getMessage(_gthis1,_hx_tmp,action->chatId,action->moderateServerId,null()), ::Dynamic(new _hx_Closure_0(_gthis,action,resolve)),null());
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1111_moderateMessage)
+HXLINE(1111)			::Dynamic _gthis1 = _gthis->persistence;
+HXDLIN(1111)			::String _hx_tmp = _gthis->accountId();
+HXDLIN(1111)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getMessage(_gthis1,_hx_tmp,action->chatId,action->moderateServerId,null()), ::Dynamic(new _hx_Closure_0(_gthis,action,resolve)),null());
             		}
             		HX_END_LOCAL_FUNC2((void))
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1096_moderateMessage)
-HXDLIN(1096)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1097)		return ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_1(_gthis,action)));
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1109_moderateMessage)
+HXDLIN(1109)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1110)		return ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_1(_gthis,action)));
             	}
 
 
@@ -3315,48 +3351,48 @@ HX_DEFINE_DYNAMIC_FUNC1(Client_obj,moderateMessage,return )
 
  ::borogove::DirectChat Client_obj::getDirectChat(::String chatId,::hx::Null< bool >  __o_triggerIfNew){
             		bool triggerIfNew = __o_triggerIfNew.Default(true);
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1113_getDirectChat)
-HXLINE(1114)		{
-HXLINE(1114)			int _g = 0;
-HXDLIN(1114)			::Array< ::Dynamic> _g1 = this->chats;
-HXDLIN(1114)			while((_g < _g1->length)){
-HXLINE(1114)				 ::borogove::Chat chat = _g1->__get(_g).StaticCast<  ::borogove::Chat >();
-HXDLIN(1114)				_g = (_g + 1);
-HXLINE(1115)				bool _hx_tmp;
-HXDLIN(1115)				if (::Std_obj::isOfType(chat,::hx::ClassOf< ::borogove::DirectChat >())) {
-HXLINE(1115)					_hx_tmp = (chat->chatId == chatId);
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1126_getDirectChat)
+HXLINE(1127)		{
+HXLINE(1127)			int _g = 0;
+HXDLIN(1127)			::Array< ::Dynamic> _g1 = this->chats;
+HXDLIN(1127)			while((_g < _g1->length)){
+HXLINE(1127)				 ::borogove::Chat chat = _g1->__get(_g).StaticCast<  ::borogove::Chat >();
+HXDLIN(1127)				_g = (_g + 1);
+HXLINE(1128)				bool _hx_tmp;
+HXDLIN(1128)				if (::Std_obj::isOfType(chat,::hx::ClassOf< ::borogove::DirectChat >())) {
+HXLINE(1128)					_hx_tmp = (chat->chatId == chatId);
             				}
             				else {
-HXLINE(1115)					_hx_tmp = false;
+HXLINE(1128)					_hx_tmp = false;
             				}
-HXDLIN(1115)				if (_hx_tmp) {
-HXLINE(1116)					return ( ( ::borogove::DirectChat)(::Std_obj::downcast(chat,::hx::ClassOf< ::borogove::DirectChat >())) );
+HXDLIN(1128)				if (_hx_tmp) {
+HXLINE(1129)					return ( ( ::borogove::DirectChat)(::Std_obj::downcast(chat,::hx::ClassOf< ::borogove::DirectChat >())) );
             				}
             			}
             		}
-HXLINE(1119)		 ::borogove::DirectChat chat1 =  ::borogove::DirectChat_obj::__alloc( HX_CTX ,::hx::ObjectPtr<OBJ_>(this),this->stream,this->persistence,chatId,null(),null(),null(),null(),null(),null());
-HXLINE(1120)		::Dynamic _hx_tmp1 = this->persistence;
-HXDLIN(1120)		::borogove::Persistence_obj::storeChats(_hx_tmp1,this->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat1));
-HXLINE(1121)		this->chats->unshift(chat1);
-HXLINE(1122)		if (triggerIfNew) {
-HXLINE(1122)			this->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat1));
+HXLINE(1132)		 ::borogove::DirectChat chat1 =  ::borogove::DirectChat_obj::__alloc( HX_CTX ,::hx::ObjectPtr<OBJ_>(this),this->stream,this->persistence,chatId,null(),null(),null(),null(),null(),null());
+HXLINE(1133)		::Dynamic _hx_tmp1 = this->persistence;
+HXDLIN(1133)		::borogove::Persistence_obj::storeChats(_hx_tmp1,this->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat1));
+HXLINE(1134)		this->chats->unshift(chat1);
+HXLINE(1135)		if (triggerIfNew) {
+HXLINE(1135)			this->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat1));
             		}
-HXLINE(1123)		return chat1;
+HXLINE(1136)		return chat1;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Client_obj,getDirectChat,return )
 
 void Client_obj::enablePush(::String push_service,::String endpoint,::Array< unsigned char > p256dh,::Array< unsigned char > auth,int grace,::Array< unsigned char > vapid_private_pkcs8,::Array< ::String > claims){
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1166_enablePush)
-HXLINE(1167)		::Array< ::String > _hx_tmp;
-HXDLIN(1167)		if (::hx::IsNotNull( claims )) {
-HXLINE(1167)			_hx_tmp = claims;
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1179_enablePush)
+HXLINE(1180)		::Array< ::String > _hx_tmp;
+HXDLIN(1180)		if (::hx::IsNotNull( claims )) {
+HXLINE(1180)			_hx_tmp = claims;
             		}
             		else {
-HXLINE(1167)			_hx_tmp = ::Array_obj< ::String >::__new(0);
+HXLINE(1180)			_hx_tmp = ::Array_obj< ::String >::__new(0);
             		}
-HXDLIN(1167)		this->enabledPushData =  ::Dynamic(::hx::Anon_obj::Create(7)
+HXDLIN(1180)		this->enabledPushData =  ::Dynamic(::hx::Anon_obj::Create(7)
             			->setFixed(0,HX_("grace",f8,03,ea,99),grace)
             			->setFixed(1,HX_("p256dh",e7,0a,33,b5),p256dh)
             			->setFixed(2,HX_("push_service",90,f1,d2,f8),push_service)
@@ -3364,137 +3400,137 @@ HXDLIN(1167)		this->enabledPushData =  ::Dynamic(::hx::Anon_obj::Create(7)
             			->setFixed(4,HX_("claims",77,1d,09,05),_hx_tmp)
             			->setFixed(5,HX_("endpoint",95,d6,5f,31),endpoint)
             			->setFixed(6,HX_("auth",68,df,76,40),auth));
-HXLINE(1169)		::Array< ::Dynamic> filters = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(1170)		{
-HXLINE(1170)			int _g = 0;
-HXDLIN(1170)			::Array< ::Dynamic> _g1 = this->chats;
-HXDLIN(1170)			while((_g < _g1->length)){
-HXLINE(1170)				 ::borogove::Chat chat = _g1->__get(_g).StaticCast<  ::borogove::Chat >();
-HXDLIN(1170)				_g = (_g + 1);
-HXLINE(1171)				if (chat->notificationsFiltered()) {
-HXLINE(1172)					::String chat1 = chat->chatId;
-HXDLIN(1172)					bool _hx_tmp1 = chat->notifyMention();
-HXDLIN(1172)					filters->push( ::Dynamic(::hx::Anon_obj::Create(3)
+HXLINE(1182)		::Array< ::Dynamic> filters = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1183)		{
+HXLINE(1183)			int _g = 0;
+HXDLIN(1183)			::Array< ::Dynamic> _g1 = this->chats;
+HXDLIN(1183)			while((_g < _g1->length)){
+HXLINE(1183)				 ::borogove::Chat chat = _g1->__get(_g).StaticCast<  ::borogove::Chat >();
+HXDLIN(1183)				_g = (_g + 1);
+HXLINE(1184)				if (chat->notificationsFiltered()) {
+HXLINE(1185)					::String chat1 = chat->chatId;
+HXDLIN(1185)					bool _hx_tmp1 = chat->notifyMention();
+HXDLIN(1185)					filters->push( ::Dynamic(::hx::Anon_obj::Create(3)
             						->setFixed(0,HX_("mention",ea,9e,bf,b9),_hx_tmp1)
             						->setFixed(1,HX_("reply",2a,09,c6,e6),chat->notifyReply())
             						->setFixed(2,HX_("jid",c5,ca,50,00),chat1)));
             				}
             			}
             		}
-HXLINE(1176)		 ::haxe::ds::StringMap _g2 =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXDLIN(1176)		_g2->set(HX_("aud",f0,00,4a,00),( (::Array< ::String >)(::tink::_Url::Url_Impl__obj::parse(endpoint,null())->__Field(HX_("hosts",0b,ac,62,2b),::hx::paccDynamic)) )->__get(0));
-HXLINE(1177)		{
-HXLINE(1177)			int _g3 = 0;
-HXDLIN(1177)			::Array< ::String > _g4;
-HXDLIN(1177)			if (::hx::IsNotNull( claims )) {
-HXLINE(1177)				_g4 = claims;
+HXLINE(1189)		 ::haxe::ds::StringMap _g2 =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXDLIN(1189)		_g2->set(HX_("aud",f0,00,4a,00),( (::Array< ::String >)(::tink::_Url::Url_Impl__obj::parse(endpoint,null())->__Field(HX_("hosts",0b,ac,62,2b),::hx::paccDynamic)) )->__get(0));
+HXLINE(1190)		{
+HXLINE(1190)			int _g3 = 0;
+HXDLIN(1190)			::Array< ::String > _g4;
+HXDLIN(1190)			if (::hx::IsNotNull( claims )) {
+HXLINE(1190)				_g4 = claims;
             			}
             			else {
-HXLINE(1177)				_g4 = ::Array_obj< ::String >::__new(0);
+HXLINE(1190)				_g4 = ::Array_obj< ::String >::__new(0);
             			}
-HXDLIN(1177)			int _g5 = _g4->length;
-HXDLIN(1177)			while((_g3 < _g5)){
-HXLINE(1177)				_g3 = (_g3 + 1);
-HXDLIN(1177)				int i = (_g3 - 1);
-HXLINE(1178)				if ((::hx::Mod(i,2) == 0)) {
-HXLINE(1179)					_g2->set(claims->__get(i),claims->__get((i + 1)));
+HXDLIN(1190)			int _g5 = _g4->length;
+HXDLIN(1190)			while((_g3 < _g5)){
+HXLINE(1190)				_g3 = (_g3 + 1);
+HXDLIN(1190)				int i = (_g3 - 1);
+HXLINE(1191)				if ((::hx::Mod(i,2) == 0)) {
+HXLINE(1192)					_g2->set(claims->__get(i),claims->__get((i + 1)));
             				}
             			}
             		}
-HXLINE(1184)		::String _hx_tmp2 = this->jid->asBare()->asString();
-HXLINE(1189)		::String _hx_tmp3;
-HXDLIN(1189)		if (::hx::IsNull( vapid_private_pkcs8 )) {
-HXLINE(1189)			_hx_tmp3 = null();
+HXLINE(1197)		::String _hx_tmp2 = this->jid->asBare()->asString();
+HXLINE(1202)		::String _hx_tmp3;
+HXDLIN(1202)		if (::hx::IsNull( vapid_private_pkcs8 )) {
+HXLINE(1202)			_hx_tmp3 = null();
             		}
             		else {
-HXLINE(1189)			_hx_tmp3 = HX_("ES256",65,db,a8,f1);
+HXLINE(1202)			_hx_tmp3 = HX_("ES256",65,db,a8,f1);
             		}
-HXLINE(1190)		 ::haxe::io::Bytes _hx_tmp4;
-HXDLIN(1190)		if (::hx::IsNull( vapid_private_pkcs8 )) {
-HXLINE(1190)			_hx_tmp4 = null();
+HXLINE(1203)		 ::haxe::io::Bytes _hx_tmp4;
+HXDLIN(1203)		if (::hx::IsNull( vapid_private_pkcs8 )) {
+HXLINE(1203)			_hx_tmp4 = null();
             		}
             		else {
-HXLINE(1190)			_hx_tmp4 = ::haxe::io::Bytes_obj::ofData(vapid_private_pkcs8);
+HXLINE(1203)			_hx_tmp4 = ::haxe::io::Bytes_obj::ofData(vapid_private_pkcs8);
             		}
-HXLINE(1183)		this->sendQuery( ::borogove::queries::Push2Enable_obj::__alloc( HX_CTX ,_hx_tmp2,push_service,endpoint,::haxe::io::Bytes_obj::ofData(p256dh),::haxe::io::Bytes_obj::ofData(auth),_hx_tmp3,_hx_tmp4,_g2,grace,filters));
+HXLINE(1196)		this->sendQuery( ::borogove::queries::Push2Enable_obj::__alloc( HX_CTX ,_hx_tmp2,push_service,endpoint,::haxe::io::Bytes_obj::ofData(p256dh),::haxe::io::Bytes_obj::ofData(auth),_hx_tmp3,_hx_tmp4,_g2,grace,filters));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC7(Client_obj,enablePush,(void))
 
 void Client_obj::enablePush__fromC(::String push_service,::String endpoint,::cpp::Pointer< unsigned char > p256dh,size_t p256dh__len,::cpp::Pointer< unsigned char > auth,size_t auth__len,int grace,::cpp::Pointer< unsigned char > vapid_private_pkcs8,size_t vapid_private_pkcs8__len,::cpp::Pointer< const char* > claims,size_t claims__len){
-            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_315_enablePush__fromC)
-HXLINE( 265)		::Array< unsigned char > _hx_tmp;
-HXDLIN( 265)		if (::hx::IsNull( p256dh )) {
-HXLINE( 265)			_hx_tmp = null();
+            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_339_enablePush__fromC)
+HXLINE( 282)		::Array< unsigned char > _hx_tmp;
+HXDLIN( 282)		if (::hx::IsNull( p256dh )) {
+HXLINE( 282)			_hx_tmp = null();
             		}
             		else {
-HXLINE( 265)			::cpp::Pointer< unsigned char > _this = p256dh->reinterpret();
-HXDLIN( 265)			::Array< unsigned char > result = ::Array_obj< unsigned char >::__new();
-HXDLIN( 265)			::cpp::Pointer< unsigned char > tmp = _this;
-HXDLIN( 265)			result->setUnmanagedData(tmp,( (int)(p256dh__len) ));
-HXDLIN( 265)			_hx_tmp = result->copy();
+HXLINE( 282)			::cpp::Pointer< unsigned char > _this = p256dh->reinterpret();
+HXDLIN( 282)			::Array< unsigned char > result = ::Array_obj< unsigned char >::__new();
+HXDLIN( 282)			::cpp::Pointer< unsigned char > tmp = _this;
+HXDLIN( 282)			result->setUnmanagedData(tmp,( (int)(p256dh__len) ));
+HXDLIN( 282)			_hx_tmp = result->copy();
             		}
-HXDLIN( 265)		::Array< unsigned char > _hx_tmp1;
-HXDLIN( 265)		if (::hx::IsNull( auth )) {
-HXLINE( 265)			_hx_tmp1 = null();
+HXDLIN( 282)		::Array< unsigned char > _hx_tmp1;
+HXDLIN( 282)		if (::hx::IsNull( auth )) {
+HXLINE( 282)			_hx_tmp1 = null();
             		}
             		else {
-HXLINE( 265)			::cpp::Pointer< unsigned char > _this1 = auth->reinterpret();
-HXDLIN( 265)			::Array< unsigned char > result1 = ::Array_obj< unsigned char >::__new();
-HXDLIN( 265)			::cpp::Pointer< unsigned char > tmp1 = _this1;
-HXDLIN( 265)			result1->setUnmanagedData(tmp1,( (int)(auth__len) ));
-HXDLIN( 265)			_hx_tmp1 = result1->copy();
+HXLINE( 282)			::cpp::Pointer< unsigned char > _this1 = auth->reinterpret();
+HXDLIN( 282)			::Array< unsigned char > result1 = ::Array_obj< unsigned char >::__new();
+HXDLIN( 282)			::cpp::Pointer< unsigned char > tmp1 = _this1;
+HXDLIN( 282)			result1->setUnmanagedData(tmp1,( (int)(auth__len) ));
+HXDLIN( 282)			_hx_tmp1 = result1->copy();
             		}
-HXDLIN( 265)		::Array< unsigned char > _hx_tmp2;
-HXDLIN( 265)		if (::hx::IsNull( vapid_private_pkcs8 )) {
-HXLINE( 265)			_hx_tmp2 = null();
+HXDLIN( 282)		::Array< unsigned char > _hx_tmp2;
+HXDLIN( 282)		if (::hx::IsNull( vapid_private_pkcs8 )) {
+HXLINE( 282)			_hx_tmp2 = null();
             		}
             		else {
-HXLINE( 265)			::cpp::Pointer< unsigned char > _this2 = vapid_private_pkcs8->reinterpret();
-HXDLIN( 265)			::Array< unsigned char > result2 = ::Array_obj< unsigned char >::__new();
-HXDLIN( 265)			::cpp::Pointer< unsigned char > tmp2 = _this2;
-HXDLIN( 265)			result2->setUnmanagedData(tmp2,( (int)(vapid_private_pkcs8__len) ));
-HXDLIN( 265)			_hx_tmp2 = result2->copy();
+HXLINE( 282)			::cpp::Pointer< unsigned char > _this2 = vapid_private_pkcs8->reinterpret();
+HXDLIN( 282)			::Array< unsigned char > result2 = ::Array_obj< unsigned char >::__new();
+HXDLIN( 282)			::cpp::Pointer< unsigned char > tmp2 = _this2;
+HXDLIN( 282)			result2->setUnmanagedData(tmp2,( (int)(vapid_private_pkcs8__len) ));
+HXDLIN( 282)			_hx_tmp2 = result2->copy();
             		}
-HXLINE( 263)		::Array< ::String > _hx_tmp3;
-HXDLIN( 263)		if (::hx::IsNull( claims )) {
-HXLINE( 263)			_hx_tmp3 = null();
+HXLINE( 280)		::Array< ::String > _hx_tmp3;
+HXDLIN( 280)		if (::hx::IsNull( claims )) {
+HXLINE( 280)			_hx_tmp3 = null();
             		}
             		else {
-HXLINE( 263)			::cpp::Pointer< ::cpp::Pointer< char > > _this3 = claims->reinterpret();
-HXDLIN( 263)			::Array< ::cpp::Pointer< char > > result3 = ::Array_obj< ::cpp::Pointer< char > >::__new();
-HXDLIN( 263)			::cpp::Pointer< ::cpp::Pointer< char > > tmp3 = _this3;
-HXDLIN( 263)			result3->setUnmanagedData(tmp3,( (int)(claims__len) ));
-HXDLIN( 263)			 ::Dynamic f = ::cpp::_NativeString::NativeString_Impl__obj::fromPointer_dyn();
-HXDLIN( 263)			::Array< ::String > result4 = ::Array_obj< ::String >::__new(result3->length);
-HXDLIN( 263)			{
-HXLINE( 263)				int _g = 0;
-HXDLIN( 263)				int _g1 = result3->length;
-HXDLIN( 263)				while((_g < _g1)){
-HXLINE( 263)					_g = (_g + 1);
-HXDLIN( 263)					int i = (_g - 1);
-HXDLIN( 263)					{
-HXLINE( 263)						::cpp::Pointer< char > tmp4 = _hx_array_unsafe_get(result3,i);
-HXDLIN( 263)						::String inValue = ( (::String)(f(tmp4)) );
-HXDLIN( 263)						result4->__unsafe_set(i,inValue);
+HXLINE( 280)			::cpp::Pointer< ::cpp::Pointer< char > > _this3 = claims->reinterpret();
+HXDLIN( 280)			::Array< ::cpp::Pointer< char > > result3 = ::Array_obj< ::cpp::Pointer< char > >::__new();
+HXDLIN( 280)			::cpp::Pointer< ::cpp::Pointer< char > > tmp3 = _this3;
+HXDLIN( 280)			result3->setUnmanagedData(tmp3,( (int)(claims__len) ));
+HXDLIN( 280)			 ::Dynamic f = ::cpp::_NativeString::NativeString_Impl__obj::fromPointer_dyn();
+HXDLIN( 280)			::Array< ::String > result4 = ::Array_obj< ::String >::__new(result3->length);
+HXDLIN( 280)			{
+HXLINE( 280)				int _g = 0;
+HXDLIN( 280)				int _g1 = result3->length;
+HXDLIN( 280)				while((_g < _g1)){
+HXLINE( 280)					_g = (_g + 1);
+HXDLIN( 280)					int i = (_g - 1);
+HXDLIN( 280)					{
+HXLINE( 280)						::cpp::Pointer< char > tmp4 = _hx_array_unsafe_get(result3,i);
+HXDLIN( 280)						::String inValue = ( (::String)(f(tmp4)) );
+HXDLIN( 280)						result4->__unsafe_set(i,inValue);
             					}
             				}
             			}
-HXDLIN( 263)			_hx_tmp3 = result4->copy();
+HXDLIN( 280)			_hx_tmp3 = result4->copy();
             		}
-HXLINE( 315)		this->enablePush(push_service,endpoint,_hx_tmp,_hx_tmp1,grace,_hx_tmp2,_hx_tmp3);
+HXLINE( 339)		this->enablePush(push_service,endpoint,_hx_tmp,_hx_tmp1,grace,_hx_tmp2,_hx_tmp3);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC11(Client_obj,enablePush__fromC,(void))
 
 void Client_obj::updatePushIfEnabled(){
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1198_updatePushIfEnabled)
-HXLINE(1199)		if (::hx::IsNull( this->enabledPushData )) {
-HXLINE(1199)			return;
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1211_updatePushIfEnabled)
+HXLINE(1212)		if (::hx::IsNull( this->enabledPushData )) {
+HXLINE(1212)			return;
             		}
-HXLINE(1200)		this->enablePush(( (::String)(this->enabledPushData->__Field(HX_("push_service",90,f1,d2,f8),::hx::paccDynamic)) ),( (::String)(this->enabledPushData->__Field(HX_("endpoint",95,d6,5f,31),::hx::paccDynamic)) ),( (::Array< unsigned char >)(this->enabledPushData->__Field(HX_("p256dh",e7,0a,33,b5),::hx::paccDynamic)) ),( (::Array< unsigned char >)(this->enabledPushData->__Field(HX_("auth",68,df,76,40),::hx::paccDynamic)) ),( (int)(this->enabledPushData->__Field(HX_("grace",f8,03,ea,99),::hx::paccDynamic)) ),( (::Array< unsigned char >)(this->enabledPushData->__Field(HX_("vapid_private_pkcs8",32,d7,0a,03),::hx::paccDynamic)) ),( (::Array< ::String >)(this->enabledPushData->__Field(HX_("claims",77,1d,09,05),::hx::paccDynamic)) ));
+HXLINE(1213)		this->enablePush(( (::String)(this->enabledPushData->__Field(HX_("push_service",90,f1,d2,f8),::hx::paccDynamic)) ),( (::String)(this->enabledPushData->__Field(HX_("endpoint",95,d6,5f,31),::hx::paccDynamic)) ),( (::Array< unsigned char >)(this->enabledPushData->__Field(HX_("p256dh",e7,0a,33,b5),::hx::paccDynamic)) ),( (::Array< unsigned char >)(this->enabledPushData->__Field(HX_("auth",68,df,76,40),::hx::paccDynamic)) ),( (int)(this->enabledPushData->__Field(HX_("grace",f8,03,ea,99),::hx::paccDynamic)) ),( (::Array< unsigned char >)(this->enabledPushData->__Field(HX_("vapid_private_pkcs8",32,d7,0a,03),::hx::paccDynamic)) ),( (::Array< ::String >)(this->enabledPushData->__Field(HX_("claims",77,1d,09,05),::hx::paccDynamic)) ));
             	}
 
 
@@ -3503,15 +3539,15 @@ HX_DEFINE_DYNAMIC_FUNC0(Client_obj,updatePushIfEnabled,(void))
 int Client_obj::addPasswordNeededListener( ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::Client,_gthis, ::Dynamic,handler) HXARGC(1)
             		 ::borogove::EventResult _hx_run( ::Dynamic data){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1210_addPasswordNeededListener)
-HXLINE(1211)			handler(_gthis);
-HXLINE(1212)			return ::borogove::EventResult_obj::EventHandled_dyn();
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1223_addPasswordNeededListener)
+HXLINE(1224)			handler(_gthis);
+HXLINE(1225)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1209_addPasswordNeededListener)
-HXDLIN(1209)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1210)		return this->on(HX_("auth/password-needed",80,f0,74,49), ::Dynamic(new _hx_Closure_0(_gthis,handler)));
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1222_addPasswordNeededListener)
+HXDLIN(1222)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1223)		return this->on(HX_("auth/password-needed",80,f0,74,49), ::Dynamic(new _hx_Closure_0(_gthis,handler)));
             	}
 
 
@@ -3520,42 +3556,42 @@ HX_DEFINE_DYNAMIC_FUNC1(Client_obj,addPasswordNeededListener,return )
 int Client_obj::addPasswordNeededListener__fromC(::cpp::Function< void  (void*,void*) > handler,void* handler__context){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (void* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
             		void _hx_run( ::borogove::Client a0){
-            			HX_STACKFRAME(&_hx_pos_afe14372debdebc6_255_addPasswordNeededListener__fromC)
-HXLINE( 234)			 ::Dynamic haxeObject = a0;
-HXDLIN( 234)			void* ptr = haxeObject.mPtr;
-HXDLIN( 234)			::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 234)			{
-HXLINE( 234)				 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 234)				if (::hx::IsNull( store )) {
-HXLINE( 234)					store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            			HX_STACKFRAME(&_hx_pos_afe14372debdebc6_272_addPasswordNeededListener__fromC)
+HXLINE( 251)			 ::Dynamic haxeObject = a0;
+HXDLIN( 251)			void* ptr = haxeObject.mPtr;
+HXDLIN( 251)			::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 251)			{
+HXLINE( 251)				 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 251)				if (::hx::IsNull( store )) {
+HXLINE( 251)					store =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 234)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN( 251)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             				}
             				else {
-HXLINE( 234)					::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE( 251)					::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXLINE( 244)			handler(ptr,handler__context);
+HXLINE( 261)			handler(ptr,handler__context);
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_315_addPasswordNeededListener__fromC)
-HXDLIN( 315)		return this->addPasswordNeededListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
+            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_339_addPasswordNeededListener__fromC)
+HXDLIN( 339)		return this->addPasswordNeededListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
             	}
 
 
 int Client_obj::addStatusOnlineListener( ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,handler) HXARGC(1)
             		 ::borogove::EventResult _hx_run( ::Dynamic data){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1223_addStatusOnlineListener)
-HXLINE(1224)			handler();
-HXLINE(1225)			return ::borogove::EventResult_obj::EventHandled_dyn();
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1236_addStatusOnlineListener)
+HXLINE(1237)			handler();
+HXLINE(1238)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1223_addStatusOnlineListener)
-HXDLIN(1223)		return this->on(HX_("status/online",10,05,0e,d2), ::Dynamic(new _hx_Closure_0(handler)));
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1236_addStatusOnlineListener)
+HXDLIN(1236)		return this->on(HX_("status/online",10,05,0e,d2), ::Dynamic(new _hx_Closure_0(handler)));
             	}
 
 
@@ -3564,27 +3600,27 @@ HX_DEFINE_DYNAMIC_FUNC1(Client_obj,addStatusOnlineListener,return )
 int Client_obj::addStatusOnlineListener__fromC(::cpp::Function< void  (void*) > handler,void* handler__context){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (void*) >,handler,void*,handler__context) HXARGC(0)
             		void _hx_run(){
-            			HX_STACKFRAME(&_hx_pos_afe14372debdebc6_244_addStatusOnlineListener__fromC)
-HXLINE( 244)			handler(handler__context);
+            			HX_STACKFRAME(&_hx_pos_afe14372debdebc6_261_addStatusOnlineListener__fromC)
+HXLINE( 261)			handler(handler__context);
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_315_addStatusOnlineListener__fromC)
-HXDLIN( 315)		return this->addStatusOnlineListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
+            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_339_addStatusOnlineListener__fromC)
+HXDLIN( 339)		return this->addStatusOnlineListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
             	}
 
 
 int Client_obj::addStatusOfflineListener( ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,handler) HXARGC(1)
             		 ::borogove::EventResult _hx_run( ::Dynamic data){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1236_addStatusOfflineListener)
-HXLINE(1237)			handler();
-HXLINE(1238)			return ::borogove::EventResult_obj::EventHandled_dyn();
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1249_addStatusOfflineListener)
+HXLINE(1250)			handler();
+HXLINE(1251)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1236_addStatusOfflineListener)
-HXDLIN(1236)		return this->on(HX_("status/offline",c6,eb,eb,54), ::Dynamic(new _hx_Closure_0(handler)));
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1249_addStatusOfflineListener)
+HXDLIN(1249)		return this->on(HX_("status/offline",c6,eb,eb,54), ::Dynamic(new _hx_Closure_0(handler)));
             	}
 
 
@@ -3593,27 +3629,27 @@ HX_DEFINE_DYNAMIC_FUNC1(Client_obj,addStatusOfflineListener,return )
 int Client_obj::addStatusOfflineListener__fromC(::cpp::Function< void  (void*) > handler,void* handler__context){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (void*) >,handler,void*,handler__context) HXARGC(0)
             		void _hx_run(){
-            			HX_STACKFRAME(&_hx_pos_afe14372debdebc6_244_addStatusOfflineListener__fromC)
-HXLINE( 244)			handler(handler__context);
+            			HX_STACKFRAME(&_hx_pos_afe14372debdebc6_261_addStatusOfflineListener__fromC)
+HXLINE( 261)			handler(handler__context);
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_315_addStatusOfflineListener__fromC)
-HXDLIN( 315)		return this->addStatusOfflineListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
+            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_339_addStatusOfflineListener__fromC)
+HXDLIN( 339)		return this->addStatusOfflineListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
             	}
 
 
 int Client_obj::addConnectionFailedListener( ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,handler) HXARGC(1)
             		 ::borogove::EventResult _hx_run( ::Dynamic data){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1249_addConnectionFailedListener)
-HXLINE(1250)			handler();
-HXLINE(1251)			return ::borogove::EventResult_obj::EventHandled_dyn();
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1262_addConnectionFailedListener)
+HXLINE(1263)			handler();
+HXLINE(1264)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1249_addConnectionFailedListener)
-HXDLIN(1249)		return this->stream->on(HX_("status/error",eb,19,84,6f), ::Dynamic(new _hx_Closure_0(handler)));
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1262_addConnectionFailedListener)
+HXDLIN(1262)		return this->stream->on(HX_("status/error",eb,19,84,6f), ::Dynamic(new _hx_Closure_0(handler)));
             	}
 
 
@@ -3622,26 +3658,26 @@ HX_DEFINE_DYNAMIC_FUNC1(Client_obj,addConnectionFailedListener,return )
 int Client_obj::addConnectionFailedListener__fromC(::cpp::Function< void  (void*) > handler,void* handler__context){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (void*) >,handler,void*,handler__context) HXARGC(0)
             		void _hx_run(){
-            			HX_STACKFRAME(&_hx_pos_afe14372debdebc6_244_addConnectionFailedListener__fromC)
-HXLINE( 244)			handler(handler__context);
+            			HX_STACKFRAME(&_hx_pos_afe14372debdebc6_261_addConnectionFailedListener__fromC)
+HXLINE( 261)			handler(handler__context);
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_315_addConnectionFailedListener__fromC)
-HXDLIN( 315)		return this->addConnectionFailedListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
+            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_339_addConnectionFailedListener__fromC)
+HXDLIN( 339)		return this->addConnectionFailedListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
             	}
 
 
 int Client_obj::addTlsCheckListener( ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,handler) HXARGC(1)
             		 ::borogove::EventResult _hx_run( ::Dynamic data){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1263_addTlsCheckListener)
-HXLINE(1263)			return ::borogove::EventResult_obj::EventValue(handler( ::Dynamic(data->__Field(HX_("pem",d8,54,55,00),::hx::paccDynamic)), ::Dynamic(data->__Field(HX_("dnsNames",5f,19,aa,5a),::hx::paccDynamic))));
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1276_addTlsCheckListener)
+HXLINE(1276)			return ::borogove::EventResult_obj::EventValue(handler( ::Dynamic(data->__Field(HX_("pem",d8,54,55,00),::hx::paccDynamic)), ::Dynamic(data->__Field(HX_("dnsNames",5f,19,aa,5a),::hx::paccDynamic))));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1262_addTlsCheckListener)
-HXDLIN(1262)		return this->stream->on(HX_("tls/check",74,a0,4c,75), ::Dynamic(new _hx_Closure_0(handler)));
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1275_addTlsCheckListener)
+HXDLIN(1275)		return this->stream->on(HX_("tls/check",74,a0,4c,75), ::Dynamic(new _hx_Closure_0(handler)));
             	}
 
 
@@ -3650,85 +3686,85 @@ HX_DEFINE_DYNAMIC_FUNC1(Client_obj,addTlsCheckListener,return )
 int Client_obj::addTlsCheckListener__fromC(::cpp::Function< bool  (const char*,const char**,size_t,void*) > handler,void* handler__context){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< bool  (const char* HX_COMMA const char** HX_COMMA size_t HX_COMMA void*) >,handler,void*,handler__context) HXARGC(2)
             		bool _hx_run(::String a0,::Array< ::String > a1){
-            			HX_STACKFRAME(&_hx_pos_afe14372debdebc6_255_addTlsCheckListener__fromC)
-HXLINE( 230)			const char* cStrPtr = a0.utf8_str();
-HXDLIN( 230)			::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
-HXDLIN( 230)			{
-HXLINE( 230)				 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 230)				if (::hx::IsNull( store )) {
-HXLINE(2192)					store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            			HX_STACKFRAME(&_hx_pos_afe14372debdebc6_272_addTlsCheckListener__fromC)
+HXLINE( 247)			const char* cStrPtr = a0.utf8_str();
+HXDLIN( 247)			::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
+HXDLIN( 247)			{
+HXLINE( 247)				 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 247)				if (::hx::IsNull( store )) {
+HXLINE(2243)					store =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),a0));
-HXLINE( 230)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXLINE( 247)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             				}
             				else {
-HXLINE( 230)					::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
-            				}
-            			}
-HXDLIN( 230)			const char* x0 = cStrPtr;
-HXLINE( 226)			::Array< size_t > arr = ::Array_obj< size_t >::__new(a1->length);
-HXDLIN( 226)			{
-HXLINE( 226)				int _g_current = 0;
-HXDLIN( 226)				::Array< ::String > _g_array = a1;
-HXDLIN( 226)				while((_g_current < _g_array->length)){
-HXLINE( 226)					::String _g_value = _g_array->__get(_g_current);
-HXDLIN( 226)					_g_current = (_g_current + 1);
-HXDLIN( 226)					::String el = _g_value;
-HXDLIN( 226)					{
-HXLINE( 226)						const char* cStrPtr1 = el.utf8_str();
-HXDLIN( 226)						::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(cStrPtr1);
-HXDLIN( 226)						{
-HXLINE( 226)							 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 226)							if (::hx::IsNull( store1 )) {
-HXLINE(2192)								store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 247)					::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+            				}
+            			}
+HXDLIN( 247)			const char* x0 = cStrPtr;
+HXLINE( 243)			::Array< size_t > arr = ::Array_obj< size_t >::__new(a1->length);
+HXDLIN( 243)			{
+HXLINE( 243)				int _g_current = 0;
+HXDLIN( 243)				::Array< ::String > _g_array = a1;
+HXDLIN( 243)				while((_g_current < _g_array->length)){
+HXLINE( 243)					::String _g_value = _g_array->__get(_g_current);
+HXDLIN( 243)					_g_current = (_g_current + 1);
+HXDLIN( 243)					::String el = _g_value;
+HXDLIN( 243)					{
+HXLINE( 243)						const char* cStrPtr1 = el.utf8_str();
+HXDLIN( 243)						::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(cStrPtr1);
+HXDLIN( 243)						{
+HXLINE( 243)							 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 243)							if (::hx::IsNull( store1 )) {
+HXLINE(2243)								store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             									->setFixed(1,HX_("value",71,7f,b8,31),el));
-HXLINE( 226)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+HXLINE( 243)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
             							}
             							else {
-HXLINE( 226)								::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE( 243)								::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
             							}
             						}
-HXDLIN( 226)						const char* ptr = cStrPtr1;
-HXDLIN( 226)						arr[(_g_current - 1)] = reinterpret_cast<size_t>(ptr);
+HXDLIN( 243)						const char* ptr = cStrPtr1;
+HXDLIN( 243)						arr[(_g_current - 1)] = reinterpret_cast<size_t>(ptr);
             					}
             				}
             			}
-HXDLIN( 226)			void** ptr1 = (void**)arr->getBase();
-HXDLIN( 226)			::cpp::Int64 ptrInt642 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 226)			{
-HXLINE( 226)				 ::Dynamic store2 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt642);
-HXDLIN( 226)				if (::hx::IsNull( store2 )) {
-HXLINE(2192)					store2 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 243)			void** ptr1 = (void**)arr->getBase();
+HXDLIN( 243)			::cpp::Int64 ptrInt642 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 243)			{
+HXLINE( 243)				 ::Dynamic store2 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt642);
+HXDLIN( 243)				if (::hx::IsNull( store2 )) {
+HXLINE(2243)					store2 =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),arr));
-HXLINE( 226)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt642,store2);
+HXLINE( 243)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt642,store2);
             				}
             				else {
-HXLINE( 226)					::hx::FieldRef((store2).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE( 243)					::hx::FieldRef((store2).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXDLIN( 226)			int xl1 = a1->length;
-HXLINE( 252)			return handler(x0,( (const char**)(ptr1) ),( (size_t)(xl1) ),handler__context);
+HXDLIN( 243)			int xl1 = a1->length;
+HXLINE( 269)			return handler(x0,( (const char**)(ptr1) ),( (size_t)(xl1) ),handler__context);
             		}
             		HX_END_LOCAL_FUNC2(return)
 
-            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_315_addTlsCheckListener__fromC)
-HXDLIN( 315)		return this->addTlsCheckListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
+            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_339_addTlsCheckListener__fromC)
+HXDLIN( 339)		return this->addTlsCheckListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
             	}
 
 
 int Client_obj::addChatMessageListener( ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,handler) HXARGC(1)
             		 ::borogove::EventResult _hx_run( ::Dynamic data){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1293_addChatMessageListener)
-HXLINE(1294)			handler( ::Dynamic(data->__Field(HX_("message",c7,35,11,9a),::hx::paccDynamic)), ::Dynamic(data->__Field(HX_("event",1a,c8,c4,75),::hx::paccDynamic)));
-HXLINE(1295)			return ::borogove::EventResult_obj::EventHandled_dyn();
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1306_addChatMessageListener)
+HXLINE(1307)			handler( ::Dynamic(data->__Field(HX_("message",c7,35,11,9a),::hx::paccDynamic)), ::Dynamic(data->__Field(HX_("event",1a,c8,c4,75),::hx::paccDynamic)));
+HXLINE(1308)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1293_addChatMessageListener)
-HXDLIN(1293)		return this->on(HX_("message/new",d8,fc,71,67), ::Dynamic(new _hx_Closure_0(handler)));
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1306_addChatMessageListener)
+HXDLIN(1306)		return this->on(HX_("message/new",d8,fc,71,67), ::Dynamic(new _hx_Closure_0(handler)));
             	}
 
 
@@ -3737,42 +3773,42 @@ HX_DEFINE_DYNAMIC_FUNC1(Client_obj,addChatMessageListener,return )
 int Client_obj::addChatMessageListener__fromC(::cpp::Function< void  (void*,int,void*) > handler,void* handler__context){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (void* HX_COMMA int HX_COMMA void*) >,handler,void*,handler__context) HXARGC(2)
             		void _hx_run( ::borogove::ChatMessage a0,int a1){
-            			HX_STACKFRAME(&_hx_pos_afe14372debdebc6_255_addChatMessageListener__fromC)
-HXLINE( 234)			 ::Dynamic haxeObject = a0;
-HXDLIN( 234)			void* ptr = haxeObject.mPtr;
-HXDLIN( 234)			::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 234)			{
-HXLINE( 234)				 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 234)				if (::hx::IsNull( store )) {
-HXLINE( 234)					store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            			HX_STACKFRAME(&_hx_pos_afe14372debdebc6_272_addChatMessageListener__fromC)
+HXLINE( 251)			 ::Dynamic haxeObject = a0;
+HXDLIN( 251)			void* ptr = haxeObject.mPtr;
+HXDLIN( 251)			::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 251)			{
+HXLINE( 251)				 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 251)				if (::hx::IsNull( store )) {
+HXLINE( 251)					store =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 234)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN( 251)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             				}
             				else {
-HXLINE( 234)					::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE( 251)					::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXLINE( 244)			handler(ptr,a1,handler__context);
+HXLINE( 261)			handler(ptr,a1,handler__context);
             		}
             		HX_END_LOCAL_FUNC2((void))
 
-            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_315_addChatMessageListener__fromC)
-HXDLIN( 315)		return this->addChatMessageListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
+            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_339_addChatMessageListener__fromC)
+HXDLIN( 339)		return this->addChatMessageListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
             	}
 
 
 int Client_obj::addSyncMessageListener( ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,handler) HXARGC(1)
             		 ::borogove::EventResult _hx_run( ::borogove::ChatMessage data){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1307_addSyncMessageListener)
-HXLINE(1308)			handler(data);
-HXLINE(1309)			return ::borogove::EventResult_obj::EventHandled_dyn();
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1320_addSyncMessageListener)
+HXLINE(1321)			handler(data);
+HXLINE(1322)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1307_addSyncMessageListener)
-HXDLIN(1307)		return this->on(HX_("message/sync",e3,76,a8,1f), ::Dynamic(new _hx_Closure_0(handler)));
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1320_addSyncMessageListener)
+HXDLIN(1320)		return this->on(HX_("message/sync",e3,76,a8,1f), ::Dynamic(new _hx_Closure_0(handler)));
             	}
 
 
@@ -3781,102 +3817,102 @@ HX_DEFINE_DYNAMIC_FUNC1(Client_obj,addSyncMessageListener,return )
 int Client_obj::addSyncMessageListener__fromC(::cpp::Function< void  (void*,void*) > handler,void* handler__context){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (void* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
             		void _hx_run( ::borogove::ChatMessage a0){
-            			HX_STACKFRAME(&_hx_pos_afe14372debdebc6_255_addSyncMessageListener__fromC)
-HXLINE( 234)			 ::Dynamic haxeObject = a0;
-HXDLIN( 234)			void* ptr = haxeObject.mPtr;
-HXDLIN( 234)			::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 234)			{
-HXLINE( 234)				 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 234)				if (::hx::IsNull( store )) {
-HXLINE( 234)					store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            			HX_STACKFRAME(&_hx_pos_afe14372debdebc6_272_addSyncMessageListener__fromC)
+HXLINE( 251)			 ::Dynamic haxeObject = a0;
+HXDLIN( 251)			void* ptr = haxeObject.mPtr;
+HXDLIN( 251)			::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 251)			{
+HXLINE( 251)				 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 251)				if (::hx::IsNull( store )) {
+HXLINE( 251)					store =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 234)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN( 251)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             				}
             				else {
-HXLINE( 234)					::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE( 251)					::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXLINE( 244)			handler(ptr,handler__context);
+HXLINE( 261)			handler(ptr,handler__context);
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_315_addSyncMessageListener__fromC)
-HXDLIN( 315)		return this->addSyncMessageListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
+            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_339_addSyncMessageListener__fromC)
+HXDLIN( 339)		return this->addSyncMessageListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
             	}
 
 
 int Client_obj::addChatsUpdatedListener( ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_3, ::haxe::ds::StringMap,updateChatBuffer,::Array< ::Dynamic>,updateChatTimer, ::Dynamic,handler,::Array< Float >,lastCall) HXARGC(1)
             		 ::borogove::EventResult _hx_run(::Array< ::Dynamic> data){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1323_addChatsUpdatedListener)
-HXLINE(1324)			Float now = ( ::__time_stamp() * ( (Float)(1000) ));
-HXLINE(1325)			if (::hx::IsNotNull( updateChatTimer->__get(0).StaticCast<  ::haxe::Timer >() )) {
-HXLINE(1326)				updateChatTimer->__get(0).StaticCast<  ::haxe::Timer >()->stop();
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1336_addChatsUpdatedListener)
+HXLINE(1337)			Float now = ( ::__time_stamp() * ( (Float)(1000) ));
+HXLINE(1338)			if (::hx::IsNotNull( updateChatTimer->__get(0).StaticCast<  ::haxe::Timer >() )) {
+HXLINE(1339)				updateChatTimer->__get(0).StaticCast<  ::haxe::Timer >()->stop();
             			}
-HXLINE(1328)			{
-HXLINE(1328)				int _g = 0;
-HXDLIN(1328)				while((_g < data->length)){
-HXLINE(1328)					 ::borogove::Chat chat = data->__get(_g).StaticCast<  ::borogove::Chat >();
-HXDLIN(1328)					_g = (_g + 1);
-HXLINE(1329)					updateChatBuffer->set(chat->chatId,chat);
+HXLINE(1341)			{
+HXLINE(1341)				int _g = 0;
+HXDLIN(1341)				while((_g < data->length)){
+HXLINE(1341)					 ::borogove::Chat chat = data->__get(_g).StaticCast<  ::borogove::Chat >();
+HXDLIN(1341)					_g = (_g + 1);
+HXLINE(1342)					updateChatBuffer->set(chat->chatId,chat);
             				}
             			}
-HXLINE(1331)			bool _hx_tmp;
-HXDLIN(1331)			if (!((lastCall->__get(0) < 0))) {
-HXLINE(1331)				_hx_tmp = ((now - lastCall->__get(0)) >= 500);
+HXLINE(1344)			bool _hx_tmp;
+HXDLIN(1344)			if (!((lastCall->__get(0) < 0))) {
+HXLINE(1344)				_hx_tmp = ((now - lastCall->__get(0)) >= 500);
             			}
             			else {
-HXLINE(1331)				_hx_tmp = true;
+HXLINE(1344)				_hx_tmp = true;
             			}
-HXDLIN(1331)			if (_hx_tmp) {
+HXDLIN(1344)			if (_hx_tmp) {
             				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::haxe::ds::StringMap,_e) HXARGC(0)
             				 ::Dynamic _hx_run(){
-            					HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1333_addChatsUpdatedListener)
-HXLINE(1333)					return _e->iterator();
+            					HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1346_addChatsUpdatedListener)
+HXLINE(1346)					return _e->iterator();
             				}
             				HX_END_LOCAL_FUNC0(return)
 
-HXLINE(1332)				lastCall[0] = now;
-HXLINE(1333)				 ::Dynamic handler1 = handler;
-HXDLIN(1333)				 ::haxe::ds::StringMap _e = updateChatBuffer;
-HXDLIN(1333)				handler1(::Lambda_obj::array( ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(1345)				lastCall[0] = now;
+HXLINE(1346)				 ::Dynamic handler1 = handler;
+HXDLIN(1346)				 ::haxe::ds::StringMap _e = updateChatBuffer;
+HXDLIN(1346)				handler1(::Lambda_obj::array( ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("iterator",ee,49,9a,93), ::Dynamic(new _hx_Closure_0(_e))))));
-HXLINE(1334)				updateChatTimer[0] = null();
-HXLINE(1335)				updateChatBuffer->clear();
+HXLINE(1347)				updateChatTimer[0] = null();
+HXLINE(1348)				updateChatBuffer->clear();
             			}
             			else {
             				HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_2, ::haxe::ds::StringMap,updateChatBuffer,::Array< ::Dynamic>,updateChatTimer, ::Dynamic,handler,::Array< Float >,lastCall) HXARGC(0)
             				void _hx_run(){
             					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::haxe::ds::StringMap,_e) HXARGC(0)
             					 ::Dynamic _hx_run(){
-            						HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1339_addChatsUpdatedListener)
-HXLINE(1339)						return _e->iterator();
+            						HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1352_addChatsUpdatedListener)
+HXLINE(1352)						return _e->iterator();
             					}
             					HX_END_LOCAL_FUNC0(return)
 
-            					HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1337_addChatsUpdatedListener)
-HXLINE(1338)					lastCall[0] = ( ::__time_stamp() * ( (Float)(1000) ));
-HXLINE(1339)					 ::Dynamic handler1 = handler;
-HXDLIN(1339)					 ::haxe::ds::StringMap _e = updateChatBuffer;
-HXDLIN(1339)					handler1(::Lambda_obj::array( ::Dynamic(::hx::Anon_obj::Create(1)
+            					HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1350_addChatsUpdatedListener)
+HXLINE(1351)					lastCall[0] = ( ::__time_stamp() * ( (Float)(1000) ));
+HXLINE(1352)					 ::Dynamic handler1 = handler;
+HXDLIN(1352)					 ::haxe::ds::StringMap _e = updateChatBuffer;
+HXDLIN(1352)					handler1(::Lambda_obj::array( ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("iterator",ee,49,9a,93), ::Dynamic(new _hx_Closure_1(_e))))));
-HXLINE(1340)					updateChatTimer[0] = null();
-HXLINE(1341)					updateChatBuffer->clear();
+HXLINE(1353)					updateChatTimer[0] = null();
+HXLINE(1354)					updateChatBuffer->clear();
             				}
             				HX_END_LOCAL_FUNC0((void))
 
-HXLINE(1337)				updateChatTimer[0] = ::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_2(updateChatBuffer,updateChatTimer,handler,lastCall)),500);
+HXLINE(1350)				updateChatTimer[0] = ::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_2(updateChatBuffer,updateChatTimer,handler,lastCall)),500);
             			}
-HXLINE(1344)			return ::borogove::EventResult_obj::EventHandled_dyn();
+HXLINE(1357)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1319_addChatsUpdatedListener)
-HXLINE(1320)		 ::haxe::ds::StringMap updateChatBuffer =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE(1321)		::Array< Float > lastCall = ::Array_obj< Float >::fromData( _hx_array_data_c0e6dc18_167,1);
-HXLINE(1322)		::Array< ::Dynamic> updateChatTimer = ::Array_obj< ::Dynamic>::__new(1)->init(0,null());
-HXLINE(1323)		return this->on(HX_("chats/update",3d,8e,1d,14), ::Dynamic(new _hx_Closure_3(updateChatBuffer,updateChatTimer,handler,lastCall)));
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1332_addChatsUpdatedListener)
+HXLINE(1333)		 ::haxe::ds::StringMap updateChatBuffer =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE(1334)		::Array< Float > lastCall = ::Array_obj< Float >::fromData( _hx_array_data_c0e6dc18_168,1);
+HXLINE(1335)		::Array< ::Dynamic> updateChatTimer = ::Array_obj< ::Dynamic>::__new(1)->init(0,null());
+HXLINE(1336)		return this->on(HX_("chats/update",3d,8e,1d,14), ::Dynamic(new _hx_Closure_3(updateChatBuffer,updateChatTimer,handler,lastCall)));
             	}
 
 
@@ -3885,66 +3921,66 @@ HX_DEFINE_DYNAMIC_FUNC1(Client_obj,addChatsUpdatedListener,return )
 int Client_obj::addChatsUpdatedListener__fromC(::cpp::Function< void  (void**,size_t,void*) > handler,void* handler__context){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (void** HX_COMMA size_t HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
             		void _hx_run(::Array< ::Dynamic> a0){
-            			HX_STACKFRAME(&_hx_pos_afe14372debdebc6_255_addChatsUpdatedListener__fromC)
-HXLINE( 226)			{
-HXLINE( 226)				int _g = 0;
-HXDLIN( 226)				while((_g < a0->length)){
-HXLINE( 226)					 ::borogove::Chat el = a0->__get(_g).StaticCast<  ::borogove::Chat >();
-HXDLIN( 226)					_g = (_g + 1);
-HXDLIN( 226)					{
-HXLINE( 226)						 ::Dynamic haxeObject = el;
-HXDLIN( 226)						void* ptr = haxeObject.mPtr;
-HXDLIN( 226)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 226)						{
-HXLINE( 226)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 226)							if (::hx::IsNull( store )) {
-HXLINE( 226)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            			HX_STACKFRAME(&_hx_pos_afe14372debdebc6_272_addChatsUpdatedListener__fromC)
+HXLINE( 243)			{
+HXLINE( 243)				int _g = 0;
+HXDLIN( 243)				while((_g < a0->length)){
+HXLINE( 243)					 ::borogove::Chat el = a0->__get(_g).StaticCast<  ::borogove::Chat >();
+HXDLIN( 243)					_g = (_g + 1);
+HXDLIN( 243)					{
+HXLINE( 243)						 ::Dynamic haxeObject = el;
+HXDLIN( 243)						void* ptr = haxeObject.mPtr;
+HXDLIN( 243)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 243)						{
+HXLINE( 243)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 243)							if (::hx::IsNull( store )) {
+HXLINE( 243)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
             									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             									->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 226)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN( 243)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             							}
             							else {
-HXLINE( 226)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE( 243)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             							}
             						}
             					}
             				}
             			}
-HXDLIN( 226)			void** ptr1 = (void**)a0->getBase();
-HXDLIN( 226)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 226)			{
-HXLINE( 226)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 226)				if (::hx::IsNull( store1 )) {
-HXLINE( 226)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 243)			void** ptr1 = (void**)a0->getBase();
+HXDLIN( 243)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 243)			{
+HXLINE( 243)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 243)				if (::hx::IsNull( store1 )) {
+HXLINE( 243)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),a0));
-HXDLIN( 226)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+HXDLIN( 243)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
             				}
             				else {
-HXLINE( 226)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE( 243)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXDLIN( 226)			int xl0 = a0->length;
-HXLINE( 244)			handler(ptr1,( (size_t)(xl0) ),handler__context);
+HXDLIN( 243)			int xl0 = a0->length;
+HXLINE( 261)			handler(ptr1,( (size_t)(xl0) ),handler__context);
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_315_addChatsUpdatedListener__fromC)
-HXDLIN( 315)		return this->addChatsUpdatedListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
+            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_339_addChatsUpdatedListener__fromC)
+HXDLIN( 339)		return this->addChatsUpdatedListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
             	}
 
 
 int Client_obj::addCallRingListener( ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,handler) HXARGC(1)
             		 ::borogove::EventResult _hx_run( ::Dynamic data){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1356_addCallRingListener)
-HXLINE(1357)			handler( ::Dynamic(data->__Field(HX_("session",56,17,98,93),::hx::paccDynamic)));
-HXLINE(1358)			return ::borogove::EventResult_obj::EventHandled_dyn();
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1369_addCallRingListener)
+HXLINE(1370)			handler( ::Dynamic(data->__Field(HX_("session",56,17,98,93),::hx::paccDynamic)));
+HXLINE(1371)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1356_addCallRingListener)
-HXDLIN(1356)		return this->on(HX_("call/ring",01,8e,91,54), ::Dynamic(new _hx_Closure_0(handler)));
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1369_addCallRingListener)
+HXDLIN(1369)		return this->on(HX_("call/ring",01,8e,91,54), ::Dynamic(new _hx_Closure_0(handler)));
             	}
 
 
@@ -3953,42 +3989,42 @@ HX_DEFINE_DYNAMIC_FUNC1(Client_obj,addCallRingListener,return )
 int Client_obj::addCallRingListener__fromC(::cpp::Function< void  (void*,void*) > handler,void* handler__context){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (void* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
             		void _hx_run(::Dynamic a0){
-            			HX_STACKFRAME(&_hx_pos_afe14372debdebc6_255_addCallRingListener__fromC)
-HXLINE( 234)			 ::Dynamic haxeObject = a0;
-HXDLIN( 234)			void* ptr = haxeObject.mPtr;
-HXDLIN( 234)			::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 234)			{
-HXLINE( 234)				 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 234)				if (::hx::IsNull( store )) {
-HXLINE( 234)					store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            			HX_STACKFRAME(&_hx_pos_afe14372debdebc6_272_addCallRingListener__fromC)
+HXLINE( 251)			 ::Dynamic haxeObject = a0;
+HXDLIN( 251)			void* ptr = haxeObject.mPtr;
+HXDLIN( 251)			::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 251)			{
+HXLINE( 251)				 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 251)				if (::hx::IsNull( store )) {
+HXLINE( 251)					store =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 234)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN( 251)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             				}
             				else {
-HXLINE( 234)					::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE( 251)					::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXLINE( 244)			handler(ptr,handler__context);
+HXLINE( 261)			handler(ptr,handler__context);
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_315_addCallRingListener__fromC)
-HXDLIN( 315)		return this->addCallRingListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
+            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_339_addCallRingListener__fromC)
+HXDLIN( 339)		return this->addCallRingListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
             	}
 
 
 int Client_obj::addCallRetractListener( ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,handler) HXARGC(1)
             		 ::borogove::EventResult _hx_run( ::Dynamic data){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1369_addCallRetractListener)
-HXLINE(1370)			handler( ::Dynamic(data->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)), ::Dynamic(data->__Field(HX_("sid",0e,9f,57,00),::hx::paccDynamic)));
-HXLINE(1371)			return ::borogove::EventResult_obj::EventHandled_dyn();
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1382_addCallRetractListener)
+HXLINE(1383)			handler( ::Dynamic(data->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)), ::Dynamic(data->__Field(HX_("sid",0e,9f,57,00),::hx::paccDynamic)));
+HXLINE(1384)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1369_addCallRetractListener)
-HXDLIN(1369)		return this->on(HX_("call/retract",50,bc,8d,db), ::Dynamic(new _hx_Closure_0(handler)));
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1382_addCallRetractListener)
+HXDLIN(1382)		return this->on(HX_("call/retract",50,bc,8d,db), ::Dynamic(new _hx_Closure_0(handler)));
             	}
 
 
@@ -3997,55 +4033,55 @@ HX_DEFINE_DYNAMIC_FUNC1(Client_obj,addCallRetractListener,return )
 int Client_obj::addCallRetractListener__fromC(::cpp::Function< void  (const char*,const char*,void*) > handler,void* handler__context){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (const char* HX_COMMA const char* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(2)
             		void _hx_run(::String a0,::String a1){
-            			HX_STACKFRAME(&_hx_pos_afe14372debdebc6_255_addCallRetractListener__fromC)
-HXLINE( 230)			const char* cStrPtr = a0.utf8_str();
-HXDLIN( 230)			::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
-HXDLIN( 230)			{
-HXLINE( 230)				 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 230)				if (::hx::IsNull( store )) {
-HXLINE( 230)					store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            			HX_STACKFRAME(&_hx_pos_afe14372debdebc6_272_addCallRetractListener__fromC)
+HXLINE( 247)			const char* cStrPtr = a0.utf8_str();
+HXDLIN( 247)			::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
+HXDLIN( 247)			{
+HXLINE( 247)				 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 247)				if (::hx::IsNull( store )) {
+HXLINE( 247)					store =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),a0));
-HXDLIN( 230)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN( 247)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             				}
             				else {
-HXLINE( 230)					::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE( 247)					::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXDLIN( 230)			const char* cStrPtr1 = a1.utf8_str();
-HXDLIN( 230)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(cStrPtr1);
-HXDLIN( 230)			{
-HXLINE( 230)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 230)				if (::hx::IsNull( store1 )) {
-HXLINE( 230)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 247)			const char* cStrPtr1 = a1.utf8_str();
+HXDLIN( 247)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(cStrPtr1);
+HXDLIN( 247)			{
+HXLINE( 247)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 247)				if (::hx::IsNull( store1 )) {
+HXLINE( 247)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),a1));
-HXDLIN( 230)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+HXDLIN( 247)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
             				}
             				else {
-HXLINE( 230)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE( 247)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXLINE( 244)			handler(cStrPtr,cStrPtr1,handler__context);
+HXLINE( 261)			handler(cStrPtr,cStrPtr1,handler__context);
             		}
             		HX_END_LOCAL_FUNC2((void))
 
-            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_315_addCallRetractListener__fromC)
-HXDLIN( 315)		return this->addCallRetractListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
+            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_339_addCallRetractListener__fromC)
+HXDLIN( 339)		return this->addCallRetractListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
             	}
 
 
 int Client_obj::addCallRingingListener( ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,handler) HXARGC(1)
             		 ::borogove::EventResult _hx_run(::Dynamic data){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1382_addCallRingingListener)
-HXLINE(1383)			handler(data);
-HXLINE(1384)			return ::borogove::EventResult_obj::EventHandled_dyn();
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1395_addCallRingingListener)
+HXLINE(1396)			handler(data);
+HXLINE(1397)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1382_addCallRingingListener)
-HXDLIN(1382)		return this->on(HX_("call/ringing",81,75,54,f9), ::Dynamic(new _hx_Closure_0(handler)));
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1395_addCallRingingListener)
+HXDLIN(1395)		return this->on(HX_("call/ringing",81,75,54,f9), ::Dynamic(new _hx_Closure_0(handler)));
             	}
 
 
@@ -4054,42 +4090,42 @@ HX_DEFINE_DYNAMIC_FUNC1(Client_obj,addCallRingingListener,return )
 int Client_obj::addCallRingingListener__fromC(::cpp::Function< void  (void*,void*) > handler,void* handler__context){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (void* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
             		void _hx_run(::Dynamic a0){
-            			HX_STACKFRAME(&_hx_pos_afe14372debdebc6_255_addCallRingingListener__fromC)
-HXLINE( 234)			 ::Dynamic haxeObject = a0;
-HXDLIN( 234)			void* ptr = haxeObject.mPtr;
-HXDLIN( 234)			::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 234)			{
-HXLINE( 234)				 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 234)				if (::hx::IsNull( store )) {
-HXLINE( 234)					store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            			HX_STACKFRAME(&_hx_pos_afe14372debdebc6_272_addCallRingingListener__fromC)
+HXLINE( 251)			 ::Dynamic haxeObject = a0;
+HXDLIN( 251)			void* ptr = haxeObject.mPtr;
+HXDLIN( 251)			::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 251)			{
+HXLINE( 251)				 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 251)				if (::hx::IsNull( store )) {
+HXLINE( 251)					store =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 234)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN( 251)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             				}
             				else {
-HXLINE( 234)					::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE( 251)					::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXLINE( 244)			handler(ptr,handler__context);
+HXLINE( 261)			handler(ptr,handler__context);
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_315_addCallRingingListener__fromC)
-HXDLIN( 315)		return this->addCallRingingListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
+            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_339_addCallRingingListener__fromC)
+HXDLIN( 339)		return this->addCallRingingListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
             	}
 
 
 int Client_obj::addCallUpdateStatusListener( ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,handler) HXARGC(1)
             		 ::borogove::EventResult _hx_run( ::Dynamic data){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1395_addCallUpdateStatusListener)
-HXLINE(1396)			handler( ::Dynamic(data->__Field(HX_("session",56,17,98,93),::hx::paccDynamic)));
-HXLINE(1397)			return ::borogove::EventResult_obj::EventHandled_dyn();
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1408_addCallUpdateStatusListener)
+HXLINE(1409)			handler( ::Dynamic(data->__Field(HX_("session",56,17,98,93),::hx::paccDynamic)));
+HXLINE(1410)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1395_addCallUpdateStatusListener)
-HXDLIN(1395)		return this->on(HX_("call/updateStatus",6c,f5,e6,ec), ::Dynamic(new _hx_Closure_0(handler)));
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1408_addCallUpdateStatusListener)
+HXDLIN(1408)		return this->on(HX_("call/updateStatus",6c,f5,e6,ec), ::Dynamic(new _hx_Closure_0(handler)));
             	}
 
 
@@ -4098,42 +4134,42 @@ HX_DEFINE_DYNAMIC_FUNC1(Client_obj,addCallUpdateStatusListener,return )
 int Client_obj::addCallUpdateStatusListener__fromC(::cpp::Function< void  (void*,void*) > handler,void* handler__context){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (void* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
             		void _hx_run( ::borogove::calls::InitiatedSession a0){
-            			HX_STACKFRAME(&_hx_pos_afe14372debdebc6_255_addCallUpdateStatusListener__fromC)
-HXLINE( 234)			 ::Dynamic haxeObject = a0;
-HXDLIN( 234)			void* ptr = haxeObject.mPtr;
-HXDLIN( 234)			::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 234)			{
-HXLINE( 234)				 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 234)				if (::hx::IsNull( store )) {
-HXLINE( 234)					store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            			HX_STACKFRAME(&_hx_pos_afe14372debdebc6_272_addCallUpdateStatusListener__fromC)
+HXLINE( 251)			 ::Dynamic haxeObject = a0;
+HXDLIN( 251)			void* ptr = haxeObject.mPtr;
+HXDLIN( 251)			::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 251)			{
+HXLINE( 251)				 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 251)				if (::hx::IsNull( store )) {
+HXLINE( 251)					store =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 234)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN( 251)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             				}
             				else {
-HXLINE( 234)					::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE( 251)					::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXLINE( 244)			handler(ptr,handler__context);
+HXLINE( 261)			handler(ptr,handler__context);
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_315_addCallUpdateStatusListener__fromC)
-HXDLIN( 315)		return this->addCallUpdateStatusListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
+            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_339_addCallUpdateStatusListener__fromC)
+HXDLIN( 339)		return this->addCallUpdateStatusListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
             	}
 
 
 int Client_obj::addCallMediaListener( ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,handler) HXARGC(1)
             		 ::borogove::EventResult _hx_run( ::Dynamic data){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1410_addCallMediaListener)
-HXLINE(1411)			handler( ::Dynamic(data->__Field(HX_("session",56,17,98,93),::hx::paccDynamic)), ::Dynamic(data->__Field(HX_("audio",d6,78,80,27),::hx::paccDynamic)), ::Dynamic(data->__Field(HX_("video",7b,14,fc,36),::hx::paccDynamic)));
-HXLINE(1412)			return ::borogove::EventResult_obj::EventHandled_dyn();
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1423_addCallMediaListener)
+HXLINE(1424)			handler( ::Dynamic(data->__Field(HX_("session",56,17,98,93),::hx::paccDynamic)), ::Dynamic(data->__Field(HX_("audio",d6,78,80,27),::hx::paccDynamic)), ::Dynamic(data->__Field(HX_("video",7b,14,fc,36),::hx::paccDynamic)));
+HXLINE(1425)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1410_addCallMediaListener)
-HXDLIN(1410)		return this->on(HX_("call/media",73,5d,1d,c7), ::Dynamic(new _hx_Closure_0(handler)));
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1423_addCallMediaListener)
+HXDLIN(1423)		return this->on(HX_("call/media",73,5d,1d,c7), ::Dynamic(new _hx_Closure_0(handler)));
             	}
 
 
@@ -4142,42 +4178,42 @@ HX_DEFINE_DYNAMIC_FUNC1(Client_obj,addCallMediaListener,return )
 int Client_obj::addCallMediaListener__fromC(::cpp::Function< void  (void*,bool,bool,void*) > handler,void* handler__context){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (void* HX_COMMA bool HX_COMMA bool HX_COMMA void*) >,handler,void*,handler__context) HXARGC(3)
             		void _hx_run( ::borogove::calls::InitiatedSession a0,bool a1,bool a2){
-            			HX_STACKFRAME(&_hx_pos_afe14372debdebc6_255_addCallMediaListener__fromC)
-HXLINE( 234)			 ::Dynamic haxeObject = a0;
-HXDLIN( 234)			void* ptr = haxeObject.mPtr;
-HXDLIN( 234)			::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 234)			{
-HXLINE( 234)				 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 234)				if (::hx::IsNull( store )) {
-HXLINE( 234)					store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            			HX_STACKFRAME(&_hx_pos_afe14372debdebc6_272_addCallMediaListener__fromC)
+HXLINE( 251)			 ::Dynamic haxeObject = a0;
+HXDLIN( 251)			void* ptr = haxeObject.mPtr;
+HXDLIN( 251)			::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 251)			{
+HXLINE( 251)				 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 251)				if (::hx::IsNull( store )) {
+HXLINE( 251)					store =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 234)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN( 251)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             				}
             				else {
-HXLINE( 234)					::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE( 251)					::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXLINE( 244)			handler(ptr,a1,a2,handler__context);
+HXLINE( 261)			handler(ptr,a1,a2,handler__context);
             		}
             		HX_END_LOCAL_FUNC3((void))
 
-            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_315_addCallMediaListener__fromC)
-HXDLIN( 315)		return this->addCallMediaListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
+            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_339_addCallMediaListener__fromC)
+HXDLIN( 339)		return this->addCallMediaListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
             	}
 
 
 int Client_obj::addCallTrackListener( ::Dynamic handler){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,handler) HXARGC(1)
             		 ::borogove::EventResult _hx_run( ::Dynamic data){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1424_addCallTrackListener)
-HXLINE(1425)			handler( ::Dynamic(data->__Field(HX_("session",56,17,98,93),::hx::paccDynamic)), ::Dynamic(data->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)), ::Dynamic(data->__Field(HX_("streams",f3,db,44,f6),::hx::paccDynamic)));
-HXLINE(1426)			return ::borogove::EventResult_obj::EventHandled_dyn();
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1437_addCallTrackListener)
+HXLINE(1438)			handler( ::Dynamic(data->__Field(HX_("session",56,17,98,93),::hx::paccDynamic)), ::Dynamic(data->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)), ::Dynamic(data->__Field(HX_("streams",f3,db,44,f6),::hx::paccDynamic)));
+HXLINE(1439)			return ::borogove::EventResult_obj::EventHandled_dyn();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1424_addCallTrackListener)
-HXDLIN(1424)		return this->on(HX_("call/track",1a,e7,80,d7), ::Dynamic(new _hx_Closure_0(handler)));
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1437_addCallTrackListener)
+HXDLIN(1437)		return this->on(HX_("call/track",1a,e7,80,d7), ::Dynamic(new _hx_Closure_0(handler)));
             	}
 
 
@@ -4186,93 +4222,93 @@ HX_DEFINE_DYNAMIC_FUNC1(Client_obj,addCallTrackListener,return )
 int Client_obj::addCallTrackListener__fromC(::cpp::Function< void  (void*,void*,void**,size_t,void*) > handler,void* handler__context){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (void* HX_COMMA void* HX_COMMA void** HX_COMMA size_t HX_COMMA void*) >,handler,void*,handler__context) HXARGC(3)
             		void _hx_run( ::borogove::calls::InitiatedSession a0, ::borogove::calls::MediaStreamTrack a1,::Array< ::Dynamic> a2){
-            			HX_STACKFRAME(&_hx_pos_afe14372debdebc6_255_addCallTrackListener__fromC)
-HXLINE( 234)			 ::Dynamic haxeObject = a0;
-HXDLIN( 234)			void* ptr = haxeObject.mPtr;
-HXDLIN( 234)			::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 234)			{
-HXLINE( 234)				 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 234)				if (::hx::IsNull( store )) {
-HXLINE( 234)					store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            			HX_STACKFRAME(&_hx_pos_afe14372debdebc6_272_addCallTrackListener__fromC)
+HXLINE( 251)			 ::Dynamic haxeObject = a0;
+HXDLIN( 251)			void* ptr = haxeObject.mPtr;
+HXDLIN( 251)			::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 251)			{
+HXLINE( 251)				 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 251)				if (::hx::IsNull( store )) {
+HXLINE( 251)					store =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 234)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN( 251)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             				}
             				else {
-HXLINE( 234)					::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE( 251)					::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXDLIN( 234)			void* x0 = ptr;
-HXDLIN( 234)			 ::Dynamic haxeObject1 = a1;
-HXDLIN( 234)			void* ptr1 = haxeObject1.mPtr;
-HXDLIN( 234)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 234)			{
-HXLINE( 234)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 234)				if (::hx::IsNull( store1 )) {
-HXLINE( 234)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 251)			void* x0 = ptr;
+HXDLIN( 251)			 ::Dynamic haxeObject1 = a1;
+HXDLIN( 251)			void* ptr1 = haxeObject1.mPtr;
+HXDLIN( 251)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 251)			{
+HXLINE( 251)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 251)				if (::hx::IsNull( store1 )) {
+HXLINE( 251)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),haxeObject1));
-HXDLIN( 234)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+HXDLIN( 251)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
             				}
             				else {
-HXLINE( 234)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
-            				}
-            			}
-HXDLIN( 234)			void* x1 = ptr1;
-HXLINE( 226)			{
-HXLINE( 226)				int _g = 0;
-HXDLIN( 226)				while((_g < a2->length)){
-HXLINE( 226)					 ::borogove::calls::MediaStream el = a2->__get(_g).StaticCast<  ::borogove::calls::MediaStream >();
-HXDLIN( 226)					_g = (_g + 1);
-HXDLIN( 226)					{
-HXLINE( 226)						 ::Dynamic haxeObject2 = el;
-HXDLIN( 226)						void* ptr2 = haxeObject2.mPtr;
-HXDLIN( 226)						::cpp::Int64 ptrInt642 = reinterpret_cast<int64_t>(ptr2);
-HXDLIN( 226)						{
-HXLINE( 226)							 ::Dynamic store2 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt642);
-HXDLIN( 226)							if (::hx::IsNull( store2 )) {
-HXLINE( 226)								store2 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 251)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+            				}
+            			}
+HXDLIN( 251)			void* x1 = ptr1;
+HXLINE( 243)			{
+HXLINE( 243)				int _g = 0;
+HXDLIN( 243)				while((_g < a2->length)){
+HXLINE( 243)					 ::borogove::calls::MediaStream el = a2->__get(_g).StaticCast<  ::borogove::calls::MediaStream >();
+HXDLIN( 243)					_g = (_g + 1);
+HXDLIN( 243)					{
+HXLINE( 243)						 ::Dynamic haxeObject2 = el;
+HXDLIN( 243)						void* ptr2 = haxeObject2.mPtr;
+HXDLIN( 243)						::cpp::Int64 ptrInt642 = reinterpret_cast<int64_t>(ptr2);
+HXDLIN( 243)						{
+HXLINE( 243)							 ::Dynamic store2 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt642);
+HXDLIN( 243)							if (::hx::IsNull( store2 )) {
+HXLINE( 243)								store2 =  ::Dynamic(::hx::Anon_obj::Create(2)
             									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             									->setFixed(1,HX_("value",71,7f,b8,31),haxeObject2));
-HXDLIN( 226)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt642,store2);
+HXDLIN( 243)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt642,store2);
             							}
             							else {
-HXLINE( 226)								::hx::FieldRef((store2).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE( 243)								::hx::FieldRef((store2).mPtr,HX_("refCount",7c,2e,66,86))++;
             							}
             						}
             					}
             				}
             			}
-HXDLIN( 226)			void** ptr3 = (void**)a2->getBase();
-HXDLIN( 226)			::cpp::Int64 ptrInt643 = reinterpret_cast<int64_t>(ptr3);
-HXDLIN( 226)			{
-HXLINE( 226)				 ::Dynamic store3 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt643);
-HXDLIN( 226)				if (::hx::IsNull( store3 )) {
-HXLINE( 226)					store3 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 243)			void** ptr3 = (void**)a2->getBase();
+HXDLIN( 243)			::cpp::Int64 ptrInt643 = reinterpret_cast<int64_t>(ptr3);
+HXDLIN( 243)			{
+HXLINE( 243)				 ::Dynamic store3 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt643);
+HXDLIN( 243)				if (::hx::IsNull( store3 )) {
+HXLINE( 243)					store3 =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),a2));
-HXDLIN( 226)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt643,store3);
+HXDLIN( 243)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt643,store3);
             				}
             				else {
-HXLINE( 226)					::hx::FieldRef((store3).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE( 243)					::hx::FieldRef((store3).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXDLIN( 226)			int xl2 = a2->length;
-HXLINE( 244)			handler(x0,x1,ptr3,( (size_t)(xl2) ),handler__context);
+HXDLIN( 243)			int xl2 = a2->length;
+HXLINE( 261)			handler(x0,x1,ptr3,( (size_t)(xl2) ),handler__context);
             		}
             		HX_END_LOCAL_FUNC3((void))
 
-            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_315_addCallTrackListener__fromC)
-HXDLIN( 315)		return this->addCallTrackListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
+            	HX_STACKFRAME(&_hx_pos_afe14372debdebc6_339_addCallTrackListener__fromC)
+HXDLIN( 339)		return this->addCallTrackListener( ::Dynamic(new _hx_Closure_0(handler,handler__context)));
             	}
 
 
 void Client_obj::setInForeground(){
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1434_setInForeground)
-HXLINE(1435)		if (!(this->stream->csi)) {
-HXLINE(1435)			return;
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1447_setInForeground)
+HXLINE(1448)		if (!(this->stream->csi)) {
+HXLINE(1448)			return;
             		}
-HXLINE(1436)		this->stream->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("active",c6,41,46,16), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(1449)		this->stream->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("active",c6,41,46,16), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:csi:0",13,f1,6d,24)))));
             	}
 
@@ -4280,11 +4316,11 @@ HXLINE(1436)		this->stream->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX
 HX_DEFINE_DYNAMIC_FUNC0(Client_obj,setInForeground,(void))
 
 void Client_obj::setNotInForeground(){
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1442_setNotInForeground)
-HXLINE(1443)		if (!(this->stream->csi)) {
-HXLINE(1443)			return;
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1455_setNotInForeground)
+HXLINE(1456)		if (!(this->stream->csi)) {
+HXLINE(1456)			return;
             		}
-HXLINE(1444)		this->stream->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("inactive",6b,17,30,6a), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(1457)		this->stream->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("inactive",6b,17,30,6a), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:csi:0",13,f1,6d,24)))));
             	}
 
@@ -4294,33 +4330,33 @@ HX_DEFINE_DYNAMIC_FUNC0(Client_obj,setNotInForeground,(void))
 ::Dynamic Client_obj::fetchMediaByHash(::Array< ::Dynamic> hashes,::Array< ::Dynamic> counterparts){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		 ::Dynamic _hx_run( ::Dynamic x){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1452_fetchMediaByHash)
-HXLINE(1452)			return x;
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1465_fetchMediaByHash)
+HXLINE(1465)			return x;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_1, ::borogove::Client,_gthis,::Array< ::Dynamic>,hashes,::Array< ::Dynamic>,counterparts) HXARGC(1)
             		::Dynamic _hx_run( ::Dynamic _){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1452_fetchMediaByHash)
-HXLINE(1452)			 ::borogove::Client _gthis1 = _gthis;
-HXDLIN(1452)			::Array< ::Dynamic> hashes1 = hashes;
-HXDLIN(1452)			return _gthis1->fetchMediaByHash(hashes1,counterparts->slice(1,null()));
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1465_fetchMediaByHash)
+HXLINE(1465)			 ::borogove::Client _gthis1 = _gthis;
+HXDLIN(1465)			::Array< ::Dynamic> hashes1 = hashes;
+HXDLIN(1465)			return _gthis1->fetchMediaByHash(hashes1,counterparts->slice(1,null()));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1448_fetchMediaByHash)
-HXDLIN(1448)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1451)		bool _hx_tmp;
-HXDLIN(1451)		if ((hashes->length >= 1)) {
-HXLINE(1451)			_hx_tmp = (counterparts->length < 1);
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1461_fetchMediaByHash)
+HXDLIN(1461)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1464)		bool _hx_tmp;
+HXDLIN(1464)		if ((hashes->length >= 1)) {
+HXLINE(1464)			_hx_tmp = (counterparts->length < 1);
             		}
             		else {
-HXLINE(1451)			_hx_tmp = true;
+HXLINE(1464)			_hx_tmp = true;
             		}
-HXDLIN(1451)		if (_hx_tmp) {
-HXLINE(1451)			return ::thenshim::_Promise::Promise_Impl__obj::reject(HX_("no counterparts left",64,15,a4,38));
+HXDLIN(1464)		if (_hx_tmp) {
+HXLINE(1464)			return ::thenshim::_Promise::Promise_Impl__obj::reject(HX_("no counterparts left",64,15,a4,38));
             		}
-HXLINE(1452)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->fetchMediaByHashOneCounterpart(hashes,counterparts->__get(0).StaticCast<  ::borogove::JID >()), ::Dynamic(new _hx_Closure_0()), ::Dynamic(new _hx_Closure_1(_gthis,hashes,counterparts)));
+HXLINE(1465)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->fetchMediaByHashOneCounterpart(hashes,counterparts->__get(0).StaticCast<  ::borogove::JID >()), ::Dynamic(new _hx_Closure_0()), ::Dynamic(new _hx_Closure_1(_gthis,hashes,counterparts)));
             	}
 
 
@@ -4333,62 +4369,62 @@ HX_DEFINE_DYNAMIC_FUNC2(Client_obj,fetchMediaByHash,return )
             			void _hx_run( ::Dynamic resolve, ::Dynamic reject){
             				HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_1, ::borogove::Client,_gthis, ::Dynamic,resolve, ::Dynamic,reject, ::borogove::queries::BoB,q1) HXARGC(0)
             				void _hx_run(){
-            					HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1463_fetchMediaByHashOneCounterpart)
-HXLINE(1464)					 ::Dynamic r = q1->getResult();
-HXLINE(1465)					if (::hx::IsNull( r )) {
-HXLINE(1466)						reject(HX_("bad or no result from BoB query",ad,e0,04,ee));
+            					HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1476_fetchMediaByHashOneCounterpart)
+HXLINE(1477)					 ::Dynamic r = q1->getResult();
+HXLINE(1478)					if (::hx::IsNull( r )) {
+HXLINE(1479)						reject(HX_("bad or no result from BoB query",ad,e0,04,ee));
             					}
             					else {
             						HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,resolve) HXARGC(1)
             						void _hx_run(bool _){
-            							HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1468_fetchMediaByHashOneCounterpart)
-HXLINE(1468)							resolve(null());
+            							HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1481_fetchMediaByHashOneCounterpart)
+HXLINE(1481)							resolve(null());
             						}
             						HX_END_LOCAL_FUNC1((void))
 
-HXLINE(1468)						::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeMedia(_gthis->persistence, ::Dynamic(r->__Field(HX_("type",ba,f2,08,4d),::hx::paccDynamic)),( ( ::haxe::io::Bytes)(r->__Field(HX_("bytes",6b,08,98,bd),::hx::paccDynamic)) )->b), ::Dynamic(new _hx_Closure_0(resolve)),null());
+HXLINE(1481)						::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeMedia(_gthis->persistence, ::Dynamic(r->__Field(HX_("type",ba,f2,08,4d),::hx::paccDynamic)),( ( ::haxe::io::Bytes)(r->__Field(HX_("bytes",6b,08,98,bd),::hx::paccDynamic)) )->b), ::Dynamic(new _hx_Closure_0(resolve)),null());
             					}
             				}
             				HX_END_LOCAL_FUNC0((void))
 
-            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1461_fetchMediaByHashOneCounterpart)
-HXLINE(1462)				::String q = counterpart->asString();
-HXDLIN(1462)				 ::borogove::queries::BoB q1 = ::borogove::queries::BoB_obj::forHash(q,hashes->__get(0).StaticCast<  ::borogove::Hash >());
-HXLINE(1463)				q1->onFinished( ::Dynamic(new _hx_Closure_1(_gthis,resolve,reject,q1)));
-HXLINE(1471)				_gthis->sendQuery(q1);
+            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1474_fetchMediaByHashOneCounterpart)
+HXLINE(1475)				::String q = counterpart->asString();
+HXDLIN(1475)				 ::borogove::queries::BoB q1 = ::borogove::queries::BoB_obj::forHash(q,hashes->__get(0).StaticCast<  ::borogove::Hash >());
+HXLINE(1476)				q1->onFinished( ::Dynamic(new _hx_Closure_1(_gthis,resolve,reject,q1)));
+HXLINE(1484)				_gthis->sendQueryLazy(q1);
             			}
             			HX_END_LOCAL_FUNC2((void))
 
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_3) HXARGC(1)
             			 ::Dynamic _hx_run( ::Dynamic x){
-            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1472_fetchMediaByHashOneCounterpart)
-HXLINE(1472)				return x;
+            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1485_fetchMediaByHashOneCounterpart)
+HXLINE(1485)				return x;
             			}
             			HX_END_LOCAL_FUNC1(return)
 
             			HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_4, ::borogove::JID,counterpart, ::borogove::Client,_gthis,::Array< ::Dynamic>,hashes) HXARGC(1)
             			::Dynamic _hx_run( ::Dynamic _){
-            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1472_fetchMediaByHashOneCounterpart)
-HXLINE(1472)				 ::borogove::Client _gthis1 = _gthis;
-HXDLIN(1472)				::Array< ::Dynamic> _hx_tmp = hashes->slice(1,null());
-HXDLIN(1472)				return _gthis1->fetchMediaByHashOneCounterpart(_hx_tmp,counterpart);
+            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1485_fetchMediaByHashOneCounterpart)
+HXLINE(1485)				 ::borogove::Client _gthis1 = _gthis;
+HXDLIN(1485)				::Array< ::Dynamic> _hx_tmp = hashes->slice(1,null());
+HXDLIN(1485)				return _gthis1->fetchMediaByHashOneCounterpart(_hx_tmp,counterpart);
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1458_fetchMediaByHashOneCounterpart)
-HXLINE(1459)			if (has) {
-HXLINE(1459)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1471_fetchMediaByHashOneCounterpart)
+HXLINE(1472)			if (has) {
+HXLINE(1472)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             			}
-HXLINE(1461)			return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_2(counterpart,_gthis,hashes))), ::Dynamic(new _hx_Closure_3()), ::Dynamic(new _hx_Closure_4(counterpart,_gthis,hashes)));
+HXLINE(1474)			return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_2(counterpart,_gthis,hashes))), ::Dynamic(new _hx_Closure_3()), ::Dynamic(new _hx_Closure_4(counterpart,_gthis,hashes)));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1455_fetchMediaByHashOneCounterpart)
-HXDLIN(1455)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1456)		if ((hashes->length < 1)) {
-HXLINE(1456)			return ::thenshim::_Promise::Promise_Impl__obj::reject(HX_("no hashes left",8c,68,e6,69));
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1468_fetchMediaByHashOneCounterpart)
+HXDLIN(1468)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1469)		if ((hashes->length < 1)) {
+HXLINE(1469)			return ::thenshim::_Promise::Promise_Impl__obj::reject(HX_("no hashes left",8c,68,e6,69));
             		}
-HXLINE(1458)		return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::hasMedia(this->persistence,hashes->__get(0).StaticCast<  ::borogove::Hash >()->algorithm,hashes->__get(0).StaticCast<  ::borogove::Hash >()->hash), ::Dynamic(new _hx_Closure_5(counterpart,_gthis,hashes)),null());
+HXLINE(1471)		return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::hasMedia(this->persistence,hashes->__get(0).StaticCast<  ::borogove::Hash >()->algorithm,hashes->__get(0).StaticCast<  ::borogove::Hash >()->hash), ::Dynamic(new _hx_Closure_5(counterpart,_gthis,hashes)),null());
             	}
 
 
@@ -4397,50 +4433,50 @@ HX_DEFINE_DYNAMIC_FUNC2(Client_obj,fetchMediaByHashOneCounterpart,return )
 void Client_obj::chatActivity( ::borogove::Chat chat,::hx::Null< bool >  __o_trigger){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::borogove::Chat,chat) HXARGC(1)
             		bool _hx_run( ::borogove::Chat c){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1484_chatActivity)
-HXLINE(1484)			return (c->chatId == chat->chatId);
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1497_chatActivity)
+HXLINE(1497)			return (c->chatId == chat->chatId);
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		bool trigger = __o_trigger.Default(true);
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1477_chatActivity)
-HXLINE(1478)		if (chat->isBlocked) {
-HXLINE(1478)			return;
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1490_chatActivity)
+HXLINE(1491)		if (chat->isBlocked) {
+HXLINE(1491)			return;
             		}
-HXLINE(1479)		if ((chat->uiState == 2)) {
-HXLINE(1480)			chat->uiState = 1;
-HXLINE(1481)			::Dynamic _hx_tmp = this->persistence;
-HXDLIN(1481)			::String _hx_tmp1 = this->accountId();
-HXDLIN(1481)			::borogove::Persistence_obj::storeChats(_hx_tmp,_hx_tmp1,::Array_obj< ::Dynamic>::__new(1)->init(0,chat));
+HXLINE(1492)		if ((chat->uiState == 2)) {
+HXLINE(1493)			chat->uiState = 1;
+HXLINE(1494)			::Dynamic _hx_tmp = this->persistence;
+HXDLIN(1494)			::String _hx_tmp1 = this->accountId();
+HXDLIN(1494)			::borogove::Persistence_obj::storeChats(_hx_tmp,_hx_tmp1,::Array_obj< ::Dynamic>::__new(1)->init(0,chat));
             		}
-HXLINE(1483)		int pinnedCount;
-HXDLIN(1483)		if ((chat->uiState == 0)) {
-HXLINE(1483)			pinnedCount = 0;
+HXLINE(1496)		int pinnedCount;
+HXDLIN(1496)		if ((chat->uiState == 0)) {
+HXLINE(1496)			pinnedCount = 0;
             		}
             		else {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(2)
             			int _hx_run( ::borogove::Chat item,int result){
-            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1483_chatActivity)
-HXLINE(1483)				int pinnedCount;
-HXDLIN(1483)				if ((item->uiState == 0)) {
-HXLINE(1483)					pinnedCount = 1;
+            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1496_chatActivity)
+HXLINE(1496)				int pinnedCount;
+HXDLIN(1496)				if ((item->uiState == 0)) {
+HXLINE(1496)					pinnedCount = 1;
             				}
             				else {
-HXLINE(1483)					pinnedCount = 0;
+HXLINE(1496)					pinnedCount = 0;
             				}
-HXDLIN(1483)				return (result + pinnedCount);
+HXDLIN(1496)				return (result + pinnedCount);
             			}
             			HX_END_LOCAL_FUNC2(return)
 
-HXLINE(1483)			pinnedCount = ( (int)(::Lambda_obj::fold(this->chats, ::Dynamic(new _hx_Closure_0()),0)) );
+HXLINE(1496)			pinnedCount = ( (int)(::Lambda_obj::fold(this->chats, ::Dynamic(new _hx_Closure_0()),0)) );
             		}
-HXLINE(1484)		int idx = ::Lambda_obj::findIndex(this->chats, ::Dynamic(new _hx_Closure_1(chat)));
-HXLINE(1485)		if ((idx > pinnedCount)) {
-HXLINE(1486)			this->chats->removeRange(idx,1);
-HXLINE(1487)			this->chats->insert(pinnedCount,chat);
+HXLINE(1497)		int idx = ::Lambda_obj::findIndex(this->chats, ::Dynamic(new _hx_Closure_1(chat)));
+HXLINE(1498)		if ((idx > pinnedCount)) {
+HXLINE(1499)			this->chats->removeRange(idx,1);
+HXLINE(1500)			this->chats->insert(pinnedCount,chat);
             		}
-HXLINE(1489)		if (trigger) {
-HXLINE(1489)			this->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat));
+HXLINE(1502)		if (trigger) {
+HXLINE(1502)			this->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat));
             		}
             	}
 
@@ -4450,161 +4486,196 @@ HX_DEFINE_DYNAMIC_FUNC2(Client_obj,chatActivity,(void))
 void Client_obj::sortChats(){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(2)
             		int _hx_run( ::borogove::Chat a, ::borogove::Chat b){
-            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1495_sortChats)
-HXLINE(1495)			if ((a->uiState == b->uiState)) {
-HXLINE(1496)				 ::borogove::ChatMessage tmp = a->lastMessage;
-HXDLIN(1496)				::String tmp1;
-HXDLIN(1496)				if (::hx::IsNotNull( tmp )) {
-HXLINE(1496)					tmp1 = tmp->timestamp;
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1508_sortChats)
+HXLINE(1508)			if ((a->uiState == b->uiState)) {
+HXLINE(1509)				 ::borogove::ChatMessage tmp = a->lastMessage;
+HXDLIN(1509)				::String tmp1;
+HXDLIN(1509)				if (::hx::IsNotNull( tmp )) {
+HXLINE(1509)					tmp1 = tmp->timestamp;
             				}
             				else {
-HXLINE(1496)					tmp1 = null();
+HXLINE(1509)					tmp1 = null();
             				}
-HXDLIN(1496)				::String tcompare;
-HXDLIN(1496)				if (::hx::IsNotNull( tmp1 )) {
-HXLINE(1496)					tcompare = tmp1;
+HXDLIN(1509)				::String tcompare;
+HXDLIN(1509)				if (::hx::IsNotNull( tmp1 )) {
+HXLINE(1509)					tcompare = tmp1;
             				}
             				else {
-HXLINE(1496)					tcompare = HX_("0",30,00,00,00);
+HXLINE(1509)					tcompare = HX_("0",30,00,00,00);
             				}
-HXDLIN(1496)				 ::borogove::ChatMessage tmp2 = b->lastMessage;
-HXDLIN(1496)				::String tmp3;
-HXDLIN(1496)				if (::hx::IsNotNull( tmp2 )) {
-HXLINE(1496)					tmp3 = tmp2->timestamp;
+HXDLIN(1509)				 ::borogove::ChatMessage tmp2 = b->lastMessage;
+HXDLIN(1509)				::String tmp3;
+HXDLIN(1509)				if (::hx::IsNotNull( tmp2 )) {
+HXLINE(1509)					tmp3 = tmp2->timestamp;
             				}
             				else {
-HXLINE(1496)					tmp3 = null();
+HXLINE(1509)					tmp3 = null();
             				}
-HXDLIN(1496)				::String tcompare1;
-HXDLIN(1496)				if (::hx::IsNotNull( tmp3 )) {
-HXLINE(1496)					tcompare1 = tmp3;
+HXDLIN(1509)				::String tcompare1;
+HXDLIN(1509)				if (::hx::IsNotNull( tmp3 )) {
+HXLINE(1509)					tcompare1 = tmp3;
             				}
             				else {
-HXLINE(1496)					tcompare1 = HX_("0",30,00,00,00);
+HXLINE(1509)					tcompare1 = HX_("0",30,00,00,00);
             				}
-HXDLIN(1496)				int tcompare2 = -(::Reflect_obj::compare(tcompare,tcompare1));
-HXLINE(1497)				if ((tcompare2 != 0)) {
-HXLINE(1497)					return tcompare2;
+HXDLIN(1509)				int tcompare2 = -(::Reflect_obj::compare(tcompare,tcompare1));
+HXLINE(1510)				if ((tcompare2 != 0)) {
+HXLINE(1510)					return tcompare2;
             				}
-HXLINE(1498)				::String _hx_tmp = a->getDisplayName();
-HXDLIN(1498)				return ::Reflect_obj::compare(_hx_tmp,b->getDisplayName());
+HXLINE(1511)				::String _hx_tmp = a->getDisplayName();
+HXDLIN(1511)				return ::Reflect_obj::compare(_hx_tmp,b->getDisplayName());
             			}
             			else {
-HXLINE(1500)				return ::Reflect_obj::compare(a->uiState,b->uiState);
+HXLINE(1513)				return ::Reflect_obj::compare(a->uiState,b->uiState);
             			}
-HXLINE(1495)			return 0;
+HXLINE(1508)			return 0;
             		}
             		HX_END_LOCAL_FUNC2(return)
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1494_sortChats)
-HXDLIN(1494)		this->chats->sort( ::Dynamic(new _hx_Closure_0()));
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1507_sortChats)
+HXDLIN(1507)		this->chats->sort( ::Dynamic(new _hx_Closure_0()));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Client_obj,sortChats,(void))
 
 ::Dynamic Client_obj::storeMessages(::Array< ::Dynamic> messages){
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1507_storeMessages)
-HXDLIN(1507)		::Dynamic _hx_tmp = this->persistence;
-HXDLIN(1507)		return ::borogove::Persistence_obj::storeMessages(_hx_tmp,this->accountId(),messages);
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1520_storeMessages)
+HXDLIN(1520)		::Dynamic _hx_tmp = this->persistence;
+HXDLIN(1520)		return ::borogove::Persistence_obj::storeMessages(_hx_tmp,this->accountId(),messages);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Client_obj,storeMessages,return )
 
 void Client_obj::sendQuery( ::borogove::queries::GenericQuery query){
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1512_sendQuery)
-HXDLIN(1512)		 ::borogove::GenericStream _hx_tmp = this->stream;
-HXDLIN(1512)		_hx_tmp->sendIq(query->getQueryStanza(),query->handleResponse_dyn());
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1525_sendQuery)
+HXDLIN(1525)		 ::borogove::GenericStream _hx_tmp = this->stream;
+HXDLIN(1525)		_hx_tmp->sendIq(query->getQueryStanza(),query->handleResponse_dyn());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Client_obj,sendQuery,(void))
 
+void Client_obj::sendNextLazyQuery(){
+            		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Client,_gthis) HXARGC(0)
+            		void _hx_run(){
+            			HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1532_sendNextLazyQuery)
+HXLINE(1533)			 ::borogove::queries::GenericQuery query = _gthis->queriesToSend->shift().StaticCast<  ::borogove::queries::GenericQuery >();
+HXLINE(1534)			if (::hx::IsNotNull( query )) {
+HXLINE(1534)				_gthis->sendQuery(query);
+            			}
+HXLINE(1536)			_gthis->lazyQueryTimer = null();
+HXLINE(1537)			if ((_gthis->queriesToSend->length > 0)) {
+HXLINE(1537)				_gthis->sendNextLazyQuery();
+            			}
+            		}
+            		HX_END_LOCAL_FUNC0((void))
+
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1530_sendNextLazyQuery)
+HXDLIN(1530)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1531)		if (::hx::IsNotNull( this->lazyQueryTimer )) {
+HXLINE(1531)			return;
+            		}
+HXLINE(1532)		this->lazyQueryTimer = ::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_0(_gthis)),2000);
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC0(Client_obj,sendNextLazyQuery,(void))
+
+void Client_obj::sendQueryLazy( ::borogove::queries::GenericQuery query){
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1542_sendQueryLazy)
+HXLINE(1543)		this->queriesToSend->push(query);
+HXLINE(1544)		this->sendNextLazyQuery();
+            	}
+
+
+HX_DEFINE_DYNAMIC_FUNC1(Client_obj,sendQueryLazy,(void))
+
 void Client_obj::publishWithOptions( ::borogove::Stanza stanza, ::borogove::Stanza options){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_1, ::borogove::Client,_gthis, ::borogove::Stanza,options, ::borogove::Stanza,stanza) HXARGC(1)
             		void _hx_run( ::borogove::Stanza response){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1522_publishWithOptions)
-HXLINE(1522)			if ((( (::String)(::Reflect_obj::field(response->attr,HX_("type",ba,f2,08,4d))) ) == HX_("error",c8,cb,29,73))) {
-HXLINE(1523)				 ::borogove::Stanza tmp = response->getChild(HX_("error",c8,cb,29,73),null());
-HXDLIN(1523)				 ::borogove::Stanza preconditionError;
-HXDLIN(1523)				if (::hx::IsNotNull( tmp )) {
-HXLINE(1523)					preconditionError = tmp->getChild(HX_("precondition-not-met",2d,db,78,db),HX_("http://jabber.org/protocol/pubsub#errors",97,74,3a,a8));
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1554_publishWithOptions)
+HXLINE(1554)			if ((( (::String)(::Reflect_obj::field(response->attr,HX_("type",ba,f2,08,4d))) ) == HX_("error",c8,cb,29,73))) {
+HXLINE(1555)				 ::borogove::Stanza tmp = response->getChild(HX_("error",c8,cb,29,73),null());
+HXDLIN(1555)				 ::borogove::Stanza preconditionError;
+HXDLIN(1555)				if (::hx::IsNotNull( tmp )) {
+HXLINE(1555)					preconditionError = tmp->getChild(HX_("precondition-not-met",2d,db,78,db),HX_("http://jabber.org/protocol/pubsub#errors",97,74,3a,a8));
             				}
             				else {
-HXLINE(1523)					preconditionError = null();
+HXLINE(1555)					preconditionError = null();
             				}
-HXLINE(1524)				if (::hx::IsNotNull( preconditionError )) {
+HXLINE(1556)				if (::hx::IsNotNull( preconditionError )) {
             					HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::borogove::Client,_gthis, ::borogove::Stanza,options, ::borogove::Stanza,stanza) HXARGC(1)
             					void _hx_run( ::borogove::Stanza response){
-            						HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1532_publishWithOptions)
-HXLINE(1532)						if ((( (::String)(::Reflect_obj::field(response->attr,HX_("type",ba,f2,08,4d))) ) == HX_("result",dd,68,84,08))) {
-HXLINE(1533)							_gthis->publishWithOptions(stanza,options);
+            						HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1564_publishWithOptions)
+HXLINE(1564)						if ((( (::String)(::Reflect_obj::field(response->attr,HX_("type",ba,f2,08,4d))) ) == HX_("result",dd,68,84,08))) {
+HXLINE(1565)							_gthis->publishWithOptions(stanza,options);
             						}
             					}
             					HX_END_LOCAL_FUNC1((void))
 
-HXLINE(1526)					 ::borogove::GenericStream _gthis1 = _gthis->stream;
-HXLINE(1527)					 ::borogove::Stanza _hx_tmp =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(1558)					 ::borogove::GenericStream _gthis1 = _gthis->stream;
+HXLINE(1559)					 ::borogove::Stanza _hx_tmp =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))))->tag(HX_("pubsub",e3,da,f8,66), ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/pubsub#owner",c7,28,a3,08))));
-HXLINE(1529)					::String _hx_tmp1 = stanza->findText(HX_("{http://jabber.org/protocol/pubsub}pubsub/publish@node",5e,1b,df,ac));
-HXLINE(1526)					_gthis1->sendIq(_hx_tmp->tag(HX_("configure",e6,f9,5b,c0), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(1561)					::String _hx_tmp1 = stanza->findText(HX_("{http://jabber.org/protocol/pubsub}pubsub/publish@node",5e,1b,df,ac));
+HXLINE(1558)					_gthis1->sendIq(_hx_tmp->tag(HX_("configure",e6,f9,5b,c0), ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("node",02,0a,0a,49),_hx_tmp1)))->addChild(options), ::Dynamic(new _hx_Closure_0(_gthis,options,stanza)));
             				}
             			}
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1516_publishWithOptions)
-HXDLIN(1516)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1517)		 ::borogove::Stanza clone = stanza->clone();
-HXLINE(1518)		clone->findChild(HX_("{http://jabber.org/protocol/pubsub}pubsub/publish",64,a4,8d,39))->tag(HX_("publish-options",60,0b,5c,74),null())->addChild(options);
-HXLINE(1519)		this->stream->sendIq(clone, ::Dynamic(new _hx_Closure_1(_gthis,options,stanza)));
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1548_publishWithOptions)
+HXDLIN(1548)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1549)		 ::borogove::Stanza clone = stanza->clone();
+HXLINE(1550)		clone->findChild(HX_("{http://jabber.org/protocol/pubsub}pubsub/publish",64,a4,8d,39))->tag(HX_("publish-options",60,0b,5c,74),null())->addChild(options);
+HXLINE(1551)		this->stream->sendIq(clone, ::Dynamic(new _hx_Closure_1(_gthis,options,stanza)));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Client_obj,publishWithOptions,(void))
 
 void Client_obj::sendStanza( ::borogove::Stanza stanza){
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1544_sendStanza)
-HXLINE(1545)		if (::hx::IsNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("id",db,5b,00,00))) ) )) {
-HXLINE(1545)			 ::Dynamic this1 = stanza->attr;
-HXDLIN(1545)			::Reflect_obj::setField(this1,HX_("id",db,5b,00,00),::borogove::ID_obj::_hx_long());
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1576_sendStanza)
+HXLINE(1577)		if (::hx::IsNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("id",db,5b,00,00))) ) )) {
+HXLINE(1577)			 ::Dynamic this1 = stanza->attr;
+HXDLIN(1577)			::Reflect_obj::setField(this1,HX_("id",db,5b,00,00),::borogove::ID_obj::_hx_long());
             		}
-HXLINE(1546)		this->stream->sendStanza(stanza);
+HXLINE(1578)		this->stream->sendStanza(stanza);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Client_obj,sendStanza,(void))
 
 void Client_obj::sendPresence(::String to, ::Dynamic augment){
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1551_sendPresence)
-HXLINE(1552)		 ::Dynamic _hx_tmp;
-HXDLIN(1552)		if (::hx::IsNotNull( augment )) {
-HXLINE(1552)			_hx_tmp = augment;
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1583_sendPresence)
+HXLINE(1584)		 ::Dynamic _hx_tmp;
+HXDLIN(1584)		if (::hx::IsNotNull( augment )) {
+HXLINE(1584)			_hx_tmp = augment;
             		}
             		else {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             			 ::borogove::Stanza _hx_run( ::borogove::Stanza s){
-            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1552_sendPresence)
-HXLINE(1552)				return s;
+            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1584_sendPresence)
+HXLINE(1584)				return s;
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1552)			_hx_tmp =  ::Dynamic(new _hx_Closure_0());
+HXLINE(1584)			_hx_tmp =  ::Dynamic(new _hx_Closure_0());
             		}
-HXLINE(1553)		 ::Dynamic _hx_tmp1;
-HXDLIN(1553)		if (::hx::IsNull( to )) {
-HXLINE(1553)			_hx_tmp1 =  ::Dynamic(::hx::Anon_obj::Create(0));
+HXLINE(1585)		 ::Dynamic _hx_tmp1;
+HXDLIN(1585)		if (::hx::IsNull( to )) {
+HXLINE(1585)			_hx_tmp1 =  ::Dynamic(::hx::Anon_obj::Create(0));
             		}
             		else {
-HXLINE(1553)			_hx_tmp1 =  ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(1585)			_hx_tmp1 =  ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("to",7b,65,00,00),to));
             		}
-HXDLIN(1553)		 ::borogove::Stanza _hx_tmp2 = this->caps->addC( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("presence",3b,52,d7,66),_hx_tmp1));
-HXLINE(1554)		::String _hx_tmp3 = this->displayName();
-HXLINE(1551)		this->sendStanza(( ( ::borogove::Stanza)(_hx_tmp(_hx_tmp2->textTag(HX_("nick",a3,7b,05,49),_hx_tmp3, ::Dynamic(::hx::Anon_obj::Create(1)
+HXDLIN(1585)		 ::borogove::Stanza _hx_tmp2 = this->caps->addC( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("presence",3b,52,d7,66),_hx_tmp1));
+HXLINE(1586)		::String _hx_tmp3 = this->displayName();
+HXLINE(1583)		this->sendStanza(( ( ::borogove::Stanza)(_hx_tmp(_hx_tmp2->textTag(HX_("nick",a3,7b,05,49),_hx_tmp3, ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/nick",17,30,dc,e9)))))) ));
             	}
 
@@ -4614,89 +4685,89 @@ HX_DEFINE_DYNAMIC_FUNC2(Client_obj,sendPresence,(void))
 void Client_obj::getIceServers( ::Dynamic callback){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::queries::ExtDiscoGet,extDiscoGet, ::Dynamic,callback) HXARGC(0)
             		void _hx_run(){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1563_getIceServers)
-HXLINE(1564)			 ::haxe::ds::StringMap didUrl =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE(1565)			::Array< ::Dynamic> servers = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(1566)			{
-HXLINE(1566)				int _g = 0;
-HXDLIN(1566)				::Array< ::Dynamic> _g1;
-HXDLIN(1566)				::Array< ::Dynamic> tmp = extDiscoGet->getResult();
-HXDLIN(1566)				if (::hx::IsNotNull( tmp )) {
-HXLINE(1566)					_g1 = tmp;
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1595_getIceServers)
+HXLINE(1596)			 ::haxe::ds::StringMap didUrl =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE(1597)			::Array< ::Dynamic> servers = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1598)			{
+HXLINE(1598)				int _g = 0;
+HXDLIN(1598)				::Array< ::Dynamic> _g1;
+HXDLIN(1598)				::Array< ::Dynamic> tmp = extDiscoGet->getResult();
+HXDLIN(1598)				if (::hx::IsNotNull( tmp )) {
+HXLINE(1598)					_g1 = tmp;
             				}
             				else {
-HXLINE(1566)					_g1 = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1598)					_g1 = ::Array_obj< ::Dynamic>::__new(0);
             				}
-HXDLIN(1566)				while((_g < _g1->length)){
-HXLINE(1566)					 ::borogove::Stanza service = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
-HXDLIN(1566)					_g = (_g + 1);
-HXLINE(1567)					if (!(::Array_obj< ::String >::fromData( _hx_array_data_c0e6dc18_223,4)->contains(( (::String)(::Reflect_obj::field(service->attr,HX_("type",ba,f2,08,4d))) )))) {
-HXLINE(1567)						continue;
+HXDLIN(1598)				while((_g < _g1->length)){
+HXLINE(1598)					 ::borogove::Stanza service = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
+HXDLIN(1598)					_g = (_g + 1);
+HXLINE(1599)					if (!(::Array_obj< ::String >::fromData( _hx_array_data_c0e6dc18_227,4)->contains(( (::String)(::Reflect_obj::field(service->attr,HX_("type",ba,f2,08,4d))) )))) {
+HXLINE(1599)						continue;
             					}
-HXLINE(1568)					::String host = ( (::String)(::Reflect_obj::field(service->attr,HX_("host",68,cf,12,45))) );
-HXLINE(1569)					bool _hx_tmp;
-HXDLIN(1569)					if (::hx::IsNotNull( host )) {
-HXLINE(1569)						_hx_tmp = (host == HX_("",00,00,00,00));
+HXLINE(1600)					::String host = ( (::String)(::Reflect_obj::field(service->attr,HX_("host",68,cf,12,45))) );
+HXLINE(1601)					bool _hx_tmp;
+HXDLIN(1601)					if (::hx::IsNotNull( host )) {
+HXLINE(1601)						_hx_tmp = (host == HX_("",00,00,00,00));
             					}
             					else {
-HXLINE(1569)						_hx_tmp = true;
+HXLINE(1601)						_hx_tmp = true;
             					}
-HXDLIN(1569)					if (_hx_tmp) {
-HXLINE(1569)						continue;
+HXDLIN(1601)					if (_hx_tmp) {
+HXLINE(1601)						continue;
             					}
-HXLINE(1570)					 ::Dynamic port = ::Std_obj::parseInt(( (::String)(::Reflect_obj::field(service->attr,HX_("port",81,83,5c,4a))) ));
-HXLINE(1571)					bool _hx_tmp1;
-HXDLIN(1571)					bool _hx_tmp2;
-HXDLIN(1571)					if (::hx::IsNotNull( port )) {
-HXLINE(1571)						_hx_tmp2 = ::hx::IsLess( port,1 );
+HXLINE(1602)					 ::Dynamic port = ::Std_obj::parseInt(( (::String)(::Reflect_obj::field(service->attr,HX_("port",81,83,5c,4a))) ));
+HXLINE(1603)					bool _hx_tmp1;
+HXDLIN(1603)					bool _hx_tmp2;
+HXDLIN(1603)					if (::hx::IsNotNull( port )) {
+HXLINE(1603)						_hx_tmp2 = ::hx::IsLess( port,1 );
             					}
             					else {
-HXLINE(1571)						_hx_tmp2 = true;
+HXLINE(1603)						_hx_tmp2 = true;
             					}
-HXDLIN(1571)					if (!(_hx_tmp2)) {
-HXLINE(1571)						_hx_tmp1 = ::hx::IsGreater( port,65535 );
+HXDLIN(1603)					if (!(_hx_tmp2)) {
+HXLINE(1603)						_hx_tmp1 = ::hx::IsGreater( port,65535 );
             					}
             					else {
-HXLINE(1571)						_hx_tmp1 = true;
+HXLINE(1603)						_hx_tmp1 = true;
             					}
-HXDLIN(1571)					if (_hx_tmp1) {
-HXLINE(1571)						continue;
+HXDLIN(1603)					if (_hx_tmp1) {
+HXLINE(1603)						continue;
             					}
-HXLINE(1572)					bool isTurn = ::Array_obj< ::String >::fromData( _hx_array_data_c0e6dc18_224,2)->contains(( (::String)(::Reflect_obj::field(service->attr,HX_("type",ba,f2,08,4d))) ));
-HXLINE(1573)					::String url = (( (::String)(::Reflect_obj::field(service->attr,HX_("type",ba,f2,08,4d))) ) + HX_(":",3a,00,00,00));
-HXDLIN(1573)					::String url1;
-HXDLIN(1573)					if ((host.indexOf(HX_(":",3a,00,00,00),null()) >= 0)) {
-HXLINE(1573)						url1 = ((HX_("[",5b,00,00,00) + host) + HX_("]",5d,00,00,00));
+HXLINE(1604)					bool isTurn = ::Array_obj< ::String >::fromData( _hx_array_data_c0e6dc18_228,2)->contains(( (::String)(::Reflect_obj::field(service->attr,HX_("type",ba,f2,08,4d))) ));
+HXLINE(1605)					::String url = (( (::String)(::Reflect_obj::field(service->attr,HX_("type",ba,f2,08,4d))) ) + HX_(":",3a,00,00,00));
+HXDLIN(1605)					::String url1;
+HXDLIN(1605)					if ((host.indexOf(HX_(":",3a,00,00,00),null()) >= 0)) {
+HXLINE(1605)						url1 = ((HX_("[",5b,00,00,00) + host) + HX_("]",5d,00,00,00));
             					}
             					else {
-HXLINE(1573)						url1 = host;
+HXLINE(1605)						url1 = host;
             					}
-HXDLIN(1573)					::String url2;
-HXDLIN(1573)					if (isTurn) {
-HXLINE(1573)						url2 = (HX_("?transport=",73,c9,f2,13) + ( (::String)(::Reflect_obj::field(service->attr,HX_("transport",a9,4f,2f,4c))) ));
+HXDLIN(1605)					::String url2;
+HXDLIN(1605)					if (isTurn) {
+HXLINE(1605)						url2 = (HX_("?transport=",73,c9,f2,13) + ( (::String)(::Reflect_obj::field(service->attr,HX_("transport",a9,4f,2f,4c))) ));
             					}
             					else {
-HXLINE(1573)						url2 = HX_("",00,00,00,00);
+HXLINE(1605)						url2 = HX_("",00,00,00,00);
             					}
-HXDLIN(1573)					::String url3 = ((((url + url1) + HX_(":",3a,00,00,00)) + port) + url2);
-HXLINE(1574)					if (!(didUrl->exists(url3))) {
-HXLINE(1576)						::String _hx_tmp3 = ( (::String)(::Reflect_obj::field(service->attr,HX_("username",16,86,eb,20))) );
-HXLINE(1575)						servers->push( ::Dynamic(::hx::Anon_obj::Create(3)
+HXDLIN(1605)					::String url3 = ((((url + url1) + HX_(":",3a,00,00,00)) + port) + url2);
+HXLINE(1606)					if (!(didUrl->exists(url3))) {
+HXLINE(1608)						::String _hx_tmp3 = ( (::String)(::Reflect_obj::field(service->attr,HX_("username",16,86,eb,20))) );
+HXLINE(1607)						servers->push( ::Dynamic(::hx::Anon_obj::Create(3)
             							->setFixed(0,HX_("credential",d7,89,b2,20),( (::String)(::Reflect_obj::field(service->attr,HX_("password",1b,23,d0,48))) ))
             							->setFixed(1,HX_("username",16,86,eb,20),_hx_tmp3)
             							->setFixed(2,HX_("urls",24,d6,ac,4d),::Array_obj< ::String >::__new(1)->init(0,url3))));
-HXLINE(1580)						didUrl->set(url3,true);
+HXLINE(1612)						didUrl->set(url3,true);
             					}
             				}
             			}
-HXLINE(1583)			callback(servers);
+HXLINE(1615)			callback(servers);
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1561_getIceServers)
-HXLINE(1562)		 ::borogove::queries::ExtDiscoGet extDiscoGet =  ::borogove::queries::ExtDiscoGet_obj::__alloc( HX_CTX ,this->jid->domain);
-HXLINE(1563)		extDiscoGet->onFinished( ::Dynamic(new _hx_Closure_0(extDiscoGet,callback)));
-HXLINE(1585)		this->sendQuery(extDiscoGet);
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1593_getIceServers)
+HXLINE(1594)		 ::borogove::queries::ExtDiscoGet extDiscoGet =  ::borogove::queries::ExtDiscoGet_obj::__alloc( HX_CTX ,this->jid->domain);
+HXLINE(1595)		extDiscoGet->onFinished( ::Dynamic(new _hx_Closure_0(extDiscoGet,callback)));
+HXLINE(1617)		this->sendQuery(extDiscoGet);
             	}
 
 
@@ -4705,68 +4776,68 @@ HX_DEFINE_DYNAMIC_FUNC1(Client_obj,getIceServers,(void))
 void Client_obj::discoverServices( ::borogove::JID target,::String node, ::Dynamic callback){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_1, ::borogove::Client,_gthis, ::Dynamic,callback, ::borogove::queries::DiscoItemsGet,itemsGet) HXARGC(0)
             		void _hx_run(){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1593_discoverServices)
-HXLINE(1593)			int _g = 0;
-HXDLIN(1593)			::Array< ::Dynamic> _g1;
-HXDLIN(1593)			::Array< ::Dynamic> tmp = itemsGet->getResult();
-HXDLIN(1593)			if (::hx::IsNotNull( tmp )) {
-HXLINE(1593)				_g1 = tmp;
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1625_discoverServices)
+HXLINE(1625)			int _g = 0;
+HXDLIN(1625)			::Array< ::Dynamic> _g1;
+HXDLIN(1625)			::Array< ::Dynamic> tmp = itemsGet->getResult();
+HXDLIN(1625)			if (::hx::IsNotNull( tmp )) {
+HXLINE(1625)				_g1 = tmp;
             			}
             			else {
-HXLINE(1593)				_g1 = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1625)				_g1 = ::Array_obj< ::Dynamic>::__new(0);
             			}
-HXDLIN(1593)			while((_g < _g1->length)){
+HXDLIN(1625)			while((_g < _g1->length)){
             				HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::borogove::queries::DiscoInfoGet,infoGet1, ::Dynamic,item, ::Dynamic,callback) HXARGC(0)
             				void _hx_run(){
-            					HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1596_discoverServices)
-HXLINE(1596)					 ::Dynamic callback1 = callback;
-HXDLIN(1596)					 ::Dynamic item1 = item;
-HXDLIN(1596)					 ::borogove::Caps tmp = infoGet1->getResult();
-HXDLIN(1596)					 ::borogove::Caps _hx_tmp;
-HXDLIN(1596)					if (::hx::IsNotNull( tmp )) {
-HXLINE(1596)						_hx_tmp = tmp;
+            					HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1628_discoverServices)
+HXLINE(1628)					 ::Dynamic callback1 = callback;
+HXDLIN(1628)					 ::Dynamic item1 = item;
+HXDLIN(1628)					 ::borogove::Caps tmp = infoGet1->getResult();
+HXDLIN(1628)					 ::borogove::Caps _hx_tmp;
+HXDLIN(1628)					if (::hx::IsNotNull( tmp )) {
+HXLINE(1628)						_hx_tmp = tmp;
             					}
             					else {
-HXLINE(1596)						_hx_tmp =  ::borogove::Caps_obj::__alloc( HX_CTX ,HX_("",00,00,00,00),::Array_obj< ::Dynamic>::__new(0),::Array_obj< ::String >::__new(0),::Array_obj< ::Dynamic>::__new(0),null());
+HXLINE(1628)						_hx_tmp =  ::borogove::Caps_obj::__alloc( HX_CTX ,HX_("",00,00,00,00),::Array_obj< ::Dynamic>::__new(0),::Array_obj< ::String >::__new(0),::Array_obj< ::Dynamic>::__new(0),null());
             					}
-HXDLIN(1596)					callback1(item1,_hx_tmp);
+HXDLIN(1628)					callback1(item1,_hx_tmp);
             				}
             				HX_END_LOCAL_FUNC0((void))
 
-HXLINE(1593)				 ::Dynamic item = _g1->__get(_g);
-HXDLIN(1593)				_g = (_g + 1);
-HXLINE(1594)				::String infoGet = ( ( ::borogove::JID)(item->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)) )->asString();
-HXDLIN(1594)				 ::borogove::queries::DiscoInfoGet infoGet1 =  ::borogove::queries::DiscoInfoGet_obj::__alloc( HX_CTX ,infoGet,( (::String)(item->__Field(HX_("node",02,0a,0a,49),::hx::paccDynamic)) ));
-HXLINE(1595)				infoGet1->onFinished( ::Dynamic(new _hx_Closure_0(infoGet1,item,callback)));
-HXLINE(1598)				_gthis->sendQuery(infoGet1);
+HXLINE(1625)				 ::Dynamic item = _g1->__get(_g);
+HXDLIN(1625)				_g = (_g + 1);
+HXLINE(1626)				::String infoGet = ( ( ::borogove::JID)(item->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)) )->asString();
+HXDLIN(1626)				 ::borogove::queries::DiscoInfoGet infoGet1 =  ::borogove::queries::DiscoInfoGet_obj::__alloc( HX_CTX ,infoGet,( (::String)(item->__Field(HX_("node",02,0a,0a,49),::hx::paccDynamic)) ));
+HXLINE(1627)				infoGet1->onFinished( ::Dynamic(new _hx_Closure_0(infoGet1,item,callback)));
+HXLINE(1630)				_gthis->sendQuery(infoGet1);
             			}
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1590_discoverServices)
-HXDLIN(1590)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1591)		 ::borogove::queries::DiscoItemsGet itemsGet =  ::borogove::queries::DiscoItemsGet_obj::__alloc( HX_CTX ,target->asString(),node);
-HXLINE(1592)		itemsGet->onFinished( ::Dynamic(new _hx_Closure_1(_gthis,callback,itemsGet)));
-HXLINE(1601)		this->sendQuery(itemsGet);
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1622_discoverServices)
+HXDLIN(1622)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1623)		 ::borogove::queries::DiscoItemsGet itemsGet =  ::borogove::queries::DiscoItemsGet_obj::__alloc( HX_CTX ,target->asString(),node);
+HXLINE(1624)		itemsGet->onFinished( ::Dynamic(new _hx_Closure_1(_gthis,callback,itemsGet)));
+HXLINE(1633)		this->sendQuery(itemsGet);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC3(Client_obj,discoverServices,(void))
 
 void Client_obj::notifyMessageHandlers( ::borogove::ChatMessage message,int event){
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1605_notifyMessageHandlers)
-HXLINE(1606)		 ::borogove::Chat chat = this->getChat(message->chatId());
-HXLINE(1607)		bool _hx_tmp;
-HXDLIN(1607)		if (::hx::IsNotNull( chat )) {
-HXLINE(1607)			_hx_tmp = chat->isBlocked;
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1637_notifyMessageHandlers)
+HXLINE(1638)		 ::borogove::Chat chat = this->getChat(message->chatId());
+HXLINE(1639)		bool _hx_tmp;
+HXDLIN(1639)		if (::hx::IsNotNull( chat )) {
+HXLINE(1639)			_hx_tmp = chat->isBlocked;
             		}
             		else {
-HXLINE(1607)			_hx_tmp = false;
+HXLINE(1639)			_hx_tmp = false;
             		}
-HXDLIN(1607)		if (_hx_tmp) {
-HXLINE(1607)			return;
+HXDLIN(1639)		if (_hx_tmp) {
+HXLINE(1639)			return;
             		}
-HXLINE(1608)		this->trigger(HX_("message/new",d8,fc,71,67), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE(1640)		this->trigger(HX_("message/new",d8,fc,71,67), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("message",c7,35,11,9a),message)
             			->setFixed(1,HX_("event",1a,c8,c4,75),event)));
             	}
@@ -4775,29 +4846,29 @@ HXLINE(1608)		this->trigger(HX_("message/new",d8,fc,71,67), ::Dynamic(::hx::Anon
 HX_DEFINE_DYNAMIC_FUNC2(Client_obj,notifyMessageHandlers,(void))
 
 void Client_obj::notifySyncMessageHandlers( ::borogove::ChatMessage message){
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1612_notifySyncMessageHandlers)
-HXLINE(1613)		bool _hx_tmp;
-HXDLIN(1613)		if (::hx::IsNotNull( message )) {
-HXLINE(1613)			_hx_tmp = (message->versions->length > 1);
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1644_notifySyncMessageHandlers)
+HXLINE(1645)		bool _hx_tmp;
+HXDLIN(1645)		if (::hx::IsNotNull( message )) {
+HXLINE(1645)			_hx_tmp = (message->versions->length > 1);
             		}
             		else {
-HXLINE(1613)			_hx_tmp = true;
+HXLINE(1645)			_hx_tmp = true;
             		}
-HXDLIN(1613)		if (_hx_tmp) {
-HXLINE(1613)			return;
+HXDLIN(1645)		if (_hx_tmp) {
+HXLINE(1645)			return;
             		}
-HXLINE(1614)		 ::borogove::Chat chat = this->getChat(message->chatId());
-HXLINE(1615)		bool _hx_tmp1;
-HXDLIN(1615)		if (::hx::IsNotNull( chat )) {
-HXLINE(1615)			_hx_tmp1 = chat->isBlocked;
+HXLINE(1646)		 ::borogove::Chat chat = this->getChat(message->chatId());
+HXLINE(1647)		bool _hx_tmp1;
+HXDLIN(1647)		if (::hx::IsNotNull( chat )) {
+HXLINE(1647)			_hx_tmp1 = chat->isBlocked;
             		}
             		else {
-HXLINE(1615)			_hx_tmp1 = false;
+HXLINE(1647)			_hx_tmp1 = false;
             		}
-HXDLIN(1615)		if (_hx_tmp1) {
-HXLINE(1615)			return;
+HXDLIN(1647)		if (_hx_tmp1) {
+HXLINE(1647)			return;
             		}
-HXLINE(1616)		this->trigger(HX_("message/sync",e3,76,a8,1f),message);
+HXLINE(1648)		this->trigger(HX_("message/sync",e3,76,a8,1f),message);
             	}
 
 
@@ -4806,30 +4877,30 @@ HX_DEFINE_DYNAMIC_FUNC1(Client_obj,notifySyncMessageHandlers,(void))
 void Client_obj::rosterGet(){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::Client,_gthis, ::borogove::queries::RosterGet,rosterGet) HXARGC(0)
             		void _hx_run(){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1621_rosterGet)
-HXLINE(1622)			::Array< ::Dynamic> chatsToUpdate = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(1623)			{
-HXLINE(1623)				int _g = 0;
-HXDLIN(1623)				::Array< ::Dynamic> _g1 = rosterGet->getResult();
-HXDLIN(1623)				while((_g < _g1->length)){
-HXLINE(1623)					 ::Dynamic item = _g1->__get(_g);
-HXDLIN(1623)					_g = (_g + 1);
-HXLINE(1624)					 ::borogove::DirectChat chat = _gthis->getDirectChat(( (::String)(item->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)) ),false);
-HXLINE(1625)					chat->updateFromRoster(item);
-HXLINE(1626)					chatsToUpdate->push(chat);
-            				}
-            			}
-HXLINE(1628)			::Dynamic _gthis1 = _gthis->persistence;
-HXDLIN(1628)			::borogove::Persistence_obj::storeChats(_gthis1,_gthis->accountId(),chatsToUpdate);
-HXLINE(1629)			_gthis->trigger(HX_("chats/update",3d,8e,1d,14),chatsToUpdate);
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1653_rosterGet)
+HXLINE(1654)			::Array< ::Dynamic> chatsToUpdate = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1655)			{
+HXLINE(1655)				int _g = 0;
+HXDLIN(1655)				::Array< ::Dynamic> _g1 = rosterGet->getResult();
+HXDLIN(1655)				while((_g < _g1->length)){
+HXLINE(1655)					 ::Dynamic item = _g1->__get(_g);
+HXDLIN(1655)					_g = (_g + 1);
+HXLINE(1656)					 ::borogove::DirectChat chat = _gthis->getDirectChat(( (::String)(item->__Field(HX_("jid",c5,ca,50,00),::hx::paccDynamic)) ),false);
+HXLINE(1657)					chat->updateFromRoster(item);
+HXLINE(1658)					chatsToUpdate->push(chat);
+            				}
+            			}
+HXLINE(1660)			::Dynamic _gthis1 = _gthis->persistence;
+HXDLIN(1660)			::borogove::Persistence_obj::storeChats(_gthis1,_gthis->accountId(),chatsToUpdate);
+HXLINE(1661)			_gthis->trigger(HX_("chats/update",3d,8e,1d,14),chatsToUpdate);
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1619_rosterGet)
-HXDLIN(1619)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1620)		 ::borogove::queries::RosterGet rosterGet =  ::borogove::queries::RosterGet_obj::__alloc( HX_CTX ,null());
-HXLINE(1621)		rosterGet->onFinished( ::Dynamic(new _hx_Closure_0(_gthis,rosterGet)));
-HXLINE(1631)		this->sendQuery(rosterGet);
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1651_rosterGet)
+HXDLIN(1651)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1652)		 ::borogove::queries::RosterGet rosterGet =  ::borogove::queries::RosterGet_obj::__alloc( HX_CTX ,null());
+HXLINE(1653)		rosterGet->onFinished( ::Dynamic(new _hx_Closure_0(_gthis,rosterGet)));
+HXLINE(1663)		this->sendQuery(rosterGet);
             	}
 
 
@@ -4838,184 +4909,184 @@ HX_DEFINE_DYNAMIC_FUNC0(Client_obj,rosterGet,(void))
 void Client_obj::startChatWith(::String jid, ::Dynamic handleCaps, ::Dynamic handleChat){
             		HX_BEGIN_LOCAL_FUNC_S5(::hx::LocalFunc,_hx_Closure_0, ::borogove::Client,_gthis, ::Dynamic,handleChat, ::Dynamic,handleCaps, ::borogove::queries::DiscoInfoGet,discoGet,::String,jid) HXARGC(0)
             		void _hx_run(){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1636_startChatWith)
-HXLINE(1637)			 ::borogove::Caps resultCaps = discoGet->getResult();
-HXLINE(1638)			int uiState = ( (int)(handleCaps(resultCaps)) );
-HXLINE(1639)			if (::hx::IsNull( resultCaps )) {
-HXLINE(1640)				 ::borogove::Stanza tmp = discoGet->responseStanza;
-HXDLIN(1640)				 ::borogove::Stanza tmp1;
-HXDLIN(1640)				if (::hx::IsNotNull( tmp )) {
-HXLINE(1640)					tmp1 = tmp->getChild(HX_("error",c8,cb,29,73),null());
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1668_startChatWith)
+HXLINE(1669)			 ::borogove::Caps resultCaps = discoGet->getResult();
+HXLINE(1670)			int uiState = ( (int)(handleCaps(resultCaps)) );
+HXLINE(1671)			if (::hx::IsNull( resultCaps )) {
+HXLINE(1672)				 ::borogove::Stanza tmp = discoGet->responseStanza;
+HXDLIN(1672)				 ::borogove::Stanza tmp1;
+HXDLIN(1672)				if (::hx::IsNotNull( tmp )) {
+HXLINE(1672)					tmp1 = tmp->getChild(HX_("error",c8,cb,29,73),null());
             				}
             				else {
-HXLINE(1640)					tmp1 = null();
+HXLINE(1672)					tmp1 = null();
             				}
-HXDLIN(1640)				 ::borogove::Stanza err;
-HXDLIN(1640)				if (::hx::IsNotNull( tmp1 )) {
-HXLINE(1640)					err = tmp1->getChild(null(),HX_("urn:ietf:params:xml:ns:xmpp-stanzas",27,f2,3d,30));
+HXDLIN(1672)				 ::borogove::Stanza err;
+HXDLIN(1672)				if (::hx::IsNotNull( tmp1 )) {
+HXLINE(1672)					err = tmp1->getChild(null(),HX_("urn:ietf:params:xml:ns:xmpp-stanzas",27,f2,3d,30));
             				}
             				else {
-HXLINE(1640)					err = null();
-            				}
-HXLINE(1641)				bool _hx_tmp;
-HXDLIN(1641)				bool _hx_tmp1;
-HXDLIN(1641)				if (::hx::IsNotNull( err )) {
-HXLINE(1641)					::String _hx_tmp2;
-HXDLIN(1641)					if (::hx::IsNotNull( err )) {
-HXLINE(1641)						_hx_tmp2 = err->name;
+HXLINE(1672)					err = null();
+            				}
+HXLINE(1673)				bool _hx_tmp;
+HXDLIN(1673)				bool _hx_tmp1;
+HXDLIN(1673)				if (::hx::IsNotNull( err )) {
+HXLINE(1673)					::String _hx_tmp2;
+HXDLIN(1673)					if (::hx::IsNotNull( err )) {
+HXLINE(1673)						_hx_tmp2 = err->name;
             					}
             					else {
-HXLINE(1641)						_hx_tmp2 = null();
+HXLINE(1673)						_hx_tmp2 = null();
             					}
-HXDLIN(1641)					_hx_tmp1 = (_hx_tmp2 == HX_("service-unavailable",f8,3c,11,1c));
+HXDLIN(1673)					_hx_tmp1 = (_hx_tmp2 == HX_("service-unavailable",f8,3c,11,1c));
             				}
             				else {
-HXLINE(1641)					_hx_tmp1 = true;
+HXLINE(1673)					_hx_tmp1 = true;
             				}
-HXDLIN(1641)				if (!(_hx_tmp1)) {
-HXLINE(1641)					::String _hx_tmp3;
-HXDLIN(1641)					if (::hx::IsNotNull( err )) {
-HXLINE(1641)						_hx_tmp3 = err->name;
+HXDLIN(1673)				if (!(_hx_tmp1)) {
+HXLINE(1673)					::String _hx_tmp3;
+HXDLIN(1673)					if (::hx::IsNotNull( err )) {
+HXLINE(1673)						_hx_tmp3 = err->name;
             					}
             					else {
-HXLINE(1641)						_hx_tmp3 = null();
+HXLINE(1673)						_hx_tmp3 = null();
             					}
-HXDLIN(1641)					_hx_tmp = (_hx_tmp3 == HX_("feature-not-implemented",71,20,2e,96));
+HXDLIN(1673)					_hx_tmp = (_hx_tmp3 == HX_("feature-not-implemented",71,20,2e,96));
             				}
             				else {
-HXLINE(1641)					_hx_tmp = true;
+HXLINE(1673)					_hx_tmp = true;
             				}
-HXDLIN(1641)				if (_hx_tmp) {
-HXLINE(1642)					 ::borogove::DirectChat chat = _gthis->getDirectChat(jid,false);
-HXLINE(1643)					chat->uiState = uiState;
-HXLINE(1644)					handleChat(chat);
-HXLINE(1645)					::Dynamic _gthis1 = _gthis->persistence;
-HXDLIN(1645)					::borogove::Persistence_obj::storeChats(_gthis1,_gthis->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat));
-HXLINE(1646)					_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat));
+HXDLIN(1673)				if (_hx_tmp) {
+HXLINE(1674)					 ::borogove::DirectChat chat = _gthis->getDirectChat(jid,false);
+HXLINE(1675)					chat->uiState = uiState;
+HXLINE(1676)					handleChat(chat);
+HXLINE(1677)					::Dynamic _gthis1 = _gthis->persistence;
+HXDLIN(1677)					::borogove::Persistence_obj::storeChats(_gthis1,_gthis->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat));
+HXLINE(1678)					_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat));
             				}
             			}
             			else {
-HXLINE(1649)				::borogove::Persistence_obj::storeCaps(_gthis->persistence,resultCaps);
-HXLINE(1650)				if (resultCaps->isChannel(jid)) {
-HXLINE(1651)					 ::borogove::Channel chat1 =  ::borogove::Channel_obj::__alloc( HX_CTX ,_gthis,_gthis->stream,_gthis->persistence,jid,uiState,false,null(),null(),null(),resultCaps);
-HXLINE(1652)					chat1->setupNotifications();
-HXLINE(1653)					_gthis->chats->unshift(chat1);
-HXLINE(1654)					bool _hx_tmp4;
-HXDLIN(1654)					if (_gthis->inSync) {
-HXLINE(1654)						_hx_tmp4 = _gthis->sendAvailable;
+HXLINE(1681)				::borogove::Persistence_obj::storeCaps(_gthis->persistence,resultCaps);
+HXLINE(1682)				if (resultCaps->isChannel(jid)) {
+HXLINE(1683)					 ::borogove::Channel chat1 =  ::borogove::Channel_obj::__alloc( HX_CTX ,_gthis,_gthis->stream,_gthis->persistence,jid,uiState,false,null(),null(),null(),resultCaps);
+HXLINE(1684)					chat1->setupNotifications();
+HXLINE(1685)					_gthis->chats->unshift(chat1);
+HXLINE(1686)					bool _hx_tmp4;
+HXDLIN(1686)					if (_gthis->inSync) {
+HXLINE(1686)						_hx_tmp4 = _gthis->sendAvailable;
             					}
             					else {
-HXLINE(1654)						_hx_tmp4 = false;
+HXLINE(1686)						_hx_tmp4 = false;
             					}
-HXDLIN(1654)					if (_hx_tmp4) {
-HXLINE(1654)						chat1->selfPing(false);
+HXDLIN(1686)					if (_hx_tmp4) {
+HXLINE(1686)						chat1->selfPing(false);
             					}
-HXLINE(1655)					handleChat(chat1);
-HXLINE(1656)					::Dynamic _gthis2 = _gthis->persistence;
-HXDLIN(1656)					::borogove::Persistence_obj::storeChats(_gthis2,_gthis->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat1));
-HXLINE(1657)					_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat1));
+HXLINE(1687)					handleChat(chat1);
+HXLINE(1688)					::Dynamic _gthis2 = _gthis->persistence;
+HXDLIN(1688)					::borogove::Persistence_obj::storeChats(_gthis2,_gthis->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat1));
+HXLINE(1689)					_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat1));
             				}
             				else {
-HXLINE(1659)					 ::borogove::DirectChat chat2 = _gthis->getDirectChat(jid,false);
-HXLINE(1660)					chat2->uiState = uiState;
-HXLINE(1661)					handleChat(chat2);
-HXLINE(1662)					::Dynamic _gthis3 = _gthis->persistence;
-HXDLIN(1662)					::borogove::Persistence_obj::storeChats(_gthis3,_gthis->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat2));
-HXLINE(1663)					_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat2));
+HXLINE(1691)					 ::borogove::DirectChat chat2 = _gthis->getDirectChat(jid,false);
+HXLINE(1692)					chat2->uiState = uiState;
+HXLINE(1693)					handleChat(chat2);
+HXLINE(1694)					::Dynamic _gthis3 = _gthis->persistence;
+HXDLIN(1694)					::borogove::Persistence_obj::storeChats(_gthis3,_gthis->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat2));
+HXLINE(1695)					_gthis->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat2));
             				}
             			}
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1634_startChatWith)
-HXDLIN(1634)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1635)		 ::borogove::queries::DiscoInfoGet discoGet =  ::borogove::queries::DiscoInfoGet_obj::__alloc( HX_CTX ,jid,null());
-HXLINE(1636)		discoGet->onFinished( ::Dynamic(new _hx_Closure_0(_gthis,handleChat,handleCaps,discoGet,jid)));
-HXLINE(1667)		this->sendQuery(discoGet);
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1666_startChatWith)
+HXDLIN(1666)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1667)		 ::borogove::queries::DiscoInfoGet discoGet =  ::borogove::queries::DiscoInfoGet_obj::__alloc( HX_CTX ,jid,null());
+HXLINE(1668)		discoGet->onFinished( ::Dynamic(new _hx_Closure_0(_gthis,handleChat,handleCaps,discoGet,jid)));
+HXLINE(1699)		this->sendQuery(discoGet);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC3(Client_obj,startChatWith,(void))
 
 void Client_obj::mucInvite(::String chatId, ::borogove::Chat chat,::String senderId,::String threadId,::String serverId,::String serverIdBy,::String reason,::String password){
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1670_mucInvite)
-HXDLIN(1670)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1671)		if (::hx::IsNull( chat )) {
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1702_mucInvite)
+HXDLIN(1702)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1703)		if (::hx::IsNull( chat )) {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             			int _hx_run( ::borogove::Caps _){
-            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1672_mucInvite)
-HXLINE(1672)				return 3;
+            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1704_mucInvite)
+HXLINE(1704)				return 3;
             			}
             			HX_END_LOCAL_FUNC1(return)
 
             			HX_BEGIN_LOCAL_FUNC_S8(::hx::LocalFunc,_hx_Closure_1, ::borogove::Client,_gthis,::String,serverId,::String,senderId,::String,chatId,::String,serverIdBy,::String,password,::String,reason,::String,threadId) HXARGC(1)
             			void _hx_run( ::borogove::Chat chat){
-            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1673_mucInvite)
-HXLINE(1673)				_gthis->mucInvite(chatId,chat,senderId,threadId,serverId,serverIdBy,reason,password);
+            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1705_mucInvite)
+HXLINE(1705)				_gthis->mucInvite(chatId,chat,senderId,threadId,serverId,serverIdBy,reason,password);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-HXLINE(1672)			this->startChatWith(chatId, ::Dynamic(new _hx_Closure_0()), ::Dynamic(new _hx_Closure_1(_gthis,serverId,senderId,chatId,serverIdBy,password,reason,threadId)));
-HXLINE(1675)			return;
+HXLINE(1704)			this->startChatWith(chatId, ::Dynamic(new _hx_Closure_0()), ::Dynamic(new _hx_Closure_1(_gthis,serverId,senderId,chatId,serverIdBy,password,reason,threadId)));
+HXLINE(1707)			return;
             		}
-HXLINE(1679)		bool _hx_tmp;
-HXDLIN(1679)		if ((chat->uiState != 2)) {
-HXLINE(1679)			_hx_tmp = (chat->uiState != 3);
+HXLINE(1711)		bool _hx_tmp;
+HXDLIN(1711)		if ((chat->uiState != 2)) {
+HXLINE(1711)			_hx_tmp = (chat->uiState != 3);
             		}
             		else {
-HXLINE(1679)			_hx_tmp = false;
+HXLINE(1711)			_hx_tmp = false;
             		}
-HXDLIN(1679)		if (_hx_tmp) {
-HXLINE(1679)			return;
+HXDLIN(1711)		if (_hx_tmp) {
+HXLINE(1711)			return;
             		}
-HXLINE(1681)		chat->extensions->removeChildren(HX_("invite",c9,f1,db,9f),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14));
-HXLINE(1682)		 ::borogove::Stanza inviteExt = chat->extensions->tag(HX_("invite",c9,f1,db,9f), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE(1713)		chat->extensions->removeChildren(HX_("invite",c9,f1,db,9f),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14));
+HXLINE(1714)		 ::borogove::Stanza inviteExt = chat->extensions->tag(HX_("invite",c9,f1,db,9f), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("from",6a,a5,c2,43),senderId)
             			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/muc#user",87,74,8e,14))));
-HXLINE(1683)		if (::hx::IsNotNull( reason )) {
-HXLINE(1683)			inviteExt->textTag(HX_("reason",c4,0f,9d,fc),reason,null());
+HXLINE(1715)		if (::hx::IsNotNull( reason )) {
+HXLINE(1715)			inviteExt->textTag(HX_("reason",c4,0f,9d,fc),reason,null());
             		}
-HXLINE(1684)		if (::hx::IsNotNull( password )) {
-HXLINE(1684)			inviteExt->textTag(HX_("password",1b,23,d0,48),password,null());
+HXLINE(1716)		if (::hx::IsNotNull( password )) {
+HXLINE(1716)			inviteExt->textTag(HX_("password",1b,23,d0,48),password,null());
             		}
-HXLINE(1685)		if (::hx::IsNotNull( threadId )) {
-HXLINE(1685)			inviteExt->tag(HX_("continue",67,e0,c8,31), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(1717)		if (::hx::IsNotNull( threadId )) {
+HXLINE(1717)			inviteExt->tag(HX_("continue",67,e0,c8,31), ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("thread",ca,7a,b9,8e),threadId)))->up();
             		}
-HXLINE(1686)		bool _hx_tmp1;
-HXDLIN(1686)		if (::hx::IsNotNull( serverId )) {
-HXLINE(1686)			_hx_tmp1 = ::hx::IsNotNull( serverIdBy );
+HXLINE(1718)		bool _hx_tmp1;
+HXDLIN(1718)		if (::hx::IsNotNull( serverId )) {
+HXLINE(1718)			_hx_tmp1 = ::hx::IsNotNull( serverIdBy );
             		}
             		else {
-HXLINE(1686)			_hx_tmp1 = false;
+HXLINE(1718)			_hx_tmp1 = false;
             		}
-HXDLIN(1686)		if (_hx_tmp1) {
-HXLINE(1687)			inviteExt->tag(HX_("stanza-id",73,8a,54,e9), ::Dynamic(::hx::Anon_obj::Create(3)
+HXDLIN(1718)		if (_hx_tmp1) {
+HXLINE(1719)			inviteExt->tag(HX_("stanza-id",73,8a,54,e9), ::Dynamic(::hx::Anon_obj::Create(3)
             				->setFixed(0,HX_("by",d7,55,00,00),serverIdBy)
             				->setFixed(1,HX_("id",db,5b,00,00),serverId)
             				->setFixed(2,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:sid:0",a8,4b,37,54))))->up();
             		}
-HXLINE(1689)		inviteExt->up();
-HXLINE(1690)		chat->uiState = 3;
-HXLINE(1691)		this->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat));
-HXLINE(1692)		::Dynamic _hx_tmp2 = this->persistence;
-HXDLIN(1692)		::borogove::Persistence_obj::storeChats(_hx_tmp2,this->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat));
+HXLINE(1721)		inviteExt->up();
+HXLINE(1722)		chat->uiState = 3;
+HXLINE(1723)		this->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,chat));
+HXLINE(1724)		::Dynamic _hx_tmp2 = this->persistence;
+HXDLIN(1724)		::borogove::Persistence_obj::storeChats(_hx_tmp2,this->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,chat));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC8(Client_obj,mucInvite,(void))
 
 void Client_obj::serverBlocked(::String blocked){
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1695_serverBlocked)
-HXLINE(1696)		 ::borogove::Chat chat;
-HXDLIN(1696)		 ::borogove::Chat tmp = this->getChat(blocked);
-HXDLIN(1696)		if (::hx::IsNotNull( tmp )) {
-HXLINE(1696)			chat = tmp;
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1727_serverBlocked)
+HXLINE(1728)		 ::borogove::Chat chat;
+HXDLIN(1728)		 ::borogove::Chat tmp = this->getChat(blocked);
+HXDLIN(1728)		if (::hx::IsNotNull( tmp )) {
+HXLINE(1728)			chat = tmp;
             		}
             		else {
-HXLINE(1696)			chat = this->getDirectChat(blocked,false);
+HXLINE(1728)			chat = this->getDirectChat(blocked,false);
             		}
-HXLINE(1697)		chat->block(false,null(),false);
+HXLINE(1729)		chat->block(false,null(),false);
             	}
 
 
@@ -5024,201 +5095,201 @@ HX_DEFINE_DYNAMIC_FUNC1(Client_obj,serverBlocked,(void))
 void Client_obj::bookmarksGet( ::Dynamic callback){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::Client,_gthis, ::borogove::queries::BlocklistGet,blockingGet) HXARGC(0)
             		void _hx_run(){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1704_bookmarksGet)
-HXLINE(1704)			int _g = 0;
-HXDLIN(1704)			::Array< ::String > _g1 = blockingGet->getResult();
-HXDLIN(1704)			while((_g < _g1->length)){
-HXLINE(1704)				::String blocked = _g1->__get(_g);
-HXDLIN(1704)				_g = (_g + 1);
-HXLINE(1705)				_gthis->serverBlocked(blocked);
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1736_bookmarksGet)
+HXLINE(1736)			int _g = 0;
+HXDLIN(1736)			::Array< ::String > _g1 = blockingGet->getResult();
+HXDLIN(1736)			while((_g < _g1->length)){
+HXLINE(1736)				::String blocked = _g1->__get(_g);
+HXDLIN(1736)				_g = (_g + 1);
+HXLINE(1737)				_gthis->serverBlocked(blocked);
             			}
             		}
             		HX_END_LOCAL_FUNC0((void))
 
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_5, ::borogove::Client,_gthis, ::borogove::queries::PubsubGet,mdsGet) HXARGC(0)
             		void _hx_run(){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1711_bookmarksGet)
-HXLINE(1712)			::Array< ::Dynamic> chatsToUpdate = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(1713)			{
-HXLINE(1713)				int _g = 0;
-HXDLIN(1713)				::Array< ::Dynamic> _g1 = mdsGet->getResult();
-HXDLIN(1713)				while((_g < _g1->length)){
-HXLINE(1713)					 ::borogove::Stanza item = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
-HXDLIN(1713)					_g = (_g + 1);
-HXLINE(1714)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(item->attr,HX_("id",db,5b,00,00))) ) )) {
-HXLINE(1715)						 ::borogove::Stanza tmp = item->getChild(HX_("displayed",21,17,db,c1),HX_("urn:xmpp:mds:displayed:0",bd,60,cc,fb));
-HXDLIN(1715)						 ::borogove::Stanza upTo;
-HXDLIN(1715)						if (::hx::IsNotNull( tmp )) {
-HXLINE(1715)							upTo = tmp->getChild(HX_("stanza-id",73,8a,54,e9),HX_("urn:xmpp:sid:0",a8,4b,37,54));
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1743_bookmarksGet)
+HXLINE(1744)			::Array< ::Dynamic> chatsToUpdate = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1745)			{
+HXLINE(1745)				int _g = 0;
+HXDLIN(1745)				::Array< ::Dynamic> _g1 = mdsGet->getResult();
+HXDLIN(1745)				while((_g < _g1->length)){
+HXLINE(1745)					 ::borogove::Stanza item = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
+HXDLIN(1745)					_g = (_g + 1);
+HXLINE(1746)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(item->attr,HX_("id",db,5b,00,00))) ) )) {
+HXLINE(1747)						 ::borogove::Stanza tmp = item->getChild(HX_("displayed",21,17,db,c1),HX_("urn:xmpp:mds:displayed:0",bd,60,cc,fb));
+HXDLIN(1747)						 ::borogove::Stanza upTo;
+HXDLIN(1747)						if (::hx::IsNotNull( tmp )) {
+HXLINE(1747)							upTo = tmp->getChild(HX_("stanza-id",73,8a,54,e9),HX_("urn:xmpp:sid:0",a8,4b,37,54));
             						}
             						else {
-HXLINE(1715)							upTo = null();
+HXLINE(1747)							upTo = null();
             						}
-HXLINE(1716)						 ::borogove::Client _gthis1 = _gthis;
-HXDLIN(1716)						 ::borogove::Chat chat = _gthis1->getChat(( (::String)(::Reflect_obj::field(item->attr,HX_("id",db,5b,00,00))) ));
-HXLINE(1717)						if (::hx::IsNull( chat )) {
+HXLINE(1748)						 ::borogove::Client _gthis1 = _gthis;
+HXDLIN(1748)						 ::borogove::Chat chat = _gthis1->getChat(( (::String)(::Reflect_obj::field(item->attr,HX_("id",db,5b,00,00))) ));
+HXLINE(1749)						if (::hx::IsNull( chat )) {
             							HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             							int _hx_run( ::borogove::Caps _){
-            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1718_bookmarksGet)
-HXLINE(1718)								return 2;
+            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1750_bookmarksGet)
+HXLINE(1750)								return 2;
             							}
             							HX_END_LOCAL_FUNC1(return)
 
             							HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_2, ::borogove::Stanza,upTo) HXARGC(1)
             							void _hx_run( ::borogove::Chat chat){
-            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1718_bookmarksGet)
-HXLINE(1718)								::String _hx_tmp = ( (::String)(::Reflect_obj::field(upTo->attr,HX_("id",db,5b,00,00))) );
-HXDLIN(1718)								chat->markReadUpToId(_hx_tmp,( (::String)(::Reflect_obj::field(upTo->attr,HX_("by",d7,55,00,00))) ));
+            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1750_bookmarksGet)
+HXLINE(1750)								::String _hx_tmp = ( (::String)(::Reflect_obj::field(upTo->attr,HX_("id",db,5b,00,00))) );
+HXDLIN(1750)								chat->markReadUpToId(_hx_tmp,( (::String)(::Reflect_obj::field(upTo->attr,HX_("by",d7,55,00,00))) ));
             							}
             							HX_END_LOCAL_FUNC1((void))
 
-HXLINE(1718)							 ::borogove::Client _gthis2 = _gthis;
-HXDLIN(1718)							_gthis2->startChatWith(( (::String)(::Reflect_obj::field(item->attr,HX_("id",db,5b,00,00))) ), ::Dynamic(new _hx_Closure_1()), ::Dynamic(new _hx_Closure_2(upTo)));
+HXLINE(1750)							 ::borogove::Client _gthis2 = _gthis;
+HXDLIN(1750)							_gthis2->startChatWith(( (::String)(::Reflect_obj::field(item->attr,HX_("id",db,5b,00,00))) ), ::Dynamic(new _hx_Closure_1()), ::Dynamic(new _hx_Closure_2(upTo)));
             						}
             						else {
             							HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_3) HXARGC(1)
             							::Dynamic _hx_run( ::Dynamic _){
-            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1720_bookmarksGet)
-HXLINE(1720)								return null();
+            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1752_bookmarksGet)
+HXLINE(1752)								return null();
             							}
             							HX_END_LOCAL_FUNC1(return)
 
             							HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_4) HXARGC(1)
             							::Dynamic _hx_run( ::Dynamic e){
-            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1720_bookmarksGet)
-HXLINE(1720)								if (::hx::IsNotNull( e )) {
-HXLINE(1720)									return ::thenshim::_Promise::Promise_Impl__obj::reject(e);
+            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1752_bookmarksGet)
+HXLINE(1752)								if (::hx::IsNotNull( e )) {
+HXLINE(1752)									return ::thenshim::_Promise::Promise_Impl__obj::reject(e);
             								}
             								else {
-HXLINE(1720)									return null();
+HXLINE(1752)									return null();
             								}
-HXDLIN(1720)								return null();
+HXDLIN(1752)								return null();
             							}
             							HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1720)							::String _hx_tmp = ( (::String)(::Reflect_obj::field(upTo->attr,HX_("id",db,5b,00,00))) );
-HXDLIN(1720)							::thenshim::_Promise::Promise_Impl__obj::then(chat->markReadUpToId(_hx_tmp,( (::String)(::Reflect_obj::field(upTo->attr,HX_("by",d7,55,00,00))) )), ::Dynamic(new _hx_Closure_3()), ::Dynamic(new _hx_Closure_4()));
-HXLINE(1721)							chatsToUpdate->push(chat);
+HXLINE(1752)							::String _hx_tmp = ( (::String)(::Reflect_obj::field(upTo->attr,HX_("id",db,5b,00,00))) );
+HXDLIN(1752)							::thenshim::_Promise::Promise_Impl__obj::then(chat->markReadUpToId(_hx_tmp,( (::String)(::Reflect_obj::field(upTo->attr,HX_("by",d7,55,00,00))) )), ::Dynamic(new _hx_Closure_3()), ::Dynamic(new _hx_Closure_4()));
+HXLINE(1753)							chatsToUpdate->push(chat);
             						}
             					}
             				}
             			}
-HXLINE(1725)			::Dynamic _gthis3 = _gthis->persistence;
-HXDLIN(1725)			::borogove::Persistence_obj::storeChats(_gthis3,_gthis->accountId(),chatsToUpdate);
+HXLINE(1757)			::Dynamic _gthis3 = _gthis->persistence;
+HXDLIN(1757)			::borogove::Persistence_obj::storeChats(_gthis3,_gthis->accountId(),chatsToUpdate);
             		}
             		HX_END_LOCAL_FUNC0((void))
 
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_8, ::borogove::Client,_gthis, ::borogove::queries::PubsubGet,pubsubGet, ::Dynamic,callback) HXARGC(0)
             		void _hx_run(){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1730_bookmarksGet)
-HXLINE(1731)			::Array< ::Dynamic> chatsToUpdate = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(1732)			{
-HXLINE(1732)				int _g = 0;
-HXDLIN(1732)				::Array< ::Dynamic> _g1 = pubsubGet->getResult();
-HXDLIN(1732)				while((_g < _g1->length)){
-HXLINE(1732)					 ::borogove::Stanza item = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
-HXDLIN(1732)					_g = (_g + 1);
-HXLINE(1733)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(item->attr,HX_("id",db,5b,00,00))) ) )) {
-HXLINE(1734)						 ::borogove::Client _gthis1 = _gthis;
-HXDLIN(1734)						 ::borogove::Chat chat = _gthis1->getChat(( (::String)(::Reflect_obj::field(item->attr,HX_("id",db,5b,00,00))) ));
-HXLINE(1735)						if (::hx::IsNull( chat )) {
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1762_bookmarksGet)
+HXLINE(1763)			::Array< ::Dynamic> chatsToUpdate = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1764)			{
+HXLINE(1764)				int _g = 0;
+HXDLIN(1764)				::Array< ::Dynamic> _g1 = pubsubGet->getResult();
+HXDLIN(1764)				while((_g < _g1->length)){
+HXLINE(1764)					 ::borogove::Stanza item = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
+HXDLIN(1764)					_g = (_g + 1);
+HXLINE(1765)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(item->attr,HX_("id",db,5b,00,00))) ) )) {
+HXLINE(1766)						 ::borogove::Client _gthis1 = _gthis;
+HXDLIN(1766)						 ::borogove::Chat chat = _gthis1->getChat(( (::String)(::Reflect_obj::field(item->attr,HX_("id",db,5b,00,00))) ));
+HXLINE(1767)						if (::hx::IsNull( chat )) {
             							HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_6, ::borogove::Stanza,item) HXARGC(1)
             							int _hx_run( ::borogove::Caps caps){
-            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1738_bookmarksGet)
-HXLINE(1739)								if (::hx::IsNull( caps )) {
-HXLINE(1739)									return 1;
+            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1770_bookmarksGet)
+HXLINE(1771)								if (::hx::IsNull( caps )) {
+HXLINE(1771)									return 1;
             								}
-HXLINE(1741)								 ::borogove::Identity identity = caps->identities->__get(0).StaticCast<  ::borogove::Identity >();
-HXLINE(1742)								 ::borogove::Stanza conf = item->getChild(HX_("conference",1c,2b,83,41),HX_("urn:xmpp:bookmarks:1",58,3c,53,7d));
-HXLINE(1743)								if (::hx::IsNull( ( (::String)(::Reflect_obj::field(conf->attr,HX_("name",4b,72,ff,48))) ) )) {
-HXLINE(1744)									::String value;
-HXDLIN(1744)									if (::hx::IsNotNull( identity )) {
-HXLINE(1744)										value = identity->name;
+HXLINE(1773)								 ::borogove::Identity identity = caps->identities->__get(0).StaticCast<  ::borogove::Identity >();
+HXLINE(1774)								 ::borogove::Stanza conf = item->getChild(HX_("conference",1c,2b,83,41),HX_("urn:xmpp:bookmarks:1",58,3c,53,7d));
+HXLINE(1775)								if (::hx::IsNull( ( (::String)(::Reflect_obj::field(conf->attr,HX_("name",4b,72,ff,48))) ) )) {
+HXLINE(1776)									::String value;
+HXDLIN(1776)									if (::hx::IsNotNull( identity )) {
+HXLINE(1776)										value = identity->name;
             									}
             									else {
-HXLINE(1744)										value = null();
+HXLINE(1776)										value = null();
             									}
-HXDLIN(1744)									::Reflect_obj::setField(conf->attr,HX_("name",4b,72,ff,48),value);
+HXDLIN(1776)									::Reflect_obj::setField(conf->attr,HX_("name",4b,72,ff,48),value);
             								}
-HXLINE(1746)								bool _hx_tmp;
-HXDLIN(1746)								bool _hx_tmp1;
-HXDLIN(1746)								if ((( (::String)(::Reflect_obj::field(conf->attr,HX_("autojoin",d9,f6,b1,3e))) ) != HX_("1",31,00,00,00))) {
-HXLINE(1746)									_hx_tmp1 = (( (::String)(::Reflect_obj::field(conf->attr,HX_("autojoin",d9,f6,b1,3e))) ) == HX_("true",4e,a7,03,4d));
+HXLINE(1778)								bool _hx_tmp;
+HXDLIN(1778)								bool _hx_tmp1;
+HXDLIN(1778)								if ((( (::String)(::Reflect_obj::field(conf->attr,HX_("autojoin",d9,f6,b1,3e))) ) != HX_("1",31,00,00,00))) {
+HXLINE(1778)									_hx_tmp1 = (( (::String)(::Reflect_obj::field(conf->attr,HX_("autojoin",d9,f6,b1,3e))) ) == HX_("true",4e,a7,03,4d));
             								}
             								else {
-HXLINE(1746)									_hx_tmp1 = true;
+HXLINE(1778)									_hx_tmp1 = true;
             								}
-HXDLIN(1746)								if (!(_hx_tmp1)) {
-HXLINE(1746)									_hx_tmp = !(caps->isChannel(( (::String)(::Reflect_obj::field(item->attr,HX_("id",db,5b,00,00))) )));
+HXDLIN(1778)								if (!(_hx_tmp1)) {
+HXLINE(1778)									_hx_tmp = !(caps->isChannel(( (::String)(::Reflect_obj::field(item->attr,HX_("id",db,5b,00,00))) )));
             								}
             								else {
-HXLINE(1746)									_hx_tmp = true;
+HXLINE(1778)									_hx_tmp = true;
             								}
-HXDLIN(1746)								if (_hx_tmp) {
-HXLINE(1746)									return 1;
+HXDLIN(1778)								if (_hx_tmp) {
+HXLINE(1778)									return 1;
             								}
             								else {
-HXLINE(1746)									return 2;
+HXLINE(1778)									return 2;
             								}
-HXDLIN(1746)								return null();
+HXDLIN(1778)								return null();
             							}
             							HX_END_LOCAL_FUNC1(return)
 
             							HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_7, ::borogove::Stanza,item) HXARGC(1)
             							void _hx_run( ::borogove::Chat chat){
-            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1749_bookmarksGet)
-HXLINE(1749)								chat->updateFromBookmark(item);
+            								HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1781_bookmarksGet)
+HXLINE(1781)								chat->updateFromBookmark(item);
             							}
             							HX_END_LOCAL_FUNC1((void))
 
-HXLINE(1736)							 ::borogove::Client _gthis2 = _gthis;
-HXDLIN(1736)							_gthis2->startChatWith(( (::String)(::Reflect_obj::field(item->attr,HX_("id",db,5b,00,00))) ), ::Dynamic(new _hx_Closure_6(item)), ::Dynamic(new _hx_Closure_7(item)));
+HXLINE(1768)							 ::borogove::Client _gthis2 = _gthis;
+HXDLIN(1768)							_gthis2->startChatWith(( (::String)(::Reflect_obj::field(item->attr,HX_("id",db,5b,00,00))) ), ::Dynamic(new _hx_Closure_6(item)), ::Dynamic(new _hx_Closure_7(item)));
             						}
             						else {
-HXLINE(1753)							chat->updateFromBookmark(item);
-HXLINE(1754)							chatsToUpdate->push(chat);
+HXLINE(1785)							chat->updateFromBookmark(item);
+HXLINE(1786)							chatsToUpdate->push(chat);
             						}
             					}
             				}
             			}
-HXLINE(1758)			::Dynamic _gthis3 = _gthis->persistence;
-HXDLIN(1758)			::borogove::Persistence_obj::storeChats(_gthis3,_gthis->accountId(),chatsToUpdate);
-HXLINE(1759)			callback();
+HXLINE(1790)			::Dynamic _gthis3 = _gthis->persistence;
+HXDLIN(1790)			::borogove::Persistence_obj::storeChats(_gthis3,_gthis->accountId(),chatsToUpdate);
+HXLINE(1791)			callback();
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1701_bookmarksGet)
-HXDLIN(1701)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1702)		 ::borogove::queries::BlocklistGet blockingGet =  ::borogove::queries::BlocklistGet_obj::__alloc( HX_CTX );
-HXLINE(1703)		blockingGet->onFinished( ::Dynamic(new _hx_Closure_0(_gthis,blockingGet)));
-HXLINE(1708)		this->sendQuery(blockingGet);
-HXLINE(1710)		 ::borogove::queries::PubsubGet mdsGet =  ::borogove::queries::PubsubGet_obj::__alloc( HX_CTX ,null(),HX_("urn:xmpp:mds:displayed:0",bd,60,cc,fb),null());
-HXLINE(1711)		mdsGet->onFinished( ::Dynamic(new _hx_Closure_5(_gthis,mdsGet)));
-HXLINE(1727)		this->sendQuery(mdsGet);
-HXLINE(1729)		 ::borogove::queries::PubsubGet pubsubGet =  ::borogove::queries::PubsubGet_obj::__alloc( HX_CTX ,null(),HX_("urn:xmpp:bookmarks:1",58,3c,53,7d),null());
-HXLINE(1730)		pubsubGet->onFinished( ::Dynamic(new _hx_Closure_8(_gthis,pubsubGet,callback)));
-HXLINE(1761)		this->sendQuery(pubsubGet);
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1733_bookmarksGet)
+HXDLIN(1733)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1734)		 ::borogove::queries::BlocklistGet blockingGet =  ::borogove::queries::BlocklistGet_obj::__alloc( HX_CTX );
+HXLINE(1735)		blockingGet->onFinished( ::Dynamic(new _hx_Closure_0(_gthis,blockingGet)));
+HXLINE(1740)		this->sendQuery(blockingGet);
+HXLINE(1742)		 ::borogove::queries::PubsubGet mdsGet =  ::borogove::queries::PubsubGet_obj::__alloc( HX_CTX ,null(),HX_("urn:xmpp:mds:displayed:0",bd,60,cc,fb),null());
+HXLINE(1743)		mdsGet->onFinished( ::Dynamic(new _hx_Closure_5(_gthis,mdsGet)));
+HXLINE(1759)		this->sendQuery(mdsGet);
+HXLINE(1761)		 ::borogove::queries::PubsubGet pubsubGet =  ::borogove::queries::PubsubGet_obj::__alloc( HX_CTX ,null(),HX_("urn:xmpp:bookmarks:1",58,3c,53,7d),null());
+HXLINE(1762)		pubsubGet->onFinished( ::Dynamic(new _hx_Closure_8(_gthis,pubsubGet,callback)));
+HXLINE(1793)		this->sendQuery(pubsubGet);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Client_obj,bookmarksGet,(void))
 
 void Client_obj::sync( ::Dynamic callback){
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1764_sync)
-HXDLIN(1764)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1765)		if (::Std_obj::isOfType(this->persistence,::hx::ClassOf< ::borogove::persistence::Dummy >())) {
-HXLINE(1766)			callback(true);
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1796_sync)
+HXDLIN(1796)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1797)		if (::Std_obj::isOfType(this->persistence,::hx::ClassOf< ::borogove::persistence::Dummy >())) {
+HXLINE(1798)			callback(true);
             		}
             		else {
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::Client,_gthis, ::Dynamic,callback) HXARGC(1)
             			void _hx_run(::String lastId){
-            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1768_sync)
-HXLINE(1768)				_gthis->doSync(callback,lastId);
+            				HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1800_sync)
+HXLINE(1800)				_gthis->doSync(callback,lastId);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-HXLINE(1768)			::Dynamic _hx_tmp = this->persistence;
-HXDLIN(1768)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::lastId(_hx_tmp,this->accountId(),null()), ::Dynamic(new _hx_Closure_0(_gthis,callback)),null());
+HXLINE(1800)			::Dynamic _hx_tmp = this->persistence;
+HXDLIN(1800)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::lastId(_hx_tmp,this->accountId(),null()), ::Dynamic(new _hx_Closure_0(_gthis,callback)),null());
             		}
             	}
 
@@ -5226,25 +5297,25 @@ HXDLIN(1768)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persist
 HX_DEFINE_DYNAMIC_FUNC1(Client_obj,sync,(void))
 
 void Client_obj::onMAMJMI(::String sid, ::borogove::Stanza stanza){
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1773_onMAMJMI)
-HXLINE(1774)		if (::hx::IsNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
-HXLINE(1774)			return;
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1805_onMAMJMI)
+HXLINE(1806)		if (::hx::IsNull( ( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ) )) {
+HXLINE(1806)			return;
             		}
-HXLINE(1775)		 ::borogove::JID from = ::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
-HXLINE(1776)		 ::borogove::DirectChat chat = this->getDirectChat(from->asBare()->asString(),null());
-HXLINE(1777)		if (chat->jingleSessions->exists(sid)) {
-HXLINE(1777)			return;
+HXLINE(1807)		 ::borogove::JID from = ::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
+HXLINE(1808)		 ::borogove::DirectChat chat = this->getDirectChat(from->asBare()->asString(),null());
+HXLINE(1809)		if (chat->jingleSessions->exists(sid)) {
+HXLINE(1809)			return;
             		}
-HXLINE(1779)		if (::hx::IsNull( stanza->getChild(HX_("propose",fe,fe,e9,f9),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07)) )) {
-HXLINE(1779)			return;
+HXLINE(1811)		if (::hx::IsNull( stanza->getChild(HX_("propose",fe,fe,e9,f9),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07)) )) {
+HXLINE(1811)			return;
             		}
-HXLINE(1780)		 ::borogove::calls::IncomingProposedSession session =  ::borogove::calls::IncomingProposedSession_obj::__alloc( HX_CTX ,::hx::ObjectPtr<OBJ_>(this),from,sid);
-HXLINE(1781)		{
-HXLINE(1781)			::Dynamic this1 = chat->jingleSessions;
-HXDLIN(1781)			( ( ::haxe::ds::StringMap)(this1) )->set(session->get_sid(),session);
+HXLINE(1812)		 ::borogove::calls::IncomingProposedSession session =  ::borogove::calls::IncomingProposedSession_obj::__alloc( HX_CTX ,::hx::ObjectPtr<OBJ_>(this),from,sid);
+HXLINE(1813)		{
+HXLINE(1813)			::Dynamic this1 = chat->jingleSessions;
+HXDLIN(1813)			( ( ::haxe::ds::StringMap)(this1) )->set(session->get_sid(),session);
             		}
-HXLINE(1782)		this->chatActivity(chat,null());
-HXLINE(1783)		session->ring();
+HXLINE(1814)		this->chatActivity(chat,null());
+HXLINE(1815)		session->ring();
             	}
 
 
@@ -5253,9 +5324,9 @@ HX_DEFINE_DYNAMIC_FUNC2(Client_obj,onMAMJMI,(void))
 void Client_obj::doSync( ::Dynamic callback,::String lastId){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(2)
             		 ::borogove::ChatMessageBuilder _hx_run( ::borogove::ChatMessageBuilder builder, ::borogove::Stanza stanza){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1797_doSync)
-HXLINE(1798)			builder->syncPoint = true;
-HXLINE(1799)			return builder;
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1829_doSync)
+HXLINE(1830)			builder->syncPoint = true;
+HXLINE(1831)			return builder;
             		}
             		HX_END_LOCAL_FUNC2(return)
 
@@ -5263,48 +5334,48 @@ HXLINE(1799)			return builder;
             		void _hx_run( ::Dynamic messageList){
             			HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_6, ::borogove::Client,_gthis, ::haxe::ds::StringMap,chatIds, ::borogove::MessageSync,sync1, ::Dynamic,callback) HXARGC(1)
             			void _hx_run(::Array< ::Dynamic> results){
-            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1833_doSync)
-HXLINE(1834)				{
-HXLINE(1834)					int _g = 0;
-HXDLIN(1834)					while((_g < results->length)){
-HXLINE(1834)						::Array< ::Dynamic> messages = results->__get(_g).StaticCast< ::Array< ::Dynamic> >();
-HXDLIN(1834)						_g = (_g + 1);
-HXLINE(1835)						if (::hx::IsNotNull( messages )) {
-HXLINE(1836)							int _g1 = 0;
-HXDLIN(1836)							while((_g1 < messages->length)){
-HXLINE(1836)								 ::borogove::ChatMessage message = messages->__get(_g1).StaticCast<  ::borogove::ChatMessage >();
-HXDLIN(1836)								_g1 = (_g1 + 1);
-HXLINE(1837)								_gthis->trigger(HX_("message/sync",e3,76,a8,1f),message);
+            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1865_doSync)
+HXLINE(1866)				{
+HXLINE(1866)					int _g = 0;
+HXDLIN(1866)					while((_g < results->length)){
+HXLINE(1866)						::Array< ::Dynamic> messages = results->__get(_g).StaticCast< ::Array< ::Dynamic> >();
+HXDLIN(1866)						_g = (_g + 1);
+HXLINE(1867)						if (::hx::IsNotNull( messages )) {
+HXLINE(1868)							int _g1 = 0;
+HXDLIN(1868)							while((_g1 < messages->length)){
+HXLINE(1868)								 ::borogove::ChatMessage message = messages->__get(_g1).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN(1868)								_g1 = (_g1 + 1);
+HXLINE(1869)								_gthis->trigger(HX_("message/sync",e3,76,a8,1f),message);
             							}
             						}
             					}
             				}
-HXLINE(1842)				if (sync1->hasMore()) {
-HXLINE(1843)					sync1->fetchNext();
+HXLINE(1874)				if (sync1->hasMore()) {
+HXLINE(1875)					sync1->fetchNext();
             				}
             				else {
-HXLINE(1846)					{
-HXLINE(1846)						::Dynamic this1 = sync1->jmi;
-HXDLIN(1846)						 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(this1);
-HXDLIN(1846)						while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE(1846)							::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN(1846)							 ::borogove::Stanza _g_value = ( ( ::borogove::Stanza)(::haxe::IMap_obj::get(this1,key)) );
-HXLINE(1847)							_gthis->onMAMJMI(key,_g_value);
+HXLINE(1878)					{
+HXLINE(1878)						::Dynamic this1 = sync1->jmi;
+HXDLIN(1878)						 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(this1);
+HXDLIN(1878)						while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE(1878)							::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN(1878)							 ::borogove::Stanza _g_value = ( ( ::borogove::Stanza)(::haxe::IMap_obj::get(this1,key)) );
+HXLINE(1879)							_gthis->onMAMJMI(key,_g_value);
             						}
             					}
-HXLINE(1850)					{
-HXLINE(1850)						::Dynamic map = chatIds;
-HXDLIN(1850)						 ::Dynamic _g_keys1 = ::haxe::IMap_obj::keys(map);
-HXDLIN(1850)						while(( (bool)(_g_keys1->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE(1850)							::String key1 = ( (::String)(_g_keys1->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN(1850)							::haxe::IMap_obj::get(map,key1);
-HXLINE(1853)							if (::hx::IsNull( _gthis->getChat(key1) )) {
-HXLINE(1853)								_gthis->getDirectChat(key1,null());
+HXLINE(1882)					{
+HXLINE(1882)						::Dynamic map = chatIds;
+HXDLIN(1882)						 ::Dynamic _g_keys1 = ::haxe::IMap_obj::keys(map);
+HXDLIN(1882)						while(( (bool)(_g_keys1->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE(1882)							::String key1 = ( (::String)(_g_keys1->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN(1882)							::haxe::IMap_obj::get(map,key1);
+HXLINE(1885)							if (::hx::IsNull( _gthis->getChat(key1) )) {
+HXLINE(1885)								_gthis->getDirectChat(key1,null());
             							}
             						}
             					}
-HXLINE(1855)					if (::hx::IsNotNull( callback )) {
-HXLINE(1855)						callback(true);
+HXLINE(1887)					if (::hx::IsNotNull( callback )) {
+HXLINE(1887)						callback(true);
             					}
             				}
             			}
@@ -5312,64 +5383,64 @@ HXLINE(1855)						callback(true);
 
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_7, ::Dynamic,callback) HXARGC(1)
             			void _hx_run( ::Dynamic e){
-            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1858_doSync)
-HXLINE(1859)				 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
-HXDLIN(1859)				::String _hx_tmp1;
-HXDLIN(1859)				if (::hx::IsNull( e )) {
-HXLINE(1859)					_hx_tmp1 = HX_("null",87,9e,0e,49);
+            				HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1890_doSync)
+HXLINE(1891)				 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
+HXDLIN(1891)				::String _hx_tmp1;
+HXDLIN(1891)				if (::hx::IsNull( e )) {
+HXLINE(1891)					_hx_tmp1 = HX_("null",87,9e,0e,49);
             				}
             				else {
-HXLINE(1859)					_hx_tmp1 = ::Std_obj::string(e);
+HXLINE(1891)					_hx_tmp1 = ::Std_obj::string(e);
             				}
-HXDLIN(1859)				_hx_tmp(HX_("SYNC: error",67,8e,34,8a), ::Dynamic(::hx::Anon_obj::Create(5)
+HXDLIN(1891)				_hx_tmp(HX_("SYNC: error",67,8e,34,8a), ::Dynamic(::hx::Anon_obj::Create(5)
             					->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Client",18,dc,e6,c0))
             					->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,_hx_tmp1))
             					->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("doSync",86,5f,63,1c))
             					->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Client.hx",85,7d,15,8e))
-            					->setFixed(4,HX_("lineNumber",dd,81,22,76),1859)));
-HXLINE(1860)				callback(false);
+            					->setFixed(4,HX_("lineNumber",dd,81,22,76),1891)));
+HXLINE(1892)				callback(false);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1802_doSync)
-HXLINE(1803)			::Array< ::Dynamic> promises = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(1804)			::Array< ::Dynamic> chatMessages = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(1805)			{
-HXLINE(1805)				int _g = 0;
-HXDLIN(1805)				::Array< ::Dynamic> _g1 = ( (::Array< ::Dynamic>)(messageList->__Field(HX_("messages",cc,d8,fd,34),::hx::paccDynamic)) );
-HXDLIN(1805)				while((_g < _g1->length)){
-HXLINE(1805)					 ::borogove::Message m = _g1->__get(_g).StaticCast<  ::borogove::Message >();
-HXDLIN(1805)					_g = (_g + 1);
-HXLINE(1806)					{
-HXLINE(1806)						 ::borogove::MessageStanza _g2 = m->parsed;
-HXDLIN(1806)						switch((int)(_g2->_hx_getIndex())){
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1834_doSync)
+HXLINE(1835)			::Array< ::Dynamic> promises = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1836)			::Array< ::Dynamic> chatMessages = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1837)			{
+HXLINE(1837)				int _g = 0;
+HXDLIN(1837)				::Array< ::Dynamic> _g1 = ( (::Array< ::Dynamic>)(messageList->__Field(HX_("messages",cc,d8,fd,34),::hx::paccDynamic)) );
+HXDLIN(1837)				while((_g < _g1->length)){
+HXLINE(1837)					 ::borogove::Message m = _g1->__get(_g).StaticCast<  ::borogove::Message >();
+HXDLIN(1837)					_g = (_g + 1);
+HXLINE(1838)					{
+HXLINE(1838)						 ::borogove::MessageStanza _g2 = m->parsed;
+HXDLIN(1838)						switch((int)(_g2->_hx_getIndex())){
             							case (int)0: {
             								HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             								::Array< ::Dynamic> _hx_run( ::borogove::ChatMessage m){
-            									HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1824_doSync)
-HXLINE(1824)									return ::Array_obj< ::Dynamic>::__new(1)->init(0,m);
+            									HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1856_doSync)
+HXLINE(1856)									return ::Array_obj< ::Dynamic>::__new(1)->init(0,m);
             								}
             								HX_END_LOCAL_FUNC1(return)
 
             								HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_2) HXARGC(1)
             								::Array< ::Dynamic> _hx_run( ::Dynamic _){
-            									HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1824_doSync)
-HXLINE(1824)									return ::Array_obj< ::Dynamic>::__new(0);
+            									HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1856_doSync)
+HXLINE(1856)									return ::Array_obj< ::Dynamic>::__new(0);
             								}
             								HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1819)								::Dynamic _gthis1 = _gthis->persistence;
-HXLINE(1820)								::String _hx_tmp = _gthis->accountId();
-HXLINE(1819)								promises->push(::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::updateMessageStatus(_gthis1,_hx_tmp,_g2->_hx_getString(0),3,_g2->_hx_getObject(1).StaticCast<  ::borogove::Stanza >()->getErrorText()), ::Dynamic(new _hx_Closure_1()), ::Dynamic(new _hx_Closure_2())));
+HXLINE(1851)								::Dynamic _gthis1 = _gthis->persistence;
+HXLINE(1852)								::String _hx_tmp = _gthis->accountId();
+HXLINE(1851)								promises->push(::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::updateMessageStatus(_gthis1,_hx_tmp,_g2->_hx_getString(0),3,_g2->_hx_getObject(1).StaticCast<  ::borogove::Stanza >()->getErrorText()), ::Dynamic(new _hx_Closure_1()), ::Dynamic(new _hx_Closure_2())));
             							}
             							break;
             							case (int)1: {
-HXLINE(1807)								 ::borogove::ChatMessage _g3 = _g2->_hx_getObject(0).StaticCast<  ::borogove::ChatMessage >();
-HXDLIN(1807)								{
-HXLINE(1808)									chatMessages->push(_g3);
-HXLINE(1809)									if ((_g3->type == 0)) {
-HXLINE(1809)										::String k = _g3->chatId();
-HXDLIN(1809)										chatIds->set(k,true);
+HXLINE(1839)								 ::borogove::ChatMessage _g3 = _g2->_hx_getObject(0).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN(1839)								{
+HXLINE(1840)									chatMessages->push(_g3);
+HXLINE(1841)									if ((_g3->type == 0)) {
+HXLINE(1841)										::String k = _g3->chatId();
+HXDLIN(1841)										chatIds->set(k,true);
             									}
             								}
             							}
@@ -5379,37 +5450,37 @@ HXDLIN(1809)										chatIds->set(k,true);
             								void _hx_run( ::Dynamic resolve, ::Dynamic reject){
             									HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_3, ::Dynamic,resolve) HXARGC(1)
             									void _hx_run( ::borogove::ChatMessage _){
-            										HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1816_doSync)
-HXLINE(1816)										resolve(null());
+            										HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1848_doSync)
+HXLINE(1848)										resolve(null());
             									}
             									HX_END_LOCAL_FUNC1((void))
 
-            									HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1816_doSync)
-HXLINE(1816)									::thenshim::_Promise::Promise_Impl__obj::then(_gthis->moderateMessage(action), ::Dynamic(new _hx_Closure_3(resolve)),null());
+            									HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1848_doSync)
+HXLINE(1848)									::thenshim::_Promise::Promise_Impl__obj::then(_gthis->moderateMessage(action), ::Dynamic(new _hx_Closure_3(resolve)),null());
             								}
             								HX_END_LOCAL_FUNC2((void))
 
-HXLINE(1814)								 ::borogove::ModerationAction action = _g2->_hx_getObject(0).StaticCast<  ::borogove::ModerationAction >();
-HXLINE(1815)								promises->push(::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_4(_gthis,action))));
+HXLINE(1846)								 ::borogove::ModerationAction action = _g2->_hx_getObject(0).StaticCast<  ::borogove::ModerationAction >();
+HXLINE(1847)								promises->push(::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_4(_gthis,action))));
             							}
             							break;
             							case (int)3: {
             								HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_5) HXARGC(1)
             								::Dynamic _hx_run( ::borogove::ChatMessage _){
-            									HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1812_doSync)
-HXLINE(1812)									return null();
+            									HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1844_doSync)
+HXLINE(1844)									return null();
             								}
             								HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1812)								::Dynamic _gthis2 = _gthis->persistence;
-HXLINE(1811)								promises->push(::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeReaction(_gthis2,_gthis->accountId(),_g2->_hx_getObject(0).StaticCast<  ::borogove::ReactionUpdate >()), ::Dynamic(new _hx_Closure_5()),null()));
+HXLINE(1844)								::Dynamic _gthis2 = _gthis->persistence;
+HXLINE(1843)								promises->push(::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeReaction(_gthis2,_gthis->accountId(),_g2->_hx_getObject(0).StaticCast<  ::borogove::ReactionUpdate >()), ::Dynamic(new _hx_Closure_5()),null()));
             							}
             							break;
             							case (int)4: {
-HXLINE(1826)								 ::borogove::Client _gthis3 = _gthis;
-HXDLIN(1826)								::String m1 = m->chatId;
-HXDLIN(1826)								 ::borogove::Chat _hx_tmp1 = _gthis->getChat(m->chatId);
-HXDLIN(1826)								_gthis3->mucInvite(m1,_hx_tmp1,m->senderId,m->threadId,_g2->_hx_getString(0),_g2->_hx_getString(1),_g2->_hx_getString(2),_g2->_hx_getString(3));
+HXLINE(1858)								 ::borogove::Client _gthis3 = _gthis;
+HXDLIN(1858)								::String m1 = m->chatId;
+HXDLIN(1858)								 ::borogove::Chat _hx_tmp1 = _gthis->getChat(m->chatId);
+HXDLIN(1858)								_gthis3->mucInvite(m1,_hx_tmp1,m->senderId,m->threadId,_g2->_hx_getString(0),_g2->_hx_getString(1),_g2->_hx_getString(2),_g2->_hx_getString(3));
             							}
             							break;
             							default:{
@@ -5418,82 +5489,82 @@ HXDLIN(1826)								_gthis3->mucInvite(m1,_hx_tmp1,m->senderId,m->threadId,_g2->
             					}
             				}
             			}
-HXLINE(1831)			::Dynamic _gthis4 = _gthis->persistence;
-HXDLIN(1831)			promises->push(::borogove::Persistence_obj::storeMessages(_gthis4,_gthis->accountId(),chatMessages));
-HXLINE(1832)			::haxe::Log_obj::trace(HX_("SYNC: MAM page wait for writes",ad,4c,95,21),::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),1832,HX_("borogove.Client",18,dc,e6,c0),HX_("doSync",86,5f,63,1c)));
-HXLINE(1833)			::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(promises), ::Dynamic(new _hx_Closure_6(_gthis,chatIds,sync1,callback)), ::Dynamic(new _hx_Closure_7(callback)));
+HXLINE(1863)			::Dynamic _gthis4 = _gthis->persistence;
+HXDLIN(1863)			promises->push(::borogove::Persistence_obj::storeMessages(_gthis4,_gthis->accountId(),chatMessages));
+HXLINE(1864)			::haxe::Log_obj::trace(HX_("SYNC: MAM page wait for writes",ad,4c,95,21),::hx::SourceInfo(HX_("borogove/Client.hx",85,7d,15,8e),1864,HX_("borogove.Client",18,dc,e6,c0),HX_("doSync",86,5f,63,1c)));
+HXLINE(1865)			::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(promises), ::Dynamic(new _hx_Closure_6(_gthis,chatIds,sync1,callback)), ::Dynamic(new _hx_Closure_7(callback)));
             		}
             		HX_END_LOCAL_FUNC1((void))
 
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_9, ::borogove::Client,_gthis,::String,lastId, ::Dynamic,callback) HXARGC(1)
             		void _hx_run( ::borogove::Stanza stanza){
-            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1864_doSync)
-HXLINE(1864)			if (::hx::IsNotNull( lastId )) {
-HXLINE(1866)				_gthis->doSync(callback,null());
+            			HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1896_doSync)
+HXLINE(1896)			if (::hx::IsNotNull( lastId )) {
+HXLINE(1898)				_gthis->doSync(callback,null());
             			}
             			else {
-HXLINE(1868)				::haxe::Log_obj::trace(HX_("SYNC: error",67,8e,34,8a), ::Dynamic(::hx::Anon_obj::Create(5)
+HXLINE(1900)				::haxe::Log_obj::trace(HX_("SYNC: error",67,8e,34,8a), ::Dynamic(::hx::Anon_obj::Create(5)
             					->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.Client",18,dc,e6,c0))
             					->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,stanza))
             					->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("doSync",86,5f,63,1c))
             					->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Client.hx",85,7d,15,8e))
-            					->setFixed(4,HX_("lineNumber",dd,81,22,76),1868)));
-HXLINE(1869)				if (::hx::IsNotNull( callback )) {
-HXLINE(1869)					callback(false);
+            					->setFixed(4,HX_("lineNumber",dd,81,22,76),1900)));
+HXLINE(1901)				if (::hx::IsNotNull( callback )) {
+HXLINE(1901)					callback(false);
             				}
             			}
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1787_doSync)
-HXDLIN(1787)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1788)		::String thirtyDaysAgo = ::borogove::Date_obj::format(::Date_obj::fromTime((::Date_obj::now()->getTime() + ((Float)-2592000000.))));
-HXLINE(1794)		 ::Dynamic sync;
-HXDLIN(1794)		if (::hx::IsNull( lastId )) {
-HXLINE(1794)			sync =  ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_GC_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1819_doSync)
+HXDLIN(1819)		 ::borogove::Client _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1820)		::String thirtyDaysAgo = ::borogove::Date_obj::format(::Date_obj::fromTime((::Date_obj::now()->getTime() + ((Float)-2592000000.))));
+HXLINE(1826)		 ::Dynamic sync;
+HXDLIN(1826)		if (::hx::IsNull( lastId )) {
+HXLINE(1826)			sync =  ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("startTime",8f,45,f0,05),thirtyDaysAgo));
             		}
             		else {
-HXLINE(1794)			sync =  ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(1826)			sync =  ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("page",4f,da,51,4a), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("after",1c,66,a2,1d),lastId))));
             		}
-HXLINE(1791)		 ::borogove::MessageSync sync1 =  ::borogove::MessageSync_obj::__alloc( HX_CTX ,::hx::ObjectPtr<OBJ_>(this),this->stream,sync,null());
-HXLINE(1796)		sync1->setNewestPageFirst(false);
-HXLINE(1797)		sync1->addContext( ::Dynamic(new _hx_Closure_0()));
-HXLINE(1801)		 ::haxe::ds::StringMap chatIds =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE(1802)		sync1->onMessages( ::Dynamic(new _hx_Closure_8(_gthis,chatIds,sync1,callback)));
-HXLINE(1863)		sync1->onError( ::Dynamic(new _hx_Closure_9(_gthis,lastId,callback)));
-HXLINE(1872)		sync1->fetchNext();
+HXLINE(1823)		 ::borogove::MessageSync sync1 =  ::borogove::MessageSync_obj::__alloc( HX_CTX ,::hx::ObjectPtr<OBJ_>(this),this->stream,sync,null());
+HXLINE(1828)		sync1->setNewestPageFirst(false);
+HXLINE(1829)		sync1->addContext( ::Dynamic(new _hx_Closure_0()));
+HXLINE(1833)		 ::haxe::ds::StringMap chatIds =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE(1834)		sync1->onMessages( ::Dynamic(new _hx_Closure_8(_gthis,chatIds,sync1,callback)));
+HXLINE(1895)		sync1->onError( ::Dynamic(new _hx_Closure_9(_gthis,lastId,callback)));
+HXLINE(1904)		sync1->fetchNext();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Client_obj,doSync,(void))
 
 void Client_obj::pingAllChannels(bool refresh){
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1876_pingAllChannels)
-HXDLIN(1876)		int _g = 0;
-HXDLIN(1876)		::Array< ::Dynamic> _g1 = this->getChats();
-HXDLIN(1876)		while((_g < _g1->length)){
-HXDLIN(1876)			 ::borogove::Chat chat = _g1->__get(_g).StaticCast<  ::borogove::Chat >();
-HXDLIN(1876)			_g = (_g + 1);
-HXLINE(1877)			 ::borogove::Channel channel = ( ( ::borogove::Channel)(::Std_obj::downcast(chat,::hx::ClassOf< ::borogove::Channel >())) );
-HXLINE(1878)			if (::hx::IsNotNull( channel )) {
-HXLINE(1878)				bool _hx_tmp;
-HXDLIN(1878)				if (!(refresh)) {
-HXLINE(1878)					 ::borogove::Caps _hx_tmp1;
-HXDLIN(1878)					if (::hx::IsNotNull( channel )) {
-HXLINE(1878)						_hx_tmp1 = channel->disco;
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1908_pingAllChannels)
+HXDLIN(1908)		int _g = 0;
+HXDLIN(1908)		::Array< ::Dynamic> _g1 = this->getChats();
+HXDLIN(1908)		while((_g < _g1->length)){
+HXDLIN(1908)			 ::borogove::Chat chat = _g1->__get(_g).StaticCast<  ::borogove::Chat >();
+HXDLIN(1908)			_g = (_g + 1);
+HXLINE(1909)			 ::borogove::Channel channel = ( ( ::borogove::Channel)(::Std_obj::downcast(chat,::hx::ClassOf< ::borogove::Channel >())) );
+HXLINE(1910)			if (::hx::IsNotNull( channel )) {
+HXLINE(1910)				bool _hx_tmp;
+HXDLIN(1910)				if (!(refresh)) {
+HXLINE(1910)					 ::borogove::Caps _hx_tmp1;
+HXDLIN(1910)					if (::hx::IsNotNull( channel )) {
+HXLINE(1910)						_hx_tmp1 = channel->disco;
             					}
             					else {
-HXLINE(1878)						_hx_tmp1 = null();
+HXLINE(1910)						_hx_tmp1 = null();
             					}
-HXDLIN(1878)					_hx_tmp = ::hx::IsNull( _hx_tmp1 );
+HXDLIN(1910)					_hx_tmp = ::hx::IsNull( _hx_tmp1 );
             				}
             				else {
-HXLINE(1878)					_hx_tmp = true;
+HXLINE(1910)					_hx_tmp = true;
             				}
-HXDLIN(1878)				channel->selfPing(_hx_tmp);
+HXDLIN(1910)				channel->selfPing(_hx_tmp);
             			}
             		}
             	}
@@ -5502,34 +5573,34 @@ HXDLIN(1878)				channel->selfPing(_hx_tmp);
 HX_DEFINE_DYNAMIC_FUNC1(Client_obj,pingAllChannels,(void))
 
 void Client_obj::joinAllChannels(){
-            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1883_joinAllChannels)
-HXDLIN(1883)		int _g = 0;
-HXDLIN(1883)		::Array< ::Dynamic> _g1 = this->getChats();
-HXDLIN(1883)		while((_g < _g1->length)){
-HXDLIN(1883)			 ::borogove::Chat chat = _g1->__get(_g).StaticCast<  ::borogove::Chat >();
-HXDLIN(1883)			_g = (_g + 1);
-HXLINE(1884)			 ::borogove::Channel channel = ( ( ::borogove::Channel)(::Std_obj::downcast(chat,::hx::ClassOf< ::borogove::Channel >())) );
-HXLINE(1885)			if (::hx::IsNotNull( channel )) {
-HXLINE(1886)				if ((channel->disco->identities->length < 1)) {
+            	HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1915_joinAllChannels)
+HXDLIN(1915)		int _g = 0;
+HXDLIN(1915)		::Array< ::Dynamic> _g1 = this->getChats();
+HXDLIN(1915)		while((_g < _g1->length)){
+HXDLIN(1915)			 ::borogove::Chat chat = _g1->__get(_g).StaticCast<  ::borogove::Chat >();
+HXDLIN(1915)			_g = (_g + 1);
+HXLINE(1916)			 ::borogove::Channel channel = ( ( ::borogove::Channel)(::Std_obj::downcast(chat,::hx::ClassOf< ::borogove::Channel >())) );
+HXLINE(1917)			if (::hx::IsNotNull( channel )) {
+HXLINE(1918)				if ((channel->disco->identities->length < 1)) {
             					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::Channel,channel) HXARGC(0)
             					void _hx_run(){
-            						HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1888_joinAllChannels)
-HXLINE(1888)						channel->join();
+            						HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1920_joinAllChannels)
+HXLINE(1920)						channel->join();
             					}
             					HX_END_LOCAL_FUNC0((void))
 
-HXLINE(1887)					channel->refreshDisco( ::Dynamic(new _hx_Closure_0(channel)));
+HXLINE(1919)					channel->refreshDisco( ::Dynamic(new _hx_Closure_0(channel)));
             				}
             				else {
             					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::borogove::Channel,channel) HXARGC(0)
             					void _hx_run(){
-            						HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1892_joinAllChannels)
-HXLINE(1892)						channel->refreshDisco(null());
+            						HX_STACKFRAME(&_hx_pos_a492fd7f83fa2dd6_1924_joinAllChannels)
+HXLINE(1924)						channel->refreshDisco(null());
             					}
             					HX_END_LOCAL_FUNC0((void))
 
-HXLINE(1891)					channel->join();
-HXLINE(1892)					::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_1(channel)),30000);
+HXLINE(1923)					channel->join();
+HXLINE(1924)					::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_1(channel)),30000);
             				}
             			}
             		}
@@ -5570,9 +5641,12 @@ void Client_obj::__Mark(HX_MARK_PARAMS)
 	HX_MARK_MEMBER_NAME(token,"token");
 	HX_MARK_MEMBER_NAME(fastCount,"fastCount");
 	HX_MARK_MEMBER_NAME(pendingCaps,"pendingCaps");
+	HX_MARK_MEMBER_NAME(brokenAvatars,"brokenAvatars");
 	HX_MARK_MEMBER_NAME(encryptionPolicy,"encryptionPolicy");
 	HX_MARK_MEMBER_NAME(inSync,"inSync");
 	HX_MARK_MEMBER_NAME(enabledPushData,"enabledPushData");
+	HX_MARK_MEMBER_NAME(lazyQueryTimer,"lazyQueryTimer");
+	HX_MARK_MEMBER_NAME(queriesToSend,"queriesToSend");
 	 ::borogove::EventEmitter_obj::__Mark(HX_MARK_ARG);
 	HX_MARK_END_CLASS();
 }
@@ -5590,9 +5664,12 @@ void Client_obj::__Visit(HX_VISIT_PARAMS)
 	HX_VISIT_MEMBER_NAME(token,"token");
 	HX_VISIT_MEMBER_NAME(fastCount,"fastCount");
 	HX_VISIT_MEMBER_NAME(pendingCaps,"pendingCaps");
+	HX_VISIT_MEMBER_NAME(brokenAvatars,"brokenAvatars");
 	HX_VISIT_MEMBER_NAME(encryptionPolicy,"encryptionPolicy");
 	HX_VISIT_MEMBER_NAME(inSync,"inSync");
 	HX_VISIT_MEMBER_NAME(enabledPushData,"enabledPushData");
+	HX_VISIT_MEMBER_NAME(lazyQueryTimer,"lazyQueryTimer");
+	HX_VISIT_MEMBER_NAME(queriesToSend,"queriesToSend");
 	 ::borogove::EventEmitter_obj::__Visit(HX_VISIT_ARG);
 }
 
@@ -5655,12 +5732,18 @@ void Client_obj::__Visit(HX_VISIT_PARAMS)
 	case 13:
 		if (HX_FIELD_EQ(inName,"sendAvailable") ) { return ::hx::Val( sendAvailable ); }
 		if (HX_FIELD_EQ(inName,"fastMechanism") ) { return ::hx::Val( fastMechanism ); }
+		if (HX_FIELD_EQ(inName,"brokenAvatars") ) { return ::hx::Val( brokenAvatars ); }
 		if (HX_FIELD_EQ(inName,"getDirectChat") ) { return ::hx::Val( getDirectChat_dyn() ); }
 		if (HX_FIELD_EQ(inName,"storeMessages") ) { return ::hx::Val( storeMessages_dyn() ); }
+		if (HX_FIELD_EQ(inName,"queriesToSend") ) { return ::hx::Val( queriesToSend ); }
+		if (HX_FIELD_EQ(inName,"sendQueryLazy") ) { return ::hx::Val( sendQueryLazy_dyn() ); }
 		if (HX_FIELD_EQ(inName,"getIceServers") ) { return ::hx::Val( getIceServers_dyn() ); }
 		if (HX_FIELD_EQ(inName,"startChatWith") ) { return ::hx::Val( startChatWith_dyn() ); }
 		if (HX_FIELD_EQ(inName,"serverBlocked") ) { return ::hx::Val( serverBlocked_dyn() ); }
 		break;
+	case 14:
+		if (HX_FIELD_EQ(inName,"lazyQueryTimer") ) { return ::hx::Val( lazyQueryTimer ); }
+		break;
 	case 15:
 		if (HX_FIELD_EQ(inName,"moderateMessage") ) { return ::hx::Val( moderateMessage_dyn() ); }
 		if (HX_FIELD_EQ(inName,"enabledPushData") ) { return ::hx::Val( enabledPushData ); }
@@ -5677,6 +5760,7 @@ void Client_obj::__Visit(HX_VISIT_PARAMS)
 		if (HX_FIELD_EQ(inName,"updateDisplayName") ) { return ::hx::Val( updateDisplayName_dyn() ); }
 		if (HX_FIELD_EQ(inName,"prepareAttachment") ) { return ::hx::Val( prepareAttachment_dyn() ); }
 		if (HX_FIELD_EQ(inName,"enablePush__fromC") ) { return ::hx::Val( enablePush__fromC_dyn() ); }
+		if (HX_FIELD_EQ(inName,"sendNextLazyQuery") ) { return ::hx::Val( sendNextLazyQuery_dyn() ); }
 		break;
 	case 18:
 		if (HX_FIELD_EQ(inName,"processLiveMessage") ) { return ::hx::Val( processLiveMessage_dyn() ); }
@@ -5755,6 +5839,11 @@ void Client_obj::__Visit(HX_VISIT_PARAMS)
 	case 13:
 		if (HX_FIELD_EQ(inName,"sendAvailable") ) { sendAvailable=inValue.Cast< bool >(); return inValue; }
 		if (HX_FIELD_EQ(inName,"fastMechanism") ) { fastMechanism=inValue.Cast< ::String >(); return inValue; }
+		if (HX_FIELD_EQ(inName,"brokenAvatars") ) { brokenAvatars=inValue.Cast<  ::haxe::ds::StringMap >(); return inValue; }
+		if (HX_FIELD_EQ(inName,"queriesToSend") ) { queriesToSend=inValue.Cast< ::Array< ::Dynamic> >(); return inValue; }
+		break;
+	case 14:
+		if (HX_FIELD_EQ(inName,"lazyQueryTimer") ) { lazyQueryTimer=inValue.Cast<  ::haxe::Timer >(); return inValue; }
 		break;
 	case 15:
 		if (HX_FIELD_EQ(inName,"enabledPushData") ) { enabledPushData=inValue.Cast<  ::Dynamic >(); return inValue; }
@@ -5778,9 +5867,12 @@ void Client_obj::__GetFields(Array< ::String> &outFields)
 	outFields->push(HX_("token",f9,82,2b,14));
 	outFields->push(HX_("fastCount",93,fc,67,a5));
 	outFields->push(HX_("pendingCaps",18,58,88,be));
+	outFields->push(HX_("brokenAvatars",65,ac,4f,eb));
 	outFields->push(HX_("encryptionPolicy",d5,f0,3c,e7));
 	outFields->push(HX_("inSync",e0,98,c5,88));
 	outFields->push(HX_("enabledPushData",c5,32,81,93));
+	outFields->push(HX_("lazyQueryTimer",31,55,56,27));
+	outFields->push(HX_("queriesToSend",69,0e,0c,ca));
 	super::__GetFields(outFields);
 };
 
@@ -5797,9 +5889,12 @@ static ::hx::StorageInfo Client_obj_sMemberStorageInfo[] = {
 	{::hx::fsString,(int)offsetof(Client_obj,token),HX_("token",f9,82,2b,14)},
 	{::hx::fsObject /*  ::Dynamic */ ,(int)offsetof(Client_obj,fastCount),HX_("fastCount",93,fc,67,a5)},
 	{::hx::fsObject /*  ::haxe::ds::StringMap */ ,(int)offsetof(Client_obj,pendingCaps),HX_("pendingCaps",18,58,88,be)},
+	{::hx::fsObject /*  ::haxe::ds::StringMap */ ,(int)offsetof(Client_obj,brokenAvatars),HX_("brokenAvatars",65,ac,4f,eb)},
 	{::hx::fsObject /*  ::borogove::EncryptionPolicy */ ,(int)offsetof(Client_obj,encryptionPolicy),HX_("encryptionPolicy",d5,f0,3c,e7)},
 	{::hx::fsBool,(int)offsetof(Client_obj,inSync),HX_("inSync",e0,98,c5,88)},
 	{::hx::fsObject /*  ::Dynamic */ ,(int)offsetof(Client_obj,enabledPushData),HX_("enabledPushData",c5,32,81,93)},
+	{::hx::fsObject /*  ::haxe::Timer */ ,(int)offsetof(Client_obj,lazyQueryTimer),HX_("lazyQueryTimer",31,55,56,27)},
+	{::hx::fsObject /* ::Array< ::Dynamic> */ ,(int)offsetof(Client_obj,queriesToSend),HX_("queriesToSend",69,0e,0c,ca)},
 	{ ::hx::fsUnknown, 0, null()}
 };
 static ::hx::StaticInfo *Client_obj_sStaticStorageInfo = 0;
@@ -5818,6 +5913,7 @@ static ::String Client_obj_sMemberFields[] = {
 	HX_("token",f9,82,2b,14),
 	HX_("fastCount",93,fc,67,a5),
 	HX_("pendingCaps",18,58,88,be),
+	HX_("brokenAvatars",65,ac,4f,eb),
 	HX_("encryptionPolicy",d5,f0,3c,e7),
 	HX_("inSync",e0,98,c5,88),
 	HX_("processLiveMessage",0c,f2,77,58),
@@ -5864,6 +5960,10 @@ static ::String Client_obj_sMemberFields[] = {
 	HX_("sortChats",5d,72,27,4e),
 	HX_("storeMessages",cd,f1,bd,e9),
 	HX_("sendQuery",a0,48,5a,1e),
+	HX_("lazyQueryTimer",31,55,56,27),
+	HX_("queriesToSend",69,0e,0c,ca),
+	HX_("sendNextLazyQuery",19,80,d1,a3),
+	HX_("sendQueryLazy",34,55,c1,7f),
 	HX_("publishWithOptions",a9,a4,65,0d),
 	HX_("sendStanza",5d,85,4d,a7),
 	HX_("sendPresence",a3,23,94,a7),
diff --git a/Sources/c_borogove/src/borogove/Command.cpp b/Sources/c_borogove/src/borogove/Command.cpp
index 68043a8..68f0951 100644
--- a/Sources/c_borogove/src/borogove/Command.cpp
+++ b/Sources/c_borogove/src/borogove/Command.cpp
@@ -45,9 +45,9 @@
 #endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_3f7d50174e74345f_26_new,"borogove.Command","new",0xdf975ad0,"borogove.Command.new","borogove/Command.hx",26,0xeb7c59e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ccb272382c704ccf_423_name__fromC,"borogove.Command","name__fromC",0xd4e227fe,"borogove.Command.name__fromC","HaxeCBridge.hx",423,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_ccb272382c704ccf_450_name__fromC,"borogove.Command","name__fromC",0xd4e227fe,"borogove.Command.name__fromC","HaxeCBridge.hx",450,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_3f7d50174e74345f_37_execute,"borogove.Command","execute",0xd1be8ca5,"borogove.Command.execute","borogove/Command.hx",37,0xeb7c59e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_ccb272382c704ccf_313_execute__fromC,"borogove.Command","execute__fromC",0xe6daf274,"borogove.Command.execute__fromC","HaxeCBridge.hx",313,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_ccb272382c704ccf_337_execute__fromC,"borogove.Command","execute__fromC",0xe6daf274,"borogove.Command.execute__fromC","HaxeCBridge.hx",337,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_3f7d50174e74345f_19_boot,"borogove.Command","boot",0xbcf11bc2,"borogove.Command.boot","borogove/Command.hx",19,0xeb7c59e1)
 namespace borogove{
 
@@ -83,8 +83,8 @@ bool Command_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 ::String Command_obj::name__fromC(){
-            	HX_STACKFRAME(&_hx_pos_ccb272382c704ccf_423_name__fromC)
-HXDLIN( 423)		return this->name;
+            	HX_STACKFRAME(&_hx_pos_ccb272382c704ccf_450_name__fromC)
+HXDLIN( 450)		return this->name;
             	}
 
 
@@ -99,42 +99,42 @@ HXDLIN(  37)		return  ::borogove::CommandSession_obj::__alloc( HX_CTX ,HX_("exec
 HX_DEFINE_DYNAMIC_FUNC0(Command_obj,execute,return )
 
 void Command_obj::execute__fromC(::cpp::Function< void  (void*,void*) > handler,void* handler__context){
-            	HX_STACKFRAME(&_hx_pos_ccb272382c704ccf_313_execute__fromC)
-HXDLIN( 313)		if (::hx::IsNull( handler )) {
-HXDLIN( 313)			this->execute();
+            	HX_STACKFRAME(&_hx_pos_ccb272382c704ccf_337_execute__fromC)
+HXDLIN( 337)		if (::hx::IsNull( handler )) {
+HXDLIN( 337)			this->execute();
             		}
             		else {
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (void* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
             			void _hx_run( ::borogove::CommandSession v){
-            				HX_STACKFRAME(&_hx_pos_ccb272382c704ccf_313_execute__fromC)
-HXDLIN( 313)				::cpp::Function< void  (void*,void*) > handler1 = handler;
-HXLINE( 297)				 ::Dynamic haxeObject = v;
-HXDLIN( 297)				void* ptr = haxeObject.mPtr;
-HXDLIN( 297)				::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 297)				{
-HXLINE( 297)					 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 297)					if (::hx::IsNull( store )) {
-HXLINE( 297)						store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            				HX_STACKFRAME(&_hx_pos_ccb272382c704ccf_337_execute__fromC)
+HXDLIN( 337)				::cpp::Function< void  (void*,void*) > handler1 = handler;
+HXLINE( 314)				 ::Dynamic haxeObject = v;
+HXDLIN( 314)				void* ptr = haxeObject.mPtr;
+HXDLIN( 314)				::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 314)				{
+HXLINE( 314)					 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 314)					if (::hx::IsNull( store )) {
+HXLINE( 314)						store =  ::Dynamic(::hx::Anon_obj::Create(2)
             							->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             							->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 297)						::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN( 314)						::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             					}
             					else {
-HXLINE( 297)						::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE( 314)						::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             					}
             				}
-HXLINE( 313)				handler1(ptr,handler__context);
+HXLINE( 337)				handler1(ptr,handler__context);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::cpp::Function< void  (void* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
             			void _hx_run( ::Dynamic e){
-            				HX_STACKFRAME(&_hx_pos_ccb272382c704ccf_313_execute__fromC)
-HXDLIN( 313)				handler(null(),handler__context);
+            				HX_STACKFRAME(&_hx_pos_ccb272382c704ccf_337_execute__fromC)
+HXDLIN( 337)				handler(null(),handler__context);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-HXDLIN( 313)			::thenshim::_Promise::Promise_Impl__obj::then(this->execute(), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
+HXDLIN( 337)			::thenshim::_Promise::Promise_Impl__obj::then(this->execute(), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
             		}
             	}
 
diff --git a/Sources/c_borogove/src/borogove/CommandSession.cpp b/Sources/c_borogove/src/borogove/CommandSession.cpp
index 9175015..d3d24de 100644
--- a/Sources/c_borogove/src/borogove/CommandSession.cpp
+++ b/Sources/c_borogove/src/borogove/CommandSession.cpp
@@ -60,17 +60,17 @@
 #endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_393ae15da757fdff_55_new,"borogove.CommandSession","new",0xed10110a,"borogove.CommandSession.new","borogove/Command.hx",55,0xeb7c59e1)
-HX_LOCAL_STACK_FRAME(_hx_pos_6429c0fb54981d0a_423_name__fromC,"borogove.CommandSession","name__fromC",0x85b2a838,"borogove.CommandSession.name__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_6429c0fb54981d0a_423_status__fromC,"borogove.CommandSession","status__fromC",0x7f652cb1,"borogove.CommandSession.status__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_6429c0fb54981d0a_397_actions__fromC,"borogove.CommandSession","actions__fromC",0x22fa21b2,"borogove.CommandSession.actions__fromC","HaxeCBridge.hx",397,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_6429c0fb54981d0a_397_forms__fromC,"borogove.CommandSession","forms__fromC",0x926e53c0,"borogove.CommandSession.forms__fromC","HaxeCBridge.hx",397,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_6429c0fb54981d0a_450_name__fromC,"borogove.CommandSession","name__fromC",0x85b2a838,"borogove.CommandSession.name__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_6429c0fb54981d0a_450_status__fromC,"borogove.CommandSession","status__fromC",0x7f652cb1,"borogove.CommandSession.status__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_6429c0fb54981d0a_424_actions__fromC,"borogove.CommandSession","actions__fromC",0x22fa21b2,"borogove.CommandSession.actions__fromC","HaxeCBridge.hx",424,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_6429c0fb54981d0a_424_forms__fromC,"borogove.CommandSession","forms__fromC",0x926e53c0,"borogove.CommandSession.forms__fromC","HaxeCBridge.hx",424,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_393ae15da757fdff_106_execute,"borogove.CommandSession","execute",0x4e07e7df,"borogove.CommandSession.execute","borogove/Command.hx",106,0xeb7c59e1)
 HX_LOCAL_STACK_FRAME(_hx_pos_393ae15da757fdff_103_execute,"borogove.CommandSession","execute",0x4e07e7df,"borogove.CommandSession.execute","borogove/Command.hx",103,0xeb7c59e1)
 HX_LOCAL_STACK_FRAME(_hx_pos_393ae15da757fdff_83_execute,"borogove.CommandSession","execute",0x4e07e7df,"borogove.CommandSession.execute","borogove/Command.hx",83,0xeb7c59e1)
 static const ::String _hx_array_data_36248418_10[] = {
 	HX_("prev",f3,be,5e,4a),HX_("next",f3,84,02,49),HX_("complete",b9,00,c8,7f),HX_("execute",35,0a,0d,cc),HX_("cancel",7a,ed,33,b8),
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_6429c0fb54981d0a_313_execute__fromC,"borogove.CommandSession","execute__fromC",0x59b0d27a,"borogove.CommandSession.execute__fromC","HaxeCBridge.hx",313,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_6429c0fb54981d0a_337_execute__fromC,"borogove.CommandSession","execute__fromC",0x59b0d27a,"borogove.CommandSession.execute__fromC","HaxeCBridge.hx",337,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_393ae15da757fdff_46_boot,"borogove.CommandSession","boot",0x7917d848,"borogove.CommandSession.boot","borogove/Command.hx",46,0xeb7c59e1)
 namespace borogove{
 
@@ -115,116 +115,116 @@ bool CommandSession_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 ::String CommandSession_obj::name__fromC(){
-            	HX_STACKFRAME(&_hx_pos_6429c0fb54981d0a_423_name__fromC)
-HXDLIN( 423)		return this->name;
+            	HX_STACKFRAME(&_hx_pos_6429c0fb54981d0a_450_name__fromC)
+HXDLIN( 450)		return this->name;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(CommandSession_obj,name__fromC,return )
 
 ::String CommandSession_obj::status__fromC(){
-            	HX_STACKFRAME(&_hx_pos_6429c0fb54981d0a_423_status__fromC)
-HXDLIN( 423)		return this->status;
+            	HX_STACKFRAME(&_hx_pos_6429c0fb54981d0a_450_status__fromC)
+HXDLIN( 450)		return this->status;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(CommandSession_obj,status__fromC,return )
 
 size_t CommandSession_obj::actions__fromC(void*** outPtr){
-            	HX_STACKFRAME(&_hx_pos_6429c0fb54981d0a_397_actions__fromC)
-HXDLIN( 397)		::Array< ::Dynamic> x = this->actions;
-HXDLIN( 397)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 397)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 397)			{
-HXDLIN( 397)				int _g = 0;
-HXDLIN( 397)				while((_g < x->length)){
-HXDLIN( 397)					 ::borogove::FormOption el = x->__get(_g).StaticCast<  ::borogove::FormOption >();
-HXDLIN( 397)					_g = (_g + 1);
-HXDLIN( 397)					{
-HXDLIN( 397)						 ::Dynamic haxeObject = el;
-HXDLIN( 397)						void* ptr = haxeObject.mPtr;
-HXDLIN( 397)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 397)						{
-HXDLIN( 397)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 397)							if (::hx::IsNull( store )) {
-HXDLIN( 397)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_6429c0fb54981d0a_424_actions__fromC)
+HXDLIN( 424)		::Array< ::Dynamic> x = this->actions;
+HXDLIN( 424)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 424)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 424)			{
+HXDLIN( 424)				int _g = 0;
+HXDLIN( 424)				while((_g < x->length)){
+HXDLIN( 424)					 ::borogove::FormOption el = x->__get(_g).StaticCast<  ::borogove::FormOption >();
+HXDLIN( 424)					_g = (_g + 1);
+HXDLIN( 424)					{
+HXDLIN( 424)						 ::Dynamic haxeObject = el;
+HXDLIN( 424)						void* ptr = haxeObject.mPtr;
+HXDLIN( 424)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 424)						{
+HXDLIN( 424)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 424)							if (::hx::IsNull( store )) {
+HXDLIN( 424)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
             									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             									->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 397)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN( 424)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             							}
             							else {
-HXDLIN( 397)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 424)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             							}
             						}
             					}
             				}
             			}
-HXDLIN( 397)			void** ptr1 = (void**)x->getBase();
-HXDLIN( 397)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 397)			{
-HXDLIN( 397)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 397)				if (::hx::IsNull( store1 )) {
-HXDLIN( 397)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 424)			void** ptr1 = (void**)x->getBase();
+HXDLIN( 424)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 424)			{
+HXDLIN( 424)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 424)				if (::hx::IsNull( store1 )) {
+HXDLIN( 424)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),x));
-HXDLIN( 397)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+HXDLIN( 424)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
             				}
             				else {
-HXDLIN( 397)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 424)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXDLIN( 397)			_hx_tmp->set_ref(ptr1);
+HXDLIN( 424)			_hx_tmp->set_ref(ptr1);
             		}
-HXDLIN( 397)		return ( (size_t)(x->length) );
+HXDLIN( 424)		return ( (size_t)(x->length) );
             	}
 
 
 size_t CommandSession_obj::forms__fromC(void*** outPtr){
-            	HX_STACKFRAME(&_hx_pos_6429c0fb54981d0a_397_forms__fromC)
-HXDLIN( 397)		::Array< ::Dynamic> x = this->forms;
-HXDLIN( 397)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 397)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 397)			{
-HXDLIN( 397)				int _g = 0;
-HXDLIN( 397)				while((_g < x->length)){
-HXDLIN( 397)					 ::borogove::Form el = x->__get(_g).StaticCast<  ::borogove::Form >();
-HXDLIN( 397)					_g = (_g + 1);
-HXDLIN( 397)					{
-HXDLIN( 397)						 ::Dynamic haxeObject = el;
-HXDLIN( 397)						void* ptr = haxeObject.mPtr;
-HXDLIN( 397)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 397)						{
-HXDLIN( 397)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 397)							if (::hx::IsNull( store )) {
-HXDLIN( 397)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_6429c0fb54981d0a_424_forms__fromC)
+HXDLIN( 424)		::Array< ::Dynamic> x = this->forms;
+HXDLIN( 424)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 424)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 424)			{
+HXDLIN( 424)				int _g = 0;
+HXDLIN( 424)				while((_g < x->length)){
+HXDLIN( 424)					 ::borogove::Form el = x->__get(_g).StaticCast<  ::borogove::Form >();
+HXDLIN( 424)					_g = (_g + 1);
+HXDLIN( 424)					{
+HXDLIN( 424)						 ::Dynamic haxeObject = el;
+HXDLIN( 424)						void* ptr = haxeObject.mPtr;
+HXDLIN( 424)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 424)						{
+HXDLIN( 424)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 424)							if (::hx::IsNull( store )) {
+HXDLIN( 424)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
             									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             									->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 397)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN( 424)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             							}
             							else {
-HXDLIN( 397)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 424)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             							}
             						}
             					}
             				}
             			}
-HXDLIN( 397)			void** ptr1 = (void**)x->getBase();
-HXDLIN( 397)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 397)			{
-HXDLIN( 397)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 397)				if (::hx::IsNull( store1 )) {
-HXDLIN( 397)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 424)			void** ptr1 = (void**)x->getBase();
+HXDLIN( 424)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 424)			{
+HXDLIN( 424)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 424)				if (::hx::IsNull( store1 )) {
+HXDLIN( 424)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),x));
-HXDLIN( 397)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+HXDLIN( 424)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
             				}
             				else {
-HXDLIN( 397)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 424)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXDLIN( 397)			_hx_tmp->set_ref(ptr1);
+HXDLIN( 424)			_hx_tmp->set_ref(ptr1);
             		}
-HXDLIN( 397)		return ( (size_t)(x->length) );
+HXDLIN( 424)		return ( (size_t)(x->length) );
             	}
 
 
@@ -316,42 +316,42 @@ HX_DEFINE_DYNAMIC_FUNC3(CommandSession_obj,execute,return )
 
 void CommandSession_obj::execute__fromC(::String action, ::borogove::FormSubmitBuilder data,::hx::Null< int >  __o_formIdx,::cpp::Function< void  (void*,void*) > handler,void* handler__context){
             		int formIdx = __o_formIdx.Default(0);
-            	HX_STACKFRAME(&_hx_pos_6429c0fb54981d0a_313_execute__fromC)
-HXDLIN( 313)		if (::hx::IsNull( handler )) {
-HXDLIN( 313)			this->execute(action,data,formIdx);
+            	HX_STACKFRAME(&_hx_pos_6429c0fb54981d0a_337_execute__fromC)
+HXDLIN( 337)		if (::hx::IsNull( handler )) {
+HXDLIN( 337)			this->execute(action,data,formIdx);
             		}
             		else {
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (void* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
             			void _hx_run( ::borogove::CommandSession v){
-            				HX_STACKFRAME(&_hx_pos_6429c0fb54981d0a_313_execute__fromC)
-HXDLIN( 313)				::cpp::Function< void  (void*,void*) > handler1 = handler;
-HXLINE( 297)				 ::Dynamic haxeObject = v;
-HXDLIN( 297)				void* ptr = haxeObject.mPtr;
-HXDLIN( 297)				::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 297)				{
-HXLINE( 297)					 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 297)					if (::hx::IsNull( store )) {
-HXLINE( 297)						store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            				HX_STACKFRAME(&_hx_pos_6429c0fb54981d0a_337_execute__fromC)
+HXDLIN( 337)				::cpp::Function< void  (void*,void*) > handler1 = handler;
+HXLINE( 314)				 ::Dynamic haxeObject = v;
+HXDLIN( 314)				void* ptr = haxeObject.mPtr;
+HXDLIN( 314)				::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 314)				{
+HXLINE( 314)					 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 314)					if (::hx::IsNull( store )) {
+HXLINE( 314)						store =  ::Dynamic(::hx::Anon_obj::Create(2)
             							->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             							->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 297)						::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN( 314)						::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             					}
             					else {
-HXLINE( 297)						::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE( 314)						::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             					}
             				}
-HXLINE( 313)				handler1(ptr,handler__context);
+HXLINE( 337)				handler1(ptr,handler__context);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::cpp::Function< void  (void* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
             			void _hx_run( ::Dynamic e){
-            				HX_STACKFRAME(&_hx_pos_6429c0fb54981d0a_313_execute__fromC)
-HXDLIN( 313)				handler(null(),handler__context);
+            				HX_STACKFRAME(&_hx_pos_6429c0fb54981d0a_337_execute__fromC)
+HXDLIN( 337)				handler(null(),handler__context);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-HXDLIN( 313)			::thenshim::_Promise::Promise_Impl__obj::then(this->execute(action,data,formIdx), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
+HXDLIN( 337)			::thenshim::_Promise::Promise_Impl__obj::then(this->execute(action,data,formIdx), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
             		}
             	}
 
diff --git a/Sources/c_borogove/src/borogove/Config.cpp b/Sources/c_borogove/src/borogove/Config.cpp
index e5b4c4c..3d598f7 100644
--- a/Sources/c_borogove/src/borogove/Config.cpp
+++ b/Sources/c_borogove/src/borogove/Config.cpp
@@ -5,8 +5,8 @@
 #include <borogove/Config.h>
 #endif
 
-HX_LOCAL_STACK_FRAME(_hx_pos_06cb0b4de69e0443_423_relativeHashUri__fromC,"borogove.Config","relativeHashUri__fromC",0xac6e85e6,"borogove.Config.relativeHashUri__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_06cb0b4de69e0443_434_set_relativeHashUri__fromC,"borogove.Config","set_relativeHashUri__fromC",0x1a4009a3,"borogove.Config.set_relativeHashUri__fromC","HaxeCBridge.hx",434,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_06cb0b4de69e0443_450_relativeHashUri__fromC,"borogove.Config","relativeHashUri__fromC",0xac6e85e6,"borogove.Config.relativeHashUri__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_06cb0b4de69e0443_461_set_relativeHashUri__fromC,"borogove.Config","set_relativeHashUri__fromC",0x1a4009a3,"borogove.Config.set_relativeHashUri__fromC","HaxeCBridge.hx",461,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_c2167d2bad2b2046_29_enableConstrainedMemoryMode,"borogove.Config","enableConstrainedMemoryMode",0xf4274718,"borogove.Config.enableConstrainedMemoryMode","borogove/Config.hx",29,0x865ad56e)
 HX_LOCAL_STACK_FRAME(_hx_pos_c2167d2bad2b2046_13_boot,"borogove.Config","boot",0xad106471,"borogove.Config.boot","borogove/Config.hx",13,0x865ad56e)
 HX_LOCAL_STACK_FRAME(_hx_pos_c2167d2bad2b2046_20_boot,"borogove.Config","boot",0xad106471,"borogove.Config.boot","borogove/Config.hx",20,0x865ad56e)
@@ -33,16 +33,16 @@ bool Config_obj::_hx_isInstanceOf(int inClassId) {
 bool Config_obj::relativeHashUri;
 
 bool Config_obj::relativeHashUri__fromC(){
-            	HX_STACKFRAME(&_hx_pos_06cb0b4de69e0443_423_relativeHashUri__fromC)
-HXDLIN( 423)		return ::borogove::Config_obj::relativeHashUri;
+            	HX_STACKFRAME(&_hx_pos_06cb0b4de69e0443_450_relativeHashUri__fromC)
+HXDLIN( 450)		return ::borogove::Config_obj::relativeHashUri;
             	}
 
 
 STATIC_HX_DEFINE_DYNAMIC_FUNC0(Config_obj,relativeHashUri__fromC,return )
 
 void Config_obj::set_relativeHashUri__fromC(bool value){
-            	HX_STACKFRAME(&_hx_pos_06cb0b4de69e0443_434_set_relativeHashUri__fromC)
-HXDLIN( 434)		::borogove::Config_obj::relativeHashUri = value;
+            	HX_STACKFRAME(&_hx_pos_06cb0b4de69e0443_461_set_relativeHashUri__fromC)
+HXDLIN( 461)		::borogove::Config_obj::relativeHashUri = value;
             	}
 
 
diff --git a/Sources/c_borogove/src/borogove/CustomEmojiReaction.cpp b/Sources/c_borogove/src/borogove/CustomEmojiReaction.cpp
index e24b3a2..644a264 100644
--- a/Sources/c_borogove/src/borogove/CustomEmojiReaction.cpp
+++ b/Sources/c_borogove/src/borogove/CustomEmojiReaction.cpp
@@ -12,7 +12,7 @@
 #endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_1234d3fa119c5de7_81_new,"borogove.CustomEmojiReaction","new",0x64ef9663,"borogove.CustomEmojiReaction.new","borogove/Reaction.hx",81,0xa2017f67)
-HX_LOCAL_STACK_FRAME(_hx_pos_e46c6e7afc257d99_423_uri__fromC,"borogove.CustomEmojiReaction","uri__fromC",0x9cc71aea,"borogove.CustomEmojiReaction.uri__fromC","HaxeCBridge.hx",423,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_e46c6e7afc257d99_450_uri__fromC,"borogove.CustomEmojiReaction","uri__fromC",0x9cc71aea,"borogove.CustomEmojiReaction.uri__fromC","HaxeCBridge.hx",450,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_1234d3fa119c5de7_99_render,"borogove.CustomEmojiReaction","render",0x15a90933,"borogove.CustomEmojiReaction.render","borogove/Reaction.hx",99,0xa2017f67)
 HX_LOCAL_STACK_FRAME(_hx_pos_1234d3fa119c5de7_94_custom,"borogove.CustomEmojiReaction","custom",0x5012258e,"borogove.CustomEmojiReaction.custom","borogove/Reaction.hx",94,0xa2017f67)
 HX_LOCAL_STACK_FRAME(_hx_pos_1234d3fa119c5de7_77_boot,"borogove.CustomEmojiReaction","boot",0xe4cd00cf,"borogove.CustomEmojiReaction.boot","borogove/Reaction.hx",77,0xa2017f67)
@@ -44,8 +44,8 @@ bool CustomEmojiReaction_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 ::String CustomEmojiReaction_obj::uri__fromC(){
-            	HX_STACKFRAME(&_hx_pos_e46c6e7afc257d99_423_uri__fromC)
-HXDLIN( 423)		return this->uri;
+            	HX_STACKFRAME(&_hx_pos_e46c6e7afc257d99_450_uri__fromC)
+HXDLIN( 450)		return this->uri;
             	}
 
 
diff --git a/Sources/c_borogove/src/borogove/DirectChat.cpp b/Sources/c_borogove/src/borogove/DirectChat.cpp
index 5114cd3..9732aae 100644
--- a/Sources/c_borogove/src/borogove/DirectChat.cpp
+++ b/Sources/c_borogove/src/borogove/DirectChat.cpp
@@ -104,46 +104,46 @@
 #include <thenshim/_Promise/Promise_Impl_.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_e6282dde58caedf0_937_new,"borogove.DirectChat","new",0xe0794ae0,"borogove.DirectChat.new","borogove/Chat.hx",937,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_957_getParticipants,"borogove.DirectChat","getParticipants",0xd47a4596,"borogove.DirectChat.getParticipants","borogove/Chat.hx",957,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_943_getParticipants,"borogove.DirectChat","getParticipants",0xd47a4596,"borogove.DirectChat.getParticipants","borogove/Chat.hx",943,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_961_counterparts,"borogove.DirectChat","counterparts",0x8dab4624,"borogove.DirectChat.counterparts","borogove/Chat.hx",961,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_965_getParticipantDetails,"borogove.DirectChat","getParticipantDetails",0xdd134605,"borogove.DirectChat.getParticipantDetails","borogove/Chat.hx",965,0x1763ae98)
+HX_DEFINE_STACK_FRAME(_hx_pos_e6282dde58caedf0_939_new,"borogove.DirectChat","new",0xe0794ae0,"borogove.DirectChat.new","borogove/Chat.hx",939,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_959_getParticipants,"borogove.DirectChat","getParticipants",0xd47a4596,"borogove.DirectChat.getParticipants","borogove/Chat.hx",959,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_945_getParticipants,"borogove.DirectChat","getParticipants",0xd47a4596,"borogove.DirectChat.getParticipants","borogove/Chat.hx",945,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_963_counterparts,"borogove.DirectChat","counterparts",0x8dab4624,"borogove.DirectChat.counterparts","borogove/Chat.hx",963,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_967_getParticipantDetails,"borogove.DirectChat","getParticipantDetails",0xdd134605,"borogove.DirectChat.getParticipantDetails","borogove/Chat.hx",967,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_975_getMessagesBefore,"borogove.DirectChat","getMessagesBefore",0x701bcc21,"borogove.DirectChat.getMessagesBefore","borogove/Chat.hx",975,0x1763ae98)
 HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_973_getMessagesBefore,"borogove.DirectChat","getMessagesBefore",0x701bcc21,"borogove.DirectChat.getMessagesBefore","borogove/Chat.hx",973,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_971_getMessagesBefore,"borogove.DirectChat","getMessagesBefore",0x701bcc21,"borogove.DirectChat.getMessagesBefore","borogove/Chat.hx",971,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_990_getMessagesAfter,"borogove.DirectChat","getMessagesAfter",0x74b138ba,"borogove.DirectChat.getMessagesAfter","borogove/Chat.hx",990,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_985_getMessagesAfter,"borogove.DirectChat","getMessagesAfter",0x74b138ba,"borogove.DirectChat.getMessagesAfter","borogove/Chat.hx",985,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1004_getMessagesAround,"borogove.DirectChat","getMessagesAround",0x8bed6fef,"borogove.DirectChat.getMessagesAround","borogove/Chat.hx",1004,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1008_prepareIncomingMessage,"borogove.DirectChat","prepareIncomingMessage",0xf788013a,"borogove.DirectChat.prepareIncomingMessage","borogove/Chat.hx",1008,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1013_prepareOutgoingMessage,"borogove.DirectChat","prepareOutgoingMessage",0x5db4c674,"borogove.DirectChat.prepareOutgoingMessage","borogove/Chat.hx",1013,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1031_correctMessage,"borogove.DirectChat","correctMessage",0x06b2cbfd,"borogove.DirectChat.correctMessage","borogove/Chat.hx",1031,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1025_correctMessage,"borogove.DirectChat","correctMessage",0x06b2cbfd,"borogove.DirectChat.correctMessage","borogove/Chat.hx",1025,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1044_sendMessage,"borogove.DirectChat","sendMessage",0xb60183df,"borogove.DirectChat.sendMessage","borogove/Chat.hx",1044,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1054_sendMessage,"borogove.DirectChat","sendMessage",0xb60183df,"borogove.DirectChat.sendMessage","borogove/Chat.hx",1054,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1067_sendMessage,"borogove.DirectChat","sendMessage",0xb60183df,"borogove.DirectChat.sendMessage","borogove/Chat.hx",1067,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1104_removeReaction,"borogove.DirectChat","removeReaction",0xd2fab98d,"borogove.DirectChat.removeReaction","borogove/Chat.hx",1104,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1081_removeReaction,"borogove.DirectChat","removeReaction",0xd2fab98d,"borogove.DirectChat.removeReaction","borogove/Chat.hx",1081,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1096_removeReaction,"borogove.DirectChat","removeReaction",0xd2fab98d,"borogove.DirectChat.removeReaction","borogove/Chat.hx",1096,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1136_sendMessageStanza,"borogove.DirectChat","sendMessageStanza",0x9c440734,"borogove.DirectChat.sendMessageStanza","borogove/Chat.hx",1136,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1135_sendMessageStanza,"borogove.DirectChat","sendMessageStanza",0x9c440734,"borogove.DirectChat.sendMessageStanza","borogove/Chat.hx",1135,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1110_sendMessageStanza,"borogove.DirectChat","sendMessageStanza",0x9c440734,"borogove.DirectChat.sendMessageStanza","borogove/Chat.hx",1110,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1145_lastMessageId,"borogove.DirectChat","lastMessageId",0xf6102acc,"borogove.DirectChat.lastMessageId","borogove/Chat.hx",1145,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1150_markReadUpTo,"borogove.DirectChat","markReadUpTo",0x03c49dd9,"borogove.DirectChat.markReadUpTo","borogove/Chat.hx",1150,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1168_markReadUpTo,"borogove.DirectChat","markReadUpTo",0x03c49dd9,"borogove.DirectChat.markReadUpTo","borogove/Chat.hx",1168,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1149_markReadUpTo,"borogove.DirectChat","markReadUpTo",0x03c49dd9,"borogove.DirectChat.markReadUpTo","borogove/Chat.hx",1149,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1187_bookmark,"borogove.DirectChat","bookmark",0x64600236,"borogove.DirectChat.bookmark","borogove/Chat.hx",1187,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1172_bookmark,"borogove.DirectChat","bookmark",0x64600236,"borogove.DirectChat.bookmark","borogove/Chat.hx",1172,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1195_sendChatState,"borogove.DirectChat","sendChatState",0x3d4cbc31,"borogove.DirectChat.sendChatState","borogove/Chat.hx",1195,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1215_close,"borogove.DirectChat","close",0x98bc3238,"borogove.DirectChat.close","borogove/Chat.hx",1215,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_935_boot,"borogove.DirectChat","boot",0x81c139b2,"borogove.DirectChat.boot","borogove/Chat.hx",935,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_992_getMessagesAfter,"borogove.DirectChat","getMessagesAfter",0x74b138ba,"borogove.DirectChat.getMessagesAfter","borogove/Chat.hx",992,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_987_getMessagesAfter,"borogove.DirectChat","getMessagesAfter",0x74b138ba,"borogove.DirectChat.getMessagesAfter","borogove/Chat.hx",987,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1006_getMessagesAround,"borogove.DirectChat","getMessagesAround",0x8bed6fef,"borogove.DirectChat.getMessagesAround","borogove/Chat.hx",1006,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1010_prepareIncomingMessage,"borogove.DirectChat","prepareIncomingMessage",0xf788013a,"borogove.DirectChat.prepareIncomingMessage","borogove/Chat.hx",1010,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1015_prepareOutgoingMessage,"borogove.DirectChat","prepareOutgoingMessage",0x5db4c674,"borogove.DirectChat.prepareOutgoingMessage","borogove/Chat.hx",1015,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1033_correctMessage,"borogove.DirectChat","correctMessage",0x06b2cbfd,"borogove.DirectChat.correctMessage","borogove/Chat.hx",1033,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1027_correctMessage,"borogove.DirectChat","correctMessage",0x06b2cbfd,"borogove.DirectChat.correctMessage","borogove/Chat.hx",1027,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1046_sendMessage,"borogove.DirectChat","sendMessage",0xb60183df,"borogove.DirectChat.sendMessage","borogove/Chat.hx",1046,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1056_sendMessage,"borogove.DirectChat","sendMessage",0xb60183df,"borogove.DirectChat.sendMessage","borogove/Chat.hx",1056,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1069_sendMessage,"borogove.DirectChat","sendMessage",0xb60183df,"borogove.DirectChat.sendMessage","borogove/Chat.hx",1069,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1106_removeReaction,"borogove.DirectChat","removeReaction",0xd2fab98d,"borogove.DirectChat.removeReaction","borogove/Chat.hx",1106,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1083_removeReaction,"borogove.DirectChat","removeReaction",0xd2fab98d,"borogove.DirectChat.removeReaction","borogove/Chat.hx",1083,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1098_removeReaction,"borogove.DirectChat","removeReaction",0xd2fab98d,"borogove.DirectChat.removeReaction","borogove/Chat.hx",1098,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1138_sendMessageStanza,"borogove.DirectChat","sendMessageStanza",0x9c440734,"borogove.DirectChat.sendMessageStanza","borogove/Chat.hx",1138,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1137_sendMessageStanza,"borogove.DirectChat","sendMessageStanza",0x9c440734,"borogove.DirectChat.sendMessageStanza","borogove/Chat.hx",1137,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1112_sendMessageStanza,"borogove.DirectChat","sendMessageStanza",0x9c440734,"borogove.DirectChat.sendMessageStanza","borogove/Chat.hx",1112,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1147_lastMessageId,"borogove.DirectChat","lastMessageId",0xf6102acc,"borogove.DirectChat.lastMessageId","borogove/Chat.hx",1147,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1152_markReadUpTo,"borogove.DirectChat","markReadUpTo",0x03c49dd9,"borogove.DirectChat.markReadUpTo","borogove/Chat.hx",1152,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1170_markReadUpTo,"borogove.DirectChat","markReadUpTo",0x03c49dd9,"borogove.DirectChat.markReadUpTo","borogove/Chat.hx",1170,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1151_markReadUpTo,"borogove.DirectChat","markReadUpTo",0x03c49dd9,"borogove.DirectChat.markReadUpTo","borogove/Chat.hx",1151,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1189_bookmark,"borogove.DirectChat","bookmark",0x64600236,"borogove.DirectChat.bookmark","borogove/Chat.hx",1189,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1174_bookmark,"borogove.DirectChat","bookmark",0x64600236,"borogove.DirectChat.bookmark","borogove/Chat.hx",1174,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1197_sendChatState,"borogove.DirectChat","sendChatState",0x3d4cbc31,"borogove.DirectChat.sendChatState","borogove/Chat.hx",1197,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_1217_close,"borogove.DirectChat","close",0x98bc3238,"borogove.DirectChat.close","borogove/Chat.hx",1217,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_e6282dde58caedf0_937_boot,"borogove.DirectChat","boot",0x81c139b2,"borogove.DirectChat.boot","borogove/Chat.hx",937,0x1763ae98)
 namespace borogove{
 
 void DirectChat_obj::__construct( ::borogove::Client client, ::borogove::GenericStream stream,::Dynamic persistence,::String chatId,::hx::Null< int >  __o_uiState,::hx::Null< bool >  __o_isBlocked, ::borogove::Stanza extensions,::String readUpToId,::String readUpToBy,::Array< int > omemoContactDeviceIDs){
             		int uiState = __o_uiState.Default(1);
             		bool isBlocked = __o_isBlocked.Default(false);
-            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_937_new)
-HXLINE( 938)		super::__construct(client,stream,persistence,chatId,uiState,isBlocked,extensions,readUpToId,readUpToBy,omemoContactDeviceIDs);
-HXLINE( 939)		this->outbox->start();
+            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_939_new)
+HXLINE( 940)		super::__construct(client,stream,persistence,chatId,uiState,isBlocked,extensions,readUpToId,readUpToBy,omemoContactDeviceIDs);
+HXLINE( 941)		this->outbox->start();
             	}
 
 Dynamic DirectChat_obj::__CreateEmpty() { return new DirectChat_obj; }
@@ -168,224 +168,224 @@ bool DirectChat_obj::_hx_isInstanceOf(int inClassId) {
 ::Array< ::String > DirectChat_obj::getParticipants(){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::haxe::ds::StringMap,ids) HXARGC(0)
             		 ::Dynamic _hx_run(){
-            			HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_957_getParticipants)
-HXLINE( 957)			return ids->keys();
+            			HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_959_getParticipants)
+HXLINE( 959)			return ids->keys();
             		}
             		HX_END_LOCAL_FUNC0(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_943_getParticipants)
-HXLINE( 944)		::Array< ::String > counters = this->counterparts();
-HXLINE( 945)		 ::haxe::ds::StringMap ids =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE( 946)		bool _hx_tmp;
-HXDLIN( 946)		if ((counters->length < 2)) {
-HXLINE( 946)			 ::borogove::ChatMessage tmp = this->lastMessage;
-HXDLIN( 946)			::Array< ::Dynamic> tmp1;
-HXDLIN( 946)			if (::hx::IsNotNull( tmp )) {
-HXLINE( 946)				tmp1 = tmp->recipients;
+            	HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_945_getParticipants)
+HXLINE( 946)		::Array< ::String > counters = this->counterparts();
+HXLINE( 947)		 ::haxe::ds::StringMap ids =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 948)		bool _hx_tmp;
+HXDLIN( 948)		if ((counters->length < 2)) {
+HXLINE( 948)			 ::borogove::ChatMessage tmp = this->lastMessage;
+HXDLIN( 948)			::Array< ::Dynamic> tmp1;
+HXDLIN( 948)			if (::hx::IsNotNull( tmp )) {
+HXLINE( 948)				tmp1 = tmp->recipients;
             			}
             			else {
-HXLINE( 946)				tmp1 = null();
+HXLINE( 948)				tmp1 = null();
             			}
-HXDLIN( 946)			 ::Dynamic tmp2;
-HXDLIN( 946)			if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 946)				tmp2 = tmp1->length;
+HXDLIN( 948)			 ::Dynamic tmp2;
+HXDLIN( 948)			if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 948)				tmp2 = tmp1->length;
             			}
             			else {
-HXLINE( 946)				tmp2 = null();
+HXLINE( 948)				tmp2 = null();
             			}
-HXDLIN( 946)			int _hx_tmp1;
-HXDLIN( 946)			if (::hx::IsNotNull( tmp2 )) {
-HXLINE( 946)				_hx_tmp1 = ( (int)(tmp2) );
+HXDLIN( 948)			int _hx_tmp1;
+HXDLIN( 948)			if (::hx::IsNotNull( tmp2 )) {
+HXLINE( 948)				_hx_tmp1 = ( (int)(tmp2) );
             			}
             			else {
-HXLINE( 946)				_hx_tmp1 = 0;
+HXLINE( 948)				_hx_tmp1 = 0;
             			}
-HXDLIN( 946)			_hx_tmp = (_hx_tmp1 > 1);
+HXDLIN( 948)			_hx_tmp = (_hx_tmp1 > 1);
             		}
             		else {
-HXLINE( 946)			_hx_tmp = false;
-            		}
-HXDLIN( 946)		if (_hx_tmp) {
-HXLINE( 947)			ids->set(this->lastMessage->senderId,true);
-HXLINE( 948)			{
-HXLINE( 948)				int _g = 0;
-HXDLIN( 948)				::Array< ::Dynamic> _this = this->lastMessage->recipients;
-HXDLIN( 948)				::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
-HXDLIN( 948)				{
-HXLINE( 948)					int _g1 = 0;
-HXDLIN( 948)					int _g2 = _this->length;
-HXDLIN( 948)					while((_g1 < _g2)){
-HXLINE( 948)						_g1 = (_g1 + 1);
-HXDLIN( 948)						int i = (_g1 - 1);
-HXDLIN( 948)						{
-HXLINE( 948)							::String inValue = ( ( ::borogove::JID)(_hx_array_unsafe_get(_this,i)) )->asString();
-HXDLIN( 948)							result->__unsafe_set(i,inValue);
+HXLINE( 948)			_hx_tmp = false;
+            		}
+HXDLIN( 948)		if (_hx_tmp) {
+HXLINE( 949)			ids->set(this->lastMessage->senderId,true);
+HXLINE( 950)			{
+HXLINE( 950)				int _g = 0;
+HXDLIN( 950)				::Array< ::Dynamic> _this = this->lastMessage->recipients;
+HXDLIN( 950)				::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
+HXDLIN( 950)				{
+HXLINE( 950)					int _g1 = 0;
+HXDLIN( 950)					int _g2 = _this->length;
+HXDLIN( 950)					while((_g1 < _g2)){
+HXLINE( 950)						_g1 = (_g1 + 1);
+HXDLIN( 950)						int i = (_g1 - 1);
+HXDLIN( 950)						{
+HXLINE( 950)							::String inValue = ( ( ::borogove::JID)(_hx_array_unsafe_get(_this,i)) )->asString();
+HXDLIN( 950)							result->__unsafe_set(i,inValue);
             						}
             					}
             				}
-HXDLIN( 948)				while((_g < result->length)){
-HXLINE( 948)					::String id = result->__get(_g);
-HXDLIN( 948)					_g = (_g + 1);
-HXLINE( 949)					ids->set(id,true);
+HXDLIN( 950)				while((_g < result->length)){
+HXLINE( 950)					::String id = result->__get(_g);
+HXDLIN( 950)					_g = (_g + 1);
+HXLINE( 951)					ids->set(id,true);
             				}
             			}
             		}
             		else {
-HXLINE( 952)			{
-HXLINE( 952)				::String k = this->client->accountId();
-HXDLIN( 952)				ids->set(k,true);
-            			}
-HXLINE( 953)			{
-HXLINE( 953)				int _g3 = 0;
-HXDLIN( 953)				::Array< ::String > _g4 = this->counterparts();
-HXDLIN( 953)				while((_g3 < _g4->length)){
-HXLINE( 953)					::String id1 = _g4->__get(_g3);
-HXDLIN( 953)					_g3 = (_g3 + 1);
-HXLINE( 954)					ids->set(id1,true);
+HXLINE( 954)			{
+HXLINE( 954)				::String k = this->client->accountId();
+HXDLIN( 954)				ids->set(k,true);
+            			}
+HXLINE( 955)			{
+HXLINE( 955)				int _g3 = 0;
+HXDLIN( 955)				::Array< ::String > _g4 = this->counterparts();
+HXDLIN( 955)				while((_g3 < _g4->length)){
+HXLINE( 955)					::String id1 = _g4->__get(_g3);
+HXDLIN( 955)					_g3 = (_g3 + 1);
+HXLINE( 956)					ids->set(id1,true);
             				}
             			}
             		}
-HXLINE( 957)		return ::Lambda_obj::array( ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE( 959)		return ::Lambda_obj::array( ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("iterator",ee,49,9a,93), ::Dynamic(new _hx_Closure_0(ids)))));
             	}
 
 
 ::Array< ::String > DirectChat_obj::counterparts(){
-            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_961_counterparts)
-HXDLIN( 961)		return this->chatId.split(HX_("\n",0a,00,00,00));
+            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_963_counterparts)
+HXDLIN( 963)		return this->chatId.split(HX_("\n",0a,00,00,00));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(DirectChat_obj,counterparts,return )
 
  ::borogove::Participant DirectChat_obj::getParticipantDetails(::String participantId){
-            	HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_965_getParticipantDetails)
-HXLINE( 966)		 ::borogove::DirectChat chat = this->client->getDirectChat(participantId,null());
-HXLINE( 967)		::String _hx_tmp = chat->getDisplayName();
-HXDLIN( 967)		::String _hx_tmp1 = chat->getPhoto();
-HXDLIN( 967)		::String _hx_tmp2 = chat->getPlaceholder();
-HXDLIN( 967)		::String chat1 = chat->chatId;
-HXDLIN( 967)		bool _hx_tmp3 = (chat1 == this->client->accountId());
-HXDLIN( 967)		return  ::borogove::Participant_obj::__alloc( HX_CTX ,_hx_tmp,_hx_tmp1,_hx_tmp2,_hx_tmp3,::borogove::JID_obj::parse(participantId));
+            	HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_967_getParticipantDetails)
+HXLINE( 968)		 ::borogove::DirectChat chat = this->client->getDirectChat(participantId,null());
+HXLINE( 969)		::String _hx_tmp = chat->getDisplayName();
+HXDLIN( 969)		::String _hx_tmp1 = chat->getPhoto();
+HXDLIN( 969)		::String _hx_tmp2 = chat->getPlaceholder();
+HXDLIN( 969)		::String chat1 = chat->chatId;
+HXDLIN( 969)		bool _hx_tmp3 = (chat1 == this->client->accountId());
+HXDLIN( 969)		return  ::borogove::Participant_obj::__alloc( HX_CTX ,_hx_tmp,_hx_tmp1,_hx_tmp2,_hx_tmp3,::borogove::JID_obj::parse(participantId));
             	}
 
 
 ::Dynamic DirectChat_obj::getMessagesBefore(::String beforeId,::String beforeTime){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::DirectChat,_gthis,::String,beforeId) HXARGC(1)
             		::Dynamic _hx_run(::Array< ::Dynamic> messages){
-            			HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_973_getMessagesBefore)
-HXLINE( 973)			if ((messages->length > 0)) {
-HXLINE( 974)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(messages);
+            			HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_975_getMessagesBefore)
+HXLINE( 975)			if ((messages->length > 0)) {
+HXLINE( 976)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(messages);
             			}
             			else {
-HXLINE( 976)				 ::Dynamic filter =  ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE( 978)				 ::Dynamic filter =  ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("with",06,76,f8,4e),_gthis->chatId));
-HXLINE( 977)				if (::hx::IsNotNull( beforeId )) {
-HXLINE( 977)					filter->__SetField(HX_("page",4f,da,51,4a), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE( 979)				if (::hx::IsNotNull( beforeId )) {
+HXLINE( 979)					filter->__SetField(HX_("page",4f,da,51,4a), ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("before",7f,54,32,9a),beforeId)),::hx::paccDynamic);
             				}
-HXLINE( 978)				 ::borogove::MessageSync sync =  ::borogove::MessageSync_obj::__alloc( HX_CTX ,_gthis->client,_gthis->stream,filter,null());
-HXLINE( 979)				return _gthis->fetchFromSync(sync);
+HXLINE( 980)				 ::borogove::MessageSync sync =  ::borogove::MessageSync_obj::__alloc( HX_CTX ,_gthis->client,_gthis->stream,filter,null());
+HXLINE( 981)				return _gthis->fetchFromSync(sync);
             			}
-HXLINE( 973)			return null();
+HXLINE( 975)			return null();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_971_getMessagesBefore)
-HXDLIN( 971)		 ::borogove::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 972)		::Dynamic _hx_tmp = this->persistence;
-HXDLIN( 972)		::String _hx_tmp1 = this->client->accountId();
-HXDLIN( 972)		return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getMessagesBefore(_hx_tmp,_hx_tmp1,this->chatId,beforeId,beforeTime), ::Dynamic(new _hx_Closure_0(_gthis,beforeId)),null());
+            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_973_getMessagesBefore)
+HXDLIN( 973)		 ::borogove::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 974)		::Dynamic _hx_tmp = this->persistence;
+HXDLIN( 974)		::String _hx_tmp1 = this->client->accountId();
+HXDLIN( 974)		return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getMessagesBefore(_hx_tmp,_hx_tmp1,this->chatId,beforeId,beforeTime), ::Dynamic(new _hx_Closure_0(_gthis,beforeId)),null());
             	}
 
 
 ::Dynamic DirectChat_obj::getMessagesAfter(::String afterId,::String afterTime){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::DirectChat,_gthis,::String,afterId) HXARGC(1)
             		::Dynamic _hx_run(::Array< ::Dynamic> messages){
-            			HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_990_getMessagesAfter)
-HXLINE( 990)			if ((messages->length > 0)) {
-HXLINE( 991)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(messages);
+            			HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_992_getMessagesAfter)
+HXLINE( 992)			if ((messages->length > 0)) {
+HXLINE( 993)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(messages);
             			}
             			else {
-HXLINE( 993)				 ::Dynamic filter =  ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE( 995)				 ::Dynamic filter =  ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("with",06,76,f8,4e),_gthis->chatId));
-HXLINE( 994)				if (::hx::IsNotNull( afterId )) {
-HXLINE( 994)					filter->__SetField(HX_("page",4f,da,51,4a), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE( 996)				if (::hx::IsNotNull( afterId )) {
+HXLINE( 996)					filter->__SetField(HX_("page",4f,da,51,4a), ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("after",1c,66,a2,1d),afterId)),::hx::paccDynamic);
             				}
-HXLINE( 995)				 ::borogove::MessageSync sync =  ::borogove::MessageSync_obj::__alloc( HX_CTX ,_gthis->client,_gthis->stream,filter,null());
-HXLINE( 996)				return _gthis->fetchFromSync(sync);
+HXLINE( 997)				 ::borogove::MessageSync sync =  ::borogove::MessageSync_obj::__alloc( HX_CTX ,_gthis->client,_gthis->stream,filter,null());
+HXLINE( 998)				return _gthis->fetchFromSync(sync);
             			}
-HXLINE( 990)			return null();
+HXLINE( 992)			return null();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_985_getMessagesAfter)
-HXDLIN( 985)		 ::borogove::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 986)		bool _hx_tmp;
-HXDLIN( 986)		::String afterId1 = afterId;
-HXDLIN( 986)		if ((afterId1 == this->lastMessageId())) {
-HXLINE( 986)			_hx_tmp = !(this->syncing());
+            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_987_getMessagesAfter)
+HXDLIN( 987)		 ::borogove::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 988)		bool _hx_tmp;
+HXDLIN( 988)		::String afterId1 = afterId;
+HXDLIN( 988)		if ((afterId1 == this->lastMessageId())) {
+HXLINE( 988)			_hx_tmp = !(this->syncing());
             		}
             		else {
-HXLINE( 986)			_hx_tmp = false;
+HXLINE( 988)			_hx_tmp = false;
             		}
-HXDLIN( 986)		if (_hx_tmp) {
-HXLINE( 987)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(0));
+HXDLIN( 988)		if (_hx_tmp) {
+HXLINE( 989)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(0));
             		}
-HXLINE( 989)		::Dynamic _hx_tmp1 = this->persistence;
-HXDLIN( 989)		::String _hx_tmp2 = this->client->accountId();
-HXDLIN( 989)		return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getMessagesAfter(_hx_tmp1,_hx_tmp2,this->chatId,afterId,afterTime), ::Dynamic(new _hx_Closure_0(_gthis,afterId)),null());
+HXLINE( 991)		::Dynamic _hx_tmp1 = this->persistence;
+HXDLIN( 991)		::String _hx_tmp2 = this->client->accountId();
+HXDLIN( 991)		return ::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getMessagesAfter(_hx_tmp1,_hx_tmp2,this->chatId,afterId,afterTime), ::Dynamic(new _hx_Closure_0(_gthis,afterId)),null());
             	}
 
 
 ::Dynamic DirectChat_obj::getMessagesAround(::String aroundId,::String aroundTime){
-            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1004_getMessagesAround)
-HXDLIN(1004)		::Dynamic _hx_tmp = this->persistence;
-HXDLIN(1004)		::String _hx_tmp1 = this->client->accountId();
-HXDLIN(1004)		return ::borogove::Persistence_obj::getMessagesAround(_hx_tmp,_hx_tmp1,this->chatId,aroundId,aroundTime);
+            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1006_getMessagesAround)
+HXDLIN(1006)		::Dynamic _hx_tmp = this->persistence;
+HXDLIN(1006)		::String _hx_tmp1 = this->client->accountId();
+HXDLIN(1006)		return ::borogove::Persistence_obj::getMessagesAround(_hx_tmp,_hx_tmp1,this->chatId,aroundId,aroundTime);
             	}
 
 
  ::borogove::ChatMessageBuilder DirectChat_obj::prepareIncomingMessage( ::borogove::ChatMessageBuilder message, ::borogove::Stanza stanza){
-            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1008_prepareIncomingMessage)
-HXLINE(1009)		message->syncPoint = !(this->syncing());
-HXLINE(1010)		return message;
+            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1010_prepareIncomingMessage)
+HXLINE(1011)		message->syncPoint = !(this->syncing());
+HXLINE(1012)		return message;
             	}
 
 
  ::borogove::ChatMessageBuilder DirectChat_obj::prepareOutgoingMessage( ::borogove::ChatMessageBuilder message){
-            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1013_prepareOutgoingMessage)
-HXLINE(1014)		::String tmp = message->timestamp;
-HXDLIN(1014)		::String _hx_tmp;
-HXDLIN(1014)		if (::hx::IsNotNull( tmp )) {
-HXLINE(1014)			_hx_tmp = tmp;
+            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1015_prepareOutgoingMessage)
+HXLINE(1016)		::String tmp = message->timestamp;
+HXDLIN(1016)		::String _hx_tmp;
+HXDLIN(1016)		if (::hx::IsNotNull( tmp )) {
+HXLINE(1016)			_hx_tmp = tmp;
             		}
             		else {
-HXLINE(1014)			_hx_tmp = ::borogove::Date_obj::format(::Date_obj::now());
-            		}
-HXDLIN(1014)		message->timestamp = _hx_tmp;
-HXLINE(1015)		message->direction = 1;
-HXLINE(1016)		message->from = this->client->jid;
-HXLINE(1017)		message->sender = message->from->asBare();
-HXLINE(1018)		message->replyTo = ::Array_obj< ::Dynamic>::__new(1)->init(0,message->sender);
-HXLINE(1019)		::Array< ::String > _this = this->counterparts();
-HXDLIN(1019)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_this->length);
-HXDLIN(1019)		{
-HXLINE(1019)			int _g = 0;
-HXDLIN(1019)			int _g1 = _this->length;
-HXDLIN(1019)			while((_g < _g1)){
-HXLINE(1019)				_g = (_g + 1);
-HXDLIN(1019)				int i = (_g - 1);
-HXDLIN(1019)				{
-HXLINE(1019)					 ::borogove::JID inValue = ::borogove::JID_obj::parse(( (::String)(_hx_array_unsafe_get(_this,i)) ));
-HXDLIN(1019)					result->__unsafe_set(i,inValue);
+HXLINE(1016)			_hx_tmp = ::borogove::Date_obj::format(::Date_obj::now());
+            		}
+HXDLIN(1016)		message->timestamp = _hx_tmp;
+HXLINE(1017)		message->direction = 1;
+HXLINE(1018)		message->from = this->client->jid;
+HXLINE(1019)		message->sender = message->from->asBare();
+HXLINE(1020)		message->replyTo = ::Array_obj< ::Dynamic>::__new(1)->init(0,message->sender);
+HXLINE(1021)		::Array< ::String > _this = this->counterparts();
+HXDLIN(1021)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_this->length);
+HXDLIN(1021)		{
+HXLINE(1021)			int _g = 0;
+HXDLIN(1021)			int _g1 = _this->length;
+HXDLIN(1021)			while((_g < _g1)){
+HXLINE(1021)				_g = (_g + 1);
+HXDLIN(1021)				int i = (_g - 1);
+HXDLIN(1021)				{
+HXLINE(1021)					 ::borogove::JID inValue = ::borogove::JID_obj::parse(( (::String)(_hx_array_unsafe_get(_this,i)) ));
+HXDLIN(1021)					result->__unsafe_set(i,inValue);
             				}
             			}
             		}
-HXDLIN(1019)		message->recipients = result;
-HXLINE(1020)		message->to = message->recipients->__get(0).StaticCast<  ::borogove::JID >();
-HXLINE(1021)		return message;
+HXDLIN(1021)		message->recipients = result;
+HXLINE(1022)		message->to = message->recipients->__get(0).StaticCast<  ::borogove::JID >();
+HXLINE(1023)		return message;
             	}
 
 
@@ -394,137 +394,137 @@ HX_DEFINE_DYNAMIC_FUNC1(DirectChat_obj,prepareOutgoingMessage,return )
 void DirectChat_obj::correctMessage(::String localId, ::borogove::ChatMessageBuilder message){
             		HX_BEGIN_LOCAL_FUNC_S5(::hx::LocalFunc,_hx_Closure_0, ::borogove::DirectChat,_gthis,::Array< ::Dynamic>,message1,::String,localId,::String,toSendId, ::borogove::OutboxItem,outboxItem) HXARGC(1)
             		void _hx_run(::Array< ::Dynamic> corrected){
-            			HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1031_correctMessage)
-HXLINE(1032)			::Array< ::Dynamic> _hx_tmp;
-HXDLIN(1032)			 ::borogove::ChatMessage tmp = corrected->__get(0).StaticCast<  ::borogove::ChatMessage >()->versions->__get((corrected->__get(0).StaticCast<  ::borogove::ChatMessage >()->versions->length - 1)).StaticCast<  ::borogove::ChatMessage >();
-HXDLIN(1032)			::String _hx_tmp1;
-HXDLIN(1032)			if (::hx::IsNotNull( tmp )) {
-HXLINE(1032)				_hx_tmp1 = tmp->localId;
+            			HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1033_correctMessage)
+HXLINE(1034)			::Array< ::Dynamic> _hx_tmp;
+HXDLIN(1034)			 ::borogove::ChatMessage tmp = corrected->__get(0).StaticCast<  ::borogove::ChatMessage >()->versions->__get((corrected->__get(0).StaticCast<  ::borogove::ChatMessage >()->versions->length - 1)).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN(1034)			::String _hx_tmp1;
+HXDLIN(1034)			if (::hx::IsNotNull( tmp )) {
+HXLINE(1034)				_hx_tmp1 = tmp->localId;
             			}
             			else {
-HXLINE(1032)				_hx_tmp1 = null();
+HXLINE(1034)				_hx_tmp1 = null();
             			}
-HXDLIN(1032)			if ((_hx_tmp1 == localId)) {
-HXLINE(1032)				_hx_tmp = corrected->__get(0).StaticCast<  ::borogove::ChatMessage >()->versions;
+HXDLIN(1034)			if ((_hx_tmp1 == localId)) {
+HXLINE(1034)				_hx_tmp = corrected->__get(0).StaticCast<  ::borogove::ChatMessage >()->versions;
             			}
             			else {
-HXLINE(1032)				_hx_tmp = ::Array_obj< ::Dynamic>::__new(1)->init(0,message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build());
-            			}
-HXDLIN(1032)			message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->versions = _hx_tmp;
-HXLINE(1033)			message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->localId = toSendId;
-HXLINE(1034)			 ::borogove::DirectChat _gthis1 = _gthis;
-HXDLIN(1034)			 ::borogove::Stanza _hx_tmp2 = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build()->asStanza();
-HXDLIN(1034)			_gthis1->sendMessageStanza(_hx_tmp2,outboxItem);
-HXLINE(1035)			 ::borogove::ChatMessage tmp1 = _gthis->lastMessage;
-HXDLIN(1035)			::String _hx_tmp3;
-HXDLIN(1035)			if (::hx::IsNotNull( tmp1 )) {
-HXLINE(1035)				_hx_tmp3 = tmp1->localId;
+HXLINE(1034)				_hx_tmp = ::Array_obj< ::Dynamic>::__new(1)->init(0,message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build());
+            			}
+HXDLIN(1034)			message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->versions = _hx_tmp;
+HXLINE(1035)			message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->localId = toSendId;
+HXLINE(1036)			 ::borogove::DirectChat _gthis1 = _gthis;
+HXDLIN(1036)			 ::borogove::Stanza _hx_tmp2 = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build()->asStanza();
+HXDLIN(1036)			_gthis1->sendMessageStanza(_hx_tmp2,outboxItem);
+HXLINE(1037)			 ::borogove::ChatMessage tmp1 = _gthis->lastMessage;
+HXDLIN(1037)			::String _hx_tmp3;
+HXDLIN(1037)			if (::hx::IsNotNull( tmp1 )) {
+HXLINE(1037)				_hx_tmp3 = tmp1->localId;
             			}
             			else {
-HXLINE(1035)				_hx_tmp3 = null();
+HXLINE(1037)				_hx_tmp3 = null();
             			}
-HXDLIN(1035)			if ((localId == _hx_tmp3)) {
-HXLINE(1036)				_gthis->setLastMessage(corrected->__get(0).StaticCast<  ::borogove::ChatMessage >());
-HXLINE(1037)				_gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
+HXDLIN(1037)			if ((localId == _hx_tmp3)) {
+HXLINE(1038)				_gthis->setLastMessage(corrected->__get(0).StaticCast<  ::borogove::ChatMessage >());
+HXLINE(1039)				_gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
             			}
-HXLINE(1039)			_gthis->client->notifyMessageHandlers(corrected->__get(0).StaticCast<  ::borogove::ChatMessage >(),1);
+HXLINE(1041)			_gthis->client->notifyMessageHandlers(corrected->__get(0).StaticCast<  ::borogove::ChatMessage >(),1);
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1025_correctMessage)
-HXDLIN(1025)		::Array< ::Dynamic> message1 = ::Array_obj< ::Dynamic>::__new(1)->init(0,message);
-HXDLIN(1025)		 ::borogove::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1026)		::String toSendId = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->localId;
-HXLINE(1027)		message1[0] = this->prepareOutgoingMessage(message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >());
-HXLINE(1028)		 ::borogove::ChatMessage _hx_tmp = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build();
-HXDLIN(1028)		message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->versions = ::Array_obj< ::Dynamic>::__new(1)->init(0,_hx_tmp);
-HXLINE(1029)		message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->localId = localId;
-HXLINE(1030)		 ::borogove::OutboxItem outboxItem = this->outbox->newItem();
-HXLINE(1031)		 ::borogove::Client _hx_tmp1 = this->client;
-HXDLIN(1031)		::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp1->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build())), ::Dynamic(new _hx_Closure_0(_gthis,message1,localId,toSendId,outboxItem)),null());
+            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1027_correctMessage)
+HXDLIN(1027)		::Array< ::Dynamic> message1 = ::Array_obj< ::Dynamic>::__new(1)->init(0,message);
+HXDLIN(1027)		 ::borogove::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1028)		::String toSendId = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->localId;
+HXLINE(1029)		message1[0] = this->prepareOutgoingMessage(message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >());
+HXLINE(1030)		 ::borogove::ChatMessage _hx_tmp = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build();
+HXDLIN(1030)		message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->versions = ::Array_obj< ::Dynamic>::__new(1)->init(0,_hx_tmp);
+HXLINE(1031)		message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->localId = localId;
+HXLINE(1032)		 ::borogove::OutboxItem outboxItem = this->outbox->newItem();
+HXLINE(1033)		 ::borogove::Client _hx_tmp1 = this->client;
+HXDLIN(1033)		::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp1->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build())), ::Dynamic(new _hx_Closure_0(_gthis,message1,localId,toSendId,outboxItem)),null());
             	}
 
 
 void DirectChat_obj::sendMessage( ::borogove::ChatMessageBuilder message){
-            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1044_sendMessage)
-HXDLIN(1044)		::Array< ::Dynamic> message1 = ::Array_obj< ::Dynamic>::__new(1)->init(0,message);
-HXDLIN(1044)		 ::borogove::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1045)		if ((this->uiState == 3)) {
-HXLINE(1045)			this->uiState = 1;
-            		}
-HXLINE(1046)		if (::hx::IsNotNull( this->typingTimer )) {
-HXLINE(1046)			this->typingTimer->stop();
-            		}
-HXLINE(1047)		this->client->chatActivity(::hx::ObjectPtr<OBJ_>(this),null());
-HXLINE(1048)		message1[0] = this->prepareOutgoingMessage(message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >());
-HXLINE(1049)		message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->to = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->recipients->__get(0).StaticCast<  ::borogove::JID >();
-HXLINE(1050)		 ::borogove::Stanza fromStanza = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build()->asStanza();
-HXDLIN(1050)		 ::borogove::MessageStanza fromStanza1 = ::borogove::Message_obj::fromStanza(fromStanza,this->client->jid,null(),null())->parsed;
-HXLINE(1051)		switch((int)(fromStanza1->_hx_getIndex())){
+            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1046_sendMessage)
+HXDLIN(1046)		::Array< ::Dynamic> message1 = ::Array_obj< ::Dynamic>::__new(1)->init(0,message);
+HXDLIN(1046)		 ::borogove::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1047)		if ((this->uiState == 3)) {
+HXLINE(1047)			this->uiState = 1;
+            		}
+HXLINE(1048)		if (::hx::IsNotNull( this->typingTimer )) {
+HXLINE(1048)			this->typingTimer->stop();
+            		}
+HXLINE(1049)		this->client->chatActivity(::hx::ObjectPtr<OBJ_>(this),null());
+HXLINE(1050)		message1[0] = this->prepareOutgoingMessage(message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >());
+HXLINE(1051)		message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->to = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->recipients->__get(0).StaticCast<  ::borogove::JID >();
+HXLINE(1052)		 ::borogove::Stanza fromStanza = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build()->asStanza();
+HXDLIN(1052)		 ::borogove::MessageStanza fromStanza1 = ::borogove::Message_obj::fromStanza(fromStanza,this->client->jid,null(),null())->parsed;
+HXLINE(1053)		switch((int)(fromStanza1->_hx_getIndex())){
             			case (int)1: {
             				HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::borogove::DirectChat,_gthis,::Array< ::Dynamic>,message1, ::borogove::OutboxItem,outboxItem) HXARGC(1)
             				 ::borogove::EventResult _hx_run(::Array< ::Dynamic> stored){
-            					HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1054_sendMessage)
-HXLINE(1055)					 ::borogove::Stanza stanza = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build()->asStanza();
-HXLINE(1056)					if (::hx::IsNotNull( _gthis->isActive )) {
-HXLINE(1057)						_gthis->isActive = true;
-HXLINE(1058)						_gthis->activeThread = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->threadId;
-HXLINE(1059)						stanza->tag(HX_("active",c6,41,46,16), ::Dynamic(::hx::Anon_obj::Create(1)
+            					HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1056_sendMessage)
+HXLINE(1057)					 ::borogove::Stanza stanza = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build()->asStanza();
+HXLINE(1058)					if (::hx::IsNotNull( _gthis->isActive )) {
+HXLINE(1059)						_gthis->isActive = true;
+HXLINE(1060)						_gthis->activeThread = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->threadId;
+HXLINE(1061)						stanza->tag(HX_("active",c6,41,46,16), ::Dynamic(::hx::Anon_obj::Create(1)
             							->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/chatstates",8e,6d,41,6d))))->up();
             					}
-HXLINE(1061)					_gthis->sendMessageStanza(stanza,outboxItem);
-HXLINE(1062)					 ::borogove::DirectChat _gthis1 = _gthis;
-HXDLIN(1062)					_gthis1->setLastMessage(message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build());
-HXLINE(1063)					int _hx_tmp;
-HXDLIN(1063)					if ((stored->__get(0).StaticCast<  ::borogove::ChatMessage >()->versions->length > 1)) {
-HXLINE(1063)						_hx_tmp = 1;
+HXLINE(1063)					_gthis->sendMessageStanza(stanza,outboxItem);
+HXLINE(1064)					 ::borogove::DirectChat _gthis1 = _gthis;
+HXDLIN(1064)					_gthis1->setLastMessage(message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build());
+HXLINE(1065)					int _hx_tmp;
+HXDLIN(1065)					if ((stored->__get(0).StaticCast<  ::borogove::ChatMessage >()->versions->length > 1)) {
+HXLINE(1065)						_hx_tmp = 1;
             					}
             					else {
-HXLINE(1063)						_hx_tmp = 0;
+HXLINE(1065)						_hx_tmp = 0;
             					}
-HXDLIN(1063)					_gthis->client->notifyMessageHandlers(stored->__get(0).StaticCast<  ::borogove::ChatMessage >(),_hx_tmp);
-HXLINE(1064)					return _gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
+HXDLIN(1065)					_gthis->client->notifyMessageHandlers(stored->__get(0).StaticCast<  ::borogove::ChatMessage >(),_hx_tmp);
+HXLINE(1066)					return _gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
             				}
             				HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1053)				 ::borogove::OutboxItem outboxItem = this->outbox->newItem();
-HXLINE(1054)				 ::borogove::Client _hx_tmp = this->client;
-HXDLIN(1054)				::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build())), ::Dynamic(new _hx_Closure_0(_gthis,message1,outboxItem)),null());
+HXLINE(1055)				 ::borogove::OutboxItem outboxItem = this->outbox->newItem();
+HXLINE(1056)				 ::borogove::Client _hx_tmp = this->client;
+HXDLIN(1056)				::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build())), ::Dynamic(new _hx_Closure_0(_gthis,message1,outboxItem)),null());
             			}
             			break;
             			case (int)3: {
             				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::borogove::DirectChat,_gthis,::Array< ::Dynamic>,message1) HXARGC(1)
             				void _hx_run( ::borogove::ChatMessage stored){
-            					HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1067_sendMessage)
-HXLINE(1068)					{
-HXLINE(1068)						int _g = 0;
-HXDLIN(1068)						::Array< ::Dynamic> _g1 = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->recipients;
-HXDLIN(1068)						while((_g < _g1->length)){
-HXLINE(1068)							 ::borogove::JID recipient = _g1->__get(_g).StaticCast<  ::borogove::JID >();
-HXDLIN(1068)							_g = (_g + 1);
-HXLINE(1069)							message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->to = recipient;
-HXLINE(1070)							 ::borogove::Client _gthis1 = _gthis->client;
-HXDLIN(1070)							_gthis1->sendStanza(message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build()->asStanza());
+            					HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1069_sendMessage)
+HXLINE(1070)					{
+HXLINE(1070)						int _g = 0;
+HXDLIN(1070)						::Array< ::Dynamic> _g1 = message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->recipients;
+HXDLIN(1070)						while((_g < _g1->length)){
+HXLINE(1070)							 ::borogove::JID recipient = _g1->__get(_g).StaticCast<  ::borogove::JID >();
+HXDLIN(1070)							_g = (_g + 1);
+HXLINE(1071)							message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->to = recipient;
+HXLINE(1072)							 ::borogove::Client _gthis1 = _gthis->client;
+HXDLIN(1072)							_gthis1->sendStanza(message1->__get(0).StaticCast<  ::borogove::ChatMessageBuilder >()->build()->asStanza());
             						}
             					}
-HXLINE(1072)					if (::hx::IsNotNull( stored )) {
-HXLINE(1072)						_gthis->client->notifyMessageHandlers(stored,2);
+HXLINE(1074)					if (::hx::IsNotNull( stored )) {
+HXLINE(1074)						_gthis->client->notifyMessageHandlers(stored,2);
             					}
             				}
             				HX_END_LOCAL_FUNC1((void))
 
-HXLINE(1067)				::Dynamic _hx_tmp1 = this->persistence;
-HXDLIN(1067)				::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeReaction(_hx_tmp1,this->client->accountId(),fromStanza1->_hx_getObject(0).StaticCast<  ::borogove::ReactionUpdate >()), ::Dynamic(new _hx_Closure_1(_gthis,message1)),null());
+HXLINE(1069)				::Dynamic _hx_tmp1 = this->persistence;
+HXDLIN(1069)				::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeReaction(_hx_tmp1,this->client->accountId(),fromStanza1->_hx_getObject(0).StaticCast<  ::borogove::ReactionUpdate >()), ::Dynamic(new _hx_Closure_1(_gthis,message1)),null());
             			}
             			break;
             			default:{
-HXLINE(1075)				::haxe::Log_obj::trace(HX_("Invalid message",7e,ab,89,95), ::Dynamic(::hx::Anon_obj::Create(5)
+HXLINE(1077)				::haxe::Log_obj::trace(HX_("Invalid message",7e,ab,89,95), ::Dynamic(::hx::Anon_obj::Create(5)
             					->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.DirectChat",ee,9a,0a,36))
             					->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,fromStanza1))
             					->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("sendMessage",5f,89,1d,24))
             					->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Chat.hx",98,ae,63,17))
-            					->setFixed(4,HX_("lineNumber",dd,81,22,76),1075)));
-HXLINE(1076)				HX_STACK_DO_THROW(HX_("Trying to send invalid message.",dc,74,a0,91));
+            					->setFixed(4,HX_("lineNumber",dd,81,22,76),1077)));
+HXLINE(1078)				HX_STACK_DO_THROW(HX_("Trying to send invalid message.",dc,74,a0,91));
             			}
             		}
             	}
@@ -533,68 +533,68 @@ HXLINE(1076)				HX_STACK_DO_THROW(HX_("Trying to send invalid message.",dc,74,a0
 void DirectChat_obj::removeReaction( ::borogove::ChatMessage m, ::borogove::Reaction reaction){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_1, ::borogove::DirectChat,_gthis, ::borogove::OutboxItem,outboxItem, ::borogove::ReactionUpdate,update3) HXARGC(1)
             		void _hx_run( ::borogove::ChatMessage stored){
-            			HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1104_removeReaction)
-HXLINE(1105)			 ::borogove::DirectChat _gthis1 = _gthis;
-HXDLIN(1105)			 ::borogove::Stanza _hx_tmp = update3->asStanza();
-HXDLIN(1105)			_gthis1->sendMessageStanza(_hx_tmp,outboxItem);
-HXLINE(1106)			if (::hx::IsNotNull( stored )) {
-HXLINE(1106)				_gthis->client->notifyMessageHandlers(stored,2);
+            			HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1106_removeReaction)
+HXLINE(1107)			 ::borogove::DirectChat _gthis1 = _gthis;
+HXDLIN(1107)			 ::borogove::Stanza _hx_tmp = update3->asStanza();
+HXDLIN(1107)			_gthis1->sendMessageStanza(_hx_tmp,outboxItem);
+HXLINE(1108)			if (::hx::IsNotNull( stored )) {
+HXLINE(1108)				_gthis->client->notifyMessageHandlers(stored,2);
             			}
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1081_removeReaction)
-HXDLIN(1081)		 ::borogove::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1082)		if (::Std_obj::isOfType(reaction,::hx::ClassOf< ::borogove::CustomEmojiReaction >())) {
-HXLINE(1083)			if (::hx::IsNull( reaction->envelopeId )) {
-HXLINE(1083)				HX_STACK_DO_THROW(HX_("Cannot remove custom emoji reaction without envelopeId",90,e6,80,fb));
-            			}
-HXLINE(1084)			 ::borogove::ChatMessageBuilder correct = m->reply();
-HXLINE(1085)			correct->localId = ::borogove::ID_obj::_hx_long();
-HXLINE(1086)			correct->setHtml(HX_("",00,00,00,00));
-HXLINE(1087)			correct->text = null();
-HXLINE(1088)			this->correctMessage(reaction->envelopeId,correct);
-HXLINE(1089)			return;
-            		}
-HXLINE(1093)		::Array< ::Dynamic> reactions = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE(1094)		{
-HXLINE(1094)			::Dynamic this1 = m->reactions;
-HXDLIN(1094)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(this1);
-HXDLIN(1094)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE(1094)				::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN(1094)				::Array< ::Dynamic> _g_value = ( (::Array< ::Dynamic>)(::haxe::IMap_obj::get(this1,key)) );
-HXLINE(1095)				if ((key != reaction->key)) {
+            	HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1083_removeReaction)
+HXDLIN(1083)		 ::borogove::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1084)		if (::Std_obj::isOfType(reaction,::hx::ClassOf< ::borogove::CustomEmojiReaction >())) {
+HXLINE(1085)			if (::hx::IsNull( reaction->envelopeId )) {
+HXLINE(1085)				HX_STACK_DO_THROW(HX_("Cannot remove custom emoji reaction without envelopeId",90,e6,80,fb));
+            			}
+HXLINE(1086)			 ::borogove::ChatMessageBuilder correct = m->reply();
+HXLINE(1087)			correct->localId = ::borogove::ID_obj::_hx_long();
+HXLINE(1088)			correct->setHtml(HX_("",00,00,00,00));
+HXLINE(1089)			correct->text = null();
+HXLINE(1090)			this->correctMessage(reaction->envelopeId,correct);
+HXLINE(1091)			return;
+            		}
+HXLINE(1095)		::Array< ::Dynamic> reactions = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE(1096)		{
+HXLINE(1096)			::Dynamic this1 = m->reactions;
+HXDLIN(1096)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(this1);
+HXDLIN(1096)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE(1096)				::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN(1096)				::Array< ::Dynamic> _g_value = ( (::Array< ::Dynamic>)(::haxe::IMap_obj::get(this1,key)) );
+HXLINE(1097)				if ((key != reaction->key)) {
             					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::DirectChat,_gthis) HXARGC(1)
             					bool _hx_run( ::borogove::Reaction r){
-            						HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1096_removeReaction)
-HXLINE(1096)						::String r1 = r->senderId;
-HXDLIN(1096)						return (r1 == _gthis->client->accountId());
+            						HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1098_removeReaction)
+HXLINE(1098)						::String r1 = r->senderId;
+HXDLIN(1098)						return (r1 == _gthis->client->accountId());
             					}
             					HX_END_LOCAL_FUNC1(return)
 
-HXLINE(1096)					 ::borogove::Reaction react = ( ( ::borogove::Reaction)(::Lambda_obj::find(_g_value, ::Dynamic(new _hx_Closure_0(_gthis)))) );
-HXLINE(1097)					bool _hx_tmp;
-HXDLIN(1097)					if (::hx::IsNotNull( react )) {
-HXLINE(1097)						_hx_tmp = !(::Std_obj::isOfType(react,::hx::ClassOf< ::borogove::CustomEmojiReaction >()));
+HXLINE(1098)					 ::borogove::Reaction react = ( ( ::borogove::Reaction)(::Lambda_obj::find(_g_value, ::Dynamic(new _hx_Closure_0(_gthis)))) );
+HXLINE(1099)					bool _hx_tmp;
+HXDLIN(1099)					if (::hx::IsNotNull( react )) {
+HXLINE(1099)						_hx_tmp = !(::Std_obj::isOfType(react,::hx::ClassOf< ::borogove::CustomEmojiReaction >()));
             					}
             					else {
-HXLINE(1097)						_hx_tmp = false;
+HXLINE(1099)						_hx_tmp = false;
             					}
-HXDLIN(1097)					if (_hx_tmp) {
-HXLINE(1098)						reactions->push(react);
+HXDLIN(1099)					if (_hx_tmp) {
+HXLINE(1100)						reactions->push(react);
             					}
             				}
             			}
             		}
-HXLINE(1102)		::String update = ::borogove::ID_obj::_hx_long();
-HXDLIN(1102)		::String m1 = m->localId;
-HXDLIN(1102)		::String update1 = m->chatId();
-HXDLIN(1102)		::String update2 = this->client->accountId();
-HXDLIN(1102)		 ::borogove::ReactionUpdate update3 =  ::borogove::ReactionUpdate_obj::__alloc( HX_CTX ,update,null(),null(),m1,update1,update2,::borogove::Date_obj::format(::Date_obj::now()),reactions,0);
-HXLINE(1103)		 ::borogove::OutboxItem outboxItem = this->outbox->newItem();
-HXLINE(1104)		::Dynamic _hx_tmp1 = this->persistence;
-HXDLIN(1104)		::String _hx_tmp2 = this->client->accountId();
-HXDLIN(1104)		::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeReaction(_hx_tmp1,_hx_tmp2,update3), ::Dynamic(new _hx_Closure_1(_gthis,outboxItem,update3)),null());
+HXLINE(1104)		::String update = ::borogove::ID_obj::_hx_long();
+HXDLIN(1104)		::String m1 = m->localId;
+HXDLIN(1104)		::String update1 = m->chatId();
+HXDLIN(1104)		::String update2 = this->client->accountId();
+HXDLIN(1104)		 ::borogove::ReactionUpdate update3 =  ::borogove::ReactionUpdate_obj::__alloc( HX_CTX ,update,null(),null(),m1,update1,update2,::borogove::Date_obj::format(::Date_obj::now()),reactions,0);
+HXLINE(1105)		 ::borogove::OutboxItem outboxItem = this->outbox->newItem();
+HXLINE(1106)		::Dynamic _hx_tmp1 = this->persistence;
+HXDLIN(1106)		::String _hx_tmp2 = this->client->accountId();
+HXDLIN(1106)		::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeReaction(_hx_tmp1,_hx_tmp2,update3), ::Dynamic(new _hx_Closure_1(_gthis,outboxItem,update3)),null());
             	}
 
 
@@ -603,170 +603,170 @@ void DirectChat_obj::sendMessageStanza( ::borogove::Stanza stanza, ::borogove::O
             		void _hx_run(::Array< ::Dynamic> stanzas){
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::DirectChat,_gthis,::Array< ::Dynamic>,stanzas) HXARGC(0)
             			void _hx_run(){
-            				HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1136_sendMessageStanza)
-HXLINE(1136)				int _g = 0;
-HXDLIN(1136)				while((_g < stanzas->length)){
-HXLINE(1136)					 ::borogove::Stanza stanza = stanzas->__get(_g).StaticCast<  ::borogove::Stanza >();
-HXDLIN(1136)					_g = (_g + 1);
-HXLINE(1137)					_gthis->client->sendStanza(stanza);
+            				HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1138_sendMessageStanza)
+HXLINE(1138)				int _g = 0;
+HXDLIN(1138)				while((_g < stanzas->length)){
+HXLINE(1138)					 ::borogove::Stanza stanza = stanzas->__get(_g).StaticCast<  ::borogove::Stanza >();
+HXDLIN(1138)					_g = (_g + 1);
+HXLINE(1139)					_gthis->client->sendStanza(stanza);
             				}
             			}
             			HX_END_LOCAL_FUNC0((void))
 
-            			HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1135_sendMessageStanza)
-HXLINE(1135)			outboxItem1->__get(0).StaticCast<  ::borogove::OutboxItem >()->handle( ::Dynamic(new _hx_Closure_0(_gthis,stanzas)));
+            			HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1137_sendMessageStanza)
+HXLINE(1137)			outboxItem1->__get(0).StaticCast<  ::borogove::OutboxItem >()->handle( ::Dynamic(new _hx_Closure_0(_gthis,stanzas)));
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1110_sendMessageStanza)
-HXDLIN(1110)		::Array< ::Dynamic> outboxItem1 = ::Array_obj< ::Dynamic>::__new(1)->init(0,outboxItem);
-HXDLIN(1110)		 ::borogove::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1111)		if ((stanza->name != HX_("message",c7,35,11,9a))) {
-HXLINE(1111)			HX_STACK_DO_THROW(HX_("Can only send message stanza this way",cb,e1,b3,60));
-            		}
-HXLINE(1113)		if (::hx::IsNull( outboxItem1->__get(0).StaticCast<  ::borogove::OutboxItem >() )) {
-HXLINE(1113)			outboxItem1[0] = this->outbox->newItem();
-            		}
-HXLINE(1115)		::Array< ::String > counters = this->counterparts();
-HXLINE(1116)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(counters->length);
-HXDLIN(1116)		{
-HXLINE(1116)			int _g = 0;
-HXDLIN(1116)			int _g1 = counters->length;
-HXDLIN(1116)			while((_g < _g1)){
-HXLINE(1116)				_g = (_g + 1);
-HXDLIN(1116)				int i = (_g - 1);
-HXDLIN(1116)				{
-HXLINE(1116)					::String counterpart = ( (::String)(_hx_array_unsafe_get(counters,i)) );
-HXLINE(1117)					 ::borogove::Stanza clone = stanza->clone();
-HXLINE(1118)					::Reflect_obj::setField(clone->attr,HX_("to",7b,65,00,00),counterpart);
-HXLINE(1119)					bool _hx_tmp;
-HXDLIN(1119)					if ((counters->length > 1)) {
-HXLINE(1119)						_hx_tmp = ::hx::IsNull( stanza->getChild(HX_("addresses",22,9f,12,8c),HX_("http://jabber.org/protocol/address",c0,fd,09,ed)) );
+            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1112_sendMessageStanza)
+HXDLIN(1112)		::Array< ::Dynamic> outboxItem1 = ::Array_obj< ::Dynamic>::__new(1)->init(0,outboxItem);
+HXDLIN(1112)		 ::borogove::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1113)		if ((stanza->name != HX_("message",c7,35,11,9a))) {
+HXLINE(1113)			HX_STACK_DO_THROW(HX_("Can only send message stanza this way",cb,e1,b3,60));
+            		}
+HXLINE(1115)		if (::hx::IsNull( outboxItem1->__get(0).StaticCast<  ::borogove::OutboxItem >() )) {
+HXLINE(1115)			outboxItem1[0] = this->outbox->newItem();
+            		}
+HXLINE(1117)		::Array< ::String > counters = this->counterparts();
+HXLINE(1118)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(counters->length);
+HXDLIN(1118)		{
+HXLINE(1118)			int _g = 0;
+HXDLIN(1118)			int _g1 = counters->length;
+HXDLIN(1118)			while((_g < _g1)){
+HXLINE(1118)				_g = (_g + 1);
+HXDLIN(1118)				int i = (_g - 1);
+HXDLIN(1118)				{
+HXLINE(1118)					::String counterpart = ( (::String)(_hx_array_unsafe_get(counters,i)) );
+HXLINE(1119)					 ::borogove::Stanza clone = stanza->clone();
+HXLINE(1120)					::Reflect_obj::setField(clone->attr,HX_("to",7b,65,00,00),counterpart);
+HXLINE(1121)					bool _hx_tmp;
+HXDLIN(1121)					if ((counters->length > 1)) {
+HXLINE(1121)						_hx_tmp = ::hx::IsNull( stanza->getChild(HX_("addresses",22,9f,12,8c),HX_("http://jabber.org/protocol/address",c0,fd,09,ed)) );
             					}
             					else {
-HXLINE(1119)						_hx_tmp = false;
+HXLINE(1121)						_hx_tmp = false;
             					}
-HXDLIN(1119)					if (_hx_tmp) {
-HXLINE(1120)						 ::borogove::Stanza addresses = clone->tag(HX_("addresses",22,9f,12,8c), ::Dynamic(::hx::Anon_obj::Create(1)
+HXDLIN(1121)					if (_hx_tmp) {
+HXLINE(1122)						 ::borogove::Stanza addresses = clone->tag(HX_("addresses",22,9f,12,8c), ::Dynamic(::hx::Anon_obj::Create(1)
             							->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/address",c0,fd,09,ed))));
-HXLINE(1121)						{
-HXLINE(1121)							int _g2 = 0;
-HXDLIN(1121)							while((_g2 < counters->length)){
-HXLINE(1121)								::String counter = counters->__get(_g2);
-HXDLIN(1121)								_g2 = (_g2 + 1);
-HXLINE(1122)								addresses->tag(HX_("address",b4,71,0b,9d), ::Dynamic(::hx::Anon_obj::Create(3)
+HXLINE(1123)						{
+HXLINE(1123)							int _g2 = 0;
+HXDLIN(1123)							while((_g2 < counters->length)){
+HXLINE(1123)								::String counter = counters->__get(_g2);
+HXDLIN(1123)								_g2 = (_g2 + 1);
+HXLINE(1124)								addresses->tag(HX_("address",b4,71,0b,9d), ::Dynamic(::hx::Anon_obj::Create(3)
             									->setFixed(0,HX_("delivered",84,e0,1c,b2),HX_("true",4e,a7,03,4d))
             									->setFixed(1,HX_("jid",c5,ca,50,00),counter)
             									->setFixed(2,HX_("type",ba,f2,08,4d),HX_("to",7b,65,00,00))))->up();
             							}
             						}
-HXLINE(1124)						addresses->up();
+HXLINE(1126)						addresses->up();
             					}
-HXLINE(1116)					::Dynamic inValue = ::thenshim::_Promise::Promise_Impl__obj::resolve(stanza);
-HXDLIN(1116)					result->__unsafe_set(i,inValue);
+HXLINE(1118)					::Dynamic inValue = ::thenshim::_Promise::Promise_Impl__obj::resolve(stanza);
+HXDLIN(1118)					result->__unsafe_set(i,inValue);
             				}
             			}
             		}
-HXDLIN(1116)		::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(result), ::Dynamic(new _hx_Closure_1(_gthis,outboxItem1)),null());
+HXDLIN(1118)		::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(result), ::Dynamic(new _hx_Closure_1(_gthis,outboxItem1)),null());
             	}
 
 
 ::String DirectChat_obj::lastMessageId(){
-            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1145_lastMessageId)
-HXDLIN(1145)		 ::borogove::ChatMessage tmp = this->lastMessage;
-HXDLIN(1145)		::String tmp1;
-HXDLIN(1145)		if (::hx::IsNotNull( tmp )) {
-HXDLIN(1145)			tmp1 = tmp->serverId;
+            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1147_lastMessageId)
+HXDLIN(1147)		 ::borogove::ChatMessage tmp = this->lastMessage;
+HXDLIN(1147)		::String tmp1;
+HXDLIN(1147)		if (::hx::IsNotNull( tmp )) {
+HXDLIN(1147)			tmp1 = tmp->serverId;
             		}
             		else {
-HXDLIN(1145)			tmp1 = null();
+HXDLIN(1147)			tmp1 = null();
             		}
-HXDLIN(1145)		if (::hx::IsNotNull( tmp1 )) {
-HXDLIN(1145)			return tmp1;
+HXDLIN(1147)		if (::hx::IsNotNull( tmp1 )) {
+HXDLIN(1147)			return tmp1;
             		}
             		else {
-HXDLIN(1145)			 ::borogove::ChatMessage tmp2 = this->lastMessage;
-HXDLIN(1145)			if (::hx::IsNotNull( tmp2 )) {
-HXDLIN(1145)				return tmp2->localId;
+HXDLIN(1147)			 ::borogove::ChatMessage tmp2 = this->lastMessage;
+HXDLIN(1147)			if (::hx::IsNotNull( tmp2 )) {
+HXDLIN(1147)				return tmp2->localId;
             			}
             			else {
-HXDLIN(1145)				return null();
+HXDLIN(1147)				return null();
             			}
             		}
-HXDLIN(1145)		return null();
+HXDLIN(1147)		return null();
             	}
 
 
 void DirectChat_obj::markReadUpTo( ::borogove::ChatMessage message){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::DirectChat,_gthis, ::borogove::ChatMessage,message) HXARGC(1)
             		void _hx_run( ::Dynamic _){
-            			HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1150_markReadUpTo)
-HXLINE(1153)			bool _hx_tmp;
-HXDLIN(1153)			if (message->isIncoming()) {
-HXLINE(1153)				_hx_tmp = ::hx::IsNotNull( message->localId );
+            			HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1152_markReadUpTo)
+HXLINE(1155)			bool _hx_tmp;
+HXDLIN(1155)			if (message->isIncoming()) {
+HXLINE(1155)				_hx_tmp = ::hx::IsNotNull( message->localId );
             			}
             			else {
-HXLINE(1153)				_hx_tmp = false;
-            			}
-HXDLIN(1153)			if (_hx_tmp) {
-HXLINE(1154)				int _g = 0;
-HXDLIN(1154)				::Array< ::String > _g1 = _gthis->counterparts();
-HXDLIN(1154)				while((_g < _g1->length)){
-HXLINE(1154)					::String recipient = _g1->__get(_g);
-HXDLIN(1154)					_g = (_g + 1);
-HXLINE(1156)					::String stanza = ::borogove::ID_obj::_hx_long();
-HXDLIN(1156)					 ::borogove::Stanza stanza1 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE(1155)				_hx_tmp = false;
+            			}
+HXDLIN(1155)			if (_hx_tmp) {
+HXLINE(1156)				int _g = 0;
+HXDLIN(1156)				::Array< ::String > _g1 = _gthis->counterparts();
+HXDLIN(1156)				while((_g < _g1->length)){
+HXLINE(1156)					::String recipient = _g1->__get(_g);
+HXDLIN(1156)					_g = (_g + 1);
+HXLINE(1158)					::String stanza = ::borogove::ID_obj::_hx_long();
+HXDLIN(1158)					 ::borogove::Stanza stanza1 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("id",db,5b,00,00),stanza)
             						->setFixed(1,HX_("to",7b,65,00,00),recipient)))->tag(HX_("displayed",21,17,db,c1), ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("id",db,5b,00,00),message->localId)
             						->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:chat-markers:0",96,b8,66,e7))))->up();
-HXLINE(1158)					if (::hx::IsNotNull( message->threadId )) {
-HXLINE(1159)						stanza1->textTag(HX_("thread",ca,7a,b9,8e),message->threadId,null());
+HXLINE(1160)					if (::hx::IsNotNull( message->threadId )) {
+HXLINE(1161)						stanza1->textTag(HX_("thread",ca,7a,b9,8e),message->threadId,null());
             					}
-HXLINE(1161)					_gthis->client->sendStanza(stanza1);
+HXLINE(1163)					_gthis->client->sendStanza(stanza1);
             				}
             			}
-HXLINE(1165)			_gthis->publishMds();
-HXLINE(1166)			_gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
+HXLINE(1167)			_gthis->publishMds();
+HXLINE(1168)			_gthis->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,_gthis));
             		}
             		HX_END_LOCAL_FUNC1((void))
 
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             		::Dynamic _hx_run( ::Dynamic e){
-            			HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1168_markReadUpTo)
-HXLINE(1168)			if (::hx::IsNotNull( e )) {
-HXLINE(1168)				return ::thenshim::_Promise::Promise_Impl__obj::reject(e);
+            			HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1170_markReadUpTo)
+HXLINE(1170)			if (::hx::IsNotNull( e )) {
+HXLINE(1170)				return ::thenshim::_Promise::Promise_Impl__obj::reject(e);
             			}
             			else {
-HXLINE(1168)				return null();
+HXLINE(1170)				return null();
             			}
-HXDLIN(1168)			return null();
+HXDLIN(1170)			return null();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1149_markReadUpTo)
-HXDLIN(1149)		 ::borogove::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1150)		::thenshim::_Promise::Promise_Impl__obj::then(this->markReadUpToMessage(message), ::Dynamic(new _hx_Closure_0(_gthis,message)), ::Dynamic(new _hx_Closure_1()));
+            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_1151_markReadUpTo)
+HXDLIN(1151)		 ::borogove::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1152)		::thenshim::_Promise::Promise_Impl__obj::then(this->markReadUpToMessage(message), ::Dynamic(new _hx_Closure_0(_gthis,message)), ::Dynamic(new _hx_Closure_1()));
             	}
 
 
 void DirectChat_obj::bookmark(){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::DirectChat,_gthis) HXARGC(1)
             		void _hx_run( ::borogove::Stanza response){
-            			HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1187_bookmark)
-HXLINE(1188)			if ((( (::String)(::Reflect_obj::field(response->attr,HX_("type",ba,f2,08,4d))) ) == HX_("error",c8,cb,29,73))) {
-HXLINE(1188)				return;
+            			HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1189_bookmark)
+HXLINE(1190)			if ((( (::String)(::Reflect_obj::field(response->attr,HX_("type",ba,f2,08,4d))) ) == HX_("error",c8,cb,29,73))) {
+HXLINE(1190)				return;
             			}
-HXLINE(1189)			 ::borogove::GenericStream _gthis1 = _gthis->stream;
-HXDLIN(1189)			::String _gthis2 = _gthis->chatId;
-HXDLIN(1189)			_gthis1->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("presence",3b,52,d7,66), ::Dynamic(::hx::Anon_obj::Create(3)
+HXLINE(1191)			 ::borogove::GenericStream _gthis1 = _gthis->stream;
+HXDLIN(1191)			::String _gthis2 = _gthis->chatId;
+HXDLIN(1191)			_gthis1->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("presence",3b,52,d7,66), ::Dynamic(::hx::Anon_obj::Create(3)
             				->setFixed(0,HX_("id",db,5b,00,00),::borogove::ID_obj::_hx_short())
             				->setFixed(1,HX_("to",7b,65,00,00),_gthis2)
             				->setFixed(2,HX_("type",ba,f2,08,4d),HX_("subscribe",4a,0b,18,19)))));
-HXLINE(1190)			if (_gthis->isTrusted()) {
-HXLINE(1190)				 ::borogove::GenericStream _gthis3 = _gthis->stream;
-HXDLIN(1190)				::String _gthis4 = _gthis->chatId;
-HXDLIN(1190)				_gthis3->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("presence",3b,52,d7,66), ::Dynamic(::hx::Anon_obj::Create(3)
+HXLINE(1192)			if (_gthis->isTrusted()) {
+HXLINE(1192)				 ::borogove::GenericStream _gthis3 = _gthis->stream;
+HXDLIN(1192)				::String _gthis4 = _gthis->chatId;
+HXDLIN(1192)				_gthis3->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("presence",3b,52,d7,66), ::Dynamic(::hx::Anon_obj::Create(3)
             					->setFixed(0,HX_("id",db,5b,00,00),::borogove::ID_obj::_hx_short())
             					->setFixed(1,HX_("to",7b,65,00,00),_gthis4)
             					->setFixed(2,HX_("type",ba,f2,08,4d),HX_("subscribed",da,d5,f1,db)))));
@@ -774,88 +774,88 @@ HXDLIN(1190)				_gthis3->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1172_bookmark)
-HXDLIN(1172)		 ::borogove::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(1173)		this->isBookmarked = true;
-HXLINE(1174)		if ((this->uiState == 3)) {
-HXLINE(1175)			this->uiState = 1;
-HXLINE(1176)			this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
+            	HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1174_bookmark)
+HXDLIN(1174)		 ::borogove::DirectChat _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(1175)		this->isBookmarked = true;
+HXLINE(1176)		if ((this->uiState == 3)) {
+HXLINE(1177)			this->uiState = 1;
+HXLINE(1178)			this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
             		}
-HXLINE(1178)		 ::Dynamic attr =  ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(1180)		 ::Dynamic attr =  ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("jid",c5,ca,50,00),this->chatId));
-HXLINE(1179)		bool _hx_tmp;
-HXDLIN(1179)		bool _hx_tmp1;
-HXDLIN(1179)		if (::hx::IsNotNull( this->displayName )) {
-HXLINE(1179)			_hx_tmp1 = (this->displayName != HX_("",00,00,00,00));
+HXLINE(1181)		bool _hx_tmp;
+HXDLIN(1181)		bool _hx_tmp1;
+HXDLIN(1181)		if (::hx::IsNotNull( this->displayName )) {
+HXLINE(1181)			_hx_tmp1 = (this->displayName != HX_("",00,00,00,00));
             		}
             		else {
-HXLINE(1179)			_hx_tmp1 = false;
+HXLINE(1181)			_hx_tmp1 = false;
             		}
-HXDLIN(1179)		if (_hx_tmp1) {
-HXLINE(1179)			_hx_tmp = (this->displayName != this->chatId);
+HXDLIN(1181)		if (_hx_tmp1) {
+HXLINE(1181)			_hx_tmp = (this->displayName != this->chatId);
             		}
             		else {
-HXLINE(1179)			_hx_tmp = false;
+HXLINE(1181)			_hx_tmp = false;
             		}
-HXDLIN(1179)		if (_hx_tmp) {
-HXLINE(1180)			::Reflect_obj::setField(attr,HX_("name",4b,72,ff,48),this->displayName);
+HXDLIN(1181)		if (_hx_tmp) {
+HXLINE(1182)			::Reflect_obj::setField(attr,HX_("name",4b,72,ff,48),this->displayName);
             		}
-HXLINE(1182)		 ::borogove::GenericStream _hx_tmp2 = this->stream;
-HXDLIN(1182)		_hx_tmp2->sendIq( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(1184)		 ::borogove::GenericStream _hx_tmp2 = this->stream;
+HXDLIN(1184)		_hx_tmp2->sendIq( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))))->tag(HX_("query",08,8b,ea,5d), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("jabber:iq:roster",47,76,6e,06))))->tag(HX_("item",13,c5,bf,45),attr)->up()->up(), ::Dynamic(new _hx_Closure_0(_gthis)));
             	}
 
 
 void DirectChat_obj::sendChatState(::String state,::String threadId){
-            	HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1195_sendChatState)
-HXLINE(1196)		if (!(this->isTrusted())) {
-HXLINE(1196)			return;
-            		}
-HXLINE(1198)		{
-HXLINE(1198)			int _g = 0;
-HXDLIN(1198)			::Array< ::String > _g1 = this->counterparts();
-HXDLIN(1198)			while((_g < _g1->length)){
-HXLINE(1198)				::String recipient = _g1->__get(_g);
-HXDLIN(1198)				_g = (_g + 1);
-HXLINE(1200)				::String stanza = ::borogove::ID_obj::_hx_long();
-HXLINE(1202)				::String stanza1 = this->client->jid->asString();
-HXLINE(1199)				 ::borogove::Stanza stanza2 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(4)
+            	HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1197_sendChatState)
+HXLINE(1198)		if (!(this->isTrusted())) {
+HXLINE(1198)			return;
+            		}
+HXLINE(1200)		{
+HXLINE(1200)			int _g = 0;
+HXDLIN(1200)			::Array< ::String > _g1 = this->counterparts();
+HXDLIN(1200)			while((_g < _g1->length)){
+HXLINE(1200)				::String recipient = _g1->__get(_g);
+HXDLIN(1200)				_g = (_g + 1);
+HXLINE(1202)				::String stanza = ::borogove::ID_obj::_hx_long();
+HXLINE(1204)				::String stanza1 = this->client->jid->asString();
+HXLINE(1201)				 ::borogove::Stanza stanza2 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(4)
             					->setFixed(0,HX_("id",db,5b,00,00),stanza)
             					->setFixed(1,HX_("to",7b,65,00,00),recipient)
             					->setFixed(2,HX_("from",6a,a5,c2,43),stanza1)
             					->setFixed(3,HX_("type",ba,f2,08,4d),HX_("chat",d8,5e,bf,41))))->tag(state, ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("http://jabber.org/protocol/chatstates",8e,6d,41,6d))))->up();
-HXLINE(1207)				if (::hx::IsNotNull( threadId )) {
-HXLINE(1208)					stanza2->textTag(HX_("thread",ca,7a,b9,8e),threadId,null());
+HXLINE(1209)				if (::hx::IsNotNull( threadId )) {
+HXLINE(1210)					stanza2->textTag(HX_("thread",ca,7a,b9,8e),threadId,null());
             				}
-HXLINE(1210)				this->stream->sendStanza(stanza2);
+HXLINE(1212)				this->stream->sendStanza(stanza2);
             			}
             		}
             	}
 
 
 void DirectChat_obj::close(){
-            	HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1215_close)
-HXLINE(1216)		if (::hx::IsNotNull( this->typingTimer )) {
-HXLINE(1216)			this->typingTimer->stop();
-            		}
-HXLINE(1217)		if ((this->uiState == 3)) {
-HXLINE(1218)			 ::borogove::Client _hx_tmp = this->client;
-HXDLIN(1218)			::String _hx_tmp1 = this->chatId;
-HXDLIN(1218)			_hx_tmp->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("presence",3b,52,d7,66), ::Dynamic(::hx::Anon_obj::Create(3)
+            	HX_GC_STACKFRAME(&_hx_pos_e6282dde58caedf0_1217_close)
+HXLINE(1218)		if (::hx::IsNotNull( this->typingTimer )) {
+HXLINE(1218)			this->typingTimer->stop();
+            		}
+HXLINE(1219)		if ((this->uiState == 3)) {
+HXLINE(1220)			 ::borogove::Client _hx_tmp = this->client;
+HXDLIN(1220)			::String _hx_tmp1 = this->chatId;
+HXDLIN(1220)			_hx_tmp->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("presence",3b,52,d7,66), ::Dynamic(::hx::Anon_obj::Create(3)
             				->setFixed(0,HX_("id",db,5b,00,00),::borogove::ID_obj::_hx_short())
             				->setFixed(1,HX_("to",7b,65,00,00),_hx_tmp1)
             				->setFixed(2,HX_("type",ba,f2,08,4d),HX_("unsubscribed",73,05,01,48)))));
             		}
-HXLINE(1221)		this->uiState = 2;
-HXLINE(1222)		::Dynamic _hx_tmp2 = this->persistence;
-HXDLIN(1222)		::borogove::Persistence_obj::storeChats(_hx_tmp2,this->client->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
-HXLINE(1223)		if (!(this->isBlocked)) {
-HXLINE(1223)			this->sendChatState(HX_("gone",5f,94,69,44),null());
+HXLINE(1223)		this->uiState = 2;
+HXLINE(1224)		::Dynamic _hx_tmp2 = this->persistence;
+HXDLIN(1224)		::borogove::Persistence_obj::storeChats(_hx_tmp2,this->client->accountId(),::Array_obj< ::Dynamic>::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
+HXLINE(1225)		if (!(this->isBlocked)) {
+HXLINE(1225)			this->sendChatState(HX_("gone",5f,94,69,44),null());
             		}
-HXLINE(1224)		this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
-HXLINE(1225)		this->client->sortChats();
+HXLINE(1226)		this->client->trigger(HX_("chats/update",3d,8e,1d,14),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)));
+HXLINE(1227)		this->client->sortChats();
             	}
 
 
@@ -975,8 +975,8 @@ void DirectChat_obj::__register()
 void DirectChat_obj::__boot()
 {
 {
-            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_935_boot)
-HXDLIN( 935)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_STACKFRAME(&_hx_pos_e6282dde58caedf0_937_boot)
+HXDLIN( 937)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(12)
             				->setFixed(0,HX_("removeReaction",0d,24,0b,c1), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
diff --git a/Sources/c_borogove/src/borogove/EncryptionInfo.cpp b/Sources/c_borogove/src/borogove/EncryptionInfo.cpp
index 2467053..20e9883 100644
--- a/Sources/c_borogove/src/borogove/EncryptionInfo.cpp
+++ b/Sources/c_borogove/src/borogove/EncryptionInfo.cpp
@@ -18,11 +18,11 @@
 #endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_495491200499f74a_35_new,"borogove.EncryptionInfo","new",0x76c80d50,"borogove.EncryptionInfo.new","borogove/EncryptionInfo.hx",35,0x95cafaff)
-HX_LOCAL_STACK_FRAME(_hx_pos_8773c78945f68a55_423_status__fromC,"borogove.EncryptionInfo","status__fromC",0x22417c77,"borogove.EncryptionInfo.status__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_8773c78945f68a55_423_method__fromC,"borogove.EncryptionInfo","method__fromC",0xe6ee50a8,"borogove.EncryptionInfo.method__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_8773c78945f68a55_423_methodName__fromC,"borogove.EncryptionInfo","methodName__fromC",0xcee0691d,"borogove.EncryptionInfo.methodName__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_8773c78945f68a55_423_reason__fromC,"borogove.EncryptionInfo","reason__fromC",0x325a6a25,"borogove.EncryptionInfo.reason__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_8773c78945f68a55_423_reasonText__fromC,"borogove.EncryptionInfo","reasonText__fromC",0xae981af8,"borogove.EncryptionInfo.reasonText__fromC","HaxeCBridge.hx",423,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_8773c78945f68a55_450_status__fromC,"borogove.EncryptionInfo","status__fromC",0x22417c77,"borogove.EncryptionInfo.status__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_8773c78945f68a55_450_method__fromC,"borogove.EncryptionInfo","method__fromC",0xe6ee50a8,"borogove.EncryptionInfo.method__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_8773c78945f68a55_450_methodName__fromC,"borogove.EncryptionInfo","methodName__fromC",0xcee0691d,"borogove.EncryptionInfo.methodName__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_8773c78945f68a55_450_reason__fromC,"borogove.EncryptionInfo","reason__fromC",0x325a6a25,"borogove.EncryptionInfo.reason__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_8773c78945f68a55_450_reasonText__fromC,"borogove.EncryptionInfo","reasonText__fromC",0xae981af8,"borogove.EncryptionInfo.reasonText__fromC","HaxeCBridge.hx",450,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_495491200499f74a_44_toXml,"borogove.EncryptionInfo","toXml",0x3dce780c,"borogove.EncryptionInfo.toXml","borogove/EncryptionInfo.hx",44,0x95cafaff)
 HX_LOCAL_STACK_FRAME(_hx_pos_495491200499f74a_62_fromStanza,"borogove.EncryptionInfo","fromStanza",0xbb51a40f,"borogove.EncryptionInfo.fromStanza","borogove/EncryptionInfo.hx",62,0x95cafaff)
 HX_LOCAL_STACK_FRAME(_hx_pos_495491200499f74a_17_boot,"borogove.EncryptionInfo","boot",0x705c9942,"borogove.EncryptionInfo.boot","borogove/EncryptionInfo.hx",17,0x95cafaff)
@@ -54,40 +54,40 @@ bool EncryptionInfo_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 int EncryptionInfo_obj::status__fromC(){
-            	HX_STACKFRAME(&_hx_pos_8773c78945f68a55_423_status__fromC)
-HXDLIN( 423)		return this->status;
+            	HX_STACKFRAME(&_hx_pos_8773c78945f68a55_450_status__fromC)
+HXDLIN( 450)		return this->status;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(EncryptionInfo_obj,status__fromC,return )
 
 ::String EncryptionInfo_obj::method__fromC(){
-            	HX_STACKFRAME(&_hx_pos_8773c78945f68a55_423_method__fromC)
-HXDLIN( 423)		return this->method;
+            	HX_STACKFRAME(&_hx_pos_8773c78945f68a55_450_method__fromC)
+HXDLIN( 450)		return this->method;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(EncryptionInfo_obj,method__fromC,return )
 
 ::String EncryptionInfo_obj::methodName__fromC(){
-            	HX_STACKFRAME(&_hx_pos_8773c78945f68a55_423_methodName__fromC)
-HXDLIN( 423)		return this->methodName;
+            	HX_STACKFRAME(&_hx_pos_8773c78945f68a55_450_methodName__fromC)
+HXDLIN( 450)		return this->methodName;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(EncryptionInfo_obj,methodName__fromC,return )
 
 ::String EncryptionInfo_obj::reason__fromC(){
-            	HX_STACKFRAME(&_hx_pos_8773c78945f68a55_423_reason__fromC)
-HXDLIN( 423)		return this->reason;
+            	HX_STACKFRAME(&_hx_pos_8773c78945f68a55_450_reason__fromC)
+HXDLIN( 450)		return this->reason;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(EncryptionInfo_obj,reason__fromC,return )
 
 ::String EncryptionInfo_obj::reasonText__fromC(){
-            	HX_STACKFRAME(&_hx_pos_8773c78945f68a55_423_reasonText__fromC)
-HXDLIN( 423)		return this->reasonText;
+            	HX_STACKFRAME(&_hx_pos_8773c78945f68a55_450_reasonText__fromC)
+HXDLIN( 450)		return this->reasonText;
             	}
 
 
diff --git a/Sources/c_borogove/src/borogove/Form.cpp b/Sources/c_borogove/src/borogove/Form.cpp
index ee06ba3..5f760ba 100644
--- a/Sources/c_borogove/src/borogove/Form.cpp
+++ b/Sources/c_borogove/src/borogove/Form.cpp
@@ -38,30 +38,30 @@
 #include <haxe/IMap.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_d5f5e869927de4ab_101_new,"borogove.Form","new",0x1fd8d343,"borogove.Form.new","borogove/Form.hx",101,0x25d2f7ac)
-HX_LOCAL_STACK_FRAME(_hx_pos_d5f5e869927de4ab_110_isResult,"borogove.Form","isResult",0x5904aaa4,"borogove.Form.isResult","borogove/Form.hx",110,0x25d2f7ac)
-HX_LOCAL_STACK_FRAME(_hx_pos_d5f5e869927de4ab_120_title,"borogove.Form","title",0xdd30d73b,"borogove.Form.title","borogove/Form.hx",120,0x25d2f7ac)
-HX_LOCAL_STACK_FRAME(_hx_pos_d5f5e869927de4ab_127_url,"borogove.Form","url",0x1fde2e52,"borogove.Form.url","borogove/Form.hx",127,0x25d2f7ac)
-HX_LOCAL_STACK_FRAME(_hx_pos_d5f5e869927de4ab_133_items,"borogove.Form","items",0x8f026da3,"borogove.Form.items","borogove/Form.hx",133,0x25d2f7ac)
-HX_LOCAL_STACK_FRAME(_hx_pos_6b9e5fdea75c39d7_311_items__fromC,"borogove.Form","items__fromC",0x8be04d36,"borogove.Form.items__fromC","HaxeCBridge.hx",311,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_d5f5e869927de4ab_219_submit,"borogove.Form","submit",0x241a0515,"borogove.Form.submit","borogove/Form.hx",219,0x25d2f7ac)
-HX_LOCAL_STACK_FRAME(_hx_pos_d5f5e869927de4ab_96_boot,"borogove.Form","boot",0xb5f907ef,"borogove.Form.boot","borogove/Form.hx",96,0x25d2f7ac)
+HX_DEFINE_STACK_FRAME(_hx_pos_d5f5e869927de4ab_102_new,"borogove.Form","new",0x1fd8d343,"borogove.Form.new","borogove/Form.hx",102,0x25d2f7ac)
+HX_LOCAL_STACK_FRAME(_hx_pos_d5f5e869927de4ab_111_isResult,"borogove.Form","isResult",0x5904aaa4,"borogove.Form.isResult","borogove/Form.hx",111,0x25d2f7ac)
+HX_LOCAL_STACK_FRAME(_hx_pos_d5f5e869927de4ab_121_title,"borogove.Form","title",0xdd30d73b,"borogove.Form.title","borogove/Form.hx",121,0x25d2f7ac)
+HX_LOCAL_STACK_FRAME(_hx_pos_d5f5e869927de4ab_128_url,"borogove.Form","url",0x1fde2e52,"borogove.Form.url","borogove/Form.hx",128,0x25d2f7ac)
+HX_LOCAL_STACK_FRAME(_hx_pos_d5f5e869927de4ab_134_items,"borogove.Form","items",0x8f026da3,"borogove.Form.items","borogove/Form.hx",134,0x25d2f7ac)
+HX_LOCAL_STACK_FRAME(_hx_pos_6b9e5fdea75c39d7_335_items__fromC,"borogove.Form","items__fromC",0x8be04d36,"borogove.Form.items__fromC","HaxeCBridge.hx",335,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_d5f5e869927de4ab_220_submit,"borogove.Form","submit",0x241a0515,"borogove.Form.submit","borogove/Form.hx",220,0x25d2f7ac)
+HX_LOCAL_STACK_FRAME(_hx_pos_d5f5e869927de4ab_97_boot,"borogove.Form","boot",0xb5f907ef,"borogove.Form.boot","borogove/Form.hx",97,0x25d2f7ac)
 namespace borogove{
 
 void Form_obj::__construct( ::borogove::Stanza form, ::borogove::Stanza oob){
-            	HX_STACKFRAME(&_hx_pos_d5f5e869927de4ab_101_new)
-HXLINE( 102)		bool _hx_tmp;
-HXDLIN( 102)		if (::hx::IsNull( form )) {
-HXLINE( 102)			_hx_tmp = ::hx::IsNull( oob );
+            	HX_STACKFRAME(&_hx_pos_d5f5e869927de4ab_102_new)
+HXLINE( 103)		bool _hx_tmp;
+HXDLIN( 103)		if (::hx::IsNull( form )) {
+HXLINE( 103)			_hx_tmp = ::hx::IsNull( oob );
             		}
             		else {
-HXLINE( 102)			_hx_tmp = false;
+HXLINE( 103)			_hx_tmp = false;
             		}
-HXDLIN( 102)		if (_hx_tmp) {
-HXLINE( 102)			HX_STACK_DO_THROW(HX_("Need a form or OOB",98,11,b8,58));
+HXDLIN( 103)		if (_hx_tmp) {
+HXLINE( 103)			HX_STACK_DO_THROW(HX_("Need a form or OOB",98,11,b8,58));
             		}
-HXLINE( 103)		this->form = form;
-HXLINE( 104)		this->oob = oob;
+HXLINE( 104)		this->form = form;
+HXLINE( 105)		this->oob = oob;
             	}
 
 Dynamic Form_obj::__CreateEmpty() { return new Form_obj; }
@@ -96,354 +96,354 @@ void *Form_obj::_hx_getInterface(int inHash) {
 }
 
 bool Form_obj::isResult(){
-            	HX_STACKFRAME(&_hx_pos_d5f5e869927de4ab_110_isResult)
-HXLINE( 111)		if (::hx::IsNull( this->form )) {
-HXLINE( 111)			return true;
+            	HX_STACKFRAME(&_hx_pos_d5f5e869927de4ab_111_isResult)
+HXLINE( 112)		if (::hx::IsNull( this->form )) {
+HXLINE( 112)			return true;
             		}
-HXLINE( 113)		::String _hx_tmp;
-HXDLIN( 113)		::String tmp = ( (::String)(::Reflect_obj::field(this->form->attr,HX_("type",ba,f2,08,4d))) );
-HXDLIN( 113)		if (::hx::IsNotNull( tmp )) {
-HXLINE( 113)			_hx_tmp = tmp;
+HXLINE( 114)		::String _hx_tmp;
+HXDLIN( 114)		::String tmp = ( (::String)(::Reflect_obj::field(this->form->attr,HX_("type",ba,f2,08,4d))) );
+HXDLIN( 114)		if (::hx::IsNotNull( tmp )) {
+HXLINE( 114)			_hx_tmp = tmp;
             		}
             		else {
-HXLINE( 113)			_hx_tmp = HX_("form",44,61,c0,43);
+HXLINE( 114)			_hx_tmp = HX_("form",44,61,c0,43);
             		}
-HXDLIN( 113)		return (_hx_tmp == HX_("result",dd,68,84,08));
+HXDLIN( 114)		return (_hx_tmp == HX_("result",dd,68,84,08));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Form_obj,isResult,return )
 
 ::String Form_obj::title(){
-            	HX_STACKFRAME(&_hx_pos_d5f5e869927de4ab_120_title)
-HXDLIN( 120)		if (::hx::IsNotNull( this->form )) {
-HXDLIN( 120)			return this->form->getChildText(HX_("title",98,15,3b,10),null());
+            	HX_STACKFRAME(&_hx_pos_d5f5e869927de4ab_121_title)
+HXDLIN( 121)		if (::hx::IsNotNull( this->form )) {
+HXDLIN( 121)			return this->form->getChildText(HX_("title",98,15,3b,10),null());
             		}
             		else {
-HXDLIN( 120)			return this->oob->getChildText(HX_("desc",51,5e,66,42),null());
+HXDLIN( 121)			return this->oob->getChildText(HX_("desc",51,5e,66,42),null());
             		}
-HXDLIN( 120)		return null();
+HXDLIN( 121)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Form_obj,title,return )
 
 ::String Form_obj::url(){
-            	HX_STACKFRAME(&_hx_pos_d5f5e869927de4ab_127_url)
-HXDLIN( 127)		 ::borogove::Stanza tmp = this->oob;
-HXDLIN( 127)		if (::hx::IsNotNull( tmp )) {
-HXDLIN( 127)			return tmp->getChildText(HX_("url",6f,2b,59,00),null());
+            	HX_STACKFRAME(&_hx_pos_d5f5e869927de4ab_128_url)
+HXDLIN( 128)		 ::borogove::Stanza tmp = this->oob;
+HXDLIN( 128)		if (::hx::IsNotNull( tmp )) {
+HXDLIN( 128)			return tmp->getChildText(HX_("url",6f,2b,59,00),null());
             		}
             		else {
-HXDLIN( 127)			return null();
+HXDLIN( 128)			return null();
             		}
-HXDLIN( 127)		return null();
+HXDLIN( 128)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Form_obj,url,return )
 
 ::Array< ::Dynamic> Form_obj::items(){
-            	HX_GC_STACKFRAME(&_hx_pos_d5f5e869927de4ab_133_items)
-HXLINE( 134)		if (::hx::IsNull( this->form )) {
-HXLINE( 134)			return ::Array_obj< ::Dynamic>::__new(0);
+            	HX_GC_STACKFRAME(&_hx_pos_d5f5e869927de4ab_134_items)
+HXLINE( 135)		if (::hx::IsNull( this->form )) {
+HXLINE( 135)			return ::Array_obj< ::Dynamic>::__new(0);
             		}
-HXLINE( 136)		 ::borogove::Stanza s = this->form;
-HXLINE( 137)		bool hasLayout = ::hx::IsNotNull( s->getChild(HX_("page",4f,da,51,4a),HX_("http://jabber.org/protocol/xdata-layout",a9,5c,62,a8)) );
-HXLINE( 138)		::Array< ::Dynamic> items = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 139)		{
-HXLINE( 139)			int _g = 0;
-HXDLIN( 139)			::Array< ::Dynamic> _g1 = s->allTags(null(),null());
-HXDLIN( 139)			while((_g < _g1->length)){
-HXLINE( 139)				 ::borogove::Stanza child = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
-HXDLIN( 139)				_g = (_g + 1);
-HXLINE( 140)				bool _hx_tmp;
-HXDLIN( 140)				if ((child->name == HX_("instructions",a5,96,3f,6d))) {
-HXLINE( 140)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) )) {
-HXLINE( 140)						_hx_tmp = (( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("jabber:x:data",c2,e1,e9,7c));
+HXLINE( 137)		 ::borogove::Stanza s = this->form;
+HXLINE( 138)		bool hasLayout = ::hx::IsNotNull( s->getChild(HX_("page",4f,da,51,4a),HX_("http://jabber.org/protocol/xdata-layout",a9,5c,62,a8)) );
+HXLINE( 139)		::Array< ::Dynamic> items = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 140)		{
+HXLINE( 140)			int _g = 0;
+HXDLIN( 140)			::Array< ::Dynamic> _g1 = s->allTags(null(),null());
+HXDLIN( 140)			while((_g < _g1->length)){
+HXLINE( 140)				 ::borogove::Stanza child = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
+HXDLIN( 140)				_g = (_g + 1);
+HXLINE( 141)				bool _hx_tmp;
+HXDLIN( 141)				if ((child->name == HX_("instructions",a5,96,3f,6d))) {
+HXLINE( 141)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) )) {
+HXLINE( 141)						_hx_tmp = (( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("jabber:x:data",c2,e1,e9,7c));
             					}
             					else {
-HXLINE( 140)						_hx_tmp = true;
+HXLINE( 141)						_hx_tmp = true;
             					}
             				}
             				else {
-HXLINE( 140)					_hx_tmp = false;
+HXLINE( 141)					_hx_tmp = false;
             				}
-HXDLIN( 140)				if (_hx_tmp) {
-HXLINE( 141)					::String _hx_tmp1 = child->getText();
-HXDLIN( 141)					items->push( ::borogove::FormItem_obj::__alloc( HX_CTX ,_hx_tmp1,null(),null(),null(),null(),( (::String)(::Reflect_obj::field(child->attr,HX_("type",ba,f2,08,4d))) )));
+HXDLIN( 141)				if (_hx_tmp) {
+HXLINE( 142)					::String _hx_tmp1 = child->getText();
+HXDLIN( 142)					items->push( ::borogove::FormItem_obj::__alloc( HX_CTX ,_hx_tmp1,null(),null(),null(),null(),( (::String)(::Reflect_obj::field(child->attr,HX_("type",ba,f2,08,4d))) )));
             				}
-HXLINE( 143)				bool _hx_tmp2;
-HXDLIN( 143)				bool _hx_tmp3;
-HXDLIN( 143)				if (!(hasLayout)) {
-HXLINE( 143)					_hx_tmp3 = (child->name == HX_("field",ba,94,93,00));
+HXLINE( 144)				bool _hx_tmp2;
+HXDLIN( 144)				bool _hx_tmp3;
+HXDLIN( 144)				if (!(hasLayout)) {
+HXLINE( 144)					_hx_tmp3 = (child->name == HX_("field",ba,94,93,00));
             				}
             				else {
-HXLINE( 143)					_hx_tmp3 = false;
+HXLINE( 144)					_hx_tmp3 = false;
             				}
-HXDLIN( 143)				if (_hx_tmp3) {
-HXLINE( 143)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) )) {
-HXLINE( 143)						_hx_tmp2 = (( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("jabber:x:data",c2,e1,e9,7c));
+HXDLIN( 144)				if (_hx_tmp3) {
+HXLINE( 144)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) )) {
+HXLINE( 144)						_hx_tmp2 = (( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("jabber:x:data",c2,e1,e9,7c));
             					}
             					else {
-HXLINE( 143)						_hx_tmp2 = true;
+HXLINE( 144)						_hx_tmp2 = true;
             					}
             				}
             				else {
-HXLINE( 143)					_hx_tmp2 = false;
+HXLINE( 144)					_hx_tmp2 = false;
             				}
-HXDLIN( 143)				if (_hx_tmp2) {
-HXLINE( 144)					 ::borogove::Stanza fld = child;
-HXLINE( 145)					bool _hx_tmp4;
-HXDLIN( 145)					::String attr = ( (::String)(::Reflect_obj::field(fld->attr,HX_("type",ba,f2,08,4d))) );
-HXDLIN( 145)					::String _hx_tmp5;
-HXDLIN( 145)					if ((attr == HX_("jid-single",50,8e,f5,83))) {
-HXLINE( 145)						_hx_tmp5 = HX_("text-single",68,19,96,16);
+HXDLIN( 144)				if (_hx_tmp2) {
+HXLINE( 145)					 ::borogove::Stanza fld = child;
+HXLINE( 146)					bool _hx_tmp4;
+HXDLIN( 146)					::String attr = ( (::String)(::Reflect_obj::field(fld->attr,HX_("type",ba,f2,08,4d))) );
+HXDLIN( 146)					::String _hx_tmp5;
+HXDLIN( 146)					if ((attr == HX_("jid-single",50,8e,f5,83))) {
+HXLINE( 146)						_hx_tmp5 = HX_("text-single",68,19,96,16);
             					}
             					else {
-HXLINE( 145)						if ((attr == HX_("jid-multi",b1,73,6d,1a))) {
-HXLINE( 145)							_hx_tmp5 = HX_("text-multi",99,d3,c0,10);
+HXLINE( 146)						if ((attr == HX_("jid-multi",b1,73,6d,1a))) {
+HXLINE( 146)							_hx_tmp5 = HX_("text-multi",99,d3,c0,10);
             						}
             						else {
-HXLINE( 145)							_hx_tmp5 = attr;
+HXLINE( 146)							_hx_tmp5 = attr;
             						}
             					}
-HXDLIN( 145)					if ((_hx_tmp5 == HX_("fixed",74,f9,a1,00))) {
-HXLINE( 145)						_hx_tmp4 = ::hx::IsNull( ( (::String)(::Reflect_obj::field(fld->attr,HX_("label",f4,0d,af,6f))) ) );
+HXDLIN( 146)					if ((_hx_tmp5 == HX_("fixed",74,f9,a1,00))) {
+HXLINE( 146)						_hx_tmp4 = ::hx::IsNull( ( (::String)(::Reflect_obj::field(fld->attr,HX_("label",f4,0d,af,6f))) ) );
             					}
             					else {
-HXLINE( 145)						_hx_tmp4 = false;
+HXLINE( 146)						_hx_tmp4 = false;
             					}
-HXDLIN( 145)					if (_hx_tmp4) {
-HXLINE( 146)						int _g2 = 0;
-HXDLIN( 146)						::Array< ::String > _g3 = ::borogove::_DataForm::Field_Impl__obj::get_value(fld);
-HXDLIN( 146)						while((_g2 < _g3->length)){
-HXLINE( 146)							::String v = _g3->__get(_g2);
-HXDLIN( 146)							_g2 = (_g2 + 1);
-HXLINE( 147)							items->push( ::borogove::FormItem_obj::__alloc( HX_CTX ,v,null(),null(),null(),null(),null()));
+HXDLIN( 146)					if (_hx_tmp4) {
+HXLINE( 147)						int _g2 = 0;
+HXDLIN( 147)						::Array< ::String > _g3 = ::borogove::_DataForm::Field_Impl__obj::get_value(fld);
+HXDLIN( 147)						while((_g2 < _g3->length)){
+HXLINE( 147)							::String v = _g3->__get(_g2);
+HXDLIN( 147)							_g2 = (_g2 + 1);
+HXLINE( 148)							items->push( ::borogove::FormItem_obj::__alloc( HX_CTX ,v,null(),null(),null(),null(),null()));
             						}
             					}
             					else {
-HXLINE( 149)						::String attr1 = ( (::String)(::Reflect_obj::field(fld->attr,HX_("type",ba,f2,08,4d))) );
-HXDLIN( 149)						::String _hx_tmp6;
-HXDLIN( 149)						if ((attr1 == HX_("jid-single",50,8e,f5,83))) {
-HXLINE( 149)							_hx_tmp6 = HX_("text-single",68,19,96,16);
+HXLINE( 150)						::String attr1 = ( (::String)(::Reflect_obj::field(fld->attr,HX_("type",ba,f2,08,4d))) );
+HXDLIN( 150)						::String _hx_tmp6;
+HXDLIN( 150)						if ((attr1 == HX_("jid-single",50,8e,f5,83))) {
+HXLINE( 150)							_hx_tmp6 = HX_("text-single",68,19,96,16);
             						}
             						else {
-HXLINE( 149)							if ((attr1 == HX_("jid-multi",b1,73,6d,1a))) {
-HXLINE( 149)								_hx_tmp6 = HX_("text-multi",99,d3,c0,10);
+HXLINE( 150)							if ((attr1 == HX_("jid-multi",b1,73,6d,1a))) {
+HXLINE( 150)								_hx_tmp6 = HX_("text-multi",99,d3,c0,10);
             							}
             							else {
-HXLINE( 149)								_hx_tmp6 = attr1;
+HXLINE( 150)								_hx_tmp6 = attr1;
             							}
             						}
-HXDLIN( 149)						if ((_hx_tmp6 != HX_("hidden",6a,ff,95,4c))) {
-HXLINE( 150)							 ::borogove::FormField _hx_tmp7;
-HXDLIN( 150)							if (::hx::IsNull( fld )) {
-HXLINE( 150)								_hx_tmp7 = null();
+HXDLIN( 150)						if ((_hx_tmp6 != HX_("hidden",6a,ff,95,4c))) {
+HXLINE( 151)							 ::borogove::FormField _hx_tmp7;
+HXDLIN( 151)							if (::hx::IsNull( fld )) {
+HXLINE( 151)								_hx_tmp7 = null();
             							}
             							else {
-HXLINE( 150)								_hx_tmp7 =  ::borogove::FormField_obj::__alloc( HX_CTX ,fld);
+HXLINE( 151)								_hx_tmp7 =  ::borogove::FormField_obj::__alloc( HX_CTX ,fld);
             							}
-HXDLIN( 150)							items->push( ::borogove::FormItem_obj::__alloc( HX_CTX ,null(),_hx_tmp7,null(),null(),null(),null()));
+HXDLIN( 151)							items->push( ::borogove::FormItem_obj::__alloc( HX_CTX ,null(),_hx_tmp7,null(),null(),null(),null()));
             						}
             					}
             				}
-HXLINE( 153)				bool _hx_tmp8;
-HXDLIN( 153)				bool _hx_tmp9;
-HXDLIN( 153)				if (!(hasLayout)) {
-HXLINE( 153)					_hx_tmp9 = (child->name == HX_("reported",13,2a,94,dd));
+HXLINE( 154)				bool _hx_tmp8;
+HXDLIN( 154)				bool _hx_tmp9;
+HXDLIN( 154)				if (!(hasLayout)) {
+HXLINE( 154)					_hx_tmp9 = (child->name == HX_("reported",13,2a,94,dd));
             				}
             				else {
-HXLINE( 153)					_hx_tmp9 = false;
+HXLINE( 154)					_hx_tmp9 = false;
             				}
-HXDLIN( 153)				if (_hx_tmp9) {
-HXLINE( 153)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) )) {
-HXLINE( 153)						_hx_tmp8 = (( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("jabber:x:data",c2,e1,e9,7c));
+HXDLIN( 154)				if (_hx_tmp9) {
+HXLINE( 154)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) )) {
+HXLINE( 154)						_hx_tmp8 = (( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("jabber:x:data",c2,e1,e9,7c));
             					}
             					else {
-HXLINE( 153)						_hx_tmp8 = true;
+HXLINE( 154)						_hx_tmp8 = true;
             					}
             				}
             				else {
-HXLINE( 153)					_hx_tmp8 = false;
+HXLINE( 154)					_hx_tmp8 = false;
             				}
-HXDLIN( 153)				if (_hx_tmp8) {
-HXLINE( 156)					 ::borogove::Stanza tmp = this->form->getChild(HX_("reported",13,2a,94,dd),null());
-HXDLIN( 156)					::Array< ::Dynamic> tmp1;
-HXDLIN( 156)					if (::hx::IsNotNull( tmp )) {
-HXLINE( 156)						tmp1 = tmp->allTags(HX_("field",ba,94,93,00),null());
+HXDLIN( 154)				if (_hx_tmp8) {
+HXLINE( 157)					 ::borogove::Stanza tmp = this->form->getChild(HX_("reported",13,2a,94,dd),null());
+HXDLIN( 157)					::Array< ::Dynamic> tmp1;
+HXDLIN( 157)					if (::hx::IsNotNull( tmp )) {
+HXLINE( 157)						tmp1 = tmp->allTags(HX_("field",ba,94,93,00),null());
             					}
             					else {
-HXLINE( 156)						tmp1 = null();
+HXLINE( 157)						tmp1 = null();
             					}
-HXDLIN( 156)					::Array< ::Dynamic> _hx_tmp10;
-HXDLIN( 156)					if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 156)						::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(tmp1->length);
-HXDLIN( 156)						{
-HXLINE( 156)							int _g4 = 0;
-HXDLIN( 156)							int _g5 = tmp1->length;
-HXDLIN( 156)							while((_g4 < _g5)){
-HXLINE( 156)								_g4 = (_g4 + 1);
-HXDLIN( 156)								int i = (_g4 - 1);
-HXDLIN( 156)								{
-HXLINE( 156)									 ::borogove::Stanza f = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(tmp1,i)) );
-HXDLIN( 156)									 ::borogove::FormField inValue;
-HXDLIN( 156)									if (::hx::IsNull( f )) {
-HXLINE( 156)										inValue = null();
+HXDLIN( 157)					::Array< ::Dynamic> _hx_tmp10;
+HXDLIN( 157)					if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 157)						::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(tmp1->length);
+HXDLIN( 157)						{
+HXLINE( 157)							int _g4 = 0;
+HXDLIN( 157)							int _g5 = tmp1->length;
+HXDLIN( 157)							while((_g4 < _g5)){
+HXLINE( 157)								_g4 = (_g4 + 1);
+HXDLIN( 157)								int i = (_g4 - 1);
+HXDLIN( 157)								{
+HXLINE( 157)									 ::borogove::Stanza f = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(tmp1,i)) );
+HXDLIN( 157)									 ::borogove::FormField inValue;
+HXDLIN( 157)									if (::hx::IsNull( f )) {
+HXLINE( 157)										inValue = null();
             									}
             									else {
-HXLINE( 156)										inValue =  ::borogove::FormField_obj::__alloc( HX_CTX ,f);
+HXLINE( 157)										inValue =  ::borogove::FormField_obj::__alloc( HX_CTX ,f);
             									}
-HXDLIN( 156)									result->__unsafe_set(i,inValue);
+HXDLIN( 157)									result->__unsafe_set(i,inValue);
             								}
             							}
             						}
-HXDLIN( 156)						_hx_tmp10 = result;
+HXDLIN( 157)						_hx_tmp10 = result;
             					}
             					else {
-HXLINE( 156)						_hx_tmp10 = null();
+HXLINE( 157)						_hx_tmp10 = null();
             					}
-HXLINE( 157)					::Array< ::Dynamic> tmp2 = this->form->allTags(HX_("item",13,c5,bf,45),null());
-HXDLIN( 157)					::Array< ::Dynamic> tmp3;
-HXDLIN( 157)					if (::hx::IsNotNull( tmp2 )) {
-HXLINE( 157)						::Array< ::Dynamic> result1 = ::Array_obj< ::Dynamic>::__new(tmp2->length);
-HXDLIN( 157)						{
-HXLINE( 157)							int _g6 = 0;
-HXDLIN( 157)							int _g7 = tmp2->length;
-HXDLIN( 157)							while((_g6 < _g7)){
-HXLINE( 157)								_g6 = (_g6 + 1);
-HXDLIN( 157)								int i1 = (_g6 - 1);
-HXDLIN( 157)								{
-HXLINE( 157)									::Array< ::Dynamic> inValue1 = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(tmp2,i1)) )->allTags(HX_("field",ba,94,93,00),null());
-HXDLIN( 157)									result1->__unsafe_set(i1,inValue1);
+HXLINE( 158)					::Array< ::Dynamic> tmp2 = this->form->allTags(HX_("item",13,c5,bf,45),null());
+HXDLIN( 158)					::Array< ::Dynamic> tmp3;
+HXDLIN( 158)					if (::hx::IsNotNull( tmp2 )) {
+HXLINE( 158)						::Array< ::Dynamic> result1 = ::Array_obj< ::Dynamic>::__new(tmp2->length);
+HXDLIN( 158)						{
+HXLINE( 158)							int _g6 = 0;
+HXDLIN( 158)							int _g7 = tmp2->length;
+HXDLIN( 158)							while((_g6 < _g7)){
+HXLINE( 158)								_g6 = (_g6 + 1);
+HXDLIN( 158)								int i1 = (_g6 - 1);
+HXDLIN( 158)								{
+HXLINE( 158)									::Array< ::Dynamic> inValue1 = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(tmp2,i1)) )->allTags(HX_("field",ba,94,93,00),null());
+HXDLIN( 158)									result1->__unsafe_set(i1,inValue1);
             								}
             							}
             						}
-HXDLIN( 157)						tmp3 = result1;
+HXDLIN( 158)						tmp3 = result1;
             					}
             					else {
-HXLINE( 157)						tmp3 = null();
+HXLINE( 158)						tmp3 = null();
             					}
-HXDLIN( 157)					::Array< ::Dynamic> tmp4;
-HXDLIN( 157)					if (::hx::IsNotNull( tmp3 )) {
-HXLINE( 157)						::Array< ::Dynamic> result2 = ::Array_obj< ::Dynamic>::__new(tmp3->length);
-HXDLIN( 157)						{
-HXLINE( 157)							int _g8 = 0;
-HXDLIN( 157)							int _g9 = tmp3->length;
-HXDLIN( 157)							while((_g8 < _g9)){
-HXLINE( 157)								_g8 = (_g8 + 1);
-HXDLIN( 157)								int i2 = (_g8 - 1);
-HXDLIN( 157)								{
-HXLINE( 157)									::Array< ::Dynamic> row = ( (::Array< ::Dynamic>)(_hx_array_unsafe_get(tmp3,i2)) );
-HXDLIN( 157)									::Array< ::Dynamic> result3 = ::Array_obj< ::Dynamic>::__new(row->length);
-HXDLIN( 157)									{
-HXLINE( 157)										int _g10 = 0;
-HXDLIN( 157)										int _g11 = row->length;
-HXDLIN( 157)										while((_g10 < _g11)){
-HXLINE( 157)											_g10 = (_g10 + 1);
-HXDLIN( 157)											int i3 = (_g10 - 1);
-HXDLIN( 157)											{
-HXLINE( 157)												 ::borogove::Stanza f1 = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(row,i3)) );
-HXDLIN( 157)												 ::borogove::FormField inValue2;
-HXDLIN( 157)												if (::hx::IsNull( f1 )) {
-HXLINE( 157)													inValue2 = null();
+HXDLIN( 158)					::Array< ::Dynamic> tmp4;
+HXDLIN( 158)					if (::hx::IsNotNull( tmp3 )) {
+HXLINE( 158)						::Array< ::Dynamic> result2 = ::Array_obj< ::Dynamic>::__new(tmp3->length);
+HXDLIN( 158)						{
+HXLINE( 158)							int _g8 = 0;
+HXDLIN( 158)							int _g9 = tmp3->length;
+HXDLIN( 158)							while((_g8 < _g9)){
+HXLINE( 158)								_g8 = (_g8 + 1);
+HXDLIN( 158)								int i2 = (_g8 - 1);
+HXDLIN( 158)								{
+HXLINE( 158)									::Array< ::Dynamic> row = ( (::Array< ::Dynamic>)(_hx_array_unsafe_get(tmp3,i2)) );
+HXDLIN( 158)									::Array< ::Dynamic> result3 = ::Array_obj< ::Dynamic>::__new(row->length);
+HXDLIN( 158)									{
+HXLINE( 158)										int _g10 = 0;
+HXDLIN( 158)										int _g11 = row->length;
+HXDLIN( 158)										while((_g10 < _g11)){
+HXLINE( 158)											_g10 = (_g10 + 1);
+HXDLIN( 158)											int i3 = (_g10 - 1);
+HXDLIN( 158)											{
+HXLINE( 158)												 ::borogove::Stanza f1 = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(row,i3)) );
+HXDLIN( 158)												 ::borogove::FormField inValue2;
+HXDLIN( 158)												if (::hx::IsNull( f1 )) {
+HXLINE( 158)													inValue2 = null();
             												}
             												else {
-HXLINE( 157)													inValue2 =  ::borogove::FormField_obj::__alloc( HX_CTX ,f1);
+HXLINE( 158)													inValue2 =  ::borogove::FormField_obj::__alloc( HX_CTX ,f1);
             												}
-HXDLIN( 157)												result3->__unsafe_set(i3,inValue2);
+HXDLIN( 158)												result3->__unsafe_set(i3,inValue2);
             											}
             										}
             									}
-HXDLIN( 157)									result2->__unsafe_set(i2,result3);
+HXDLIN( 158)									result2->__unsafe_set(i2,result3);
             								}
             							}
             						}
-HXDLIN( 157)						tmp4 = result2;
+HXDLIN( 158)						tmp4 = result2;
             					}
             					else {
-HXLINE( 157)						tmp4 = null();
+HXLINE( 158)						tmp4 = null();
             					}
-HXDLIN( 157)					::Array< ::Dynamic> _hx_tmp11;
-HXDLIN( 157)					if (::hx::IsNotNull( tmp4 )) {
-HXLINE( 157)						_hx_tmp11 = tmp4;
+HXDLIN( 158)					::Array< ::Dynamic> _hx_tmp11;
+HXDLIN( 158)					if (::hx::IsNotNull( tmp4 )) {
+HXLINE( 158)						_hx_tmp11 = tmp4;
             					}
             					else {
-HXLINE( 157)						_hx_tmp11 = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 158)						_hx_tmp11 = ::Array_obj< ::Dynamic>::__new(0);
             					}
-HXLINE( 154)					items->push( ::borogove::FormItem_obj::__alloc( HX_CTX ,null(),null(),null(),_hx_tmp10,_hx_tmp11,null()));
+HXLINE( 155)					items->push( ::borogove::FormItem_obj::__alloc( HX_CTX ,null(),null(),null(),_hx_tmp10,_hx_tmp11,null()));
             				}
-HXLINE( 160)				bool _hx_tmp12;
-HXDLIN( 160)				if ((child->name == HX_("page",4f,da,51,4a))) {
-HXLINE( 160)					_hx_tmp12 = (( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("http://jabber.org/protocol/xdata-layout",a9,5c,62,a8));
+HXLINE( 161)				bool _hx_tmp12;
+HXDLIN( 161)				if ((child->name == HX_("page",4f,da,51,4a))) {
+HXLINE( 161)					_hx_tmp12 = (( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("http://jabber.org/protocol/xdata-layout",a9,5c,62,a8));
             				}
             				else {
-HXLINE( 160)					_hx_tmp12 = false;
+HXLINE( 161)					_hx_tmp12 = false;
             				}
-HXDLIN( 160)				if (_hx_tmp12) {
-HXLINE( 161)					items->push( ::borogove::FormItem_obj::__alloc( HX_CTX ,null(),null(), ::borogove::FormLayoutSection_obj::__alloc( HX_CTX ,this->form,child),null(),null(),null()));
+HXDLIN( 161)				if (_hx_tmp12) {
+HXLINE( 162)					items->push( ::borogove::FormItem_obj::__alloc( HX_CTX ,null(),null(), ::borogove::FormLayoutSection_obj::__alloc( HX_CTX ,this->form,child),null(),null(),null()));
             				}
             			}
             		}
-HXLINE( 165)		return items;
+HXLINE( 166)		return items;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Form_obj,items,return )
 
 size_t Form_obj::items__fromC(void*** outPtr){
-            	HX_STACKFRAME(&_hx_pos_6b9e5fdea75c39d7_311_items__fromC)
-HXDLIN( 311)		::Array< ::Dynamic> out = this->items();
-HXDLIN( 311)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 311)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 311)			{
-HXDLIN( 311)				int _g = 0;
-HXDLIN( 311)				while((_g < out->length)){
-HXDLIN( 311)					 ::borogove::FormItem el = out->__get(_g).StaticCast<  ::borogove::FormItem >();
-HXDLIN( 311)					_g = (_g + 1);
-HXDLIN( 311)					{
-HXDLIN( 311)						 ::Dynamic haxeObject = el;
-HXDLIN( 311)						void* ptr = haxeObject.mPtr;
-HXDLIN( 311)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 311)						{
-HXDLIN( 311)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 311)							if (::hx::IsNull( store )) {
-HXDLIN( 311)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_6b9e5fdea75c39d7_335_items__fromC)
+HXDLIN( 335)		::Array< ::Dynamic> out = this->items();
+HXDLIN( 335)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 335)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 335)			{
+HXDLIN( 335)				int _g = 0;
+HXDLIN( 335)				while((_g < out->length)){
+HXDLIN( 335)					 ::borogove::FormItem el = out->__get(_g).StaticCast<  ::borogove::FormItem >();
+HXDLIN( 335)					_g = (_g + 1);
+HXDLIN( 335)					{
+HXDLIN( 335)						 ::Dynamic haxeObject = el;
+HXDLIN( 335)						void* ptr = haxeObject.mPtr;
+HXDLIN( 335)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 335)						{
+HXDLIN( 335)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 335)							if (::hx::IsNull( store )) {
+HXDLIN( 335)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
             									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             									->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 311)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN( 335)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             							}
             							else {
-HXDLIN( 311)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 335)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             							}
             						}
             					}
             				}
             			}
-HXDLIN( 311)			void** ptr1 = (void**)out->getBase();
-HXDLIN( 311)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 311)			{
-HXDLIN( 311)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 311)				if (::hx::IsNull( store1 )) {
-HXDLIN( 311)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 335)			void** ptr1 = (void**)out->getBase();
+HXDLIN( 335)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 335)			{
+HXDLIN( 335)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 335)				if (::hx::IsNull( store1 )) {
+HXDLIN( 335)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),out));
-HXDLIN( 311)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+HXDLIN( 335)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
             				}
             				else {
-HXDLIN( 311)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 335)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXDLIN( 311)			_hx_tmp->set_ref(ptr1);
+HXDLIN( 335)			_hx_tmp->set_ref(ptr1);
             		}
-HXDLIN( 311)		return ( (size_t)(out->length) );
+HXDLIN( 335)		return ( (size_t)(out->length) );
             	}
 
 
  ::borogove::Stanza Form_obj::submit( ::borogove::FormSubmitBuilder data){
-            	HX_STACKFRAME(&_hx_pos_d5f5e869927de4ab_219_submit)
-HXDLIN( 219)		return data->submit(this->form);
+            	HX_STACKFRAME(&_hx_pos_d5f5e869927de4ab_220_submit)
+HXDLIN( 220)		return data->submit(this->form);
             	}
 
 
@@ -570,8 +570,8 @@ void Form_obj::__register()
 void Form_obj::__boot()
 {
 {
-            	HX_STACKFRAME(&_hx_pos_d5f5e869927de4ab_96_boot)
-HXDLIN(  96)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_STACKFRAME(&_hx_pos_d5f5e869927de4ab_97_boot)
+HXDLIN(  97)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(2)
             				->setFixed(0,HX_("items",00,ac,0c,c2), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
diff --git a/Sources/c_borogove/src/borogove/FormField.cpp b/Sources/c_borogove/src/borogove/FormField.cpp
index 42a2029..828b1d0 100644
--- a/Sources/c_borogove/src/borogove/FormField.cpp
+++ b/Sources/c_borogove/src/borogove/FormField.cpp
@@ -27,18 +27,18 @@
 #endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_088c849e9db23a84_192_new,"borogove.FormField","new",0x7db9c29b,"borogove.FormField.new","borogove/DataForm.hx",192,0x710703a2)
-HX_LOCAL_STACK_FRAME(_hx_pos_8debe23b4b6754d6_423_name__fromC,"borogove.FormField","name__fromC",0xcbb1d2c9,"borogove.FormField.name__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_8debe23b4b6754d6_423_label__fromC,"borogove.FormField","label__fromC",0xdd73376a,"borogove.FormField.label__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_8debe23b4b6754d6_423_desc__fromC,"borogove.FormField","desc__fromC",0x436f1383,"borogove.FormField.desc__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_8debe23b4b6754d6_397_value__fromC,"borogove.FormField","value__fromC",0x908b9f8d,"borogove.FormField.value__fromC","HaxeCBridge.hx",397,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_8debe23b4b6754d6_423_required__fromC,"borogove.FormField","required__fromC",0x060c37b5,"borogove.FormField.required__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_8debe23b4b6754d6_423_type__fromC,"borogove.FormField","type__fromC",0x50b7ce3a,"borogove.FormField.type__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_8debe23b4b6754d6_423_datatype__fromC,"borogove.FormField","datatype__fromC",0x990aedd0,"borogove.FormField.datatype__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_8debe23b4b6754d6_397_options__fromC,"borogove.FormField","options__fromC",0xb96a1680,"borogove.FormField.options__fromC","HaxeCBridge.hx",397,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_8debe23b4b6754d6_423_open__fromC,"borogove.FormField","open__fromC",0xfc27ff2a,"borogove.FormField.open__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_8debe23b4b6754d6_423_rangeMin__fromC,"borogove.FormField","rangeMin__fromC",0x4b1e8bff,"borogove.FormField.rangeMin__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_8debe23b4b6754d6_423_rangeMax__fromC,"borogove.FormField","rangeMax__fromC",0xef8bb92d,"borogove.FormField.rangeMax__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_8debe23b4b6754d6_423_regex__fromC,"borogove.FormField","regex__fromC",0xdb3b26f7,"borogove.FormField.regex__fromC","HaxeCBridge.hx",423,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_8debe23b4b6754d6_450_name__fromC,"borogove.FormField","name__fromC",0xcbb1d2c9,"borogove.FormField.name__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_8debe23b4b6754d6_450_label__fromC,"borogove.FormField","label__fromC",0xdd73376a,"borogove.FormField.label__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_8debe23b4b6754d6_450_desc__fromC,"borogove.FormField","desc__fromC",0x436f1383,"borogove.FormField.desc__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_8debe23b4b6754d6_424_value__fromC,"borogove.FormField","value__fromC",0x908b9f8d,"borogove.FormField.value__fromC","HaxeCBridge.hx",424,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_8debe23b4b6754d6_450_required__fromC,"borogove.FormField","required__fromC",0x060c37b5,"borogove.FormField.required__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_8debe23b4b6754d6_450_type__fromC,"borogove.FormField","type__fromC",0x50b7ce3a,"borogove.FormField.type__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_8debe23b4b6754d6_450_datatype__fromC,"borogove.FormField","datatype__fromC",0x990aedd0,"borogove.FormField.datatype__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_8debe23b4b6754d6_424_options__fromC,"borogove.FormField","options__fromC",0xb96a1680,"borogove.FormField.options__fromC","HaxeCBridge.hx",424,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_8debe23b4b6754d6_450_open__fromC,"borogove.FormField","open__fromC",0xfc27ff2a,"borogove.FormField.open__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_8debe23b4b6754d6_450_rangeMin__fromC,"borogove.FormField","rangeMin__fromC",0x4b1e8bff,"borogove.FormField.rangeMin__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_8debe23b4b6754d6_450_rangeMax__fromC,"borogove.FormField","rangeMax__fromC",0xef8bb92d,"borogove.FormField.rangeMax__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_8debe23b4b6754d6_450_regex__fromC,"borogove.FormField","regex__fromC",0xdb3b26f7,"borogove.FormField.regex__fromC","HaxeCBridge.hx",450,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_088c849e9db23a84_177_boot,"borogove.FormField","boot",0x7ce98597,"borogove.FormField.boot","borogove/DataForm.hx",177,0x710703a2)
 namespace borogove{
 
@@ -176,182 +176,182 @@ bool FormField_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 ::String FormField_obj::name__fromC(){
-            	HX_STACKFRAME(&_hx_pos_8debe23b4b6754d6_423_name__fromC)
-HXDLIN( 423)		return this->name;
+            	HX_STACKFRAME(&_hx_pos_8debe23b4b6754d6_450_name__fromC)
+HXDLIN( 450)		return this->name;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(FormField_obj,name__fromC,return )
 
 ::String FormField_obj::label__fromC(){
-            	HX_STACKFRAME(&_hx_pos_8debe23b4b6754d6_423_label__fromC)
-HXDLIN( 423)		return this->label;
+            	HX_STACKFRAME(&_hx_pos_8debe23b4b6754d6_450_label__fromC)
+HXDLIN( 450)		return this->label;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(FormField_obj,label__fromC,return )
 
 ::String FormField_obj::desc__fromC(){
-            	HX_STACKFRAME(&_hx_pos_8debe23b4b6754d6_423_desc__fromC)
-HXDLIN( 423)		return this->desc;
+            	HX_STACKFRAME(&_hx_pos_8debe23b4b6754d6_450_desc__fromC)
+HXDLIN( 450)		return this->desc;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(FormField_obj,desc__fromC,return )
 
 size_t FormField_obj::value__fromC(const char*** outPtr){
-            	HX_STACKFRAME(&_hx_pos_8debe23b4b6754d6_397_value__fromC)
-HXDLIN( 397)		::Array< ::String > x = this->value;
-HXDLIN( 397)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 397)			::cpp::Pointer< const char** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 397)			::Array< size_t > arr = ::Array_obj< size_t >::__new(x->length);
-HXDLIN( 397)			{
-HXDLIN( 397)				int _g_current = 0;
-HXDLIN( 397)				::Array< ::String > _g_array = x;
-HXDLIN( 397)				while((_g_current < _g_array->length)){
-HXDLIN( 397)					::String _g_value = _g_array->__get(_g_current);
-HXDLIN( 397)					_g_current = (_g_current + 1);
-HXDLIN( 397)					::String el = _g_value;
-HXDLIN( 397)					{
-HXDLIN( 397)						const char* cStrPtr = el.utf8_str();
-HXDLIN( 397)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
-HXDLIN( 397)						{
-HXDLIN( 397)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 397)							if (::hx::IsNull( store )) {
-HXLINE(2192)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_8debe23b4b6754d6_424_value__fromC)
+HXDLIN( 424)		::Array< ::String > x = this->value;
+HXDLIN( 424)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 424)			::cpp::Pointer< const char** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 424)			::Array< size_t > arr = ::Array_obj< size_t >::__new(x->length);
+HXDLIN( 424)			{
+HXDLIN( 424)				int _g_current = 0;
+HXDLIN( 424)				::Array< ::String > _g_array = x;
+HXDLIN( 424)				while((_g_current < _g_array->length)){
+HXDLIN( 424)					::String _g_value = _g_array->__get(_g_current);
+HXDLIN( 424)					_g_current = (_g_current + 1);
+HXDLIN( 424)					::String el = _g_value;
+HXDLIN( 424)					{
+HXDLIN( 424)						const char* cStrPtr = el.utf8_str();
+HXDLIN( 424)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
+HXDLIN( 424)						{
+HXDLIN( 424)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 424)							if (::hx::IsNull( store )) {
+HXLINE(2243)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
             									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             									->setFixed(1,HX_("value",71,7f,b8,31),el));
-HXLINE( 397)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXLINE( 424)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             							}
             							else {
-HXDLIN( 397)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 424)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             							}
             						}
-HXDLIN( 397)						const char* ptr = cStrPtr;
-HXDLIN( 397)						arr[(_g_current - 1)] = reinterpret_cast<size_t>(ptr);
+HXDLIN( 424)						const char* ptr = cStrPtr;
+HXDLIN( 424)						arr[(_g_current - 1)] = reinterpret_cast<size_t>(ptr);
             					}
             				}
             			}
-HXDLIN( 397)			void** ptr1 = (void**)arr->getBase();
-HXDLIN( 397)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 397)			{
-HXDLIN( 397)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 397)				if (::hx::IsNull( store1 )) {
-HXLINE(2192)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 424)			void** ptr1 = (void**)arr->getBase();
+HXDLIN( 424)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 424)			{
+HXDLIN( 424)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 424)				if (::hx::IsNull( store1 )) {
+HXLINE(2243)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),arr));
-HXLINE( 397)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+HXLINE( 424)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
             				}
             				else {
-HXDLIN( 397)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 424)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXDLIN( 397)			_hx_tmp->set_ref(( (const char**)(ptr1) ));
+HXDLIN( 424)			_hx_tmp->set_ref(( (const char**)(ptr1) ));
             		}
-HXDLIN( 397)		return ( (size_t)(x->length) );
+HXDLIN( 424)		return ( (size_t)(x->length) );
             	}
 
 
 bool FormField_obj::required__fromC(){
-            	HX_STACKFRAME(&_hx_pos_8debe23b4b6754d6_423_required__fromC)
-HXDLIN( 423)		return this->required;
+            	HX_STACKFRAME(&_hx_pos_8debe23b4b6754d6_450_required__fromC)
+HXDLIN( 450)		return this->required;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(FormField_obj,required__fromC,return )
 
 ::String FormField_obj::type__fromC(){
-            	HX_STACKFRAME(&_hx_pos_8debe23b4b6754d6_423_type__fromC)
-HXDLIN( 423)		return this->type;
+            	HX_STACKFRAME(&_hx_pos_8debe23b4b6754d6_450_type__fromC)
+HXDLIN( 450)		return this->type;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(FormField_obj,type__fromC,return )
 
 ::String FormField_obj::datatype__fromC(){
-            	HX_STACKFRAME(&_hx_pos_8debe23b4b6754d6_423_datatype__fromC)
-HXDLIN( 423)		return this->datatype;
+            	HX_STACKFRAME(&_hx_pos_8debe23b4b6754d6_450_datatype__fromC)
+HXDLIN( 450)		return this->datatype;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(FormField_obj,datatype__fromC,return )
 
 size_t FormField_obj::options__fromC(void*** outPtr){
-            	HX_STACKFRAME(&_hx_pos_8debe23b4b6754d6_397_options__fromC)
-HXDLIN( 397)		::Array< ::Dynamic> x = this->options;
-HXDLIN( 397)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 397)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 397)			{
-HXDLIN( 397)				int _g = 0;
-HXDLIN( 397)				while((_g < x->length)){
-HXDLIN( 397)					 ::borogove::FormOption el = x->__get(_g).StaticCast<  ::borogove::FormOption >();
-HXDLIN( 397)					_g = (_g + 1);
-HXDLIN( 397)					{
-HXDLIN( 397)						 ::Dynamic haxeObject = el;
-HXDLIN( 397)						void* ptr = haxeObject.mPtr;
-HXDLIN( 397)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 397)						{
-HXDLIN( 397)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 397)							if (::hx::IsNull( store )) {
-HXDLIN( 397)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_8debe23b4b6754d6_424_options__fromC)
+HXDLIN( 424)		::Array< ::Dynamic> x = this->options;
+HXDLIN( 424)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 424)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 424)			{
+HXDLIN( 424)				int _g = 0;
+HXDLIN( 424)				while((_g < x->length)){
+HXDLIN( 424)					 ::borogove::FormOption el = x->__get(_g).StaticCast<  ::borogove::FormOption >();
+HXDLIN( 424)					_g = (_g + 1);
+HXDLIN( 424)					{
+HXDLIN( 424)						 ::Dynamic haxeObject = el;
+HXDLIN( 424)						void* ptr = haxeObject.mPtr;
+HXDLIN( 424)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 424)						{
+HXDLIN( 424)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 424)							if (::hx::IsNull( store )) {
+HXDLIN( 424)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
             									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             									->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 397)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN( 424)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             							}
             							else {
-HXDLIN( 397)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 424)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             							}
             						}
             					}
             				}
             			}
-HXDLIN( 397)			void** ptr1 = (void**)x->getBase();
-HXDLIN( 397)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 397)			{
-HXDLIN( 397)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 397)				if (::hx::IsNull( store1 )) {
-HXDLIN( 397)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 424)			void** ptr1 = (void**)x->getBase();
+HXDLIN( 424)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 424)			{
+HXDLIN( 424)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 424)				if (::hx::IsNull( store1 )) {
+HXDLIN( 424)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),x));
-HXDLIN( 397)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+HXDLIN( 424)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
             				}
             				else {
-HXDLIN( 397)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 424)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXDLIN( 397)			_hx_tmp->set_ref(ptr1);
+HXDLIN( 424)			_hx_tmp->set_ref(ptr1);
             		}
-HXDLIN( 397)		return ( (size_t)(x->length) );
+HXDLIN( 424)		return ( (size_t)(x->length) );
             	}
 
 
 bool FormField_obj::open__fromC(){
-            	HX_STACKFRAME(&_hx_pos_8debe23b4b6754d6_423_open__fromC)
-HXDLIN( 423)		return this->open;
+            	HX_STACKFRAME(&_hx_pos_8debe23b4b6754d6_450_open__fromC)
+HXDLIN( 450)		return this->open;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(FormField_obj,open__fromC,return )
 
 ::String FormField_obj::rangeMin__fromC(){
-            	HX_STACKFRAME(&_hx_pos_8debe23b4b6754d6_423_rangeMin__fromC)
-HXDLIN( 423)		return this->rangeMin;
+            	HX_STACKFRAME(&_hx_pos_8debe23b4b6754d6_450_rangeMin__fromC)
+HXDLIN( 450)		return this->rangeMin;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(FormField_obj,rangeMin__fromC,return )
 
 ::String FormField_obj::rangeMax__fromC(){
-            	HX_STACKFRAME(&_hx_pos_8debe23b4b6754d6_423_rangeMax__fromC)
-HXDLIN( 423)		return this->rangeMax;
+            	HX_STACKFRAME(&_hx_pos_8debe23b4b6754d6_450_rangeMax__fromC)
+HXDLIN( 450)		return this->rangeMax;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(FormField_obj,rangeMax__fromC,return )
 
 ::String FormField_obj::regex__fromC(){
-            	HX_STACKFRAME(&_hx_pos_8debe23b4b6754d6_423_regex__fromC)
-HXDLIN( 423)		return this->regex;
+            	HX_STACKFRAME(&_hx_pos_8debe23b4b6754d6_450_regex__fromC)
+HXDLIN( 450)		return this->regex;
             	}
 
 
diff --git a/Sources/c_borogove/src/borogove/FormItem.cpp b/Sources/c_borogove/src/borogove/FormItem.cpp
index 1d0bfb4..2afed99 100644
--- a/Sources/c_borogove/src/borogove/FormItem.cpp
+++ b/Sources/c_borogove/src/borogove/FormItem.cpp
@@ -20,23 +20,23 @@
 #include <haxe/IMap.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_df0b63d1edfec037_33_new,"borogove.FormItem","new",0x6aa3d676,"borogove.FormItem.new","borogove/Form.hx",33,0x25d2f7ac)
-HX_LOCAL_STACK_FRAME(_hx_pos_58fa9de42f050a39_423_text__fromC,"borogove.FormItem","text__fromC",0x82a04f82,"borogove.FormItem.text__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_58fa9de42f050a39_423_field__fromC,"borogove.FormItem","field__fromC",0xc23fce29,"borogove.FormItem.field__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_58fa9de42f050a39_423_section__fromC,"borogove.FormItem","section__fromC",0x5f2446de,"borogove.FormItem.section__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_58fa9de42f050a39_423_status__fromC,"borogove.FormItem","status__fromC",0x5916711d,"borogove.FormItem.status__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_58fa9de42f050a39_397_tableHeader__fromC,"borogove.FormItem","tableHeader__fromC",0x6e16cc48,"borogove.FormItem.tableHeader__fromC","HaxeCBridge.hx",397,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_df0b63d1edfec037_23_boot,"borogove.FormItem","boot",0xdcd0d15c,"borogove.FormItem.boot","borogove/Form.hx",23,0x25d2f7ac)
+HX_DEFINE_STACK_FRAME(_hx_pos_df0b63d1edfec037_34_new,"borogove.FormItem","new",0x6aa3d676,"borogove.FormItem.new","borogove/Form.hx",34,0x25d2f7ac)
+HX_LOCAL_STACK_FRAME(_hx_pos_58fa9de42f050a39_450_text__fromC,"borogove.FormItem","text__fromC",0x82a04f82,"borogove.FormItem.text__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_58fa9de42f050a39_450_field__fromC,"borogove.FormItem","field__fromC",0xc23fce29,"borogove.FormItem.field__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_58fa9de42f050a39_450_section__fromC,"borogove.FormItem","section__fromC",0x5f2446de,"borogove.FormItem.section__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_58fa9de42f050a39_450_status__fromC,"borogove.FormItem","status__fromC",0x5916711d,"borogove.FormItem.status__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_58fa9de42f050a39_424_tableHeader__fromC,"borogove.FormItem","tableHeader__fromC",0x6e16cc48,"borogove.FormItem.tableHeader__fromC","HaxeCBridge.hx",424,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_df0b63d1edfec037_24_boot,"borogove.FormItem","boot",0xdcd0d15c,"borogove.FormItem.boot","borogove/Form.hx",24,0x25d2f7ac)
 namespace borogove{
 
 void FormItem_obj::__construct(::String text, ::borogove::FormField field,::Dynamic section,::Array< ::Dynamic> tableHeader,::Array< ::Dynamic> tableRows,::String status){
-            	HX_STACKFRAME(&_hx_pos_df0b63d1edfec037_33_new)
-HXLINE(  34)		this->text = text;
-HXLINE(  35)		this->field = field;
-HXLINE(  36)		this->section = section;
-HXLINE(  37)		this->tableHeader = tableHeader;
-HXLINE(  38)		this->tableRows = tableRows;
-HXLINE(  39)		this->status = status;
+            	HX_STACKFRAME(&_hx_pos_df0b63d1edfec037_34_new)
+HXLINE(  35)		this->text = text;
+HXLINE(  36)		this->field = field;
+HXLINE(  37)		this->section = section;
+HXLINE(  38)		this->tableHeader = tableHeader;
+HXLINE(  39)		this->tableRows = tableRows;
+HXLINE(  40)		this->status = status;
             	}
 
 Dynamic FormItem_obj::__CreateEmpty() { return new FormItem_obj; }
@@ -55,83 +55,83 @@ bool FormItem_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 ::String FormItem_obj::text__fromC(){
-            	HX_STACKFRAME(&_hx_pos_58fa9de42f050a39_423_text__fromC)
-HXDLIN( 423)		return this->text;
+            	HX_STACKFRAME(&_hx_pos_58fa9de42f050a39_450_text__fromC)
+HXDLIN( 450)		return this->text;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(FormItem_obj,text__fromC,return )
 
  ::borogove::FormField FormItem_obj::field__fromC(){
-            	HX_STACKFRAME(&_hx_pos_58fa9de42f050a39_423_field__fromC)
-HXDLIN( 423)		return this->field;
+            	HX_STACKFRAME(&_hx_pos_58fa9de42f050a39_450_field__fromC)
+HXDLIN( 450)		return this->field;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(FormItem_obj,field__fromC,return )
 
 ::Dynamic FormItem_obj::section__fromC(){
-            	HX_STACKFRAME(&_hx_pos_58fa9de42f050a39_423_section__fromC)
-HXDLIN( 423)		return this->section;
+            	HX_STACKFRAME(&_hx_pos_58fa9de42f050a39_450_section__fromC)
+HXDLIN( 450)		return this->section;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(FormItem_obj,section__fromC,return )
 
 ::String FormItem_obj::status__fromC(){
-            	HX_STACKFRAME(&_hx_pos_58fa9de42f050a39_423_status__fromC)
-HXDLIN( 423)		return this->status;
+            	HX_STACKFRAME(&_hx_pos_58fa9de42f050a39_450_status__fromC)
+HXDLIN( 450)		return this->status;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(FormItem_obj,status__fromC,return )
 
 size_t FormItem_obj::tableHeader__fromC(void*** outPtr){
-            	HX_STACKFRAME(&_hx_pos_58fa9de42f050a39_397_tableHeader__fromC)
-HXDLIN( 397)		::Array< ::Dynamic> x = this->tableHeader;
-HXDLIN( 397)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 397)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 397)			{
-HXDLIN( 397)				int _g = 0;
-HXDLIN( 397)				while((_g < x->length)){
-HXDLIN( 397)					 ::borogove::FormField el = x->__get(_g).StaticCast<  ::borogove::FormField >();
-HXDLIN( 397)					_g = (_g + 1);
-HXDLIN( 397)					{
-HXDLIN( 397)						 ::Dynamic haxeObject = el;
-HXDLIN( 397)						void* ptr = haxeObject.mPtr;
-HXDLIN( 397)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 397)						{
-HXDLIN( 397)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 397)							if (::hx::IsNull( store )) {
-HXDLIN( 397)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_58fa9de42f050a39_424_tableHeader__fromC)
+HXDLIN( 424)		::Array< ::Dynamic> x = this->tableHeader;
+HXDLIN( 424)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 424)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 424)			{
+HXDLIN( 424)				int _g = 0;
+HXDLIN( 424)				while((_g < x->length)){
+HXDLIN( 424)					 ::borogove::FormField el = x->__get(_g).StaticCast<  ::borogove::FormField >();
+HXDLIN( 424)					_g = (_g + 1);
+HXDLIN( 424)					{
+HXDLIN( 424)						 ::Dynamic haxeObject = el;
+HXDLIN( 424)						void* ptr = haxeObject.mPtr;
+HXDLIN( 424)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 424)						{
+HXDLIN( 424)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 424)							if (::hx::IsNull( store )) {
+HXDLIN( 424)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
             									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             									->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 397)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN( 424)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             							}
             							else {
-HXDLIN( 397)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 424)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             							}
             						}
             					}
             				}
             			}
-HXDLIN( 397)			void** ptr1 = (void**)x->getBase();
-HXDLIN( 397)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 397)			{
-HXDLIN( 397)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 397)				if (::hx::IsNull( store1 )) {
-HXDLIN( 397)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 424)			void** ptr1 = (void**)x->getBase();
+HXDLIN( 424)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 424)			{
+HXDLIN( 424)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 424)				if (::hx::IsNull( store1 )) {
+HXDLIN( 424)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),x));
-HXDLIN( 397)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+HXDLIN( 424)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
             				}
             				else {
-HXDLIN( 397)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 424)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXDLIN( 397)			_hx_tmp->set_ref(ptr1);
+HXDLIN( 424)			_hx_tmp->set_ref(ptr1);
             		}
-HXDLIN( 397)		return ( (size_t)(x->length) );
+HXDLIN( 424)		return ( (size_t)(x->length) );
             	}
 
 
@@ -298,8 +298,8 @@ void FormItem_obj::__register()
 void FormItem_obj::__boot()
 {
 {
-            	HX_STACKFRAME(&_hx_pos_df0b63d1edfec037_23_boot)
-HXDLIN(  23)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_STACKFRAME(&_hx_pos_df0b63d1edfec037_24_boot)
+HXDLIN(  24)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(6)
             				->setFixed(0,HX_("status__fromC",87,b3,25,a1), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
diff --git a/Sources/c_borogove/src/borogove/FormLayoutSection.cpp b/Sources/c_borogove/src/borogove/FormLayoutSection.cpp
index 4c407eb..36b4843 100644
--- a/Sources/c_borogove/src/borogove/FormLayoutSection.cpp
+++ b/Sources/c_borogove/src/borogove/FormLayoutSection.cpp
@@ -23,15 +23,15 @@
 #include <borogove/_DataForm/DataForm_Impl_.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_45e75fb904d6662d_229_new,"borogove.FormLayoutSection","new",0x25c121bc,"borogove.FormLayoutSection.new","borogove/Form.hx",229,0x25d2f7ac)
-HX_LOCAL_STACK_FRAME(_hx_pos_45e75fb904d6662d_235_title,"borogove.FormLayoutSection","title",0x68a475f4,"borogove.FormLayoutSection.title","borogove/Form.hx",235,0x25d2f7ac)
-HX_LOCAL_STACK_FRAME(_hx_pos_45e75fb904d6662d_238_items,"borogove.FormLayoutSection","items",0x1a760c5c,"borogove.FormLayoutSection.items","borogove/Form.hx",238,0x25d2f7ac)
+HX_DEFINE_STACK_FRAME(_hx_pos_45e75fb904d6662d_230_new,"borogove.FormLayoutSection","new",0x25c121bc,"borogove.FormLayoutSection.new","borogove/Form.hx",230,0x25d2f7ac)
+HX_LOCAL_STACK_FRAME(_hx_pos_45e75fb904d6662d_236_title,"borogove.FormLayoutSection","title",0x68a475f4,"borogove.FormLayoutSection.title","borogove/Form.hx",236,0x25d2f7ac)
+HX_LOCAL_STACK_FRAME(_hx_pos_45e75fb904d6662d_239_items,"borogove.FormLayoutSection","items",0x1a760c5c,"borogove.FormLayoutSection.items","borogove/Form.hx",239,0x25d2f7ac)
 namespace borogove{
 
 void FormLayoutSection_obj::__construct( ::borogove::Stanza form, ::borogove::Stanza section){
-            	HX_STACKFRAME(&_hx_pos_45e75fb904d6662d_229_new)
-HXLINE( 230)		this->form = form;
-HXLINE( 231)		this->section = section;
+            	HX_STACKFRAME(&_hx_pos_45e75fb904d6662d_230_new)
+HXLINE( 231)		this->form = form;
+HXLINE( 232)		this->section = section;
             	}
 
 Dynamic FormLayoutSection_obj::__CreateEmpty() { return new FormLayoutSection_obj; }
@@ -66,197 +66,197 @@ void *FormLayoutSection_obj::_hx_getInterface(int inHash) {
 }
 
 ::String FormLayoutSection_obj::title(){
-            	HX_STACKFRAME(&_hx_pos_45e75fb904d6662d_235_title)
-HXDLIN( 235)		return ( (::String)(::Reflect_obj::field(this->section->attr,HX_("label",f4,0d,af,6f))) );
+            	HX_STACKFRAME(&_hx_pos_45e75fb904d6662d_236_title)
+HXDLIN( 236)		return ( (::String)(::Reflect_obj::field(this->section->attr,HX_("label",f4,0d,af,6f))) );
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(FormLayoutSection_obj,title,return )
 
 ::Array< ::Dynamic> FormLayoutSection_obj::items(){
-            	HX_GC_STACKFRAME(&_hx_pos_45e75fb904d6662d_238_items)
-HXLINE( 239)		::Array< ::Dynamic> items = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 240)		{
-HXLINE( 240)			int _g = 0;
-HXDLIN( 240)			::Array< ::Dynamic> _g1 = this->section->allTags(null(),null());
-HXDLIN( 240)			while((_g < _g1->length)){
-HXLINE( 240)				 ::borogove::Stanza child = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
-HXDLIN( 240)				_g = (_g + 1);
-HXLINE( 241)				bool _hx_tmp;
-HXDLIN( 241)				if ((child->name == HX_("text",ad,cc,f9,4c))) {
-HXLINE( 241)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) )) {
-HXLINE( 241)						_hx_tmp = (( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("http://jabber.org/protocol/xdata-layout",a9,5c,62,a8));
+            	HX_GC_STACKFRAME(&_hx_pos_45e75fb904d6662d_239_items)
+HXLINE( 240)		::Array< ::Dynamic> items = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 241)		{
+HXLINE( 241)			int _g = 0;
+HXDLIN( 241)			::Array< ::Dynamic> _g1 = this->section->allTags(null(),null());
+HXDLIN( 241)			while((_g < _g1->length)){
+HXLINE( 241)				 ::borogove::Stanza child = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
+HXDLIN( 241)				_g = (_g + 1);
+HXLINE( 242)				bool _hx_tmp;
+HXDLIN( 242)				if ((child->name == HX_("text",ad,cc,f9,4c))) {
+HXLINE( 242)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) )) {
+HXLINE( 242)						_hx_tmp = (( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("http://jabber.org/protocol/xdata-layout",a9,5c,62,a8));
             					}
             					else {
-HXLINE( 241)						_hx_tmp = true;
+HXLINE( 242)						_hx_tmp = true;
             					}
             				}
             				else {
-HXLINE( 241)					_hx_tmp = false;
+HXLINE( 242)					_hx_tmp = false;
             				}
-HXDLIN( 241)				if (_hx_tmp) {
-HXLINE( 242)					items->push( ::borogove::FormItem_obj::__alloc( HX_CTX ,child->getText(),null(),null(),null(),null(),null()));
+HXDLIN( 242)				if (_hx_tmp) {
+HXLINE( 243)					items->push( ::borogove::FormItem_obj::__alloc( HX_CTX ,child->getText(),null(),null(),null(),null(),null()));
             				}
-HXLINE( 244)				bool _hx_tmp1;
-HXDLIN( 244)				if ((child->name == HX_("fieldref",d9,74,29,ac))) {
-HXLINE( 244)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) )) {
-HXLINE( 244)						_hx_tmp1 = (( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("http://jabber.org/protocol/xdata-layout",a9,5c,62,a8));
+HXLINE( 245)				bool _hx_tmp1;
+HXDLIN( 245)				if ((child->name == HX_("fieldref",d9,74,29,ac))) {
+HXLINE( 245)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) )) {
+HXLINE( 245)						_hx_tmp1 = (( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("http://jabber.org/protocol/xdata-layout",a9,5c,62,a8));
             					}
             					else {
-HXLINE( 244)						_hx_tmp1 = true;
+HXLINE( 245)						_hx_tmp1 = true;
             					}
             				}
             				else {
-HXLINE( 244)					_hx_tmp1 = false;
+HXLINE( 245)					_hx_tmp1 = false;
             				}
-HXDLIN( 244)				if (_hx_tmp1) {
-HXLINE( 245)					 ::borogove::Stanza this1 = this->form;
-HXDLIN( 245)					 ::borogove::Stanza this2 = ::borogove::_DataForm::DataForm_Impl__obj::field(this1,( (::String)(::Reflect_obj::field(child->attr,HX_("var",e7,de,59,00))) ));
-HXDLIN( 245)					 ::borogove::FormField _hx_tmp2;
-HXDLIN( 245)					if (::hx::IsNull( this2 )) {
-HXLINE( 245)						_hx_tmp2 = null();
+HXDLIN( 245)				if (_hx_tmp1) {
+HXLINE( 246)					 ::borogove::Stanza this1 = this->form;
+HXDLIN( 246)					 ::borogove::Stanza this2 = ::borogove::_DataForm::DataForm_Impl__obj::field(this1,( (::String)(::Reflect_obj::field(child->attr,HX_("var",e7,de,59,00))) ));
+HXDLIN( 246)					 ::borogove::FormField _hx_tmp2;
+HXDLIN( 246)					if (::hx::IsNull( this2 )) {
+HXLINE( 246)						_hx_tmp2 = null();
             					}
             					else {
-HXLINE( 245)						_hx_tmp2 =  ::borogove::FormField_obj::__alloc( HX_CTX ,this2);
+HXLINE( 246)						_hx_tmp2 =  ::borogove::FormField_obj::__alloc( HX_CTX ,this2);
             					}
-HXDLIN( 245)					items->push( ::borogove::FormItem_obj::__alloc( HX_CTX ,null(),_hx_tmp2,null(),null(),null(),null()));
+HXDLIN( 246)					items->push( ::borogove::FormItem_obj::__alloc( HX_CTX ,null(),_hx_tmp2,null(),null(),null(),null()));
             				}
-HXLINE( 247)				bool _hx_tmp3;
-HXDLIN( 247)				if ((child->name == HX_("reportedref",20,fd,c7,a6))) {
-HXLINE( 247)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) )) {
-HXLINE( 247)						_hx_tmp3 = (( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("http://jabber.org/protocol/xdata-layout",a9,5c,62,a8));
+HXLINE( 248)				bool _hx_tmp3;
+HXDLIN( 248)				if ((child->name == HX_("reportedref",20,fd,c7,a6))) {
+HXLINE( 248)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) )) {
+HXLINE( 248)						_hx_tmp3 = (( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("http://jabber.org/protocol/xdata-layout",a9,5c,62,a8));
             					}
             					else {
-HXLINE( 247)						_hx_tmp3 = true;
+HXLINE( 248)						_hx_tmp3 = true;
             					}
             				}
             				else {
-HXLINE( 247)					_hx_tmp3 = false;
+HXLINE( 248)					_hx_tmp3 = false;
             				}
-HXDLIN( 247)				if (_hx_tmp3) {
-HXLINE( 250)					 ::borogove::Stanza tmp = this->form->getChild(HX_("reported",13,2a,94,dd),null());
-HXDLIN( 250)					::Array< ::Dynamic> tmp1;
-HXDLIN( 250)					if (::hx::IsNotNull( tmp )) {
-HXLINE( 250)						tmp1 = tmp->allTags(HX_("field",ba,94,93,00),null());
+HXDLIN( 248)				if (_hx_tmp3) {
+HXLINE( 251)					 ::borogove::Stanza tmp = this->form->getChild(HX_("reported",13,2a,94,dd),null());
+HXDLIN( 251)					::Array< ::Dynamic> tmp1;
+HXDLIN( 251)					if (::hx::IsNotNull( tmp )) {
+HXLINE( 251)						tmp1 = tmp->allTags(HX_("field",ba,94,93,00),null());
             					}
             					else {
-HXLINE( 250)						tmp1 = null();
+HXLINE( 251)						tmp1 = null();
             					}
-HXDLIN( 250)					::Array< ::Dynamic> _hx_tmp4;
-HXDLIN( 250)					if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 250)						::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(tmp1->length);
-HXDLIN( 250)						{
-HXLINE( 250)							int _g2 = 0;
-HXDLIN( 250)							int _g3 = tmp1->length;
-HXDLIN( 250)							while((_g2 < _g3)){
-HXLINE( 250)								_g2 = (_g2 + 1);
-HXDLIN( 250)								int i = (_g2 - 1);
-HXDLIN( 250)								{
-HXLINE( 250)									 ::borogove::Stanza f = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(tmp1,i)) );
-HXDLIN( 250)									 ::borogove::FormField inValue;
-HXDLIN( 250)									if (::hx::IsNull( f )) {
-HXLINE( 250)										inValue = null();
+HXDLIN( 251)					::Array< ::Dynamic> _hx_tmp4;
+HXDLIN( 251)					if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 251)						::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(tmp1->length);
+HXDLIN( 251)						{
+HXLINE( 251)							int _g2 = 0;
+HXDLIN( 251)							int _g3 = tmp1->length;
+HXDLIN( 251)							while((_g2 < _g3)){
+HXLINE( 251)								_g2 = (_g2 + 1);
+HXDLIN( 251)								int i = (_g2 - 1);
+HXDLIN( 251)								{
+HXLINE( 251)									 ::borogove::Stanza f = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(tmp1,i)) );
+HXDLIN( 251)									 ::borogove::FormField inValue;
+HXDLIN( 251)									if (::hx::IsNull( f )) {
+HXLINE( 251)										inValue = null();
             									}
             									else {
-HXLINE( 250)										inValue =  ::borogove::FormField_obj::__alloc( HX_CTX ,f);
+HXLINE( 251)										inValue =  ::borogove::FormField_obj::__alloc( HX_CTX ,f);
             									}
-HXDLIN( 250)									result->__unsafe_set(i,inValue);
+HXDLIN( 251)									result->__unsafe_set(i,inValue);
             								}
             							}
             						}
-HXDLIN( 250)						_hx_tmp4 = result;
+HXDLIN( 251)						_hx_tmp4 = result;
             					}
             					else {
-HXLINE( 250)						_hx_tmp4 = null();
+HXLINE( 251)						_hx_tmp4 = null();
             					}
-HXLINE( 251)					::Array< ::Dynamic> tmp2 = this->form->allTags(HX_("item",13,c5,bf,45),null());
-HXDLIN( 251)					::Array< ::Dynamic> tmp3;
-HXDLIN( 251)					if (::hx::IsNotNull( tmp2 )) {
-HXLINE( 251)						::Array< ::Dynamic> result1 = ::Array_obj< ::Dynamic>::__new(tmp2->length);
-HXDLIN( 251)						{
-HXLINE( 251)							int _g4 = 0;
-HXDLIN( 251)							int _g5 = tmp2->length;
-HXDLIN( 251)							while((_g4 < _g5)){
-HXLINE( 251)								_g4 = (_g4 + 1);
-HXDLIN( 251)								int i1 = (_g4 - 1);
-HXDLIN( 251)								{
-HXLINE( 251)									::Array< ::Dynamic> inValue1 = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(tmp2,i1)) )->allTags(HX_("field",ba,94,93,00),null());
-HXDLIN( 251)									result1->__unsafe_set(i1,inValue1);
+HXLINE( 252)					::Array< ::Dynamic> tmp2 = this->form->allTags(HX_("item",13,c5,bf,45),null());
+HXDLIN( 252)					::Array< ::Dynamic> tmp3;
+HXDLIN( 252)					if (::hx::IsNotNull( tmp2 )) {
+HXLINE( 252)						::Array< ::Dynamic> result1 = ::Array_obj< ::Dynamic>::__new(tmp2->length);
+HXDLIN( 252)						{
+HXLINE( 252)							int _g4 = 0;
+HXDLIN( 252)							int _g5 = tmp2->length;
+HXDLIN( 252)							while((_g4 < _g5)){
+HXLINE( 252)								_g4 = (_g4 + 1);
+HXDLIN( 252)								int i1 = (_g4 - 1);
+HXDLIN( 252)								{
+HXLINE( 252)									::Array< ::Dynamic> inValue1 = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(tmp2,i1)) )->allTags(HX_("field",ba,94,93,00),null());
+HXDLIN( 252)									result1->__unsafe_set(i1,inValue1);
             								}
             							}
             						}
-HXDLIN( 251)						tmp3 = result1;
+HXDLIN( 252)						tmp3 = result1;
             					}
             					else {
-HXLINE( 251)						tmp3 = null();
+HXLINE( 252)						tmp3 = null();
             					}
-HXDLIN( 251)					::Array< ::Dynamic> tmp4;
-HXDLIN( 251)					if (::hx::IsNotNull( tmp3 )) {
-HXLINE( 251)						::Array< ::Dynamic> result2 = ::Array_obj< ::Dynamic>::__new(tmp3->length);
-HXDLIN( 251)						{
-HXLINE( 251)							int _g6 = 0;
-HXDLIN( 251)							int _g7 = tmp3->length;
-HXDLIN( 251)							while((_g6 < _g7)){
-HXLINE( 251)								_g6 = (_g6 + 1);
-HXDLIN( 251)								int i2 = (_g6 - 1);
-HXDLIN( 251)								{
-HXLINE( 251)									::Array< ::Dynamic> row = ( (::Array< ::Dynamic>)(_hx_array_unsafe_get(tmp3,i2)) );
-HXDLIN( 251)									::Array< ::Dynamic> result3 = ::Array_obj< ::Dynamic>::__new(row->length);
-HXDLIN( 251)									{
-HXLINE( 251)										int _g8 = 0;
-HXDLIN( 251)										int _g9 = row->length;
-HXDLIN( 251)										while((_g8 < _g9)){
-HXLINE( 251)											_g8 = (_g8 + 1);
-HXDLIN( 251)											int i3 = (_g8 - 1);
-HXDLIN( 251)											{
-HXLINE( 251)												 ::borogove::Stanza f1 = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(row,i3)) );
-HXDLIN( 251)												 ::borogove::FormField inValue2;
-HXDLIN( 251)												if (::hx::IsNull( f1 )) {
-HXLINE( 251)													inValue2 = null();
+HXDLIN( 252)					::Array< ::Dynamic> tmp4;
+HXDLIN( 252)					if (::hx::IsNotNull( tmp3 )) {
+HXLINE( 252)						::Array< ::Dynamic> result2 = ::Array_obj< ::Dynamic>::__new(tmp3->length);
+HXDLIN( 252)						{
+HXLINE( 252)							int _g6 = 0;
+HXDLIN( 252)							int _g7 = tmp3->length;
+HXDLIN( 252)							while((_g6 < _g7)){
+HXLINE( 252)								_g6 = (_g6 + 1);
+HXDLIN( 252)								int i2 = (_g6 - 1);
+HXDLIN( 252)								{
+HXLINE( 252)									::Array< ::Dynamic> row = ( (::Array< ::Dynamic>)(_hx_array_unsafe_get(tmp3,i2)) );
+HXDLIN( 252)									::Array< ::Dynamic> result3 = ::Array_obj< ::Dynamic>::__new(row->length);
+HXDLIN( 252)									{
+HXLINE( 252)										int _g8 = 0;
+HXDLIN( 252)										int _g9 = row->length;
+HXDLIN( 252)										while((_g8 < _g9)){
+HXLINE( 252)											_g8 = (_g8 + 1);
+HXDLIN( 252)											int i3 = (_g8 - 1);
+HXDLIN( 252)											{
+HXLINE( 252)												 ::borogove::Stanza f1 = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(row,i3)) );
+HXDLIN( 252)												 ::borogove::FormField inValue2;
+HXDLIN( 252)												if (::hx::IsNull( f1 )) {
+HXLINE( 252)													inValue2 = null();
             												}
             												else {
-HXLINE( 251)													inValue2 =  ::borogove::FormField_obj::__alloc( HX_CTX ,f1);
+HXLINE( 252)													inValue2 =  ::borogove::FormField_obj::__alloc( HX_CTX ,f1);
             												}
-HXDLIN( 251)												result3->__unsafe_set(i3,inValue2);
+HXDLIN( 252)												result3->__unsafe_set(i3,inValue2);
             											}
             										}
             									}
-HXDLIN( 251)									result2->__unsafe_set(i2,result3);
+HXDLIN( 252)									result2->__unsafe_set(i2,result3);
             								}
             							}
             						}
-HXDLIN( 251)						tmp4 = result2;
+HXDLIN( 252)						tmp4 = result2;
             					}
             					else {
-HXLINE( 251)						tmp4 = null();
+HXLINE( 252)						tmp4 = null();
             					}
-HXDLIN( 251)					::Array< ::Dynamic> _hx_tmp5;
-HXDLIN( 251)					if (::hx::IsNotNull( tmp4 )) {
-HXLINE( 251)						_hx_tmp5 = tmp4;
+HXDLIN( 252)					::Array< ::Dynamic> _hx_tmp5;
+HXDLIN( 252)					if (::hx::IsNotNull( tmp4 )) {
+HXLINE( 252)						_hx_tmp5 = tmp4;
             					}
             					else {
-HXLINE( 251)						_hx_tmp5 = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 252)						_hx_tmp5 = ::Array_obj< ::Dynamic>::__new(0);
             					}
-HXLINE( 248)					items->push( ::borogove::FormItem_obj::__alloc( HX_CTX ,null(),null(),null(),_hx_tmp4,_hx_tmp5,null()));
+HXLINE( 249)					items->push( ::borogove::FormItem_obj::__alloc( HX_CTX ,null(),null(),null(),_hx_tmp4,_hx_tmp5,null()));
             				}
-HXLINE( 254)				bool _hx_tmp6;
-HXDLIN( 254)				if ((child->name == HX_("section",e5,05,d8,5d))) {
-HXLINE( 254)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) )) {
-HXLINE( 254)						_hx_tmp6 = (( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("http://jabber.org/protocol/xdata-layout",a9,5c,62,a8));
+HXLINE( 255)				bool _hx_tmp6;
+HXDLIN( 255)				if ((child->name == HX_("section",e5,05,d8,5d))) {
+HXLINE( 255)					if (::hx::IsNotNull( ( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) )) {
+HXLINE( 255)						_hx_tmp6 = (( (::String)(::Reflect_obj::field(child->attr,HX_("xmlns",dc,31,74,60))) ) == HX_("http://jabber.org/protocol/xdata-layout",a9,5c,62,a8));
             					}
             					else {
-HXLINE( 254)						_hx_tmp6 = true;
+HXLINE( 255)						_hx_tmp6 = true;
             					}
             				}
             				else {
-HXLINE( 254)					_hx_tmp6 = false;
+HXLINE( 255)					_hx_tmp6 = false;
             				}
-HXDLIN( 254)				if (_hx_tmp6) {
-HXLINE( 255)					items->push( ::borogove::FormItem_obj::__alloc( HX_CTX ,null(),null(), ::borogove::FormLayoutSection_obj::__alloc( HX_CTX ,this->form,child),null(),null(),null()));
+HXDLIN( 255)				if (_hx_tmp6) {
+HXLINE( 256)					items->push( ::borogove::FormItem_obj::__alloc( HX_CTX ,null(),null(), ::borogove::FormLayoutSection_obj::__alloc( HX_CTX ,this->form,child),null(),null(),null()));
             				}
             			}
             		}
-HXLINE( 259)		return items;
+HXLINE( 260)		return items;
             	}
 
 
diff --git a/Sources/c_borogove/src/borogove/FormOption.cpp b/Sources/c_borogove/src/borogove/FormOption.cpp
index 0f621af..6713ee7 100644
--- a/Sources/c_borogove/src/borogove/FormOption.cpp
+++ b/Sources/c_borogove/src/borogove/FormOption.cpp
@@ -12,8 +12,8 @@
 #endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_a7d595b8126d2317_218_new,"borogove.FormOption","new",0xfe881c18,"borogove.FormOption.new","borogove/DataForm.hx",218,0x710703a2)
-HX_LOCAL_STACK_FRAME(_hx_pos_ecda2718ab159179_423_label__fromC,"borogove.FormOption","label__fromC",0x9aee464d,"borogove.FormOption.label__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_ecda2718ab159179_423_value__fromC,"borogove.FormOption","value__fromC",0x4e06ae70,"borogove.FormOption.value__fromC","HaxeCBridge.hx",423,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_ecda2718ab159179_450_label__fromC,"borogove.FormOption","label__fromC",0x9aee464d,"borogove.FormOption.label__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_ecda2718ab159179_450_value__fromC,"borogove.FormOption","value__fromC",0x4e06ae70,"borogove.FormOption.value__fromC","HaxeCBridge.hx",450,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_a7d595b8126d2317_225_fromOption,"borogove.FormOption","fromOption",0x42bbf3c7,"borogove.FormOption.fromOption","borogove/DataForm.hx",225,0x710703a2)
 HX_LOCAL_STACK_FRAME(_hx_pos_a7d595b8126d2317_213_boot,"borogove.FormOption","boot",0xb0a9797a,"borogove.FormOption.boot","borogove/DataForm.hx",213,0x710703a2)
 namespace borogove{
@@ -54,16 +54,16 @@ bool FormOption_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 ::String FormOption_obj::label__fromC(){
-            	HX_STACKFRAME(&_hx_pos_ecda2718ab159179_423_label__fromC)
-HXDLIN( 423)		return this->label;
+            	HX_STACKFRAME(&_hx_pos_ecda2718ab159179_450_label__fromC)
+HXDLIN( 450)		return this->label;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(FormOption_obj,label__fromC,return )
 
 ::String FormOption_obj::value__fromC(){
-            	HX_STACKFRAME(&_hx_pos_ecda2718ab159179_423_value__fromC)
-HXDLIN( 423)		return this->value;
+            	HX_STACKFRAME(&_hx_pos_ecda2718ab159179_450_value__fromC)
+HXDLIN( 450)		return this->value;
             	}
 
 
diff --git a/Sources/c_borogove/src/borogove/FormSection.cpp b/Sources/c_borogove/src/borogove/FormSection.cpp
index 91ce4ed..abb4e03 100644
--- a/Sources/c_borogove/src/borogove/FormSection.cpp
+++ b/Sources/c_borogove/src/borogove/FormSection.cpp
@@ -8,6 +8,7 @@
 #include <borogove/FormSection.h>
 #endif
 
+HX_LOCAL_STACK_FRAME(_hx_pos_352f937cbe95bbf7_14_boot,"borogove.FormSection","boot",0x1c4d66cc,"borogove.FormSection.boot","borogove/Form.hx",14,0x25d2f7ac)
 namespace borogove{
 
 
@@ -28,4 +29,17 @@ void FormSection_obj::__register()
 	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
 }
 
+void FormSection_obj::__boot()
+{
+{
+            	HX_STACKFRAME(&_hx_pos_352f937cbe95bbf7_14_boot)
+HXDLIN(  14)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(2)
+            				->setFixed(0,HX_("items",00,ac,0c,c2), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
+            				->setFixed(1,HX_("title",98,15,3b,10), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d))))))));
+            	}
+}
+
 } // end namespace borogove
diff --git a/Sources/c_borogove/src/borogove/FormSection__Companion.cpp b/Sources/c_borogove/src/borogove/FormSection__Companion.cpp
new file mode 100644
index 0000000..05e399c
--- /dev/null
+++ b/Sources/c_borogove/src/borogove/FormSection__Companion.cpp
@@ -0,0 +1,166 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED__HaxeCBridge_Internal
+#include <_HaxeCBridge/Internal.h>
+#endif
+#ifndef INCLUDED_borogove_FormItem
+#include <borogove/FormItem.h>
+#endif
+#ifndef INCLUDED_borogove_FormSection
+#include <borogove/FormSection.h>
+#endif
+#ifndef INCLUDED_borogove_FormSection__Companion
+#include <borogove/FormSection__Companion.h>
+#endif
+#ifndef INCLUDED_cpp_Int64Map
+#include <cpp/Int64Map.h>
+#endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
+
+HX_LOCAL_STACK_FRAME(_hx_pos_6011c85ede3c7a5b_339_title__fromC,"borogove.FormSection__Companion","title__fromC",0x3b1ea757,"borogove.FormSection__Companion.title__fromC","HaxeCBridge.hx",339,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_6011c85ede3c7a5b_335_items__fromC,"borogove.FormSection__Companion","items__fromC",0xa0ca2def,"borogove.FormSection__Companion.items__fromC","HaxeCBridge.hx",335,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_916077ee930f3e53_14_boot,"borogove.FormSection__Companion","boot",0x3dd707a8,"borogove.FormSection__Companion.boot","borogove/Form.hx",14,0x25d2f7ac)
+namespace borogove{
+
+void FormSection__Companion_obj::__construct() { }
+
+Dynamic FormSection__Companion_obj::__CreateEmpty() { return new FormSection__Companion_obj; }
+
+void *FormSection__Companion_obj::_hx_vtable = 0;
+
+Dynamic FormSection__Companion_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< FormSection__Companion_obj > _hx_result = new FormSection__Companion_obj();
+	_hx_result->__construct();
+	return _hx_result;
+}
+
+bool FormSection__Companion_obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x5fc668ac;
+}
+
+::String FormSection__Companion_obj::title__fromC(::Dynamic self){
+            	HX_STACKFRAME(&_hx_pos_6011c85ede3c7a5b_339_title__fromC)
+HXDLIN( 339)		return ::borogove::FormSection_obj::title(self);
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(FormSection__Companion_obj,title__fromC,return )
+
+size_t FormSection__Companion_obj::items__fromC(::Dynamic self,void*** outPtr){
+            	HX_STACKFRAME(&_hx_pos_6011c85ede3c7a5b_335_items__fromC)
+HXDLIN( 335)		::Array< ::Dynamic> out = ::borogove::FormSection_obj::items(self);
+HXDLIN( 335)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 335)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 335)			{
+HXDLIN( 335)				int _g = 0;
+HXDLIN( 335)				while((_g < out->length)){
+HXDLIN( 335)					 ::borogove::FormItem el = out->__get(_g).StaticCast<  ::borogove::FormItem >();
+HXDLIN( 335)					_g = (_g + 1);
+HXDLIN( 335)					{
+HXDLIN( 335)						 ::Dynamic haxeObject = el;
+HXDLIN( 335)						void* ptr = haxeObject.mPtr;
+HXDLIN( 335)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 335)						{
+HXDLIN( 335)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 335)							if (::hx::IsNull( store )) {
+HXDLIN( 335)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
+            									->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
+HXDLIN( 335)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+            							}
+            							else {
+HXDLIN( 335)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+            							}
+            						}
+            					}
+            				}
+            			}
+HXDLIN( 335)			void** ptr1 = (void**)out->getBase();
+HXDLIN( 335)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 335)			{
+HXDLIN( 335)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 335)				if (::hx::IsNull( store1 )) {
+HXDLIN( 335)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+            						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
+            						->setFixed(1,HX_("value",71,7f,b8,31),out));
+HXDLIN( 335)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+            				}
+            				else {
+HXDLIN( 335)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+            				}
+            			}
+HXDLIN( 335)			_hx_tmp->set_ref(ptr1);
+            		}
+HXDLIN( 335)		return ( (size_t)(out->length) );
+            	}
+
+
+
+FormSection__Companion_obj::FormSection__Companion_obj()
+{
+}
+
+bool FormSection__Companion_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 12:
+		if (HX_FIELD_EQ(inName,"title__fromC") ) { outValue = title__fromC_dyn(); return true; }
+	}
+	return false;
+}
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo *FormSection__Companion_obj_sMemberStorageInfo = 0;
+static ::hx::StaticInfo *FormSection__Companion_obj_sStaticStorageInfo = 0;
+#endif
+
+::hx::Class FormSection__Companion_obj::__mClass;
+
+static ::String FormSection__Companion_obj_sStaticFields[] = {
+	HX_("title__fromC",e1,bd,61,c7),
+	::String(null())
+};
+
+void FormSection__Companion_obj::__register()
+{
+	FormSection__Companion_obj _hx_dummy;
+	FormSection__Companion_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("borogove.FormSection__Companion",b8,90,73,74);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &FormSection__Companion_obj::__GetStatic;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(FormSection__Companion_obj_sStaticFields);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(0 /* sMemberFields */);
+	__mClass->mCanCast = ::hx::TCanCast< FormSection__Companion_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = FormSection__Companion_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = FormSection__Companion_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+void FormSection__Companion_obj::__boot()
+{
+{
+            	HX_STACKFRAME(&_hx_pos_916077ee930f3e53_14_boot)
+HXDLIN(  14)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(2)
+            			->setFixed(0,HX_("obj",f7,8f,54,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(0,HX_("HaxeCBridge.name",13,6a,03,0e),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("borogove_FormSection",83,7f,05,d2)))))
+            			->setFixed(1,HX_("statics",05,3c,65,36), ::Dynamic(::hx::Anon_obj::Create(2)
+            				->setFixed(0,HX_("title__fromC",e1,bd,61,c7), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(1,HX_("items__fromC",79,44,0d,2d), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null()))))));
+            	}
+}
+
+} // end namespace borogove
diff --git a/Sources/c_borogove/src/borogove/FormSubmitBuilder.cpp b/Sources/c_borogove/src/borogove/FormSubmitBuilder.cpp
index ff4cbed..bf43ba2 100644
--- a/Sources/c_borogove/src/borogove/FormSubmitBuilder.cpp
+++ b/Sources/c_borogove/src/borogove/FormSubmitBuilder.cpp
@@ -23,14 +23,14 @@
 #include <haxe/ds/StringMap.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_4c0d9a76469df0f6_48_new,"borogove.FormSubmitBuilder","new",0x3947db44,"borogove.FormSubmitBuilder.new","borogove/Form.hx",48,0x25d2f7ac)
-HX_LOCAL_STACK_FRAME(_hx_pos_4c0d9a76469df0f6_53_add,"borogove.FormSubmitBuilder","add",0x393dfd05,"borogove.FormSubmitBuilder.add","borogove/Form.hx",53,0x25d2f7ac)
-HX_LOCAL_STACK_FRAME(_hx_pos_4c0d9a76469df0f6_61_submit,"borogove.FormSubmitBuilder","submit",0xa46933b4,"borogove.FormSubmitBuilder.submit","borogove/Form.hx",61,0x25d2f7ac)
+HX_DEFINE_STACK_FRAME(_hx_pos_4c0d9a76469df0f6_49_new,"borogove.FormSubmitBuilder","new",0x3947db44,"borogove.FormSubmitBuilder.new","borogove/Form.hx",49,0x25d2f7ac)
+HX_LOCAL_STACK_FRAME(_hx_pos_4c0d9a76469df0f6_54_add,"borogove.FormSubmitBuilder","add",0x393dfd05,"borogove.FormSubmitBuilder.add","borogove/Form.hx",54,0x25d2f7ac)
+HX_LOCAL_STACK_FRAME(_hx_pos_4c0d9a76469df0f6_62_submit,"borogove.FormSubmitBuilder","submit",0xa46933b4,"borogove.FormSubmitBuilder.submit","borogove/Form.hx",62,0x25d2f7ac)
 namespace borogove{
 
 void FormSubmitBuilder_obj::__construct(){
-            	HX_GC_STACKFRAME(&_hx_pos_4c0d9a76469df0f6_48_new)
-HXDLIN(  48)		this->data =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+            	HX_GC_STACKFRAME(&_hx_pos_4c0d9a76469df0f6_49_new)
+HXDLIN(  49)		this->data =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
             	}
 
 Dynamic FormSubmitBuilder_obj::__CreateEmpty() { return new FormSubmitBuilder_obj; }
@@ -49,13 +49,13 @@ bool FormSubmitBuilder_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 void FormSubmitBuilder_obj::add(::String k,::String v){
-            	HX_STACKFRAME(&_hx_pos_4c0d9a76469df0f6_53_add)
-HXDLIN(  53)		if (::hx::IsNotNull( this->data->get(k) )) {
-HXLINE(  54)			::Dynamic this1 = this->data;
-HXDLIN(  54)			( ( ::haxe::ds::StringMap)(this1) )->set(k,( (::Array< ::String >)(this->data->get(k)) )->concat(::Array_obj< ::String >::__new(1)->init(0,v)));
+            	HX_STACKFRAME(&_hx_pos_4c0d9a76469df0f6_54_add)
+HXDLIN(  54)		if (::hx::IsNotNull( this->data->get(k) )) {
+HXLINE(  55)			::Dynamic this1 = this->data;
+HXDLIN(  55)			( ( ::haxe::ds::StringMap)(this1) )->set(k,( (::Array< ::String >)(this->data->get(k)) )->concat(::Array_obj< ::String >::__new(1)->init(0,v)));
             		}
             		else {
-HXLINE(  56)			this->data->set(k,::Array_obj< ::String >::__new(1)->init(0,v));
+HXLINE(  57)			this->data->set(k,::Array_obj< ::String >::__new(1)->init(0,v));
             		}
             	}
 
@@ -63,128 +63,128 @@ HXLINE(  56)			this->data->set(k,::Array_obj< ::String >::__new(1)->init(0,v));
 HX_DEFINE_DYNAMIC_FUNC2(FormSubmitBuilder_obj,add,(void))
 
  ::borogove::Stanza FormSubmitBuilder_obj::submit( ::borogove::Stanza form){
-            	HX_GC_STACKFRAME(&_hx_pos_4c0d9a76469df0f6_61_submit)
-HXLINE(  62)		 ::borogove::Stanza toSubmit =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_GC_STACKFRAME(&_hx_pos_4c0d9a76469df0f6_62_submit)
+HXLINE(  63)		 ::borogove::Stanza toSubmit =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("x",78,00,00,00), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("type",ba,f2,08,4d),HX_("submit",18,58,06,9a))
             			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("jabber:x:data",c2,e1,e9,7c))));
-HXLINE(  63)		if (::hx::IsNotNull( form )) {
-HXLINE(  64)			int _g = 0;
-HXDLIN(  64)			::Array< ::Dynamic> _g1 = form->allTags(HX_("field",ba,94,93,00),null());
-HXDLIN(  64)			while((_g < _g1->length)){
-HXLINE(  64)				 ::borogove::Stanza f = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
-HXDLIN(  64)				_g = (_g + 1);
-HXLINE(  65)				bool _hx_tmp;
-HXDLIN(  65)				::Dynamic this1 = this->data;
-HXDLIN(  65)				::String key;
-HXDLIN(  65)				::String tmp = ( (::String)(::Reflect_obj::field(f->attr,HX_("var",e7,de,59,00))) );
-HXDLIN(  65)				if (::hx::IsNotNull( tmp )) {
-HXLINE(  65)					key = tmp;
+HXLINE(  64)		if (::hx::IsNotNull( form )) {
+HXLINE(  65)			int _g = 0;
+HXDLIN(  65)			::Array< ::Dynamic> _g1 = form->allTags(HX_("field",ba,94,93,00),null());
+HXDLIN(  65)			while((_g < _g1->length)){
+HXLINE(  65)				 ::borogove::Stanza f = _g1->__get(_g).StaticCast<  ::borogove::Stanza >();
+HXDLIN(  65)				_g = (_g + 1);
+HXLINE(  66)				bool _hx_tmp;
+HXDLIN(  66)				::Dynamic this1 = this->data;
+HXDLIN(  66)				::String key;
+HXDLIN(  66)				::String tmp = ( (::String)(::Reflect_obj::field(f->attr,HX_("var",e7,de,59,00))) );
+HXDLIN(  66)				if (::hx::IsNotNull( tmp )) {
+HXLINE(  66)					key = tmp;
             				}
             				else {
-HXLINE(  65)					key = HX_("",00,00,00,00);
+HXLINE(  66)					key = HX_("",00,00,00,00);
             				}
-HXDLIN(  65)				if (::hx::IsNull( ( ( ::haxe::ds::StringMap)(this1) )->get(key) )) {
-HXLINE(  65)					_hx_tmp = (::borogove::_DataForm::Field_Impl__obj::get_value(f)->length > 0);
+HXDLIN(  66)				if (::hx::IsNull( ( ( ::haxe::ds::StringMap)(this1) )->get(key) )) {
+HXLINE(  66)					_hx_tmp = (::borogove::_DataForm::Field_Impl__obj::get_value(f)->length > 0);
             				}
             				else {
-HXLINE(  65)					_hx_tmp = false;
+HXLINE(  66)					_hx_tmp = false;
             				}
-HXDLIN(  65)				if (_hx_tmp) {
-HXLINE(  66)					::String tmp1 = ( (::String)(::Reflect_obj::field(f->attr,HX_("var",e7,de,59,00))) );
-HXDLIN(  66)					::String tag;
-HXDLIN(  66)					if (::hx::IsNotNull( tmp1 )) {
-HXLINE(  66)						tag = tmp1;
+HXDLIN(  66)				if (_hx_tmp) {
+HXLINE(  67)					::String tmp1 = ( (::String)(::Reflect_obj::field(f->attr,HX_("var",e7,de,59,00))) );
+HXDLIN(  67)					::String tag;
+HXDLIN(  67)					if (::hx::IsNotNull( tmp1 )) {
+HXLINE(  67)						tag = tmp1;
             					}
             					else {
-HXLINE(  66)						tag = HX_("",00,00,00,00);
+HXLINE(  67)						tag = HX_("",00,00,00,00);
             					}
-HXDLIN(  66)					 ::borogove::Stanza tag1 = toSubmit->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+HXDLIN(  67)					 ::borogove::Stanza tag1 = toSubmit->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("var",e7,de,59,00),tag)));
-HXLINE(  67)					{
-HXLINE(  67)						int _g2 = 0;
-HXDLIN(  67)						::Array< ::String > _g3 = ::borogove::_DataForm::Field_Impl__obj::get_value(f);
-HXDLIN(  67)						while((_g2 < _g3->length)){
-HXLINE(  67)							::String v = _g3->__get(_g2);
-HXDLIN(  67)							_g2 = (_g2 + 1);
-HXLINE(  68)							tag1->textTag(HX_("value",71,7f,b8,31),v,null());
+HXLINE(  68)					{
+HXLINE(  68)						int _g2 = 0;
+HXDLIN(  68)						::Array< ::String > _g3 = ::borogove::_DataForm::Field_Impl__obj::get_value(f);
+HXDLIN(  68)						while((_g2 < _g3->length)){
+HXLINE(  68)							::String v = _g3->__get(_g2);
+HXDLIN(  68)							_g2 = (_g2 + 1);
+HXLINE(  69)							tag1->textTag(HX_("value",71,7f,b8,31),v,null());
             						}
             					}
-HXLINE(  70)					tag1->up();
+HXLINE(  71)					tag1->up();
             				}
             				else {
-HXLINE(  71)					bool _hx_tmp1;
-HXDLIN(  71)					if (::hx::IsNotNull( f->getChild(HX_("required",5f,91,62,b2),null()) )) {
-HXLINE(  71)						::Dynamic this2 = this->data;
-HXDLIN(  71)						::String key1;
-HXDLIN(  71)						::String tmp2 = ( (::String)(::Reflect_obj::field(f->attr,HX_("var",e7,de,59,00))) );
-HXDLIN(  71)						if (::hx::IsNotNull( tmp2 )) {
-HXLINE(  71)							key1 = tmp2;
+HXLINE(  72)					bool _hx_tmp1;
+HXDLIN(  72)					if (::hx::IsNotNull( f->getChild(HX_("required",5f,91,62,b2),null()) )) {
+HXLINE(  72)						::Dynamic this2 = this->data;
+HXDLIN(  72)						::String key1;
+HXDLIN(  72)						::String tmp2 = ( (::String)(::Reflect_obj::field(f->attr,HX_("var",e7,de,59,00))) );
+HXDLIN(  72)						if (::hx::IsNotNull( tmp2 )) {
+HXLINE(  72)							key1 = tmp2;
             						}
             						else {
-HXLINE(  71)							key1 = HX_("",00,00,00,00);
+HXLINE(  72)							key1 = HX_("",00,00,00,00);
             						}
-HXDLIN(  71)						if (::hx::IsNotNull( ( ( ::haxe::ds::StringMap)(this2) )->get(key1) )) {
-HXLINE(  71)							::Dynamic this3 = this->data;
-HXDLIN(  71)							::String key2;
-HXDLIN(  71)							::String tmp3 = ( (::String)(::Reflect_obj::field(f->attr,HX_("var",e7,de,59,00))) );
-HXDLIN(  71)							if (::hx::IsNotNull( tmp3 )) {
-HXLINE(  71)								key2 = tmp3;
+HXDLIN(  72)						if (::hx::IsNotNull( ( ( ::haxe::ds::StringMap)(this2) )->get(key1) )) {
+HXLINE(  72)							::Dynamic this3 = this->data;
+HXDLIN(  72)							::String key2;
+HXDLIN(  72)							::String tmp3 = ( (::String)(::Reflect_obj::field(f->attr,HX_("var",e7,de,59,00))) );
+HXDLIN(  72)							if (::hx::IsNotNull( tmp3 )) {
+HXLINE(  72)								key2 = tmp3;
             							}
             							else {
-HXLINE(  71)								key2 = HX_("",00,00,00,00);
+HXLINE(  72)								key2 = HX_("",00,00,00,00);
             							}
-HXDLIN(  71)							_hx_tmp1 = (( (::Array< ::String >)(( ( ::haxe::ds::StringMap)(this3) )->get(key2)) )->length < 1);
+HXDLIN(  72)							_hx_tmp1 = (( (::Array< ::String >)(( ( ::haxe::ds::StringMap)(this3) )->get(key2)) )->length < 1);
             						}
             						else {
-HXLINE(  71)							_hx_tmp1 = true;
+HXLINE(  72)							_hx_tmp1 = true;
             						}
             					}
             					else {
-HXLINE(  71)						_hx_tmp1 = false;
+HXLINE(  72)						_hx_tmp1 = false;
             					}
-HXDLIN(  71)					if (_hx_tmp1) {
-HXLINE(  72)						 ::Dynamic _hx_tmp2 = ::haxe::Log_obj::trace;
-HXDLIN(  72)						::String tmp4 = ( (::String)(::Reflect_obj::field(f->attr,HX_("var",e7,de,59,00))) );
-HXDLIN(  72)						::String _hx_tmp3;
-HXDLIN(  72)						if (::hx::IsNotNull( tmp4 )) {
-HXLINE(  72)							_hx_tmp3 = tmp4;
+HXDLIN(  72)					if (_hx_tmp1) {
+HXLINE(  73)						 ::Dynamic _hx_tmp2 = ::haxe::Log_obj::trace;
+HXDLIN(  73)						::String tmp4 = ( (::String)(::Reflect_obj::field(f->attr,HX_("var",e7,de,59,00))) );
+HXDLIN(  73)						::String _hx_tmp3;
+HXDLIN(  73)						if (::hx::IsNotNull( tmp4 )) {
+HXLINE(  73)							_hx_tmp3 = tmp4;
             						}
             						else {
-HXLINE(  72)							_hx_tmp3 = HX_("",00,00,00,00);
+HXLINE(  73)							_hx_tmp3 = HX_("",00,00,00,00);
             						}
-HXDLIN(  72)						_hx_tmp2(HX_("No value provided for required field",9f,e8,77,b6), ::Dynamic(::hx::Anon_obj::Create(5)
+HXDLIN(  73)						_hx_tmp2(HX_("No value provided for required field",9f,e8,77,b6), ::Dynamic(::hx::Anon_obj::Create(5)
             							->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.FormSubmitBuilder",52,29,e8,61))
             							->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,_hx_tmp3))
             							->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("submit",18,58,06,9a))
             							->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/Form.hx",ac,f7,d2,25))
-            							->setFixed(4,HX_("lineNumber",dd,81,22,76),72)));
-HXLINE(  73)						return null();
+            							->setFixed(4,HX_("lineNumber",dd,81,22,76),73)));
+HXLINE(  74)						return null();
             					}
             				}
             			}
             		}
-HXLINE(  77)		{
-HXLINE(  77)			::Dynamic this4 = this->data;
-HXDLIN(  77)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(this4);
-HXDLIN(  77)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE(  77)				::String key3 = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN(  77)				::Array< ::String > _g_value = ( (::Array< ::String >)(::haxe::IMap_obj::get(this4,key3)) );
-HXDLIN(  77)				{
-HXLINE(  78)					 ::borogove::Stanza tag2 = toSubmit->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(  78)		{
+HXLINE(  78)			::Dynamic this4 = this->data;
+HXDLIN(  78)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(this4);
+HXDLIN(  78)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE(  78)				::String key3 = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN(  78)				::Array< ::String > _g_value = ( (::Array< ::String >)(::haxe::IMap_obj::get(this4,key3)) );
+HXDLIN(  78)				{
+HXLINE(  79)					 ::borogove::Stanza tag2 = toSubmit->tag(HX_("field",ba,94,93,00), ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("var",e7,de,59,00),key3)));
-HXLINE(  79)					{
-HXLINE(  79)						int _g4 = 0;
-HXDLIN(  79)						while((_g4 < _g_value->length)){
-HXLINE(  79)							::String v1 = _g_value->__get(_g4);
-HXDLIN(  79)							_g4 = (_g4 + 1);
-HXLINE(  80)							tag2->textTag(HX_("value",71,7f,b8,31),v1,null());
+HXLINE(  80)					{
+HXLINE(  80)						int _g4 = 0;
+HXDLIN(  80)						while((_g4 < _g_value->length)){
+HXLINE(  80)							::String v1 = _g_value->__get(_g4);
+HXDLIN(  80)							_g4 = (_g4 + 1);
+HXLINE(  81)							tag2->textTag(HX_("value",71,7f,b8,31),v1,null());
             						}
             					}
-HXLINE(  82)					tag2->up();
+HXLINE(  83)					tag2->up();
             				}
             			}
             		}
-HXLINE(  85)		return toSubmit;
+HXLINE(  86)		return toSubmit;
             	}
 
 
diff --git a/Sources/c_borogove/src/borogove/Hash.cpp b/Sources/c_borogove/src/borogove/Hash.cpp
index ea51667..ff19fa0 100644
--- a/Sources/c_borogove/src/borogove/Hash.cpp
+++ b/Sources/c_borogove/src/borogove/Hash.cpp
@@ -24,7 +24,7 @@
 #endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_44da733a4b4dd6a7_31_new,"borogove.Hash","new",0xd16baecd,"borogove.Hash.new","borogove/Hash.hx",31,0x70175b62)
-HX_LOCAL_STACK_FRAME(_hx_pos_cf3f028669fb61f2_423_algorithm__fromC,"borogove.Hash","algorithm__fromC",0xe5eca15d,"borogove.Hash.algorithm__fromC","HaxeCBridge.hx",423,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_cf3f028669fb61f2_450_algorithm__fromC,"borogove.Hash","algorithm__fromC",0xe5eca15d,"borogove.Hash.algorithm__fromC","HaxeCBridge.hx",450,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_44da733a4b4dd6a7_89_toUri,"borogove.Hash","toUri",0x41b8f05e,"borogove.Hash.toUri","borogove/Hash.hx",89,0x70175b62)
 HX_LOCAL_STACK_FRAME(_hx_pos_44da733a4b4dd6a7_98_bobUri,"borogove.Hash","bobUri",0x162eb02a,"borogove.Hash.bobUri","borogove/Hash.hx",98,0x70175b62)
 HX_LOCAL_STACK_FRAME(_hx_pos_44da733a4b4dd6a7_103_serializeUri,"borogove.Hash","serializeUri",0x8327dd5f,"borogove.Hash.serializeUri","borogove/Hash.hx",103,0x70175b62)
@@ -60,8 +60,8 @@ bool Hash_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 ::String Hash_obj::algorithm__fromC(){
-            	HX_STACKFRAME(&_hx_pos_cf3f028669fb61f2_423_algorithm__fromC)
-HXDLIN( 423)		return this->algorithm;
+            	HX_STACKFRAME(&_hx_pos_cf3f028669fb61f2_450_algorithm__fromC)
+HXDLIN( 450)		return this->algorithm;
             	}
 
 
diff --git a/Sources/c_borogove/src/borogove/Notification.cpp b/Sources/c_borogove/src/borogove/Notification.cpp
index e1492c7..d6d242c 100644
--- a/Sources/c_borogove/src/borogove/Notification.cpp
+++ b/Sources/c_borogove/src/borogove/Notification.cpp
@@ -21,18 +21,18 @@
 #endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_44a57d84c61de0e9_67_new,"borogove.Notification","new",0x9a361d6a,"borogove.Notification.new","borogove/Notification.hx",67,0x6f7c2665)
-HX_LOCAL_STACK_FRAME(_hx_pos_a36c4e022559a091_423_title__fromC,"borogove.Notification","title__fromC",0xca367f97,"borogove.Notification.title__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a36c4e022559a091_423_body__fromC,"borogove.Notification","body__fromC",0xbb65d521,"borogove.Notification.body__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a36c4e022559a091_423_accountId__fromC,"borogove.Notification","accountId__fromC",0x39085047,"borogove.Notification.accountId__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a36c4e022559a091_423_chatId__fromC,"borogove.Notification","chatId__fromC",0x0c06b990,"borogove.Notification.chatId__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a36c4e022559a091_423_senderId__fromC,"borogove.Notification","senderId__fromC",0x4f6fc393,"borogove.Notification.senderId__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a36c4e022559a091_423_messageId__fromC,"borogove.Notification","messageId__fromC",0x0db223ed,"borogove.Notification.messageId__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a36c4e022559a091_423_type__fromC,"borogove.Notification","type__fromC",0xb9521009,"borogove.Notification.type__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a36c4e022559a091_423_callStatus__fromC,"borogove.Notification","callStatus__fromC",0xe429aa93,"borogove.Notification.callStatus__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a36c4e022559a091_423_callSid__fromC,"borogove.Notification","callSid__fromC",0x6a29589f,"borogove.Notification.callSid__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a36c4e022559a091_423_imageUri__fromC,"borogove.Notification","imageUri__fromC",0xebb481d2,"borogove.Notification.imageUri__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a36c4e022559a091_423_lang__fromC,"borogove.Notification","lang__fromC",0x77e58b55,"borogove.Notification.lang__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a36c4e022559a091_423_timestamp__fromC,"borogove.Notification","timestamp__fromC",0xf5425719,"borogove.Notification.timestamp__fromC","HaxeCBridge.hx",423,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a36c4e022559a091_450_title__fromC,"borogove.Notification","title__fromC",0xca367f97,"borogove.Notification.title__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a36c4e022559a091_450_body__fromC,"borogove.Notification","body__fromC",0xbb65d521,"borogove.Notification.body__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a36c4e022559a091_450_accountId__fromC,"borogove.Notification","accountId__fromC",0x39085047,"borogove.Notification.accountId__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a36c4e022559a091_450_chatId__fromC,"borogove.Notification","chatId__fromC",0x0c06b990,"borogove.Notification.chatId__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a36c4e022559a091_450_senderId__fromC,"borogove.Notification","senderId__fromC",0x4f6fc393,"borogove.Notification.senderId__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a36c4e022559a091_450_messageId__fromC,"borogove.Notification","messageId__fromC",0x0db223ed,"borogove.Notification.messageId__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a36c4e022559a091_450_type__fromC,"borogove.Notification","type__fromC",0xb9521009,"borogove.Notification.type__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a36c4e022559a091_450_callStatus__fromC,"borogove.Notification","callStatus__fromC",0xe429aa93,"borogove.Notification.callStatus__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a36c4e022559a091_450_callSid__fromC,"borogove.Notification","callSid__fromC",0x6a29589f,"borogove.Notification.callSid__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a36c4e022559a091_450_imageUri__fromC,"borogove.Notification","imageUri__fromC",0xebb481d2,"borogove.Notification.imageUri__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a36c4e022559a091_450_lang__fromC,"borogove.Notification","lang__fromC",0x77e58b55,"borogove.Notification.lang__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_a36c4e022559a091_450_timestamp__fromC,"borogove.Notification","timestamp__fromC",0xf5425719,"borogove.Notification.timestamp__fromC","HaxeCBridge.hx",450,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_44a57d84c61de0e9_83_fromChatMessage,"borogove.Notification","fromChatMessage",0xe6bd348f,"borogove.Notification.fromChatMessage","borogove/Notification.hx",83,0x6f7c2665)
 HX_LOCAL_STACK_FRAME(_hx_pos_44a57d84c61de0e9_109_fromThinStanza,"borogove.Notification","fromThinStanza",0x4d440e6e,"borogove.Notification.fromThinStanza","borogove/Notification.hx",109,0x6f7c2665)
 HX_LOCAL_STACK_FRAME(_hx_pos_44a57d84c61de0e9_16_boot,"borogove.Notification","boot",0x4d3c9fe8,"borogove.Notification.boot","borogove/Notification.hx",16,0x6f7c2665)
@@ -70,96 +70,96 @@ bool Notification_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 ::String Notification_obj::title__fromC(){
-            	HX_STACKFRAME(&_hx_pos_a36c4e022559a091_423_title__fromC)
-HXDLIN( 423)		return this->title;
+            	HX_STACKFRAME(&_hx_pos_a36c4e022559a091_450_title__fromC)
+HXDLIN( 450)		return this->title;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Notification_obj,title__fromC,return )
 
 ::String Notification_obj::body__fromC(){
-            	HX_STACKFRAME(&_hx_pos_a36c4e022559a091_423_body__fromC)
-HXDLIN( 423)		return this->body;
+            	HX_STACKFRAME(&_hx_pos_a36c4e022559a091_450_body__fromC)
+HXDLIN( 450)		return this->body;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Notification_obj,body__fromC,return )
 
 ::String Notification_obj::accountId__fromC(){
-            	HX_STACKFRAME(&_hx_pos_a36c4e022559a091_423_accountId__fromC)
-HXDLIN( 423)		return this->accountId;
+            	HX_STACKFRAME(&_hx_pos_a36c4e022559a091_450_accountId__fromC)
+HXDLIN( 450)		return this->accountId;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Notification_obj,accountId__fromC,return )
 
 ::String Notification_obj::chatId__fromC(){
-            	HX_STACKFRAME(&_hx_pos_a36c4e022559a091_423_chatId__fromC)
-HXDLIN( 423)		return this->chatId;
+            	HX_STACKFRAME(&_hx_pos_a36c4e022559a091_450_chatId__fromC)
+HXDLIN( 450)		return this->chatId;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Notification_obj,chatId__fromC,return )
 
 ::String Notification_obj::senderId__fromC(){
-            	HX_STACKFRAME(&_hx_pos_a36c4e022559a091_423_senderId__fromC)
-HXDLIN( 423)		return this->senderId;
+            	HX_STACKFRAME(&_hx_pos_a36c4e022559a091_450_senderId__fromC)
+HXDLIN( 450)		return this->senderId;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Notification_obj,senderId__fromC,return )
 
 ::String Notification_obj::messageId__fromC(){
-            	HX_STACKFRAME(&_hx_pos_a36c4e022559a091_423_messageId__fromC)
-HXDLIN( 423)		return this->messageId;
+            	HX_STACKFRAME(&_hx_pos_a36c4e022559a091_450_messageId__fromC)
+HXDLIN( 450)		return this->messageId;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Notification_obj,messageId__fromC,return )
 
 int Notification_obj::type__fromC(){
-            	HX_STACKFRAME(&_hx_pos_a36c4e022559a091_423_type__fromC)
-HXDLIN( 423)		return this->type;
+            	HX_STACKFRAME(&_hx_pos_a36c4e022559a091_450_type__fromC)
+HXDLIN( 450)		return this->type;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Notification_obj,type__fromC,return )
 
 ::String Notification_obj::callStatus__fromC(){
-            	HX_STACKFRAME(&_hx_pos_a36c4e022559a091_423_callStatus__fromC)
-HXDLIN( 423)		return this->callStatus;
+            	HX_STACKFRAME(&_hx_pos_a36c4e022559a091_450_callStatus__fromC)
+HXDLIN( 450)		return this->callStatus;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Notification_obj,callStatus__fromC,return )
 
 ::String Notification_obj::callSid__fromC(){
-            	HX_STACKFRAME(&_hx_pos_a36c4e022559a091_423_callSid__fromC)
-HXDLIN( 423)		return this->callSid;
+            	HX_STACKFRAME(&_hx_pos_a36c4e022559a091_450_callSid__fromC)
+HXDLIN( 450)		return this->callSid;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Notification_obj,callSid__fromC,return )
 
 ::String Notification_obj::imageUri__fromC(){
-            	HX_STACKFRAME(&_hx_pos_a36c4e022559a091_423_imageUri__fromC)
-HXDLIN( 423)		return this->imageUri;
+            	HX_STACKFRAME(&_hx_pos_a36c4e022559a091_450_imageUri__fromC)
+HXDLIN( 450)		return this->imageUri;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Notification_obj,imageUri__fromC,return )
 
 ::String Notification_obj::lang__fromC(){
-            	HX_STACKFRAME(&_hx_pos_a36c4e022559a091_423_lang__fromC)
-HXDLIN( 423)		return this->lang;
+            	HX_STACKFRAME(&_hx_pos_a36c4e022559a091_450_lang__fromC)
+HXDLIN( 450)		return this->lang;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Notification_obj,lang__fromC,return )
 
 ::String Notification_obj::timestamp__fromC(){
-            	HX_STACKFRAME(&_hx_pos_a36c4e022559a091_423_timestamp__fromC)
-HXDLIN( 423)		return this->timestamp;
+            	HX_STACKFRAME(&_hx_pos_a36c4e022559a091_450_timestamp__fromC)
+HXDLIN( 450)		return this->timestamp;
             	}
 
 
diff --git a/Sources/c_borogove/src/borogove/Participant.cpp b/Sources/c_borogove/src/borogove/Participant.cpp
index e4a2287..bb190da 100644
--- a/Sources/c_borogove/src/borogove/Participant.cpp
+++ b/Sources/c_borogove/src/borogove/Participant.cpp
@@ -45,14 +45,14 @@
 #endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_74a0113f4a5624a8_25_new,"borogove.Participant","new",0x618fcab8,"borogove.Participant.new","borogove/Participant.hx",25,0xf8259379)
-HX_LOCAL_STACK_FRAME(_hx_pos_9afbd85bbbe40848_423_displayName__fromC,"borogove.Participant","displayName__fromC",0xdcc10714,"borogove.Participant.displayName__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9afbd85bbbe40848_423_photoUri__fromC,"borogove.Participant","photoUri__fromC",0x9f724837,"borogove.Participant.photoUri__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9afbd85bbbe40848_423_placeholderUri__fromC,"borogove.Participant","placeholderUri__fromC",0x53e4a038,"borogove.Participant.placeholderUri__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_9afbd85bbbe40848_423_isSelf__fromC,"borogove.Participant","isSelf__fromC",0xdd7b56fb,"borogove.Participant.isSelf__fromC","HaxeCBridge.hx",423,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_9afbd85bbbe40848_450_displayName__fromC,"borogove.Participant","displayName__fromC",0xdcc10714,"borogove.Participant.displayName__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_9afbd85bbbe40848_450_photoUri__fromC,"borogove.Participant","photoUri__fromC",0x9f724837,"borogove.Participant.photoUri__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_9afbd85bbbe40848_450_placeholderUri__fromC,"borogove.Participant","placeholderUri__fromC",0x53e4a038,"borogove.Participant.placeholderUri__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_9afbd85bbbe40848_450_isSelf__fromC,"borogove.Participant","isSelf__fromC",0xdd7b56fb,"borogove.Participant.isSelf__fromC","HaxeCBridge.hx",450,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_74a0113f4a5624a8_37_profile,"borogove.Participant","profile",0xe64d4f81,"borogove.Participant.profile","borogove/Participant.hx",37,0xf8259379)
 HX_LOCAL_STACK_FRAME(_hx_pos_74a0113f4a5624a8_35_profile,"borogove.Participant","profile",0xe64d4f81,"borogove.Participant.profile","borogove/Participant.hx",35,0xf8259379)
 HX_LOCAL_STACK_FRAME(_hx_pos_74a0113f4a5624a8_34_profile,"borogove.Participant","profile",0xe64d4f81,"borogove.Participant.profile","borogove/Participant.hx",34,0xf8259379)
-HX_LOCAL_STACK_FRAME(_hx_pos_9afbd85bbbe40848_313_profile__fromC,"borogove.Participant","profile__fromC",0x01e28318,"borogove.Participant.profile__fromC","HaxeCBridge.hx",313,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_9afbd85bbbe40848_337_profile__fromC,"borogove.Participant","profile__fromC",0x01e28318,"borogove.Participant.profile__fromC","HaxeCBridge.hx",337,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_74a0113f4a5624a8_17_boot,"borogove.Participant","boot",0xf45a96da,"borogove.Participant.boot","borogove/Participant.hx",17,0xf8259379)
 namespace borogove{
 
@@ -81,32 +81,32 @@ bool Participant_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 ::String Participant_obj::displayName__fromC(){
-            	HX_STACKFRAME(&_hx_pos_9afbd85bbbe40848_423_displayName__fromC)
-HXDLIN( 423)		return this->displayName;
+            	HX_STACKFRAME(&_hx_pos_9afbd85bbbe40848_450_displayName__fromC)
+HXDLIN( 450)		return this->displayName;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Participant_obj,displayName__fromC,return )
 
 ::String Participant_obj::photoUri__fromC(){
-            	HX_STACKFRAME(&_hx_pos_9afbd85bbbe40848_423_photoUri__fromC)
-HXDLIN( 423)		return this->photoUri;
+            	HX_STACKFRAME(&_hx_pos_9afbd85bbbe40848_450_photoUri__fromC)
+HXDLIN( 450)		return this->photoUri;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Participant_obj,photoUri__fromC,return )
 
 ::String Participant_obj::placeholderUri__fromC(){
-            	HX_STACKFRAME(&_hx_pos_9afbd85bbbe40848_423_placeholderUri__fromC)
-HXDLIN( 423)		return this->placeholderUri;
+            	HX_STACKFRAME(&_hx_pos_9afbd85bbbe40848_450_placeholderUri__fromC)
+HXDLIN( 450)		return this->placeholderUri;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Participant_obj,placeholderUri__fromC,return )
 
 bool Participant_obj::isSelf__fromC(){
-            	HX_STACKFRAME(&_hx_pos_9afbd85bbbe40848_423_isSelf__fromC)
-HXDLIN( 423)		return this->isSelf;
+            	HX_STACKFRAME(&_hx_pos_9afbd85bbbe40848_450_isSelf__fromC)
+HXDLIN( 450)		return this->isSelf;
             	}
 
 
@@ -158,42 +158,42 @@ HXLINE(  35)		return ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(ne
 HX_DEFINE_DYNAMIC_FUNC1(Participant_obj,profile,return )
 
 void Participant_obj::profile__fromC( ::borogove::Client client,::cpp::Function< void  (void*,void*) > handler,void* handler__context){
-            	HX_STACKFRAME(&_hx_pos_9afbd85bbbe40848_313_profile__fromC)
-HXDLIN( 313)		if (::hx::IsNull( handler )) {
-HXDLIN( 313)			this->profile(client);
+            	HX_STACKFRAME(&_hx_pos_9afbd85bbbe40848_337_profile__fromC)
+HXDLIN( 337)		if (::hx::IsNull( handler )) {
+HXDLIN( 337)			this->profile(client);
             		}
             		else {
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (void* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
             			void _hx_run( ::borogove::Profile v){
-            				HX_STACKFRAME(&_hx_pos_9afbd85bbbe40848_313_profile__fromC)
-HXDLIN( 313)				::cpp::Function< void  (void*,void*) > handler1 = handler;
-HXLINE( 297)				 ::Dynamic haxeObject = v;
-HXDLIN( 297)				void* ptr = haxeObject.mPtr;
-HXDLIN( 297)				::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 297)				{
-HXLINE( 297)					 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 297)					if (::hx::IsNull( store )) {
-HXLINE( 297)						store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            				HX_STACKFRAME(&_hx_pos_9afbd85bbbe40848_337_profile__fromC)
+HXDLIN( 337)				::cpp::Function< void  (void*,void*) > handler1 = handler;
+HXLINE( 314)				 ::Dynamic haxeObject = v;
+HXDLIN( 314)				void* ptr = haxeObject.mPtr;
+HXDLIN( 314)				::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 314)				{
+HXLINE( 314)					 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 314)					if (::hx::IsNull( store )) {
+HXLINE( 314)						store =  ::Dynamic(::hx::Anon_obj::Create(2)
             							->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             							->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 297)						::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN( 314)						::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             					}
             					else {
-HXLINE( 297)						::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE( 314)						::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             					}
             				}
-HXLINE( 313)				handler1(ptr,handler__context);
+HXLINE( 337)				handler1(ptr,handler__context);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::cpp::Function< void  (void* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
             			void _hx_run( ::Dynamic e){
-            				HX_STACKFRAME(&_hx_pos_9afbd85bbbe40848_313_profile__fromC)
-HXDLIN( 313)				handler(null(),handler__context);
+            				HX_STACKFRAME(&_hx_pos_9afbd85bbbe40848_337_profile__fromC)
+HXDLIN( 337)				handler(null(),handler__context);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-HXDLIN( 313)			::thenshim::_Promise::Promise_Impl__obj::then(this->profile(client), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
+HXDLIN( 337)			::thenshim::_Promise::Promise_Impl__obj::then(this->profile(client), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
             		}
             	}
 
diff --git a/Sources/c_borogove/src/borogove/Persistence.cpp b/Sources/c_borogove/src/borogove/Persistence.cpp
index cc1a27c..e081d60 100644
--- a/Sources/c_borogove/src/borogove/Persistence.cpp
+++ b/Sources/c_borogove/src/borogove/Persistence.cpp
@@ -20,7 +20,7 @@
 #include <thenshim/Thenable.h>
 #endif
 
-HX_LOCAL_STACK_FRAME(_hx_pos_86b0a481bb186c19_17_boot,"borogove.Persistence","boot",0x620c37ae,"borogove.Persistence.boot","borogove/Persistence.hx",17,0x3c6f974d)
+HX_LOCAL_STACK_FRAME(_hx_pos_86b0a481bb186c19_22_boot,"borogove.Persistence","boot",0x620c37ae,"borogove.Persistence.boot","borogove/Persistence.hx",22,0x3c6f974d)
 namespace borogove{
 
 
@@ -67,13 +67,59 @@ void Persistence_obj::__register()
 void Persistence_obj::__boot()
 {
 {
-            	HX_STACKFRAME(&_hx_pos_86b0a481bb186c19_17_boot)
-HXDLIN(  17)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(2)
-            				->setFixed(0,HX_("getChatsUnreadDetails",ee,d4,5a,85), ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_STACKFRAME(&_hx_pos_86b0a481bb186c19_22_boot)
+HXDLIN(  22)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(25)
+            				->setFixed(0,HX_("storeChats",fa,4a,32,83), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
+            				->setFixed(1,HX_("getChatsUnreadDetails",ee,d4,5a,85), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
-            				->setFixed(1,HX_("findServicesWithFeature",99,4e,bd,4a), ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null()))))));
+            				->setFixed(2,HX_("storeStreamManagement",24,1d,b8,8d), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
+            				->setFixed(3,HX_("hasMedia",2a,4f,14,92), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
+            				->setFixed(4,HX_("storeCaps",a2,60,d7,9d), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
+            				->setFixed(5,HX_("storeService",54,de,f6,9d), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
+            				->setFixed(6,HX_("getChats",25,ae,8a,a5), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
+            				->setFixed(7,HX_("storeReaction",aa,00,75,ab), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
+            				->setFixed(8,HX_("storeLogin",c8,85,72,b6), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
+            				->setFixed(9,HX_("getLogin",f3,e8,ca,d8), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
+            				->setFixed(10,HX_("getMessage",d1,bb,72,e9), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
+            				->setFixed(11,HX_("storeMessages",cd,f1,bd,e9), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
+            				->setFixed(12,HX_("listAccounts",a4,81,e8,f5), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
+            				->setFixed(13,HX_("removeMedia",00,e2,ef,03), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
+            				->setFixed(14,HX_("updateMessageStatus",90,98,ad,0f), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
+            				->setFixed(15,HX_("getMessagesBefore",a1,f1,44,11), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
+            				->setFixed(16,HX_("getCaps",d7,cb,3c,14), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
+            				->setFixed(17,HX_("getMessagesAround",6f,95,16,2d), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
+            				->setFixed(18,HX_("storeMedia",43,b1,3a,43), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
+            				->setFixed(19,HX_("findServicesWithFeature",99,4e,bd,4a), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
+            				->setFixed(20,HX_("lastId",d1,0b,c5,54), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
+            				->setFixed(21,HX_("getMessagesAfter",3a,43,91,57), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
+            				->setFixed(22,HX_("updateMessage",be,9a,7f,65), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
+            				->setFixed(23,HX_("getStreamManagement",d9,03,ec,6c), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
+            				->setFixed(24,HX_("removeAccount",c9,58,14,7a), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d))))))));
             	}
 }
 
diff --git a/Sources/c_borogove/src/borogove/Persistence__Companion.cpp b/Sources/c_borogove/src/borogove/Persistence__Companion.cpp
new file mode 100644
index 0000000..05f438e
--- /dev/null
+++ b/Sources/c_borogove/src/borogove/Persistence__Companion.cpp
@@ -0,0 +1,793 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED__HaxeCBridge_Internal
+#include <_HaxeCBridge/Internal.h>
+#endif
+#ifndef INCLUDED_borogove_Chat
+#include <borogove/Chat.h>
+#endif
+#ifndef INCLUDED_borogove_ChatMessage
+#include <borogove/ChatMessage.h>
+#endif
+#ifndef INCLUDED_borogove_Persistence
+#include <borogove/Persistence.h>
+#endif
+#ifndef INCLUDED_borogove_Persistence__Companion
+#include <borogove/Persistence__Companion.h>
+#endif
+#ifndef INCLUDED_cpp_Int64Map
+#include <cpp/Int64Map.h>
+#endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
+#ifndef INCLUDED_thenshim_Thenable
+#include <thenshim/Thenable.h>
+#endif
+#ifndef INCLUDED_thenshim__Promise_Promise_Impl_
+#include <thenshim/_Promise/Promise_Impl_.h>
+#endif
+
+HX_LOCAL_STACK_FRAME(_hx_pos_3b8bc4f87a0221fe_337_lastId__fromC,"borogove.Persistence__Companion","lastId__fromC",0x12c49c74,"borogove.Persistence__Companion.lastId__fromC","HaxeCBridge.hx",337,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_3b8bc4f87a0221fe_339_storeChats__fromC,"borogove.Persistence__Companion","storeChats__fromC",0xc83eca6b,"borogove.Persistence__Companion.storeChats__fromC","HaxeCBridge.hx",339,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_3b8bc4f87a0221fe_337_storeMessages__fromC,"borogove.Persistence__Companion","storeMessages__fromC",0xd59d6420,"borogove.Persistence__Companion.storeMessages__fromC","HaxeCBridge.hx",337,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_3b8bc4f87a0221fe_339_updateMessage__fromC,"borogove.Persistence__Companion","updateMessage__fromC",0xb75e2b4f,"borogove.Persistence__Companion.updateMessage__fromC","HaxeCBridge.hx",339,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_3b8bc4f87a0221fe_337_updateMessageStatus__fromC,"borogove.Persistence__Companion","updateMessageStatus__fromC",0x758082bd,"borogove.Persistence__Companion.updateMessageStatus__fromC","HaxeCBridge.hx",337,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_3b8bc4f87a0221fe_337_getMessage__fromC,"borogove.Persistence__Companion","getMessage__fromC",0xc54a3274,"borogove.Persistence__Companion.getMessage__fromC","HaxeCBridge.hx",337,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_3b8bc4f87a0221fe_337_getMessagesBefore__fromC,"borogove.Persistence__Companion","getMessagesBefore__fromC",0xc80240cc,"borogove.Persistence__Companion.getMessagesBefore__fromC","HaxeCBridge.hx",337,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_3b8bc4f87a0221fe_337_getMessagesAfter__fromC,"borogove.Persistence__Companion","getMessagesAfter__fromC",0x9041e32b,"borogove.Persistence__Companion.getMessagesAfter__fromC","HaxeCBridge.hx",337,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_3b8bc4f87a0221fe_337_getMessagesAround__fromC,"borogove.Persistence__Companion","getMessagesAround__fromC",0x5d92d2be,"borogove.Persistence__Companion.getMessagesAround__fromC","HaxeCBridge.hx",337,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_3b8bc4f87a0221fe_337_hasMedia__fromC,"borogove.Persistence__Companion","hasMedia__fromC",0x4b80a93b,"borogove.Persistence__Companion.hasMedia__fromC","HaxeCBridge.hx",337,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_3b8bc4f87a0221fe_337_storeMedia__fromC,"borogove.Persistence__Companion","storeMedia__fromC",0x0211af42,"borogove.Persistence__Companion.storeMedia__fromC","HaxeCBridge.hx",337,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_3b8bc4f87a0221fe_339_removeMedia__fromC,"borogove.Persistence__Companion","removeMedia__fromC",0x250c534d,"borogove.Persistence__Companion.removeMedia__fromC","HaxeCBridge.hx",339,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_3b8bc4f87a0221fe_339_storeLogin__fromC,"borogove.Persistence__Companion","storeLogin__fromC",0xf171a55d,"borogove.Persistence__Companion.storeLogin__fromC","HaxeCBridge.hx",339,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_3b8bc4f87a0221fe_339_removeAccount__fromC,"borogove.Persistence__Companion","removeAccount__fromC",0x032814a4,"borogove.Persistence__Companion.removeAccount__fromC","HaxeCBridge.hx",339,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_3b8bc4f87a0221fe_337_listAccounts__fromC,"borogove.Persistence__Companion","listAccounts__fromC",0x55fbe001,"borogove.Persistence__Companion.listAccounts__fromC","HaxeCBridge.hx",337,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_c5ec1c5882052979_22_boot,"borogove.Persistence__Companion","boot",0x08e8fe06,"borogove.Persistence__Companion.boot","borogove/Persistence.hx",22,0x3c6f974d)
+namespace borogove{
+
+void Persistence__Companion_obj::__construct() { }
+
+Dynamic Persistence__Companion_obj::__CreateEmpty() { return new Persistence__Companion_obj; }
+
+void *Persistence__Companion_obj::_hx_vtable = 0;
+
+Dynamic Persistence__Companion_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< Persistence__Companion_obj > _hx_result = new Persistence__Companion_obj();
+	_hx_result->__construct();
+	return _hx_result;
+}
+
+bool Persistence__Companion_obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x0f6bf1d6;
+}
+
+void Persistence__Companion_obj::lastId__fromC(::Dynamic self,::String accountId,::String chatId,::cpp::Function< void  (const char*,void*) > handler,void* handler__context){
+            	HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_337_lastId__fromC)
+HXDLIN( 337)		if (::hx::IsNull( handler )) {
+HXDLIN( 337)			::borogove::Persistence_obj::lastId(self,accountId,chatId);
+            		}
+            		else {
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (const char* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
+            			void _hx_run(::String v){
+            				HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_337_lastId__fromC)
+HXDLIN( 337)				::cpp::Function< void  (const char*,void*) > handler1 = handler;
+HXLINE( 312)				const char* cStrPtr = v.utf8_str();
+HXDLIN( 312)				::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
+HXDLIN( 312)				{
+HXLINE( 312)					 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 312)					if (::hx::IsNull( store )) {
+HXLINE( 312)						store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            							->setFixed(0,HX_("refCount",7c,2e,66,86),1)
+            							->setFixed(1,HX_("value",71,7f,b8,31),v));
+HXDLIN( 312)						::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+            					}
+            					else {
+HXLINE( 312)						::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+            					}
+            				}
+HXLINE( 337)				handler1(cStrPtr,handler__context);
+            			}
+            			HX_END_LOCAL_FUNC1((void))
+
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::cpp::Function< void  (const char* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
+            			void _hx_run( ::Dynamic e){
+            				HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_337_lastId__fromC)
+HXDLIN( 337)				handler(null(),handler__context);
+            			}
+            			HX_END_LOCAL_FUNC1((void))
+
+HXDLIN( 337)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::lastId(self,accountId,chatId), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
+            		}
+            	}
+
+
+void Persistence__Companion_obj::storeChats__fromC(::Dynamic self,::String accountId,::cpp::Pointer< void* > chats,size_t chats__len){
+            	HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_339_storeChats__fromC)
+HXLINE( 282)		::Array< ::Dynamic> _hx_tmp;
+HXDLIN( 282)		if (::hx::IsNull( chats )) {
+HXLINE( 282)			_hx_tmp = null();
+            		}
+            		else {
+HXLINE( 282)			::cpp::Pointer<  ::borogove::Chat > _this = chats->reinterpret();
+HXDLIN( 282)			::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new();
+HXDLIN( 282)			::cpp::Pointer<  ::borogove::Chat > tmp = _this;
+HXDLIN( 282)			result->setUnmanagedData(tmp,( (int)(chats__len) ));
+HXDLIN( 282)			_hx_tmp = result->copy();
+            		}
+HXLINE( 339)		::borogove::Persistence_obj::storeChats(self,accountId,_hx_tmp);
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC4(Persistence__Companion_obj,storeChats__fromC,(void))
+
+void Persistence__Companion_obj::storeMessages__fromC(::Dynamic self,::String accountId,::cpp::Pointer< void* > message,size_t message__len,::cpp::Function< void  (void**,size_t,void*) > handler,void* handler__context){
+            	HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_337_storeMessages__fromC)
+HXDLIN( 337)		if (::hx::IsNull( handler )) {
+HXLINE( 282)			::Array< ::Dynamic> _hx_tmp;
+HXDLIN( 282)			if (::hx::IsNull( message )) {
+HXLINE( 282)				_hx_tmp = null();
+            			}
+            			else {
+HXLINE( 282)				::cpp::Pointer<  ::borogove::ChatMessage > _this = message->reinterpret();
+HXDLIN( 282)				::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new();
+HXDLIN( 282)				::cpp::Pointer<  ::borogove::ChatMessage > tmp = _this;
+HXDLIN( 282)				result->setUnmanagedData(tmp,( (int)(message__len) ));
+HXDLIN( 282)				_hx_tmp = result->copy();
+            			}
+HXLINE( 337)			::borogove::Persistence_obj::storeMessages(self,accountId,_hx_tmp);
+            		}
+            		else {
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (void** HX_COMMA size_t HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
+            			void _hx_run(::Array< ::Dynamic> v){
+            				HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_337_storeMessages__fromC)
+HXDLIN( 337)				::cpp::Function< void  (void**,size_t,void*) > handler1 = handler;
+HXLINE( 308)				{
+HXLINE( 308)					int _g = 0;
+HXDLIN( 308)					while((_g < v->length)){
+HXLINE( 308)						 ::borogove::ChatMessage el = v->__get(_g).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN( 308)						_g = (_g + 1);
+HXDLIN( 308)						{
+HXLINE( 308)							 ::Dynamic haxeObject = el;
+HXDLIN( 308)							void* ptr = haxeObject.mPtr;
+HXDLIN( 308)							::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 308)							{
+HXLINE( 308)								 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 308)								if (::hx::IsNull( store )) {
+HXLINE( 308)									store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            										->setFixed(0,HX_("refCount",7c,2e,66,86),1)
+            										->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
+HXDLIN( 308)									::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+            								}
+            								else {
+HXLINE( 308)									::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+            								}
+            							}
+            						}
+            					}
+            				}
+HXDLIN( 308)				void** ptr1 = (void**)v->getBase();
+HXDLIN( 308)				::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 308)				{
+HXLINE( 308)					 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 308)					if (::hx::IsNull( store1 )) {
+HXLINE( 308)						store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+            							->setFixed(0,HX_("refCount",7c,2e,66,86),1)
+            							->setFixed(1,HX_("value",71,7f,b8,31),v));
+HXDLIN( 308)						::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+            					}
+            					else {
+HXLINE( 308)						::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+            					}
+            				}
+HXLINE( 337)				handler1(ptr1,( (size_t)(v->length) ),handler__context);
+            			}
+            			HX_END_LOCAL_FUNC1((void))
+
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::cpp::Function< void  (void** HX_COMMA size_t HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
+            			void _hx_run( ::Dynamic e){
+            				HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_337_storeMessages__fromC)
+HXDLIN( 337)				handler(null(),( (size_t)(0) ),handler__context);
+            			}
+            			HX_END_LOCAL_FUNC1((void))
+
+HXLINE( 282)			::Array< ::Dynamic> _hx_tmp1;
+HXDLIN( 282)			if (::hx::IsNull( message )) {
+HXLINE( 282)				_hx_tmp1 = null();
+            			}
+            			else {
+HXLINE( 282)				::cpp::Pointer<  ::borogove::ChatMessage > _this1 = message->reinterpret();
+HXDLIN( 282)				::Array< ::Dynamic> result1 = ::Array_obj< ::Dynamic>::__new();
+HXDLIN( 282)				::cpp::Pointer<  ::borogove::ChatMessage > tmp1 = _this1;
+HXDLIN( 282)				result1->setUnmanagedData(tmp1,( (int)(message__len) ));
+HXDLIN( 282)				_hx_tmp1 = result1->copy();
+            			}
+HXLINE( 337)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeMessages(self,accountId,_hx_tmp1), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
+            		}
+            	}
+
+
+void Persistence__Companion_obj::updateMessage__fromC(::Dynamic self,::String accountId, ::borogove::ChatMessage message){
+            	HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_339_updateMessage__fromC)
+HXDLIN( 339)		::borogove::Persistence_obj::updateMessage(self,accountId,message);
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC3(Persistence__Companion_obj,updateMessage__fromC,(void))
+
+void Persistence__Companion_obj::updateMessageStatus__fromC(::Dynamic self,::String accountId,::String localId,int status,::String statusText,::cpp::Function< void  (void*,void*) > handler,void* handler__context){
+            	HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_337_updateMessageStatus__fromC)
+HXDLIN( 337)		if (::hx::IsNull( handler )) {
+HXDLIN( 337)			::borogove::Persistence_obj::updateMessageStatus(self,accountId,localId,status,statusText);
+            		}
+            		else {
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (void* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
+            			void _hx_run( ::borogove::ChatMessage v){
+            				HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_337_updateMessageStatus__fromC)
+HXDLIN( 337)				::cpp::Function< void  (void*,void*) > handler1 = handler;
+HXLINE( 314)				 ::Dynamic haxeObject = v;
+HXDLIN( 314)				void* ptr = haxeObject.mPtr;
+HXDLIN( 314)				::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 314)				{
+HXLINE( 314)					 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 314)					if (::hx::IsNull( store )) {
+HXLINE( 314)						store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            							->setFixed(0,HX_("refCount",7c,2e,66,86),1)
+            							->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
+HXDLIN( 314)						::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+            					}
+            					else {
+HXLINE( 314)						::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+            					}
+            				}
+HXLINE( 337)				handler1(ptr,handler__context);
+            			}
+            			HX_END_LOCAL_FUNC1((void))
+
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::cpp::Function< void  (void* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
+            			void _hx_run( ::Dynamic e){
+            				HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_337_updateMessageStatus__fromC)
+HXDLIN( 337)				handler(null(),handler__context);
+            			}
+            			HX_END_LOCAL_FUNC1((void))
+
+HXDLIN( 337)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::updateMessageStatus(self,accountId,localId,status,statusText), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
+            		}
+            	}
+
+
+void Persistence__Companion_obj::getMessage__fromC(::Dynamic self,::String accountId,::String chatId,::String serverId,::String localId,::cpp::Function< void  (void*,void*) > handler,void* handler__context){
+            	HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_337_getMessage__fromC)
+HXDLIN( 337)		if (::hx::IsNull( handler )) {
+HXDLIN( 337)			::borogove::Persistence_obj::getMessage(self,accountId,chatId,serverId,localId);
+            		}
+            		else {
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (void* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
+            			void _hx_run( ::borogove::ChatMessage v){
+            				HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_337_getMessage__fromC)
+HXDLIN( 337)				::cpp::Function< void  (void*,void*) > handler1 = handler;
+HXLINE( 314)				 ::Dynamic haxeObject = v;
+HXDLIN( 314)				void* ptr = haxeObject.mPtr;
+HXDLIN( 314)				::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 314)				{
+HXLINE( 314)					 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 314)					if (::hx::IsNull( store )) {
+HXLINE( 314)						store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            							->setFixed(0,HX_("refCount",7c,2e,66,86),1)
+            							->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
+HXDLIN( 314)						::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+            					}
+            					else {
+HXLINE( 314)						::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+            					}
+            				}
+HXLINE( 337)				handler1(ptr,handler__context);
+            			}
+            			HX_END_LOCAL_FUNC1((void))
+
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::cpp::Function< void  (void* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
+            			void _hx_run( ::Dynamic e){
+            				HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_337_getMessage__fromC)
+HXDLIN( 337)				handler(null(),handler__context);
+            			}
+            			HX_END_LOCAL_FUNC1((void))
+
+HXDLIN( 337)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getMessage(self,accountId,chatId,serverId,localId), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
+            		}
+            	}
+
+
+void Persistence__Companion_obj::getMessagesBefore__fromC(::Dynamic self,::String accountId,::String chatId,::String beforeId,::String beforeTime,::cpp::Function< void  (void**,size_t,void*) > handler,void* handler__context){
+            	HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_337_getMessagesBefore__fromC)
+HXDLIN( 337)		if (::hx::IsNull( handler )) {
+HXDLIN( 337)			::borogove::Persistence_obj::getMessagesBefore(self,accountId,chatId,beforeId,beforeTime);
+            		}
+            		else {
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (void** HX_COMMA size_t HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
+            			void _hx_run(::Array< ::Dynamic> v){
+            				HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_337_getMessagesBefore__fromC)
+HXDLIN( 337)				::cpp::Function< void  (void**,size_t,void*) > handler1 = handler;
+HXLINE( 308)				{
+HXLINE( 308)					int _g = 0;
+HXDLIN( 308)					while((_g < v->length)){
+HXLINE( 308)						 ::borogove::ChatMessage el = v->__get(_g).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN( 308)						_g = (_g + 1);
+HXDLIN( 308)						{
+HXLINE( 308)							 ::Dynamic haxeObject = el;
+HXDLIN( 308)							void* ptr = haxeObject.mPtr;
+HXDLIN( 308)							::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 308)							{
+HXLINE( 308)								 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 308)								if (::hx::IsNull( store )) {
+HXLINE( 308)									store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            										->setFixed(0,HX_("refCount",7c,2e,66,86),1)
+            										->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
+HXDLIN( 308)									::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+            								}
+            								else {
+HXLINE( 308)									::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+            								}
+            							}
+            						}
+            					}
+            				}
+HXDLIN( 308)				void** ptr1 = (void**)v->getBase();
+HXDLIN( 308)				::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 308)				{
+HXLINE( 308)					 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 308)					if (::hx::IsNull( store1 )) {
+HXLINE( 308)						store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+            							->setFixed(0,HX_("refCount",7c,2e,66,86),1)
+            							->setFixed(1,HX_("value",71,7f,b8,31),v));
+HXDLIN( 308)						::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+            					}
+            					else {
+HXLINE( 308)						::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+            					}
+            				}
+HXLINE( 337)				handler1(ptr1,( (size_t)(v->length) ),handler__context);
+            			}
+            			HX_END_LOCAL_FUNC1((void))
+
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::cpp::Function< void  (void** HX_COMMA size_t HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
+            			void _hx_run( ::Dynamic e){
+            				HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_337_getMessagesBefore__fromC)
+HXDLIN( 337)				handler(null(),( (size_t)(0) ),handler__context);
+            			}
+            			HX_END_LOCAL_FUNC1((void))
+
+HXDLIN( 337)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getMessagesBefore(self,accountId,chatId,beforeId,beforeTime), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
+            		}
+            	}
+
+
+void Persistence__Companion_obj::getMessagesAfter__fromC(::Dynamic self,::String accountId,::String chatId,::String afterId,::String afterTime,::cpp::Function< void  (void**,size_t,void*) > handler,void* handler__context){
+            	HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_337_getMessagesAfter__fromC)
+HXDLIN( 337)		if (::hx::IsNull( handler )) {
+HXDLIN( 337)			::borogove::Persistence_obj::getMessagesAfter(self,accountId,chatId,afterId,afterTime);
+            		}
+            		else {
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (void** HX_COMMA size_t HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
+            			void _hx_run(::Array< ::Dynamic> v){
+            				HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_337_getMessagesAfter__fromC)
+HXDLIN( 337)				::cpp::Function< void  (void**,size_t,void*) > handler1 = handler;
+HXLINE( 308)				{
+HXLINE( 308)					int _g = 0;
+HXDLIN( 308)					while((_g < v->length)){
+HXLINE( 308)						 ::borogove::ChatMessage el = v->__get(_g).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN( 308)						_g = (_g + 1);
+HXDLIN( 308)						{
+HXLINE( 308)							 ::Dynamic haxeObject = el;
+HXDLIN( 308)							void* ptr = haxeObject.mPtr;
+HXDLIN( 308)							::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 308)							{
+HXLINE( 308)								 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 308)								if (::hx::IsNull( store )) {
+HXLINE( 308)									store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            										->setFixed(0,HX_("refCount",7c,2e,66,86),1)
+            										->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
+HXDLIN( 308)									::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+            								}
+            								else {
+HXLINE( 308)									::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+            								}
+            							}
+            						}
+            					}
+            				}
+HXDLIN( 308)				void** ptr1 = (void**)v->getBase();
+HXDLIN( 308)				::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 308)				{
+HXLINE( 308)					 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 308)					if (::hx::IsNull( store1 )) {
+HXLINE( 308)						store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+            							->setFixed(0,HX_("refCount",7c,2e,66,86),1)
+            							->setFixed(1,HX_("value",71,7f,b8,31),v));
+HXDLIN( 308)						::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+            					}
+            					else {
+HXLINE( 308)						::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+            					}
+            				}
+HXLINE( 337)				handler1(ptr1,( (size_t)(v->length) ),handler__context);
+            			}
+            			HX_END_LOCAL_FUNC1((void))
+
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::cpp::Function< void  (void** HX_COMMA size_t HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
+            			void _hx_run( ::Dynamic e){
+            				HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_337_getMessagesAfter__fromC)
+HXDLIN( 337)				handler(null(),( (size_t)(0) ),handler__context);
+            			}
+            			HX_END_LOCAL_FUNC1((void))
+
+HXDLIN( 337)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getMessagesAfter(self,accountId,chatId,afterId,afterTime), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
+            		}
+            	}
+
+
+void Persistence__Companion_obj::getMessagesAround__fromC(::Dynamic self,::String accountId,::String chatId,::String aroundId,::String aroundTime,::cpp::Function< void  (void**,size_t,void*) > handler,void* handler__context){
+            	HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_337_getMessagesAround__fromC)
+HXDLIN( 337)		if (::hx::IsNull( handler )) {
+HXDLIN( 337)			::borogove::Persistence_obj::getMessagesAround(self,accountId,chatId,aroundId,aroundTime);
+            		}
+            		else {
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (void** HX_COMMA size_t HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
+            			void _hx_run(::Array< ::Dynamic> v){
+            				HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_337_getMessagesAround__fromC)
+HXDLIN( 337)				::cpp::Function< void  (void**,size_t,void*) > handler1 = handler;
+HXLINE( 308)				{
+HXLINE( 308)					int _g = 0;
+HXDLIN( 308)					while((_g < v->length)){
+HXLINE( 308)						 ::borogove::ChatMessage el = v->__get(_g).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN( 308)						_g = (_g + 1);
+HXDLIN( 308)						{
+HXLINE( 308)							 ::Dynamic haxeObject = el;
+HXDLIN( 308)							void* ptr = haxeObject.mPtr;
+HXDLIN( 308)							::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 308)							{
+HXLINE( 308)								 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 308)								if (::hx::IsNull( store )) {
+HXLINE( 308)									store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            										->setFixed(0,HX_("refCount",7c,2e,66,86),1)
+            										->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
+HXDLIN( 308)									::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+            								}
+            								else {
+HXLINE( 308)									::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+            								}
+            							}
+            						}
+            					}
+            				}
+HXDLIN( 308)				void** ptr1 = (void**)v->getBase();
+HXDLIN( 308)				::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 308)				{
+HXLINE( 308)					 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 308)					if (::hx::IsNull( store1 )) {
+HXLINE( 308)						store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+            							->setFixed(0,HX_("refCount",7c,2e,66,86),1)
+            							->setFixed(1,HX_("value",71,7f,b8,31),v));
+HXDLIN( 308)						::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+            					}
+            					else {
+HXLINE( 308)						::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+            					}
+            				}
+HXLINE( 337)				handler1(ptr1,( (size_t)(v->length) ),handler__context);
+            			}
+            			HX_END_LOCAL_FUNC1((void))
+
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::cpp::Function< void  (void** HX_COMMA size_t HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
+            			void _hx_run( ::Dynamic e){
+            				HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_337_getMessagesAround__fromC)
+HXDLIN( 337)				handler(null(),( (size_t)(0) ),handler__context);
+            			}
+            			HX_END_LOCAL_FUNC1((void))
+
+HXDLIN( 337)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::getMessagesAround(self,accountId,chatId,aroundId,aroundTime), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
+            		}
+            	}
+
+
+void Persistence__Companion_obj::hasMedia__fromC(::Dynamic self,::String hashAlgorithm,::cpp::Pointer< unsigned char > hash,size_t hash__len,::cpp::Function< void  (bool,void*) > handler,void* handler__context){
+            	HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_337_hasMedia__fromC)
+HXDLIN( 337)		if (::hx::IsNull( handler )) {
+HXLINE( 282)			::Array< unsigned char > _hx_tmp;
+HXDLIN( 282)			if (::hx::IsNull( hash )) {
+HXLINE( 282)				_hx_tmp = null();
+            			}
+            			else {
+HXLINE( 282)				::cpp::Pointer< unsigned char > _this = hash->reinterpret();
+HXDLIN( 282)				::Array< unsigned char > result = ::Array_obj< unsigned char >::__new();
+HXDLIN( 282)				::cpp::Pointer< unsigned char > tmp = _this;
+HXDLIN( 282)				result->setUnmanagedData(tmp,( (int)(hash__len) ));
+HXDLIN( 282)				_hx_tmp = result->copy();
+            			}
+HXLINE( 337)			::borogove::Persistence_obj::hasMedia(self,hashAlgorithm,_hx_tmp);
+            		}
+            		else {
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (bool HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
+            			void _hx_run(bool v){
+            				HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_337_hasMedia__fromC)
+HXDLIN( 337)				handler(v,handler__context);
+            			}
+            			HX_END_LOCAL_FUNC1((void))
+
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::cpp::Function< void  (bool HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
+            			void _hx_run( ::Dynamic e){
+            				HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_337_hasMedia__fromC)
+HXDLIN( 337)				handler(false,handler__context);
+            			}
+            			HX_END_LOCAL_FUNC1((void))
+
+HXLINE( 282)			::Array< unsigned char > _hx_tmp1;
+HXDLIN( 282)			if (::hx::IsNull( hash )) {
+HXLINE( 282)				_hx_tmp1 = null();
+            			}
+            			else {
+HXLINE( 282)				::cpp::Pointer< unsigned char > _this1 = hash->reinterpret();
+HXDLIN( 282)				::Array< unsigned char > result1 = ::Array_obj< unsigned char >::__new();
+HXDLIN( 282)				::cpp::Pointer< unsigned char > tmp1 = _this1;
+HXDLIN( 282)				result1->setUnmanagedData(tmp1,( (int)(hash__len) ));
+HXDLIN( 282)				_hx_tmp1 = result1->copy();
+            			}
+HXLINE( 337)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::hasMedia(self,hashAlgorithm,_hx_tmp1), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
+            		}
+            	}
+
+
+void Persistence__Companion_obj::storeMedia__fromC(::Dynamic self,::String mime,::cpp::Pointer< unsigned char > bytes,size_t bytes__len,::cpp::Function< void  (bool,void*) > handler,void* handler__context){
+            	HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_337_storeMedia__fromC)
+HXDLIN( 337)		if (::hx::IsNull( handler )) {
+HXLINE( 282)			::Array< unsigned char > _hx_tmp;
+HXDLIN( 282)			if (::hx::IsNull( bytes )) {
+HXLINE( 282)				_hx_tmp = null();
+            			}
+            			else {
+HXLINE( 282)				::cpp::Pointer< unsigned char > _this = bytes->reinterpret();
+HXDLIN( 282)				::Array< unsigned char > result = ::Array_obj< unsigned char >::__new();
+HXDLIN( 282)				::cpp::Pointer< unsigned char > tmp = _this;
+HXDLIN( 282)				result->setUnmanagedData(tmp,( (int)(bytes__len) ));
+HXDLIN( 282)				_hx_tmp = result->copy();
+            			}
+HXLINE( 337)			::borogove::Persistence_obj::storeMedia(self,mime,_hx_tmp);
+            		}
+            		else {
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (bool HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
+            			void _hx_run(bool v){
+            				HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_337_storeMedia__fromC)
+HXDLIN( 337)				handler(v,handler__context);
+            			}
+            			HX_END_LOCAL_FUNC1((void))
+
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::cpp::Function< void  (bool HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
+            			void _hx_run( ::Dynamic e){
+            				HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_337_storeMedia__fromC)
+HXDLIN( 337)				handler(false,handler__context);
+            			}
+            			HX_END_LOCAL_FUNC1((void))
+
+HXLINE( 282)			::Array< unsigned char > _hx_tmp1;
+HXDLIN( 282)			if (::hx::IsNull( bytes )) {
+HXLINE( 282)				_hx_tmp1 = null();
+            			}
+            			else {
+HXLINE( 282)				::cpp::Pointer< unsigned char > _this1 = bytes->reinterpret();
+HXDLIN( 282)				::Array< unsigned char > result1 = ::Array_obj< unsigned char >::__new();
+HXDLIN( 282)				::cpp::Pointer< unsigned char > tmp1 = _this1;
+HXDLIN( 282)				result1->setUnmanagedData(tmp1,( (int)(bytes__len) ));
+HXDLIN( 282)				_hx_tmp1 = result1->copy();
+            			}
+HXLINE( 337)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::storeMedia(self,mime,_hx_tmp1), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
+            		}
+            	}
+
+
+void Persistence__Companion_obj::removeMedia__fromC(::Dynamic self,::String hashAlgorithm,::cpp::Pointer< unsigned char > hash,size_t hash__len){
+            	HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_339_removeMedia__fromC)
+HXLINE( 282)		::Array< unsigned char > _hx_tmp;
+HXDLIN( 282)		if (::hx::IsNull( hash )) {
+HXLINE( 282)			_hx_tmp = null();
+            		}
+            		else {
+HXLINE( 282)			::cpp::Pointer< unsigned char > _this = hash->reinterpret();
+HXDLIN( 282)			::Array< unsigned char > result = ::Array_obj< unsigned char >::__new();
+HXDLIN( 282)			::cpp::Pointer< unsigned char > tmp = _this;
+HXDLIN( 282)			result->setUnmanagedData(tmp,( (int)(hash__len) ));
+HXDLIN( 282)			_hx_tmp = result->copy();
+            		}
+HXLINE( 339)		::borogove::Persistence_obj::removeMedia(self,hashAlgorithm,_hx_tmp);
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC4(Persistence__Companion_obj,removeMedia__fromC,(void))
+
+void Persistence__Companion_obj::storeLogin__fromC(::Dynamic self,::String login,::String clientId,::String displayName,::String token){
+            	HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_339_storeLogin__fromC)
+HXDLIN( 339)		::borogove::Persistence_obj::storeLogin(self,login,clientId,displayName,token);
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC5(Persistence__Companion_obj,storeLogin__fromC,(void))
+
+void Persistence__Companion_obj::removeAccount__fromC(::Dynamic self,::String accountId,bool completely){
+            	HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_339_removeAccount__fromC)
+HXDLIN( 339)		::borogove::Persistence_obj::removeAccount(self,accountId,completely);
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC3(Persistence__Companion_obj,removeAccount__fromC,(void))
+
+void Persistence__Companion_obj::listAccounts__fromC(::Dynamic self,::cpp::Function< void  (const char**,size_t,void*) > handler,void* handler__context){
+            	HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_337_listAccounts__fromC)
+HXDLIN( 337)		if (::hx::IsNull( handler )) {
+HXDLIN( 337)			::borogove::Persistence_obj::listAccounts(self);
+            		}
+            		else {
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (const char** HX_COMMA size_t HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
+            			void _hx_run(::Array< ::String > v){
+            				HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_337_listAccounts__fromC)
+HXDLIN( 337)				::cpp::Function< void  (const char**,size_t,void*) > handler1 = handler;
+HXLINE( 308)				::Array< size_t > arr = ::Array_obj< size_t >::__new(v->length);
+HXDLIN( 308)				{
+HXLINE( 308)					int _g_current = 0;
+HXDLIN( 308)					::Array< ::String > _g_array = v;
+HXDLIN( 308)					while((_g_current < _g_array->length)){
+HXLINE( 308)						::String _g_value = _g_array->__get(_g_current);
+HXDLIN( 308)						_g_current = (_g_current + 1);
+HXDLIN( 308)						::String el = _g_value;
+HXDLIN( 308)						{
+HXLINE( 308)							const char* cStrPtr = el.utf8_str();
+HXDLIN( 308)							::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
+HXDLIN( 308)							{
+HXLINE( 308)								 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 308)								if (::hx::IsNull( store )) {
+HXLINE(2243)									store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            										->setFixed(0,HX_("refCount",7c,2e,66,86),1)
+            										->setFixed(1,HX_("value",71,7f,b8,31),el));
+HXLINE( 308)									::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+            								}
+            								else {
+HXLINE( 308)									::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+            								}
+            							}
+HXDLIN( 308)							const char* ptr = cStrPtr;
+HXDLIN( 308)							arr[(_g_current - 1)] = reinterpret_cast<size_t>(ptr);
+            						}
+            					}
+            				}
+HXDLIN( 308)				void** ptr1 = (void**)arr->getBase();
+HXDLIN( 308)				::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 308)				{
+HXLINE( 308)					 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 308)					if (::hx::IsNull( store1 )) {
+HXLINE(2243)						store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+            							->setFixed(0,HX_("refCount",7c,2e,66,86),1)
+            							->setFixed(1,HX_("value",71,7f,b8,31),arr));
+HXLINE( 308)						::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+            					}
+            					else {
+HXLINE( 308)						::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+            					}
+            				}
+HXLINE( 337)				handler1(( (const char**)(ptr1) ),( (size_t)(v->length) ),handler__context);
+            			}
+            			HX_END_LOCAL_FUNC1((void))
+
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::cpp::Function< void  (const char** HX_COMMA size_t HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
+            			void _hx_run( ::Dynamic e){
+            				HX_STACKFRAME(&_hx_pos_3b8bc4f87a0221fe_337_listAccounts__fromC)
+HXDLIN( 337)				handler(null(),( (size_t)(0) ),handler__context);
+            			}
+            			HX_END_LOCAL_FUNC1((void))
+
+HXDLIN( 337)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::Persistence_obj::listAccounts(self), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
+            		}
+            	}
+
+
+
+Persistence__Companion_obj::Persistence__Companion_obj()
+{
+}
+
+bool Persistence__Companion_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 17:
+		if (HX_FIELD_EQ(inName,"storeChats__fromC") ) { outValue = storeChats__fromC_dyn(); return true; }
+		if (HX_FIELD_EQ(inName,"storeLogin__fromC") ) { outValue = storeLogin__fromC_dyn(); return true; }
+		break;
+	case 18:
+		if (HX_FIELD_EQ(inName,"removeMedia__fromC") ) { outValue = removeMedia__fromC_dyn(); return true; }
+		break;
+	case 20:
+		if (HX_FIELD_EQ(inName,"updateMessage__fromC") ) { outValue = updateMessage__fromC_dyn(); return true; }
+		if (HX_FIELD_EQ(inName,"removeAccount__fromC") ) { outValue = removeAccount__fromC_dyn(); return true; }
+	}
+	return false;
+}
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo *Persistence__Companion_obj_sMemberStorageInfo = 0;
+static ::hx::StaticInfo *Persistence__Companion_obj_sStaticStorageInfo = 0;
+#endif
+
+::hx::Class Persistence__Companion_obj::__mClass;
+
+static ::String Persistence__Companion_obj_sStaticFields[] = {
+	HX_("storeChats__fromC",bf,d8,3a,08),
+	HX_("updateMessage__fromC",7b,c9,64,15),
+	HX_("removeMedia__fromC",79,ce,9c,e1),
+	HX_("storeLogin__fromC",b1,b3,6d,31),
+	HX_("removeAccount__fromC",d0,b2,2e,61),
+	::String(null())
+};
+
+void Persistence__Companion_obj::__register()
+{
+	Persistence__Companion_obj _hx_dummy;
+	Persistence__Companion_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("borogove.Persistence__Companion",1a,37,21,c3);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &Persistence__Companion_obj::__GetStatic;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(Persistence__Companion_obj_sStaticFields);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(0 /* sMemberFields */);
+	__mClass->mCanCast = ::hx::TCanCast< Persistence__Companion_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = Persistence__Companion_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = Persistence__Companion_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+void Persistence__Companion_obj::__boot()
+{
+{
+            	HX_STACKFRAME(&_hx_pos_c5ec1c5882052979_22_boot)
+HXDLIN(  22)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(2)
+            			->setFixed(0,HX_("obj",f7,8f,54,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(0,HX_("HaxeCBridge.name",13,6a,03,0e),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("borogove_Persistence",e1,59,bc,9a)))))
+            			->setFixed(1,HX_("statics",05,3c,65,36), ::Dynamic(::hx::Anon_obj::Create(15)
+            				->setFixed(0,HX_("updateMessageStatus__fromC",e9,09,02,81), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(1,HX_("listAccounts__fromC",55,2b,d7,97), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(2,HX_("getMessagesAfter__fromC",7f,68,c7,c6), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(3,HX_("getMessagesAround__fromC",ea,f6,e1,db), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(4,HX_("removeMedia__fromC",79,ce,9c,e1), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(5,HX_("hasMedia__fromC",8f,ba,d6,fc), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(6,HX_("getMessage__fromC",c8,40,46,05), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(7,HX_("storeChats__fromC",bf,d8,3a,08), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(8,HX_("updateMessage__fromC",7b,c9,64,15), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(9,HX_("storeLogin__fromC",b1,b3,6d,31), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(10,HX_("storeMessages__fromC",4c,02,a4,33), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(11,HX_("storeMedia__fromC",96,bd,0d,42), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(12,HX_("getMessagesBefore__fromC",f8,64,51,46), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(13,HX_("lastId__fromC",c8,f0,dd,4b), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(14,HX_("removeAccount__fromC",d0,b2,2e,61), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null()))))));
+            	}
+}
+
+} // end namespace borogove
diff --git a/Sources/c_borogove/src/borogove/Profile.cpp b/Sources/c_borogove/src/borogove/Profile.cpp
index 9093ae2..9a4e565 100644
--- a/Sources/c_borogove/src/borogove/Profile.cpp
+++ b/Sources/c_borogove/src/borogove/Profile.cpp
@@ -30,7 +30,7 @@
 #endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_ce4ac9f79e689c3e_28_new,"borogove.Profile","new",0xd49f79ae,"borogove.Profile.new","borogove/Profile.hx",28,0x841e40c3)
-HX_LOCAL_STACK_FRAME(_hx_pos_83ac2628da8a8bb8_397_items__fromC,"borogove.Profile","items__fromC",0xb735016b,"borogove.Profile.items__fromC","HaxeCBridge.hx",397,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_83ac2628da8a8bb8_424_items__fromC,"borogove.Profile","items__fromC",0xb735016b,"borogove.Profile.items__fromC","HaxeCBridge.hx",424,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_ce4ac9f79e689c3e_18_boot,"borogove.Profile","boot",0x2f03ff24,"borogove.Profile.boot","borogove/Profile.hx",18,0x841e40c3)
 namespace borogove{
 
@@ -90,52 +90,52 @@ bool Profile_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 size_t Profile_obj::items__fromC(void*** outPtr){
-            	HX_STACKFRAME(&_hx_pos_83ac2628da8a8bb8_397_items__fromC)
-HXDLIN( 397)		::Array< ::Dynamic> x = this->items;
-HXDLIN( 397)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 397)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 397)			::Array< ::Dynamic> x1 = x;
-HXDLIN( 397)			{
-HXDLIN( 397)				int _g = 0;
-HXDLIN( 397)				while((_g < x1->length)){
-HXDLIN( 397)					 ::borogove::ProfileItem el = x1->__get(_g).StaticCast<  ::borogove::ProfileItem >();
-HXDLIN( 397)					_g = (_g + 1);
-HXDLIN( 397)					{
-HXDLIN( 397)						 ::Dynamic haxeObject = el;
-HXDLIN( 397)						void* ptr = haxeObject.mPtr;
-HXDLIN( 397)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 397)						{
-HXDLIN( 397)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 397)							if (::hx::IsNull( store )) {
-HXDLIN( 397)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_83ac2628da8a8bb8_424_items__fromC)
+HXDLIN( 424)		::Array< ::Dynamic> x = this->items;
+HXDLIN( 424)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 424)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 424)			::Array< ::Dynamic> x1 = x;
+HXDLIN( 424)			{
+HXDLIN( 424)				int _g = 0;
+HXDLIN( 424)				while((_g < x1->length)){
+HXDLIN( 424)					 ::borogove::ProfileItem el = x1->__get(_g).StaticCast<  ::borogove::ProfileItem >();
+HXDLIN( 424)					_g = (_g + 1);
+HXDLIN( 424)					{
+HXDLIN( 424)						 ::Dynamic haxeObject = el;
+HXDLIN( 424)						void* ptr = haxeObject.mPtr;
+HXDLIN( 424)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 424)						{
+HXDLIN( 424)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 424)							if (::hx::IsNull( store )) {
+HXDLIN( 424)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
             									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             									->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 397)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN( 424)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             							}
             							else {
-HXDLIN( 397)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 424)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             							}
             						}
             					}
             				}
             			}
-HXDLIN( 397)			void** ptr1 = (void**)x1->getBase();
-HXDLIN( 397)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 397)			{
-HXDLIN( 397)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 397)				if (::hx::IsNull( store1 )) {
-HXDLIN( 397)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 424)			void** ptr1 = (void**)x1->getBase();
+HXDLIN( 424)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 424)			{
+HXDLIN( 424)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 424)				if (::hx::IsNull( store1 )) {
+HXDLIN( 424)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),x1));
-HXDLIN( 397)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+HXDLIN( 424)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
             				}
             				else {
-HXDLIN( 397)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 424)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXDLIN( 397)			_hx_tmp->set_ref(ptr1);
+HXDLIN( 424)			_hx_tmp->set_ref(ptr1);
             		}
-HXDLIN( 397)		return ( (size_t)(x->length) );
+HXDLIN( 424)		return ( (size_t)(x->length) );
             	}
 
 
diff --git a/Sources/c_borogove/src/borogove/ProfileItem.cpp b/Sources/c_borogove/src/borogove/ProfileItem.cpp
index 965388c..da7d8a8 100644
--- a/Sources/c_borogove/src/borogove/ProfileItem.cpp
+++ b/Sources/c_borogove/src/borogove/ProfileItem.cpp
@@ -24,24 +24,24 @@
 #endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_f70289cea0098992_50_new,"borogove.ProfileItem","new",0x1a958e61,"borogove.ProfileItem.new","borogove/Profile.hx",50,0x841e40c3)
-HX_LOCAL_STACK_FRAME(_hx_pos_fe69ecc873f78d42_423_id__fromC,"borogove.ProfileItem","id__fromC",0x265ecabf,"borogove.ProfileItem.id__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_fe69ecc873f78d42_423_key__fromC,"borogove.ProfileItem","key__fromC",0xdbe75cd9,"borogove.ProfileItem.key__fromC","HaxeCBridge.hx",423,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_fe69ecc873f78d42_450_id__fromC,"borogove.ProfileItem","id__fromC",0x265ecabf,"borogove.ProfileItem.id__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_fe69ecc873f78d42_450_key__fromC,"borogove.ProfileItem","key__fromC",0xdbe75cd9,"borogove.ProfileItem.key__fromC","HaxeCBridge.hx",450,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_f70289cea0098992_56_parameters,"borogove.ProfileItem","parameters",0x1b4332c9,"borogove.ProfileItem.parameters","borogove/Profile.hx",56,0x841e40c3)
-HX_LOCAL_STACK_FRAME(_hx_pos_fe69ecc873f78d42_311_parameters__fromC,"borogove.ProfileItem","parameters__fromC",0x56ef18d0,"borogove.ProfileItem.parameters__fromC","HaxeCBridge.hx",311,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_fe69ecc873f78d42_335_parameters__fromC,"borogove.ProfileItem","parameters__fromC",0x56ef18d0,"borogove.ProfileItem.parameters__fromC","HaxeCBridge.hx",335,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_f70289cea0098992_62_text,"borogove.ProfileItem","text",0x2c3e4f8c,"borogove.ProfileItem.text","borogove/Profile.hx",62,0x841e40c3)
-HX_LOCAL_STACK_FRAME(_hx_pos_fe69ecc873f78d42_311_text__fromC,"borogove.ProfileItem","text__fromC",0x413c6a6d,"borogove.ProfileItem.text__fromC","HaxeCBridge.hx",311,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_fe69ecc873f78d42_335_text__fromC,"borogove.ProfileItem","text__fromC",0x413c6a6d,"borogove.ProfileItem.text__fromC","HaxeCBridge.hx",335,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_f70289cea0098992_66_uri,"borogove.ProfileItem","uri",0x1a9ae96d,"borogove.ProfileItem.uri","borogove/Profile.hx",66,0x841e40c3)
-HX_LOCAL_STACK_FRAME(_hx_pos_fe69ecc873f78d42_311_uri__fromC,"borogove.ProfileItem","uri__fromC",0x81eb3eac,"borogove.ProfileItem.uri__fromC","HaxeCBridge.hx",311,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_fe69ecc873f78d42_335_uri__fromC,"borogove.ProfileItem","uri__fromC",0x81eb3eac,"borogove.ProfileItem.uri__fromC","HaxeCBridge.hx",335,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_f70289cea0098992_70_date,"borogove.ProfileItem","date",0x21a7d90d,"borogove.ProfileItem.date","borogove/Profile.hx",70,0x841e40c3)
-HX_LOCAL_STACK_FRAME(_hx_pos_fe69ecc873f78d42_311_date__fromC,"borogove.ProfileItem","date__fromC",0x8c71830c,"borogove.ProfileItem.date__fromC","HaxeCBridge.hx",311,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_fe69ecc873f78d42_335_date__fromC,"borogove.ProfileItem","date__fromC",0x8c71830c,"borogove.ProfileItem.date__fromC","HaxeCBridge.hx",335,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_f70289cea0098992_74_time,"borogove.ProfileItem","time",0x2c414eec,"borogove.ProfileItem.time","borogove/Profile.hx",74,0x841e40c3)
-HX_LOCAL_STACK_FRAME(_hx_pos_fe69ecc873f78d42_311_time__fromC,"borogove.ProfileItem","time__fromC",0xd812170d,"borogove.ProfileItem.time__fromC","HaxeCBridge.hx",311,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_fe69ecc873f78d42_335_time__fromC,"borogove.ProfileItem","time__fromC",0xd812170d,"borogove.ProfileItem.time__fromC","HaxeCBridge.hx",335,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_f70289cea0098992_78_datetime,"borogove.ProfileItem","datetime",0x3e3aaf9a,"borogove.ProfileItem.datetime","borogove/Profile.hx",78,0x841e40c3)
-HX_LOCAL_STACK_FRAME(_hx_pos_fe69ecc873f78d42_311_datetime__fromC,"borogove.ProfileItem","datetime__fromC",0xb24e481f,"borogove.ProfileItem.datetime__fromC","HaxeCBridge.hx",311,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_fe69ecc873f78d42_335_datetime__fromC,"borogove.ProfileItem","datetime__fromC",0xb24e481f,"borogove.ProfileItem.datetime__fromC","HaxeCBridge.hx",335,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_f70289cea0098992_83_boolean,"borogove.ProfileItem","boolean",0x025e3d29,"borogove.ProfileItem.boolean","borogove/Profile.hx",83,0x841e40c3)
 HX_LOCAL_STACK_FRAME(_hx_pos_f70289cea0098992_88_integer,"borogove.ProfileItem","integer",0x9b7b103f,"borogove.ProfileItem.integer","borogove/Profile.hx",88,0x841e40c3)
 HX_LOCAL_STACK_FRAME(_hx_pos_f70289cea0098992_92_languageTag,"borogove.ProfileItem","languageTag",0xfe6a7fe3,"borogove.ProfileItem.languageTag","borogove/Profile.hx",92,0x841e40c3)
-HX_LOCAL_STACK_FRAME(_hx_pos_fe69ecc873f78d42_311_languageTag__fromC,"borogove.ProfileItem","languageTag__fromC",0x321b02f6,"borogove.ProfileItem.languageTag__fromC","HaxeCBridge.hx",311,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_fe69ecc873f78d42_335_languageTag__fromC,"borogove.ProfileItem","languageTag__fromC",0x321b02f6,"borogove.ProfileItem.languageTag__fromC","HaxeCBridge.hx",335,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_f70289cea0098992_42_boot,"borogove.ProfileItem","boot",0x20600711,"borogove.ProfileItem.boot","borogove/Profile.hx",42,0x841e40c3)
 namespace borogove{
 
@@ -68,16 +68,16 @@ bool ProfileItem_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 ::String ProfileItem_obj::id__fromC(){
-            	HX_STACKFRAME(&_hx_pos_fe69ecc873f78d42_423_id__fromC)
-HXDLIN( 423)		return this->id;
+            	HX_STACKFRAME(&_hx_pos_fe69ecc873f78d42_450_id__fromC)
+HXDLIN( 450)		return this->id;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(ProfileItem_obj,id__fromC,return )
 
 ::String ProfileItem_obj::key__fromC(){
-            	HX_STACKFRAME(&_hx_pos_fe69ecc873f78d42_423_key__fromC)
-HXDLIN( 423)		return this->key;
+            	HX_STACKFRAME(&_hx_pos_fe69ecc873f78d42_450_key__fromC)
+HXDLIN( 450)		return this->key;
             	}
 
 
@@ -122,51 +122,51 @@ HXDLIN(  58)		return result;
 HX_DEFINE_DYNAMIC_FUNC0(ProfileItem_obj,parameters,return )
 
 size_t ProfileItem_obj::parameters__fromC(void*** outPtr){
-            	HX_STACKFRAME(&_hx_pos_fe69ecc873f78d42_311_parameters__fromC)
-HXDLIN( 311)		::Array< ::Dynamic> out = this->parameters();
-HXDLIN( 311)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 311)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 311)			{
-HXDLIN( 311)				int _g = 0;
-HXDLIN( 311)				while((_g < out->length)){
-HXDLIN( 311)					 ::borogove::ProfileItem el = out->__get(_g).StaticCast<  ::borogove::ProfileItem >();
-HXDLIN( 311)					_g = (_g + 1);
-HXDLIN( 311)					{
-HXDLIN( 311)						 ::Dynamic haxeObject = el;
-HXDLIN( 311)						void* ptr = haxeObject.mPtr;
-HXDLIN( 311)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 311)						{
-HXDLIN( 311)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 311)							if (::hx::IsNull( store )) {
-HXDLIN( 311)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_fe69ecc873f78d42_335_parameters__fromC)
+HXDLIN( 335)		::Array< ::Dynamic> out = this->parameters();
+HXDLIN( 335)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 335)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 335)			{
+HXDLIN( 335)				int _g = 0;
+HXDLIN( 335)				while((_g < out->length)){
+HXDLIN( 335)					 ::borogove::ProfileItem el = out->__get(_g).StaticCast<  ::borogove::ProfileItem >();
+HXDLIN( 335)					_g = (_g + 1);
+HXDLIN( 335)					{
+HXDLIN( 335)						 ::Dynamic haxeObject = el;
+HXDLIN( 335)						void* ptr = haxeObject.mPtr;
+HXDLIN( 335)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 335)						{
+HXDLIN( 335)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 335)							if (::hx::IsNull( store )) {
+HXDLIN( 335)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
             									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             									->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 311)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN( 335)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             							}
             							else {
-HXDLIN( 311)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 335)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             							}
             						}
             					}
             				}
             			}
-HXDLIN( 311)			void** ptr1 = (void**)out->getBase();
-HXDLIN( 311)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 311)			{
-HXDLIN( 311)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 311)				if (::hx::IsNull( store1 )) {
-HXDLIN( 311)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 335)			void** ptr1 = (void**)out->getBase();
+HXDLIN( 335)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 335)			{
+HXDLIN( 335)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 335)				if (::hx::IsNull( store1 )) {
+HXDLIN( 335)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),out));
-HXDLIN( 311)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+HXDLIN( 335)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
             				}
             				else {
-HXDLIN( 311)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 335)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXDLIN( 311)			_hx_tmp->set_ref(ptr1);
+HXDLIN( 335)			_hx_tmp->set_ref(ptr1);
             		}
-HXDLIN( 311)		return ( (size_t)(out->length) );
+HXDLIN( 335)		return ( (size_t)(out->length) );
             	}
 
 
@@ -193,55 +193,55 @@ HXDLIN(  62)		return result;
 HX_DEFINE_DYNAMIC_FUNC0(ProfileItem_obj,text,return )
 
 size_t ProfileItem_obj::text__fromC(const char*** outPtr){
-            	HX_STACKFRAME(&_hx_pos_fe69ecc873f78d42_311_text__fromC)
-HXDLIN( 311)		::Array< ::String > out = this->text();
-HXDLIN( 311)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 311)			::cpp::Pointer< const char** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 311)			::Array< size_t > arr = ::Array_obj< size_t >::__new(out->length);
-HXDLIN( 311)			{
-HXDLIN( 311)				int _g_current = 0;
-HXDLIN( 311)				::Array< ::String > _g_array = out;
-HXDLIN( 311)				while((_g_current < _g_array->length)){
-HXDLIN( 311)					::String _g_value = _g_array->__get(_g_current);
-HXDLIN( 311)					_g_current = (_g_current + 1);
-HXDLIN( 311)					::String el = _g_value;
-HXDLIN( 311)					{
-HXDLIN( 311)						const char* cStrPtr = el.utf8_str();
-HXDLIN( 311)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
-HXDLIN( 311)						{
-HXDLIN( 311)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 311)							if (::hx::IsNull( store )) {
-HXLINE(2192)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_fe69ecc873f78d42_335_text__fromC)
+HXDLIN( 335)		::Array< ::String > out = this->text();
+HXDLIN( 335)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 335)			::cpp::Pointer< const char** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 335)			::Array< size_t > arr = ::Array_obj< size_t >::__new(out->length);
+HXDLIN( 335)			{
+HXDLIN( 335)				int _g_current = 0;
+HXDLIN( 335)				::Array< ::String > _g_array = out;
+HXDLIN( 335)				while((_g_current < _g_array->length)){
+HXDLIN( 335)					::String _g_value = _g_array->__get(_g_current);
+HXDLIN( 335)					_g_current = (_g_current + 1);
+HXDLIN( 335)					::String el = _g_value;
+HXDLIN( 335)					{
+HXDLIN( 335)						const char* cStrPtr = el.utf8_str();
+HXDLIN( 335)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
+HXDLIN( 335)						{
+HXDLIN( 335)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 335)							if (::hx::IsNull( store )) {
+HXLINE(2243)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
             									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             									->setFixed(1,HX_("value",71,7f,b8,31),el));
-HXLINE( 311)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXLINE( 335)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             							}
             							else {
-HXDLIN( 311)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 335)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             							}
             						}
-HXDLIN( 311)						const char* ptr = cStrPtr;
-HXDLIN( 311)						arr[(_g_current - 1)] = reinterpret_cast<size_t>(ptr);
+HXDLIN( 335)						const char* ptr = cStrPtr;
+HXDLIN( 335)						arr[(_g_current - 1)] = reinterpret_cast<size_t>(ptr);
             					}
             				}
             			}
-HXDLIN( 311)			void** ptr1 = (void**)arr->getBase();
-HXDLIN( 311)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 311)			{
-HXDLIN( 311)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 311)				if (::hx::IsNull( store1 )) {
-HXLINE(2192)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 335)			void** ptr1 = (void**)arr->getBase();
+HXDLIN( 335)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 335)			{
+HXDLIN( 335)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 335)				if (::hx::IsNull( store1 )) {
+HXLINE(2243)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),arr));
-HXLINE( 311)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+HXLINE( 335)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
             				}
             				else {
-HXDLIN( 311)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 335)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXDLIN( 311)			_hx_tmp->set_ref(( (const char**)(ptr1) ));
+HXDLIN( 335)			_hx_tmp->set_ref(( (const char**)(ptr1) ));
             		}
-HXDLIN( 311)		return ( (size_t)(out->length) );
+HXDLIN( 335)		return ( (size_t)(out->length) );
             	}
 
 
@@ -268,55 +268,55 @@ HXDLIN(  66)		return result;
 HX_DEFINE_DYNAMIC_FUNC0(ProfileItem_obj,uri,return )
 
 size_t ProfileItem_obj::uri__fromC(const char*** outPtr){
-            	HX_STACKFRAME(&_hx_pos_fe69ecc873f78d42_311_uri__fromC)
-HXDLIN( 311)		::Array< ::String > out = this->uri();
-HXDLIN( 311)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 311)			::cpp::Pointer< const char** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 311)			::Array< size_t > arr = ::Array_obj< size_t >::__new(out->length);
-HXDLIN( 311)			{
-HXDLIN( 311)				int _g_current = 0;
-HXDLIN( 311)				::Array< ::String > _g_array = out;
-HXDLIN( 311)				while((_g_current < _g_array->length)){
-HXDLIN( 311)					::String _g_value = _g_array->__get(_g_current);
-HXDLIN( 311)					_g_current = (_g_current + 1);
-HXDLIN( 311)					::String el = _g_value;
-HXDLIN( 311)					{
-HXDLIN( 311)						const char* cStrPtr = el.utf8_str();
-HXDLIN( 311)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
-HXDLIN( 311)						{
-HXDLIN( 311)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 311)							if (::hx::IsNull( store )) {
-HXLINE(2192)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_fe69ecc873f78d42_335_uri__fromC)
+HXDLIN( 335)		::Array< ::String > out = this->uri();
+HXDLIN( 335)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 335)			::cpp::Pointer< const char** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 335)			::Array< size_t > arr = ::Array_obj< size_t >::__new(out->length);
+HXDLIN( 335)			{
+HXDLIN( 335)				int _g_current = 0;
+HXDLIN( 335)				::Array< ::String > _g_array = out;
+HXDLIN( 335)				while((_g_current < _g_array->length)){
+HXDLIN( 335)					::String _g_value = _g_array->__get(_g_current);
+HXDLIN( 335)					_g_current = (_g_current + 1);
+HXDLIN( 335)					::String el = _g_value;
+HXDLIN( 335)					{
+HXDLIN( 335)						const char* cStrPtr = el.utf8_str();
+HXDLIN( 335)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
+HXDLIN( 335)						{
+HXDLIN( 335)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 335)							if (::hx::IsNull( store )) {
+HXLINE(2243)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
             									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             									->setFixed(1,HX_("value",71,7f,b8,31),el));
-HXLINE( 311)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXLINE( 335)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             							}
             							else {
-HXDLIN( 311)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 335)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             							}
             						}
-HXDLIN( 311)						const char* ptr = cStrPtr;
-HXDLIN( 311)						arr[(_g_current - 1)] = reinterpret_cast<size_t>(ptr);
+HXDLIN( 335)						const char* ptr = cStrPtr;
+HXDLIN( 335)						arr[(_g_current - 1)] = reinterpret_cast<size_t>(ptr);
             					}
             				}
             			}
-HXDLIN( 311)			void** ptr1 = (void**)arr->getBase();
-HXDLIN( 311)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 311)			{
-HXDLIN( 311)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 311)				if (::hx::IsNull( store1 )) {
-HXLINE(2192)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 335)			void** ptr1 = (void**)arr->getBase();
+HXDLIN( 335)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 335)			{
+HXDLIN( 335)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 335)				if (::hx::IsNull( store1 )) {
+HXLINE(2243)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),arr));
-HXLINE( 311)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+HXLINE( 335)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
             				}
             				else {
-HXDLIN( 311)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 335)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXDLIN( 311)			_hx_tmp->set_ref(( (const char**)(ptr1) ));
+HXDLIN( 335)			_hx_tmp->set_ref(( (const char**)(ptr1) ));
             		}
-HXDLIN( 311)		return ( (size_t)(out->length) );
+HXDLIN( 335)		return ( (size_t)(out->length) );
             	}
 
 
@@ -343,55 +343,55 @@ HXDLIN(  70)		return result;
 HX_DEFINE_DYNAMIC_FUNC0(ProfileItem_obj,date,return )
 
 size_t ProfileItem_obj::date__fromC(const char*** outPtr){
-            	HX_STACKFRAME(&_hx_pos_fe69ecc873f78d42_311_date__fromC)
-HXDLIN( 311)		::Array< ::String > out = this->date();
-HXDLIN( 311)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 311)			::cpp::Pointer< const char** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 311)			::Array< size_t > arr = ::Array_obj< size_t >::__new(out->length);
-HXDLIN( 311)			{
-HXDLIN( 311)				int _g_current = 0;
-HXDLIN( 311)				::Array< ::String > _g_array = out;
-HXDLIN( 311)				while((_g_current < _g_array->length)){
-HXDLIN( 311)					::String _g_value = _g_array->__get(_g_current);
-HXDLIN( 311)					_g_current = (_g_current + 1);
-HXDLIN( 311)					::String el = _g_value;
-HXDLIN( 311)					{
-HXDLIN( 311)						const char* cStrPtr = el.utf8_str();
-HXDLIN( 311)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
-HXDLIN( 311)						{
-HXDLIN( 311)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 311)							if (::hx::IsNull( store )) {
-HXLINE(2192)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_fe69ecc873f78d42_335_date__fromC)
+HXDLIN( 335)		::Array< ::String > out = this->date();
+HXDLIN( 335)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 335)			::cpp::Pointer< const char** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 335)			::Array< size_t > arr = ::Array_obj< size_t >::__new(out->length);
+HXDLIN( 335)			{
+HXDLIN( 335)				int _g_current = 0;
+HXDLIN( 335)				::Array< ::String > _g_array = out;
+HXDLIN( 335)				while((_g_current < _g_array->length)){
+HXDLIN( 335)					::String _g_value = _g_array->__get(_g_current);
+HXDLIN( 335)					_g_current = (_g_current + 1);
+HXDLIN( 335)					::String el = _g_value;
+HXDLIN( 335)					{
+HXDLIN( 335)						const char* cStrPtr = el.utf8_str();
+HXDLIN( 335)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
+HXDLIN( 335)						{
+HXDLIN( 335)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 335)							if (::hx::IsNull( store )) {
+HXLINE(2243)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
             									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             									->setFixed(1,HX_("value",71,7f,b8,31),el));
-HXLINE( 311)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXLINE( 335)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             							}
             							else {
-HXDLIN( 311)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 335)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             							}
             						}
-HXDLIN( 311)						const char* ptr = cStrPtr;
-HXDLIN( 311)						arr[(_g_current - 1)] = reinterpret_cast<size_t>(ptr);
+HXDLIN( 335)						const char* ptr = cStrPtr;
+HXDLIN( 335)						arr[(_g_current - 1)] = reinterpret_cast<size_t>(ptr);
             					}
             				}
             			}
-HXDLIN( 311)			void** ptr1 = (void**)arr->getBase();
-HXDLIN( 311)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 311)			{
-HXDLIN( 311)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 311)				if (::hx::IsNull( store1 )) {
-HXLINE(2192)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 335)			void** ptr1 = (void**)arr->getBase();
+HXDLIN( 335)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 335)			{
+HXDLIN( 335)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 335)				if (::hx::IsNull( store1 )) {
+HXLINE(2243)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),arr));
-HXLINE( 311)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+HXLINE( 335)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
             				}
             				else {
-HXDLIN( 311)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 335)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXDLIN( 311)			_hx_tmp->set_ref(( (const char**)(ptr1) ));
+HXDLIN( 335)			_hx_tmp->set_ref(( (const char**)(ptr1) ));
             		}
-HXDLIN( 311)		return ( (size_t)(out->length) );
+HXDLIN( 335)		return ( (size_t)(out->length) );
             	}
 
 
@@ -418,55 +418,55 @@ HXDLIN(  74)		return result;
 HX_DEFINE_DYNAMIC_FUNC0(ProfileItem_obj,time,return )
 
 size_t ProfileItem_obj::time__fromC(const char*** outPtr){
-            	HX_STACKFRAME(&_hx_pos_fe69ecc873f78d42_311_time__fromC)
-HXDLIN( 311)		::Array< ::String > out = this->time();
-HXDLIN( 311)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 311)			::cpp::Pointer< const char** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 311)			::Array< size_t > arr = ::Array_obj< size_t >::__new(out->length);
-HXDLIN( 311)			{
-HXDLIN( 311)				int _g_current = 0;
-HXDLIN( 311)				::Array< ::String > _g_array = out;
-HXDLIN( 311)				while((_g_current < _g_array->length)){
-HXDLIN( 311)					::String _g_value = _g_array->__get(_g_current);
-HXDLIN( 311)					_g_current = (_g_current + 1);
-HXDLIN( 311)					::String el = _g_value;
-HXDLIN( 311)					{
-HXDLIN( 311)						const char* cStrPtr = el.utf8_str();
-HXDLIN( 311)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
-HXDLIN( 311)						{
-HXDLIN( 311)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 311)							if (::hx::IsNull( store )) {
-HXLINE(2192)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_fe69ecc873f78d42_335_time__fromC)
+HXDLIN( 335)		::Array< ::String > out = this->time();
+HXDLIN( 335)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 335)			::cpp::Pointer< const char** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 335)			::Array< size_t > arr = ::Array_obj< size_t >::__new(out->length);
+HXDLIN( 335)			{
+HXDLIN( 335)				int _g_current = 0;
+HXDLIN( 335)				::Array< ::String > _g_array = out;
+HXDLIN( 335)				while((_g_current < _g_array->length)){
+HXDLIN( 335)					::String _g_value = _g_array->__get(_g_current);
+HXDLIN( 335)					_g_current = (_g_current + 1);
+HXDLIN( 335)					::String el = _g_value;
+HXDLIN( 335)					{
+HXDLIN( 335)						const char* cStrPtr = el.utf8_str();
+HXDLIN( 335)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
+HXDLIN( 335)						{
+HXDLIN( 335)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 335)							if (::hx::IsNull( store )) {
+HXLINE(2243)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
             									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             									->setFixed(1,HX_("value",71,7f,b8,31),el));
-HXLINE( 311)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXLINE( 335)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             							}
             							else {
-HXDLIN( 311)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 335)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             							}
             						}
-HXDLIN( 311)						const char* ptr = cStrPtr;
-HXDLIN( 311)						arr[(_g_current - 1)] = reinterpret_cast<size_t>(ptr);
+HXDLIN( 335)						const char* ptr = cStrPtr;
+HXDLIN( 335)						arr[(_g_current - 1)] = reinterpret_cast<size_t>(ptr);
             					}
             				}
             			}
-HXDLIN( 311)			void** ptr1 = (void**)arr->getBase();
-HXDLIN( 311)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 311)			{
-HXDLIN( 311)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 311)				if (::hx::IsNull( store1 )) {
-HXLINE(2192)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 335)			void** ptr1 = (void**)arr->getBase();
+HXDLIN( 335)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 335)			{
+HXDLIN( 335)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 335)				if (::hx::IsNull( store1 )) {
+HXLINE(2243)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),arr));
-HXLINE( 311)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+HXLINE( 335)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
             				}
             				else {
-HXDLIN( 311)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 335)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXDLIN( 311)			_hx_tmp->set_ref(( (const char**)(ptr1) ));
+HXDLIN( 335)			_hx_tmp->set_ref(( (const char**)(ptr1) ));
             		}
-HXDLIN( 311)		return ( (size_t)(out->length) );
+HXDLIN( 335)		return ( (size_t)(out->length) );
             	}
 
 
@@ -493,55 +493,55 @@ HXDLIN(  78)		return result;
 HX_DEFINE_DYNAMIC_FUNC0(ProfileItem_obj,datetime,return )
 
 size_t ProfileItem_obj::datetime__fromC(const char*** outPtr){
-            	HX_STACKFRAME(&_hx_pos_fe69ecc873f78d42_311_datetime__fromC)
-HXDLIN( 311)		::Array< ::String > out = this->datetime();
-HXDLIN( 311)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 311)			::cpp::Pointer< const char** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 311)			::Array< size_t > arr = ::Array_obj< size_t >::__new(out->length);
-HXDLIN( 311)			{
-HXDLIN( 311)				int _g_current = 0;
-HXDLIN( 311)				::Array< ::String > _g_array = out;
-HXDLIN( 311)				while((_g_current < _g_array->length)){
-HXDLIN( 311)					::String _g_value = _g_array->__get(_g_current);
-HXDLIN( 311)					_g_current = (_g_current + 1);
-HXDLIN( 311)					::String el = _g_value;
-HXDLIN( 311)					{
-HXDLIN( 311)						const char* cStrPtr = el.utf8_str();
-HXDLIN( 311)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
-HXDLIN( 311)						{
-HXDLIN( 311)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 311)							if (::hx::IsNull( store )) {
-HXLINE(2192)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_fe69ecc873f78d42_335_datetime__fromC)
+HXDLIN( 335)		::Array< ::String > out = this->datetime();
+HXDLIN( 335)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 335)			::cpp::Pointer< const char** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 335)			::Array< size_t > arr = ::Array_obj< size_t >::__new(out->length);
+HXDLIN( 335)			{
+HXDLIN( 335)				int _g_current = 0;
+HXDLIN( 335)				::Array< ::String > _g_array = out;
+HXDLIN( 335)				while((_g_current < _g_array->length)){
+HXDLIN( 335)					::String _g_value = _g_array->__get(_g_current);
+HXDLIN( 335)					_g_current = (_g_current + 1);
+HXDLIN( 335)					::String el = _g_value;
+HXDLIN( 335)					{
+HXDLIN( 335)						const char* cStrPtr = el.utf8_str();
+HXDLIN( 335)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
+HXDLIN( 335)						{
+HXDLIN( 335)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 335)							if (::hx::IsNull( store )) {
+HXLINE(2243)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
             									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             									->setFixed(1,HX_("value",71,7f,b8,31),el));
-HXLINE( 311)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXLINE( 335)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             							}
             							else {
-HXDLIN( 311)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 335)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             							}
             						}
-HXDLIN( 311)						const char* ptr = cStrPtr;
-HXDLIN( 311)						arr[(_g_current - 1)] = reinterpret_cast<size_t>(ptr);
+HXDLIN( 335)						const char* ptr = cStrPtr;
+HXDLIN( 335)						arr[(_g_current - 1)] = reinterpret_cast<size_t>(ptr);
             					}
             				}
             			}
-HXDLIN( 311)			void** ptr1 = (void**)arr->getBase();
-HXDLIN( 311)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 311)			{
-HXDLIN( 311)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 311)				if (::hx::IsNull( store1 )) {
-HXLINE(2192)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 335)			void** ptr1 = (void**)arr->getBase();
+HXDLIN( 335)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 335)			{
+HXDLIN( 335)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 335)				if (::hx::IsNull( store1 )) {
+HXLINE(2243)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),arr));
-HXLINE( 311)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+HXLINE( 335)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
             				}
             				else {
-HXDLIN( 311)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 335)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXDLIN( 311)			_hx_tmp->set_ref(( (const char**)(ptr1) ));
+HXDLIN( 335)			_hx_tmp->set_ref(( (const char**)(ptr1) ));
             		}
-HXDLIN( 311)		return ( (size_t)(out->length) );
+HXDLIN( 335)		return ( (size_t)(out->length) );
             	}
 
 
@@ -619,55 +619,55 @@ HXDLIN(  92)		return result;
 HX_DEFINE_DYNAMIC_FUNC0(ProfileItem_obj,languageTag,return )
 
 size_t ProfileItem_obj::languageTag__fromC(const char*** outPtr){
-            	HX_STACKFRAME(&_hx_pos_fe69ecc873f78d42_311_languageTag__fromC)
-HXDLIN( 311)		::Array< ::String > out = this->languageTag();
-HXDLIN( 311)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 311)			::cpp::Pointer< const char** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 311)			::Array< size_t > arr = ::Array_obj< size_t >::__new(out->length);
-HXDLIN( 311)			{
-HXDLIN( 311)				int _g_current = 0;
-HXDLIN( 311)				::Array< ::String > _g_array = out;
-HXDLIN( 311)				while((_g_current < _g_array->length)){
-HXDLIN( 311)					::String _g_value = _g_array->__get(_g_current);
-HXDLIN( 311)					_g_current = (_g_current + 1);
-HXDLIN( 311)					::String el = _g_value;
-HXDLIN( 311)					{
-HXDLIN( 311)						const char* cStrPtr = el.utf8_str();
-HXDLIN( 311)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
-HXDLIN( 311)						{
-HXDLIN( 311)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 311)							if (::hx::IsNull( store )) {
-HXLINE(2192)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_fe69ecc873f78d42_335_languageTag__fromC)
+HXDLIN( 335)		::Array< ::String > out = this->languageTag();
+HXDLIN( 335)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 335)			::cpp::Pointer< const char** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 335)			::Array< size_t > arr = ::Array_obj< size_t >::__new(out->length);
+HXDLIN( 335)			{
+HXDLIN( 335)				int _g_current = 0;
+HXDLIN( 335)				::Array< ::String > _g_array = out;
+HXDLIN( 335)				while((_g_current < _g_array->length)){
+HXDLIN( 335)					::String _g_value = _g_array->__get(_g_current);
+HXDLIN( 335)					_g_current = (_g_current + 1);
+HXDLIN( 335)					::String el = _g_value;
+HXDLIN( 335)					{
+HXDLIN( 335)						const char* cStrPtr = el.utf8_str();
+HXDLIN( 335)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
+HXDLIN( 335)						{
+HXDLIN( 335)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 335)							if (::hx::IsNull( store )) {
+HXLINE(2243)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
             									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             									->setFixed(1,HX_("value",71,7f,b8,31),el));
-HXLINE( 311)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXLINE( 335)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             							}
             							else {
-HXDLIN( 311)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 335)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             							}
             						}
-HXDLIN( 311)						const char* ptr = cStrPtr;
-HXDLIN( 311)						arr[(_g_current - 1)] = reinterpret_cast<size_t>(ptr);
+HXDLIN( 335)						const char* ptr = cStrPtr;
+HXDLIN( 335)						arr[(_g_current - 1)] = reinterpret_cast<size_t>(ptr);
             					}
             				}
             			}
-HXDLIN( 311)			void** ptr1 = (void**)arr->getBase();
-HXDLIN( 311)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 311)			{
-HXDLIN( 311)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 311)				if (::hx::IsNull( store1 )) {
-HXLINE(2192)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 335)			void** ptr1 = (void**)arr->getBase();
+HXDLIN( 335)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 335)			{
+HXDLIN( 335)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 335)				if (::hx::IsNull( store1 )) {
+HXLINE(2243)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),arr));
-HXLINE( 311)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+HXLINE( 335)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
             				}
             				else {
-HXDLIN( 311)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 335)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXDLIN( 311)			_hx_tmp->set_ref(( (const char**)(ptr1) ));
+HXDLIN( 335)			_hx_tmp->set_ref(( (const char**)(ptr1) ));
             		}
-HXDLIN( 311)		return ( (size_t)(out->length) );
+HXDLIN( 335)		return ( (size_t)(out->length) );
             	}
 
 
diff --git a/Sources/c_borogove/src/borogove/Reaction.cpp b/Sources/c_borogove/src/borogove/Reaction.cpp
index e13e488..bd5ad0b 100644
--- a/Sources/c_borogove/src/borogove/Reaction.cpp
+++ b/Sources/c_borogove/src/borogove/Reaction.cpp
@@ -9,9 +9,9 @@
 #endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_4535f3ba2f7d91d5_35_new,"borogove.Reaction","new",0xd991faa8,"borogove.Reaction.new","borogove/Reaction.hx",35,0xa2017f67)
-HX_LOCAL_STACK_FRAME(_hx_pos_88fddae410342e60_423_senderId__fromC,"borogove.Reaction","senderId__fromC",0xbc4185d1,"borogove.Reaction.senderId__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_88fddae410342e60_423_timestamp__fromC,"borogove.Reaction","timestamp__fromC",0xbffa8b1b,"borogove.Reaction.timestamp__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_88fddae410342e60_423_key__fromC,"borogove.Reaction","key__fromC",0x598e1772,"borogove.Reaction.key__fromC","HaxeCBridge.hx",423,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_88fddae410342e60_450_senderId__fromC,"borogove.Reaction","senderId__fromC",0xbc4185d1,"borogove.Reaction.senderId__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_88fddae410342e60_450_timestamp__fromC,"borogove.Reaction","timestamp__fromC",0xbffa8b1b,"borogove.Reaction.timestamp__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_88fddae410342e60_450_key__fromC,"borogove.Reaction","key__fromC",0x598e1772,"borogove.Reaction.key__fromC","HaxeCBridge.hx",450,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_4535f3ba2f7d91d5_68_render,"borogove.Reaction","render",0xf938de0e,"borogove.Reaction.render","borogove/Reaction.hx",68,0xa2017f67)
 HX_LOCAL_STACK_FRAME(_hx_pos_4535f3ba2f7d91d5_50_unicode,"borogove.Reaction","unicode",0x4cdd7f65,"borogove.Reaction.unicode","borogove/Reaction.hx",50,0xa2017f67)
 HX_LOCAL_STACK_FRAME(_hx_pos_4535f3ba2f7d91d5_15_boot,"borogove.Reaction","boot",0x7e4258ea,"borogove.Reaction.boot","borogove/Reaction.hx",15,0xa2017f67)
@@ -49,24 +49,24 @@ bool Reaction_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 ::String Reaction_obj::senderId__fromC(){
-            	HX_STACKFRAME(&_hx_pos_88fddae410342e60_423_senderId__fromC)
-HXDLIN( 423)		return this->senderId;
+            	HX_STACKFRAME(&_hx_pos_88fddae410342e60_450_senderId__fromC)
+HXDLIN( 450)		return this->senderId;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Reaction_obj,senderId__fromC,return )
 
 ::String Reaction_obj::timestamp__fromC(){
-            	HX_STACKFRAME(&_hx_pos_88fddae410342e60_423_timestamp__fromC)
-HXDLIN( 423)		return this->timestamp;
+            	HX_STACKFRAME(&_hx_pos_88fddae410342e60_450_timestamp__fromC)
+HXDLIN( 450)		return this->timestamp;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Reaction_obj,timestamp__fromC,return )
 
 ::String Reaction_obj::key__fromC(){
-            	HX_STACKFRAME(&_hx_pos_88fddae410342e60_423_key__fromC)
-HXDLIN( 423)		return this->key;
+            	HX_STACKFRAME(&_hx_pos_88fddae410342e60_450_key__fromC)
+HXDLIN( 450)		return this->key;
             	}
 
 
diff --git a/Sources/c_borogove/src/borogove/SerializedChat.cpp b/Sources/c_borogove/src/borogove/SerializedChat.cpp
index 6b69502..e8f6d01 100644
--- a/Sources/c_borogove/src/borogove/SerializedChat.cpp
+++ b/Sources/c_borogove/src/borogove/SerializedChat.cpp
@@ -44,52 +44,52 @@
 #include <haxe/ds/StringMap.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_10d675922f29bad2_1945_new,"borogove.SerializedChat","new",0x812203bb,"borogove.SerializedChat.new","borogove/Chat.hx",1945,0x1763ae98)
-HX_LOCAL_STACK_FRAME(_hx_pos_10d675922f29bad2_1964_toChat,"borogove.SerializedChat","toChat",0xdd72e178,"borogove.SerializedChat.toChat","borogove/Chat.hx",1964,0x1763ae98)
+HX_DEFINE_STACK_FRAME(_hx_pos_10d675922f29bad2_1967_new,"borogove.SerializedChat","new",0x812203bb,"borogove.SerializedChat.new","borogove/Chat.hx",1967,0x1763ae98)
+HX_LOCAL_STACK_FRAME(_hx_pos_10d675922f29bad2_1986_toChat,"borogove.SerializedChat","toChat",0xdd72e178,"borogove.SerializedChat.toChat","borogove/Chat.hx",1986,0x1763ae98)
 static const ::String _hx_array_data_f7d90a49_3[] = {
 	HX_("http://jabber.org/protocol/muc",07,b2,7f,c6),
 };
 namespace borogove{
 
 void SerializedChat_obj::__construct(::String chatId,bool trusted,::Array< unsigned char > avatarSha1, ::haxe::ds::StringMap presence,::String displayName, ::Dynamic uiState, ::Dynamic isBlocked,::String extensions,::String readUpToId,::String readUpToBy, ::Dynamic notificationsFiltered,bool notifyMention,bool notifyReply, ::borogove::Caps disco,::Array< int > omemoContactDeviceIDs,::String klass){
-            	HX_STACKFRAME(&_hx_pos_10d675922f29bad2_1945_new)
-HXLINE(1946)		this->chatId = chatId;
-HXLINE(1947)		this->trusted = trusted;
-HXLINE(1948)		this->avatarSha1 = avatarSha1;
-HXLINE(1949)		this->presence = presence;
-HXLINE(1950)		this->displayName = displayName;
-HXLINE(1951)		int _hx_tmp;
-HXDLIN(1951)		if (::hx::IsNotNull( uiState )) {
-HXLINE(1951)			_hx_tmp = ( (int)(uiState) );
+            	HX_STACKFRAME(&_hx_pos_10d675922f29bad2_1967_new)
+HXLINE(1968)		this->chatId = chatId;
+HXLINE(1969)		this->trusted = trusted;
+HXLINE(1970)		this->avatarSha1 = avatarSha1;
+HXLINE(1971)		this->presence = presence;
+HXLINE(1972)		this->displayName = displayName;
+HXLINE(1973)		int _hx_tmp;
+HXDLIN(1973)		if (::hx::IsNotNull( uiState )) {
+HXLINE(1973)			_hx_tmp = ( (int)(uiState) );
             		}
             		else {
-HXLINE(1951)			_hx_tmp = 1;
+HXLINE(1973)			_hx_tmp = 1;
             		}
-HXDLIN(1951)		this->uiState = _hx_tmp;
-HXLINE(1952)		bool _hx_tmp1;
-HXDLIN(1952)		if (::hx::IsNotNull( isBlocked )) {
-HXLINE(1952)			_hx_tmp1 = ( (bool)(isBlocked) );
+HXDLIN(1973)		this->uiState = _hx_tmp;
+HXLINE(1974)		bool _hx_tmp1;
+HXDLIN(1974)		if (::hx::IsNotNull( isBlocked )) {
+HXLINE(1974)			_hx_tmp1 = ( (bool)(isBlocked) );
             		}
             		else {
-HXLINE(1952)			_hx_tmp1 = false;
+HXLINE(1974)			_hx_tmp1 = false;
             		}
-HXDLIN(1952)		this->isBlocked = _hx_tmp1;
-HXLINE(1953)		::String _hx_tmp2;
-HXDLIN(1953)		if (::hx::IsNotNull( extensions )) {
-HXLINE(1953)			_hx_tmp2 = extensions;
+HXDLIN(1974)		this->isBlocked = _hx_tmp1;
+HXLINE(1975)		::String _hx_tmp2;
+HXDLIN(1975)		if (::hx::IsNotNull( extensions )) {
+HXLINE(1975)			_hx_tmp2 = extensions;
             		}
             		else {
-HXLINE(1953)			_hx_tmp2 = HX_("<extensions xmlns='urn:app:bookmarks:1' />",84,43,42,a9);
+HXLINE(1975)			_hx_tmp2 = HX_("<extensions xmlns='urn:app:bookmarks:1' />",84,43,42,a9);
             		}
-HXDLIN(1953)		this->extensions = _hx_tmp2;
-HXLINE(1954)		this->readUpToId = readUpToId;
-HXLINE(1955)		this->readUpToBy = readUpToBy;
-HXLINE(1956)		this->notificationsFiltered = notificationsFiltered;
-HXLINE(1957)		this->notifyMention = notifyMention;
-HXLINE(1958)		this->notifyReply = notifyReply;
-HXLINE(1959)		this->disco = disco;
-HXLINE(1960)		this->omemoContactDeviceIDs = omemoContactDeviceIDs;
-HXLINE(1961)		this->klass = klass;
+HXDLIN(1975)		this->extensions = _hx_tmp2;
+HXLINE(1976)		this->readUpToId = readUpToId;
+HXLINE(1977)		this->readUpToBy = readUpToBy;
+HXLINE(1978)		this->notificationsFiltered = notificationsFiltered;
+HXLINE(1979)		this->notifyMention = notifyMention;
+HXLINE(1980)		this->notifyReply = notifyReply;
+HXLINE(1981)		this->disco = disco;
+HXLINE(1982)		this->omemoContactDeviceIDs = omemoContactDeviceIDs;
+HXLINE(1983)		this->klass = klass;
             	}
 
 Dynamic SerializedChat_obj::__CreateEmpty() { return new SerializedChat_obj; }
@@ -108,74 +108,74 @@ bool SerializedChat_obj::_hx_isInstanceOf(int inClassId) {
 }
 
  ::borogove::Chat SerializedChat_obj::toChat( ::borogove::Client client, ::borogove::GenericStream stream,::Dynamic persistence){
-            	HX_GC_STACKFRAME(&_hx_pos_10d675922f29bad2_1964_toChat)
-HXLINE(1965)		 ::borogove::Stanza extensionsStanza = ::borogove::Stanza_obj::parse(this->extensions);
-HXLINE(1966)		bool filterN;
-HXDLIN(1966)		 ::Dynamic tmp = this->notificationsFiltered;
-HXDLIN(1966)		if (::hx::IsNotNull( tmp )) {
-HXLINE(1966)			filterN = ( (bool)(tmp) );
+            	HX_GC_STACKFRAME(&_hx_pos_10d675922f29bad2_1986_toChat)
+HXLINE(1987)		 ::borogove::Stanza extensionsStanza = ::borogove::Stanza_obj::parse(this->extensions);
+HXLINE(1988)		bool filterN;
+HXDLIN(1988)		 ::Dynamic tmp = this->notificationsFiltered;
+HXDLIN(1988)		if (::hx::IsNotNull( tmp )) {
+HXLINE(1988)			filterN = ( (bool)(tmp) );
             		}
             		else {
-HXLINE(1966)			filterN = false;
+HXLINE(1988)			filterN = false;
             		}
-HXLINE(1967)		bool mention = this->notifyMention;
-HXLINE(1969)		 ::borogove::Chat chat;
-HXDLIN(1969)		if ((this->klass == HX_("DirectChat",c1,22,a3,05))) {
-HXLINE(1969)			chat =  ::borogove::DirectChat_obj::__alloc( HX_CTX ,client,stream,persistence,this->chatId,this->uiState,this->isBlocked,extensionsStanza,this->readUpToId,this->readUpToBy,this->omemoContactDeviceIDs);
+HXLINE(1989)		bool mention = this->notifyMention;
+HXLINE(1991)		 ::borogove::Chat chat;
+HXDLIN(1991)		if ((this->klass == HX_("DirectChat",c1,22,a3,05))) {
+HXLINE(1991)			chat =  ::borogove::DirectChat_obj::__alloc( HX_CTX ,client,stream,persistence,this->chatId,this->uiState,this->isBlocked,extensionsStanza,this->readUpToId,this->readUpToBy,this->omemoContactDeviceIDs);
             		}
             		else {
-HXLINE(1971)			if ((this->klass == HX_("Channel",a3,28,23,9a))) {
-HXLINE(1972)				 ::borogove::Channel channel =  ::borogove::Channel_obj::__alloc( HX_CTX ,client,stream,persistence,this->chatId,this->uiState,this->isBlocked,extensionsStanza,this->readUpToId,this->readUpToBy,null());
-HXLINE(1973)				 ::borogove::Caps tmp1 = this->disco;
-HXDLIN(1973)				 ::borogove::Caps chat1;
-HXDLIN(1973)				if (::hx::IsNotNull( tmp1 )) {
-HXLINE(1973)					chat1 = tmp1;
+HXLINE(1993)			if ((this->klass == HX_("Channel",a3,28,23,9a))) {
+HXLINE(1994)				 ::borogove::Channel channel =  ::borogove::Channel_obj::__alloc( HX_CTX ,client,stream,persistence,this->chatId,this->uiState,this->isBlocked,extensionsStanza,this->readUpToId,this->readUpToBy,null());
+HXLINE(1995)				 ::borogove::Caps tmp1 = this->disco;
+HXDLIN(1995)				 ::borogove::Caps chat1;
+HXDLIN(1995)				if (::hx::IsNotNull( tmp1 )) {
+HXLINE(1995)					chat1 = tmp1;
             				}
             				else {
-HXLINE(1973)					chat1 =  ::borogove::Caps_obj::__alloc( HX_CTX ,HX_("",00,00,00,00),::Array_obj< ::Dynamic>::__new(0),::Array_obj< ::String >::fromData( _hx_array_data_f7d90a49_3,1),::Array_obj< ::Dynamic>::__new(0),null());
+HXLINE(1995)					chat1 =  ::borogove::Caps_obj::__alloc( HX_CTX ,HX_("",00,00,00,00),::Array_obj< ::Dynamic>::__new(0),::Array_obj< ::String >::fromData( _hx_array_data_f7d90a49_3,1),::Array_obj< ::Dynamic>::__new(0),null());
             				}
-HXDLIN(1973)				channel->disco = chat1;
-HXLINE(1974)				bool chat2;
-HXDLIN(1974)				if (::hx::IsNull( this->notificationsFiltered )) {
-HXLINE(1974)					chat2 = !(channel->isPrivate());
+HXDLIN(1995)				channel->disco = chat1;
+HXLINE(1996)				bool chat2;
+HXDLIN(1996)				if (::hx::IsNull( this->notificationsFiltered )) {
+HXLINE(1996)					chat2 = !(channel->isPrivate());
             				}
             				else {
-HXLINE(1974)					chat2 = false;
+HXLINE(1996)					chat2 = false;
             				}
-HXDLIN(1974)				if (chat2) {
-HXLINE(1975)					filterN = true;
-HXDLIN(1975)					mention = true;
+HXDLIN(1996)				if (chat2) {
+HXLINE(1997)					filterN = true;
+HXDLIN(1997)					mention = true;
             				}
-HXLINE(1969)				chat = channel;
+HXLINE(1991)				chat = channel;
             			}
             			else {
-HXLINE(1979)				HX_STACK_DO_THROW((((HX_("Unknown class of ",0b,cb,7f,f2) + this->chatId) + HX_(": ",a6,32,00,00)) + this->klass));
+HXLINE(2001)				HX_STACK_DO_THROW((((HX_("Unknown class of ",0b,cb,7f,f2) + this->chatId) + HX_(": ",a6,32,00,00)) + this->klass));
             			}
             		}
-HXLINE(1981)		chat->setNotificationsInternal(filterN,mention,this->notifyReply);
-HXLINE(1982)		bool _hx_tmp;
-HXDLIN(1982)		if (::hx::IsNotNull( this->displayName )) {
-HXLINE(1982)			_hx_tmp = (this->displayName != HX_("",00,00,00,00));
+HXLINE(2003)		chat->setNotificationsInternal(filterN,mention,this->notifyReply);
+HXLINE(2004)		bool _hx_tmp;
+HXDLIN(2004)		if (::hx::IsNotNull( this->displayName )) {
+HXLINE(2004)			_hx_tmp = (this->displayName != HX_("",00,00,00,00));
             		}
             		else {
-HXLINE(1982)			_hx_tmp = false;
+HXLINE(2004)			_hx_tmp = false;
             		}
-HXDLIN(1982)		if (_hx_tmp) {
-HXLINE(1982)			chat->displayName = this->displayName;
+HXDLIN(2004)		if (_hx_tmp) {
+HXLINE(2004)			chat->displayName = this->displayName;
             		}
-HXLINE(1983)		if (::hx::IsNotNull( this->avatarSha1 )) {
-HXLINE(1983)			chat->setAvatarSha1(this->avatarSha1);
+HXLINE(2005)		if (::hx::IsNotNull( this->avatarSha1 )) {
+HXLINE(2005)			chat->setAvatarSha1(this->avatarSha1);
             		}
-HXLINE(1984)		chat->setTrusted(this->trusted);
-HXLINE(1985)		{
-HXLINE(1985)			::Dynamic this1 = this->presence;
-HXDLIN(1985)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(this1);
-HXDLIN(1985)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE(1985)				::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXLINE(1986)				chat->setPresence(key,( ( ::borogove::Presence)(::haxe::IMap_obj::get(this1,key)) ));
+HXLINE(2006)		chat->setTrusted(this->trusted);
+HXLINE(2007)		{
+HXLINE(2007)			::Dynamic this1 = this->presence;
+HXDLIN(2007)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(this1);
+HXDLIN(2007)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE(2007)				::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXLINE(2008)				chat->setPresence(key,( ( ::borogove::Presence)(::haxe::IMap_obj::get(this1,key)) ));
             			}
             		}
-HXLINE(1988)		return chat;
+HXLINE(2010)		return chat;
             	}
 
 
diff --git a/Sources/c_borogove/src/borogove/calls/AudioFormat.cpp b/Sources/c_borogove/src/borogove/calls/AudioFormat.cpp
index 28b302e..9d08fbf 100644
--- a/Sources/c_borogove/src/borogove/calls/AudioFormat.cpp
+++ b/Sources/c_borogove/src/borogove/calls/AudioFormat.cpp
@@ -6,8 +6,8 @@
 #endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_9a23c46bf262f096_329_new,"borogove.calls.AudioFormat","new",0x8681a099,"borogove.calls.AudioFormat.new","borogove/calls/PeerConnection.cpp.hx",329,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_6d6c0ff9b6d661fc_423_clockRate__fromC,"borogove.calls.AudioFormat","clockRate__fromC",0x08165e92,"borogove.calls.AudioFormat.clockRate__fromC","HaxeCBridge.hx",423,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_6d6c0ff9b6d661fc_423_channels__fromC,"borogove.calls.AudioFormat","channels__fromC",0x42cc71e2,"borogove.calls.AudioFormat.channels__fromC","HaxeCBridge.hx",423,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_6d6c0ff9b6d661fc_450_clockRate__fromC,"borogove.calls.AudioFormat","clockRate__fromC",0x08165e92,"borogove.calls.AudioFormat.clockRate__fromC","HaxeCBridge.hx",450,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_6d6c0ff9b6d661fc_450_channels__fromC,"borogove.calls.AudioFormat","channels__fromC",0x42cc71e2,"borogove.calls.AudioFormat.channels__fromC","HaxeCBridge.hx",450,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_9a23c46bf262f096_322_boot,"borogove.calls.AudioFormat","boot",0x2303e5d9,"borogove.calls.AudioFormat.boot","borogove/calls/PeerConnection.cpp.hx",322,0x6b4179c1)
 namespace borogove{
 namespace calls{
@@ -36,16 +36,16 @@ bool AudioFormat_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 int AudioFormat_obj::clockRate__fromC(){
-            	HX_STACKFRAME(&_hx_pos_6d6c0ff9b6d661fc_423_clockRate__fromC)
-HXDLIN( 423)		return this->clockRate;
+            	HX_STACKFRAME(&_hx_pos_6d6c0ff9b6d661fc_450_clockRate__fromC)
+HXDLIN( 450)		return this->clockRate;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(AudioFormat_obj,clockRate__fromC,return )
 
 int AudioFormat_obj::channels__fromC(){
-            	HX_STACKFRAME(&_hx_pos_6d6c0ff9b6d661fc_423_channels__fromC)
-HXDLIN( 423)		return this->channels;
+            	HX_STACKFRAME(&_hx_pos_6d6c0ff9b6d661fc_450_channels__fromC)
+HXDLIN( 450)		return this->channels;
             	}
 
 
diff --git a/Sources/c_borogove/src/borogove/calls/IncomingProposedSession.cpp b/Sources/c_borogove/src/borogove/calls/IncomingProposedSession.cpp
index d9d290e..d10412c 100644
--- a/Sources/c_borogove/src/borogove/calls/IncomingProposedSession.cpp
+++ b/Sources/c_borogove/src/borogove/calls/IncomingProposedSession.cpp
@@ -59,36 +59,36 @@
 #include <thenshim/_Promise/Promise_Impl_.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_73_new,"borogove.calls.IncomingProposedSession","new",0x1258db76,"borogove.calls.IncomingProposedSession.new","borogove/calls/Session.hx",73,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_93_ring,"borogove.calls.IncomingProposedSession","ring",0xfe0f07da,"borogove.calls.IncomingProposedSession.ring","borogove/calls/Session.hx",93,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_87_ring,"borogove.calls.IncomingProposedSession","ring",0xfe0f07da,"borogove.calls.IncomingProposedSession.ring","borogove/calls/Session.hx",87,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_105_hangup,"borogove.calls.IncomingProposedSession","hangup",0x4afe58f7,"borogove.calls.IncomingProposedSession.hangup","borogove/calls/Session.hx",105,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_98_hangup,"borogove.calls.IncomingProposedSession","hangup",0x4afe58f7,"borogove.calls.IncomingProposedSession.hangup","borogove/calls/Session.hx",98,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_113_retract,"borogove.calls.IncomingProposedSession","retract",0x08713017,"borogove.calls.IncomingProposedSession.retract","borogove/calls/Session.hx",113,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_117_terminate,"borogove.calls.IncomingProposedSession","terminate",0xe089b1f7,"borogove.calls.IncomingProposedSession.terminate","borogove/calls/Session.hx",117,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_121_contentAdd,"borogove.calls.IncomingProposedSession","contentAdd",0xc1b58a12,"borogove.calls.IncomingProposedSession.contentAdd","borogove/calls/Session.hx",121,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_125_contentAccept,"borogove.calls.IncomingProposedSession","contentAccept",0x2cffc7b7,"borogove.calls.IncomingProposedSession.contentAccept","borogove/calls/Session.hx",125,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_128_transportInfo,"borogove.calls.IncomingProposedSession","transportInfo",0x02cd3f4d,"borogove.calls.IncomingProposedSession.transportInfo","borogove/calls/Session.hx",128,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_139_accept,"borogove.calls.IncomingProposedSession","accept",0x9e0519b2,"borogove.calls.IncomingProposedSession.accept","borogove/calls/Session.hx",139,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_133_accept,"borogove.calls.IncomingProposedSession","accept",0x9e0519b2,"borogove.calls.IncomingProposedSession.accept","borogove/calls/Session.hx",133,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_150_initiate,"borogove.calls.IncomingProposedSession","initiate",0x943c6f83,"borogove.calls.IncomingProposedSession.initiate","borogove/calls/Session.hx",150,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_162_addMedia,"borogove.calls.IncomingProposedSession","addMedia",0xb3c6302d,"borogove.calls.IncomingProposedSession.addMedia","borogove/calls/Session.hx",162,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_167_callStatus,"borogove.calls.IncomingProposedSession","callStatus",0xaf03e21a,"borogove.calls.IncomingProposedSession.callStatus","borogove/calls/Session.hx",167,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_172_audioTracks,"borogove.calls.IncomingProposedSession","audioTracks",0xb3746e14,"borogove.calls.IncomingProposedSession.audioTracks","borogove/calls/Session.hx",172,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_177_videoTracks,"borogove.calls.IncomingProposedSession","videoTracks",0x5d6bd379,"borogove.calls.IncomingProposedSession.videoTracks","borogove/calls/Session.hx",177,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_182_dtmf,"borogove.calls.IncomingProposedSession","dtmf",0xf4d66313,"borogove.calls.IncomingProposedSession.dtmf","borogove/calls/Session.hx",182,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_186_get_sid,"borogove.calls.IncomingProposedSession","get_sid",0x3283b5bb,"borogove.calls.IncomingProposedSession.get_sid","borogove/calls/Session.hx",186,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_190_get_chatId,"borogove.calls.IncomingProposedSession","get_chatId",0x25d69846,"borogove.calls.IncomingProposedSession.get_chatId","borogove/calls/Session.hx",190,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_73_boot,"borogove.calls.IncomingProposedSession","boot",0xf3802c5c,"borogove.calls.IncomingProposedSession.boot","borogove/calls/Session.hx",73,0x33a79030)
+HX_DEFINE_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_74_new,"borogove.calls.IncomingProposedSession","new",0x1258db76,"borogove.calls.IncomingProposedSession.new","borogove/calls/Session.hx",74,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_94_ring,"borogove.calls.IncomingProposedSession","ring",0xfe0f07da,"borogove.calls.IncomingProposedSession.ring","borogove/calls/Session.hx",94,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_88_ring,"borogove.calls.IncomingProposedSession","ring",0xfe0f07da,"borogove.calls.IncomingProposedSession.ring","borogove/calls/Session.hx",88,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_106_hangup,"borogove.calls.IncomingProposedSession","hangup",0x4afe58f7,"borogove.calls.IncomingProposedSession.hangup","borogove/calls/Session.hx",106,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_99_hangup,"borogove.calls.IncomingProposedSession","hangup",0x4afe58f7,"borogove.calls.IncomingProposedSession.hangup","borogove/calls/Session.hx",99,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_114_retract,"borogove.calls.IncomingProposedSession","retract",0x08713017,"borogove.calls.IncomingProposedSession.retract","borogove/calls/Session.hx",114,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_118_terminate,"borogove.calls.IncomingProposedSession","terminate",0xe089b1f7,"borogove.calls.IncomingProposedSession.terminate","borogove/calls/Session.hx",118,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_122_contentAdd,"borogove.calls.IncomingProposedSession","contentAdd",0xc1b58a12,"borogove.calls.IncomingProposedSession.contentAdd","borogove/calls/Session.hx",122,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_126_contentAccept,"borogove.calls.IncomingProposedSession","contentAccept",0x2cffc7b7,"borogove.calls.IncomingProposedSession.contentAccept","borogove/calls/Session.hx",126,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_129_transportInfo,"borogove.calls.IncomingProposedSession","transportInfo",0x02cd3f4d,"borogove.calls.IncomingProposedSession.transportInfo","borogove/calls/Session.hx",129,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_140_accept,"borogove.calls.IncomingProposedSession","accept",0x9e0519b2,"borogove.calls.IncomingProposedSession.accept","borogove/calls/Session.hx",140,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_134_accept,"borogove.calls.IncomingProposedSession","accept",0x9e0519b2,"borogove.calls.IncomingProposedSession.accept","borogove/calls/Session.hx",134,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_151_initiate,"borogove.calls.IncomingProposedSession","initiate",0x943c6f83,"borogove.calls.IncomingProposedSession.initiate","borogove/calls/Session.hx",151,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_163_addMedia,"borogove.calls.IncomingProposedSession","addMedia",0xb3c6302d,"borogove.calls.IncomingProposedSession.addMedia","borogove/calls/Session.hx",163,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_168_callStatus,"borogove.calls.IncomingProposedSession","callStatus",0xaf03e21a,"borogove.calls.IncomingProposedSession.callStatus","borogove/calls/Session.hx",168,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_173_audioTracks,"borogove.calls.IncomingProposedSession","audioTracks",0xb3746e14,"borogove.calls.IncomingProposedSession.audioTracks","borogove/calls/Session.hx",173,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_178_videoTracks,"borogove.calls.IncomingProposedSession","videoTracks",0x5d6bd379,"borogove.calls.IncomingProposedSession.videoTracks","borogove/calls/Session.hx",178,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_183_dtmf,"borogove.calls.IncomingProposedSession","dtmf",0xf4d66313,"borogove.calls.IncomingProposedSession.dtmf","borogove/calls/Session.hx",183,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_187_get_sid,"borogove.calls.IncomingProposedSession","get_sid",0x3283b5bb,"borogove.calls.IncomingProposedSession.get_sid","borogove/calls/Session.hx",187,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_191_get_chatId,"borogove.calls.IncomingProposedSession","get_chatId",0x25d69846,"borogove.calls.IncomingProposedSession.get_chatId","borogove/calls/Session.hx",191,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_8bd69e9bff10ec02_74_boot,"borogove.calls.IncomingProposedSession","boot",0xf3802c5c,"borogove.calls.IncomingProposedSession.boot","borogove/calls/Session.hx",74,0x33a79030)
 namespace borogove{
 namespace calls{
 
 void IncomingProposedSession_obj::__construct( ::borogove::Client client, ::borogove::JID from,::String sid){
-            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_73_new)
-HXLINE(  79)		this->accepted = false;
-HXLINE(  82)		this->client = client;
-HXLINE(  83)		this->from = from;
-HXLINE(  84)		this->_sid = sid;
+            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_74_new)
+HXLINE(  80)		this->accepted = false;
+HXLINE(  83)		this->client = client;
+HXLINE(  84)		this->from = from;
+HXLINE(  85)		this->_sid = sid;
             	}
 
 Dynamic IncomingProposedSession_obj::__CreateEmpty() { return new IncomingProposedSession_obj; }
@@ -138,19 +138,19 @@ void *IncomingProposedSession_obj::_hx_getInterface(int inHash) {
 void IncomingProposedSession_obj::ring(){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::calls::IncomingProposedSession,_gthis) HXARGC(1)
             		void _hx_run(::Array< ::Dynamic> stored){
-            			HX_GC_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_93_ring)
-HXLINE(  93)			_gthis->client->notifyMessageHandlers(stored->__get(0).StaticCast<  ::borogove::ChatMessage >(),1);
+            			HX_GC_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_94_ring)
+HXLINE(  94)			_gthis->client->notifyMessageHandlers(stored->__get(0).StaticCast<  ::borogove::ChatMessage >(),1);
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_87_ring)
-HXDLIN(  87)		 ::borogove::calls::IncomingProposedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(  90)		 ::borogove::Stanza event =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("ringing",32,9b,80,1a), ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_GC_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_88_ring)
+HXDLIN(  88)		 ::borogove::calls::IncomingProposedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(  91)		 ::borogove::Stanza event =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("ringing",32,9b,80,1a), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("id",db,5b,00,00),this->get_sid())
             			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07))));
-HXLINE(  91)		 ::borogove::ChatMessage msg = ::borogove::calls::_Session::Session_Fields__obj::mkCallMessage(this->from,this->client->jid,event);
-HXLINE(  92)		::thenshim::_Promise::Promise_Impl__obj::then(this->client->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,msg)), ::Dynamic(new _hx_Closure_0(_gthis)),null());
-HXLINE(  95)		this->client->trigger(HX_("call/ring",01,8e,91,54), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(  92)		 ::borogove::ChatMessage msg = ::borogove::calls::_Session::Session_Fields__obj::mkCallMessage(this->from,this->client->jid,event);
+HXLINE(  93)		::thenshim::_Promise::Promise_Impl__obj::then(this->client->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,msg)), ::Dynamic(new _hx_Closure_0(_gthis)),null());
+HXLINE(  96)		this->client->trigger(HX_("call/ring",01,8e,91,54), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("session",56,17,98,93),::hx::ObjectPtr<OBJ_>(this))));
             	}
 
@@ -160,29 +160,29 @@ HX_DEFINE_DYNAMIC_FUNC0(IncomingProposedSession_obj,ring,(void))
 void IncomingProposedSession_obj::hangup(){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::calls::IncomingProposedSession,_gthis) HXARGC(1)
             		void _hx_run(::Array< ::Dynamic> stored){
-            			HX_GC_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_105_hangup)
-HXLINE( 105)			_gthis->client->notifyMessageHandlers(stored->__get(0).StaticCast<  ::borogove::ChatMessage >(),1);
+            			HX_GC_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_106_hangup)
+HXLINE( 106)			_gthis->client->notifyMessageHandlers(stored->__get(0).StaticCast<  ::borogove::ChatMessage >(),1);
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_98_hangup)
-HXDLIN(  98)		 ::borogove::calls::IncomingProposedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 102)		 ::borogove::Stanza event =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("reject",5f,51,85,02), ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_GC_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_99_hangup)
+HXDLIN(  99)		 ::borogove::calls::IncomingProposedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 103)		 ::borogove::Stanza event =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("reject",5f,51,85,02), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("id",db,5b,00,00),this->get_sid())
             			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07))));
-HXLINE( 103)		 ::borogove::ChatMessage msg = ::borogove::calls::_Session::Session_Fields__obj::mkCallMessage(this->from,this->client->jid,event);
-HXLINE( 104)		::thenshim::_Promise::Promise_Impl__obj::then(this->client->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,msg)), ::Dynamic(new _hx_Closure_0(_gthis)),null());
-HXLINE( 107)		{
-HXLINE( 107)			 ::borogove::Client tmp = this->client;
-HXDLIN( 107)			 ::borogove::Chat tmp1 = tmp->getChat(this->get_chatId());
-HXDLIN( 107)			if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 107)				::Dynamic this1 = tmp1->jingleSessions;
-HXDLIN( 107)				( ( ::haxe::ds::StringMap)(this1) )->remove(this->get_sid());
+HXLINE( 104)		 ::borogove::ChatMessage msg = ::borogove::calls::_Session::Session_Fields__obj::mkCallMessage(this->from,this->client->jid,event);
+HXLINE( 105)		::thenshim::_Promise::Promise_Impl__obj::then(this->client->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,msg)), ::Dynamic(new _hx_Closure_0(_gthis)),null());
+HXLINE( 108)		{
+HXLINE( 108)			 ::borogove::Client tmp = this->client;
+HXDLIN( 108)			 ::borogove::Chat tmp1 = tmp->getChat(this->get_chatId());
+HXDLIN( 108)			if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 108)				::Dynamic this1 = tmp1->jingleSessions;
+HXDLIN( 108)				( ( ::haxe::ds::StringMap)(this1) )->remove(this->get_sid());
             			}
             		}
-HXLINE( 108)		 ::borogove::Client _hx_tmp = this->client;
-HXDLIN( 108)		::String _hx_tmp1 = this->get_chatId();
-HXDLIN( 108)		_hx_tmp->trigger(HX_("call/retract",50,bc,8d,db), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 109)		 ::borogove::Client _hx_tmp = this->client;
+HXDLIN( 109)		::String _hx_tmp1 = this->get_chatId();
+HXDLIN( 109)		_hx_tmp->trigger(HX_("call/retract",50,bc,8d,db), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("chatId",d3,04,77,b7),_hx_tmp1)
             			->setFixed(1,HX_("sid",0e,9f,57,00),this->get_sid())));
             	}
@@ -191,10 +191,10 @@ HXDLIN( 108)		_hx_tmp->trigger(HX_("call/retract",50,bc,8d,db), ::Dynamic(::hx::
 HX_DEFINE_DYNAMIC_FUNC0(IncomingProposedSession_obj,hangup,(void))
 
 void IncomingProposedSession_obj::retract(){
-            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_113_retract)
-HXDLIN( 113)		 ::borogove::Client _hx_tmp = this->client;
-HXDLIN( 113)		::String _hx_tmp1 = this->get_chatId();
-HXDLIN( 113)		_hx_tmp->trigger(HX_("call/retract",50,bc,8d,db), ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_114_retract)
+HXDLIN( 114)		 ::borogove::Client _hx_tmp = this->client;
+HXDLIN( 114)		::String _hx_tmp1 = this->get_chatId();
+HXDLIN( 114)		_hx_tmp->trigger(HX_("call/retract",50,bc,8d,db), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("chatId",d3,04,77,b7),_hx_tmp1)
             			->setFixed(1,HX_("sid",0e,9f,57,00),this->get_sid())));
             	}
@@ -203,61 +203,61 @@ HXDLIN( 113)		_hx_tmp->trigger(HX_("call/retract",50,bc,8d,db), ::Dynamic(::hx::
 HX_DEFINE_DYNAMIC_FUNC0(IncomingProposedSession_obj,retract,(void))
 
 void IncomingProposedSession_obj::terminate(){
-            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_117_terminate)
-HXDLIN( 117)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
-HXDLIN( 117)		::String _hx_tmp1 = (HX_("Tried to terminate before session-initiate: ",a9,d4,f3,a4) + this->get_sid());
-HXDLIN( 117)		_hx_tmp(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(5)
+            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_118_terminate)
+HXDLIN( 118)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
+HXDLIN( 118)		::String _hx_tmp1 = (HX_("Tried to terminate before session-initiate: ",a9,d4,f3,a4) + this->get_sid());
+HXDLIN( 118)		_hx_tmp(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(5)
             			->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.calls.IncomingProposedSession",84,a8,44,af))
             			->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)))
             			->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("terminate",61,32,d2,fd))
             			->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/calls/Session.hx",30,90,a7,33))
-            			->setFixed(4,HX_("lineNumber",dd,81,22,76),117)));
+            			->setFixed(4,HX_("lineNumber",dd,81,22,76),118)));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(IncomingProposedSession_obj,terminate,(void))
 
 void IncomingProposedSession_obj::contentAdd( ::borogove::Stanza _){
-            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_121_contentAdd)
-HXDLIN( 121)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
-HXDLIN( 121)		::String _hx_tmp1 = (HX_("Got content-add before session-initiate: ",10,d3,fa,8a) + this->get_sid());
-HXDLIN( 121)		_hx_tmp(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(5)
+            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_122_contentAdd)
+HXDLIN( 122)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
+HXDLIN( 122)		::String _hx_tmp1 = (HX_("Got content-add before session-initiate: ",10,d3,fa,8a) + this->get_sid());
+HXDLIN( 122)		_hx_tmp(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(5)
             			->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.calls.IncomingProposedSession",84,a8,44,af))
             			->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)))
             			->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("contentAdd",68,66,dd,43))
             			->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/calls/Session.hx",30,90,a7,33))
-            			->setFixed(4,HX_("lineNumber",dd,81,22,76),121)));
+            			->setFixed(4,HX_("lineNumber",dd,81,22,76),122)));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(IncomingProposedSession_obj,contentAdd,(void))
 
 void IncomingProposedSession_obj::contentAccept( ::borogove::Stanza _){
-            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_125_contentAccept)
-HXDLIN( 125)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
-HXDLIN( 125)		::String _hx_tmp1 = (HX_("Got content-accept before session-initiate: ",47,72,87,71) + this->get_sid());
-HXDLIN( 125)		_hx_tmp(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(5)
+            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_126_contentAccept)
+HXDLIN( 126)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
+HXDLIN( 126)		::String _hx_tmp1 = (HX_("Got content-accept before session-initiate: ",47,72,87,71) + this->get_sid());
+HXDLIN( 126)		_hx_tmp(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(5)
             			->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.calls.IncomingProposedSession",84,a8,44,af))
             			->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)))
             			->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("contentAccept",21,c5,01,e1))
             			->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/calls/Session.hx",30,90,a7,33))
-            			->setFixed(4,HX_("lineNumber",dd,81,22,76),125)));
+            			->setFixed(4,HX_("lineNumber",dd,81,22,76),126)));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(IncomingProposedSession_obj,contentAccept,(void))
 
 ::Dynamic IncomingProposedSession_obj::transportInfo( ::borogove::Stanza _){
-            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_128_transportInfo)
-HXLINE( 129)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
-HXDLIN( 129)		::String _hx_tmp1 = (HX_("Got transport-info before session-initiate: ",bd,bd,9d,08) + this->get_sid());
-HXDLIN( 129)		_hx_tmp(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(5)
+            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_129_transportInfo)
+HXLINE( 130)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
+HXDLIN( 130)		::String _hx_tmp1 = (HX_("Got transport-info before session-initiate: ",bd,bd,9d,08) + this->get_sid());
+HXDLIN( 130)		_hx_tmp(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(5)
             			->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.calls.IncomingProposedSession",84,a8,44,af))
             			->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)))
             			->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("transportInfo",b7,3c,cf,b6))
             			->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/calls/Session.hx",30,90,a7,33))
-            			->setFixed(4,HX_("lineNumber",dd,81,22,76),129)));
-HXLINE( 130)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+            			->setFixed(4,HX_("lineNumber",dd,81,22,76),130)));
+HXLINE( 131)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             	}
 
 
@@ -266,11 +266,11 @@ HX_DEFINE_DYNAMIC_FUNC1(IncomingProposedSession_obj,transportInfo,return )
 void IncomingProposedSession_obj::accept(){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::borogove::calls::IncomingProposedSession,_gthis, ::borogove::Stanza,event, ::borogove::ChatMessage,msg) HXARGC(1)
             		void _hx_run(::Array< ::Dynamic> stored){
-            			HX_GC_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_139_accept)
-HXLINE( 140)			_gthis->client->notifyMessageHandlers(stored->__get(0).StaticCast<  ::borogove::ChatMessage >(),1);
-HXLINE( 141)			 ::borogove::Client _gthis1 = _gthis->client;
-HXLINE( 142)			::String _hx_tmp = _gthis->from->asString();
-HXLINE( 141)			_gthis1->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(3)
+            			HX_GC_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_140_accept)
+HXLINE( 141)			_gthis->client->notifyMessageHandlers(stored->__get(0).StaticCast<  ::borogove::ChatMessage >(),1);
+HXLINE( 142)			 ::borogove::Client _gthis1 = _gthis->client;
+HXLINE( 143)			::String _hx_tmp = _gthis->from->asString();
+HXLINE( 142)			_gthis1->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(3)
             				->setFixed(0,HX_("id",db,5b,00,00),msg->versions->__get(0).StaticCast<  ::borogove::ChatMessage >()->localId)
             				->setFixed(1,HX_("to",7b,65,00,00),_hx_tmp)
             				->setFixed(2,HX_("type",ba,f2,08,4d),HX_("chat",d8,5e,bf,41))))->addChild(event)->tag(HX_("store",e1,13,16,84), ::Dynamic(::hx::Anon_obj::Create(1)
@@ -278,94 +278,94 @@ HXLINE( 141)			_gthis1->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_133_accept)
-HXDLIN( 133)		 ::borogove::calls::IncomingProposedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 134)		if (this->accepted) {
-HXLINE( 134)			return;
+            	HX_GC_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_134_accept)
+HXDLIN( 134)		 ::borogove::calls::IncomingProposedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 135)		if (this->accepted) {
+HXLINE( 135)			return;
             		}
-HXLINE( 135)		this->accepted = true;
-HXLINE( 136)		 ::borogove::Client _hx_tmp = this->client;
-HXDLIN( 136)		_hx_tmp->sendPresence(this->from->asString(),null());
-HXLINE( 137)		 ::borogove::Stanza event =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("proceed",2e,96,4a,f1), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 136)		this->accepted = true;
+HXLINE( 137)		 ::borogove::Client _hx_tmp = this->client;
+HXDLIN( 137)		_hx_tmp->sendPresence(this->from->asString(),null());
+HXLINE( 138)		 ::borogove::Stanza event =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("proceed",2e,96,4a,f1), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("id",db,5b,00,00),this->get_sid())
             			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07))));
-HXLINE( 138)		 ::borogove::ChatMessage msg = ::borogove::calls::_Session::Session_Fields__obj::mkCallMessage(this->from,this->client->jid,event);
-HXLINE( 139)		::thenshim::_Promise::Promise_Impl__obj::then(this->client->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,msg)), ::Dynamic(new _hx_Closure_0(_gthis,event,msg)),null());
+HXLINE( 139)		 ::borogove::ChatMessage msg = ::borogove::calls::_Session::Session_Fields__obj::mkCallMessage(this->from,this->client->jid,event);
+HXLINE( 140)		::thenshim::_Promise::Promise_Impl__obj::then(this->client->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,msg)), ::Dynamic(new _hx_Closure_0(_gthis,event,msg)),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(IncomingProposedSession_obj,accept,(void))
 
  ::borogove::calls::InitiatedSession IncomingProposedSession_obj::initiate( ::borogove::Stanza stanza){
-            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_150_initiate)
-HXLINE( 152)		 ::borogove::calls::InitiatedSession session = ::borogove::calls::InitiatedSession_obj::fromSessionInitiate(this->client,stanza);
-HXLINE( 153)		::String _hx_tmp = session->get_sid();
-HXDLIN( 153)		if ((_hx_tmp != this->get_sid())) {
-HXLINE( 153)			HX_STACK_DO_THROW(HX_("id mismatch",33,05,74,bd));
+            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_151_initiate)
+HXLINE( 153)		 ::borogove::calls::InitiatedSession session = ::borogove::calls::InitiatedSession_obj::fromSessionInitiate(this->client,stanza);
+HXLINE( 154)		::String _hx_tmp = session->get_sid();
+HXDLIN( 154)		if ((_hx_tmp != this->get_sid())) {
+HXLINE( 154)			HX_STACK_DO_THROW(HX_("id mismatch",33,05,74,bd));
             		}
-HXLINE( 154)		if (!(this->accepted)) {
-HXLINE( 154)			HX_STACK_DO_THROW(HX_("trying to initiate unaccepted session",b1,34,34,a4));
+HXLINE( 155)		if (!(this->accepted)) {
+HXLINE( 155)			HX_STACK_DO_THROW(HX_("trying to initiate unaccepted session",b1,34,34,a4));
             		}
-HXLINE( 155)		session->accept();
-HXLINE( 156)		this->client->trigger(HX_("call/updateStatus",6c,f5,e6,ec), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE( 156)		session->accept();
+HXLINE( 157)		this->client->trigger(HX_("call/updateStatus",6c,f5,e6,ec), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("session",56,17,98,93),session)));
-HXLINE( 157)		return session;
+HXLINE( 158)		return session;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(IncomingProposedSession_obj,initiate,return )
 
 void IncomingProposedSession_obj::addMedia(::Array< ::Dynamic> _){
-            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_162_addMedia)
-HXDLIN( 162)		HX_STACK_DO_THROW(HX_("Cannot add media before call starts",aa,0a,79,d5));
+            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_163_addMedia)
+HXDLIN( 163)		HX_STACK_DO_THROW(HX_("Cannot add media before call starts",aa,0a,79,d5));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(IncomingProposedSession_obj,addMedia,(void))
 
 int IncomingProposedSession_obj::callStatus(){
-            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_167_callStatus)
-HXDLIN( 167)		return 1;
+            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_168_callStatus)
+HXDLIN( 168)		return 1;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(IncomingProposedSession_obj,callStatus,return )
 
 ::Array< ::Dynamic> IncomingProposedSession_obj::audioTracks(){
-            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_172_audioTracks)
-HXDLIN( 172)		return ::Array_obj< ::Dynamic>::__new(0);
+            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_173_audioTracks)
+HXDLIN( 173)		return ::Array_obj< ::Dynamic>::__new(0);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(IncomingProposedSession_obj,audioTracks,return )
 
 ::Array< ::Dynamic> IncomingProposedSession_obj::videoTracks(){
-            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_177_videoTracks)
-HXDLIN( 177)		return ::Array_obj< ::Dynamic>::__new(0);
+            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_178_videoTracks)
+HXDLIN( 178)		return ::Array_obj< ::Dynamic>::__new(0);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(IncomingProposedSession_obj,videoTracks,return )
 
  ::borogove::calls::DTMFSender IncomingProposedSession_obj::dtmf(){
-            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_182_dtmf)
-HXDLIN( 182)		return null();
+            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_183_dtmf)
+HXDLIN( 183)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(IncomingProposedSession_obj,dtmf,return )
 
 ::String IncomingProposedSession_obj::get_sid(){
-            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_186_get_sid)
-HXDLIN( 186)		return this->_sid;
+            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_187_get_sid)
+HXDLIN( 187)		return this->_sid;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(IncomingProposedSession_obj,get_sid,return )
 
 ::String IncomingProposedSession_obj::get_chatId(){
-            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_190_get_chatId)
-HXDLIN( 190)		return this->from->asBare()->asString();
+            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_191_get_chatId)
+HXDLIN( 191)		return this->from->asBare()->asString();
             	}
 
 
@@ -554,8 +554,8 @@ void IncomingProposedSession_obj::__register()
 void IncomingProposedSession_obj::__boot()
 {
 {
-            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_73_boot)
-HXDLIN(  73)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_STACKFRAME(&_hx_pos_8bd69e9bff10ec02_74_boot)
+HXDLIN(  74)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(5)
             				->setFixed(0,HX_("videoTracks",63,c2,24,be), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
diff --git a/Sources/c_borogove/src/borogove/calls/InitiatedSession.cpp b/Sources/c_borogove/src/borogove/calls/InitiatedSession.cpp
index 2733104..f4761c6 100644
--- a/Sources/c_borogove/src/borogove/calls/InitiatedSession.cpp
+++ b/Sources/c_borogove/src/borogove/calls/InitiatedSession.cpp
@@ -10,9 +10,6 @@
 #ifndef INCLUDED_Std
 #include <Std.h>
 #endif
-#ifndef INCLUDED__HaxeCBridge_Internal
-#include <_HaxeCBridge/Internal.h>
-#endif
 #ifndef INCLUDED_borogove_Caps
 #include <borogove/Caps.h>
 #endif
@@ -82,9 +79,6 @@
 #ifndef INCLUDED_borogove_calls__Session_Session_Fields_
 #include <borogove/calls/_Session/Session_Fields_.h>
 #endif
-#ifndef INCLUDED_cpp_Int64Map
-#include <cpp/Int64Map.h>
-#endif
 #ifndef INCLUDED_haxe_IMap
 #include <haxe/IMap.h>
 #endif
@@ -107,90 +101,85 @@
 #include <thenshim/_Promise/Promise_Impl_.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_7acc2c8020739c2c_329_new,"borogove.calls.InitiatedSession","new",0x27873263,"borogove.calls.InitiatedSession.new","borogove/calls/Session.hx",329,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_a639e4155ff9c820_371_sid__fromC,"borogove.calls.InitiatedSession","sid__fromC",0x1f8d2388,"borogove.calls.InitiatedSession.sid__fromC","HaxeCBridge.hx",371,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_a639e4155ff9c820_371_chatId__fromC,"borogove.calls.InitiatedSession","chatId__fromC",0x814f1fc9,"borogove.calls.InitiatedSession.chatId__fromC","HaxeCBridge.hx",371,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_369_get_sid,"borogove.calls.InitiatedSession","get_sid",0x628c8728,"borogove.calls.InitiatedSession.get_sid","borogove/calls/Session.hx",369,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_373_get_chatId,"borogove.calls.InitiatedSession","get_chatId",0x1872a8f9,"borogove.calls.InitiatedSession.get_chatId","borogove/calls/Session.hx",373,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_378_ring,"borogove.calls.InitiatedSession","ring",0x716cc04d,"borogove.calls.InitiatedSession.ring","borogove/calls/Session.hx",378,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_383_retract,"borogove.calls.InitiatedSession","retract",0x387a0184,"borogove.calls.InitiatedSession.retract","borogove/calls/Session.hx",383,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_389_accept,"borogove.calls.InitiatedSession","accept",0xee9814e5,"borogove.calls.InitiatedSession.accept","borogove/calls/Session.hx",389,0x33a79030)
+HX_DEFINE_STACK_FRAME(_hx_pos_7acc2c8020739c2c_330_new,"borogove.calls.InitiatedSession","new",0x27873263,"borogove.calls.InitiatedSession.new","borogove/calls/Session.hx",330,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_372_get_sid,"borogove.calls.InitiatedSession","get_sid",0x628c8728,"borogove.calls.InitiatedSession.get_sid","borogove/calls/Session.hx",372,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_376_get_chatId,"borogove.calls.InitiatedSession","get_chatId",0x1872a8f9,"borogove.calls.InitiatedSession.get_chatId","borogove/calls/Session.hx",376,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_381_ring,"borogove.calls.InitiatedSession","ring",0x716cc04d,"borogove.calls.InitiatedSession.ring","borogove/calls/Session.hx",381,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_386_retract,"borogove.calls.InitiatedSession","retract",0x387a0184,"borogove.calls.InitiatedSession.retract","borogove/calls/Session.hx",386,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_393_accept,"borogove.calls.InitiatedSession","accept",0xee9814e5,"borogove.calls.InitiatedSession.accept","borogove/calls/Session.hx",393,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_394_accept,"borogove.calls.InitiatedSession","accept",0xee9814e5,"borogove.calls.InitiatedSession.accept","borogove/calls/Session.hx",394,0x33a79030)
 HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_390_accept,"borogove.calls.InitiatedSession","accept",0xee9814e5,"borogove.calls.InitiatedSession.accept","borogove/calls/Session.hx",390,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_386_accept,"borogove.calls.InitiatedSession","accept",0xee9814e5,"borogove.calls.InitiatedSession.accept","borogove/calls/Session.hx",386,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_394_hangup,"borogove.calls.InitiatedSession","hangup",0x9b91542a,"borogove.calls.InitiatedSession.hangup","borogove/calls/Session.hx",394,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_405_initiate,"borogove.calls.InitiatedSession","initiate",0x6beadd76,"borogove.calls.InitiatedSession.initiate","borogove/calls/Session.hx",405,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_426_terminate,"borogove.calls.InitiatedSession","terminate",0xc17b78a4,"borogove.calls.InitiatedSession.terminate","borogove/calls/Session.hx",426,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_411_terminate,"borogove.calls.InitiatedSession","terminate",0xc17b78a4,"borogove.calls.InitiatedSession.terminate","borogove/calls/Session.hx",411,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_461_contentAdd,"borogove.calls.InitiatedSession","contentAdd",0xb4519ac5,"borogove.calls.InitiatedSession.contentAdd","borogove/calls/Session.hx",461,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_460_contentAdd,"borogove.calls.InitiatedSession","contentAdd",0xb4519ac5,"borogove.calls.InitiatedSession.contentAdd","borogove/calls/Session.hx",460,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_454_contentAdd,"borogove.calls.InitiatedSession","contentAdd",0xb4519ac5,"borogove.calls.InitiatedSession.contentAdd","borogove/calls/Session.hx",454,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_453_contentAdd,"borogove.calls.InitiatedSession","contentAdd",0xb4519ac5,"borogove.calls.InitiatedSession.contentAdd","borogove/calls/Session.hx",453,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_438_contentAdd,"borogove.calls.InitiatedSession","contentAdd",0xb4519ac5,"borogove.calls.InitiatedSession.contentAdd","borogove/calls/Session.hx",438,0x33a79030)
-static const bool _hx_array_data_ac07c4f1_23[] = {
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_399_hangup,"borogove.calls.InitiatedSession","hangup",0x9b91542a,"borogove.calls.InitiatedSession.hangup","borogove/calls/Session.hx",399,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_410_initiate,"borogove.calls.InitiatedSession","initiate",0x6beadd76,"borogove.calls.InitiatedSession.initiate","borogove/calls/Session.hx",410,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_431_terminate,"borogove.calls.InitiatedSession","terminate",0xc17b78a4,"borogove.calls.InitiatedSession.terminate","borogove/calls/Session.hx",431,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_416_terminate,"borogove.calls.InitiatedSession","terminate",0xc17b78a4,"borogove.calls.InitiatedSession.terminate","borogove/calls/Session.hx",416,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_466_contentAdd,"borogove.calls.InitiatedSession","contentAdd",0xb4519ac5,"borogove.calls.InitiatedSession.contentAdd","borogove/calls/Session.hx",466,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_465_contentAdd,"borogove.calls.InitiatedSession","contentAdd",0xb4519ac5,"borogove.calls.InitiatedSession.contentAdd","borogove/calls/Session.hx",465,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_459_contentAdd,"borogove.calls.InitiatedSession","contentAdd",0xb4519ac5,"borogove.calls.InitiatedSession.contentAdd","borogove/calls/Session.hx",459,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_458_contentAdd,"borogove.calls.InitiatedSession","contentAdd",0xb4519ac5,"borogove.calls.InitiatedSession.contentAdd","borogove/calls/Session.hx",458,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_443_contentAdd,"borogove.calls.InitiatedSession","contentAdd",0xb4519ac5,"borogove.calls.InitiatedSession.contentAdd","borogove/calls/Session.hx",443,0x33a79030)
+static const bool _hx_array_data_ac07c4f1_21[] = {
 	0,
 };
-static const bool _hx_array_data_ac07c4f1_24[] = {
+static const bool _hx_array_data_ac07c4f1_22[] = {
 	0,
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_445_contentAdd,"borogove.calls.InitiatedSession","contentAdd",0xb4519ac5,"borogove.calls.InitiatedSession.contentAdd","borogove/calls/Session.hx",445,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_477_contentAccept,"borogove.calls.InitiatedSession","contentAccept",0xcd9ee8e4,"borogove.calls.InitiatedSession.contentAccept","borogove/calls/Session.hx",477,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_504_transportInfo,"borogove.calls.InitiatedSession","transportInfo",0xa36c607a,"borogove.calls.InitiatedSession.transportInfo","borogove/calls/Session.hx",504,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_490_transportInfo,"borogove.calls.InitiatedSession","transportInfo",0xa36c607a,"borogove.calls.InitiatedSession.transportInfo","borogove/calls/Session.hx",490,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_507_addMedia,"borogove.calls.InitiatedSession","addMedia",0x8b749e20,"borogove.calls.InitiatedSession.addMedia","borogove/calls/Session.hx",507,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_a639e4155ff9c820_315_addMedia__fromC,"borogove.calls.InitiatedSession","addMedia__fromC",0x44b5d659,"borogove.calls.InitiatedSession.addMedia__fromC","HaxeCBridge.hx",315,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_521_callStatus,"borogove.calls.InitiatedSession","callStatus",0xa19ff2cd,"borogove.calls.InitiatedSession.callStatus","borogove/calls/Session.hx",521,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_530_audioTracks,"borogove.calls.InitiatedSession","audioTracks",0x0966fa01,"borogove.calls.InitiatedSession.audioTracks","borogove/calls/Session.hx",530,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_a639e4155ff9c820_311_audioTracks__fromC,"borogove.calls.InitiatedSession","audioTracks__fromC",0x7ceb2898,"borogove.calls.InitiatedSession.audioTracks__fromC","HaxeCBridge.hx",311,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_537_videoTracks,"borogove.calls.InitiatedSession","videoTracks",0xb35e5f66,"borogove.calls.InitiatedSession.videoTracks","borogove/calls/Session.hx",537,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_a639e4155ff9c820_311_videoTracks__fromC,"borogove.calls.InitiatedSession","videoTracks__fromC",0x87c169d3,"borogove.calls.InitiatedSession.videoTracks__fromC","HaxeCBridge.hx",311,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_546_dtmf,"borogove.calls.InitiatedSession","dtmf",0x68341b86,"borogove.calls.InitiatedSession.dtmf","borogove/calls/Session.hx",546,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_544_dtmf,"borogove.calls.InitiatedSession","dtmf",0x68341b86,"borogove.calls.InitiatedSession.dtmf","borogove/calls/Session.hx",544,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_561_sendIceCandidate,"borogove.calls.InitiatedSession","sendIceCandidate",0xc418ccfd,"borogove.calls.InitiatedSession.sendIceCandidate","borogove/calls/Session.hx",561,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_573_sendIceCandidate,"borogove.calls.InitiatedSession","sendIceCandidate",0xc418ccfd,"borogove.calls.InitiatedSession.sendIceCandidate","borogove/calls/Session.hx",573,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_551_sendIceCandidate,"borogove.calls.InitiatedSession","sendIceCandidate",0xc418ccfd,"borogove.calls.InitiatedSession.sendIceCandidate","borogove/calls/Session.hx",551,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_574_sendIceCandidate,"borogove.calls.InitiatedSession","sendIceCandidate",0xc418ccfd,"borogove.calls.InitiatedSession.sendIceCandidate","borogove/calls/Session.hx",574,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_586_supplyMedia,"borogove.calls.InitiatedSession","supplyMedia",0x9002a938,"borogove.calls.InitiatedSession.supplyMedia","borogove/calls/Session.hx",586,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_594_supplyMedia,"borogove.calls.InitiatedSession","supplyMedia",0x9002a938,"borogove.calls.InitiatedSession.supplyMedia","borogove/calls/Session.hx",594,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_585_supplyMedia,"borogove.calls.InitiatedSession","supplyMedia",0x9002a938,"borogove.calls.InitiatedSession.supplyMedia","borogove/calls/Session.hx",585,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_a639e4155ff9c820_315_supplyMedia__fromC,"borogove.calls.InitiatedSession","supplyMedia__fromC",0x9589de41,"borogove.calls.InitiatedSession.supplyMedia__fromC","HaxeCBridge.hx",315,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_612_setupPeerConnection,"borogove.calls.InitiatedSession","setupPeerConnection",0x8ac53fc0,"borogove.calls.InitiatedSession.setupPeerConnection","borogove/calls/Session.hx",612,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_614_setupPeerConnection,"borogove.calls.InitiatedSession","setupPeerConnection",0x8ac53fc0,"borogove.calls.InitiatedSession.setupPeerConnection","borogove/calls/Session.hx",614,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_616_setupPeerConnection,"borogove.calls.InitiatedSession","setupPeerConnection",0x8ac53fc0,"borogove.calls.InitiatedSession.setupPeerConnection","borogove/calls/Session.hx",616,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_618_setupPeerConnection,"borogove.calls.InitiatedSession","setupPeerConnection",0x8ac53fc0,"borogove.calls.InitiatedSession.setupPeerConnection","borogove/calls/Session.hx",618,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_609_setupPeerConnection,"borogove.calls.InitiatedSession","setupPeerConnection",0x8ac53fc0,"borogove.calls.InitiatedSession.setupPeerConnection","borogove/calls/Session.hx",609,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_604_setupPeerConnection,"borogove.calls.InitiatedSession","setupPeerConnection",0x8ac53fc0,"borogove.calls.InitiatedSession.setupPeerConnection","borogove/calls/Session.hx",604,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_635_setupLocalDescription,"borogove.calls.InitiatedSession","setupLocalDescription",0x25437cb1,"borogove.calls.InitiatedSession.setupLocalDescription","borogove/calls/Session.hx",635,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_640_setupLocalDescription,"borogove.calls.InitiatedSession","setupLocalDescription",0x25437cb1,"borogove.calls.InitiatedSession.setupLocalDescription","borogove/calls/Session.hx",640,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_639_setupLocalDescription,"borogove.calls.InitiatedSession","setupLocalDescription",0x25437cb1,"borogove.calls.InitiatedSession.setupLocalDescription","borogove/calls/Session.hx",639,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_643_setupLocalDescription,"borogove.calls.InitiatedSession","setupLocalDescription",0x25437cb1,"borogove.calls.InitiatedSession.setupLocalDescription","borogove/calls/Session.hx",643,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_638_setupLocalDescription,"borogove.calls.InitiatedSession","setupLocalDescription",0x25437cb1,"borogove.calls.InitiatedSession.setupLocalDescription","borogove/calls/Session.hx",638,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_450_contentAdd,"borogove.calls.InitiatedSession","contentAdd",0xb4519ac5,"borogove.calls.InitiatedSession.contentAdd","borogove/calls/Session.hx",450,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_483_contentAccept,"borogove.calls.InitiatedSession","contentAccept",0xcd9ee8e4,"borogove.calls.InitiatedSession.contentAccept","borogove/calls/Session.hx",483,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_510_transportInfo,"borogove.calls.InitiatedSession","transportInfo",0xa36c607a,"borogove.calls.InitiatedSession.transportInfo","borogove/calls/Session.hx",510,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_496_transportInfo,"borogove.calls.InitiatedSession","transportInfo",0xa36c607a,"borogove.calls.InitiatedSession.transportInfo","borogove/calls/Session.hx",496,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_514_addMedia,"borogove.calls.InitiatedSession","addMedia",0x8b749e20,"borogove.calls.InitiatedSession.addMedia","borogove/calls/Session.hx",514,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_529_callStatus,"borogove.calls.InitiatedSession","callStatus",0xa19ff2cd,"borogove.calls.InitiatedSession.callStatus","borogove/calls/Session.hx",529,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_539_audioTracks,"borogove.calls.InitiatedSession","audioTracks",0x0966fa01,"borogove.calls.InitiatedSession.audioTracks","borogove/calls/Session.hx",539,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_547_videoTracks,"borogove.calls.InitiatedSession","videoTracks",0xb35e5f66,"borogove.calls.InitiatedSession.videoTracks","borogove/calls/Session.hx",547,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_557_dtmf,"borogove.calls.InitiatedSession","dtmf",0x68341b86,"borogove.calls.InitiatedSession.dtmf","borogove/calls/Session.hx",557,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_555_dtmf,"borogove.calls.InitiatedSession","dtmf",0x68341b86,"borogove.calls.InitiatedSession.dtmf","borogove/calls/Session.hx",555,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_572_sendIceCandidate,"borogove.calls.InitiatedSession","sendIceCandidate",0xc418ccfd,"borogove.calls.InitiatedSession.sendIceCandidate","borogove/calls/Session.hx",572,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_584_sendIceCandidate,"borogove.calls.InitiatedSession","sendIceCandidate",0xc418ccfd,"borogove.calls.InitiatedSession.sendIceCandidate","borogove/calls/Session.hx",584,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_562_sendIceCandidate,"borogove.calls.InitiatedSession","sendIceCandidate",0xc418ccfd,"borogove.calls.InitiatedSession.sendIceCandidate","borogove/calls/Session.hx",562,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_585_sendIceCandidate,"borogove.calls.InitiatedSession","sendIceCandidate",0xc418ccfd,"borogove.calls.InitiatedSession.sendIceCandidate","borogove/calls/Session.hx",585,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_597_supplyMedia,"borogove.calls.InitiatedSession","supplyMedia",0x9002a938,"borogove.calls.InitiatedSession.supplyMedia","borogove/calls/Session.hx",597,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_605_supplyMedia,"borogove.calls.InitiatedSession","supplyMedia",0x9002a938,"borogove.calls.InitiatedSession.supplyMedia","borogove/calls/Session.hx",605,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_596_supplyMedia,"borogove.calls.InitiatedSession","supplyMedia",0x9002a938,"borogove.calls.InitiatedSession.supplyMedia","borogove/calls/Session.hx",596,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_a639e4155ff9c820_339_supplyMedia__fromC,"borogove.calls.InitiatedSession","supplyMedia__fromC",0x9589de41,"borogove.calls.InitiatedSession.supplyMedia__fromC","HaxeCBridge.hx",339,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_623_setupPeerConnection,"borogove.calls.InitiatedSession","setupPeerConnection",0x8ac53fc0,"borogove.calls.InitiatedSession.setupPeerConnection","borogove/calls/Session.hx",623,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_625_setupPeerConnection,"borogove.calls.InitiatedSession","setupPeerConnection",0x8ac53fc0,"borogove.calls.InitiatedSession.setupPeerConnection","borogove/calls/Session.hx",625,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_627_setupPeerConnection,"borogove.calls.InitiatedSession","setupPeerConnection",0x8ac53fc0,"borogove.calls.InitiatedSession.setupPeerConnection","borogove/calls/Session.hx",627,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_629_setupPeerConnection,"borogove.calls.InitiatedSession","setupPeerConnection",0x8ac53fc0,"borogove.calls.InitiatedSession.setupPeerConnection","borogove/calls/Session.hx",629,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_620_setupPeerConnection,"borogove.calls.InitiatedSession","setupPeerConnection",0x8ac53fc0,"borogove.calls.InitiatedSession.setupPeerConnection","borogove/calls/Session.hx",620,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_615_setupPeerConnection,"borogove.calls.InitiatedSession","setupPeerConnection",0x8ac53fc0,"borogove.calls.InitiatedSession.setupPeerConnection","borogove/calls/Session.hx",615,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_646_setupLocalDescription,"borogove.calls.InitiatedSession","setupLocalDescription",0x25437cb1,"borogove.calls.InitiatedSession.setupLocalDescription","borogove/calls/Session.hx",646,0x33a79030)
 HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_651_setupLocalDescription,"borogove.calls.InitiatedSession","setupLocalDescription",0x25437cb1,"borogove.calls.InitiatedSession.setupLocalDescription","borogove/calls/Session.hx",651,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_634_setupLocalDescription,"borogove.calls.InitiatedSession","setupLocalDescription",0x25437cb1,"borogove.calls.InitiatedSession.setupLocalDescription","borogove/calls/Session.hx",634,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_679_onPeerConnection,"borogove.calls.InitiatedSession","onPeerConnection",0xb35109fc,"borogove.calls.InitiatedSession.onPeerConnection","borogove/calls/Session.hx",679,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_685_onPeerConnection,"borogove.calls.InitiatedSession","onPeerConnection",0xb35109fc,"borogove.calls.InitiatedSession.onPeerConnection","borogove/calls/Session.hx",685,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_686_onPeerConnection,"borogove.calls.InitiatedSession","onPeerConnection",0xb35109fc,"borogove.calls.InitiatedSession.onPeerConnection","borogove/calls/Session.hx",686,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_677_onPeerConnection,"borogove.calls.InitiatedSession","onPeerConnection",0xb35109fc,"borogove.calls.InitiatedSession.onPeerConnection","borogove/calls/Session.hx",677,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_356_fromSessionInitiate,"borogove.calls.InitiatedSession","fromSessionInitiate",0xba506588,"borogove.calls.InitiatedSession.fromSessionInitiate","borogove/calls/Session.hx",356,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_329_boot,"borogove.calls.InitiatedSession","boot",0x66dde4cf,"borogove.calls.InitiatedSession.boot","borogove/calls/Session.hx",329,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_650_setupLocalDescription,"borogove.calls.InitiatedSession","setupLocalDescription",0x25437cb1,"borogove.calls.InitiatedSession.setupLocalDescription","borogove/calls/Session.hx",650,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_654_setupLocalDescription,"borogove.calls.InitiatedSession","setupLocalDescription",0x25437cb1,"borogove.calls.InitiatedSession.setupLocalDescription","borogove/calls/Session.hx",654,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_649_setupLocalDescription,"borogove.calls.InitiatedSession","setupLocalDescription",0x25437cb1,"borogove.calls.InitiatedSession.setupLocalDescription","borogove/calls/Session.hx",649,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_662_setupLocalDescription,"borogove.calls.InitiatedSession","setupLocalDescription",0x25437cb1,"borogove.calls.InitiatedSession.setupLocalDescription","borogove/calls/Session.hx",662,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_645_setupLocalDescription,"borogove.calls.InitiatedSession","setupLocalDescription",0x25437cb1,"borogove.calls.InitiatedSession.setupLocalDescription","borogove/calls/Session.hx",645,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_690_onPeerConnection,"borogove.calls.InitiatedSession","onPeerConnection",0xb35109fc,"borogove.calls.InitiatedSession.onPeerConnection","borogove/calls/Session.hx",690,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_696_onPeerConnection,"borogove.calls.InitiatedSession","onPeerConnection",0xb35109fc,"borogove.calls.InitiatedSession.onPeerConnection","borogove/calls/Session.hx",696,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_697_onPeerConnection,"borogove.calls.InitiatedSession","onPeerConnection",0xb35109fc,"borogove.calls.InitiatedSession.onPeerConnection","borogove/calls/Session.hx",697,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_688_onPeerConnection,"borogove.calls.InitiatedSession","onPeerConnection",0xb35109fc,"borogove.calls.InitiatedSession.onPeerConnection","borogove/calls/Session.hx",688,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_359_fromSessionInitiate,"borogove.calls.InitiatedSession","fromSessionInitiate",0xba506588,"borogove.calls.InitiatedSession.fromSessionInitiate","borogove/calls/Session.hx",359,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_7acc2c8020739c2c_330_boot,"borogove.calls.InitiatedSession","boot",0x66dde4cf,"borogove.calls.InitiatedSession.boot","borogove/calls/Session.hx",330,0x33a79030)
 namespace borogove{
 namespace calls{
 
 void InitiatedSession_obj::__construct( ::borogove::Client client, ::borogove::JID counterpart,::String sid, ::borogove::calls::SessionDescription remoteDescription){
-            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_329_new)
-HXLINE( 344)		this->candidatesDone = null();
-HXLINE( 342)		this->afterMedia = null();
-HXLINE( 341)		this->accepted = false;
-HXLINE( 340)		this->queuedOutboundCandidate = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 339)		this->queuedInboundTransportInfo = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 338)		this->peerDtlsSetup = HX_("actpass",23,e7,c3,6b);
-HXLINE( 337)		this->pc = null();
-HXLINE( 336)		this->localDescription = null();
-HXLINE( 335)		this->remoteDescription = null();
-HXLINE( 348)		this->client = client;
-HXLINE( 349)		this->counterpart = counterpart;
-HXLINE( 350)		this->_sid = sid;
-HXLINE( 351)		this->remoteDescription = remoteDescription;
-HXLINE( 352)		this->initiator = ::hx::IsNull( remoteDescription );
+            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_330_new)
+HXLINE( 347)		this->candidatesDone = null();
+HXLINE( 345)		this->afterMedia = null();
+HXLINE( 344)		this->accepted = false;
+HXLINE( 343)		this->queuedOutboundCandidate = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 342)		this->queuedInboundTransportInfo = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 341)		this->peerDtlsSetup = HX_("actpass",23,e7,c3,6b);
+HXLINE( 340)		this->pc = null();
+HXLINE( 339)		this->localDescription = null();
+HXLINE( 338)		this->remoteDescription = null();
+HXLINE( 351)		this->client = client;
+HXLINE( 352)		this->counterpart = counterpart;
+HXLINE( 353)		this->_sid = sid;
+HXLINE( 354)		this->remoteDescription = remoteDescription;
+HXLINE( 355)		this->initiator = ::hx::IsNull( remoteDescription );
             	}
 
 Dynamic InitiatedSession_obj::__CreateEmpty() { return new InitiatedSession_obj; }
@@ -240,41 +229,25 @@ void *InitiatedSession_obj::_hx_getInterface(int inHash) {
 	#endif
 }
 
-::String InitiatedSession_obj::sid__fromC(){
-            	HX_STACKFRAME(&_hx_pos_a639e4155ff9c820_371_sid__fromC)
-HXDLIN( 371)		return this->get_sid();
-            	}
-
-
-HX_DEFINE_DYNAMIC_FUNC0(InitiatedSession_obj,sid__fromC,return )
-
-::String InitiatedSession_obj::chatId__fromC(){
-            	HX_STACKFRAME(&_hx_pos_a639e4155ff9c820_371_chatId__fromC)
-HXDLIN( 371)		return this->get_chatId();
-            	}
-
-
-HX_DEFINE_DYNAMIC_FUNC0(InitiatedSession_obj,chatId__fromC,return )
-
 ::String InitiatedSession_obj::get_sid(){
-            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_369_get_sid)
-HXDLIN( 369)		return this->_sid;
+            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_372_get_sid)
+HXDLIN( 372)		return this->_sid;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(InitiatedSession_obj,get_sid,return )
 
 ::String InitiatedSession_obj::get_chatId(){
-            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_373_get_chatId)
-HXDLIN( 373)		return this->counterpart->asBare()->asString();
+            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_376_get_chatId)
+HXDLIN( 376)		return this->counterpart->asBare()->asString();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(InitiatedSession_obj,get_chatId,return )
 
 void InitiatedSession_obj::ring(){
-            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_378_ring)
-HXDLIN( 378)		this->client->trigger(HX_("call/ring",01,8e,91,54), ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_381_ring)
+HXDLIN( 381)		this->client->trigger(HX_("call/ring",01,8e,91,54), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("session",56,17,98,93),::hx::ObjectPtr<OBJ_>(this))));
             	}
 
@@ -282,15 +255,15 @@ HXDLIN( 378)		this->client->trigger(HX_("call/ring",01,8e,91,54), ::Dynamic(::hx
 HX_DEFINE_DYNAMIC_FUNC0(InitiatedSession_obj,ring,(void))
 
 void InitiatedSession_obj::retract(){
-            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_383_retract)
-HXDLIN( 383)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
-HXDLIN( 383)		::String _hx_tmp1 = (HX_("Tried to retract session in wrong state: ",e1,1c,0c,db) + this->get_sid());
-HXDLIN( 383)		_hx_tmp(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(5)
+            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_386_retract)
+HXDLIN( 386)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
+HXDLIN( 386)		::String _hx_tmp1 = (HX_("Tried to retract session in wrong state: ",e1,1c,0c,db) + this->get_sid());
+HXDLIN( 386)		_hx_tmp(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(5)
             			->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.calls.InitiatedSession",f1,c4,07,ac))
             			->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)))
             			->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("retract",01,e2,b9,fc))
             			->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/calls/Session.hx",30,90,a7,33))
-            			->setFixed(4,HX_("lineNumber",dd,81,22,76),383)));
+            			->setFixed(4,HX_("lineNumber",dd,81,22,76),386)));
             	}
 
 
@@ -299,33 +272,33 @@ HX_DEFINE_DYNAMIC_FUNC0(InitiatedSession_obj,retract,(void))
 void InitiatedSession_obj::accept(){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		bool _hx_run( ::borogove::calls::Media m){
-            			HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_389_accept)
-HXLINE( 389)			return (m->media == HX_("audio",d6,78,80,27));
+            			HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_393_accept)
+HXLINE( 393)			return (m->media == HX_("audio",d6,78,80,27));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             		bool _hx_run( ::borogove::calls::Media m){
-            			HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_390_accept)
-HXLINE( 390)			return (m->media == HX_("video",7b,14,fc,36));
+            			HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_394_accept)
+HXLINE( 394)			return (m->media == HX_("video",7b,14,fc,36));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_386_accept)
-HXLINE( 387)		bool _hx_tmp;
-HXDLIN( 387)		if (!(this->accepted)) {
-HXLINE( 387)			_hx_tmp = ::hx::IsNull( this->remoteDescription );
+            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_390_accept)
+HXLINE( 391)		bool _hx_tmp;
+HXDLIN( 391)		if (!(this->accepted)) {
+HXLINE( 391)			_hx_tmp = ::hx::IsNull( this->remoteDescription );
             		}
             		else {
-HXLINE( 387)			_hx_tmp = true;
+HXLINE( 391)			_hx_tmp = true;
             		}
-HXDLIN( 387)		if (_hx_tmp) {
-HXLINE( 387)			return;
+HXDLIN( 391)		if (_hx_tmp) {
+HXLINE( 391)			return;
             		}
-HXLINE( 388)		this->accepted = true;
-HXLINE( 389)		bool audio = ::hx::IsNotNull( ::Lambda_obj::find(this->remoteDescription->media, ::Dynamic(new _hx_Closure_0())) );
-HXLINE( 390)		bool video = ::hx::IsNotNull( ::Lambda_obj::find(this->remoteDescription->media, ::Dynamic(new _hx_Closure_1())) );
-HXLINE( 391)		this->client->trigger(HX_("call/media",73,5d,1d,c7), ::Dynamic(::hx::Anon_obj::Create(3)
+HXLINE( 392)		this->accepted = true;
+HXLINE( 393)		bool audio = ::hx::IsNotNull( ::Lambda_obj::find(this->remoteDescription->media, ::Dynamic(new _hx_Closure_0())) );
+HXLINE( 394)		bool video = ::hx::IsNotNull( ::Lambda_obj::find(this->remoteDescription->media, ::Dynamic(new _hx_Closure_1())) );
+HXLINE( 395)		this->client->trigger(HX_("call/media",73,5d,1d,c7), ::Dynamic(::hx::Anon_obj::Create(3)
             			->setFixed(0,HX_("session",56,17,98,93),::hx::ObjectPtr<OBJ_>(this))
             			->setFixed(1,HX_("audio",d6,78,80,27),audio)
             			->setFixed(2,HX_("video",7b,14,fc,36),video)));
@@ -335,30 +308,30 @@ HXLINE( 391)		this->client->trigger(HX_("call/media",73,5d,1d,c7), ::Dynamic(::h
 HX_DEFINE_DYNAMIC_FUNC0(InitiatedSession_obj,accept,(void))
 
 void InitiatedSession_obj::hangup(){
-            	HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_394_hangup)
-HXLINE( 395)		 ::borogove::Client _hx_tmp = this->client;
-HXLINE( 396)		::String _hx_tmp1 = this->counterpart->asString();
-HXDLIN( 396)		 ::borogove::Stanza _hx_tmp2 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(3)
+            	HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_399_hangup)
+HXLINE( 400)		 ::borogove::Client _hx_tmp = this->client;
+HXLINE( 401)		::String _hx_tmp1 = this->counterpart->asString();
+HXDLIN( 401)		 ::borogove::Stanza _hx_tmp2 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(3)
             			->setFixed(0,HX_("id",db,5b,00,00),::borogove::ID_obj::medium())
             			->setFixed(1,HX_("to",7b,65,00,00),_hx_tmp1)
             			->setFixed(2,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))));
-HXLINE( 395)		_hx_tmp->sendStanza(_hx_tmp2->tag(HX_("jingle",31,27,eb,1f), ::Dynamic(::hx::Anon_obj::Create(3)
+HXLINE( 400)		_hx_tmp->sendStanza(_hx_tmp2->tag(HX_("jingle",31,27,eb,1f), ::Dynamic(::hx::Anon_obj::Create(3)
             			->setFixed(0,HX_("sid",0e,9f,57,00),this->get_sid())
             			->setFixed(1,HX_("action",b6,3b,46,16),HX_("session-terminate",6a,23,dc,12))
             			->setFixed(2,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle:1",44,c4,fe,f7))))->tag(HX_("reason",c4,0f,9d,fc),null())->tag(HX_("success",c3,25,4e,b8),null())->up()->up()->up());
-HXLINE( 401)		this->terminate();
+HXLINE( 406)		this->terminate();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(InitiatedSession_obj,hangup,(void))
 
  ::borogove::calls::OutgoingSession InitiatedSession_obj::initiate( ::borogove::Stanza stanza){
-            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_405_initiate)
-HXLINE( 406)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
-HXDLIN( 406)		::String _hx_tmp1 = (HX_("Trying to initiate already initiated session: ",84,56,c8,79) + this->get_sid());
-HXDLIN( 406)		_hx_tmp(_hx_tmp1,::hx::SourceInfo(HX_("borogove/calls/Session.hx",30,90,a7,33),406,HX_("borogove.calls.InitiatedSession",f1,c4,07,ac),HX_("initiate",59,6a,8f,5f)));
-HXLINE( 407)		HX_STACK_DO_THROW(HX_("already initiated",63,a5,36,1a));
-HXDLIN( 407)		return null();
+            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_410_initiate)
+HXLINE( 411)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
+HXDLIN( 411)		::String _hx_tmp1 = (HX_("Trying to initiate already initiated session: ",84,56,c8,79) + this->get_sid());
+HXDLIN( 411)		_hx_tmp(_hx_tmp1,::hx::SourceInfo(HX_("borogove/calls/Session.hx",30,90,a7,33),411,HX_("borogove.calls.InitiatedSession",f1,c4,07,ac),HX_("initiate",59,6a,8f,5f)));
+HXLINE( 412)		HX_STACK_DO_THROW(HX_("already initiated",63,a5,36,1a));
+HXDLIN( 412)		return null();
             	}
 
 
@@ -367,11 +340,11 @@ HX_DEFINE_DYNAMIC_FUNC1(InitiatedSession_obj,initiate,return )
 void InitiatedSession_obj::terminate(){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::borogove::calls::InitiatedSession,_gthis, ::borogove::Stanza,event, ::borogove::ChatMessage,msg) HXARGC(1)
             		void _hx_run(::Array< ::Dynamic> stored){
-            			HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_426_terminate)
-HXLINE( 427)			_gthis->client->notifyMessageHandlers(stored->__get(0).StaticCast<  ::borogove::ChatMessage >(),1);
-HXLINE( 428)			 ::borogove::Client _gthis1 = _gthis->client;
-HXLINE( 429)			::String _hx_tmp = _gthis->counterpart->asString();
-HXLINE( 428)			_gthis1->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(3)
+            			HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_431_terminate)
+HXLINE( 432)			_gthis->client->notifyMessageHandlers(stored->__get(0).StaticCast<  ::borogove::ChatMessage >(),1);
+HXLINE( 433)			 ::borogove::Client _gthis1 = _gthis->client;
+HXLINE( 434)			::String _hx_tmp = _gthis->counterpart->asString();
+HXLINE( 433)			_gthis1->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(3)
             				->setFixed(0,HX_("id",db,5b,00,00),msg->versions->__get(0).StaticCast<  ::borogove::ChatMessage >()->localId)
             				->setFixed(1,HX_("to",7b,65,00,00),_hx_tmp)
             				->setFixed(2,HX_("type",ba,f2,08,4d),HX_("chat",d8,5e,bf,41))))->addChild(event)->tag(HX_("store",e1,13,16,84), ::Dynamic(::hx::Anon_obj::Create(1)
@@ -379,48 +352,48 @@ HXLINE( 428)			_gthis1->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_411_terminate)
-HXDLIN( 411)		 ::borogove::calls::InitiatedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 412)		 ::borogove::Client _hx_tmp = this->client;
-HXDLIN( 412)		::String _hx_tmp1 = this->get_chatId();
-HXDLIN( 412)		_hx_tmp->trigger(HX_("call/retract",50,bc,8d,db), ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_416_terminate)
+HXDLIN( 416)		 ::borogove::calls::InitiatedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 417)		 ::borogove::Client _hx_tmp = this->client;
+HXDLIN( 417)		::String _hx_tmp1 = this->get_chatId();
+HXDLIN( 417)		_hx_tmp->trigger(HX_("call/retract",50,bc,8d,db), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("chatId",d3,04,77,b7),_hx_tmp1)
             			->setFixed(1,HX_("sid",0e,9f,57,00),this->get_sid())));
-HXLINE( 414)		if (::hx::IsNull( this->pc )) {
-HXLINE( 414)			return;
+HXLINE( 419)		if (::hx::IsNull( this->pc )) {
+HXLINE( 419)			return;
             		}
-HXLINE( 415)		 ::borogove::calls::PeerConnection oldPc = this->pc;
-HXLINE( 416)		this->pc = null();
-HXLINE( 417)		oldPc->close();
-HXLINE( 418)		{
-HXLINE( 418)			int _g = 0;
-HXDLIN( 418)			::Array< ::Dynamic> _g1 = oldPc->getTransceivers();
-HXDLIN( 418)			while((_g < _g1->length)){
-HXLINE( 418)				 ::Dynamic tranceiver = _g1->__get(_g);
-HXDLIN( 418)				_g = (_g + 1);
-HXLINE( 419)				bool _hx_tmp2;
-HXDLIN( 419)				if (::hx::IsNotNull( tranceiver->__Field(HX_("sender",b5,c7,84,6b),::hx::paccDynamic) )) {
-HXLINE( 419)					_hx_tmp2 = ::hx::IsNotNull(  ::Dynamic(tranceiver->__Field(HX_("sender",b5,c7,84,6b),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic) );
+HXLINE( 420)		 ::borogove::calls::PeerConnection oldPc = this->pc;
+HXLINE( 421)		this->pc = null();
+HXLINE( 422)		oldPc->close();
+HXLINE( 423)		{
+HXLINE( 423)			int _g = 0;
+HXDLIN( 423)			::Array< ::Dynamic> _g1 = oldPc->getTransceivers();
+HXDLIN( 423)			while((_g < _g1->length)){
+HXLINE( 423)				 ::Dynamic tranceiver = _g1->__get(_g);
+HXDLIN( 423)				_g = (_g + 1);
+HXLINE( 424)				bool _hx_tmp2;
+HXDLIN( 424)				if (::hx::IsNotNull( tranceiver->__Field(HX_("sender",b5,c7,84,6b),::hx::paccDynamic) )) {
+HXLINE( 424)					_hx_tmp2 = ::hx::IsNotNull(  ::Dynamic(tranceiver->__Field(HX_("sender",b5,c7,84,6b),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic) );
             				}
             				else {
-HXLINE( 419)					_hx_tmp2 = false;
+HXLINE( 424)					_hx_tmp2 = false;
             				}
-HXDLIN( 419)				if (_hx_tmp2) {
-HXLINE( 420)					( ( ::borogove::calls::MediaStreamTrack)( ::Dynamic(tranceiver->__Field(HX_("sender",b5,c7,84,6b),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)) )->stop();
+HXDLIN( 424)				if (_hx_tmp2) {
+HXLINE( 425)					( ( ::borogove::calls::MediaStreamTrack)( ::Dynamic(tranceiver->__Field(HX_("sender",b5,c7,84,6b),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)) )->stop();
             				}
             			}
             		}
-HXLINE( 424)		 ::borogove::Stanza event =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("finish",53,40,7f,86), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 429)		 ::borogove::Stanza event =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("finish",53,40,7f,86), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("id",db,5b,00,00),this->get_sid())
             			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07))));
-HXLINE( 425)		 ::borogove::ChatMessage msg = ::borogove::calls::_Session::Session_Fields__obj::mkCallMessage(this->counterpart,this->client->jid,event);
-HXLINE( 426)		::thenshim::_Promise::Promise_Impl__obj::then(this->client->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,msg)), ::Dynamic(new _hx_Closure_0(_gthis,event,msg)),null());
-HXLINE( 434)		{
-HXLINE( 434)			 ::borogove::Client tmp = this->client;
-HXDLIN( 434)			 ::borogove::Chat tmp1 = tmp->getChat(this->get_chatId());
-HXDLIN( 434)			if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 434)				::Dynamic this1 = tmp1->jingleSessions;
-HXDLIN( 434)				( ( ::haxe::ds::StringMap)(this1) )->remove(this->get_sid());
+HXLINE( 430)		 ::borogove::ChatMessage msg = ::borogove::calls::_Session::Session_Fields__obj::mkCallMessage(this->counterpart,this->client->jid,event);
+HXLINE( 431)		::thenshim::_Promise::Promise_Impl__obj::then(this->client->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,msg)), ::Dynamic(new _hx_Closure_0(_gthis,event,msg)),null());
+HXLINE( 439)		{
+HXLINE( 439)			 ::borogove::Client tmp = this->client;
+HXDLIN( 439)			 ::borogove::Chat tmp1 = tmp->getChat(this->get_chatId());
+HXDLIN( 439)			if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 439)				::Dynamic this1 = tmp1->jingleSessions;
+HXDLIN( 439)				( ( ::haxe::ds::StringMap)(this1) )->remove(this->get_sid());
             			}
             		}
             	}
@@ -439,105 +412,108 @@ void InitiatedSession_obj::contentAdd( ::borogove::Stanza stanza){
             					bool _hx_run( ::borogove::calls::Media m){
             						HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::borogove::calls::Media,m) HXARGC(1)
             						bool _hx_run( ::borogove::calls::Media addM){
-            							HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_461_contentAdd)
-HXLINE( 461)							return (addM->mid == m->mid);
+            							HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_466_contentAdd)
+HXLINE( 466)							return (addM->mid == m->mid);
             						}
             						HX_END_LOCAL_FUNC1(return)
 
-            						HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_461_contentAdd)
-HXLINE( 461)						::String _hx_tmp = ( (::String)(::Reflect_obj::field(m->contentElement(false)->attr,HX_("senders",1e,f7,a9,a8))) );
-HXDLIN( 461)						return (_hx_tmp != ( (::String)(::Reflect_obj::field(( ( ::borogove::calls::Media)(::Lambda_obj::find(addThis->media, ::Dynamic(new _hx_Closure_1(m)))) )->contentElement(false)->attr,HX_("senders",1e,f7,a9,a8))) ));
+            						HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_466_contentAdd)
+HXLINE( 466)						::String _hx_tmp = ( (::String)(::Reflect_obj::field(m->contentElement(false)->attr,HX_("senders",1e,f7,a9,a8))) );
+HXDLIN( 466)						return (_hx_tmp != ( (::String)(::Reflect_obj::field(( ( ::borogove::calls::Media)(::Lambda_obj::find(addThis->media, ::Dynamic(new _hx_Closure_1(m)))) )->contentElement(false)->attr,HX_("senders",1e,f7,a9,a8))) ));
             					}
             					HX_END_LOCAL_FUNC1(return)
 
-            					HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_460_contentAdd)
-HXLINE( 460)					if (::hx::IsNotNull( ::Lambda_obj::find(gonnaAccept->media, ::Dynamic(new _hx_Closure_2(addThis))) )) {
-HXLINE( 463)						::String modify = _gthis->get_sid();
-HXDLIN( 463)						 ::borogove::Stanza modify1 = gonnaAccept->toStanza(HX_("content-modify",4e,70,8f,a8),modify,_gthis->initiator);
-HXLINE( 464)						{
-HXLINE( 464)							 ::Dynamic this1 = modify1->attr;
-HXDLIN( 464)							::Reflect_obj::setField(this1,HX_("to",7b,65,00,00),_gthis->counterpart->asString());
+            					HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_465_contentAdd)
+HXLINE( 465)					if (::hx::IsNotNull( ::Lambda_obj::find(gonnaAccept->media, ::Dynamic(new _hx_Closure_2(addThis))) )) {
+HXLINE( 468)						if (::hx::IsNull( _gthis->counterpart )) {
+HXLINE( 468)							HX_STACK_DO_THROW(HX_("no counterpart?",af,8b,69,9d));
             						}
-HXLINE( 465)						{
-HXLINE( 465)							 ::Dynamic this2 = modify1->attr;
-HXDLIN( 465)							::Reflect_obj::setField(this2,HX_("id",db,5b,00,00),::borogove::ID_obj::medium());
+HXLINE( 469)						::String modify = _gthis->get_sid();
+HXDLIN( 469)						 ::borogove::Stanza modify1 = gonnaAccept->toStanza(HX_("content-modify",4e,70,8f,a8),modify,_gthis->initiator);
+HXLINE( 470)						{
+HXLINE( 470)							 ::Dynamic this1 = modify1->attr;
+HXDLIN( 470)							::Reflect_obj::setField(this1,HX_("to",7b,65,00,00),_gthis->counterpart->asString());
             						}
-HXLINE( 466)						_gthis->client->sendStanza(modify1);
+HXLINE( 471)						{
+HXLINE( 471)							 ::Dynamic this2 = modify1->attr;
+HXDLIN( 471)							::Reflect_obj::setField(this2,HX_("id",db,5b,00,00),::borogove::ID_obj::medium());
+            						}
+HXLINE( 472)						_gthis->client->sendStanza(modify1);
             					}
             				}
             				HX_END_LOCAL_FUNC1((void))
 
-            				HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_454_contentAdd)
-HXLINE( 455)				 ::borogove::calls::InitiatedSession _gthis1 = _gthis;
-HXLINE( 457)				::Array< ::Dynamic> _this = addThis->media;
-HXDLIN( 457)				::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
-HXDLIN( 457)				{
-HXLINE( 457)					int _g = 0;
-HXDLIN( 457)					int _g1 = _this->length;
-HXDLIN( 457)					while((_g < _g1)){
-HXLINE( 457)						_g = (_g + 1);
-HXDLIN( 457)						int i = (_g - 1);
-HXDLIN( 457)						{
-HXLINE( 457)							::String inValue = ( ( ::borogove::calls::Media)(_hx_array_unsafe_get(_this,i)) )->mid;
-HXDLIN( 457)							result->__unsafe_set(i,inValue);
+            				HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_459_contentAdd)
+HXLINE( 460)				 ::borogove::calls::InitiatedSession _gthis1 = _gthis;
+HXLINE( 462)				::Array< ::Dynamic> _this = addThis->media;
+HXDLIN( 462)				::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
+HXDLIN( 462)				{
+HXLINE( 462)					int _g = 0;
+HXDLIN( 462)					int _g1 = _this->length;
+HXDLIN( 462)					while((_g < _g1)){
+HXLINE( 462)						_g = (_g + 1);
+HXDLIN( 462)						int i = (_g - 1);
+HXDLIN( 462)						{
+HXLINE( 462)							::String inValue = ( ( ::borogove::calls::Media)(_hx_array_unsafe_get(_this,i)) )->mid;
+HXDLIN( 462)							result->__unsafe_set(i,inValue);
             						}
             					}
             				}
-HXLINE( 455)				_gthis1->setupLocalDescription(HX_("content-accept",dc,ee,cb,f2),result,false, ::Dynamic(new _hx_Closure_3(_gthis,addThis)));
-HXLINE( 470)				_gthis->afterMedia = null();
+HXLINE( 460)				_gthis1->setupLocalDescription(HX_("content-accept",dc,ee,cb,f2),result,false, ::Dynamic(new _hx_Closure_3(_gthis,addThis)));
+HXLINE( 476)				_gthis->afterMedia = null();
             			}
             			HX_END_LOCAL_FUNC0((void))
 
-            			HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_453_contentAdd)
-HXLINE( 454)			_gthis->afterMedia =  ::Dynamic(new _hx_Closure_4(_gthis,addThis));
-HXLINE( 472)			return _gthis->client->trigger(HX_("call/media",73,5d,1d,c7), ::Dynamic(::hx::Anon_obj::Create(3)
+            			HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_458_contentAdd)
+HXLINE( 459)			_gthis->afterMedia =  ::Dynamic(new _hx_Closure_4(_gthis,addThis));
+HXLINE( 478)			return _gthis->client->trigger(HX_("call/media",73,5d,1d,c7), ::Dynamic(::hx::Anon_obj::Create(3)
             				->setFixed(0,HX_("session",56,17,98,93),_gthis)
             				->setFixed(1,HX_("audio",d6,78,80,27),audio->__get(0))
             				->setFixed(2,HX_("video",7b,14,fc,36),video->__get(0))));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_438_contentAdd)
-HXDLIN( 438)		 ::borogove::calls::InitiatedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 439)		if (::hx::IsNull( this->remoteDescription )) {
-HXLINE( 439)			HX_STACK_DO_THROW(HX_("Got content-add before session-accept",59,44,5e,1c));
+            	HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_443_contentAdd)
+HXDLIN( 443)		 ::borogove::calls::InitiatedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 444)		if (::hx::IsNull( this->remoteDescription )) {
+HXLINE( 444)			HX_STACK_DO_THROW(HX_("Got content-add before session-accept",59,44,5e,1c));
             		}
-HXLINE( 441)		 ::borogove::calls::SessionDescription addThis = ::borogove::calls::SessionDescription_obj::fromStanza(stanza,this->initiator,this->remoteDescription);
-HXLINE( 442)		::Array< bool > video = ::Array_obj< bool >::fromData( _hx_array_data_ac07c4f1_23,1);
-HXLINE( 443)		::Array< bool > audio = ::Array_obj< bool >::fromData( _hx_array_data_ac07c4f1_24,1);
-HXLINE( 444)		{
-HXLINE( 444)			int _g = 0;
-HXDLIN( 444)			::Array< ::Dynamic> _g1 = addThis->media;
-HXDLIN( 444)			while((_g < _g1->length)){
+HXLINE( 446)		 ::borogove::calls::SessionDescription addThis = ::borogove::calls::SessionDescription_obj::fromStanza(stanza,this->initiator,this->remoteDescription);
+HXLINE( 447)		::Array< bool > video = ::Array_obj< bool >::fromData( _hx_array_data_ac07c4f1_21,1);
+HXLINE( 448)		::Array< bool > audio = ::Array_obj< bool >::fromData( _hx_array_data_ac07c4f1_22,1);
+HXLINE( 449)		{
+HXLINE( 449)			int _g = 0;
+HXDLIN( 449)			::Array< ::Dynamic> _g1 = addThis->media;
+HXDLIN( 449)			while((_g < _g1->length)){
             				HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             				bool _hx_run( ::borogove::calls::Attribute attr){
-            					HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_445_contentAdd)
-HXLINE( 445)					if ((attr->key != HX_("sendrecv",6e,1e,9c,f4))) {
-HXLINE( 445)						return (attr->key == HX_("sendonly",b4,56,a7,f2));
+            					HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_450_contentAdd)
+HXLINE( 450)					if ((attr->key != HX_("sendrecv",6e,1e,9c,f4))) {
+HXLINE( 450)						return (attr->key == HX_("sendonly",b4,56,a7,f2));
             					}
             					else {
-HXLINE( 445)						return true;
+HXLINE( 450)						return true;
             					}
-HXDLIN( 445)					return false;
+HXDLIN( 450)					return false;
             				}
             				HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 444)				 ::borogove::calls::Media m = _g1->__get(_g).StaticCast<  ::borogove::calls::Media >();
-HXDLIN( 444)				_g = (_g + 1);
-HXLINE( 445)				if (::Lambda_obj::exists(m->attributes, ::Dynamic(new _hx_Closure_0()))) {
-HXLINE( 446)					if ((m->media == HX_("video",7b,14,fc,36))) {
-HXLINE( 446)						video[0] = true;
+HXLINE( 449)				 ::borogove::calls::Media m = _g1->__get(_g).StaticCast<  ::borogove::calls::Media >();
+HXDLIN( 449)				_g = (_g + 1);
+HXLINE( 450)				if (::Lambda_obj::exists(m->attributes, ::Dynamic(new _hx_Closure_0()))) {
+HXLINE( 451)					if ((m->media == HX_("video",7b,14,fc,36))) {
+HXLINE( 451)						video[0] = true;
             					}
-HXLINE( 447)					if ((m->media == HX_("audio",d6,78,80,27))) {
-HXLINE( 447)						audio[0] = true;
+HXLINE( 452)					if ((m->media == HX_("audio",d6,78,80,27))) {
+HXLINE( 452)						audio[0] = true;
             					}
             				}
-HXLINE( 449)				m->attributes->push( ::borogove::calls::Attribute_obj::__alloc( HX_CTX ,HX_("setup",7d,ae,2f,7a),this->peerDtlsSetup));
+HXLINE( 454)				m->attributes->push( ::borogove::calls::Attribute_obj::__alloc( HX_CTX ,HX_("setup",7d,ae,2f,7a),this->peerDtlsSetup));
             			}
             		}
-HXLINE( 451)		this->remoteDescription = this->remoteDescription->addContent(addThis);
-HXLINE( 453)		 ::borogove::calls::PeerConnection _hx_tmp = this->pc;
-HXDLIN( 453)		::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->setRemoteDescription( ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 456)		this->remoteDescription = this->remoteDescription->addContent(addThis);
+HXLINE( 458)		 ::borogove::calls::PeerConnection _hx_tmp = this->pc;
+HXDLIN( 458)		::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->setRemoteDescription( ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("sdp",bf,9a,57,00),this->remoteDescription->toSdp())
             			->setFixed(1,HX_("type",ba,f2,08,4d),cpp::Struct(rtc::Description::Type::Offer)))), ::Dynamic(new _hx_Closure_5(video,_gthis,addThis,audio)),null());
             	}
@@ -546,23 +522,23 @@ HXDLIN( 453)		::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->setRemoteDe
 HX_DEFINE_DYNAMIC_FUNC1(InitiatedSession_obj,contentAdd,(void))
 
 void InitiatedSession_obj::contentAccept( ::borogove::Stanza stanza){
-            	HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_477_contentAccept)
-HXLINE( 478)		if (::hx::IsNull( this->remoteDescription )) {
-HXLINE( 478)			HX_STACK_DO_THROW(HX_("Got content-accept before session-accept",10,3c,4f,73));
+            	HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_483_contentAccept)
+HXLINE( 484)		if (::hx::IsNull( this->remoteDescription )) {
+HXLINE( 484)			HX_STACK_DO_THROW(HX_("Got content-accept before session-accept",10,3c,4f,73));
             		}
-HXLINE( 481)		 ::borogove::calls::SessionDescription addThis = ::borogove::calls::SessionDescription_obj::fromStanza(stanza,!(this->initiator),this->remoteDescription);
-HXLINE( 482)		{
-HXLINE( 482)			int _g = 0;
-HXDLIN( 482)			::Array< ::Dynamic> _g1 = addThis->media;
-HXDLIN( 482)			while((_g < _g1->length)){
-HXLINE( 482)				 ::borogove::calls::Media m = _g1->__get(_g).StaticCast<  ::borogove::calls::Media >();
-HXDLIN( 482)				_g = (_g + 1);
-HXLINE( 483)				m->attributes->push( ::borogove::calls::Attribute_obj::__alloc( HX_CTX ,HX_("setup",7d,ae,2f,7a),this->peerDtlsSetup));
+HXLINE( 487)		 ::borogove::calls::SessionDescription addThis = ::borogove::calls::SessionDescription_obj::fromStanza(stanza,!(this->initiator),this->remoteDescription);
+HXLINE( 488)		{
+HXLINE( 488)			int _g = 0;
+HXDLIN( 488)			::Array< ::Dynamic> _g1 = addThis->media;
+HXDLIN( 488)			while((_g < _g1->length)){
+HXLINE( 488)				 ::borogove::calls::Media m = _g1->__get(_g).StaticCast<  ::borogove::calls::Media >();
+HXDLIN( 488)				_g = (_g + 1);
+HXLINE( 489)				m->attributes->push( ::borogove::calls::Attribute_obj::__alloc( HX_CTX ,HX_("setup",7d,ae,2f,7a),this->peerDtlsSetup));
             			}
             		}
-HXLINE( 485)		this->remoteDescription = this->remoteDescription->addContent(addThis);
-HXLINE( 486)		 ::borogove::calls::PeerConnection _hx_tmp = this->pc;
-HXDLIN( 486)		_hx_tmp->setRemoteDescription( ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 491)		this->remoteDescription = this->remoteDescription->addContent(addThis);
+HXLINE( 492)		 ::borogove::calls::PeerConnection _hx_tmp = this->pc;
+HXDLIN( 492)		_hx_tmp->setRemoteDescription( ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("sdp",bf,9a,57,00),this->remoteDescription->toSdp())
             			->setFixed(1,HX_("type",ba,f2,08,4d),cpp::Struct(rtc::Description::Type::Answer))));
             	}
@@ -573,408 +549,291 @@ HX_DEFINE_DYNAMIC_FUNC1(InitiatedSession_obj,contentAccept,(void))
 ::Dynamic InitiatedSession_obj::transportInfo( ::borogove::Stanza stanza){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		void _hx_run(::cpp::VirtualArray _){
-            			HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_504_transportInfo)
-HXLINE( 504)			return;
+            			HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_510_transportInfo)
+HXLINE( 510)			return;
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_490_transportInfo)
-HXDLIN( 490)		 ::borogove::calls::InitiatedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 491)		bool _hx_tmp;
-HXDLIN( 491)		if (::hx::IsNotNull( this->pc )) {
-HXLINE( 491)			_hx_tmp = ::hx::IsNull( this->remoteDescription );
+            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_496_transportInfo)
+HXDLIN( 496)		 ::borogove::calls::InitiatedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 497)		bool _hx_tmp;
+HXDLIN( 497)		if (::hx::IsNotNull( this->pc )) {
+HXLINE( 497)			_hx_tmp = ::hx::IsNull( this->remoteDescription );
             		}
             		else {
-HXLINE( 491)			_hx_tmp = true;
+HXLINE( 497)			_hx_tmp = true;
             		}
-HXDLIN( 491)		if (_hx_tmp) {
-HXLINE( 492)			this->queuedInboundTransportInfo->push(stanza);
-HXLINE( 493)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+HXDLIN( 497)		if (_hx_tmp) {
+HXLINE( 498)			this->queuedInboundTransportInfo->push(stanza);
+HXLINE( 499)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             		}
-HXLINE( 496)		::Array< ::Dynamic> _this = ::borogove::calls::IceCandidate_obj::fromStanza(stanza);
-HXDLIN( 496)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_this->length);
-HXDLIN( 496)		{
-HXLINE( 496)			int _g = 0;
-HXDLIN( 496)			int _g1 = _this->length;
-HXDLIN( 496)			while((_g < _g1)){
-HXLINE( 496)				_g = (_g + 1);
-HXDLIN( 496)				int i = (_g - 1);
-HXDLIN( 496)				{
-HXLINE( 496)					 ::borogove::calls::IceCandidate candidate = ( ( ::borogove::calls::IceCandidate)(_hx_array_unsafe_get(_this,i)) );
-HXLINE( 497)					int index = _gthis->remoteDescription->identificationTags->indexOf(candidate->sdpMid,null());
-HXLINE( 498)					 ::borogove::calls::PeerConnection _gthis1 = _gthis->pc;
-HXLINE( 499)					::String inValue = candidate->toSdp();
-HXLINE( 501)					 ::Dynamic inValue1;
-HXDLIN( 501)					if ((index < 0)) {
-HXLINE( 501)						inValue1 = null();
+HXLINE( 502)		::Array< ::Dynamic> _this = ::borogove::calls::IceCandidate_obj::fromStanza(stanza);
+HXDLIN( 502)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_this->length);
+HXDLIN( 502)		{
+HXLINE( 502)			int _g = 0;
+HXDLIN( 502)			int _g1 = _this->length;
+HXDLIN( 502)			while((_g < _g1)){
+HXLINE( 502)				_g = (_g + 1);
+HXDLIN( 502)				int i = (_g - 1);
+HXDLIN( 502)				{
+HXLINE( 502)					 ::borogove::calls::IceCandidate candidate = ( ( ::borogove::calls::IceCandidate)(_hx_array_unsafe_get(_this,i)) );
+HXLINE( 503)					int index = _gthis->remoteDescription->identificationTags->indexOf(candidate->sdpMid,null());
+HXLINE( 504)					 ::borogove::calls::PeerConnection _gthis1 = _gthis->pc;
+HXLINE( 505)					::String inValue = candidate->toSdp();
+HXLINE( 507)					 ::Dynamic inValue1;
+HXDLIN( 507)					if ((index < 0)) {
+HXLINE( 507)						inValue1 = null();
             					}
             					else {
-HXLINE( 501)						inValue1 = index;
+HXLINE( 507)						inValue1 = index;
             					}
-HXLINE( 496)					::Dynamic inValue2 = _gthis1->addIceCandidate( ::Dynamic(::hx::Anon_obj::Create(4)
+HXLINE( 502)					::Dynamic inValue2 = _gthis1->addIceCandidate( ::Dynamic(::hx::Anon_obj::Create(4)
             						->setFixed(0,HX_("usernameFragment",06,a8,37,89),candidate->ufrag)
             						->setFixed(1,HX_("candidate",43,34,d8,d0),inValue)
             						->setFixed(2,HX_("sdpMid",09,30,5f,d9),candidate->sdpMid)
             						->setFixed(3,HX_("sdpMLineIndex",f0,ab,d6,e2),inValue1)));
-HXDLIN( 496)					result->__unsafe_set(i,inValue2);
+HXDLIN( 502)					result->__unsafe_set(i,inValue2);
             				}
             			}
             		}
-HXDLIN( 496)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(result), ::Dynamic(new _hx_Closure_0()),null());
+HXDLIN( 502)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(result), ::Dynamic(new _hx_Closure_0()),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(InitiatedSession_obj,transportInfo,return )
 
 void InitiatedSession_obj::addMedia(::Array< ::Dynamic> streams){
-            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_507_addMedia)
-HXLINE( 508)		if (::hx::IsNull( this->pc )) {
-HXLINE( 508)			HX_STACK_DO_THROW(HX_("tried to add media before PeerConnection exists",25,49,19,b2));
+            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_514_addMedia)
+HXLINE( 515)		if (::hx::IsNull( this->pc )) {
+HXLINE( 515)			HX_STACK_DO_THROW(HX_("tried to add media before PeerConnection exists",25,49,19,b2));
             		}
-HXLINE( 510)		::Array< ::Dynamic> _this = this->localDescription->media;
-HXDLIN( 510)		::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
-HXDLIN( 510)		{
-HXLINE( 510)			int _g = 0;
-HXDLIN( 510)			int _g1 = _this->length;
-HXDLIN( 510)			while((_g < _g1)){
-HXLINE( 510)				_g = (_g + 1);
-HXDLIN( 510)				int i = (_g - 1);
-HXDLIN( 510)				{
-HXLINE( 510)					::String inValue = ( ( ::borogove::calls::Media)(_hx_array_unsafe_get(_this,i)) )->mid;
-HXDLIN( 510)					result->__unsafe_set(i,inValue);
+HXLINE( 517)		::Array< ::Dynamic> _this = this->localDescription->media;
+HXDLIN( 517)		::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
+HXDLIN( 517)		{
+HXLINE( 517)			int _g = 0;
+HXDLIN( 517)			int _g1 = _this->length;
+HXDLIN( 517)			while((_g < _g1)){
+HXLINE( 517)				_g = (_g + 1);
+HXDLIN( 517)				int i = (_g - 1);
+HXDLIN( 517)				{
+HXLINE( 517)					::String inValue = ( ( ::borogove::calls::Media)(_hx_array_unsafe_get(_this,i)) )->mid;
+HXDLIN( 517)					result->__unsafe_set(i,inValue);
             				}
             			}
             		}
-HXLINE( 511)		{
-HXLINE( 511)			int _g2 = 0;
-HXDLIN( 511)			while((_g2 < streams->length)){
-HXLINE( 511)				 ::borogove::calls::MediaStream stream = streams->__get(_g2).StaticCast<  ::borogove::calls::MediaStream >();
-HXDLIN( 511)				_g2 = (_g2 + 1);
-HXLINE( 512)				{
-HXLINE( 512)					int _g3 = 0;
-HXDLIN( 512)					::Array< ::Dynamic> _g4 = stream->getTracks();
-HXDLIN( 512)					while((_g3 < _g4->length)){
-HXLINE( 512)						 ::borogove::calls::MediaStreamTrack track = _g4->__get(_g3).StaticCast<  ::borogove::calls::MediaStreamTrack >();
-HXDLIN( 512)						_g3 = (_g3 + 1);
-HXLINE( 513)						this->pc->addTrack(track,stream);
+HXLINE( 518)		{
+HXLINE( 518)			int _g2 = 0;
+HXDLIN( 518)			while((_g2 < streams->length)){
+HXLINE( 518)				 ::borogove::calls::MediaStream stream = streams->__get(_g2).StaticCast<  ::borogove::calls::MediaStream >();
+HXDLIN( 518)				_g2 = (_g2 + 1);
+HXLINE( 519)				{
+HXLINE( 519)					int _g3 = 0;
+HXDLIN( 519)					::Array< ::Dynamic> _g4 = stream->getTracks();
+HXDLIN( 519)					while((_g3 < _g4->length)){
+HXLINE( 519)						 ::borogove::calls::MediaStreamTrack track = _g4->__get(_g3).StaticCast<  ::borogove::calls::MediaStreamTrack >();
+HXDLIN( 519)						_g3 = (_g3 + 1);
+HXLINE( 520)						this->pc->addTrack(track,stream);
             					}
             				}
             			}
             		}
-HXLINE( 517)		this->setupLocalDescription(HX_("content-add",cd,a9,a1,10),result,true,null());
+HXLINE( 524)		this->setupLocalDescription(HX_("content-add",cd,a9,a1,10),result,true,null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(InitiatedSession_obj,addMedia,(void))
 
-void InitiatedSession_obj::addMedia__fromC(::cpp::Pointer< void* > streams,size_t streams__len){
-            	HX_STACKFRAME(&_hx_pos_a639e4155ff9c820_315_addMedia__fromC)
-HXLINE( 265)		::Array< ::Dynamic> _hx_tmp;
-HXDLIN( 265)		if (::hx::IsNull( streams )) {
-HXLINE( 265)			_hx_tmp = null();
-            		}
-            		else {
-HXLINE( 265)			::cpp::Pointer<  ::borogove::calls::MediaStream > _this = streams->reinterpret();
-HXDLIN( 265)			::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new();
-HXDLIN( 265)			::cpp::Pointer<  ::borogove::calls::MediaStream > tmp = _this;
-HXDLIN( 265)			result->setUnmanagedData(tmp,( (int)(streams__len) ));
-HXDLIN( 265)			_hx_tmp = result->copy();
-            		}
-HXLINE( 315)		this->addMedia(_hx_tmp);
-            	}
-
-
-HX_DEFINE_DYNAMIC_FUNC2(InitiatedSession_obj,addMedia__fromC,(void))
-
 int InitiatedSession_obj::callStatus(){
-            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_521_callStatus)
-HXDLIN( 521)		bool _hx_tmp;
-HXDLIN( 521)		bool _hx_tmp1;
-HXDLIN( 521)		if (::hx::IsNotNull( this->pc )) {
-HXDLIN( 521)			_hx_tmp1 = (this->pc->get_connectionState() == HX_("connecting",38,9f,12,f5));
+            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_529_callStatus)
+HXDLIN( 529)		bool _hx_tmp;
+HXDLIN( 529)		bool _hx_tmp1;
+HXDLIN( 529)		if (::hx::IsNotNull( this->pc )) {
+HXDLIN( 529)			_hx_tmp1 = (this->pc->get_connectionState() == HX_("connecting",38,9f,12,f5));
             		}
             		else {
-HXDLIN( 521)			_hx_tmp1 = true;
+HXDLIN( 529)			_hx_tmp1 = true;
             		}
-HXDLIN( 521)		if (!(_hx_tmp1)) {
-HXDLIN( 521)			_hx_tmp = (this->pc->get_connectionState() == HX_("new",60,d0,53,00));
+HXDLIN( 529)		if (!(_hx_tmp1)) {
+HXDLIN( 529)			_hx_tmp = (this->pc->get_connectionState() == HX_("new",60,d0,53,00));
             		}
             		else {
-HXDLIN( 521)			_hx_tmp = true;
+HXDLIN( 529)			_hx_tmp = true;
             		}
-HXDLIN( 521)		if (_hx_tmp) {
-HXLINE( 522)			return 3;
+HXDLIN( 529)		if (_hx_tmp) {
+HXLINE( 530)			return 3;
             		}
             		else {
-HXLINE( 523)			bool _hx_tmp2;
-HXDLIN( 523)			if ((this->pc->get_connectionState() != HX_("failed",bd,c5,fe,e7))) {
-HXLINE( 523)				_hx_tmp2 = (this->pc->get_connectionState() == HX_("closed",ac,a9,51,0e));
+HXLINE( 531)			bool _hx_tmp2;
+HXDLIN( 531)			if ((this->pc->get_connectionState() != HX_("failed",bd,c5,fe,e7))) {
+HXLINE( 531)				_hx_tmp2 = (this->pc->get_connectionState() == HX_("closed",ac,a9,51,0e));
             			}
             			else {
-HXLINE( 523)				_hx_tmp2 = true;
+HXLINE( 531)				_hx_tmp2 = true;
             			}
-HXDLIN( 523)			if (_hx_tmp2) {
-HXLINE( 524)				return 5;
+HXDLIN( 531)			if (_hx_tmp2) {
+HXLINE( 532)				return 5;
             			}
             			else {
-HXLINE( 526)				return 4;
+HXLINE( 534)				return 4;
             			}
             		}
-HXLINE( 521)		return null();
+HXLINE( 529)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(InitiatedSession_obj,callStatus,return )
 
 ::Array< ::Dynamic> InitiatedSession_obj::audioTracks(){
-            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_530_audioTracks)
-HXLINE( 531)		if (::hx::IsNull( this->pc )) {
-HXLINE( 531)			return ::Array_obj< ::Dynamic>::__new(0);
+            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_539_audioTracks)
+HXLINE( 540)		if (::hx::IsNull( this->pc )) {
+HXLINE( 540)			return ::Array_obj< ::Dynamic>::__new(0);
             		}
-HXLINE( 532)		::Array< ::Dynamic> _this = this->pc->getTransceivers();
-HXDLIN( 532)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 532)		{
-HXLINE( 532)			int _g1 = 0;
-HXDLIN( 532)			while((_g1 < _this->length)){
-HXLINE( 532)				 ::Dynamic v = _this->__get(_g1);
-HXDLIN( 532)				_g1 = (_g1 + 1);
-HXLINE( 533)				bool _hx_tmp;
-HXDLIN( 533)				bool _hx_tmp1;
-HXDLIN( 533)				bool _hx_tmp2;
-HXDLIN( 533)				if (::hx::IsNotNull( v->__Field(HX_("receiver",2f,45,fd,e2),::hx::paccDynamic) )) {
-HXLINE( 533)					_hx_tmp2 = ::hx::IsNotNull(  ::Dynamic(v->__Field(HX_("receiver",2f,45,fd,e2),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic) );
+HXLINE( 541)		::Array< ::Dynamic> _this = this->pc->getTransceivers();
+HXDLIN( 541)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 541)		{
+HXLINE( 541)			int _g1 = 0;
+HXDLIN( 541)			while((_g1 < _this->length)){
+HXLINE( 541)				 ::Dynamic v = _this->__get(_g1);
+HXDLIN( 541)				_g1 = (_g1 + 1);
+HXLINE( 542)				bool _hx_tmp;
+HXDLIN( 542)				bool _hx_tmp1;
+HXDLIN( 542)				bool _hx_tmp2;
+HXDLIN( 542)				if (::hx::IsNotNull( v->__Field(HX_("receiver",2f,45,fd,e2),::hx::paccDynamic) )) {
+HXLINE( 542)					_hx_tmp2 = ::hx::IsNotNull(  ::Dynamic(v->__Field(HX_("receiver",2f,45,fd,e2),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic) );
             				}
             				else {
-HXLINE( 533)					_hx_tmp2 = false;
+HXLINE( 542)					_hx_tmp2 = false;
             				}
-HXDLIN( 533)				if (_hx_tmp2) {
-HXLINE( 533)					_hx_tmp1 = (( ( ::borogove::calls::MediaStreamTrack)( ::Dynamic(v->__Field(HX_("receiver",2f,45,fd,e2),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)) )->get_kind() == HX_("audio",d6,78,80,27));
+HXDLIN( 542)				if (_hx_tmp2) {
+HXLINE( 542)					_hx_tmp1 = (( ( ::borogove::calls::MediaStreamTrack)( ::Dynamic(v->__Field(HX_("receiver",2f,45,fd,e2),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)) )->get_kind() == HX_("audio",d6,78,80,27));
             				}
             				else {
-HXLINE( 533)					_hx_tmp1 = false;
+HXLINE( 542)					_hx_tmp1 = false;
             				}
-HXDLIN( 533)				if (_hx_tmp1) {
-HXLINE( 533)					_hx_tmp = !(( ( ::borogove::calls::MediaStreamTrack)( ::Dynamic(v->__Field(HX_("receiver",2f,45,fd,e2),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)) )->get_muted());
+HXDLIN( 542)				if (_hx_tmp1) {
+HXLINE( 542)					_hx_tmp = !(( ( ::borogove::calls::MediaStreamTrack)( ::Dynamic(v->__Field(HX_("receiver",2f,45,fd,e2),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)) )->get_muted());
             				}
             				else {
-HXLINE( 533)					_hx_tmp = false;
+HXLINE( 542)					_hx_tmp = false;
             				}
-HXLINE( 532)				if (_hx_tmp) {
-HXLINE( 532)					_g->push(v);
+HXLINE( 541)				if (_hx_tmp) {
+HXLINE( 541)					_g->push(v);
             				}
             			}
             		}
-HXDLIN( 532)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_g->length);
-HXDLIN( 532)		{
-HXLINE( 532)			int _g2 = 0;
-HXDLIN( 532)			int _g3 = _g->length;
-HXDLIN( 532)			while((_g2 < _g3)){
-HXLINE( 532)				_g2 = (_g2 + 1);
-HXDLIN( 532)				int i = (_g2 - 1);
-HXDLIN( 532)				{
-HXLINE( 532)					 ::borogove::calls::MediaStreamTrack inValue = ( ( ::borogove::calls::MediaStreamTrack)( ::Dynamic(_hx_array_unsafe_get(_g,i)->__Field(HX_("receiver",2f,45,fd,e2),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)) );
-HXDLIN( 532)					result->__unsafe_set(i,inValue);
+HXDLIN( 541)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_g->length);
+HXDLIN( 541)		{
+HXLINE( 541)			int _g2 = 0;
+HXDLIN( 541)			int _g3 = _g->length;
+HXDLIN( 541)			while((_g2 < _g3)){
+HXLINE( 541)				_g2 = (_g2 + 1);
+HXDLIN( 541)				int i = (_g2 - 1);
+HXDLIN( 541)				{
+HXLINE( 541)					 ::borogove::calls::MediaStreamTrack inValue = ( ( ::borogove::calls::MediaStreamTrack)( ::Dynamic(_hx_array_unsafe_get(_g,i)->__Field(HX_("receiver",2f,45,fd,e2),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)) );
+HXDLIN( 541)					result->__unsafe_set(i,inValue);
             				}
             			}
             		}
-HXDLIN( 532)		return result;
+HXDLIN( 541)		return result;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(InitiatedSession_obj,audioTracks,return )
 
-size_t InitiatedSession_obj::audioTracks__fromC(void*** outPtr){
-            	HX_STACKFRAME(&_hx_pos_a639e4155ff9c820_311_audioTracks__fromC)
-HXDLIN( 311)		::Array< ::Dynamic> out = this->audioTracks();
-HXDLIN( 311)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 311)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 311)			{
-HXDLIN( 311)				int _g = 0;
-HXDLIN( 311)				while((_g < out->length)){
-HXDLIN( 311)					 ::borogove::calls::MediaStreamTrack el = out->__get(_g).StaticCast<  ::borogove::calls::MediaStreamTrack >();
-HXDLIN( 311)					_g = (_g + 1);
-HXDLIN( 311)					{
-HXDLIN( 311)						 ::Dynamic haxeObject = el;
-HXDLIN( 311)						void* ptr = haxeObject.mPtr;
-HXDLIN( 311)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 311)						{
-HXDLIN( 311)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 311)							if (::hx::IsNull( store )) {
-HXDLIN( 311)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
-            									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
-            									->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 311)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
-            							}
-            							else {
-HXDLIN( 311)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
-            							}
-            						}
-            					}
-            				}
-            			}
-HXDLIN( 311)			void** ptr1 = (void**)out->getBase();
-HXDLIN( 311)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 311)			{
-HXDLIN( 311)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 311)				if (::hx::IsNull( store1 )) {
-HXDLIN( 311)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
-            						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
-            						->setFixed(1,HX_("value",71,7f,b8,31),out));
-HXDLIN( 311)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
-            				}
-            				else {
-HXDLIN( 311)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
-            				}
-            			}
-HXDLIN( 311)			_hx_tmp->set_ref(ptr1);
-            		}
-HXDLIN( 311)		return ( (size_t)(out->length) );
-            	}
-
-
 ::Array< ::Dynamic> InitiatedSession_obj::videoTracks(){
-            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_537_videoTracks)
-HXLINE( 538)		if (::hx::IsNull( this->pc )) {
-HXLINE( 538)			return ::Array_obj< ::Dynamic>::__new(0);
+            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_547_videoTracks)
+HXLINE( 548)		if (::hx::IsNull( this->pc )) {
+HXLINE( 548)			return ::Array_obj< ::Dynamic>::__new(0);
             		}
-HXLINE( 539)		::Array< ::Dynamic> _this = this->pc->getTransceivers();
-HXDLIN( 539)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 539)		{
-HXLINE( 539)			int _g1 = 0;
-HXDLIN( 539)			while((_g1 < _this->length)){
-HXLINE( 539)				 ::Dynamic v = _this->__get(_g1);
-HXDLIN( 539)				_g1 = (_g1 + 1);
-HXLINE( 540)				bool _hx_tmp;
-HXDLIN( 540)				bool _hx_tmp1;
-HXDLIN( 540)				bool _hx_tmp2;
-HXDLIN( 540)				if (::hx::IsNotNull( v->__Field(HX_("receiver",2f,45,fd,e2),::hx::paccDynamic) )) {
-HXLINE( 540)					_hx_tmp2 = ::hx::IsNotNull(  ::Dynamic(v->__Field(HX_("receiver",2f,45,fd,e2),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic) );
+HXLINE( 549)		::Array< ::Dynamic> _this = this->pc->getTransceivers();
+HXDLIN( 549)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 549)		{
+HXLINE( 549)			int _g1 = 0;
+HXDLIN( 549)			while((_g1 < _this->length)){
+HXLINE( 549)				 ::Dynamic v = _this->__get(_g1);
+HXDLIN( 549)				_g1 = (_g1 + 1);
+HXLINE( 550)				bool _hx_tmp;
+HXDLIN( 550)				bool _hx_tmp1;
+HXDLIN( 550)				bool _hx_tmp2;
+HXDLIN( 550)				if (::hx::IsNotNull( v->__Field(HX_("receiver",2f,45,fd,e2),::hx::paccDynamic) )) {
+HXLINE( 550)					_hx_tmp2 = ::hx::IsNotNull(  ::Dynamic(v->__Field(HX_("receiver",2f,45,fd,e2),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic) );
             				}
             				else {
-HXLINE( 540)					_hx_tmp2 = false;
+HXLINE( 550)					_hx_tmp2 = false;
             				}
-HXDLIN( 540)				if (_hx_tmp2) {
-HXLINE( 540)					_hx_tmp1 = (( ( ::borogove::calls::MediaStreamTrack)( ::Dynamic(v->__Field(HX_("receiver",2f,45,fd,e2),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)) )->get_kind() == HX_("video",7b,14,fc,36));
+HXDLIN( 550)				if (_hx_tmp2) {
+HXLINE( 550)					_hx_tmp1 = (( ( ::borogove::calls::MediaStreamTrack)( ::Dynamic(v->__Field(HX_("receiver",2f,45,fd,e2),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)) )->get_kind() == HX_("video",7b,14,fc,36));
             				}
             				else {
-HXLINE( 540)					_hx_tmp1 = false;
+HXLINE( 550)					_hx_tmp1 = false;
             				}
-HXDLIN( 540)				if (_hx_tmp1) {
-HXLINE( 540)					_hx_tmp = !(( ( ::borogove::calls::MediaStreamTrack)( ::Dynamic(v->__Field(HX_("receiver",2f,45,fd,e2),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)) )->get_muted());
+HXDLIN( 550)				if (_hx_tmp1) {
+HXLINE( 550)					_hx_tmp = !(( ( ::borogove::calls::MediaStreamTrack)( ::Dynamic(v->__Field(HX_("receiver",2f,45,fd,e2),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)) )->get_muted());
             				}
             				else {
-HXLINE( 540)					_hx_tmp = false;
+HXLINE( 550)					_hx_tmp = false;
             				}
-HXLINE( 539)				if (_hx_tmp) {
-HXLINE( 539)					_g->push(v);
+HXLINE( 549)				if (_hx_tmp) {
+HXLINE( 549)					_g->push(v);
             				}
             			}
             		}
-HXDLIN( 539)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_g->length);
-HXDLIN( 539)		{
-HXLINE( 539)			int _g2 = 0;
-HXDLIN( 539)			int _g3 = _g->length;
-HXDLIN( 539)			while((_g2 < _g3)){
-HXLINE( 539)				_g2 = (_g2 + 1);
-HXDLIN( 539)				int i = (_g2 - 1);
-HXDLIN( 539)				{
-HXLINE( 539)					 ::borogove::calls::MediaStreamTrack inValue = ( ( ::borogove::calls::MediaStreamTrack)( ::Dynamic(_hx_array_unsafe_get(_g,i)->__Field(HX_("receiver",2f,45,fd,e2),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)) );
-HXDLIN( 539)					result->__unsafe_set(i,inValue);
+HXDLIN( 549)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_g->length);
+HXDLIN( 549)		{
+HXLINE( 549)			int _g2 = 0;
+HXDLIN( 549)			int _g3 = _g->length;
+HXDLIN( 549)			while((_g2 < _g3)){
+HXLINE( 549)				_g2 = (_g2 + 1);
+HXDLIN( 549)				int i = (_g2 - 1);
+HXDLIN( 549)				{
+HXLINE( 549)					 ::borogove::calls::MediaStreamTrack inValue = ( ( ::borogove::calls::MediaStreamTrack)( ::Dynamic(_hx_array_unsafe_get(_g,i)->__Field(HX_("receiver",2f,45,fd,e2),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)) );
+HXDLIN( 549)					result->__unsafe_set(i,inValue);
             				}
             			}
             		}
-HXDLIN( 539)		return result;
+HXDLIN( 549)		return result;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(InitiatedSession_obj,videoTracks,return )
 
-size_t InitiatedSession_obj::videoTracks__fromC(void*** outPtr){
-            	HX_STACKFRAME(&_hx_pos_a639e4155ff9c820_311_videoTracks__fromC)
-HXDLIN( 311)		::Array< ::Dynamic> out = this->videoTracks();
-HXDLIN( 311)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 311)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 311)			{
-HXDLIN( 311)				int _g = 0;
-HXDLIN( 311)				while((_g < out->length)){
-HXDLIN( 311)					 ::borogove::calls::MediaStreamTrack el = out->__get(_g).StaticCast<  ::borogove::calls::MediaStreamTrack >();
-HXDLIN( 311)					_g = (_g + 1);
-HXDLIN( 311)					{
-HXDLIN( 311)						 ::Dynamic haxeObject = el;
-HXDLIN( 311)						void* ptr = haxeObject.mPtr;
-HXDLIN( 311)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 311)						{
-HXDLIN( 311)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 311)							if (::hx::IsNull( store )) {
-HXDLIN( 311)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
-            									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
-            									->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 311)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
-            							}
-            							else {
-HXDLIN( 311)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
-            							}
-            						}
-            					}
-            				}
-            			}
-HXDLIN( 311)			void** ptr1 = (void**)out->getBase();
-HXDLIN( 311)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 311)			{
-HXDLIN( 311)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 311)				if (::hx::IsNull( store1 )) {
-HXDLIN( 311)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
-            						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
-            						->setFixed(1,HX_("value",71,7f,b8,31),out));
-HXDLIN( 311)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
-            				}
-            				else {
-HXDLIN( 311)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
-            				}
-            			}
-HXDLIN( 311)			_hx_tmp->set_ref(ptr1);
-            		}
-HXDLIN( 311)		return ( (size_t)(out->length) );
-            	}
-
-
  ::borogove::calls::DTMFSender InitiatedSession_obj::dtmf(){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		bool _hx_run( ::Dynamic t){
-            			HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_546_dtmf)
-HXLINE( 546)			bool transceiver;
-HXDLIN( 546)			bool transceiver1;
-HXDLIN( 546)			if (::hx::IsNotNull( t->__Field(HX_("sender",b5,c7,84,6b),::hx::paccDynamic) )) {
-HXLINE( 546)				transceiver1 = ::hx::IsNotNull(  ::Dynamic(t->__Field(HX_("sender",b5,c7,84,6b),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic) );
+            			HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_557_dtmf)
+HXLINE( 557)			bool transceiver;
+HXDLIN( 557)			bool transceiver1;
+HXDLIN( 557)			if (::hx::IsNotNull( t->__Field(HX_("sender",b5,c7,84,6b),::hx::paccDynamic) )) {
+HXLINE( 557)				transceiver1 = ::hx::IsNotNull(  ::Dynamic(t->__Field(HX_("sender",b5,c7,84,6b),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic) );
             			}
             			else {
-HXLINE( 546)				transceiver1 = false;
+HXLINE( 557)				transceiver1 = false;
             			}
-HXDLIN( 546)			if (transceiver1) {
-HXLINE( 546)				transceiver = (( ( ::borogove::calls::MediaStreamTrack)( ::Dynamic(t->__Field(HX_("sender",b5,c7,84,6b),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)) )->get_kind() == HX_("audio",d6,78,80,27));
+HXDLIN( 557)			if (transceiver1) {
+HXLINE( 557)				transceiver = (( ( ::borogove::calls::MediaStreamTrack)( ::Dynamic(t->__Field(HX_("sender",b5,c7,84,6b),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)) )->get_kind() == HX_("audio",d6,78,80,27));
             			}
             			else {
-HXLINE( 546)				transceiver = false;
+HXLINE( 557)				transceiver = false;
             			}
-HXDLIN( 546)			if (transceiver) {
-HXLINE( 546)				return !(( ( ::borogove::calls::MediaStreamTrack)( ::Dynamic(t->__Field(HX_("sender",b5,c7,84,6b),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)) )->get_muted());
+HXDLIN( 557)			if (transceiver) {
+HXLINE( 557)				return !(( ( ::borogove::calls::MediaStreamTrack)( ::Dynamic(t->__Field(HX_("sender",b5,c7,84,6b),::hx::paccDynamic))->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)) )->get_muted());
             			}
             			else {
-HXLINE( 546)				return false;
+HXLINE( 557)				return false;
             			}
-HXDLIN( 546)			return false;
+HXDLIN( 557)			return false;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_544_dtmf)
-HXLINE( 545)		if (::hx::IsNull( this->pc )) {
-HXLINE( 545)			return null();
+            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_555_dtmf)
+HXLINE( 556)		if (::hx::IsNull( this->pc )) {
+HXLINE( 556)			return null();
             		}
-HXLINE( 546)		 ::Dynamic transceiver = ::Lambda_obj::find(this->pc->getTransceivers(), ::Dynamic(new _hx_Closure_0()));
-HXLINE( 547)		if (::hx::IsNull( transceiver )) {
-HXLINE( 547)			return null();
+HXLINE( 557)		 ::Dynamic transceiver = ::Lambda_obj::find(this->pc->getTransceivers(), ::Dynamic(new _hx_Closure_0()));
+HXLINE( 558)		if (::hx::IsNull( transceiver )) {
+HXLINE( 558)			return null();
             		}
-HXLINE( 548)		return ( ( ::borogove::calls::DTMFSender)( ::Dynamic(transceiver->__Field(HX_("sender",b5,c7,84,6b),::hx::paccDynamic))->__Field(HX_("dtmf",e9,ba,71,42),::hx::paccDynamic)) );
+HXLINE( 559)		return ( ( ::borogove::calls::DTMFSender)( ::Dynamic(transceiver->__Field(HX_("sender",b5,c7,84,6b),::hx::paccDynamic))->__Field(HX_("dtmf",e9,ba,71,42),::hx::paccDynamic)) );
             	}
 
 
@@ -983,77 +842,77 @@ HX_DEFINE_DYNAMIC_FUNC0(InitiatedSession_obj,dtmf,return )
 void InitiatedSession_obj::sendIceCandidate( ::Dynamic candidate){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,candidate) HXARGC(1)
             		bool _hx_run( ::borogove::calls::Media media){
-            			HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_561_sendIceCandidate)
-HXLINE( 561)			return ::hx::IsEq( media->mid,candidate->__Field(HX_("sdpMid",09,30,5f,d9),::hx::paccDynamic) );
+            			HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_572_sendIceCandidate)
+HXLINE( 572)			return ::hx::IsEq( media->mid,candidate->__Field(HX_("sdpMid",09,30,5f,d9),::hx::paccDynamic) );
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             		bool _hx_run( ::borogove::calls::Attribute attr){
-            			HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_573_sendIceCandidate)
-HXLINE( 573)			return (attr->key == HX_("ice-pwd",3b,03,2f,e9));
+            			HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_584_sendIceCandidate)
+HXLINE( 584)			return (attr->key == HX_("ice-pwd",3b,03,2f,e9));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_551_sendIceCandidate)
-HXLINE( 552)		bool _hx_tmp;
-HXDLIN( 552)		if (::hx::IsNotNull( candidate )) {
-HXLINE( 552)			_hx_tmp = ::hx::IsEq( candidate->__Field(HX_("candidate",43,34,d8,d0),::hx::paccDynamic),HX_("",00,00,00,00) );
+            	HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_562_sendIceCandidate)
+HXLINE( 563)		bool _hx_tmp;
+HXDLIN( 563)		if (::hx::IsNotNull( candidate )) {
+HXLINE( 563)			_hx_tmp = ::hx::IsEq( candidate->__Field(HX_("candidate",43,34,d8,d0),::hx::paccDynamic),HX_("",00,00,00,00) );
             		}
             		else {
-HXLINE( 552)			_hx_tmp = true;
+HXLINE( 563)			_hx_tmp = true;
             		}
-HXDLIN( 552)		if (_hx_tmp) {
-HXLINE( 553)			if (::hx::IsNotNull( this->candidatesDone )) {
-HXLINE( 553)				this->candidatesDone();
+HXDLIN( 563)		if (_hx_tmp) {
+HXLINE( 564)			if (::hx::IsNotNull( this->candidatesDone )) {
+HXLINE( 564)				this->candidatesDone();
             			}
-HXLINE( 554)			return;
+HXLINE( 565)			return;
             		}
-HXLINE( 556)		if (::hx::IsNotNull( this->candidatesDone )) {
-HXLINE( 556)			return;
+HXLINE( 567)		if (::hx::IsNotNull( this->candidatesDone )) {
+HXLINE( 567)			return;
             		}
-HXLINE( 557)		if (::hx::IsNull( this->localDescription )) {
-HXLINE( 558)			this->queuedOutboundCandidate->push(candidate);
-HXLINE( 559)			return;
+HXLINE( 568)		if (::hx::IsNull( this->localDescription )) {
+HXLINE( 569)			this->queuedOutboundCandidate->push(candidate);
+HXLINE( 570)			return;
             		}
-HXLINE( 561)		 ::borogove::calls::Media media = ( ( ::borogove::calls::Media)(::Lambda_obj::find(this->localDescription->media, ::Dynamic(new _hx_Closure_0(candidate)))) );
-HXLINE( 562)		if (::hx::IsNull( media )) {
-HXLINE( 562)			HX_STACK_DO_THROW( ::Dynamic((HX_("Unknown media: ",d4,41,45,83) + candidate->__Field(HX_("sdpMid",09,30,5f,d9),::hx::paccDynamic))));
+HXLINE( 572)		 ::borogove::calls::Media media = ( ( ::borogove::calls::Media)(::Lambda_obj::find(this->localDescription->media, ::Dynamic(new _hx_Closure_0(candidate)))) );
+HXLINE( 573)		if (::hx::IsNull( media )) {
+HXLINE( 573)			HX_STACK_DO_THROW( ::Dynamic((HX_("Unknown media: ",d4,41,45,83) + candidate->__Field(HX_("sdpMid",09,30,5f,d9),::hx::paccDynamic))));
             		}
-HXLINE( 565)		::String media1 = media->mid;
-HXLINE( 566)		::String media2 = media->media;
-HXLINE( 567)		::String media3 = media->connectionData;
-HXLINE( 568)		::String media4 = media->port;
-HXLINE( 569)		::String media5 = media->protocol;
-HXLINE( 571)		 ::borogove::calls::Attribute transportInfo = ::borogove::calls::Attribute_obj::parse(( (::String)(candidate->__Field(HX_("candidate",43,34,d8,d0),::hx::paccDynamic)) ));
-HXLINE( 572)		 ::borogove::calls::Attribute transportInfo1 =  ::borogove::calls::Attribute_obj::__alloc( HX_CTX ,HX_("ice-ufrag",65,c2,31,ab),( (::String)(candidate->__Field(HX_("usernameFragment",06,a8,37,89),::hx::paccDynamic)) ));
-HXLINE( 573)		 ::borogove::calls::Attribute tmp = ( ( ::borogove::calls::Attribute)(::Lambda_obj::find(media->attributes, ::Dynamic(new _hx_Closure_1()))) );
-HXDLIN( 573)		 ::borogove::calls::Attribute transportInfo2;
-HXDLIN( 573)		if (::hx::IsNotNull( tmp )) {
-HXLINE( 573)			transportInfo2 = tmp;
+HXLINE( 576)		::String media1 = media->mid;
+HXLINE( 577)		::String media2 = media->media;
+HXLINE( 578)		::String media3 = media->connectionData;
+HXLINE( 579)		::String media4 = media->port;
+HXLINE( 580)		::String media5 = media->protocol;
+HXLINE( 582)		 ::borogove::calls::Attribute transportInfo = ::borogove::calls::Attribute_obj::parse(( (::String)(candidate->__Field(HX_("candidate",43,34,d8,d0),::hx::paccDynamic)) ));
+HXLINE( 583)		 ::borogove::calls::Attribute transportInfo1 =  ::borogove::calls::Attribute_obj::__alloc( HX_CTX ,HX_("ice-ufrag",65,c2,31,ab),( (::String)(candidate->__Field(HX_("usernameFragment",06,a8,37,89),::hx::paccDynamic)) ));
+HXLINE( 584)		 ::borogove::calls::Attribute tmp = ( ( ::borogove::calls::Attribute)(::Lambda_obj::find(media->attributes, ::Dynamic(new _hx_Closure_1()))) );
+HXDLIN( 584)		 ::borogove::calls::Attribute transportInfo2;
+HXDLIN( 584)		if (::hx::IsNotNull( tmp )) {
+HXLINE( 584)			transportInfo2 = tmp;
             		}
             		else {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_2) HXARGC(1)
             			bool _hx_run( ::borogove::calls::Attribute attr){
-            				HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_574_sendIceCandidate)
-HXLINE( 574)				return (attr->key == HX_("ice-pwd",3b,03,2f,e9));
+            				HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_585_sendIceCandidate)
+HXLINE( 585)				return (attr->key == HX_("ice-pwd",3b,03,2f,e9));
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 573)			transportInfo2 = ( ( ::borogove::calls::Attribute)(::Lambda_obj::find(this->localDescription->attributes, ::Dynamic(new _hx_Closure_2()))) );
+HXLINE( 584)			transportInfo2 = ( ( ::borogove::calls::Attribute)(::Lambda_obj::find(this->localDescription->attributes, ::Dynamic(new _hx_Closure_2()))) );
             		}
-HXLINE( 564)		 ::borogove::calls::Media transportInfo3 =  ::borogove::calls::Media_obj::__alloc( HX_CTX ,media1,media2,media3,media4,media5,::Array_obj< ::Dynamic>::__new(3)->init(0,transportInfo)->init(1,transportInfo1)->init(2,transportInfo2),media->formats);
-HXLINE( 578)		::String transportInfo4 = this->get_sid();
-HXLINE( 563)		 ::borogove::Stanza transportInfo5 =  ::borogove::calls::TransportInfo_obj::__alloc( HX_CTX ,transportInfo3,transportInfo4)->toStanza(this->initiator);
-HXLINE( 580)		{
-HXLINE( 580)			 ::Dynamic this1 = transportInfo5->attr;
-HXDLIN( 580)			::Reflect_obj::setField(this1,HX_("to",7b,65,00,00),this->counterpart->asString());
+HXLINE( 575)		 ::borogove::calls::Media transportInfo3 =  ::borogove::calls::Media_obj::__alloc( HX_CTX ,media1,media2,media3,media4,media5,::Array_obj< ::Dynamic>::__new(3)->init(0,transportInfo)->init(1,transportInfo1)->init(2,transportInfo2),media->formats);
+HXLINE( 589)		::String transportInfo4 = this->get_sid();
+HXLINE( 574)		 ::borogove::Stanza transportInfo5 =  ::borogove::calls::TransportInfo_obj::__alloc( HX_CTX ,transportInfo3,transportInfo4)->toStanza(this->initiator);
+HXLINE( 591)		{
+HXLINE( 591)			 ::Dynamic this1 = transportInfo5->attr;
+HXDLIN( 591)			::Reflect_obj::setField(this1,HX_("to",7b,65,00,00),this->counterpart->asString());
             		}
-HXLINE( 581)		{
-HXLINE( 581)			 ::Dynamic this2 = transportInfo5->attr;
-HXDLIN( 581)			::Reflect_obj::setField(this2,HX_("id",db,5b,00,00),::borogove::ID_obj::medium());
+HXLINE( 592)		{
+HXLINE( 592)			 ::Dynamic this2 = transportInfo5->attr;
+HXDLIN( 592)			::Reflect_obj::setField(this2,HX_("id",db,5b,00,00),::borogove::ID_obj::medium());
             		}
-HXLINE( 582)		this->client->sendStanza(transportInfo5);
+HXLINE( 593)		this->client->sendStanza(transportInfo5);
             	}
 
 
@@ -1062,75 +921,75 @@ HX_DEFINE_DYNAMIC_FUNC1(InitiatedSession_obj,sendIceCandidate,(void))
 void InitiatedSession_obj::supplyMedia(::Array< ::Dynamic> streams){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::borogove::calls::InitiatedSession,_gthis,::Array< ::Dynamic>,streams) HXARGC(0)
             		void _hx_run(){
-            			HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_586_supplyMedia)
-HXLINE( 587)			{
-HXLINE( 587)				int _g = 0;
-HXDLIN( 587)				while((_g < streams->length)){
-HXLINE( 587)					 ::borogove::calls::MediaStream stream = streams->__get(_g).StaticCast<  ::borogove::calls::MediaStream >();
-HXDLIN( 587)					_g = (_g + 1);
-HXLINE( 588)					{
-HXLINE( 588)						int _g1 = 0;
-HXDLIN( 588)						::Array< ::Dynamic> _g2 = stream->getTracks();
-HXDLIN( 588)						while((_g1 < _g2->length)){
-HXLINE( 588)							 ::borogove::calls::MediaStreamTrack track = _g2->__get(_g1).StaticCast<  ::borogove::calls::MediaStreamTrack >();
-HXDLIN( 588)							_g1 = (_g1 + 1);
-HXLINE( 589)							_gthis->pc->addTrack(track,stream);
+            			HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_597_supplyMedia)
+HXLINE( 598)			{
+HXLINE( 598)				int _g = 0;
+HXDLIN( 598)				while((_g < streams->length)){
+HXLINE( 598)					 ::borogove::calls::MediaStream stream = streams->__get(_g).StaticCast<  ::borogove::calls::MediaStream >();
+HXDLIN( 598)					_g = (_g + 1);
+HXLINE( 599)					{
+HXLINE( 599)						int _g1 = 0;
+HXDLIN( 599)						::Array< ::Dynamic> _g2 = stream->getTracks();
+HXDLIN( 599)						while((_g1 < _g2->length)){
+HXLINE( 599)							 ::borogove::calls::MediaStreamTrack track = _g2->__get(_g1).StaticCast<  ::borogove::calls::MediaStreamTrack >();
+HXDLIN( 599)							_g1 = (_g1 + 1);
+HXLINE( 600)							_gthis->pc->addTrack(track,stream);
             						}
             					}
             				}
             			}
-HXLINE( 593)			if (::hx::IsNull( _gthis->afterMedia )) {
+HXLINE( 604)			if (::hx::IsNull( _gthis->afterMedia )) {
             				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::calls::InitiatedSession,_gthis) HXARGC(1)
             				void _hx_run( ::Dynamic e){
-            					HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_594_supplyMedia)
-HXLINE( 595)					 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
-HXDLIN( 595)					::String _hx_tmp1;
-HXDLIN( 595)					if (::hx::IsNull( e )) {
-HXLINE( 595)						_hx_tmp1 = HX_("null",87,9e,0e,49);
+            					HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_605_supplyMedia)
+HXLINE( 606)					 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
+HXDLIN( 606)					::String _hx_tmp1;
+HXDLIN( 606)					if (::hx::IsNull( e )) {
+HXLINE( 606)						_hx_tmp1 = HX_("null",87,9e,0e,49);
             					}
             					else {
-HXLINE( 595)						_hx_tmp1 = ::Std_obj::string(e);
+HXLINE( 606)						_hx_tmp1 = ::Std_obj::string(e);
             					}
-HXDLIN( 595)					_hx_tmp(HX_("supplyMedia error",9d,f9,a0,33), ::Dynamic(::hx::Anon_obj::Create(5)
+HXDLIN( 606)					_hx_tmp(HX_("supplyMedia error",9d,f9,a0,33), ::Dynamic(::hx::Anon_obj::Create(5)
             						->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.calls.InitiatedSession",f1,c4,07,ac))
             						->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,_hx_tmp1))
             						->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("supplyMedia",35,0c,c9,9a))
             						->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/calls/Session.hx",30,90,a7,33))
-            						->setFixed(4,HX_("lineNumber",dd,81,22,76),595)));
-HXLINE( 596)					_gthis->pc->close();
+            						->setFixed(4,HX_("lineNumber",dd,81,22,76),606)));
+HXLINE( 607)					_gthis->pc->close();
             				}
             				HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 594)				::thenshim::PromiseTools_obj::catch_(_gthis->onPeerConnection(), ::Dynamic(new _hx_Closure_0(_gthis)));
+HXLINE( 605)				::thenshim::PromiseTools_obj::catch_(_gthis->onPeerConnection(), ::Dynamic(new _hx_Closure_0(_gthis)));
             			}
             			else {
-HXLINE( 599)				_gthis->afterMedia();
+HXLINE( 610)				_gthis->afterMedia();
             			}
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_585_supplyMedia)
-HXDLIN( 585)		 ::borogove::calls::InitiatedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 586)		this->setupPeerConnection( ::Dynamic(new _hx_Closure_1(_gthis,streams)));
+            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_596_supplyMedia)
+HXDLIN( 596)		 ::borogove::calls::InitiatedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 597)		this->setupPeerConnection( ::Dynamic(new _hx_Closure_1(_gthis,streams)));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(InitiatedSession_obj,supplyMedia,(void))
 
 void InitiatedSession_obj::supplyMedia__fromC(::cpp::Pointer< void* > streams,size_t streams__len){
-            	HX_STACKFRAME(&_hx_pos_a639e4155ff9c820_315_supplyMedia__fromC)
-HXLINE( 265)		::Array< ::Dynamic> _hx_tmp;
-HXDLIN( 265)		if (::hx::IsNull( streams )) {
-HXLINE( 265)			_hx_tmp = null();
+            	HX_STACKFRAME(&_hx_pos_a639e4155ff9c820_339_supplyMedia__fromC)
+HXLINE( 282)		::Array< ::Dynamic> _hx_tmp;
+HXDLIN( 282)		if (::hx::IsNull( streams )) {
+HXLINE( 282)			_hx_tmp = null();
             		}
             		else {
-HXLINE( 265)			::cpp::Pointer<  ::borogove::calls::MediaStream > _this = streams->reinterpret();
-HXDLIN( 265)			::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new();
-HXDLIN( 265)			::cpp::Pointer<  ::borogove::calls::MediaStream > tmp = _this;
-HXDLIN( 265)			result->setUnmanagedData(tmp,( (int)(streams__len) ));
-HXDLIN( 265)			_hx_tmp = result->copy();
+HXLINE( 282)			::cpp::Pointer<  ::borogove::calls::MediaStream > _this = streams->reinterpret();
+HXDLIN( 282)			::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new();
+HXDLIN( 282)			::cpp::Pointer<  ::borogove::calls::MediaStream > tmp = _this;
+HXDLIN( 282)			result->setUnmanagedData(tmp,( (int)(streams__len) ));
+HXDLIN( 282)			_hx_tmp = result->copy();
             		}
-HXLINE( 315)		this->supplyMedia(_hx_tmp);
+HXLINE( 339)		this->supplyMedia(_hx_tmp);
             	}
 
 
@@ -1141,8 +1000,8 @@ void InitiatedSession_obj::setupPeerConnection( ::Dynamic callback){
             		void _hx_run(::Array< ::Dynamic> servers){
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::calls::InitiatedSession,_gthis) HXARGC(1)
             			void _hx_run( ::Dynamic event){
-            				HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_612_setupPeerConnection)
-HXLINE( 612)				_gthis->client->trigger(HX_("call/track",1a,e7,80,d7), ::Dynamic(::hx::Anon_obj::Create(3)
+            				HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_623_setupPeerConnection)
+HXLINE( 623)				_gthis->client->trigger(HX_("call/track",1a,e7,80,d7), ::Dynamic(::hx::Anon_obj::Create(3)
             					->setFixed(0,HX_("session",56,17,98,93),_gthis)
             					->setFixed(1,HX_("streams",f3,db,44,f6), ::Dynamic(event->__Field(HX_("streams",f3,db,44,f6),::hx::paccDynamic)))
             					->setFixed(2,HX_("track",8b,8e,1f,16), ::Dynamic(event->__Field(HX_("track",8b,8e,1f,16),::hx::paccDynamic)))));
@@ -1151,76 +1010,76 @@ HXLINE( 612)				_gthis->client->trigger(HX_("call/track",1a,e7,80,d7), ::Dynamic
 
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             			void _hx_run( ::Dynamic event){
-            				HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_614_setupPeerConnection)
-HXLINE( 614)				::haxe::Log_obj::trace(HX_("renegotiate",2b,b9,fb,a1), ::Dynamic(::hx::Anon_obj::Create(5)
+            				HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_625_setupPeerConnection)
+HXLINE( 625)				::haxe::Log_obj::trace(HX_("renegotiate",2b,b9,fb,a1), ::Dynamic(::hx::Anon_obj::Create(5)
             					->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.calls.InitiatedSession",f1,c4,07,ac))
             					->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,event))
             					->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("setupPeerConnection",bd,67,52,ae))
             					->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/calls/Session.hx",30,90,a7,33))
-            					->setFixed(4,HX_("lineNumber",dd,81,22,76),614)));
+            					->setFixed(4,HX_("lineNumber",dd,81,22,76),625)));
             			}
             			HX_END_LOCAL_FUNC1((void))
 
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_2, ::borogove::calls::InitiatedSession,_gthis) HXARGC(1)
             			void _hx_run( ::Dynamic event){
-            				HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_616_setupPeerConnection)
-HXLINE( 616)				_gthis->sendIceCandidate(event->__Field(HX_("candidate",43,34,d8,d0),::hx::paccDynamic));
+            				HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_627_setupPeerConnection)
+HXLINE( 627)				_gthis->sendIceCandidate(event->__Field(HX_("candidate",43,34,d8,d0),::hx::paccDynamic));
             			}
             			HX_END_LOCAL_FUNC1((void))
 
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_3, ::borogove::calls::InitiatedSession,_gthis) HXARGC(1)
             			void _hx_run( ::Dynamic event){
-            				HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_618_setupPeerConnection)
-HXLINE( 619)				if (::hx::IsNotNull( _gthis->pc )) {
-HXLINE( 619)					_gthis->client->trigger(HX_("call/updateStatus",6c,f5,e6,ec), ::Dynamic(::hx::Anon_obj::Create(1)
+            				HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_629_setupPeerConnection)
+HXLINE( 630)				if (::hx::IsNotNull( _gthis->pc )) {
+HXLINE( 630)					_gthis->client->trigger(HX_("call/updateStatus",6c,f5,e6,ec), ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("session",56,17,98,93),_gthis)));
             				}
-HXLINE( 620)				bool _hx_tmp;
-HXDLIN( 620)				if (::hx::IsNotNull( _gthis->pc )) {
-HXLINE( 620)					if ((_gthis->pc->get_connectionState() != HX_("closed",ac,a9,51,0e))) {
-HXLINE( 620)						_hx_tmp = (_gthis->pc->get_connectionState() == HX_("failed",bd,c5,fe,e7));
+HXLINE( 631)				bool _hx_tmp;
+HXDLIN( 631)				if (::hx::IsNotNull( _gthis->pc )) {
+HXLINE( 631)					if ((_gthis->pc->get_connectionState() != HX_("closed",ac,a9,51,0e))) {
+HXLINE( 631)						_hx_tmp = (_gthis->pc->get_connectionState() == HX_("failed",bd,c5,fe,e7));
             					}
             					else {
-HXLINE( 620)						_hx_tmp = true;
+HXLINE( 631)						_hx_tmp = true;
             					}
             				}
             				else {
-HXLINE( 620)					_hx_tmp = false;
+HXLINE( 631)					_hx_tmp = false;
             				}
-HXDLIN( 620)				if (_hx_tmp) {
-HXLINE( 621)					 ::borogove::Client _gthis1 = _gthis->client;
-HXLINE( 622)					::String _hx_tmp1 = _gthis->counterpart->asString();
-HXDLIN( 622)					 ::borogove::Stanza _hx_tmp2 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(3)
+HXDLIN( 631)				if (_hx_tmp) {
+HXLINE( 632)					 ::borogove::Client _gthis1 = _gthis->client;
+HXLINE( 633)					::String _hx_tmp1 = _gthis->counterpart->asString();
+HXDLIN( 633)					 ::borogove::Stanza _hx_tmp2 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("iq",e8,5b,00,00), ::Dynamic(::hx::Anon_obj::Create(3)
             						->setFixed(0,HX_("id",db,5b,00,00),::borogove::ID_obj::medium())
             						->setFixed(1,HX_("to",7b,65,00,00),_hx_tmp1)
             						->setFixed(2,HX_("type",ba,f2,08,4d),HX_("set",a2,9b,57,00))));
-HXLINE( 621)					_gthis1->sendStanza(_hx_tmp2->tag(HX_("jingle",31,27,eb,1f), ::Dynamic(::hx::Anon_obj::Create(3)
+HXLINE( 632)					_gthis1->sendStanza(_hx_tmp2->tag(HX_("jingle",31,27,eb,1f), ::Dynamic(::hx::Anon_obj::Create(3)
             						->setFixed(0,HX_("sid",0e,9f,57,00),_gthis->get_sid())
             						->setFixed(1,HX_("action",b6,3b,46,16),HX_("session-terminate",6a,23,dc,12))
             						->setFixed(2,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle:1",44,c4,fe,f7))))->tag(HX_("reason",c4,0f,9d,fc),null())->tag(HX_("connectivity-error",f2,07,09,18),null())->up()->up()->up());
-HXLINE( 627)					_gthis->terminate();
+HXLINE( 638)					_gthis->terminate();
             				}
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-            			HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_609_setupPeerConnection)
-HXLINE( 610)			_gthis->pc =  ::borogove::calls::PeerConnection_obj::__alloc( HX_CTX , ::Dynamic(::hx::Anon_obj::Create(1)
+            			HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_620_setupPeerConnection)
+HXLINE( 621)			_gthis->pc =  ::borogove::calls::PeerConnection_obj::__alloc( HX_CTX , ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("iceServers",45,14,49,d2),servers)),null());
-HXLINE( 611)			_gthis->pc->addEventListener(HX_("track",8b,8e,1f,16), ::Dynamic(new _hx_Closure_0(_gthis)));
-HXLINE( 614)			_gthis->pc->addEventListener(HX_("negotiationneeded",d6,4d,d0,53), ::Dynamic(new _hx_Closure_1()));
-HXLINE( 615)			_gthis->pc->addEventListener(HX_("icecandidate",98,ef,c0,7b), ::Dynamic(new _hx_Closure_2(_gthis)));
-HXLINE( 618)			_gthis->pc->addEventListener(HX_("connectionstatechange",e3,a2,87,36), ::Dynamic(new _hx_Closure_3(_gthis)));
-HXLINE( 630)			callback();
+HXLINE( 622)			_gthis->pc->addEventListener(HX_("track",8b,8e,1f,16), ::Dynamic(new _hx_Closure_0(_gthis)));
+HXLINE( 625)			_gthis->pc->addEventListener(HX_("negotiationneeded",d6,4d,d0,53), ::Dynamic(new _hx_Closure_1()));
+HXLINE( 626)			_gthis->pc->addEventListener(HX_("icecandidate",98,ef,c0,7b), ::Dynamic(new _hx_Closure_2(_gthis)));
+HXLINE( 629)			_gthis->pc->addEventListener(HX_("connectionstatechange",e3,a2,87,36), ::Dynamic(new _hx_Closure_3(_gthis)));
+HXLINE( 641)			callback();
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_604_setupPeerConnection)
-HXDLIN( 604)		 ::borogove::calls::InitiatedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 605)		if (::hx::IsNotNull( this->pc )) {
-HXLINE( 606)			callback();
-HXLINE( 607)			return;
+            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_615_setupPeerConnection)
+HXDLIN( 615)		 ::borogove::calls::InitiatedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 616)		if (::hx::IsNotNull( this->pc )) {
+HXLINE( 617)			callback();
+HXLINE( 618)			return;
             		}
-HXLINE( 609)		this->client->getIceServers( ::Dynamic(new _hx_Closure_4(_gthis,callback)));
+HXLINE( 620)		this->client->getIceServers( ::Dynamic(new _hx_Closure_4(_gthis,callback)));
             	}
 
 
@@ -1229,116 +1088,116 @@ HX_DEFINE_DYNAMIC_FUNC1(InitiatedSession_obj,setupPeerConnection,(void))
 ::Dynamic InitiatedSession_obj::setupLocalDescription(::String type,::Array< ::String > filterMedia, ::Dynamic __o_filterOut, ::Dynamic beforeSend){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_4, ::borogove::calls::InitiatedSession,_gthis,::String,type) HXARGC(1)
             		::Dynamic _hx_run( ::Dynamic _){
-            			HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_635_setupLocalDescription)
-HXLINE( 636)			 ::borogove::Client _gthis1 = _gthis->client;
-HXDLIN( 636)			::String caps = _gthis->counterpart->asBare()->asString();
-HXDLIN( 636)			 ::borogove::Caps caps1 = _gthis1->getDirectChat(caps,null())->getResourceCaps(_gthis->counterpart->resource);
-HXLINE( 637)			bool _hx_tmp;
-HXDLIN( 637)			bool _hx_tmp1;
-HXDLIN( 637)			if ((type != HX_("session-initiate",70,2d,30,f7))) {
-HXLINE( 637)				_hx_tmp1 = (type == HX_("session-accept",5f,92,e7,a8));
+            			HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_646_setupLocalDescription)
+HXLINE( 647)			 ::borogove::Client _gthis1 = _gthis->client;
+HXDLIN( 647)			::String caps = _gthis->counterpart->asBare()->asString();
+HXDLIN( 647)			 ::borogove::Caps caps1 = _gthis1->getDirectChat(caps,null())->getResourceCaps(_gthis->counterpart->resource);
+HXLINE( 648)			bool _hx_tmp;
+HXDLIN( 648)			bool _hx_tmp1;
+HXDLIN( 648)			if ((type != HX_("session-initiate",70,2d,30,f7))) {
+HXLINE( 648)				_hx_tmp1 = (type == HX_("session-accept",5f,92,e7,a8));
             			}
             			else {
-HXLINE( 637)				_hx_tmp1 = true;
+HXLINE( 648)				_hx_tmp1 = true;
             			}
-HXDLIN( 637)			if (_hx_tmp1) {
-HXLINE( 637)				_hx_tmp = caps1->features->contains(HX_("urn:ietf:rfc:3264",2b,35,57,2c));
+HXDLIN( 648)			if (_hx_tmp1) {
+HXLINE( 648)				_hx_tmp = caps1->features->contains(HX_("urn:ietf:rfc:3264",2b,35,57,2c));
             			}
             			else {
-HXLINE( 637)				_hx_tmp = false;
+HXLINE( 648)				_hx_tmp = false;
             			}
-HXDLIN( 637)			if (_hx_tmp) {
+HXDLIN( 648)			if (_hx_tmp) {
             				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_3, ::borogove::calls::InitiatedSession,_gthis) HXARGC(2)
             				void _hx_run( ::Dynamic resolve, ::Dynamic reject){
             					HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::borogove::calls::InitiatedSession,_gthis, ::Dynamic,resolve) HXARGC(0)
             					void _hx_run(){
             						HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(0)
             						void _hx_run(){
-            							HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_640_setupLocalDescription)
+            							HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_651_setupLocalDescription)
             						}
             						HX_END_LOCAL_FUNC0((void))
 
-            						HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_639_setupLocalDescription)
-HXLINE( 640)						_gthis->candidatesDone =  ::Dynamic(new _hx_Closure_0());
-HXLINE( 641)						resolve(false);
+            						HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_650_setupLocalDescription)
+HXLINE( 651)						_gthis->candidatesDone =  ::Dynamic(new _hx_Closure_0());
+HXLINE( 652)						resolve(false);
             					}
             					HX_END_LOCAL_FUNC0((void))
 
             					HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_2, ::Dynamic,resolve, ::haxe::Timer,timeout) HXARGC(0)
             					void _hx_run(){
-            						HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_643_setupLocalDescription)
-HXLINE( 644)						timeout->stop();
-HXLINE( 645)						resolve(true);
+            						HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_654_setupLocalDescription)
+HXLINE( 655)						timeout->stop();
+HXLINE( 656)						resolve(true);
             					}
             					HX_END_LOCAL_FUNC0((void))
 
-            					HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_638_setupLocalDescription)
-HXLINE( 639)					 ::haxe::Timer timeout = ::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_1(_gthis,resolve)),3000);
-HXLINE( 643)					_gthis->candidatesDone =  ::Dynamic(new _hx_Closure_2(resolve,timeout));
+            					HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_649_setupLocalDescription)
+HXLINE( 650)					 ::haxe::Timer timeout = ::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_1(_gthis,resolve)),3000);
+HXLINE( 654)					_gthis->candidatesDone =  ::Dynamic(new _hx_Closure_2(resolve,timeout));
             				}
             				HX_END_LOCAL_FUNC2((void))
 
-HXLINE( 638)				return ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_3(_gthis)));
+HXLINE( 649)				return ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_3(_gthis)));
             			}
             			else {
-HXLINE( 649)				return null();
+HXLINE( 660)				return null();
             			}
-HXLINE( 637)			return null();
+HXLINE( 648)			return null();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S5(::hx::LocalFunc,_hx_Closure_5, ::borogove::calls::InitiatedSession,_gthis,::String,type, ::Dynamic,beforeSend, ::Dynamic,filterOut,::Array< ::String >,filterMedia) HXARGC(1)
             		void _hx_run(bool _){
-            			HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_651_setupLocalDescription)
-HXLINE( 652)			_gthis->localDescription = ::borogove::calls::SessionDescription_obj::parse(( (::String)(_gthis->pc->get_localDescription()->__Field(HX_("sdp",bf,9a,57,00),::hx::paccDynamic)) ));
-HXLINE( 653)			 ::borogove::calls::SessionDescription descriptionToSend = _gthis->localDescription;
-HXLINE( 654)			if (::hx::IsNotNull( filterMedia )) {
-HXLINE( 656)				int descriptionToSend1 = descriptionToSend->version;
-HXLINE( 657)				::String descriptionToSend2 = descriptionToSend->name;
-HXLINE( 658)				::Array< ::Dynamic> _this = descriptionToSend->media;
-HXDLIN( 658)				::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 658)				{
-HXLINE( 658)					int _g1 = 0;
-HXDLIN( 658)					while((_g1 < _this->length)){
-HXLINE( 658)						 ::borogove::calls::Media v = _this->__get(_g1).StaticCast<  ::borogove::calls::Media >();
-HXDLIN( 658)						_g1 = (_g1 + 1);
-HXDLIN( 658)						bool descriptionToSend3;
-HXDLIN( 658)						if (( (bool)(filterOut) )) {
-HXLINE( 658)							descriptionToSend3 = !(filterMedia->contains(v->mid));
+            			HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_662_setupLocalDescription)
+HXLINE( 663)			_gthis->localDescription = ::borogove::calls::SessionDescription_obj::parse(( (::String)(_gthis->pc->get_localDescription()->__Field(HX_("sdp",bf,9a,57,00),::hx::paccDynamic)) ));
+HXLINE( 664)			 ::borogove::calls::SessionDescription descriptionToSend = _gthis->localDescription;
+HXLINE( 665)			if (::hx::IsNotNull( filterMedia )) {
+HXLINE( 667)				int descriptionToSend1 = descriptionToSend->version;
+HXLINE( 668)				::String descriptionToSend2 = descriptionToSend->name;
+HXLINE( 669)				::Array< ::Dynamic> _this = descriptionToSend->media;
+HXDLIN( 669)				::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 669)				{
+HXLINE( 669)					int _g1 = 0;
+HXDLIN( 669)					while((_g1 < _this->length)){
+HXLINE( 669)						 ::borogove::calls::Media v = _this->__get(_g1).StaticCast<  ::borogove::calls::Media >();
+HXDLIN( 669)						_g1 = (_g1 + 1);
+HXDLIN( 669)						bool descriptionToSend3;
+HXDLIN( 669)						if (( (bool)(filterOut) )) {
+HXLINE( 669)							descriptionToSend3 = !(filterMedia->contains(v->mid));
             						}
             						else {
-HXLINE( 658)							descriptionToSend3 = filterMedia->contains(v->mid);
+HXLINE( 669)							descriptionToSend3 = filterMedia->contains(v->mid);
             						}
-HXDLIN( 658)						if (descriptionToSend3) {
-HXLINE( 658)							_g->push(v);
+HXDLIN( 669)						if (descriptionToSend3) {
+HXLINE( 669)							_g->push(v);
             						}
             					}
             				}
-HXLINE( 655)				descriptionToSend =  ::borogove::calls::SessionDescription_obj::__alloc( HX_CTX ,descriptionToSend1,descriptionToSend2,_g,descriptionToSend->attributes,descriptionToSend->identificationTags);
+HXLINE( 666)				descriptionToSend =  ::borogove::calls::SessionDescription_obj::__alloc( HX_CTX ,descriptionToSend1,descriptionToSend2,_g,descriptionToSend->attributes,descriptionToSend->identificationTags);
             			}
-HXLINE( 663)			if (::hx::IsNotNull( beforeSend )) {
-HXLINE( 663)				beforeSend(descriptionToSend);
+HXLINE( 674)			if (::hx::IsNotNull( beforeSend )) {
+HXLINE( 674)				beforeSend(descriptionToSend);
             			}
-HXLINE( 664)			::String type1 = type;
-HXDLIN( 664)			::String sessionAccept = _gthis->get_sid();
-HXDLIN( 664)			 ::borogove::Stanza sessionAccept1 = descriptionToSend->toStanza(type1,sessionAccept,_gthis->initiator);
-HXLINE( 665)			{
-HXLINE( 665)				 ::Dynamic this1 = sessionAccept1->attr;
-HXDLIN( 665)				::Reflect_obj::setField(this1,HX_("to",7b,65,00,00),_gthis->counterpart->asString());
+HXLINE( 675)			::String type1 = type;
+HXDLIN( 675)			::String sessionAccept = _gthis->get_sid();
+HXDLIN( 675)			 ::borogove::Stanza sessionAccept1 = descriptionToSend->toStanza(type1,sessionAccept,_gthis->initiator);
+HXLINE( 676)			{
+HXLINE( 676)				 ::Dynamic this1 = sessionAccept1->attr;
+HXDLIN( 676)				::Reflect_obj::setField(this1,HX_("to",7b,65,00,00),_gthis->counterpart->asString());
             			}
-HXLINE( 666)			{
-HXLINE( 666)				 ::Dynamic this2 = sessionAccept1->attr;
-HXDLIN( 666)				::Reflect_obj::setField(this2,HX_("id",db,5b,00,00),::borogove::ID_obj::medium());
+HXLINE( 677)			{
+HXLINE( 677)				 ::Dynamic this2 = sessionAccept1->attr;
+HXDLIN( 677)				::Reflect_obj::setField(this2,HX_("id",db,5b,00,00),::borogove::ID_obj::medium());
             			}
-HXLINE( 667)			_gthis->client->sendStanza(sessionAccept1);
-HXLINE( 669)			::Array< ::Dynamic> outboundCandidate = _gthis->queuedOutboundCandidate->copy();
-HXLINE( 670)			_gthis->queuedOutboundCandidate->resize(0);
-HXLINE( 671)			{
-HXLINE( 671)				int _g2 = 0;
-HXDLIN( 671)				while((_g2 < outboundCandidate->length)){
-HXLINE( 671)					 ::Dynamic candidate = outboundCandidate->__get(_g2);
-HXDLIN( 671)					_g2 = (_g2 + 1);
-HXLINE( 672)					_gthis->sendIceCandidate(candidate);
+HXLINE( 678)			_gthis->client->sendStanza(sessionAccept1);
+HXLINE( 680)			::Array< ::Dynamic> outboundCandidate = _gthis->queuedOutboundCandidate->copy();
+HXLINE( 681)			_gthis->queuedOutboundCandidate->resize(0);
+HXLINE( 682)			{
+HXLINE( 682)				int _g2 = 0;
+HXDLIN( 682)				while((_g2 < outboundCandidate->length)){
+HXLINE( 682)					 ::Dynamic candidate = outboundCandidate->__get(_g2);
+HXDLIN( 682)					_g2 = (_g2 + 1);
+HXLINE( 683)					_gthis->sendIceCandidate(candidate);
             				}
             			}
             		}
@@ -1346,9 +1205,9 @@ HXLINE( 672)					_gthis->sendIceCandidate(candidate);
 
             		 ::Dynamic filterOut = __o_filterOut;
             		if (::hx::IsNull(__o_filterOut)) filterOut = false;
-            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_634_setupLocalDescription)
-HXDLIN( 634)		 ::borogove::calls::InitiatedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 635)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(this->pc->setLocalDescription(null()), ::Dynamic(new _hx_Closure_4(_gthis,type)),null()), ::Dynamic(new _hx_Closure_5(_gthis,type,beforeSend,filterOut,filterMedia)),null());
+            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_645_setupLocalDescription)
+HXDLIN( 645)		 ::borogove::calls::InitiatedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 646)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(this->pc->setLocalDescription(null()), ::Dynamic(new _hx_Closure_4(_gthis,type)),null()), ::Dynamic(new _hx_Closure_5(_gthis,type,beforeSend,filterOut,filterMedia)),null());
             	}
 
 
@@ -1357,52 +1216,52 @@ HX_DEFINE_DYNAMIC_FUNC4(InitiatedSession_obj,setupLocalDescription,return )
 ::Dynamic InitiatedSession_obj::onPeerConnection(){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::calls::InitiatedSession,_gthis) HXARGC(1)
             		::Array< ::Dynamic> _hx_run( ::Dynamic _){
-            			HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_679_onPeerConnection)
-HXLINE( 680)			::Array< ::Dynamic> inboundTransportInfo = _gthis->queuedInboundTransportInfo->copy();
-HXLINE( 681)			_gthis->queuedInboundTransportInfo->resize(0);
-HXLINE( 682)			 ::Dynamic f = _gthis->transportInfo_dyn();
-HXDLIN( 682)			::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(inboundTransportInfo->length);
-HXDLIN( 682)			{
-HXLINE( 682)				int _g = 0;
-HXDLIN( 682)				int _g1 = inboundTransportInfo->length;
-HXDLIN( 682)				while((_g < _g1)){
-HXLINE( 682)					_g = (_g + 1);
-HXDLIN( 682)					int i = (_g - 1);
-HXDLIN( 682)					{
-HXLINE( 682)						::Dynamic inValue = f(_hx_array_unsafe_get(inboundTransportInfo,i));
-HXDLIN( 682)						result->__unsafe_set(i,inValue);
+            			HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_690_onPeerConnection)
+HXLINE( 691)			::Array< ::Dynamic> inboundTransportInfo = _gthis->queuedInboundTransportInfo->copy();
+HXLINE( 692)			_gthis->queuedInboundTransportInfo->resize(0);
+HXLINE( 693)			 ::Dynamic f = _gthis->transportInfo_dyn();
+HXDLIN( 693)			::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(inboundTransportInfo->length);
+HXDLIN( 693)			{
+HXLINE( 693)				int _g = 0;
+HXDLIN( 693)				int _g1 = inboundTransportInfo->length;
+HXDLIN( 693)				while((_g < _g1)){
+HXLINE( 693)					_g = (_g + 1);
+HXDLIN( 693)					int i = (_g - 1);
+HXDLIN( 693)					{
+HXLINE( 693)						::Dynamic inValue = f(_hx_array_unsafe_get(inboundTransportInfo,i));
+HXDLIN( 693)						result->__unsafe_set(i,inValue);
             					}
             				}
             			}
-HXDLIN( 682)			return result;
+HXDLIN( 693)			return result;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::borogove::calls::InitiatedSession,_gthis) HXARGC(1)
             		::Dynamic _hx_run(::Array< ::Dynamic> _){
-            			HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_685_onPeerConnection)
-HXLINE( 685)			return _gthis->setupLocalDescription(HX_("session-accept",5f,92,e7,a8),null(),null(),null());
+            			HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_696_onPeerConnection)
+HXLINE( 696)			return _gthis->setupLocalDescription(HX_("session-accept",5f,92,e7,a8),null(),null(),null());
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_2, ::borogove::calls::InitiatedSession,_gthis) HXARGC(1)
             		::String _hx_run( ::Dynamic _){
-            			HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_686_onPeerConnection)
-HXLINE( 687)			::String _hx_tmp;
-HXDLIN( 687)			if ((_gthis->localDescription->getDtlsSetup() == HX_("active",c6,41,46,16))) {
-HXLINE( 687)				_hx_tmp = HX_("passive",a7,47,6a,7d);
+            			HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_697_onPeerConnection)
+HXLINE( 698)			::String _hx_tmp;
+HXDLIN( 698)			if ((_gthis->localDescription->getDtlsSetup() == HX_("active",c6,41,46,16))) {
+HXLINE( 698)				_hx_tmp = HX_("passive",a7,47,6a,7d);
             			}
             			else {
-HXLINE( 687)				_hx_tmp = HX_("active",c6,41,46,16);
+HXLINE( 698)				_hx_tmp = HX_("active",c6,41,46,16);
             			}
-HXLINE( 686)			return (_gthis->peerDtlsSetup = _hx_tmp);
+HXLINE( 697)			return (_gthis->peerDtlsSetup = _hx_tmp);
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_677_onPeerConnection)
-HXDLIN( 677)		 ::borogove::calls::InitiatedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 678)		 ::borogove::calls::PeerConnection _hx_tmp = this->pc;
-HXDLIN( 678)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->setRemoteDescription( ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_688_onPeerConnection)
+HXDLIN( 688)		 ::borogove::calls::InitiatedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 689)		 ::borogove::calls::PeerConnection _hx_tmp = this->pc;
+HXDLIN( 689)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->setRemoteDescription( ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("sdp",bf,9a,57,00),this->remoteDescription->toSdp())
             			->setFixed(1,HX_("type",ba,f2,08,4d),cpp::Struct(rtc::Description::Type::Offer)))), ::Dynamic(new _hx_Closure_0(_gthis)),null()), ::Dynamic(new _hx_Closure_1(_gthis)),null()), ::Dynamic(new _hx_Closure_2(_gthis)),null());
             	}
@@ -1411,13 +1270,13 @@ HXDLIN( 678)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_
 HX_DEFINE_DYNAMIC_FUNC0(InitiatedSession_obj,onPeerConnection,return )
 
  ::borogove::calls::InitiatedSession InitiatedSession_obj::fromSessionInitiate( ::borogove::Client client, ::borogove::Stanza stanza){
-            	HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_356_fromSessionInitiate)
-HXLINE( 357)		 ::borogove::Stanza jingle = stanza->getChild(HX_("jingle",31,27,eb,1f),HX_("urn:xmpp:jingle:1",44,c4,fe,f7));
-HXLINE( 360)		 ::borogove::JID session = ::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
-HXLINE( 361)		::String session1 = ( (::String)(::Reflect_obj::field(jingle->attr,HX_("sid",0e,9f,57,00))) );
-HXLINE( 358)		 ::borogove::calls::InitiatedSession session2 =  ::borogove::calls::InitiatedSession_obj::__alloc( HX_CTX ,client,session,session1,::borogove::calls::SessionDescription_obj::fromStanza(stanza,false,null()));
-HXLINE( 364)		session2->transportInfo(stanza);
-HXLINE( 365)		return session2;
+            	HX_GC_STACKFRAME(&_hx_pos_7acc2c8020739c2c_359_fromSessionInitiate)
+HXLINE( 360)		 ::borogove::Stanza jingle = stanza->getChild(HX_("jingle",31,27,eb,1f),HX_("urn:xmpp:jingle:1",44,c4,fe,f7));
+HXLINE( 363)		 ::borogove::JID session = ::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
+HXLINE( 364)		::String session1 = ( (::String)(::Reflect_obj::field(jingle->attr,HX_("sid",0e,9f,57,00))) );
+HXLINE( 361)		 ::borogove::calls::InitiatedSession session2 =  ::borogove::calls::InitiatedSession_obj::__alloc( HX_CTX ,client,session,session1,::borogove::calls::SessionDescription_obj::fromStanza(stanza,false,null()));
+HXLINE( 367)		session2->transportInfo(stanza);
+HXLINE( 368)		return session2;
             	}
 
 
@@ -1515,7 +1374,6 @@ void InitiatedSession_obj::__Visit(HX_VISIT_PARAMS)
 		if (HX_FIELD_EQ(inName,"terminate") ) { return ::hx::Val( terminate_dyn() ); }
 		break;
 	case 10:
-		if (HX_FIELD_EQ(inName,"sid__fromC") ) { return ::hx::Val( sid__fromC_dyn() ); }
 		if (HX_FIELD_EQ(inName,"afterMedia") ) { return ::hx::Val( afterMedia ); }
 		if (HX_FIELD_EQ(inName,"get_chatId") ) { return ::hx::Val( get_chatId_dyn() ); }
 		if (HX_FIELD_EQ(inName,"contentAdd") ) { return ::hx::Val( contentAdd_dyn() ); }
@@ -1528,7 +1386,6 @@ void InitiatedSession_obj::__Visit(HX_VISIT_PARAMS)
 		if (HX_FIELD_EQ(inName,"supplyMedia") ) { return ::hx::Val( supplyMedia_dyn() ); }
 		break;
 	case 13:
-		if (HX_FIELD_EQ(inName,"chatId__fromC") ) { return ::hx::Val( chatId__fromC_dyn() ); }
 		if (HX_FIELD_EQ(inName,"peerDtlsSetup") ) { return ::hx::Val( peerDtlsSetup ); }
 		if (HX_FIELD_EQ(inName,"contentAccept") ) { return ::hx::Val( contentAccept_dyn() ); }
 		if (HX_FIELD_EQ(inName,"transportInfo") ) { return ::hx::Val( transportInfo_dyn() ); }
@@ -1536,9 +1393,6 @@ void InitiatedSession_obj::__Visit(HX_VISIT_PARAMS)
 	case 14:
 		if (HX_FIELD_EQ(inName,"candidatesDone") ) { return ::hx::Val( candidatesDone ); }
 		break;
-	case 15:
-		if (HX_FIELD_EQ(inName,"addMedia__fromC") ) { return ::hx::Val( addMedia__fromC_dyn() ); }
-		break;
 	case 16:
 		if (HX_FIELD_EQ(inName,"localDescription") ) { return ::hx::Val( localDescription ); }
 		if (HX_FIELD_EQ(inName,"sendIceCandidate") ) { return ::hx::Val( sendIceCandidate_dyn() ); }
@@ -1665,9 +1519,7 @@ static ::hx::StaticInfo *InitiatedSession_obj_sStaticStorageInfo = 0;
 
 static ::String InitiatedSession_obj_sMemberFields[] = {
 	HX_("sid",0e,9f,57,00),
-	HX_("sid__fromC",2b,ef,18,af),
 	HX_("chatId",d3,04,77,b7),
-	HX_("chatId__fromC",06,fc,b1,94),
 	HX_("client",4b,ca,4f,0a),
 	HX_("counterpart",ef,c0,14,5a),
 	HX_("_sid",0f,e4,22,3f),
@@ -1693,7 +1545,6 @@ static ::String InitiatedSession_obj_sMemberFields[] = {
 	HX_("contentAccept",21,c5,01,e1),
 	HX_("transportInfo",b7,3c,cf,b6),
 	HX_("addMedia",03,2b,19,7f),
-	HX_("addMedia__fromC",d6,fb,b5,1b),
 	HX_("callStatus",70,be,2b,31),
 	HX_("audioTracks",fe,5c,2d,14),
 	HX_("videoTracks",63,c2,24,be),
@@ -1739,29 +1590,31 @@ void InitiatedSession_obj::__register()
 void InitiatedSession_obj::__boot()
 {
 {
-            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_329_boot)
-HXDLIN( 329)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
-            			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(10)
-            				->setFixed(0,HX_("chatId__fromC",06,fc,b1,94), ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(1,HX_("supplyMedia",35,0c,c9,9a), ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_STACKFRAME(&_hx_pos_7acc2c8020739c2c_330_boot)
+HXDLIN( 330)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(11)
+            				->setFixed(0,HX_("supplyMedia",35,0c,c9,9a), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(2,HX_("sid__fromC",2b,ef,18,af), ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(1,HX_("chatId",d3,04,77,b7), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
+            				->setFixed(2,HX_("hangup",4d,d2,ff,b7), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
             				->setFixed(3,HX_("videoTracks",63,c2,24,be), ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(4,HX_("audioTracks__fromC",3b,cf,6f,cd), ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(5,HX_("videoTracks__fromC",76,10,46,d8), ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(6,HX_("supplyMedia__fromC",e4,84,0e,e6), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
+            				->setFixed(4,HX_("supplyMedia__fromC",e4,84,0e,e6), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(5,HX_("sid",0e,9f,57,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
+            				->setFixed(6,HX_("accept",08,93,06,0b), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
             				->setFixed(7,HX_("audioTracks",fe,5c,2d,14), ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
-            				->setFixed(8,HX_("addMedia__fromC",d6,fb,b5,1b), ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
-            				->setFixed(9,HX_("addMedia",03,2b,19,7f), ::Dynamic(::hx::Anon_obj::Create(1)
-            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d))))))));
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
+            				->setFixed(8,HX_("callStatus",70,be,2b,31), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
+            				->setFixed(9,HX_("dtmf",e9,ba,71,42), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
+            				->setFixed(10,HX_("addMedia",03,2b,19,7f), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null()))))));
             	}
 }
 
diff --git a/Sources/c_borogove/src/borogove/calls/MediaStream.cpp b/Sources/c_borogove/src/borogove/calls/MediaStream.cpp
index c962eee..f1976b8 100644
--- a/Sources/c_borogove/src/borogove/calls/MediaStream.cpp
+++ b/Sources/c_borogove/src/borogove/calls/MediaStream.cpp
@@ -28,18 +28,18 @@
 #include <haxe/IMap.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_fac155ba84f4ed7c_641_new,"borogove.calls.MediaStream","new",0xd95367f0,"borogove.calls.MediaStream.new","borogove/calls/PeerConnection.cpp.hx",641,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_fac155ba84f4ed7c_661_addTrack,"borogove.calls.MediaStream","addTrack",0x30fdb31a,"borogove.calls.MediaStream.addTrack","borogove/calls/PeerConnection.cpp.hx",661,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_fac155ba84f4ed7c_665_getTracks,"borogove.calls.MediaStream","getTracks",0x7131584e,"borogove.calls.MediaStream.getTracks","borogove/calls/PeerConnection.cpp.hx",665,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_9bd441a08c23c4d5_311_getTracks__fromC,"borogove.calls.MediaStream","getTracks__fromC",0xbc74ddeb,"borogove.calls.MediaStream.getTracks__fromC","HaxeCBridge.hx",311,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_fac155ba84f4ed7c_646_makeAudio,"borogove.calls.MediaStream","makeAudio",0xaa769398,"borogove.calls.MediaStream.makeAudio","borogove/calls/PeerConnection.cpp.hx",646,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_fac155ba84f4ed7c_640_boot,"borogove.calls.MediaStream","boot",0x47c08aa2,"borogove.calls.MediaStream.boot","borogove/calls/PeerConnection.cpp.hx",640,0x6b4179c1)
+HX_DEFINE_STACK_FRAME(_hx_pos_fac155ba84f4ed7c_647_new,"borogove.calls.MediaStream","new",0xd95367f0,"borogove.calls.MediaStream.new","borogove/calls/PeerConnection.cpp.hx",647,0x6b4179c1)
+HX_LOCAL_STACK_FRAME(_hx_pos_fac155ba84f4ed7c_667_addTrack,"borogove.calls.MediaStream","addTrack",0x30fdb31a,"borogove.calls.MediaStream.addTrack","borogove/calls/PeerConnection.cpp.hx",667,0x6b4179c1)
+HX_LOCAL_STACK_FRAME(_hx_pos_fac155ba84f4ed7c_671_getTracks,"borogove.calls.MediaStream","getTracks",0x7131584e,"borogove.calls.MediaStream.getTracks","borogove/calls/PeerConnection.cpp.hx",671,0x6b4179c1)
+HX_LOCAL_STACK_FRAME(_hx_pos_9bd441a08c23c4d5_335_getTracks__fromC,"borogove.calls.MediaStream","getTracks__fromC",0xbc74ddeb,"borogove.calls.MediaStream.getTracks__fromC","HaxeCBridge.hx",335,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_fac155ba84f4ed7c_652_makeAudio,"borogove.calls.MediaStream","makeAudio",0xaa769398,"borogove.calls.MediaStream.makeAudio","borogove/calls/PeerConnection.cpp.hx",652,0x6b4179c1)
+HX_LOCAL_STACK_FRAME(_hx_pos_fac155ba84f4ed7c_646_boot,"borogove.calls.MediaStream","boot",0x47c08aa2,"borogove.calls.MediaStream.boot","borogove/calls/PeerConnection.cpp.hx",646,0x6b4179c1)
 namespace borogove{
 namespace calls{
 
 void MediaStream_obj::__construct(){
-            	HX_STACKFRAME(&_hx_pos_fac155ba84f4ed7c_641_new)
-HXDLIN( 641)		this->tracks = ::Array_obj< ::Dynamic>::__new(0);
+            	HX_STACKFRAME(&_hx_pos_fac155ba84f4ed7c_647_new)
+HXDLIN( 647)		this->tracks = ::Array_obj< ::Dynamic>::__new(0);
             	}
 
 Dynamic MediaStream_obj::__CreateEmpty() { return new MediaStream_obj; }
@@ -58,81 +58,81 @@ bool MediaStream_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 void MediaStream_obj::addTrack( ::borogove::calls::MediaStreamTrack track){
-            	HX_STACKFRAME(&_hx_pos_fac155ba84f4ed7c_661_addTrack)
-HXDLIN( 661)		this->tracks->push(track);
+            	HX_STACKFRAME(&_hx_pos_fac155ba84f4ed7c_667_addTrack)
+HXDLIN( 667)		this->tracks->push(track);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(MediaStream_obj,addTrack,(void))
 
 ::Array< ::Dynamic> MediaStream_obj::getTracks(){
-            	HX_STACKFRAME(&_hx_pos_fac155ba84f4ed7c_665_getTracks)
-HXDLIN( 665)		return this->tracks;
+            	HX_STACKFRAME(&_hx_pos_fac155ba84f4ed7c_671_getTracks)
+HXDLIN( 671)		return this->tracks;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(MediaStream_obj,getTracks,return )
 
 size_t MediaStream_obj::getTracks__fromC(void*** outPtr){
-            	HX_STACKFRAME(&_hx_pos_9bd441a08c23c4d5_311_getTracks__fromC)
-HXDLIN( 311)		::Array< ::Dynamic> out = this->getTracks();
-HXDLIN( 311)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 311)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 311)			{
-HXDLIN( 311)				int _g = 0;
-HXDLIN( 311)				while((_g < out->length)){
-HXDLIN( 311)					 ::borogove::calls::MediaStreamTrack el = out->__get(_g).StaticCast<  ::borogove::calls::MediaStreamTrack >();
-HXDLIN( 311)					_g = (_g + 1);
-HXDLIN( 311)					{
-HXDLIN( 311)						 ::Dynamic haxeObject = el;
-HXDLIN( 311)						void* ptr = haxeObject.mPtr;
-HXDLIN( 311)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 311)						{
-HXDLIN( 311)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 311)							if (::hx::IsNull( store )) {
-HXDLIN( 311)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_9bd441a08c23c4d5_335_getTracks__fromC)
+HXDLIN( 335)		::Array< ::Dynamic> out = this->getTracks();
+HXDLIN( 335)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 335)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 335)			{
+HXDLIN( 335)				int _g = 0;
+HXDLIN( 335)				while((_g < out->length)){
+HXDLIN( 335)					 ::borogove::calls::MediaStreamTrack el = out->__get(_g).StaticCast<  ::borogove::calls::MediaStreamTrack >();
+HXDLIN( 335)					_g = (_g + 1);
+HXDLIN( 335)					{
+HXDLIN( 335)						 ::Dynamic haxeObject = el;
+HXDLIN( 335)						void* ptr = haxeObject.mPtr;
+HXDLIN( 335)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 335)						{
+HXDLIN( 335)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 335)							if (::hx::IsNull( store )) {
+HXDLIN( 335)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
             									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             									->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 311)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN( 335)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             							}
             							else {
-HXDLIN( 311)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 335)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             							}
             						}
             					}
             				}
             			}
-HXDLIN( 311)			void** ptr1 = (void**)out->getBase();
-HXDLIN( 311)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 311)			{
-HXDLIN( 311)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 311)				if (::hx::IsNull( store1 )) {
-HXDLIN( 311)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 335)			void** ptr1 = (void**)out->getBase();
+HXDLIN( 335)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 335)			{
+HXDLIN( 335)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 335)				if (::hx::IsNull( store1 )) {
+HXDLIN( 335)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),out));
-HXDLIN( 311)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+HXDLIN( 335)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
             				}
             				else {
-HXDLIN( 311)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 335)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXDLIN( 311)			_hx_tmp->set_ref(ptr1);
+HXDLIN( 335)			_hx_tmp->set_ref(ptr1);
             		}
-HXDLIN( 311)		return ( (size_t)(out->length) );
+HXDLIN( 335)		return ( (size_t)(out->length) );
             	}
 
 
  ::borogove::calls::MediaStream MediaStream_obj::makeAudio(){
-            	HX_GC_STACKFRAME(&_hx_pos_fac155ba84f4ed7c_646_makeAudio)
-HXLINE( 647)		 rtc::Description::Audio audio =  rtc::Description::Audio(::hx::StdString(::borogove::ID_obj::tiny()),cpp::Struct(rtc::Description::Direction::SendRecv));
-HXLINE( 648)		audio.addOpusCodec(107);
-HXLINE( 649)		audio.addPCMUCodec(0);
-HXLINE( 650)		audio.addAudioCodec(101,::hx::StdString(HX_("telephone-event/8000",36,ae,10,93)));
-HXLINE( 651)		 ::borogove::calls::MediaStreamTrack media =  ::borogove::calls::MediaStreamTrack_obj::__alloc( HX_CTX );
-HXLINE( 652)		media->media =  std::optional<  rtc::Description::Media >(audio);
-HXLINE( 653)		 ::borogove::calls::MediaStream stream =  ::borogove::calls::MediaStream_obj::__alloc( HX_CTX );
-HXLINE( 654)		stream->addTrack(media);
-HXLINE( 655)		return stream;
+            	HX_GC_STACKFRAME(&_hx_pos_fac155ba84f4ed7c_652_makeAudio)
+HXLINE( 653)		 rtc::Description::Audio audio =  rtc::Description::Audio(::hx::StdString(::borogove::ID_obj::tiny()),cpp::Struct(rtc::Description::Direction::SendRecv));
+HXLINE( 654)		audio.addOpusCodec(107);
+HXLINE( 655)		audio.addPCMUCodec(0);
+HXLINE( 656)		audio.addAudioCodec(101,::hx::StdString(HX_("telephone-event/8000",36,ae,10,93)));
+HXLINE( 657)		 ::borogove::calls::MediaStreamTrack media =  ::borogove::calls::MediaStreamTrack_obj::__alloc( HX_CTX );
+HXLINE( 658)		media->media =  std::optional<  rtc::Description::Media >(audio);
+HXLINE( 659)		 ::borogove::calls::MediaStream stream =  ::borogove::calls::MediaStream_obj::__alloc( HX_CTX );
+HXLINE( 660)		stream->addTrack(media);
+HXLINE( 661)		return stream;
             	}
 
 
@@ -254,8 +254,8 @@ void MediaStream_obj::__register()
 void MediaStream_obj::__boot()
 {
 {
-            	HX_STACKFRAME(&_hx_pos_fac155ba84f4ed7c_640_boot)
-HXDLIN( 640)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_STACKFRAME(&_hx_pos_fac155ba84f4ed7c_646_boot)
+HXDLIN( 646)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(2)
             				->setFixed(0,HX_("getTracks",be,b4,d3,c1), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
diff --git a/Sources/c_borogove/src/borogove/calls/MediaStreamTrack.cpp b/Sources/c_borogove/src/borogove/calls/MediaStreamTrack.cpp
index 38434c4..5e2f4cb 100644
--- a/Sources/c_borogove/src/borogove/calls/MediaStreamTrack.cpp
+++ b/Sources/c_borogove/src/borogove/calls/MediaStreamTrack.cpp
@@ -68,41 +68,41 @@
 HX_DEFINE_STACK_FRAME(_hx_pos_306b50e70c93d428_376_new,"borogove.calls.MediaStreamTrack","new",0x7b5fd11f,"borogove.calls.MediaStreamTrack.new","borogove/calls/PeerConnection.cpp.hx",376,0x6b4179c1)
 HX_DEFINE_STACK_FRAME(_hx_pos_306b50e70c93d428_380_new,"borogove.calls.MediaStreamTrack","new",0x7b5fd11f,"borogove.calls.MediaStreamTrack.new","borogove/calls/PeerConnection.cpp.hx",380,0x6b4179c1)
 HX_DEFINE_STACK_FRAME(_hx_pos_306b50e70c93d428_339_new,"borogove.calls.MediaStreamTrack","new",0x7b5fd11f,"borogove.calls.MediaStreamTrack.new","borogove/calls/PeerConnection.cpp.hx",339,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_1f66e5b64430fc7f_371_id__fromC,"borogove.calls.MediaStreamTrack","id__fromC",0xa034affd,"borogove.calls.MediaStreamTrack.id__fromC","HaxeCBridge.hx",371,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_1f66e5b64430fc7f_371_muted__fromC,"borogove.calls.MediaStreamTrack","muted__fromC",0x42c9e3cf,"borogove.calls.MediaStreamTrack.muted__fromC","HaxeCBridge.hx",371,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_1f66e5b64430fc7f_371_kind__fromC,"borogove.calls.MediaStreamTrack","kind__fromC",0xf1077964,"borogove.calls.MediaStreamTrack.kind__fromC","HaxeCBridge.hx",371,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_1f66e5b64430fc7f_360_supportedAudioFormats__fromC,"borogove.calls.MediaStreamTrack","supportedAudioFormats__fromC",0x708971e6,"borogove.calls.MediaStreamTrack.supportedAudioFormats__fromC","HaxeCBridge.hx",360,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_1f66e5b64430fc7f_398_id__fromC,"borogove.calls.MediaStreamTrack","id__fromC",0xa034affd,"borogove.calls.MediaStreamTrack.id__fromC","HaxeCBridge.hx",398,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_1f66e5b64430fc7f_398_muted__fromC,"borogove.calls.MediaStreamTrack","muted__fromC",0x42c9e3cf,"borogove.calls.MediaStreamTrack.muted__fromC","HaxeCBridge.hx",398,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_1f66e5b64430fc7f_398_kind__fromC,"borogove.calls.MediaStreamTrack","kind__fromC",0xf1077964,"borogove.calls.MediaStreamTrack.kind__fromC","HaxeCBridge.hx",398,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_1f66e5b64430fc7f_385_supportedAudioFormats__fromC,"borogove.calls.MediaStreamTrack","supportedAudioFormats__fromC",0x708971e6,"borogove.calls.MediaStreamTrack.supportedAudioFormats__fromC","HaxeCBridge.hx",385,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_306b50e70c93d428_403_get_id,"borogove.calls.MediaStreamTrack","get_id",0x15e3b3c5,"borogove.calls.MediaStreamTrack.get_id","borogove/calls/PeerConnection.cpp.hx",403,0x6b4179c1)
 HX_LOCAL_STACK_FRAME(_hx_pos_306b50e70c93d428_410_get_kind,"borogove.calls.MediaStreamTrack","get_kind",0x1e6287be,"borogove.calls.MediaStreamTrack.get_kind","borogove/calls/PeerConnection.cpp.hx",410,0x6b4179c1)
 HX_LOCAL_STACK_FRAME(_hx_pos_306b50e70c93d428_411_get_muted,"borogove.calls.MediaStreamTrack","get_muted",0xa69485c1,"borogove.calls.MediaStreamTrack.get_muted","borogove/calls/PeerConnection.cpp.hx",411,0x6b4179c1)
 HX_LOCAL_STACK_FRAME(_hx_pos_306b50e70c93d428_413_get_supportedAudioFormats,"borogove.calls.MediaStreamTrack","get_supportedAudioFormats",0xeadaf8ca,"borogove.calls.MediaStreamTrack.get_supportedAudioFormats","borogove/calls/PeerConnection.cpp.hx",413,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_306b50e70c93d428_434_set_track,"borogove.calls.MediaStreamTrack","set_track",0x8fa970ed,"borogove.calls.MediaStreamTrack.set_track","borogove/calls/PeerConnection.cpp.hx",434,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_306b50e70c93d428_468_addPCMListener,"borogove.calls.MediaStreamTrack","addPCMListener",0x656a6eae,"borogove.calls.MediaStreamTrack.addPCMListener","borogove/calls/PeerConnection.cpp.hx",468,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_1f66e5b64430fc7f_255_addPCMListener__fromC,"borogove.calls.MediaStreamTrack","addPCMListener__fromC",0x7a15538b,"borogove.calls.MediaStreamTrack.addPCMListener__fromC","HaxeCBridge.hx",255,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_1f66e5b64430fc7f_315_addPCMListener__fromC,"borogove.calls.MediaStreamTrack","addPCMListener__fromC",0x7a15538b,"borogove.calls.MediaStreamTrack.addPCMListener__fromC","HaxeCBridge.hx",315,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_306b50e70c93d428_493_onFrame,"borogove.calls.MediaStreamTrack","onFrame",0x8755e2cd,"borogove.calls.MediaStreamTrack.onFrame","borogove/calls/PeerConnection.cpp.hx",493,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_306b50e70c93d428_527_addReadyForPCMListener,"borogove.calls.MediaStreamTrack","addReadyForPCMListener",0x5fd175e8,"borogove.calls.MediaStreamTrack.addReadyForPCMListener","borogove/calls/PeerConnection.cpp.hx",527,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_1f66e5b64430fc7f_255_addReadyForPCMListener__fromC,"borogove.calls.MediaStreamTrack","addReadyForPCMListener__fromC",0x011b0791,"borogove.calls.MediaStreamTrack.addReadyForPCMListener__fromC","HaxeCBridge.hx",255,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_1f66e5b64430fc7f_315_addReadyForPCMListener__fromC,"borogove.calls.MediaStreamTrack","addReadyForPCMListener__fromC",0x011b0791,"borogove.calls.MediaStreamTrack.addReadyForPCMListener__fromC","HaxeCBridge.hx",315,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_306b50e70c93d428_534_notifyReadyForData,"borogove.calls.MediaStreamTrack","notifyReadyForData",0xc7f10a3a,"borogove.calls.MediaStreamTrack.notifyReadyForData","borogove/calls/PeerConnection.cpp.hx",534,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_306b50e70c93d428_538_notifyReadyForData,"borogove.calls.MediaStreamTrack","notifyReadyForData",0xc7f10a3a,"borogove.calls.MediaStreamTrack.notifyReadyForData","borogove/calls/PeerConnection.cpp.hx",538,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_306b50e70c93d428_558_writePCM,"borogove.calls.MediaStreamTrack","writePCM",0x7b93825c,"borogove.calls.MediaStreamTrack.writePCM","borogove/calls/PeerConnection.cpp.hx",558,0x6b4179c1)
+HX_LOCAL_STACK_FRAME(_hx_pos_306b50e70c93d428_440_set_track,"borogove.calls.MediaStreamTrack","set_track",0x8fa970ed,"borogove.calls.MediaStreamTrack.set_track","borogove/calls/PeerConnection.cpp.hx",440,0x6b4179c1)
+HX_LOCAL_STACK_FRAME(_hx_pos_306b50e70c93d428_474_addPCMListener,"borogove.calls.MediaStreamTrack","addPCMListener",0x656a6eae,"borogove.calls.MediaStreamTrack.addPCMListener","borogove/calls/PeerConnection.cpp.hx",474,0x6b4179c1)
+HX_LOCAL_STACK_FRAME(_hx_pos_1f66e5b64430fc7f_272_addPCMListener__fromC,"borogove.calls.MediaStreamTrack","addPCMListener__fromC",0x7a15538b,"borogove.calls.MediaStreamTrack.addPCMListener__fromC","HaxeCBridge.hx",272,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_1f66e5b64430fc7f_339_addPCMListener__fromC,"borogove.calls.MediaStreamTrack","addPCMListener__fromC",0x7a15538b,"borogove.calls.MediaStreamTrack.addPCMListener__fromC","HaxeCBridge.hx",339,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_306b50e70c93d428_499_onFrame,"borogove.calls.MediaStreamTrack","onFrame",0x8755e2cd,"borogove.calls.MediaStreamTrack.onFrame","borogove/calls/PeerConnection.cpp.hx",499,0x6b4179c1)
+HX_LOCAL_STACK_FRAME(_hx_pos_306b50e70c93d428_533_addReadyForPCMListener,"borogove.calls.MediaStreamTrack","addReadyForPCMListener",0x5fd175e8,"borogove.calls.MediaStreamTrack.addReadyForPCMListener","borogove/calls/PeerConnection.cpp.hx",533,0x6b4179c1)
+HX_LOCAL_STACK_FRAME(_hx_pos_1f66e5b64430fc7f_272_addReadyForPCMListener__fromC,"borogove.calls.MediaStreamTrack","addReadyForPCMListener__fromC",0x011b0791,"borogove.calls.MediaStreamTrack.addReadyForPCMListener__fromC","HaxeCBridge.hx",272,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_1f66e5b64430fc7f_339_addReadyForPCMListener__fromC,"borogove.calls.MediaStreamTrack","addReadyForPCMListener__fromC",0x011b0791,"borogove.calls.MediaStreamTrack.addReadyForPCMListener__fromC","HaxeCBridge.hx",339,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_306b50e70c93d428_540_notifyReadyForData,"borogove.calls.MediaStreamTrack","notifyReadyForData",0xc7f10a3a,"borogove.calls.MediaStreamTrack.notifyReadyForData","borogove/calls/PeerConnection.cpp.hx",540,0x6b4179c1)
+HX_LOCAL_STACK_FRAME(_hx_pos_306b50e70c93d428_544_notifyReadyForData,"borogove.calls.MediaStreamTrack","notifyReadyForData",0xc7f10a3a,"borogove.calls.MediaStreamTrack.notifyReadyForData","borogove/calls/PeerConnection.cpp.hx",544,0x6b4179c1)
+HX_LOCAL_STACK_FRAME(_hx_pos_306b50e70c93d428_564_writePCM,"borogove.calls.MediaStreamTrack","writePCM",0x7b93825c,"borogove.calls.MediaStreamTrack.writePCM","borogove/calls/PeerConnection.cpp.hx",564,0x6b4179c1)
+HX_LOCAL_STACK_FRAME(_hx_pos_306b50e70c93d428_569_writePCM,"borogove.calls.MediaStreamTrack","writePCM",0x7b93825c,"borogove.calls.MediaStreamTrack.writePCM","borogove/calls/PeerConnection.cpp.hx",569,0x6b4179c1)
 HX_LOCAL_STACK_FRAME(_hx_pos_306b50e70c93d428_563_writePCM,"borogove.calls.MediaStreamTrack","writePCM",0x7b93825c,"borogove.calls.MediaStreamTrack.writePCM","borogove/calls/PeerConnection.cpp.hx",563,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_306b50e70c93d428_557_writePCM,"borogove.calls.MediaStreamTrack","writePCM",0x7b93825c,"borogove.calls.MediaStreamTrack.writePCM","borogove/calls/PeerConnection.cpp.hx",557,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_1f66e5b64430fc7f_315_writePCM__fromC,"borogove.calls.MediaStreamTrack","writePCM__fromC",0x09ce319d,"borogove.calls.MediaStreamTrack.writePCM__fromC","HaxeCBridge.hx",315,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_306b50e70c93d428_606_onAudioLoop,"borogove.calls.MediaStreamTrack","onAudioLoop",0x52d9a8fa,"borogove.calls.MediaStreamTrack.onAudioLoop","borogove/calls/PeerConnection.cpp.hx",606,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_306b50e70c93d428_610_write,"borogove.calls.MediaStreamTrack","write",0x26f65b5e,"borogove.calls.MediaStreamTrack.write","borogove/calls/PeerConnection.cpp.hx",610,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_306b50e70c93d428_622_advanceTimestamp,"borogove.calls.MediaStreamTrack","advanceTimestamp",0xdd6abfd5,"borogove.calls.MediaStreamTrack.advanceTimestamp","borogove/calls/PeerConnection.cpp.hx",622,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_306b50e70c93d428_625_stop,"borogove.calls.MediaStreamTrack","stop",0x7bd09663,"borogove.calls.MediaStreamTrack.stop","borogove/calls/PeerConnection.cpp.hx",625,0x6b4179c1)
+HX_LOCAL_STACK_FRAME(_hx_pos_1f66e5b64430fc7f_339_writePCM__fromC,"borogove.calls.MediaStreamTrack","writePCM__fromC",0x09ce319d,"borogove.calls.MediaStreamTrack.writePCM__fromC","HaxeCBridge.hx",339,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_306b50e70c93d428_612_onAudioLoop,"borogove.calls.MediaStreamTrack","onAudioLoop",0x52d9a8fa,"borogove.calls.MediaStreamTrack.onAudioLoop","borogove/calls/PeerConnection.cpp.hx",612,0x6b4179c1)
+HX_LOCAL_STACK_FRAME(_hx_pos_306b50e70c93d428_616_write,"borogove.calls.MediaStreamTrack","write",0x26f65b5e,"borogove.calls.MediaStreamTrack.write","borogove/calls/PeerConnection.cpp.hx",616,0x6b4179c1)
+HX_LOCAL_STACK_FRAME(_hx_pos_306b50e70c93d428_628_advanceTimestamp,"borogove.calls.MediaStreamTrack","advanceTimestamp",0xdd6abfd5,"borogove.calls.MediaStreamTrack.advanceTimestamp","borogove/calls/PeerConnection.cpp.hx",628,0x6b4179c1)
+HX_LOCAL_STACK_FRAME(_hx_pos_306b50e70c93d428_631_stop,"borogove.calls.MediaStreamTrack","stop",0x7bd09663,"borogove.calls.MediaStreamTrack.stop","borogove/calls/PeerConnection.cpp.hx",631,0x6b4179c1)
 HX_LOCAL_STACK_FRAME(_hx_pos_306b50e70c93d428_367_fromTrack,"borogove.calls.MediaStreamTrack","fromTrack",0x1d3812c0,"borogove.calls.MediaStreamTrack.fromTrack","borogove/calls/PeerConnection.cpp.hx",367,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_306b50e70c93d428_474_pcmToUlaw,"borogove.calls.MediaStreamTrack","pcmToUlaw",0x27495ae1,"borogove.calls.MediaStreamTrack.pcmToUlaw","borogove/calls/PeerConnection.cpp.hx",474,0x6b4179c1)
+HX_LOCAL_STACK_FRAME(_hx_pos_306b50e70c93d428_480_pcmToUlaw,"borogove.calls.MediaStreamTrack","pcmToUlaw",0x27495ae1,"borogove.calls.MediaStreamTrack.pcmToUlaw","borogove/calls/PeerConnection.cpp.hx",480,0x6b4179c1)
 HX_LOCAL_STACK_FRAME(_hx_pos_306b50e70c93d428_339_boot,"borogove.calls.MediaStreamTrack","boot",0x70902a93,"borogove.calls.MediaStreamTrack.boot","borogove/calls/PeerConnection.cpp.hx",339,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_306b50e70c93d428_471_boot,"borogove.calls.MediaStreamTrack","boot",0x70902a93,"borogove.calls.MediaStreamTrack.boot","borogove/calls/PeerConnection.cpp.hx",471,0x6b4179c1)
-static const short _hx_array_data_338355ad_38[] = {
+HX_LOCAL_STACK_FRAME(_hx_pos_306b50e70c93d428_477_boot,"borogove.calls.MediaStreamTrack","boot",0x70902a93,"borogove.calls.MediaStreamTrack.boot","borogove/calls/PeerConnection.cpp.hx",477,0x6b4179c1)
+static const short _hx_array_data_338355ad_39[] = {
 	(short)-32124,(short)-31100,(short)-30076,(short)-29052,(short)-28028,(short)-27004,(short)-25980,(short)-24956,(short)-23932,(short)-22908,(short)-21884,(short)-20860,(short)-19836,(short)-18812,(short)-17788,(short)-16764,(short)-15996,(short)-15484,(short)-14972,(short)-14460,(short)-13948,(short)-13436,(short)-12924,(short)-12412,(short)-11900,(short)-11388,(short)-10876,(short)-10364,(short)-9852,(short)-9340,(short)-8828,(short)-8316,(short)-7932,(short)-7676,(short)-7420,(short)-7164,(short)-6908,(short)-6652,(short)-6396,(short)-6140,(short)-5884,(short)-5628,(short)-5372,(short)-5116,(short)-4860,(short)-4604,(short)-4348,(short)-4092,(short)-3900,(short)-3772,(short)-3644,(short)-3516,(short)-3388,(short)-3260,(short)-3132,(short)-3004,(short)-2876,(short)-2748,(short)-2620,(short)-2492,(short)-2364,(short)-2236,(short)-2108,(short)-1980,(short)-1884,(short)-1820,(short)-1756,(short)-1692,(short)-1628,(short)-1564,(short)-1500,(short)-1436,(short)-1372,(short)-1308,(short)-1244,(short)-1180,(short)-1116,(short)-1052,(short)-988,(short)-924,(short)-876,(short)-844,(short)-812,(short)-780,(short)-748,(short)-716,(short)-684,(short)-652,(short)-620,(short)-588,(short)-556,(short)-524,(short)-492,(short)-460,(short)-428,(short)-396,(short)-372,(short)-356,(short)-340,(short)-324,(short)-308,(short)-292,(short)-276,(short)-260,(short)-244,(short)-228,(short)-212,(short)-196,(short)-180,(short)-164,(short)-148,(short)-132,(short)-120,(short)-112,(short)-104,(short)-96,(short)-88,(short)-80,(short)-72,(short)-64,(short)-56,(short)-48,(short)-40,(short)-32,(short)-24,(short)-16,(short)-8,(short)0,(short)32124,(short)31100,(short)30076,(short)29052,(short)28028,(short)27004,(short)25980,(short)24956,(short)23932,(short)22908,(short)21884,(short)20860,(short)19836,(short)18812,(short)17788,(short)16764,(short)15996,(short)15484,(short)14972,(short)14460,(short)13948,(short)13436,(short)12924,(short)12412,(short)11900,(short)11388,(short)10876,(short)10364,(short)9852,(short)9340,(short)8828,(short)8316,(short)7932,(short)7676,(short)7420,(short)7164,(short)6908,(short)6652,(short)6396,(short)6140,(short)5884,(short)5628,(short)5372,(short)5116,(short)4860,(short)4604,(short)4348,(short)4092,(short)3900,(short)3772,(short)3644,(short)3516,(short)3388,(short)3260,(short)3132,(short)3004,(short)2876,(short)2748,(short)2620,(short)2492,(short)2364,(short)2236,(short)2108,(short)1980,(short)1884,(short)1820,(short)1756,(short)1692,(short)1628,(short)1564,(short)1500,(short)1436,(short)1372,(short)1308,(short)1244,(short)1180,(short)1116,(short)1052,(short)988,(short)924,(short)876,(short)844,(short)812,(short)780,(short)748,(short)716,(short)684,(short)652,(short)620,(short)588,(short)556,(short)524,(short)492,(short)460,(short)428,(short)396,(short)372,(short)356,(short)340,(short)324,(short)308,(short)292,(short)276,(short)260,(short)244,(short)228,(short)212,(short)196,(short)180,(short)164,(short)148,(short)132,(short)120,(short)112,(short)104,(short)96,(short)88,(short)80,(short)72,(short)64,(short)56,(short)48,(short)40,(short)32,(short)24,(short)16,(short)8,(short)0,
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_306b50e70c93d428_472_boot,"borogove.calls.MediaStreamTrack","boot",0x70902a93,"borogove.calls.MediaStreamTrack.boot","borogove/calls/PeerConnection.cpp.hx",472,0x6b4179c1)
-static const unsigned char _hx_array_data_338355ad_40[] = {
+HX_LOCAL_STACK_FRAME(_hx_pos_306b50e70c93d428_478_boot,"borogove.calls.MediaStreamTrack","boot",0x70902a93,"borogove.calls.MediaStreamTrack.boot","borogove/calls/PeerConnection.cpp.hx",478,0x6b4179c1)
+static const unsigned char _hx_array_data_338355ad_41[] = {
 	(unsigned char)0,(unsigned char)1,(unsigned char)2,(unsigned char)2,(unsigned char)3,(unsigned char)3,(unsigned char)3,(unsigned char)3,(unsigned char)4,(unsigned char)4,(unsigned char)4,(unsigned char)4,(unsigned char)4,(unsigned char)4,(unsigned char)4,(unsigned char)4,(unsigned char)5,(unsigned char)5,(unsigned char)5,(unsigned char)5,(unsigned char)5,(unsigned char)5,(unsigned char)5,(unsigned char)5,(unsigned char)5,(unsigned char)5,(unsigned char)5,(unsigned char)5,(unsigned char)5,(unsigned char)5,(unsigned char)5,(unsigned char)5,(unsigned char)6,(unsigned char)6,(unsigned char)6,(unsigned char)6,(unsigned char)6,(unsigned char)6,(unsigned char)6,(unsigned char)6,(unsigned char)6,(unsigned char)6,(unsigned char)6,(unsigned char)6,(unsigned char)6,(unsigned char)6,(unsigned char)6,(unsigned char)6,(unsigned char)6,(unsigned char)6,(unsigned char)6,(unsigned char)6,(unsigned char)6,(unsigned char)6,(unsigned char)6,(unsigned char)6,(unsigned char)6,(unsigned char)6,(unsigned char)6,(unsigned char)6,(unsigned char)6,(unsigned char)6,(unsigned char)6,(unsigned char)6,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,(unsigned char)7,
 };
 namespace borogove{
@@ -196,75 +196,75 @@ bool MediaStreamTrack_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 ::String MediaStreamTrack_obj::id__fromC(){
-            	HX_STACKFRAME(&_hx_pos_1f66e5b64430fc7f_371_id__fromC)
-HXDLIN( 371)		return this->get_id();
+            	HX_STACKFRAME(&_hx_pos_1f66e5b64430fc7f_398_id__fromC)
+HXDLIN( 398)		return this->get_id();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(MediaStreamTrack_obj,id__fromC,return )
 
 bool MediaStreamTrack_obj::muted__fromC(){
-            	HX_STACKFRAME(&_hx_pos_1f66e5b64430fc7f_371_muted__fromC)
-HXDLIN( 371)		return this->get_muted();
+            	HX_STACKFRAME(&_hx_pos_1f66e5b64430fc7f_398_muted__fromC)
+HXDLIN( 398)		return this->get_muted();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(MediaStreamTrack_obj,muted__fromC,return )
 
 ::String MediaStreamTrack_obj::kind__fromC(){
-            	HX_STACKFRAME(&_hx_pos_1f66e5b64430fc7f_371_kind__fromC)
-HXDLIN( 371)		return this->get_kind();
+            	HX_STACKFRAME(&_hx_pos_1f66e5b64430fc7f_398_kind__fromC)
+HXDLIN( 398)		return this->get_kind();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(MediaStreamTrack_obj,kind__fromC,return )
 
 size_t MediaStreamTrack_obj::supportedAudioFormats__fromC(void*** outPtr){
-            	HX_STACKFRAME(&_hx_pos_1f66e5b64430fc7f_360_supportedAudioFormats__fromC)
-HXDLIN( 360)		::Array< ::Dynamic> x = this->get_supportedAudioFormats();
-HXDLIN( 360)		if (::hx::IsNotNull( outPtr )) {
-HXDLIN( 360)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
-HXDLIN( 360)			{
-HXDLIN( 360)				int _g = 0;
-HXDLIN( 360)				while((_g < x->length)){
-HXDLIN( 360)					 ::borogove::calls::AudioFormat el = x->__get(_g).StaticCast<  ::borogove::calls::AudioFormat >();
-HXDLIN( 360)					_g = (_g + 1);
-HXDLIN( 360)					{
-HXDLIN( 360)						 ::Dynamic haxeObject = el;
-HXDLIN( 360)						void* ptr = haxeObject.mPtr;
-HXDLIN( 360)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 360)						{
-HXDLIN( 360)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 360)							if (::hx::IsNull( store )) {
-HXDLIN( 360)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_1f66e5b64430fc7f_385_supportedAudioFormats__fromC)
+HXDLIN( 385)		::Array< ::Dynamic> x = this->get_supportedAudioFormats();
+HXDLIN( 385)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 385)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 385)			{
+HXDLIN( 385)				int _g = 0;
+HXDLIN( 385)				while((_g < x->length)){
+HXDLIN( 385)					 ::borogove::calls::AudioFormat el = x->__get(_g).StaticCast<  ::borogove::calls::AudioFormat >();
+HXDLIN( 385)					_g = (_g + 1);
+HXDLIN( 385)					{
+HXDLIN( 385)						 ::Dynamic haxeObject = el;
+HXDLIN( 385)						void* ptr = haxeObject.mPtr;
+HXDLIN( 385)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 385)						{
+HXDLIN( 385)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 385)							if (::hx::IsNull( store )) {
+HXDLIN( 385)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
             									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             									->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 360)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN( 385)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             							}
             							else {
-HXDLIN( 360)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 385)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             							}
             						}
             					}
             				}
             			}
-HXDLIN( 360)			void** ptr1 = (void**)x->getBase();
-HXDLIN( 360)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 360)			{
-HXDLIN( 360)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 360)				if (::hx::IsNull( store1 )) {
-HXDLIN( 360)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 385)			void** ptr1 = (void**)x->getBase();
+HXDLIN( 385)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 385)			{
+HXDLIN( 385)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 385)				if (::hx::IsNull( store1 )) {
+HXDLIN( 385)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),x));
-HXDLIN( 360)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+HXDLIN( 385)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
             				}
             				else {
-HXDLIN( 360)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXDLIN( 385)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXDLIN( 360)			_hx_tmp->set_ref(ptr1);
+HXDLIN( 385)			_hx_tmp->set_ref(ptr1);
             		}
-HXDLIN( 360)		return ( (size_t)(x->length) );
+HXDLIN( 385)		return ( (size_t)(x->length) );
             	}
 
 
@@ -301,107 +301,123 @@ HX_DEFINE_DYNAMIC_FUNC0(MediaStreamTrack_obj,get_muted,return )
 ::Array< ::Dynamic> MediaStreamTrack_obj::get_supportedAudioFormats(){
             	HX_GC_STACKFRAME(&_hx_pos_306b50e70c93d428_413_get_supportedAudioFormats)
 HXLINE( 414)		 std::optional<  rtc::Description::Media > maybeMedia = this->media;
-HXLINE( 415)		if (!(maybeMedia.has_value())) {
+HXLINE( 415)		bool _hx_tmp;
+HXDLIN( 415)		if (maybeMedia.has_value()) {
+HXLINE( 415)			_hx_tmp = ::hx::IsNull( this->remoteMedia );
+            		}
+            		else {
+HXLINE( 415)			_hx_tmp = true;
+            		}
+HXDLIN( 415)		if (_hx_tmp) {
 HXLINE( 415)			return ::Array_obj< ::Dynamic>::__new(0);
             		}
 HXLINE( 416)		 rtc::Description::Media m = ( ( rtc::Description::Media)(( (cpp::Struct<  rtc::Description::Media >)(maybeMedia.value()) )) );
 HXLINE( 417)		::Array< ::Dynamic> codecs = ::Array_obj< ::Dynamic>::__new(0);
 HXLINE( 418)		 std::vector< int > payloadTypes = m.payloadTypes();
-HXLINE( 419)		{
-HXLINE( 419)			int _g = 0;
-HXDLIN( 419)			int _g1 = ( (int)(payloadTypes.size()) );
-HXDLIN( 419)			while((_g < _g1)){
-HXLINE( 419)				_g = (_g + 1);
-HXDLIN( 419)				int i = (_g - 1);
-HXLINE( 420)				int payloadType = ( (int)(payloadTypes.at(i)) );
-HXLINE( 421)				bool _hx_tmp;
-HXDLIN( 421)				if (::hx::IsNotNull( this->remoteMedia )) {
-HXLINE( 421)					_hx_tmp = this->remoteMedia->get_ref().hasPayloadType(payloadType);
-            				}
-            				else {
-HXLINE( 421)					_hx_tmp = true;
-            				}
-HXDLIN( 421)				if (_hx_tmp) {
-HXLINE( 422)					 rtc::Description::Media::RtpMap rtp = ::cpp::Pointer_obj::fromRaw(m.rtpMap(payloadType))->get_ref();
-HXLINE( 423)					 std::string this1 = rtp.format;
-HXDLIN( 423)					::String _hx_tmp1 = ( ( hx::StdString)(::hx::StdString(this1)) ).toString();
-HXDLIN( 423)					int _hx_tmp2 = ( (int)(payloadTypes.at(i)) );
-HXDLIN( 423)					int rtp1 = rtp.clockRate;
-HXDLIN( 423)					int _hx_tmp3;
-HXDLIN( 423)					 std::string this2 = rtp.encParams;
-HXDLIN( 423)					if ((( ( hx::StdString)(::hx::StdString(this2)) ).toString() == HX_("",00,00,00,00))) {
-HXLINE( 423)						_hx_tmp3 = 1;
-            					}
-            					else {
-HXLINE( 423)						 std::string this3 = rtp.encParams;
-HXDLIN( 423)						_hx_tmp3 = ( (int)(::Std_obj::parseInt(( ( hx::StdString)(::hx::StdString(this3)) ).toString())) );
-            					}
-HXDLIN( 423)					codecs->push( ::borogove::calls::AudioFormat_obj::__alloc( HX_CTX ,_hx_tmp1,( (unsigned char)(_hx_tmp2) ),rtp1,_hx_tmp3));
-HXLINE( 424)					 std::string this4 = rtp.format;
-HXDLIN( 424)					if ((( ( hx::StdString)(::hx::StdString(this4)) ).toString() == HX_("opus",bf,11,b4,49))) {
-HXLINE( 425)						 std::string this5 = rtp.format;
-HXDLIN( 425)						::String _hx_tmp4 = ( ( hx::StdString)(::hx::StdString(this5)) ).toString();
-HXDLIN( 425)						int _hx_tmp5 = ( (int)(payloadTypes.at(i)) );
-HXDLIN( 425)						int _hx_tmp6;
-HXDLIN( 425)						 std::string this6 = rtp.encParams;
-HXDLIN( 425)						if ((( ( hx::StdString)(::hx::StdString(this6)) ).toString() == HX_("",00,00,00,00))) {
-HXLINE( 425)							_hx_tmp6 = 1;
+HXLINE( 419)		 std::vector< int > rPayloadTypes = this->remoteMedia->get_ref().payloadTypes();
+HXLINE( 421)		{
+HXLINE( 421)			int _g = 0;
+HXDLIN( 421)			int _g1 = ( (int)(payloadTypes.size()) );
+HXDLIN( 421)			while((_g < _g1)){
+HXLINE( 421)				_g = (_g + 1);
+HXLINE( 422)				int lpayloadType = ( (int)(payloadTypes.at((_g - 1))) );
+HXLINE( 423)				 rtc::Description::Media::RtpMap lrtp = ::cpp::Pointer_obj::fromRaw(m.rtpMap(lpayloadType))->get_ref();
+HXLINE( 424)				{
+HXLINE( 424)					int _g2 = 0;
+HXDLIN( 424)					int _g3 = ( (int)(rPayloadTypes.size()) );
+HXDLIN( 424)					while((_g2 < _g3)){
+HXLINE( 424)						_g2 = (_g2 + 1);
+HXLINE( 425)						int payloadType = ( (int)(rPayloadTypes.at((_g2 - 1))) );
+HXLINE( 426)						 rtc::Description::Media::RtpMap rtp = ::cpp::Pointer_obj::fromRaw(this->remoteMedia->get_ref().rtpMap(payloadType))->get_ref();
+HXLINE( 427)						bool _hx_tmp1;
+HXDLIN( 427)						 std::string this1 = rtp.format;
+HXDLIN( 427)						::String _hx_tmp2 = ( ( hx::StdString)(::hx::StdString(this1)) ).toString();
+HXDLIN( 427)						 std::string this2 = lrtp.format;
+HXDLIN( 427)						if ((_hx_tmp2 == ( ( hx::StdString)(::hx::StdString(this2)) ).toString())) {
+HXLINE( 427)							_hx_tmp1 = (rtp.clockRate == lrtp.clockRate);
             						}
             						else {
-HXLINE( 425)							 std::string this7 = rtp.encParams;
-HXDLIN( 425)							_hx_tmp6 = ( (int)(::Std_obj::parseInt(( ( hx::StdString)(::hx::StdString(this7)) ).toString())) );
-            						}
-HXDLIN( 425)						codecs->push( ::borogove::calls::AudioFormat_obj::__alloc( HX_CTX ,_hx_tmp4,( (unsigned char)(_hx_tmp5) ),16000,_hx_tmp6));
-HXLINE( 426)						 std::string this8 = rtp.format;
-HXDLIN( 426)						::String _hx_tmp7 = ( ( hx::StdString)(::hx::StdString(this8)) ).toString();
-HXDLIN( 426)						int _hx_tmp8 = ( (int)(payloadTypes.at(i)) );
-HXDLIN( 426)						int _hx_tmp9;
-HXDLIN( 426)						 std::string this9 = rtp.encParams;
-HXDLIN( 426)						if ((( ( hx::StdString)(::hx::StdString(this9)) ).toString() == HX_("",00,00,00,00))) {
-HXLINE( 426)							_hx_tmp9 = 1;
+HXLINE( 427)							_hx_tmp1 = false;
             						}
-            						else {
-HXLINE( 426)							 std::string this10 = rtp.encParams;
-HXDLIN( 426)							_hx_tmp9 = ( (int)(::Std_obj::parseInt(( ( hx::StdString)(::hx::StdString(this10)) ).toString())) );
+HXDLIN( 427)						if (_hx_tmp1) {
+HXLINE( 428)							 std::string this3 = rtp.format;
+HXDLIN( 428)							::String _hx_tmp3 = ( ( hx::StdString)(::hx::StdString(this3)) ).toString();
+HXDLIN( 428)							int rtp1 = rtp.clockRate;
+HXDLIN( 428)							int _hx_tmp4;
+HXDLIN( 428)							 std::string this4 = rtp.encParams;
+HXDLIN( 428)							if ((( ( hx::StdString)(::hx::StdString(this4)) ).toString() == HX_("",00,00,00,00))) {
+HXLINE( 428)								_hx_tmp4 = 1;
+            							}
+            							else {
+HXLINE( 428)								 std::string this5 = rtp.encParams;
+HXDLIN( 428)								_hx_tmp4 = ( (int)(::Std_obj::parseInt(( ( hx::StdString)(::hx::StdString(this5)) ).toString())) );
+            							}
+HXDLIN( 428)							codecs->push( ::borogove::calls::AudioFormat_obj::__alloc( HX_CTX ,_hx_tmp3,( (unsigned char)(payloadType) ),rtp1,_hx_tmp4));
+HXLINE( 429)							 std::string this6 = rtp.format;
+HXDLIN( 429)							if ((( ( hx::StdString)(::hx::StdString(this6)) ).toString() == HX_("opus",bf,11,b4,49))) {
+HXLINE( 430)								 std::string this7 = rtp.format;
+HXDLIN( 430)								::String _hx_tmp5 = ( ( hx::StdString)(::hx::StdString(this7)) ).toString();
+HXDLIN( 430)								int _hx_tmp6;
+HXDLIN( 430)								 std::string this8 = rtp.encParams;
+HXDLIN( 430)								if ((( ( hx::StdString)(::hx::StdString(this8)) ).toString() == HX_("",00,00,00,00))) {
+HXLINE( 430)									_hx_tmp6 = 1;
+            								}
+            								else {
+HXLINE( 430)									 std::string this9 = rtp.encParams;
+HXDLIN( 430)									_hx_tmp6 = ( (int)(::Std_obj::parseInt(( ( hx::StdString)(::hx::StdString(this9)) ).toString())) );
+            								}
+HXDLIN( 430)								codecs->push( ::borogove::calls::AudioFormat_obj::__alloc( HX_CTX ,_hx_tmp5,( (unsigned char)(payloadType) ),16000,_hx_tmp6));
+HXLINE( 431)								 std::string this10 = rtp.format;
+HXDLIN( 431)								::String _hx_tmp7 = ( ( hx::StdString)(::hx::StdString(this10)) ).toString();
+HXDLIN( 431)								int _hx_tmp8;
+HXDLIN( 431)								 std::string this11 = rtp.encParams;
+HXDLIN( 431)								if ((( ( hx::StdString)(::hx::StdString(this11)) ).toString() == HX_("",00,00,00,00))) {
+HXLINE( 431)									_hx_tmp8 = 1;
+            								}
+            								else {
+HXLINE( 431)									 std::string this12 = rtp.encParams;
+HXDLIN( 431)									_hx_tmp8 = ( (int)(::Std_obj::parseInt(( ( hx::StdString)(::hx::StdString(this12)) ).toString())) );
+            								}
+HXDLIN( 431)								codecs->push( ::borogove::calls::AudioFormat_obj::__alloc( HX_CTX ,_hx_tmp7,( (unsigned char)(payloadType) ),8000,_hx_tmp8));
+            							}
             						}
-HXDLIN( 426)						codecs->push( ::borogove::calls::AudioFormat_obj::__alloc( HX_CTX ,_hx_tmp7,( (unsigned char)(_hx_tmp8) ),8000,_hx_tmp9));
             					}
             				}
             			}
             		}
-HXLINE( 431)		return codecs;
+HXLINE( 437)		return codecs;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(MediaStreamTrack_obj,get_supportedAudioFormats,return )
 
  std::shared_ptr<  rtc::Track > MediaStreamTrack_obj::set_track( std::shared_ptr<  rtc::Track > newTrack){
-            	HX_STACKFRAME(&_hx_pos_306b50e70c93d428_434_set_track)
-HXLINE( 435)		if (!track) {
-HXLINE( 436)			this->track = newTrack;
-HXLINE( 437)			if ((this->get_kind() == HX_("audio",d6,78,80,27))) {
-HXLINE( 438)				 std::shared_ptr<  rtc::RtpDepacketizer > depacket = std::make_shared<rtc::RtpDepacketizer>();
-HXLINE( 439)				 std::shared_ptr<  rtc::RtcpReceivingSession > rtcp = std::make_shared<rtc::RtcpReceivingSession>();
-HXLINE( 440)				depacket->addToChain(rtcp);
-HXLINE( 441)				this->rtpPacketizationConfig = std::make_shared<rtc::RtpPacketizationConfig>(( (unsigned int)(0) ),::hx::StdString(HX_("audio",d6,78,80,27)),( (unsigned char)(0) ),( (unsigned int)(8000) ));
-HXLINE( 447)				 std::shared_ptr<  rtc::RtpPacketizer > packet = std::make_shared<rtc::RtpPacketizer>(this->rtpPacketizationConfig);
-HXLINE( 448)				depacket->addToChain(packet);
-HXLINE( 449)				this->track->setMediaHandler(depacket);
-HXLINE( 450)				this->track->onFrame([this](rtc::binary msg, rtc::FrameInfo frame_info) { this->onFrame(msg, frame_info); });;
-HXLINE( 451)				this->track->onOpen([this]() { this->notifyReadyForData(true); });;
+            	HX_STACKFRAME(&_hx_pos_306b50e70c93d428_440_set_track)
+HXLINE( 441)		if (!track) {
+HXLINE( 442)			this->track = newTrack;
+HXLINE( 443)			if ((this->get_kind() == HX_("audio",d6,78,80,27))) {
+HXLINE( 444)				 std::shared_ptr<  rtc::RtpDepacketizer > depacket = std::make_shared<rtc::RtpDepacketizer>();
+HXLINE( 445)				 std::shared_ptr<  rtc::RtcpReceivingSession > rtcp = std::make_shared<rtc::RtcpReceivingSession>();
+HXLINE( 446)				depacket->addToChain(rtcp);
+HXLINE( 447)				this->rtpPacketizationConfig = std::make_shared<rtc::RtpPacketizationConfig>(( (unsigned int)(0) ),::hx::StdString(HX_("audio",d6,78,80,27)),( (unsigned char)(0) ),( (unsigned int)(8000) ));
+HXLINE( 453)				 std::shared_ptr<  rtc::RtpPacketizer > packet = std::make_shared<rtc::RtpPacketizer>(this->rtpPacketizationConfig);
+HXLINE( 454)				depacket->addToChain(packet);
+HXLINE( 455)				this->track->setMediaHandler(depacket);
+HXLINE( 456)				this->track->onFrame([this](rtc::binary msg, rtc::FrameInfo frame_info) { this->onFrame(msg, frame_info); });;
+HXLINE( 457)				this->track->onOpen([this]() { this->notifyReadyForData(true); });;
             			}
-HXLINE( 453)			this->track->onClosed([this]() { int base = 0; hx::SetTopOfStack(&base, true); this->stop(); hx::SetTopOfStack((int*)0, true); });;
+HXLINE( 459)			this->track->onClosed([this]() { int base = 0; hx::SetTopOfStack(&base, true); this->stop(); hx::SetTopOfStack((int*)0, true); });;
             		}
             		else {
-HXLINE( 455)			HX_STACK_DO_THROW(HX_("Track already set",e5,d9,99,b9));
+HXLINE( 461)			HX_STACK_DO_THROW(HX_("Track already set",e5,d9,99,b9));
             		}
-HXLINE( 458)		return this->track;
+HXLINE( 464)		return this->track;
             	}
 
 
 void MediaStreamTrack_obj::addPCMListener( ::Dynamic callback){
-            	HX_STACKFRAME(&_hx_pos_306b50e70c93d428_468_addPCMListener)
-HXDLIN( 468)		this->pcmCallback = callback;
+            	HX_STACKFRAME(&_hx_pos_306b50e70c93d428_474_addPCMListener)
+HXDLIN( 474)		this->pcmCallback = callback;
             	}
 
 
@@ -410,108 +426,108 @@ HX_DEFINE_DYNAMIC_FUNC1(MediaStreamTrack_obj,addPCMListener,(void))
 void MediaStreamTrack_obj::addPCMListener__fromC(::cpp::Function< void  (short*,size_t,int,int,void*) > callback,void* callback__context){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,void*,callback__context,::cpp::Function< void  (short* HX_COMMA size_t HX_COMMA int HX_COMMA int HX_COMMA void*) >,callback) HXARGC(3)
             		void _hx_run(::Array< short > a0,int a1,int a2){
-            			HX_STACKFRAME(&_hx_pos_1f66e5b64430fc7f_255_addPCMListener__fromC)
-HXLINE( 226)			void** ptr = (void**)a0->getBase();
-HXDLIN( 226)			::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 226)			{
-HXLINE( 226)				 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 226)				if (::hx::IsNull( store )) {
-HXLINE( 226)					store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            			HX_STACKFRAME(&_hx_pos_1f66e5b64430fc7f_272_addPCMListener__fromC)
+HXLINE( 243)			void** ptr = (void**)a0->getBase();
+HXDLIN( 243)			::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 243)			{
+HXLINE( 243)				 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 243)				if (::hx::IsNull( store )) {
+HXLINE( 243)					store =  ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             						->setFixed(1,HX_("value",71,7f,b8,31),a0));
-HXDLIN( 226)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN( 243)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             				}
             				else {
-HXLINE( 226)					::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE( 243)					::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             				}
             			}
-HXDLIN( 226)			int xl0 = a0->length;
-HXLINE( 241)			__hxcpp_enter_gc_free_zone();
-HXLINE( 244)			callback(( (short*)(ptr) ),( (size_t)(xl0) ),a1,a2,callback__context);
-HXLINE( 248)			__hxcpp_exit_gc_free_zone();
+HXDLIN( 243)			int xl0 = a0->length;
+HXLINE( 258)			__hxcpp_enter_gc_free_zone();
+HXLINE( 261)			callback(( (short*)(ptr) ),( (size_t)(xl0) ),a1,a2,callback__context);
+HXLINE( 265)			__hxcpp_exit_gc_free_zone();
             		}
             		HX_END_LOCAL_FUNC3((void))
 
-            	HX_STACKFRAME(&_hx_pos_1f66e5b64430fc7f_315_addPCMListener__fromC)
-HXDLIN( 315)		this->addPCMListener( ::Dynamic(new _hx_Closure_0(callback__context,callback)));
+            	HX_STACKFRAME(&_hx_pos_1f66e5b64430fc7f_339_addPCMListener__fromC)
+HXDLIN( 339)		this->addPCMListener( ::Dynamic(new _hx_Closure_0(callback__context,callback)));
             	}
 
 
 void MediaStreamTrack_obj::onFrame( std::vector<  std::byte > msg, rtc::FrameInfo frameInfo){
-            	HX_STACKFRAME(&_hx_pos_306b50e70c93d428_493_onFrame)
-HXLINE( 494)		int base = 0; hx::SetTopOfStack(&base, true);;
-HXLINE( 495)		 rtc::Description::Media::RtpMap rtp = ::cpp::Pointer_obj::fromRaw(this->track->description().rtpMap(frameInfo.payloadType))->get_ref();
-HXLINE( 496)		 std::string this1 = rtp.format;
-HXDLIN( 496)		::String format = ( ( hx::StdString)(::hx::StdString(this1)) ).toString();
-HXLINE( 497)		 ::Dynamic channels;
-HXDLIN( 497)		 std::string this2 = rtp.encParams;
-HXDLIN( 497)		if ((( ( hx::StdString)(::hx::StdString(this2)) ).toString() == HX_("",00,00,00,00))) {
-HXLINE( 497)			channels = 1;
+            	HX_STACKFRAME(&_hx_pos_306b50e70c93d428_499_onFrame)
+HXLINE( 500)		int base = 0; hx::SetTopOfStack(&base, true);;
+HXLINE( 501)		 rtc::Description::Media::RtpMap rtp = ::cpp::Pointer_obj::fromRaw(this->track->description().rtpMap(frameInfo.payloadType))->get_ref();
+HXLINE( 502)		 std::string this1 = rtp.format;
+HXDLIN( 502)		::String format = ( ( hx::StdString)(::hx::StdString(this1)) ).toString();
+HXLINE( 503)		 ::Dynamic channels;
+HXDLIN( 503)		 std::string this2 = rtp.encParams;
+HXDLIN( 503)		if ((( ( hx::StdString)(::hx::StdString(this2)) ).toString() == HX_("",00,00,00,00))) {
+HXLINE( 503)			channels = 1;
             		}
             		else {
-HXLINE( 497)			 std::string this3 = rtp.encParams;
-HXDLIN( 497)			channels = ::Std_obj::parseInt(( ( hx::StdString)(::hx::StdString(this3)) ).toString());
+HXLINE( 503)			 std::string this3 = rtp.encParams;
+HXDLIN( 503)			channels = ::Std_obj::parseInt(( ( hx::StdString)(::hx::StdString(this3)) ).toString());
             		}
-HXLINE( 498)		if ((format == HX_("PCMU",1b,2c,14,35))) {
-HXLINE( 499)			::Array< short > s16 = ::Array_obj< short >::__new(( (int)(msg.size()) ));
-HXLINE( 500)			{
-HXLINE( 500)				int _g = 0;
-HXDLIN( 500)				int _g1 = ( (int)(msg.size()) );
-HXDLIN( 500)				while((_g < _g1)){
-HXLINE( 500)					_g = (_g + 1);
-HXDLIN( 500)					int i = (_g - 1);
-HXLINE( 501)					{
-HXLINE( 501)						short val = ::borogove::calls::MediaStreamTrack_obj::ULAW_DECODE->__get(( (int)(msg.at(i)) ));
-HXDLIN( 501)						s16->__unsafe_set(i,val);
+HXLINE( 504)		if ((format == HX_("PCMU",1b,2c,14,35))) {
+HXLINE( 505)			::Array< short > s16 = ::Array_obj< short >::__new(( (int)(msg.size()) ));
+HXLINE( 506)			{
+HXLINE( 506)				int _g = 0;
+HXDLIN( 506)				int _g1 = ( (int)(msg.size()) );
+HXDLIN( 506)				while((_g < _g1)){
+HXLINE( 506)					_g = (_g + 1);
+HXDLIN( 506)					int i = (_g - 1);
+HXLINE( 507)					{
+HXLINE( 507)						short val = ::borogove::calls::MediaStreamTrack_obj::ULAW_DECODE->__get(( (int)(msg.at(i)) ));
+HXDLIN( 507)						s16->__unsafe_set(i,val);
             					}
             				}
             			}
-HXLINE( 503)			if (::hx::IsNotNull( this->pcmCallback )) {
-HXLINE( 504)				this->pcmCallback(s16,rtp.clockRate,channels);
+HXLINE( 509)			if (::hx::IsNotNull( this->pcmCallback )) {
+HXLINE( 510)				this->pcmCallback(s16,rtp.clockRate,channels);
             			}
             		}
             		else {
-HXLINE( 506)			if ((format == HX_("opus",bf,11,b4,49))) {
-HXLINE( 507)				::Array< short > s161 = ::Array_obj< short >::__new(5760);
-HXLINE( 508)				if (!opus) {
-HXLINE( 508)					::cpp::Pointer< int > tmp = null();
-HXDLIN( 508)					this->opus = opus_decoder_create(rtp.clockRate,( (int)(channels) ),tmp);
+HXLINE( 512)			if ((format == HX_("opus",bf,11,b4,49))) {
+HXLINE( 513)				::Array< short > s161 = ::Array_obj< short >::__new(5760);
+HXLINE( 514)				if (!opus) {
+HXLINE( 514)					::cpp::Pointer< int > tmp = null();
+HXDLIN( 514)					this->opus = opus_decoder_create(rtp.clockRate,( (int)(channels) ),tmp);
             				}
-HXLINE( 510)				::cpp::Pointer< unsigned char > tmp1 = ( (::cpp::Pointer< unsigned char >)(msg.data()) );
-HXDLIN( 510)				::cpp::Pointer< short > tmp2 = ( (::cpp::Pointer< short >)(::cpp::Pointer_obj::ofArray(s161)) );
-HXDLIN( 510)				cpp::Struct<  OpusDecoder* > decoded = this->opus;
-HXDLIN( 510)				size_t decoded1 = msg.size();
-HXDLIN( 510)				int decoded2 = opus_decode(decoded,tmp1,( (int)(decoded1) ),tmp2,::Std_obj::_hx_int((( (Float)(s161->length) ) / ( (Float)(channels) ))),false);
-HXLINE( 511)				s161->resize((decoded2 * ( (int)(channels) )));
-HXLINE( 512)				if (::hx::IsNotNull( this->pcmCallback )) {
-HXLINE( 513)					this->pcmCallback(s161,rtp.clockRate,channels);
+HXLINE( 516)				::cpp::Pointer< unsigned char > tmp1 = ( (::cpp::Pointer< unsigned char >)(msg.data()) );
+HXDLIN( 516)				::cpp::Pointer< short > tmp2 = ( (::cpp::Pointer< short >)(::cpp::Pointer_obj::ofArray(s161)) );
+HXDLIN( 516)				cpp::Struct<  OpusDecoder* > decoded = this->opus;
+HXDLIN( 516)				size_t decoded1 = msg.size();
+HXDLIN( 516)				int decoded2 = opus_decode(decoded,tmp1,( (int)(decoded1) ),tmp2,::Std_obj::_hx_int((( (Float)(s161->length) ) / ( (Float)(channels) ))),false);
+HXLINE( 517)				s161->resize((decoded2 * ( (int)(channels) )));
+HXLINE( 518)				if (::hx::IsNotNull( this->pcmCallback )) {
+HXLINE( 519)					this->pcmCallback(s161,rtp.clockRate,channels);
             				}
             			}
             			else {
-HXLINE( 516)				::haxe::Log_obj::trace(HX_("Ignoring audio frame with format",a3,bb,fe,5b), ::Dynamic(::hx::Anon_obj::Create(5)
+HXLINE( 522)				::haxe::Log_obj::trace(HX_("Ignoring audio frame with format",a3,bb,fe,5b), ::Dynamic(::hx::Anon_obj::Create(5)
             					->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.calls.MediaStreamTrack",ad,55,83,33))
             					->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,format))
             					->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("onFrame",8e,16,c1,9c))
             					->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/calls/PeerConnection.cpp.hx",c1,79,41,6b))
-            					->setFixed(4,HX_("lineNumber",dd,81,22,76),516)));
+            					->setFixed(4,HX_("lineNumber",dd,81,22,76),522)));
             			}
             		}
-HXLINE( 518)		hx::SetTopOfStack((int*)0, true);;
+HXLINE( 524)		hx::SetTopOfStack((int*)0, true);;
             	}
 
 
 void MediaStreamTrack_obj::addReadyForPCMListener( ::Dynamic callback){
-            	HX_STACKFRAME(&_hx_pos_306b50e70c93d428_527_addReadyForPCMListener)
-HXLINE( 528)		this->readyForPCMCallback = callback;
-HXLINE( 529)		bool _hx_tmp;
-HXDLIN( 529)		if (track) {
-HXLINE( 529)			_hx_tmp = this->track->isOpen();
+            	HX_STACKFRAME(&_hx_pos_306b50e70c93d428_533_addReadyForPCMListener)
+HXLINE( 534)		this->readyForPCMCallback = callback;
+HXLINE( 535)		bool _hx_tmp;
+HXDLIN( 535)		if (track) {
+HXLINE( 535)			_hx_tmp = this->track->isOpen();
             		}
             		else {
-HXLINE( 529)			_hx_tmp = false;
+HXLINE( 535)			_hx_tmp = false;
             		}
-HXDLIN( 529)		if (_hx_tmp) {
-HXLINE( 530)			this->notifyReadyForData(false);
+HXDLIN( 535)		if (_hx_tmp) {
+HXLINE( 536)			this->notifyReadyForData(false);
             		}
             	}
 
@@ -521,40 +537,40 @@ HX_DEFINE_DYNAMIC_FUNC1(MediaStreamTrack_obj,addReadyForPCMListener,(void))
 void MediaStreamTrack_obj::addReadyForPCMListener__fromC(::cpp::Function< void  (void*) > callback,void* callback__context){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,void*,callback__context,::cpp::Function< void  (void*) >,callback) HXARGC(0)
             		void _hx_run(){
-            			HX_STACKFRAME(&_hx_pos_1f66e5b64430fc7f_255_addReadyForPCMListener__fromC)
-HXLINE( 241)			__hxcpp_enter_gc_free_zone();
-HXLINE( 244)			callback(callback__context);
-HXLINE( 248)			__hxcpp_exit_gc_free_zone();
+            			HX_STACKFRAME(&_hx_pos_1f66e5b64430fc7f_272_addReadyForPCMListener__fromC)
+HXLINE( 258)			__hxcpp_enter_gc_free_zone();
+HXLINE( 261)			callback(callback__context);
+HXLINE( 265)			__hxcpp_exit_gc_free_zone();
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_STACKFRAME(&_hx_pos_1f66e5b64430fc7f_315_addReadyForPCMListener__fromC)
-HXDLIN( 315)		this->addReadyForPCMListener( ::Dynamic(new _hx_Closure_0(callback__context,callback)));
+            	HX_STACKFRAME(&_hx_pos_1f66e5b64430fc7f_339_addReadyForPCMListener__fromC)
+HXDLIN( 339)		this->addReadyForPCMListener( ::Dynamic(new _hx_Closure_0(callback__context,callback)));
             	}
 
 
 void MediaStreamTrack_obj::notifyReadyForData(bool fromCPP){
-            	HX_STACKFRAME(&_hx_pos_306b50e70c93d428_534_notifyReadyForData)
-HXDLIN( 534)		 ::borogove::calls::MediaStreamTrack _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 535)		if (fromCPP) { int base = 0; hx::SetTopOfStack(&base, true); };
-HXLINE( 536)		if (::hx::IsNotNull( this->readyForPCMCallback )) {
+            	HX_STACKFRAME(&_hx_pos_306b50e70c93d428_540_notifyReadyForData)
+HXDLIN( 540)		 ::borogove::calls::MediaStreamTrack _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 541)		if (fromCPP) { int base = 0; hx::SetTopOfStack(&base, true); };
+HXLINE( 542)		if (::hx::IsNotNull( this->readyForPCMCallback )) {
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::calls::MediaStreamTrack,_gthis) HXARGC(0)
             			void _hx_run(){
-            				HX_STACKFRAME(&_hx_pos_306b50e70c93d428_538_notifyReadyForData)
-HXLINE( 538)				if ((_gthis->audioQ->length > (50 + (( (Float)(50) ) * _gthis->bufferSizeInSeconds)))) {
-HXLINE( 539)					_gthis->mutex->acquire();
-HXLINE( 540)					_gthis->waitForQ = true;
-HXLINE( 541)					_gthis->mutex->release();
+            				HX_STACKFRAME(&_hx_pos_306b50e70c93d428_544_notifyReadyForData)
+HXLINE( 544)				if ((_gthis->audioQ->length > (50 + (( (Float)(50) ) * _gthis->bufferSizeInSeconds)))) {
+HXLINE( 545)					_gthis->mutex->acquire();
+HXLINE( 546)					_gthis->waitForQ = true;
+HXLINE( 547)					_gthis->mutex->release();
             				}
             				else {
-HXLINE( 543)					_gthis->readyForPCMCallback();
+HXLINE( 549)					_gthis->readyForPCMCallback();
             				}
             			}
             			HX_END_LOCAL_FUNC0((void))
 
-HXLINE( 537)			this->eventLoop->run( ::Dynamic(new _hx_Closure_0(_gthis)));
+HXLINE( 543)			this->eventLoop->run( ::Dynamic(new _hx_Closure_0(_gthis)));
             		}
-HXLINE( 547)		if (fromCPP) { hx::SetTopOfStack((int*)0, true); };
+HXLINE( 553)		if (fromCPP) { hx::SetTopOfStack((int*)0, true); };
             	}
 
 
@@ -563,194 +579,194 @@ HX_DEFINE_DYNAMIC_FUNC1(MediaStreamTrack_obj,notifyReadyForData,(void))
 void MediaStreamTrack_obj::writePCM(::Array< short > pcm,int clockRate,int channels){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,int,channels,int,clockRate) HXARGC(1)
             		bool _hx_run( ::borogove::calls::AudioFormat format){
-            			HX_STACKFRAME(&_hx_pos_306b50e70c93d428_558_writePCM)
-HXLINE( 558)			if ((format->clockRate == clockRate)) {
-HXLINE( 558)				return (format->channels == channels);
+            			HX_STACKFRAME(&_hx_pos_306b50e70c93d428_564_writePCM)
+HXLINE( 564)			if ((format->clockRate == clockRate)) {
+HXLINE( 564)				return (format->channels == channels);
             			}
             			else {
-HXLINE( 558)				return false;
+HXLINE( 564)				return false;
             			}
-HXDLIN( 558)			return false;
+HXDLIN( 564)			return false;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S5(::hx::LocalFunc,_hx_Closure_1,::Array< short >,pcm, ::borogove::calls::MediaStreamTrack,_gthis,int,channels,int,clockRate, ::borogove::calls::AudioFormat,format) HXARGC(0)
             		void _hx_run(){
-            			HX_STACKFRAME(&_hx_pos_306b50e70c93d428_563_writePCM)
-HXLINE( 564)			int samples = ::Std_obj::_hx_int((( (Float)(pcm->length) ) / ( (Float)(channels) )));
-HXLINE( 565)			_gthis->mutex->acquire();
-HXLINE( 566)			Float stamp;
-HXDLIN( 566)			if ((_gthis->audioQ->length < 1)) {
-HXLINE( 567)				_gthis->bufferSizeInSeconds = ::Math_obj::max(_gthis->bufferSizeInSeconds,(_gthis->bufferSizeInSeconds + ((Float)0.1)));
-HXLINE( 568)				Float stamp1 =  ::__time_stamp();
-HXLINE( 566)				stamp = (stamp1 + _gthis->bufferSizeInSeconds);
+            			HX_STACKFRAME(&_hx_pos_306b50e70c93d428_569_writePCM)
+HXLINE( 570)			int samples = ::Std_obj::_hx_int((( (Float)(pcm->length) ) / ( (Float)(channels) )));
+HXLINE( 571)			_gthis->mutex->acquire();
+HXLINE( 572)			Float stamp;
+HXDLIN( 572)			if ((_gthis->audioQ->length < 1)) {
+HXLINE( 573)				_gthis->bufferSizeInSeconds = ::Math_obj::max(_gthis->bufferSizeInSeconds,(_gthis->bufferSizeInSeconds + ((Float)0.1)));
+HXLINE( 574)				Float stamp1 =  ::__time_stamp();
+HXLINE( 572)				stamp = (stamp1 + _gthis->bufferSizeInSeconds);
             			}
             			else {
-HXLINE( 566)				stamp = ( (Float)((_gthis->audioQ->__get(0)->__Field(HX_("stamp",03,70,0b,84),::hx::paccDynamic) + ((( (Float)(samples) ) / (( (Float)(clockRate) ) / ( (Float)(1000) ))) / ((Float)1000.0)))) );
+HXLINE( 572)				stamp = ( (Float)((_gthis->audioQ->__get(0)->__Field(HX_("stamp",03,70,0b,84),::hx::paccDynamic) + ((( (Float)(samples) ) / (( (Float)(clockRate) ) / ( (Float)(1000) ))) / ((Float)1000.0)))) );
             			}
-HXLINE( 572)			_gthis->mutex->release();
-HXLINE( 573)			if ((format->format == HX_("PCMU",1b,2c,14,35))) {
-HXLINE( 574)				int channels1 = channels;
-HXDLIN( 574)				unsigned char format1 = format->payloadType;
-HXDLIN( 574)				int clockRate1 = clockRate;
-HXDLIN( 574)				 ::Dynamic f = ::borogove::calls::MediaStreamTrack_obj::pcmToUlaw_dyn();
-HXDLIN( 574)				::Array< unsigned char > result = ::Array_obj< unsigned char >::__new(pcm->length);
-HXDLIN( 574)				{
-HXLINE( 574)					int _g = 0;
-HXDLIN( 574)					int _g1 = pcm->length;
-HXDLIN( 574)					while((_g < _g1)){
-HXLINE( 574)						_g = (_g + 1);
-HXDLIN( 574)						int i = (_g - 1);
-HXDLIN( 574)						{
-HXLINE( 574)							unsigned char inValue = ( (unsigned char)(f(_hx_array_unsafe_get(pcm,i))) );
-HXDLIN( 574)							result->__unsafe_set(i,inValue);
+HXLINE( 578)			_gthis->mutex->release();
+HXLINE( 579)			if ((format->format == HX_("PCMU",1b,2c,14,35))) {
+HXLINE( 580)				int channels1 = channels;
+HXDLIN( 580)				unsigned char format1 = format->payloadType;
+HXDLIN( 580)				int clockRate1 = clockRate;
+HXDLIN( 580)				 ::Dynamic f = ::borogove::calls::MediaStreamTrack_obj::pcmToUlaw_dyn();
+HXDLIN( 580)				::Array< unsigned char > result = ::Array_obj< unsigned char >::__new(pcm->length);
+HXDLIN( 580)				{
+HXLINE( 580)					int _g = 0;
+HXDLIN( 580)					int _g1 = pcm->length;
+HXDLIN( 580)					while((_g < _g1)){
+HXLINE( 580)						_g = (_g + 1);
+HXDLIN( 580)						int i = (_g - 1);
+HXDLIN( 580)						{
+HXLINE( 580)							unsigned char inValue = ( (unsigned char)(f(_hx_array_unsafe_get(pcm,i))) );
+HXDLIN( 580)							result->__unsafe_set(i,inValue);
             						}
             					}
             				}
-HXDLIN( 574)				 ::Dynamic packet =  ::Dynamic(::hx::Anon_obj::Create(6)
+HXDLIN( 580)				 ::Dynamic packet =  ::Dynamic(::hx::Anon_obj::Create(6)
             					->setFixed(0,HX_("samples",09,c5,c9,83),samples)
             					->setFixed(1,HX_("stamp",03,70,0b,84),stamp)
             					->setFixed(2,HX_("payloadType",68,bd,49,af),format1)
             					->setFixed(3,HX_("payload",8e,bf,35,ed),result)
             					->setFixed(4,HX_("clockRate",ce,87,24,24),clockRate1)
             					->setFixed(5,HX_("channels",50,aa,ee,6a),channels1));
-HXLINE( 575)				_gthis->mutex->acquire();
-HXLINE( 576)				_gthis->audioQ->unshift(packet);
-HXLINE( 577)				_gthis->mutex->release();
+HXLINE( 581)				_gthis->mutex->acquire();
+HXLINE( 582)				_gthis->audioQ->unshift(packet);
+HXLINE( 583)				_gthis->mutex->release();
             			}
             			else {
-HXLINE( 578)				if ((format->format == HX_("opus",bf,11,b4,49))) {
-HXLINE( 579)					if (!_gthis->opusEncoder) {
-HXLINE( 580)						::cpp::Pointer< int > tmp = null();
-HXDLIN( 580)						int clockRate2 = clockRate;
-HXDLIN( 580)						int channels2 = channels;
-HXDLIN( 580)						int _hx_tmp = OPUS_APPLICATION_VOIP;
-HXDLIN( 580)						_gthis->opusEncoder = opus_encoder_create(clockRate2,channels2,_hx_tmp,tmp);
-HXLINE( 581)						opus_encoder_ctl(_gthis->opusEncoder, OPUS_SET_BITRATE(24000));
-HXLINE( 582)						opus_encoder_ctl(_gthis->opusEncoder, OPUS_SET_PACKET_LOSS_PERC(5));
-HXLINE( 583)						opus_encoder_ctl(_gthis->opusEncoder, OPUS_SET_INBAND_FEC(1));
+HXLINE( 584)				if ((format->format == HX_("opus",bf,11,b4,49))) {
+HXLINE( 585)					if (!_gthis->opusEncoder) {
+HXLINE( 586)						::cpp::Pointer< int > tmp = null();
+HXDLIN( 586)						int clockRate2 = clockRate;
+HXDLIN( 586)						int channels2 = channels;
+HXDLIN( 586)						int _hx_tmp = OPUS_APPLICATION_VOIP;
+HXDLIN( 586)						_gthis->opusEncoder = opus_encoder_create(clockRate2,channels2,_hx_tmp,tmp);
+HXLINE( 587)						opus_encoder_ctl(_gthis->opusEncoder, OPUS_SET_BITRATE(24000));
+HXLINE( 588)						opus_encoder_ctl(_gthis->opusEncoder, OPUS_SET_PACKET_LOSS_PERC(5));
+HXLINE( 589)						opus_encoder_ctl(_gthis->opusEncoder, OPUS_SET_INBAND_FEC(1));
             					}
-HXLINE( 585)					::Array< unsigned char > rawOpus = ::Array_obj< unsigned char >::__new((pcm->length * 2));
-HXLINE( 587)					::cpp::Pointer< short > tmp1 = ( (::cpp::Pointer< short >)(::cpp::Pointer_obj::ofArray(pcm)) );
-HXDLIN( 587)					::cpp::Pointer< unsigned char > tmp2 = ( (::cpp::Pointer< unsigned char >)(::cpp::Pointer_obj::ofArray(rawOpus)) );
-HXDLIN( 587)					int encoded = opus_encode(_gthis->opusEncoder,tmp1,samples,tmp2,rawOpus->length);
-HXLINE( 588)					if ((encoded < 0)) {
-HXLINE( 589)						::haxe::Log_obj::trace(HX_("Opus encode failed",86,4c,9a,50), ::Dynamic(::hx::Anon_obj::Create(5)
+HXLINE( 591)					::Array< unsigned char > rawOpus = ::Array_obj< unsigned char >::__new((pcm->length * 2));
+HXLINE( 593)					::cpp::Pointer< short > tmp1 = ( (::cpp::Pointer< short >)(::cpp::Pointer_obj::ofArray(pcm)) );
+HXDLIN( 593)					::cpp::Pointer< unsigned char > tmp2 = ( (::cpp::Pointer< unsigned char >)(::cpp::Pointer_obj::ofArray(rawOpus)) );
+HXDLIN( 593)					int encoded = opus_encode(_gthis->opusEncoder,tmp1,samples,tmp2,rawOpus->length);
+HXLINE( 594)					if ((encoded < 0)) {
+HXLINE( 595)						::haxe::Log_obj::trace(HX_("Opus encode failed",86,4c,9a,50), ::Dynamic(::hx::Anon_obj::Create(5)
             							->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.calls.MediaStreamTrack",ad,55,83,33))
             							->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,encoded))
             							->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("writePCM",7b,97,f5,23))
             							->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/calls/PeerConnection.cpp.hx",c1,79,41,6b))
-            							->setFixed(4,HX_("lineNumber",dd,81,22,76),589)));
+            							->setFixed(4,HX_("lineNumber",dd,81,22,76),595)));
             					}
             					else {
-HXLINE( 591)						rawOpus->resize(encoded);
-HXLINE( 592)						 ::Dynamic packet1 =  ::Dynamic(::hx::Anon_obj::Create(6)
+HXLINE( 597)						rawOpus->resize(encoded);
+HXLINE( 598)						 ::Dynamic packet1 =  ::Dynamic(::hx::Anon_obj::Create(6)
             							->setFixed(0,HX_("samples",09,c5,c9,83),samples)
             							->setFixed(1,HX_("stamp",03,70,0b,84),stamp)
             							->setFixed(2,HX_("payloadType",68,bd,49,af),format->payloadType)
             							->setFixed(3,HX_("payload",8e,bf,35,ed),rawOpus)
             							->setFixed(4,HX_("clockRate",ce,87,24,24),clockRate)
             							->setFixed(5,HX_("channels",50,aa,ee,6a),channels));
-HXLINE( 593)						_gthis->mutex->acquire();
-HXLINE( 594)						_gthis->audioQ->unshift(packet1);
-HXLINE( 595)						_gthis->mutex->release();
+HXLINE( 599)						_gthis->mutex->acquire();
+HXLINE( 600)						_gthis->audioQ->unshift(packet1);
+HXLINE( 601)						_gthis->mutex->release();
             					}
             				}
             				else {
-HXLINE( 598)					::haxe::Log_obj::trace(HX_("Ignoring audio meant to go out as",e3,e7,4f,55), ::Dynamic(::hx::Anon_obj::Create(5)
+HXLINE( 604)					::haxe::Log_obj::trace(HX_("Ignoring audio meant to go out as",e3,e7,4f,55), ::Dynamic(::hx::Anon_obj::Create(5)
             						->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.calls.MediaStreamTrack",ad,55,83,33))
             						->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(3)->init(0,format->format)->init(1,format->clockRate)->init(2,format->channels))
             						->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("writePCM",7b,97,f5,23))
             						->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/calls/PeerConnection.cpp.hx",c1,79,41,6b))
-            						->setFixed(4,HX_("lineNumber",dd,81,22,76),598)));
+            						->setFixed(4,HX_("lineNumber",dd,81,22,76),604)));
             				}
             			}
-HXLINE( 600)			_gthis->notifyReadyForData(false);
+HXLINE( 606)			_gthis->notifyReadyForData(false);
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_STACKFRAME(&_hx_pos_306b50e70c93d428_557_writePCM)
-HXDLIN( 557)		 ::borogove::calls::MediaStreamTrack _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 558)		 ::borogove::calls::AudioFormat format = ( ( ::borogove::calls::AudioFormat)(::Lambda_obj::find(this->get_supportedAudioFormats(), ::Dynamic(new _hx_Closure_0(channels,clockRate)))) );
-HXLINE( 559)		if (::hx::IsNull( format )) {
-HXLINE( 560)			::haxe::Log_obj::trace((((HX_("Unsupported audio format: ",52,9d,51,59) + clockRate) + HX_("/",2f,00,00,00)) + channels),::hx::SourceInfo(HX_("borogove/calls/PeerConnection.cpp.hx",c1,79,41,6b),560,HX_("borogove.calls.MediaStreamTrack",ad,55,83,33),HX_("writePCM",7b,97,f5,23)));
-HXLINE( 561)			return;
+            	HX_STACKFRAME(&_hx_pos_306b50e70c93d428_563_writePCM)
+HXDLIN( 563)		 ::borogove::calls::MediaStreamTrack _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 564)		 ::borogove::calls::AudioFormat format = ( ( ::borogove::calls::AudioFormat)(::Lambda_obj::find(this->get_supportedAudioFormats(), ::Dynamic(new _hx_Closure_0(channels,clockRate)))) );
+HXLINE( 565)		if (::hx::IsNull( format )) {
+HXLINE( 566)			::haxe::Log_obj::trace((((HX_("Unsupported audio format: ",52,9d,51,59) + clockRate) + HX_("/",2f,00,00,00)) + channels),::hx::SourceInfo(HX_("borogove/calls/PeerConnection.cpp.hx",c1,79,41,6b),566,HX_("borogove.calls.MediaStreamTrack",ad,55,83,33),HX_("writePCM",7b,97,f5,23)));
+HXLINE( 567)			return;
             		}
-HXLINE( 563)		this->eventLoop->run( ::Dynamic(new _hx_Closure_1(pcm,_gthis,channels,clockRate,format)));
+HXLINE( 569)		this->eventLoop->run( ::Dynamic(new _hx_Closure_1(pcm,_gthis,channels,clockRate,format)));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC3(MediaStreamTrack_obj,writePCM,(void))
 
 void MediaStreamTrack_obj::writePCM__fromC(::cpp::Pointer< short > pcm,size_t pcm__len,int clockRate,int channels){
-            	HX_STACKFRAME(&_hx_pos_1f66e5b64430fc7f_315_writePCM__fromC)
-HXLINE( 265)		::Array< short > _hx_tmp;
-HXDLIN( 265)		if (::hx::IsNull( pcm )) {
-HXLINE( 265)			_hx_tmp = null();
+            	HX_STACKFRAME(&_hx_pos_1f66e5b64430fc7f_339_writePCM__fromC)
+HXLINE( 282)		::Array< short > _hx_tmp;
+HXDLIN( 282)		if (::hx::IsNull( pcm )) {
+HXLINE( 282)			_hx_tmp = null();
             		}
             		else {
-HXLINE( 265)			::cpp::Pointer< short > _this = pcm->reinterpret();
-HXDLIN( 265)			::Array< short > result = ::Array_obj< short >::__new();
-HXDLIN( 265)			::cpp::Pointer< short > tmp = _this;
-HXDLIN( 265)			result->setUnmanagedData(tmp,( (int)(pcm__len) ));
-HXDLIN( 265)			_hx_tmp = result->copy();
+HXLINE( 282)			::cpp::Pointer< short > _this = pcm->reinterpret();
+HXDLIN( 282)			::Array< short > result = ::Array_obj< short >::__new();
+HXDLIN( 282)			::cpp::Pointer< short > tmp = _this;
+HXDLIN( 282)			result->setUnmanagedData(tmp,( (int)(pcm__len) ));
+HXDLIN( 282)			_hx_tmp = result->copy();
             		}
-HXLINE( 315)		this->writePCM(_hx_tmp,clockRate,channels);
+HXLINE( 339)		this->writePCM(_hx_tmp,clockRate,channels);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC4(MediaStreamTrack_obj,writePCM__fromC,(void))
 
 void MediaStreamTrack_obj::onAudioLoop( ::Dynamic callback){
-            	HX_STACKFRAME(&_hx_pos_306b50e70c93d428_606_onAudioLoop)
-HXDLIN( 606)		this->eventLoop->run(callback);
+            	HX_STACKFRAME(&_hx_pos_306b50e70c93d428_612_onAudioLoop)
+HXDLIN( 612)		this->eventLoop->run(callback);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(MediaStreamTrack_obj,onAudioLoop,(void))
 
 void MediaStreamTrack_obj::write(::Array< unsigned char > payload,unsigned char payloadType,int clockRate){
-            	HX_STACKFRAME(&_hx_pos_306b50e70c93d428_610_write)
-HXLINE( 611)		bool _hx_tmp;
-HXDLIN( 611)		if (!(!track)) {
-HXLINE( 611)			_hx_tmp = !(this->track->isOpen());
+            	HX_STACKFRAME(&_hx_pos_306b50e70c93d428_616_write)
+HXLINE( 617)		bool _hx_tmp;
+HXDLIN( 617)		if (!(!track)) {
+HXLINE( 617)			_hx_tmp = !(this->track->isOpen());
             		}
             		else {
-HXLINE( 611)			_hx_tmp = true;
+HXLINE( 617)			_hx_tmp = true;
             		}
-HXDLIN( 611)		if (_hx_tmp) {
-HXLINE( 611)			return;
+HXDLIN( 617)		if (_hx_tmp) {
+HXLINE( 617)			return;
             		}
-HXLINE( 613)		this->rtpPacketizationConfig->payloadType = payloadType;
-HXLINE( 614)		this->rtpPacketizationConfig->clockRate = ( (unsigned int)(clockRate) );
-HXLINE( 615)		::cpp::Pointer<  std::byte > tmp = ( (::cpp::Pointer< unsigned char >)(::cpp::Pointer_obj::ofArray(payload)) )->reinterpret();
-HXDLIN( 615)		this->track->send(tmp,( (size_t)(payload->length) ));
+HXLINE( 619)		this->rtpPacketizationConfig->payloadType = payloadType;
+HXLINE( 620)		this->rtpPacketizationConfig->clockRate = ( (unsigned int)(clockRate) );
+HXLINE( 621)		::cpp::Pointer<  std::byte > tmp = ( (::cpp::Pointer< unsigned char >)(::cpp::Pointer_obj::ofArray(payload)) )->reinterpret();
+HXDLIN( 621)		this->track->send(tmp,( (size_t)(payload->length) ));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC3(MediaStreamTrack_obj,write,(void))
 
 void MediaStreamTrack_obj::advanceTimestamp(int samples){
-            	HX_STACKFRAME(&_hx_pos_306b50e70c93d428_622_advanceTimestamp)
-HXDLIN( 622)		this->rtpPacketizationConfig->timestamp = (this->rtpPacketizationConfig->timestamp + samples);
+            	HX_STACKFRAME(&_hx_pos_306b50e70c93d428_628_advanceTimestamp)
+HXDLIN( 628)		this->rtpPacketizationConfig->timestamp = (this->rtpPacketizationConfig->timestamp + samples);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(MediaStreamTrack_obj,advanceTimestamp,(void))
 
 void MediaStreamTrack_obj::stop(){
-            	HX_STACKFRAME(&_hx_pos_306b50e70c93d428_625_stop)
-HXLINE( 626)		this->timer->stop();
-HXLINE( 627)		this->mutex->acquire();
-HXLINE( 628)		this->alive = false;
-HXLINE( 629)		if (this->track->isOpen()) {
-HXLINE( 629)			this->track->close();
+            	HX_STACKFRAME(&_hx_pos_306b50e70c93d428_631_stop)
+HXLINE( 632)		this->timer->stop();
+HXLINE( 633)		this->mutex->acquire();
+HXLINE( 634)		this->alive = false;
+HXLINE( 635)		if (this->track->isOpen()) {
+HXLINE( 635)			this->track->close();
             		}
-HXLINE( 630)		if (opus) {
-HXLINE( 631)			opus_decoder_destroy(this->opus);
-HXLINE( 632)			this->opus = null();
+HXLINE( 636)		if (opus) {
+HXLINE( 637)			opus_decoder_destroy(this->opus);
+HXLINE( 638)			this->opus = null();
             		}
-HXLINE( 634)		this->mutex->release();
+HXLINE( 640)		this->mutex->release();
             	}
 
 
@@ -769,21 +785,21 @@ HXLINE( 370)		return media;
 ::Array< unsigned char > MediaStreamTrack_obj::ULAW_EXP;
 
 unsigned char MediaStreamTrack_obj::pcmToUlaw(short sample){
-            	HX_STACKFRAME(&_hx_pos_306b50e70c93d428_474_pcmToUlaw)
-HXLINE( 475)		int sign;
-HXDLIN( 475)		if ((sample < 0)) {
-HXLINE( 476)			sample = -(sample);
-HXLINE( 475)			sign = 128;
+            	HX_STACKFRAME(&_hx_pos_306b50e70c93d428_480_pcmToUlaw)
+HXLINE( 481)		int sign;
+HXDLIN( 481)		if ((sample < 0)) {
+HXLINE( 482)			sample = -(sample);
+HXLINE( 481)			sign = 128;
             		}
             		else {
-HXLINE( 475)			sign = 0;
+HXLINE( 481)			sign = 0;
             		}
-HXLINE( 483)		if ((sample > 32635)) {
-HXLINE( 484)			sample = ( (short)(32635) );
+HXLINE( 489)		if ((sample > 32635)) {
+HXLINE( 490)			sample = ( (short)(32635) );
             		}
-HXLINE( 487)		sample = (sample + 132);
-HXLINE( 488)		unsigned char exponent = ::borogove::calls::MediaStreamTrack_obj::ULAW_EXP->__get(((( (int)(sample) ) >> 8) & 127));
-HXLINE( 490)		return ( (unsigned char)(~(((sign | (( (int)(exponent) ) << 4)) | ((( (int)(sample) ) >> ( (int)((exponent + 3)) )) & 15)))) );
+HXLINE( 493)		sample = (sample + 132);
+HXLINE( 494)		unsigned char exponent = ::borogove::calls::MediaStreamTrack_obj::ULAW_EXP->__get(((( (int)(sample) ) >> 8) & 127));
+HXLINE( 496)		return ( (unsigned char)(~(((sign | (( (int)(exponent) ) << 4)) | ((( (int)(sample) ) >> ( (int)((exponent + 3)) )) & 15)))) );
             	}
 
 
@@ -1132,12 +1148,12 @@ HXDLIN( 339)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null()))))));
             	}
 {
-            	HX_STACKFRAME(&_hx_pos_306b50e70c93d428_471_boot)
-HXDLIN( 471)		ULAW_DECODE = ::Array_obj< short >::fromData( _hx_array_data_338355ad_38,256);
+            	HX_STACKFRAME(&_hx_pos_306b50e70c93d428_477_boot)
+HXDLIN( 477)		ULAW_DECODE = ::Array_obj< short >::fromData( _hx_array_data_338355ad_39,256);
             	}
 {
-            	HX_STACKFRAME(&_hx_pos_306b50e70c93d428_472_boot)
-HXDLIN( 472)		ULAW_EXP = ::Array_obj< unsigned char >::fromData( _hx_array_data_338355ad_40,128);
+            	HX_STACKFRAME(&_hx_pos_306b50e70c93d428_478_boot)
+HXDLIN( 478)		ULAW_EXP = ::Array_obj< unsigned char >::fromData( _hx_array_data_338355ad_41,128);
             	}
 }
 
diff --git a/Sources/c_borogove/src/borogove/calls/OutgoingProposedSession.cpp b/Sources/c_borogove/src/borogove/calls/OutgoingProposedSession.cpp
index 0adb5da..06eb3f0 100644
--- a/Sources/c_borogove/src/borogove/calls/OutgoingProposedSession.cpp
+++ b/Sources/c_borogove/src/borogove/calls/OutgoingProposedSession.cpp
@@ -71,36 +71,36 @@
 #include <thenshim/_Promise/Promise_Impl_.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_d2a3c174e5a36893_194_new,"borogove.calls.OutgoingProposedSession","new",0xf8b58fb0,"borogove.calls.OutgoingProposedSession.new","borogove/calls/Session.hx",194,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_222_propose,"borogove.calls.OutgoingProposedSession","propose",0xcfa5a64e,"borogove.calls.OutgoingProposedSession.propose","borogove/calls/Session.hx",222,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_211_propose,"borogove.calls.OutgoingProposedSession","propose",0xcfa5a64e,"borogove.calls.OutgoingProposedSession.propose","borogove/calls/Session.hx",211,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_235_hangup,"borogove.calls.OutgoingProposedSession","hangup",0xe6e084fd,"borogove.calls.OutgoingProposedSession.hangup","borogove/calls/Session.hx",235,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_232_hangup,"borogove.calls.OutgoingProposedSession","hangup",0xe6e084fd,"borogove.calls.OutgoingProposedSession.hangup","borogove/calls/Session.hx",232,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_250_retract,"borogove.calls.OutgoingProposedSession","retract",0xd2758951,"borogove.calls.OutgoingProposedSession.retract","borogove/calls/Session.hx",250,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_255_terminate,"borogove.calls.OutgoingProposedSession","terminate",0x77424db1,"borogove.calls.OutgoingProposedSession.terminate","borogove/calls/Session.hx",255,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_260_contentAdd,"borogove.calls.OutgoingProposedSession","contentAdd",0x0c853118,"borogove.calls.OutgoingProposedSession.contentAdd","borogove/calls/Session.hx",260,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_265_contentAccept,"borogove.calls.OutgoingProposedSession","contentAccept",0xb429c871,"borogove.calls.OutgoingProposedSession.contentAccept","borogove/calls/Session.hx",265,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_269_transportInfo,"borogove.calls.OutgoingProposedSession","transportInfo",0x89f74007,"borogove.calls.OutgoingProposedSession.transportInfo","borogove/calls/Session.hx",269,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_276_accept,"borogove.calls.OutgoingProposedSession","accept",0x39e745b8,"borogove.calls.OutgoingProposedSession.accept","borogove/calls/Session.hx",276,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_280_initiate,"borogove.calls.OutgoingProposedSession","initiate",0x8e062909,"borogove.calls.OutgoingProposedSession.initiate","borogove/calls/Session.hx",280,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_293_addMedia,"borogove.calls.OutgoingProposedSession","addMedia",0xad8fe9b3,"borogove.calls.OutgoingProposedSession.addMedia","borogove/calls/Session.hx",293,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_297_callStatus,"borogove.calls.OutgoingProposedSession","callStatus",0xf9d38920,"borogove.calls.OutgoingProposedSession.callStatus","borogove/calls/Session.hx",297,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_302_audioTracks,"borogove.calls.OutgoingProposedSession","audioTracks",0xde56ec4e,"borogove.calls.OutgoingProposedSession.audioTracks","borogove/calls/Session.hx",302,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_307_videoTracks,"borogove.calls.OutgoingProposedSession","videoTracks",0x884e51b3,"borogove.calls.OutgoingProposedSession.videoTracks","borogove/calls/Session.hx",307,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_312_dtmf,"borogove.calls.OutgoingProposedSession","dtmf",0x9f976199,"borogove.calls.OutgoingProposedSession.dtmf","borogove/calls/Session.hx",312,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_316_get_sid,"borogove.calls.OutgoingProposedSession","get_sid",0xfc880ef5,"borogove.calls.OutgoingProposedSession.get_sid","borogove/calls/Session.hx",316,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_320_get_chatId,"borogove.calls.OutgoingProposedSession","get_chatId",0x70a63f4c,"borogove.calls.OutgoingProposedSession.get_chatId","borogove/calls/Session.hx",320,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_194_boot,"borogove.calls.OutgoingProposedSession","boot",0x9e412ae2,"borogove.calls.OutgoingProposedSession.boot","borogove/calls/Session.hx",194,0x33a79030)
+HX_DEFINE_STACK_FRAME(_hx_pos_d2a3c174e5a36893_195_new,"borogove.calls.OutgoingProposedSession","new",0xf8b58fb0,"borogove.calls.OutgoingProposedSession.new","borogove/calls/Session.hx",195,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_223_propose,"borogove.calls.OutgoingProposedSession","propose",0xcfa5a64e,"borogove.calls.OutgoingProposedSession.propose","borogove/calls/Session.hx",223,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_212_propose,"borogove.calls.OutgoingProposedSession","propose",0xcfa5a64e,"borogove.calls.OutgoingProposedSession.propose","borogove/calls/Session.hx",212,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_236_hangup,"borogove.calls.OutgoingProposedSession","hangup",0xe6e084fd,"borogove.calls.OutgoingProposedSession.hangup","borogove/calls/Session.hx",236,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_233_hangup,"borogove.calls.OutgoingProposedSession","hangup",0xe6e084fd,"borogove.calls.OutgoingProposedSession.hangup","borogove/calls/Session.hx",233,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_251_retract,"borogove.calls.OutgoingProposedSession","retract",0xd2758951,"borogove.calls.OutgoingProposedSession.retract","borogove/calls/Session.hx",251,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_256_terminate,"borogove.calls.OutgoingProposedSession","terminate",0x77424db1,"borogove.calls.OutgoingProposedSession.terminate","borogove/calls/Session.hx",256,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_261_contentAdd,"borogove.calls.OutgoingProposedSession","contentAdd",0x0c853118,"borogove.calls.OutgoingProposedSession.contentAdd","borogove/calls/Session.hx",261,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_266_contentAccept,"borogove.calls.OutgoingProposedSession","contentAccept",0xb429c871,"borogove.calls.OutgoingProposedSession.contentAccept","borogove/calls/Session.hx",266,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_270_transportInfo,"borogove.calls.OutgoingProposedSession","transportInfo",0x89f74007,"borogove.calls.OutgoingProposedSession.transportInfo","borogove/calls/Session.hx",270,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_277_accept,"borogove.calls.OutgoingProposedSession","accept",0x39e745b8,"borogove.calls.OutgoingProposedSession.accept","borogove/calls/Session.hx",277,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_281_initiate,"borogove.calls.OutgoingProposedSession","initiate",0x8e062909,"borogove.calls.OutgoingProposedSession.initiate","borogove/calls/Session.hx",281,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_294_addMedia,"borogove.calls.OutgoingProposedSession","addMedia",0xad8fe9b3,"borogove.calls.OutgoingProposedSession.addMedia","borogove/calls/Session.hx",294,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_298_callStatus,"borogove.calls.OutgoingProposedSession","callStatus",0xf9d38920,"borogove.calls.OutgoingProposedSession.callStatus","borogove/calls/Session.hx",298,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_303_audioTracks,"borogove.calls.OutgoingProposedSession","audioTracks",0xde56ec4e,"borogove.calls.OutgoingProposedSession.audioTracks","borogove/calls/Session.hx",303,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_308_videoTracks,"borogove.calls.OutgoingProposedSession","videoTracks",0x884e51b3,"borogove.calls.OutgoingProposedSession.videoTracks","borogove/calls/Session.hx",308,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_313_dtmf,"borogove.calls.OutgoingProposedSession","dtmf",0x9f976199,"borogove.calls.OutgoingProposedSession.dtmf","borogove/calls/Session.hx",313,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_317_get_sid,"borogove.calls.OutgoingProposedSession","get_sid",0xfc880ef5,"borogove.calls.OutgoingProposedSession.get_sid","borogove/calls/Session.hx",317,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_321_get_chatId,"borogove.calls.OutgoingProposedSession","get_chatId",0x70a63f4c,"borogove.calls.OutgoingProposedSession.get_chatId","borogove/calls/Session.hx",321,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_d2a3c174e5a36893_195_boot,"borogove.calls.OutgoingProposedSession","boot",0x9e412ae2,"borogove.calls.OutgoingProposedSession.boot","borogove/calls/Session.hx",195,0x33a79030)
 namespace borogove{
 namespace calls{
 
 void OutgoingProposedSession_obj::__construct( ::borogove::Client client, ::borogove::JID to){
-            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_194_new)
-HXLINE( 201)		this->video = false;
-HXLINE( 200)		this->audio = false;
-HXLINE( 205)		this->client = client;
-HXLINE( 206)		this->to = to;
-HXLINE( 207)		this->_sid = ::borogove::ID_obj::_hx_long();
+            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_195_new)
+HXLINE( 202)		this->video = false;
+HXLINE( 201)		this->audio = false;
+HXLINE( 206)		this->client = client;
+HXLINE( 207)		this->to = to;
+HXLINE( 208)		this->_sid = ::borogove::ID_obj::_hx_long();
             	}
 
 Dynamic OutgoingProposedSession_obj::__CreateEmpty() { return new OutgoingProposedSession_obj; }
@@ -153,38 +153,38 @@ void *OutgoingProposedSession_obj::_hx_getInterface(int inHash) {
 void OutgoingProposedSession_obj::propose(bool audio,bool video){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::borogove::calls::OutgoingProposedSession,_gthis, ::borogove::Stanza,event, ::borogove::ChatMessage,msg) HXARGC(1)
             		 ::borogove::EventResult _hx_run(::Array< ::Dynamic> stored){
-            			HX_GC_STACKFRAME(&_hx_pos_d2a3c174e5a36893_222_propose)
-HXLINE( 223)			::String stanza = _gthis->to->asString();
-HXDLIN( 223)			 ::borogove::Stanza stanza1 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(3)
+            			HX_GC_STACKFRAME(&_hx_pos_d2a3c174e5a36893_223_propose)
+HXLINE( 224)			::String stanza = _gthis->to->asString();
+HXDLIN( 224)			 ::borogove::Stanza stanza1 =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(3)
             				->setFixed(0,HX_("id",db,5b,00,00),msg->localId)
             				->setFixed(1,HX_("to",7b,65,00,00),stanza)
             				->setFixed(2,HX_("type",ba,f2,08,4d),HX_("chat",d8,5e,bf,41))))->addChild(event)->tag(HX_("store",e1,13,16,84), ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:hints",70,b3,d6,fe))));
-HXLINE( 226)			_gthis->client->sendStanza(stanza1);
-HXLINE( 227)			_gthis->client->notifyMessageHandlers(stored->__get(0).StaticCast<  ::borogove::ChatMessage >(),0);
-HXLINE( 228)			return _gthis->client->trigger(HX_("call/ringing",81,75,54,f9),_gthis);
+HXLINE( 227)			_gthis->client->sendStanza(stanza1);
+HXLINE( 228)			_gthis->client->notifyMessageHandlers(stored->__get(0).StaticCast<  ::borogove::ChatMessage >(),0);
+HXLINE( 229)			return _gthis->client->trigger(HX_("call/ringing",81,75,54,f9),_gthis);
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_d2a3c174e5a36893_211_propose)
-HXDLIN( 211)		 ::borogove::calls::OutgoingProposedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 212)		this->audio = audio;
-HXLINE( 213)		this->video = video;
-HXLINE( 214)		 ::borogove::Stanza event =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("propose",fe,fe,e9,f9), ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_GC_STACKFRAME(&_hx_pos_d2a3c174e5a36893_212_propose)
+HXDLIN( 212)		 ::borogove::calls::OutgoingProposedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 213)		this->audio = audio;
+HXLINE( 214)		this->video = video;
+HXLINE( 215)		 ::borogove::Stanza event =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("propose",fe,fe,e9,f9), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("id",db,5b,00,00),this->get_sid())
             			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07))));
-HXLINE( 215)		if (audio) {
-HXLINE( 216)			event->tag(HX_("description",fc,08,1d,5f), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 216)		if (audio) {
+HXLINE( 217)			event->tag(HX_("description",fc,08,1d,5f), ::Dynamic(::hx::Anon_obj::Create(2)
             				->setFixed(0,HX_("media",e4,04,bc,05),HX_("audio",d6,78,80,27))
             				->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle:apps:rtp:1",ea,41,fe,5c))))->up();
             		}
-HXLINE( 218)		if (video) {
-HXLINE( 219)			event->tag(HX_("description",fc,08,1d,5f), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 219)		if (video) {
+HXLINE( 220)			event->tag(HX_("description",fc,08,1d,5f), ::Dynamic(::hx::Anon_obj::Create(2)
             				->setFixed(0,HX_("media",e4,04,bc,05),HX_("video",7b,14,fc,36))
             				->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle:apps:rtp:1",ea,41,fe,5c))))->up();
             		}
-HXLINE( 221)		 ::borogove::ChatMessage msg = ::borogove::calls::_Session::Session_Fields__obj::mkCallMessage(this->to,this->client->jid,event);
-HXLINE( 222)		::thenshim::_Promise::Promise_Impl__obj::then(this->client->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,msg)), ::Dynamic(new _hx_Closure_0(_gthis,event,msg)),null());
+HXLINE( 222)		 ::borogove::ChatMessage msg = ::borogove::calls::_Session::Session_Fields__obj::mkCallMessage(this->to,this->client->jid,event);
+HXLINE( 223)		::thenshim::_Promise::Promise_Impl__obj::then(this->client->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,msg)), ::Dynamic(new _hx_Closure_0(_gthis,event,msg)),null());
             	}
 
 
@@ -193,36 +193,36 @@ HX_DEFINE_DYNAMIC_FUNC2(OutgoingProposedSession_obj,propose,(void))
 void OutgoingProposedSession_obj::hangup(){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::borogove::calls::OutgoingProposedSession,_gthis, ::borogove::Stanza,event, ::borogove::ChatMessage,msg) HXARGC(1)
             		void _hx_run(::Array< ::Dynamic> stored){
-            			HX_GC_STACKFRAME(&_hx_pos_d2a3c174e5a36893_235_hangup)
-HXLINE( 236)			 ::borogove::Client _gthis1 = _gthis->client;
-HXLINE( 237)			::String _hx_tmp = _gthis->to->asString();
-HXLINE( 236)			_gthis1->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(3)
+            			HX_GC_STACKFRAME(&_hx_pos_d2a3c174e5a36893_236_hangup)
+HXLINE( 237)			 ::borogove::Client _gthis1 = _gthis->client;
+HXLINE( 238)			::String _hx_tmp = _gthis->to->asString();
+HXLINE( 237)			_gthis1->sendStanza( ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("message",c7,35,11,9a), ::Dynamic(::hx::Anon_obj::Create(3)
             				->setFixed(0,HX_("id",db,5b,00,00),msg->versions->__get(0).StaticCast<  ::borogove::ChatMessage >()->localId)
             				->setFixed(1,HX_("to",7b,65,00,00),_hx_tmp)
             				->setFixed(2,HX_("type",ba,f2,08,4d),HX_("chat",d8,5e,bf,41))))->addChild(event)->tag(HX_("store",e1,13,16,84), ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:hints",70,b3,d6,fe)))));
-HXLINE( 241)			_gthis->client->notifyMessageHandlers(stored->__get(0).StaticCast<  ::borogove::ChatMessage >(),1);
+HXLINE( 242)			_gthis->client->notifyMessageHandlers(stored->__get(0).StaticCast<  ::borogove::ChatMessage >(),1);
             		}
             		HX_END_LOCAL_FUNC1((void))
 
-            	HX_GC_STACKFRAME(&_hx_pos_d2a3c174e5a36893_232_hangup)
-HXDLIN( 232)		 ::borogove::calls::OutgoingProposedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 233)		 ::borogove::Stanza event =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("retract",01,e2,b9,fc), ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_GC_STACKFRAME(&_hx_pos_d2a3c174e5a36893_233_hangup)
+HXDLIN( 233)		 ::borogove::calls::OutgoingProposedSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 234)		 ::borogove::Stanza event =  ::borogove::Stanza_obj::__alloc( HX_CTX ,HX_("retract",01,e2,b9,fc), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("id",db,5b,00,00),this->get_sid())
             			->setFixed(1,HX_("xmlns",dc,31,74,60),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07))));
-HXLINE( 234)		 ::borogove::ChatMessage msg = ::borogove::calls::_Session::Session_Fields__obj::mkCallMessage(this->to,this->client->jid,event);
-HXLINE( 235)		::thenshim::_Promise::Promise_Impl__obj::then(this->client->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,msg)), ::Dynamic(new _hx_Closure_0(_gthis,event,msg)),null());
-HXLINE( 243)		{
-HXLINE( 243)			 ::borogove::Client tmp = this->client;
-HXDLIN( 243)			 ::borogove::Chat tmp1 = tmp->getChat(this->get_chatId());
-HXDLIN( 243)			if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 243)				::Dynamic this1 = tmp1->jingleSessions;
-HXDLIN( 243)				( ( ::haxe::ds::StringMap)(this1) )->remove(this->get_sid());
+HXLINE( 235)		 ::borogove::ChatMessage msg = ::borogove::calls::_Session::Session_Fields__obj::mkCallMessage(this->to,this->client->jid,event);
+HXLINE( 236)		::thenshim::_Promise::Promise_Impl__obj::then(this->client->storeMessages(::Array_obj< ::Dynamic>::__new(1)->init(0,msg)), ::Dynamic(new _hx_Closure_0(_gthis,event,msg)),null());
+HXLINE( 244)		{
+HXLINE( 244)			 ::borogove::Client tmp = this->client;
+HXDLIN( 244)			 ::borogove::Chat tmp1 = tmp->getChat(this->get_chatId());
+HXDLIN( 244)			if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 244)				::Dynamic this1 = tmp1->jingleSessions;
+HXDLIN( 244)				( ( ::haxe::ds::StringMap)(this1) )->remove(this->get_sid());
             			}
             		}
-HXLINE( 244)		 ::borogove::Client _hx_tmp = this->client;
-HXDLIN( 244)		::String _hx_tmp1 = this->get_chatId();
-HXDLIN( 244)		_hx_tmp->trigger(HX_("call/retract",50,bc,8d,db), ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 245)		 ::borogove::Client _hx_tmp = this->client;
+HXDLIN( 245)		::String _hx_tmp1 = this->get_chatId();
+HXDLIN( 245)		_hx_tmp->trigger(HX_("call/retract",50,bc,8d,db), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("chatId",d3,04,77,b7),_hx_tmp1)
             			->setFixed(1,HX_("sid",0e,9f,57,00),this->get_sid())));
             	}
@@ -231,10 +231,10 @@ HXDLIN( 244)		_hx_tmp->trigger(HX_("call/retract",50,bc,8d,db), ::Dynamic(::hx::
 HX_DEFINE_DYNAMIC_FUNC0(OutgoingProposedSession_obj,hangup,(void))
 
 void OutgoingProposedSession_obj::retract(){
-            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_250_retract)
-HXDLIN( 250)		 ::borogove::Client _hx_tmp = this->client;
-HXDLIN( 250)		::String _hx_tmp1 = this->get_chatId();
-HXDLIN( 250)		_hx_tmp->trigger(HX_("call/retract",50,bc,8d,db), ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_251_retract)
+HXDLIN( 251)		 ::borogove::Client _hx_tmp = this->client;
+HXDLIN( 251)		::String _hx_tmp1 = this->get_chatId();
+HXDLIN( 251)		_hx_tmp->trigger(HX_("call/retract",50,bc,8d,db), ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("chatId",d3,04,77,b7),_hx_tmp1)
             			->setFixed(1,HX_("sid",0e,9f,57,00),this->get_sid())));
             	}
@@ -243,160 +243,160 @@ HXDLIN( 250)		_hx_tmp->trigger(HX_("call/retract",50,bc,8d,db), ::Dynamic(::hx::
 HX_DEFINE_DYNAMIC_FUNC0(OutgoingProposedSession_obj,retract,(void))
 
 void OutgoingProposedSession_obj::terminate(){
-            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_255_terminate)
-HXDLIN( 255)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
-HXDLIN( 255)		::String _hx_tmp1 = (HX_("Tried to terminate before session-initiate: ",a9,d4,f3,a4) + this->get_sid());
-HXDLIN( 255)		_hx_tmp(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(5)
+            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_256_terminate)
+HXDLIN( 256)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
+HXDLIN( 256)		::String _hx_tmp1 = (HX_("Tried to terminate before session-initiate: ",a9,d4,f3,a4) + this->get_sid());
+HXDLIN( 256)		_hx_tmp(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(5)
             			->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.calls.OutgoingProposedSession",be,37,f0,b1))
             			->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)))
             			->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("terminate",61,32,d2,fd))
             			->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/calls/Session.hx",30,90,a7,33))
-            			->setFixed(4,HX_("lineNumber",dd,81,22,76),255)));
+            			->setFixed(4,HX_("lineNumber",dd,81,22,76),256)));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(OutgoingProposedSession_obj,terminate,(void))
 
 void OutgoingProposedSession_obj::contentAdd( ::borogove::Stanza _){
-            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_260_contentAdd)
-HXDLIN( 260)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
-HXDLIN( 260)		::String _hx_tmp1 = (HX_("Got content-add before session-initiate: ",10,d3,fa,8a) + this->get_sid());
-HXDLIN( 260)		_hx_tmp(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(5)
+            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_261_contentAdd)
+HXDLIN( 261)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
+HXDLIN( 261)		::String _hx_tmp1 = (HX_("Got content-add before session-initiate: ",10,d3,fa,8a) + this->get_sid());
+HXDLIN( 261)		_hx_tmp(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(5)
             			->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.calls.OutgoingProposedSession",be,37,f0,b1))
             			->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)))
             			->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("contentAdd",68,66,dd,43))
             			->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/calls/Session.hx",30,90,a7,33))
-            			->setFixed(4,HX_("lineNumber",dd,81,22,76),260)));
+            			->setFixed(4,HX_("lineNumber",dd,81,22,76),261)));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(OutgoingProposedSession_obj,contentAdd,(void))
 
 void OutgoingProposedSession_obj::contentAccept( ::borogove::Stanza _){
-            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_265_contentAccept)
-HXDLIN( 265)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
-HXDLIN( 265)		::String _hx_tmp1 = (HX_("Got content-accept before session-initiate: ",47,72,87,71) + this->get_sid());
-HXDLIN( 265)		_hx_tmp(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(5)
+            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_266_contentAccept)
+HXDLIN( 266)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
+HXDLIN( 266)		::String _hx_tmp1 = (HX_("Got content-accept before session-initiate: ",47,72,87,71) + this->get_sid());
+HXDLIN( 266)		_hx_tmp(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(5)
             			->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.calls.OutgoingProposedSession",be,37,f0,b1))
             			->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)))
             			->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("contentAccept",21,c5,01,e1))
             			->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/calls/Session.hx",30,90,a7,33))
-            			->setFixed(4,HX_("lineNumber",dd,81,22,76),265)));
+            			->setFixed(4,HX_("lineNumber",dd,81,22,76),266)));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(OutgoingProposedSession_obj,contentAccept,(void))
 
 ::Dynamic OutgoingProposedSession_obj::transportInfo( ::borogove::Stanza _){
-            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_269_transportInfo)
-HXLINE( 270)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
-HXDLIN( 270)		::String _hx_tmp1 = (HX_("Got transport-info before session-initiate: ",bd,bd,9d,08) + this->get_sid());
-HXDLIN( 270)		_hx_tmp(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(5)
+            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_270_transportInfo)
+HXLINE( 271)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
+HXDLIN( 271)		::String _hx_tmp1 = (HX_("Got transport-info before session-initiate: ",bd,bd,9d,08) + this->get_sid());
+HXDLIN( 271)		_hx_tmp(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(5)
             			->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.calls.OutgoingProposedSession",be,37,f0,b1))
             			->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)))
             			->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("transportInfo",b7,3c,cf,b6))
             			->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/calls/Session.hx",30,90,a7,33))
-            			->setFixed(4,HX_("lineNumber",dd,81,22,76),270)));
-HXLINE( 271)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+            			->setFixed(4,HX_("lineNumber",dd,81,22,76),271)));
+HXLINE( 272)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(OutgoingProposedSession_obj,transportInfo,return )
 
 void OutgoingProposedSession_obj::accept(){
-            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_276_accept)
-HXDLIN( 276)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
-HXDLIN( 276)		::String _hx_tmp1 = (HX_("Tried to accept before initiate: ",77,4a,a0,ec) + this->get_sid());
-HXDLIN( 276)		_hx_tmp(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(5)
+            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_277_accept)
+HXDLIN( 277)		 ::Dynamic _hx_tmp = ::haxe::Log_obj::trace;
+HXDLIN( 277)		::String _hx_tmp1 = (HX_("Tried to accept before initiate: ",77,4a,a0,ec) + this->get_sid());
+HXDLIN( 277)		_hx_tmp(_hx_tmp1, ::Dynamic(::hx::Anon_obj::Create(5)
             			->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.calls.OutgoingProposedSession",be,37,f0,b1))
             			->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,::hx::ObjectPtr<OBJ_>(this)))
             			->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("accept",08,93,06,0b))
             			->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/calls/Session.hx",30,90,a7,33))
-            			->setFixed(4,HX_("lineNumber",dd,81,22,76),276)));
+            			->setFixed(4,HX_("lineNumber",dd,81,22,76),277)));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(OutgoingProposedSession_obj,accept,(void))
 
  ::borogove::calls::OutgoingSession OutgoingProposedSession_obj::initiate( ::borogove::Stanza stanza){
-            	HX_GC_STACKFRAME(&_hx_pos_d2a3c174e5a36893_280_initiate)
-HXLINE( 281)		 ::borogove::Stanza jmi = stanza->getChild(HX_("proceed",2e,96,4a,f1),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
-HXLINE( 282)		if (::hx::IsNull( jmi )) {
-HXLINE( 282)			HX_STACK_DO_THROW((HX_("no jmi: ",4d,b1,bc,b7) + ::Std_obj::string(stanza)));
+            	HX_GC_STACKFRAME(&_hx_pos_d2a3c174e5a36893_281_initiate)
+HXLINE( 282)		 ::borogove::Stanza jmi = stanza->getChild(HX_("proceed",2e,96,4a,f1),HX_("urn:xmpp:jingle-message:0",fd,20,a5,07));
+HXLINE( 283)		if (::hx::IsNull( jmi )) {
+HXLINE( 283)			HX_STACK_DO_THROW((HX_("no jmi: ",4d,b1,bc,b7) + ::Std_obj::string(stanza)));
             		}
-HXLINE( 283)		::String _hx_tmp = ( (::String)(::Reflect_obj::field(jmi->attr,HX_("id",db,5b,00,00))) );
-HXDLIN( 283)		if ((_hx_tmp != this->get_sid())) {
-HXLINE( 283)			::String _hx_tmp1 = ((HX_("sid doesn't match: ",3b,d7,99,76) + ( (::String)(::Reflect_obj::field(jmi->attr,HX_("id",db,5b,00,00))) )) + HX_(" vs ",23,c2,80,15));
-HXDLIN( 283)			HX_STACK_DO_THROW((_hx_tmp1 + this->get_sid()));
+HXLINE( 284)		::String _hx_tmp = ( (::String)(::Reflect_obj::field(jmi->attr,HX_("id",db,5b,00,00))) );
+HXDLIN( 284)		if ((_hx_tmp != this->get_sid())) {
+HXLINE( 284)			::String _hx_tmp1 = ((HX_("sid doesn't match: ",3b,d7,99,76) + ( (::String)(::Reflect_obj::field(jmi->attr,HX_("id",db,5b,00,00))) )) + HX_(" vs ",23,c2,80,15));
+HXDLIN( 284)			HX_STACK_DO_THROW((_hx_tmp1 + this->get_sid()));
             		}
-HXLINE( 284)		 ::borogove::Client _hx_tmp2 = this->client;
-HXDLIN( 284)		_hx_tmp2->sendPresence(this->to->asString(),null());
-HXLINE( 285)		 ::borogove::Client session = this->client;
-HXDLIN( 285)		 ::borogove::JID session1 = ::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
-HXDLIN( 285)		 ::borogove::calls::OutgoingSession session2 =  ::borogove::calls::OutgoingSession_obj::__alloc( HX_CTX ,session,session1,this->get_sid());
-HXLINE( 286)		this->client->trigger(HX_("call/media",73,5d,1d,c7), ::Dynamic(::hx::Anon_obj::Create(3)
+HXLINE( 285)		 ::borogove::Client _hx_tmp2 = this->client;
+HXDLIN( 285)		_hx_tmp2->sendPresence(this->to->asString(),null());
+HXLINE( 286)		 ::borogove::Client session = this->client;
+HXDLIN( 286)		 ::borogove::JID session1 = ::borogove::JID_obj::parse(( (::String)(::Reflect_obj::field(stanza->attr,HX_("from",6a,a5,c2,43))) ));
+HXDLIN( 286)		 ::borogove::calls::OutgoingSession session2 =  ::borogove::calls::OutgoingSession_obj::__alloc( HX_CTX ,session,session1,this->get_sid());
+HXLINE( 287)		this->client->trigger(HX_("call/media",73,5d,1d,c7), ::Dynamic(::hx::Anon_obj::Create(3)
             			->setFixed(0,HX_("session",56,17,98,93),session2)
             			->setFixed(1,HX_("audio",d6,78,80,27),this->audio)
             			->setFixed(2,HX_("video",7b,14,fc,36),this->video)));
-HXLINE( 287)		this->client->trigger(HX_("call/updateStatus",6c,f5,e6,ec), ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE( 288)		this->client->trigger(HX_("call/updateStatus",6c,f5,e6,ec), ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("session",56,17,98,93),session2)));
-HXLINE( 288)		return session2;
+HXLINE( 289)		return session2;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(OutgoingProposedSession_obj,initiate,return )
 
 void OutgoingProposedSession_obj::addMedia(::Array< ::Dynamic> _){
-            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_293_addMedia)
-HXDLIN( 293)		HX_STACK_DO_THROW(HX_("Cannot add media before call starts",aa,0a,79,d5));
+            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_294_addMedia)
+HXDLIN( 294)		HX_STACK_DO_THROW(HX_("Cannot add media before call starts",aa,0a,79,d5));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(OutgoingProposedSession_obj,addMedia,(void))
 
 int OutgoingProposedSession_obj::callStatus(){
-            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_297_callStatus)
-HXDLIN( 297)		return 2;
+            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_298_callStatus)
+HXDLIN( 298)		return 2;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(OutgoingProposedSession_obj,callStatus,return )
 
 ::Array< ::Dynamic> OutgoingProposedSession_obj::audioTracks(){
-            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_302_audioTracks)
-HXDLIN( 302)		return ::Array_obj< ::Dynamic>::__new(0);
+            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_303_audioTracks)
+HXDLIN( 303)		return ::Array_obj< ::Dynamic>::__new(0);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(OutgoingProposedSession_obj,audioTracks,return )
 
 ::Array< ::Dynamic> OutgoingProposedSession_obj::videoTracks(){
-            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_307_videoTracks)
-HXDLIN( 307)		return ::Array_obj< ::Dynamic>::__new(0);
+            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_308_videoTracks)
+HXDLIN( 308)		return ::Array_obj< ::Dynamic>::__new(0);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(OutgoingProposedSession_obj,videoTracks,return )
 
  ::borogove::calls::DTMFSender OutgoingProposedSession_obj::dtmf(){
-            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_312_dtmf)
-HXDLIN( 312)		return null();
+            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_313_dtmf)
+HXDLIN( 313)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(OutgoingProposedSession_obj,dtmf,return )
 
 ::String OutgoingProposedSession_obj::get_sid(){
-            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_316_get_sid)
-HXDLIN( 316)		return this->_sid;
+            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_317_get_sid)
+HXDLIN( 317)		return this->_sid;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(OutgoingProposedSession_obj,get_sid,return )
 
 ::String OutgoingProposedSession_obj::get_chatId(){
-            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_320_get_chatId)
-HXDLIN( 320)		return this->to->asBare()->asString();
+            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_321_get_chatId)
+HXDLIN( 321)		return this->to->asBare()->asString();
             	}
 
 
@@ -598,8 +598,8 @@ void OutgoingProposedSession_obj::__register()
 void OutgoingProposedSession_obj::__boot()
 {
 {
-            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_194_boot)
-HXDLIN( 194)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_STACKFRAME(&_hx_pos_d2a3c174e5a36893_195_boot)
+HXDLIN( 195)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
             			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(5)
             				->setFixed(0,HX_("videoTracks",63,c2,24,be), ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),null())))
diff --git a/Sources/c_borogove/src/borogove/calls/OutgoingSession.cpp b/Sources/c_borogove/src/borogove/calls/OutgoingSession.cpp
index 4403b62..ac3d911 100644
--- a/Sources/c_borogove/src/borogove/calls/OutgoingSession.cpp
+++ b/Sources/c_borogove/src/borogove/calls/OutgoingSession.cpp
@@ -35,17 +35,17 @@
 #include <thenshim/_Promise/Promise_Impl_.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_1c185be5f9e73669_694_new,"borogove.calls.OutgoingSession","new",0x9e6d83b6,"borogove.calls.OutgoingSession.new","borogove/calls/Session.hx",694,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_1c185be5f9e73669_698_onPeerConnection,"borogove.calls.OutgoingSession","onPeerConnection",0x5a3e20c9,"borogove.calls.OutgoingSession.onPeerConnection","borogove/calls/Session.hx",698,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_1c185be5f9e73669_705_initiate,"borogove.calls.OutgoingSession","initiate",0x4b1ddf43,"borogove.calls.OutgoingSession.initiate","borogove/calls/Session.hx",705,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_1c185be5f9e73669_701_initiate,"borogove.calls.OutgoingSession","initiate",0x4b1ddf43,"borogove.calls.OutgoingSession.initiate","borogove/calls/Session.hx",701,0x33a79030)
-HX_LOCAL_STACK_FRAME(_hx_pos_1c185be5f9e73669_710_callStatus,"borogove.calls.OutgoingSession","callStatus",0xf4f0c1da,"borogove.calls.OutgoingSession.callStatus","borogove/calls/Session.hx",710,0x33a79030)
+HX_DEFINE_STACK_FRAME(_hx_pos_1c185be5f9e73669_705_new,"borogove.calls.OutgoingSession","new",0x9e6d83b6,"borogove.calls.OutgoingSession.new","borogove/calls/Session.hx",705,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_1c185be5f9e73669_709_onPeerConnection,"borogove.calls.OutgoingSession","onPeerConnection",0x5a3e20c9,"borogove.calls.OutgoingSession.onPeerConnection","borogove/calls/Session.hx",709,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_1c185be5f9e73669_716_initiate,"borogove.calls.OutgoingSession","initiate",0x4b1ddf43,"borogove.calls.OutgoingSession.initiate","borogove/calls/Session.hx",716,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_1c185be5f9e73669_712_initiate,"borogove.calls.OutgoingSession","initiate",0x4b1ddf43,"borogove.calls.OutgoingSession.initiate","borogove/calls/Session.hx",712,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_1c185be5f9e73669_721_callStatus,"borogove.calls.OutgoingSession","callStatus",0xf4f0c1da,"borogove.calls.OutgoingSession.callStatus","borogove/calls/Session.hx",721,0x33a79030)
 namespace borogove{
 namespace calls{
 
 void OutgoingSession_obj::__construct( ::borogove::Client client, ::borogove::JID counterpart,::String sid){
-            	HX_STACKFRAME(&_hx_pos_1c185be5f9e73669_694_new)
-HXDLIN( 694)		super::__construct(client,counterpart,sid,null());
+            	HX_STACKFRAME(&_hx_pos_1c185be5f9e73669_705_new)
+HXDLIN( 705)		super::__construct(client,counterpart,sid,null());
             	}
 
 Dynamic OutgoingSession_obj::__CreateEmpty() { return new OutgoingSession_obj; }
@@ -68,47 +68,47 @@ bool OutgoingSession_obj::_hx_isInstanceOf(int inClassId) {
 }
 
 ::Dynamic OutgoingSession_obj::onPeerConnection(){
-            	HX_STACKFRAME(&_hx_pos_1c185be5f9e73669_698_onPeerConnection)
-HXDLIN( 698)		return this->setupLocalDescription(HX_("session-initiate",70,2d,30,f7),null(),null(),null());
+            	HX_STACKFRAME(&_hx_pos_1c185be5f9e73669_709_onPeerConnection)
+HXDLIN( 709)		return this->setupLocalDescription(HX_("session-initiate",70,2d,30,f7),null(),null(),null());
             	}
 
 
  ::borogove::calls::OutgoingSession OutgoingSession_obj::initiate( ::borogove::Stanza stanza){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::calls::OutgoingSession,_gthis, ::borogove::Stanza,stanza) HXARGC(1)
             		::Dynamic _hx_run( ::Dynamic _){
-            			HX_STACKFRAME(&_hx_pos_1c185be5f9e73669_705_initiate)
-HXLINE( 705)			return _gthis->transportInfo(stanza);
+            			HX_STACKFRAME(&_hx_pos_1c185be5f9e73669_716_initiate)
+HXLINE( 716)			return _gthis->transportInfo(stanza);
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_1c185be5f9e73669_701_initiate)
-HXDLIN( 701)		 ::borogove::calls::OutgoingSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 702)		this->remoteDescription = ::borogove::calls::SessionDescription_obj::fromStanza(stanza,true,null());
-HXLINE( 703)		this->peerDtlsSetup = this->remoteDescription->getDtlsSetup();
-HXLINE( 704)		 ::borogove::calls::PeerConnection _hx_tmp = this->pc;
-HXDLIN( 704)		::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->setRemoteDescription( ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_STACKFRAME(&_hx_pos_1c185be5f9e73669_712_initiate)
+HXDLIN( 712)		 ::borogove::calls::OutgoingSession _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 713)		this->remoteDescription = ::borogove::calls::SessionDescription_obj::fromStanza(stanza,true,null());
+HXLINE( 714)		this->peerDtlsSetup = this->remoteDescription->getDtlsSetup();
+HXLINE( 715)		 ::borogove::calls::PeerConnection _hx_tmp = this->pc;
+HXDLIN( 715)		::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->setRemoteDescription( ::Dynamic(::hx::Anon_obj::Create(2)
             			->setFixed(0,HX_("sdp",bf,9a,57,00),this->remoteDescription->toSdp())
             			->setFixed(1,HX_("type",ba,f2,08,4d),cpp::Struct(rtc::Description::Type::Answer)))), ::Dynamic(new _hx_Closure_0(_gthis,stanza)),null());
-HXLINE( 706)		return ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 717)		return ::hx::ObjectPtr<OBJ_>(this);
             	}
 
 
 int OutgoingSession_obj::callStatus(){
-            	HX_STACKFRAME(&_hx_pos_1c185be5f9e73669_710_callStatus)
-HXDLIN( 710)		bool _hx_tmp;
-HXDLIN( 710)		if (::hx::IsNotNull( this->pc )) {
-HXDLIN( 710)			_hx_tmp = ::hx::IsNull( this->remoteDescription );
+            	HX_STACKFRAME(&_hx_pos_1c185be5f9e73669_721_callStatus)
+HXDLIN( 721)		bool _hx_tmp;
+HXDLIN( 721)		if (::hx::IsNotNull( this->pc )) {
+HXDLIN( 721)			_hx_tmp = ::hx::IsNull( this->remoteDescription );
             		}
             		else {
-HXDLIN( 710)			_hx_tmp = true;
+HXDLIN( 721)			_hx_tmp = true;
             		}
-HXDLIN( 710)		if (_hx_tmp) {
-HXLINE( 711)			return 2;
+HXDLIN( 721)		if (_hx_tmp) {
+HXLINE( 722)			return 2;
             		}
             		else {
-HXLINE( 713)			return this->super::callStatus();
+HXLINE( 724)			return this->super::callStatus();
             		}
-HXLINE( 710)		return null();
+HXLINE( 721)		return null();
             	}
 
 
diff --git a/Sources/c_borogove/src/borogove/calls/PeerConnection.cpp b/Sources/c_borogove/src/borogove/calls/PeerConnection.cpp
index 68fe3dc..d7d7dcb 100644
--- a/Sources/c_borogove/src/borogove/calls/PeerConnection.cpp
+++ b/Sources/c_borogove/src/borogove/calls/PeerConnection.cpp
@@ -12,9 +12,6 @@
 #ifndef INCLUDED_Lambda
 #include <Lambda.h>
 #endif
-#ifndef INCLUDED_Sys
-#include <Sys.h>
-#endif
 #ifndef INCLUDED_borogove_calls_DTMFSender
 #include <borogove/calls/DTMFSender.h>
 #endif
@@ -49,104 +46,103 @@
 #include <thenshim/_Promise/Promise_Impl_.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_786_new,"borogove.calls.PeerConnection","new",0xdee69918,"borogove.calls.PeerConnection.new","borogove/calls/PeerConnection.cpp.hx",786,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_834_onLocalDescription,"borogove.calls.PeerConnection","onLocalDescription",0xd0f3bad8,"borogove.calls.PeerConnection.onLocalDescription","borogove/calls/PeerConnection.cpp.hx",834,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_832_onLocalDescription,"borogove.calls.PeerConnection","onLocalDescription",0xd0f3bad8,"borogove.calls.PeerConnection.onLocalDescription","borogove/calls/PeerConnection.cpp.hx",832,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_846_onLocalCandidate,"borogove.calls.PeerConnection","onLocalCandidate",0x8333771f,"borogove.calls.PeerConnection.onLocalCandidate","borogove/calls/PeerConnection.cpp.hx",846,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_843_onLocalCandidate,"borogove.calls.PeerConnection","onLocalCandidate",0x8333771f,"borogove.calls.PeerConnection.onLocalCandidate","borogove/calls/PeerConnection.cpp.hx",843,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_860_onStateChange,"borogove.calls.PeerConnection","onStateChange",0x819fda3a,"borogove.calls.PeerConnection.onStateChange","borogove/calls/PeerConnection.cpp.hx",860,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_858_onStateChange,"borogove.calls.PeerConnection","onStateChange",0x819fda3a,"borogove.calls.PeerConnection.onStateChange","borogove/calls/PeerConnection.cpp.hx",858,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_870_onGatheringStateChange,"borogove.calls.PeerConnection","onGatheringStateChange",0x157ac4e1,"borogove.calls.PeerConnection.onGatheringStateChange","borogove/calls/PeerConnection.cpp.hx",870,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_875_onGatheringStateChange,"borogove.calls.PeerConnection","onGatheringStateChange",0x157ac4e1,"borogove.calls.PeerConnection.onGatheringStateChange","borogove/calls/PeerConnection.cpp.hx",875,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_887_onTrack,"borogove.calls.PeerConnection","onTrack",0x51aeb1a4,"borogove.calls.PeerConnection.onTrack","borogove/calls/PeerConnection.cpp.hx",887,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_886_onTrack,"borogove.calls.PeerConnection","onTrack",0x51aeb1a4,"borogove.calls.PeerConnection.onTrack","borogove/calls/PeerConnection.cpp.hx",886,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_884_onTrack,"borogove.calls.PeerConnection","onTrack",0x51aeb1a4,"borogove.calls.PeerConnection.onTrack","borogove/calls/PeerConnection.cpp.hx",884,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_904_get_connectionState,"borogove.calls.PeerConnection","get_connectionState",0x6243a0e2,"borogove.calls.PeerConnection.get_connectionState","borogove/calls/PeerConnection.cpp.hx",904,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_907_get_localDescription,"borogove.calls.PeerConnection","get_localDescription",0x5e7e96a2,"borogove.calls.PeerConnection.get_localDescription","borogove/calls/PeerConnection.cpp.hx",907,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_917_setLocalDescription,"borogove.calls.PeerConnection","setLocalDescription",0x8d195dcb,"borogove.calls.PeerConnection.setLocalDescription","borogove/calls/PeerConnection.cpp.hx",917,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_916_setLocalDescription,"borogove.calls.PeerConnection","setLocalDescription",0x8d195dcb,"borogove.calls.PeerConnection.setLocalDescription","borogove/calls/PeerConnection.cpp.hx",916,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_924_setRemoteDescription,"borogove.calls.PeerConnection","setRemoteDescription",0x69b97e5c,"borogove.calls.PeerConnection.setRemoteDescription","borogove/calls/PeerConnection.cpp.hx",924,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_942_addIceCandidate,"borogove.calls.PeerConnection","addIceCandidate",0x99dc37f1,"borogove.calls.PeerConnection.addIceCandidate","borogove/calls/PeerConnection.cpp.hx",942,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_947_addPendingTracks,"borogove.calls.PeerConnection","addPendingTracks",0x825e94a6,"borogove.calls.PeerConnection.addPendingTracks","borogove/calls/PeerConnection.cpp.hx",947,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_956_addTrack,"borogove.calls.PeerConnection","addTrack",0x917f50f2,"borogove.calls.PeerConnection.addTrack","borogove/calls/PeerConnection.cpp.hx",956,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_964_getTransceivers,"borogove.calls.PeerConnection","getTransceivers",0xb2800afd,"borogove.calls.PeerConnection.getTransceivers","borogove/calls/PeerConnection.cpp.hx",964,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_977_close,"borogove.calls.PeerConnection","close",0x07c37e70,"borogove.calls.PeerConnection.close","borogove/calls/PeerConnection.cpp.hx",977,0x6b4179c1)
-HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_980_addEventListener,"borogove.calls.PeerConnection","addEventListener",0x35483015,"borogove.calls.PeerConnection.addEventListener","borogove/calls/PeerConnection.cpp.hx",980,0x6b4179c1)
+HX_DEFINE_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_792_new,"borogove.calls.PeerConnection","new",0xdee69918,"borogove.calls.PeerConnection.new","borogove/calls/PeerConnection.cpp.hx",792,0x6b4179c1)
+HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_841_onLocalDescription,"borogove.calls.PeerConnection","onLocalDescription",0xd0f3bad8,"borogove.calls.PeerConnection.onLocalDescription","borogove/calls/PeerConnection.cpp.hx",841,0x6b4179c1)
+HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_839_onLocalDescription,"borogove.calls.PeerConnection","onLocalDescription",0xd0f3bad8,"borogove.calls.PeerConnection.onLocalDescription","borogove/calls/PeerConnection.cpp.hx",839,0x6b4179c1)
+HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_853_onLocalCandidate,"borogove.calls.PeerConnection","onLocalCandidate",0x8333771f,"borogove.calls.PeerConnection.onLocalCandidate","borogove/calls/PeerConnection.cpp.hx",853,0x6b4179c1)
+HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_850_onLocalCandidate,"borogove.calls.PeerConnection","onLocalCandidate",0x8333771f,"borogove.calls.PeerConnection.onLocalCandidate","borogove/calls/PeerConnection.cpp.hx",850,0x6b4179c1)
+HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_867_onStateChange,"borogove.calls.PeerConnection","onStateChange",0x819fda3a,"borogove.calls.PeerConnection.onStateChange","borogove/calls/PeerConnection.cpp.hx",867,0x6b4179c1)
+HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_865_onStateChange,"borogove.calls.PeerConnection","onStateChange",0x819fda3a,"borogove.calls.PeerConnection.onStateChange","borogove/calls/PeerConnection.cpp.hx",865,0x6b4179c1)
+HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_877_onGatheringStateChange,"borogove.calls.PeerConnection","onGatheringStateChange",0x157ac4e1,"borogove.calls.PeerConnection.onGatheringStateChange","borogove/calls/PeerConnection.cpp.hx",877,0x6b4179c1)
+HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_882_onGatheringStateChange,"borogove.calls.PeerConnection","onGatheringStateChange",0x157ac4e1,"borogove.calls.PeerConnection.onGatheringStateChange","borogove/calls/PeerConnection.cpp.hx",882,0x6b4179c1)
+HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_894_onTrack,"borogove.calls.PeerConnection","onTrack",0x51aeb1a4,"borogove.calls.PeerConnection.onTrack","borogove/calls/PeerConnection.cpp.hx",894,0x6b4179c1)
+HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_893_onTrack,"borogove.calls.PeerConnection","onTrack",0x51aeb1a4,"borogove.calls.PeerConnection.onTrack","borogove/calls/PeerConnection.cpp.hx",893,0x6b4179c1)
+HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_891_onTrack,"borogove.calls.PeerConnection","onTrack",0x51aeb1a4,"borogove.calls.PeerConnection.onTrack","borogove/calls/PeerConnection.cpp.hx",891,0x6b4179c1)
+HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_915_get_connectionState,"borogove.calls.PeerConnection","get_connectionState",0x6243a0e2,"borogove.calls.PeerConnection.get_connectionState","borogove/calls/PeerConnection.cpp.hx",915,0x6b4179c1)
+HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_918_get_localDescription,"borogove.calls.PeerConnection","get_localDescription",0x5e7e96a2,"borogove.calls.PeerConnection.get_localDescription","borogove/calls/PeerConnection.cpp.hx",918,0x6b4179c1)
+HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_929_setLocalDescription,"borogove.calls.PeerConnection","setLocalDescription",0x8d195dcb,"borogove.calls.PeerConnection.setLocalDescription","borogove/calls/PeerConnection.cpp.hx",929,0x6b4179c1)
+HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_927_setLocalDescription,"borogove.calls.PeerConnection","setLocalDescription",0x8d195dcb,"borogove.calls.PeerConnection.setLocalDescription","borogove/calls/PeerConnection.cpp.hx",927,0x6b4179c1)
+HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_941_setRemoteDescription,"borogove.calls.PeerConnection","setRemoteDescription",0x69b97e5c,"borogove.calls.PeerConnection.setRemoteDescription","borogove/calls/PeerConnection.cpp.hx",941,0x6b4179c1)
+HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_960_addIceCandidate,"borogove.calls.PeerConnection","addIceCandidate",0x99dc37f1,"borogove.calls.PeerConnection.addIceCandidate","borogove/calls/PeerConnection.cpp.hx",960,0x6b4179c1)
+HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_965_addPendingTracks,"borogove.calls.PeerConnection","addPendingTracks",0x825e94a6,"borogove.calls.PeerConnection.addPendingTracks","borogove/calls/PeerConnection.cpp.hx",965,0x6b4179c1)
+HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_974_addTrack,"borogove.calls.PeerConnection","addTrack",0x917f50f2,"borogove.calls.PeerConnection.addTrack","borogove/calls/PeerConnection.cpp.hx",974,0x6b4179c1)
+HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_982_getTransceivers,"borogove.calls.PeerConnection","getTransceivers",0xb2800afd,"borogove.calls.PeerConnection.getTransceivers","borogove/calls/PeerConnection.cpp.hx",982,0x6b4179c1)
+HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_995_close,"borogove.calls.PeerConnection","close",0x07c37e70,"borogove.calls.PeerConnection.close","borogove/calls/PeerConnection.cpp.hx",995,0x6b4179c1)
+HX_LOCAL_STACK_FRAME(_hx_pos_3063e1bcf0a113bf_998_addEventListener,"borogove.calls.PeerConnection","addEventListener",0x35483015,"borogove.calls.PeerConnection.addEventListener","borogove/calls/PeerConnection.cpp.hx",998,0x6b4179c1)
 namespace borogove{
 namespace calls{
 
 void PeerConnection_obj::__construct( ::Dynamic configuration, ::Dynamic constraints){
-            	HX_GC_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_786_new)
-HXLINE( 800)		this->pendingTracks = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 799)		this->hasRemote = false;
-HXLINE( 798)		this->hasLocal = false;
-HXLINE( 796)		this->stateChangeListeners = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 795)		this->localCandidateListeners = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 794)		this->trackListeners = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 793)		this->tracks =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE( 792)		this->waitingOnLocal = null();
-HXLINE( 803)		if (::hx::IsNotNull( ::Sys_obj::getEnv(HX_("BOROGOVE_WEBRTC_DEBUG",9f,1e,98,13)) )) {
-HXLINE( 804)			rtc::InitLogger(rtc::LogLevel::Verbose);;
-            		}
-HXLINE( 806)		this->mainLoop = ::sys::thread::_Thread::Thread_Impl__obj::get_events(::sys::thread::_Thread::HaxeThread_obj::current());
-HXLINE( 807)		rtc::Configuration configRaw;;
-HXLINE( 808)		::cpp::Pointer<  rtc::Configuration > config = &configRaw;
-HXLINE( 809)		bool _hx_tmp;
-HXDLIN( 809)		if (::hx::IsNotNull( configuration )) {
-HXLINE( 809)			_hx_tmp = ::hx::IsNotNull( configuration->__Field(HX_("iceServers",45,14,49,d2),::hx::paccDynamic) );
+            	HX_GC_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_792_new)
+HXLINE( 807)		this->pendingTracks = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 806)		this->hasRemote = false;
+HXLINE( 805)		this->hasLocal = false;
+HXLINE( 803)		this->stateChangeListeners = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 802)		this->localCandidateListeners = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 801)		this->trackListeners = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 800)		this->remoteMedia =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 799)		this->tracks =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 798)		this->waitingOnLocal = null();
+HXLINE( 811)		rtc::InitLogger(rtc::LogLevel::Verbose);;
+HXLINE( 813)		this->mainLoop = ::sys::thread::_Thread::Thread_Impl__obj::get_events(::sys::thread::_Thread::HaxeThread_obj::current());
+HXLINE( 814)		rtc::Configuration configRaw;;
+HXLINE( 815)		::cpp::Pointer<  rtc::Configuration > config = &configRaw;
+HXLINE( 816)		bool _hx_tmp;
+HXDLIN( 816)		if (::hx::IsNotNull( configuration )) {
+HXLINE( 816)			_hx_tmp = ::hx::IsNotNull( configuration->__Field(HX_("iceServers",45,14,49,d2),::hx::paccDynamic) );
             		}
             		else {
-HXLINE( 809)			_hx_tmp = false;
+HXLINE( 816)			_hx_tmp = false;
             		}
-HXDLIN( 809)		if (_hx_tmp) {
-HXLINE( 810)			int _g = 0;
-HXDLIN( 810)			::Array< ::Dynamic> _g1 = ( (::Array< ::Dynamic>)(configuration->__Field(HX_("iceServers",45,14,49,d2),::hx::paccDynamic)) );
-HXDLIN( 810)			while((_g < _g1->length)){
-HXLINE( 810)				 ::Dynamic server = _g1->__get(_g);
-HXDLIN( 810)				_g = (_g + 1);
-HXLINE( 811)				bool _hx_tmp1;
-HXDLIN( 811)				bool _hx_tmp2;
-HXDLIN( 811)				if (::hx::IsNotNull( server->__Field(HX_("urls",24,d6,ac,4d),::hx::paccDynamic) )) {
-HXLINE( 811)					_hx_tmp2 = (( (::Array< ::String >)(server->__Field(HX_("urls",24,d6,ac,4d),::hx::paccDynamic)) )->length == 1);
+HXDLIN( 816)		if (_hx_tmp) {
+HXLINE( 817)			int _g = 0;
+HXDLIN( 817)			::Array< ::Dynamic> _g1 = ( (::Array< ::Dynamic>)(configuration->__Field(HX_("iceServers",45,14,49,d2),::hx::paccDynamic)) );
+HXDLIN( 817)			while((_g < _g1->length)){
+HXLINE( 817)				 ::Dynamic server = _g1->__get(_g);
+HXDLIN( 817)				_g = (_g + 1);
+HXLINE( 818)				bool _hx_tmp1;
+HXDLIN( 818)				bool _hx_tmp2;
+HXDLIN( 818)				if (::hx::IsNotNull( server->__Field(HX_("urls",24,d6,ac,4d),::hx::paccDynamic) )) {
+HXLINE( 818)					_hx_tmp2 = (( (::Array< ::String >)(server->__Field(HX_("urls",24,d6,ac,4d),::hx::paccDynamic)) )->length == 1);
             				}
             				else {
-HXLINE( 811)					_hx_tmp2 = false;
+HXLINE( 818)					_hx_tmp2 = false;
             				}
-HXDLIN( 811)				if (_hx_tmp2) {
-HXLINE( 811)					_hx_tmp1 = (( (::String)( ::Dynamic(server->__Field(HX_("urls",24,d6,ac,4d),::hx::paccDynamic))->__GetItem(0)) ).indexOf(HX_("stuns",f9,9d,1a,84),null()) != 0);
+HXDLIN( 818)				if (_hx_tmp2) {
+HXLINE( 818)					_hx_tmp1 = (( (::String)( ::Dynamic(server->__Field(HX_("urls",24,d6,ac,4d),::hx::paccDynamic))->__GetItem(0)) ).indexOf(HX_("stuns",f9,9d,1a,84),null()) != 0);
             				}
             				else {
-HXLINE( 811)					_hx_tmp1 = false;
+HXLINE( 818)					_hx_tmp1 = false;
             				}
-HXDLIN( 811)				if (_hx_tmp1) {
-HXLINE( 812)					 hx::StdString url = ::hx::StdString(( (::String)( ::Dynamic(server->__Field(HX_("urls",24,d6,ac,4d),::hx::paccDynamic))->__GetItem(0)) ));
-HXLINE( 813)					rtc::IceServer iceServerRaw(url);;
-HXLINE( 814)					::cpp::Pointer<  rtc::IceServer > iceServer = &iceServerRaw;
-HXLINE( 815)					if (::hx::IsNotNull( server->__Field(HX_("username",16,86,eb,20),::hx::paccDynamic) )) {
-HXLINE( 815)						iceServer->get_ref().username = ::hx::StdString(( (::String)(server->__Field(HX_("username",16,86,eb,20),::hx::paccDynamic)) ));
+HXDLIN( 818)				if (_hx_tmp1) {
+HXLINE( 819)					 hx::StdString url = ::hx::StdString(( (::String)( ::Dynamic(server->__Field(HX_("urls",24,d6,ac,4d),::hx::paccDynamic))->__GetItem(0)) ));
+HXLINE( 820)					rtc::IceServer iceServerRaw(url);;
+HXLINE( 821)					::cpp::Pointer<  rtc::IceServer > iceServer = &iceServerRaw;
+HXLINE( 822)					if (::hx::IsNotNull( server->__Field(HX_("username",16,86,eb,20),::hx::paccDynamic) )) {
+HXLINE( 822)						iceServer->get_ref().username = ::hx::StdString(( (::String)(server->__Field(HX_("username",16,86,eb,20),::hx::paccDynamic)) ));
             					}
-HXLINE( 816)					if (::hx::IsNotNull( server->__Field(HX_("credential",d7,89,b2,20),::hx::paccDynamic) )) {
-HXLINE( 816)						iceServer->get_ref().password = ::hx::StdString(( (::String)(server->__Field(HX_("credential",d7,89,b2,20),::hx::paccDynamic)) ));
+HXLINE( 823)					if (::hx::IsNotNull( server->__Field(HX_("credential",d7,89,b2,20),::hx::paccDynamic) )) {
+HXLINE( 823)						iceServer->get_ref().password = ::hx::StdString(( (::String)(server->__Field(HX_("credential",d7,89,b2,20),::hx::paccDynamic)) ));
             					}
-HXLINE( 817)					::cpp::Pointer<  std::vector<  rtc::IceServer > > iceServers = &configRaw.iceServers;
-HXLINE( 818)					 std::vector<  rtc::IceServer > & _hx_tmp3 = iceServers->get_ref();
-HXDLIN( 818)					 rtc::IceServer & _hx_tmp4 = iceServer->get_ref();
-HXDLIN( 818)					_hx_tmp3.push_back(_hx_tmp4);
+HXLINE( 824)					::cpp::Pointer<  std::vector<  rtc::IceServer > > iceServers = &configRaw.iceServers;
+HXLINE( 825)					 std::vector<  rtc::IceServer > & _hx_tmp3 = iceServers->get_ref();
+HXDLIN( 825)					 rtc::IceServer & _hx_tmp4 = iceServer->get_ref();
+HXDLIN( 825)					_hx_tmp3.push_back(_hx_tmp4);
             				}
             			}
             		}
-HXLINE( 822)		this->_pc = std::make_shared<rtc::PeerConnection>(config->get_ref());
-HXLINE( 823)		this->pc = ::cpp::Pointer_obj::fromRaw(this->_pc.get());
-HXLINE( 824)		 rtc::PeerConnection & _hx_tmp5 = this->pc->get_ref();
-HXDLIN( 824)		_hx_tmp5.onLocalDescription([this](auto d) { this->onLocalDescription(); });
-HXLINE( 825)		 rtc::PeerConnection & _hx_tmp6 = this->pc->get_ref();
-HXDLIN( 825)		_hx_tmp6.onTrack([this](auto t) { this->onTrack(t); });
-HXLINE( 826)		 rtc::PeerConnection & _hx_tmp7 = this->pc->get_ref();
-HXDLIN( 826)		_hx_tmp7.onLocalCandidate([this](auto c) { this->onLocalCandidate(c); });
-HXLINE( 827)		 rtc::PeerConnection & _hx_tmp8 = this->pc->get_ref();
-HXDLIN( 827)		_hx_tmp8.onStateChange([this](auto s) { this->onStateChange(s); });
-HXLINE( 828)		 rtc::PeerConnection & _hx_tmp9 = this->pc->get_ref();
-HXDLIN( 828)		_hx_tmp9.onGatheringStateChange([this](auto s) { this->onGatheringStateChange(s); });
+HXLINE( 829)		this->_pc = std::make_shared<rtc::PeerConnection>(config->get_ref());
+HXLINE( 830)		this->pc = ::cpp::Pointer_obj::fromRaw(this->_pc.get());
+HXLINE( 831)		 rtc::PeerConnection & _hx_tmp5 = this->pc->get_ref();
+HXDLIN( 831)		_hx_tmp5.onLocalDescription([this](auto d) { this->onLocalDescription(); });
+HXLINE( 832)		 rtc::PeerConnection & _hx_tmp6 = this->pc->get_ref();
+HXDLIN( 832)		_hx_tmp6.onTrack([this](auto t) { this->onTrack(t); });
+HXLINE( 833)		 rtc::PeerConnection & _hx_tmp7 = this->pc->get_ref();
+HXDLIN( 833)		_hx_tmp7.onLocalCandidate([this](auto c) { this->onLocalCandidate(c); });
+HXLINE( 834)		 rtc::PeerConnection & _hx_tmp8 = this->pc->get_ref();
+HXDLIN( 834)		_hx_tmp8.onStateChange([this](auto s) { this->onStateChange(s); });
+HXLINE( 835)		 rtc::PeerConnection & _hx_tmp9 = this->pc->get_ref();
+HXDLIN( 835)		_hx_tmp9.onGatheringStateChange([this](auto s) { this->onGatheringStateChange(s); });
             	}
 
 Dynamic PeerConnection_obj::__CreateEmpty() { return new PeerConnection_obj; }
@@ -167,20 +163,20 @@ bool PeerConnection_obj::_hx_isInstanceOf(int inClassId) {
 void PeerConnection_obj::onLocalDescription(){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::calls::PeerConnection,_gthis) HXARGC(0)
             		void _hx_run(){
-            			HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_834_onLocalDescription)
-HXLINE( 835)			_gthis->addPendingTracks();
-HXLINE( 836)			if (::hx::IsNotNull( _gthis->waitingOnLocal )) {
-HXLINE( 836)				_gthis->waitingOnLocal(null());
+            			HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_841_onLocalDescription)
+HXLINE( 842)			_gthis->addPendingTracks();
+HXLINE( 843)			if (::hx::IsNotNull( _gthis->waitingOnLocal )) {
+HXLINE( 843)				_gthis->waitingOnLocal(null());
             			}
-HXLINE( 837)			_gthis->waitingOnLocal = null();
+HXLINE( 844)			_gthis->waitingOnLocal = null();
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_832_onLocalDescription)
-HXDLIN( 832)		 ::borogove::calls::PeerConnection _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 833)		int base = 0; hx::SetTopOfStack(&base, true);;
-HXLINE( 834)		this->mainLoop->run( ::Dynamic(new _hx_Closure_0(_gthis)));
-HXLINE( 839)		hx::SetTopOfStack((int*)0, true);;
+            	HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_839_onLocalDescription)
+HXDLIN( 839)		 ::borogove::calls::PeerConnection _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 840)		int base = 0; hx::SetTopOfStack(&base, true);;
+HXLINE( 841)		this->mainLoop->run( ::Dynamic(new _hx_Closure_0(_gthis)));
+HXLINE( 846)		hx::SetTopOfStack((int*)0, true);;
             	}
 
 
@@ -189,18 +185,18 @@ HX_DEFINE_DYNAMIC_FUNC0(PeerConnection_obj,onLocalDescription,(void))
 void PeerConnection_obj::onLocalCandidate( rtc::Candidate candidate){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::calls::PeerConnection,_gthis, rtc::Candidate,candidate) HXARGC(0)
             		void _hx_run(){
-            			HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_846_onLocalCandidate)
-HXLINE( 846)			int _g = 0;
-HXDLIN( 846)			::Array< ::Dynamic> _g1 = _gthis->localCandidateListeners;
-HXDLIN( 846)			while((_g < _g1->length)){
-HXLINE( 846)				 ::Dynamic cb = _g1->__get(_g);
-HXDLIN( 846)				_g = (_g + 1);
-HXLINE( 848)				 std::string this1 = candidate.candidate();
-HXDLIN( 848)				::String _hx_tmp = ( ( hx::StdString)(::hx::StdString(this1)) ).toString();
-HXLINE( 849)				 std::string this2 = candidate.mid();
-HXDLIN( 849)				::String _hx_tmp1 = ( ( hx::StdString)(::hx::StdString(this2)) ).toString();
-HXLINE( 850)				 std::string this3 = ( ( std::string)(( (cpp::Struct<  std::string >)(( ( rtc::Description)(( (cpp::Struct<  rtc::Description >)(_gthis->pc->get_ref().localDescription().value()) )) ).iceUfrag().value()) )) );
-HXLINE( 847)				cb( ::Dynamic(::hx::Anon_obj::Create(1)
+            			HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_853_onLocalCandidate)
+HXLINE( 853)			int _g = 0;
+HXDLIN( 853)			::Array< ::Dynamic> _g1 = _gthis->localCandidateListeners;
+HXDLIN( 853)			while((_g < _g1->length)){
+HXLINE( 853)				 ::Dynamic cb = _g1->__get(_g);
+HXDLIN( 853)				_g = (_g + 1);
+HXLINE( 855)				 std::string this1 = candidate.candidate();
+HXDLIN( 855)				::String _hx_tmp = ( ( hx::StdString)(::hx::StdString(this1)) ).toString();
+HXLINE( 856)				 std::string this2 = candidate.mid();
+HXDLIN( 856)				::String _hx_tmp1 = ( ( hx::StdString)(::hx::StdString(this2)) ).toString();
+HXLINE( 857)				 std::string this3 = ( ( std::string)(( (cpp::Struct<  std::string >)(( ( rtc::Description)(( (cpp::Struct<  rtc::Description >)(_gthis->pc->get_ref().localDescription().value()) )) ).iceUfrag().value()) )) );
+HXLINE( 854)				cb( ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("candidate",43,34,d8,d0), ::Dynamic(::hx::Anon_obj::Create(3)
             						->setFixed(0,HX_("usernameFragment",06,a8,37,89),( ( hx::StdString)(::hx::StdString(this3)) ).toString())
             						->setFixed(1,HX_("candidate",43,34,d8,d0),_hx_tmp)
@@ -209,90 +205,90 @@ HXLINE( 847)				cb( ::Dynamic(::hx::Anon_obj::Create(1)
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_843_onLocalCandidate)
-HXDLIN( 843)		 ::borogove::calls::PeerConnection _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 844)		int base = 0; hx::SetTopOfStack(&base, true);;
-HXLINE( 845)		this->mainLoop->run( ::Dynamic(new _hx_Closure_0(_gthis,candidate)));
-HXLINE( 854)		hx::SetTopOfStack((int*)0, true);;
+            	HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_850_onLocalCandidate)
+HXDLIN( 850)		 ::borogove::calls::PeerConnection _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 851)		int base = 0; hx::SetTopOfStack(&base, true);;
+HXLINE( 852)		this->mainLoop->run( ::Dynamic(new _hx_Closure_0(_gthis,candidate)));
+HXLINE( 861)		hx::SetTopOfStack((int*)0, true);;
             	}
 
 
 void PeerConnection_obj::onStateChange(cpp::Struct<  rtc::PeerConnection::State > state){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::calls::PeerConnection,_gthis,cpp::Struct<  rtc::PeerConnection::State >,state) HXARGC(0)
             		void _hx_run(){
-            			HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_860_onStateChange)
-HXLINE( 861)			::String stateString;
-HXDLIN( 861)			 rtc::PeerConnection::State _hx_switch_0 = ( ( rtc::PeerConnection::State)(state) );
+            			HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_867_onStateChange)
+HXLINE( 868)			::String stateString;
+HXDLIN( 868)			 rtc::PeerConnection::State _hx_switch_0 = ( ( rtc::PeerConnection::State)(state) );
             			if (  (_hx_switch_0==rtc::PeerConnection::State::Closed) ){
-HXLINE( 861)				stateString = HX_("closed",ac,a9,51,0e);
-HXDLIN( 861)				goto _hx_goto_7;
+HXLINE( 868)				stateString = HX_("closed",ac,a9,51,0e);
+HXDLIN( 868)				goto _hx_goto_7;
             			}
             			if (  (_hx_switch_0==rtc::PeerConnection::State::Connected) ){
-HXLINE( 861)				stateString = HX_("connected",c9,e2,f6,a2);
-HXDLIN( 861)				goto _hx_goto_7;
+HXLINE( 868)				stateString = HX_("connected",c9,e2,f6,a2);
+HXDLIN( 868)				goto _hx_goto_7;
             			}
             			if (  (_hx_switch_0==rtc::PeerConnection::State::Connecting) ){
-HXLINE( 861)				stateString = HX_("connecting",38,9f,12,f5);
-HXDLIN( 861)				goto _hx_goto_7;
+HXLINE( 868)				stateString = HX_("connecting",38,9f,12,f5);
+HXDLIN( 868)				goto _hx_goto_7;
             			}
             			if (  (_hx_switch_0==rtc::PeerConnection::State::Disconnected) ){
-HXLINE( 861)				stateString = HX_("disconnected",bb,8b,6b,8e);
-HXDLIN( 861)				goto _hx_goto_7;
+HXLINE( 868)				stateString = HX_("disconnected",bb,8b,6b,8e);
+HXDLIN( 868)				goto _hx_goto_7;
             			}
             			if (  (_hx_switch_0==rtc::PeerConnection::State::Failed) ){
-HXLINE( 861)				stateString = HX_("failed",bd,c5,fe,e7);
-HXDLIN( 861)				goto _hx_goto_7;
+HXLINE( 868)				stateString = HX_("failed",bd,c5,fe,e7);
+HXDLIN( 868)				goto _hx_goto_7;
             			}
             			if (  (_hx_switch_0==rtc::PeerConnection::State::New) ){
-HXLINE( 861)				stateString = HX_("new",60,d0,53,00);
-HXDLIN( 861)				goto _hx_goto_7;
+HXLINE( 868)				stateString = HX_("new",60,d0,53,00);
+HXDLIN( 868)				goto _hx_goto_7;
             			}
             			_hx_goto_7:;
-HXLINE( 862)			{
-HXLINE( 862)				int _g = 0;
-HXDLIN( 862)				::Array< ::Dynamic> _g1 = _gthis->stateChangeListeners;
-HXDLIN( 862)				while((_g < _g1->length)){
-HXLINE( 862)					 ::Dynamic cb = _g1->__get(_g);
-HXDLIN( 862)					_g = (_g + 1);
-HXLINE( 863)					cb(stateString);
+HXLINE( 869)			{
+HXLINE( 869)				int _g = 0;
+HXDLIN( 869)				::Array< ::Dynamic> _g1 = _gthis->stateChangeListeners;
+HXDLIN( 869)				while((_g < _g1->length)){
+HXLINE( 869)					 ::Dynamic cb = _g1->__get(_g);
+HXDLIN( 869)					_g = (_g + 1);
+HXLINE( 870)					cb(stateString);
             				}
             			}
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_858_onStateChange)
-HXDLIN( 858)		 ::borogove::calls::PeerConnection _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 859)		int base = 0; hx::SetTopOfStack(&base, true);;
-HXLINE( 860)		this->mainLoop->run( ::Dynamic(new _hx_Closure_0(_gthis,state)));
-HXLINE( 866)		hx::SetTopOfStack((int*)0, true);;
+            	HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_865_onStateChange)
+HXDLIN( 865)		 ::borogove::calls::PeerConnection _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 866)		int base = 0; hx::SetTopOfStack(&base, true);;
+HXLINE( 867)		this->mainLoop->run( ::Dynamic(new _hx_Closure_0(_gthis,state)));
+HXLINE( 873)		hx::SetTopOfStack((int*)0, true);;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(PeerConnection_obj,onStateChange,(void))
 
 void PeerConnection_obj::onGatheringStateChange(cpp::Struct<  rtc::PeerConnection::GatheringState > state){
-            	HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_870_onGatheringStateChange)
-HXDLIN( 870)		 ::borogove::calls::PeerConnection _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 871)		int base = 0; hx::SetTopOfStack(&base, true);;
-HXLINE( 872)		cpp::Struct<  rtc::PeerConnection::GatheringState > c = rtc::PeerConnection::GatheringState::Complete;
-HXLINE( 873)		if (::hx::IsEq( state,c )) {
+            	HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_877_onGatheringStateChange)
+HXDLIN( 877)		 ::borogove::calls::PeerConnection _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 878)		int base = 0; hx::SetTopOfStack(&base, true);;
+HXLINE( 879)		cpp::Struct<  rtc::PeerConnection::GatheringState > c = rtc::PeerConnection::GatheringState::Complete;
+HXLINE( 880)		if (::hx::IsEq( state,c )) {
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::calls::PeerConnection,_gthis) HXARGC(0)
             			void _hx_run(){
-            				HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_875_onGatheringStateChange)
-HXLINE( 875)				int _g = 0;
-HXDLIN( 875)				::Array< ::Dynamic> _g1 = _gthis->localCandidateListeners;
-HXDLIN( 875)				while((_g < _g1->length)){
-HXLINE( 875)					 ::Dynamic cb = _g1->__get(_g);
-HXDLIN( 875)					_g = (_g + 1);
-HXLINE( 876)					cb( ::Dynamic(::hx::Anon_obj::Create(1)
+            				HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_882_onGatheringStateChange)
+HXLINE( 882)				int _g = 0;
+HXDLIN( 882)				::Array< ::Dynamic> _g1 = _gthis->localCandidateListeners;
+HXDLIN( 882)				while((_g < _g1->length)){
+HXLINE( 882)					 ::Dynamic cb = _g1->__get(_g);
+HXDLIN( 882)					_g = (_g + 1);
+HXLINE( 883)					cb( ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("candidate",43,34,d8,d0),null())));
             				}
             			}
             			HX_END_LOCAL_FUNC0((void))
 
-HXLINE( 874)			this->mainLoop->run( ::Dynamic(new _hx_Closure_0(_gthis)));
+HXLINE( 881)			this->mainLoop->run( ::Dynamic(new _hx_Closure_0(_gthis)));
             		}
-HXLINE( 880)		hx::SetTopOfStack((int*)0, true);;
+HXLINE( 887)		hx::SetTopOfStack((int*)0, true);;
             	}
 
 
@@ -303,48 +299,53 @@ void PeerConnection_obj::onTrack( std::shared_ptr<  rtc::Track > track){
             		void _hx_run(){
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, std::shared_ptr<  rtc::Track >,track) HXARGC(1)
             			bool _hx_run( ::borogove::calls::MediaStreamTrack t){
-            				HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_887_onTrack)
-HXLINE( 887)				::String matchingTrack = t->get_kind();
-HXDLIN( 887)				 std::string this1 = track->description().type();
-HXDLIN( 887)				return (matchingTrack == ( ( hx::StdString)(::hx::StdString(this1)) ).toString());
+            				HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_894_onTrack)
+HXLINE( 894)				::String matchingTrack = t->get_kind();
+HXDLIN( 894)				 std::string this1 = track->description().type();
+HXDLIN( 894)				return (matchingTrack == ( ( hx::StdString)(::hx::StdString(this1)) ).toString());
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-            			HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_886_onTrack)
-HXLINE( 887)			 ::borogove::calls::MediaStreamTrack matchingTrack = ( ( ::borogove::calls::MediaStreamTrack)(::Lambda_obj::find(_gthis->pendingTracks, ::Dynamic(new _hx_Closure_0(track)))) );
-HXLINE( 888)			 ::borogove::calls::MediaStreamTrack media;
-HXDLIN( 888)			if (::hx::IsNull( matchingTrack )) {
-HXLINE( 888)				media = ::borogove::calls::MediaStreamTrack_obj::fromTrack(track);
+            			HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_893_onTrack)
+HXLINE( 894)			 ::borogove::calls::MediaStreamTrack matchingTrack = ( ( ::borogove::calls::MediaStreamTrack)(::Lambda_obj::find(_gthis->pendingTracks, ::Dynamic(new _hx_Closure_0(track)))) );
+HXLINE( 895)			 ::borogove::calls::MediaStreamTrack media;
+HXDLIN( 895)			if (::hx::IsNull( matchingTrack )) {
+HXLINE( 895)				media = ::borogove::calls::MediaStreamTrack_obj::fromTrack(track);
             			}
             			else {
-HXLINE( 891)				::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 891)				{
-HXLINE( 891)					int _g1 = 0;
-HXDLIN( 891)					::Array< ::Dynamic> _g2 = _gthis->pendingTracks;
-HXDLIN( 891)					while((_g1 < _g2->length)){
-HXLINE( 891)						 ::borogove::calls::MediaStreamTrack v = _g2->__get(_g1).StaticCast<  ::borogove::calls::MediaStreamTrack >();
-HXDLIN( 891)						_g1 = (_g1 + 1);
-HXDLIN( 891)						::String media1 = v->get_id();
-HXDLIN( 891)						if ((media1 != matchingTrack->get_id())) {
-HXLINE( 891)							_g->push(v);
+HXLINE( 898)				::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 898)				{
+HXLINE( 898)					int _g1 = 0;
+HXDLIN( 898)					::Array< ::Dynamic> _g2 = _gthis->pendingTracks;
+HXDLIN( 898)					while((_g1 < _g2->length)){
+HXLINE( 898)						 ::borogove::calls::MediaStreamTrack v = _g2->__get(_g1).StaticCast<  ::borogove::calls::MediaStreamTrack >();
+HXDLIN( 898)						_g1 = (_g1 + 1);
+HXDLIN( 898)						::String media1 = v->get_id();
+HXDLIN( 898)						if ((media1 != matchingTrack->get_id())) {
+HXLINE( 898)							_g->push(v);
             						}
             					}
             				}
-HXDLIN( 891)				_gthis->pendingTracks = _g;
-HXLINE( 892)				matchingTrack->set_track(track);
-HXLINE( 888)				media = matchingTrack;
+HXDLIN( 898)				_gthis->pendingTracks = _g;
+HXLINE( 899)				matchingTrack->set_track(track);
+HXLINE( 895)				media = matchingTrack;
+            			}
+HXLINE( 902)			{
+HXLINE( 902)				::Dynamic this1 = _gthis->tracks;
+HXDLIN( 902)				( ( ::haxe::ds::StringMap)(this1) )->set(media->get_id(),media);
             			}
-HXLINE( 895)			{
-HXLINE( 895)				::Dynamic this1 = _gthis->tracks;
-HXDLIN( 895)				( ( ::haxe::ds::StringMap)(this1) )->set(media->get_id(),media);
+HXLINE( 903)			::Dynamic this2 = _gthis->remoteMedia;
+HXDLIN( 903)			::cpp::Pointer<  rtc::Description::Media > rMedia = ( ( ::haxe::ds::StringMap)(this2) )->get(media->get_id());
+HXLINE( 904)			if (::hx::IsNotNull( rMedia )) {
+HXLINE( 905)				media->remoteMedia = rMedia;
             			}
-HXLINE( 896)			{
-HXLINE( 896)				int _g3 = 0;
-HXDLIN( 896)				::Array< ::Dynamic> _g4 = _gthis->trackListeners;
-HXDLIN( 896)				while((_g3 < _g4->length)){
-HXLINE( 896)					 ::Dynamic cb = _g4->__get(_g3);
-HXDLIN( 896)					_g3 = (_g3 + 1);
-HXLINE( 897)					cb( ::Dynamic(::hx::Anon_obj::Create(2)
+HXLINE( 907)			{
+HXLINE( 907)				int _g3 = 0;
+HXDLIN( 907)				::Array< ::Dynamic> _g4 = _gthis->trackListeners;
+HXDLIN( 907)				while((_g3 < _g4->length)){
+HXLINE( 907)					 ::Dynamic cb = _g4->__get(_g3);
+HXDLIN( 907)					_g3 = (_g3 + 1);
+HXLINE( 908)					cb( ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(0,HX_("streams",f3,db,44,f6),::cpp::VirtualArray_obj::__new(0))
             						->setFixed(1,HX_("track",8b,8e,1f,16),media)));
             				}
@@ -352,60 +353,60 @@ HXLINE( 897)					cb( ::Dynamic(::hx::Anon_obj::Create(2)
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_884_onTrack)
-HXDLIN( 884)		 ::borogove::calls::PeerConnection _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 885)		int base = 0; hx::SetTopOfStack(&base, true);;
-HXLINE( 886)		this->mainLoop->run( ::Dynamic(new _hx_Closure_1(_gthis,track)));
-HXLINE( 900)		hx::SetTopOfStack((int*)0, true);;
+            	HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_891_onTrack)
+HXDLIN( 891)		 ::borogove::calls::PeerConnection _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 892)		int base = 0; hx::SetTopOfStack(&base, true);;
+HXLINE( 893)		this->mainLoop->run( ::Dynamic(new _hx_Closure_1(_gthis,track)));
+HXLINE( 911)		hx::SetTopOfStack((int*)0, true);;
             	}
 
 
 ::String PeerConnection_obj::get_connectionState(){
-            	HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_904_get_connectionState)
-HXDLIN( 904)		 rtc::PeerConnection::State _hx_switch_0 = this->pc->get_ref().state();
+            	HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_915_get_connectionState)
+HXDLIN( 915)		 rtc::PeerConnection::State _hx_switch_0 = this->pc->get_ref().state();
             		if (  (_hx_switch_0==rtc::PeerConnection::State::Closed) ){
-HXDLIN( 904)			return HX_("closed",ac,a9,51,0e);
-HXDLIN( 904)			goto _hx_goto_19;
+HXDLIN( 915)			return HX_("closed",ac,a9,51,0e);
+HXDLIN( 915)			goto _hx_goto_19;
             		}
             		if (  (_hx_switch_0==rtc::PeerConnection::State::Connected) ){
-HXDLIN( 904)			return HX_("connected",c9,e2,f6,a2);
-HXDLIN( 904)			goto _hx_goto_19;
+HXDLIN( 915)			return HX_("connected",c9,e2,f6,a2);
+HXDLIN( 915)			goto _hx_goto_19;
             		}
             		if (  (_hx_switch_0==rtc::PeerConnection::State::Connecting) ){
-HXDLIN( 904)			return HX_("connecting",38,9f,12,f5);
-HXDLIN( 904)			goto _hx_goto_19;
+HXDLIN( 915)			return HX_("connecting",38,9f,12,f5);
+HXDLIN( 915)			goto _hx_goto_19;
             		}
             		if (  (_hx_switch_0==rtc::PeerConnection::State::Disconnected) ){
-HXDLIN( 904)			return HX_("disconnected",bb,8b,6b,8e);
-HXDLIN( 904)			goto _hx_goto_19;
+HXDLIN( 915)			return HX_("disconnected",bb,8b,6b,8e);
+HXDLIN( 915)			goto _hx_goto_19;
             		}
             		if (  (_hx_switch_0==rtc::PeerConnection::State::Failed) ){
-HXDLIN( 904)			return HX_("failed",bd,c5,fe,e7);
-HXDLIN( 904)			goto _hx_goto_19;
+HXDLIN( 915)			return HX_("failed",bd,c5,fe,e7);
+HXDLIN( 915)			goto _hx_goto_19;
             		}
             		if (  (_hx_switch_0==rtc::PeerConnection::State::New) ){
-HXDLIN( 904)			return HX_("new",60,d0,53,00);
-HXDLIN( 904)			goto _hx_goto_19;
+HXDLIN( 915)			return HX_("new",60,d0,53,00);
+HXDLIN( 915)			goto _hx_goto_19;
             		}
             		_hx_goto_19:;
-HXDLIN( 904)		return null();
+HXDLIN( 915)		return null();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(PeerConnection_obj,get_connectionState,return )
 
  ::Dynamic PeerConnection_obj::get_localDescription(){
-            	HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_907_get_localDescription)
-HXLINE( 908)		 std::optional<  rtc::Description > desc = this->pc->get_ref().localDescription();
-HXLINE( 909)		if (desc.has_value()) {
-HXLINE( 910)			 std::string this1 = ( ( rtc::Description)(( (cpp::Struct<  rtc::Description >)(desc.value()) )) ).generateSdp();
-HXDLIN( 910)			return  ::Dynamic(::hx::Anon_obj::Create(1)
+            	HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_918_get_localDescription)
+HXLINE( 919)		 std::optional<  rtc::Description > desc = this->pc->get_ref().localDescription();
+HXLINE( 920)		if (desc.has_value()) {
+HXLINE( 921)			 std::string this1 = ( ( rtc::Description)(( (cpp::Struct<  rtc::Description >)(desc.value()) )) ).generateSdp();
+HXDLIN( 921)			return  ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("sdp",bf,9a,57,00),( ( hx::StdString)(::hx::StdString(this1)) ).toString()));
             		}
             		else {
-HXLINE( 912)			return null();
+HXLINE( 923)			return null();
             		}
-HXLINE( 909)		return null();
+HXLINE( 920)		return null();
             	}
 
 
@@ -414,89 +415,98 @@ HX_DEFINE_DYNAMIC_FUNC0(PeerConnection_obj,get_localDescription,return )
 ::Dynamic PeerConnection_obj::setLocalDescription(cpp::Struct<  rtc::Description::Type > sdpType){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::calls::PeerConnection,_gthis,cpp::Struct<  rtc::Description::Type >,sdpType) HXARGC(2)
             		void _hx_run( ::Dynamic resolve, ::Dynamic reject){
-            			HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_917_setLocalDescription)
-HXLINE( 918)			_gthis->waitingOnLocal = resolve;
-HXLINE( 919)			if (!(_gthis->hasRemote)) {
-HXLINE( 919)				_gthis->addPendingTracks();
-            			}
-HXLINE( 920)			 rtc::PeerConnection & _hx_tmp = _gthis->pc->get_ref();
-HXDLIN( 920)			cpp::Struct<  rtc::Description::Type > tmp = sdpType;
-HXDLIN( 920)			cpp::Struct<  rtc::Description::Type > _hx_tmp1;
-HXDLIN( 920)			if (::hx::IsNotNull( tmp )) {
-HXLINE( 920)				_hx_tmp1 = tmp;
+            			HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_929_setLocalDescription)
+HXLINE( 929)			if (_gthis->hasLocal) {
+HXLINE( 932)				resolve(null());
             			}
             			else {
-HXLINE( 920)				_hx_tmp1 = cpp::Struct(rtc::Description::Type::Unspec);
+HXLINE( 934)				_gthis->waitingOnLocal = resolve;
+HXLINE( 935)				if (!(_gthis->hasRemote)) {
+HXLINE( 935)					_gthis->addPendingTracks();
+            				}
+HXLINE( 936)				 rtc::PeerConnection & _hx_tmp = _gthis->pc->get_ref();
+HXDLIN( 936)				cpp::Struct<  rtc::Description::Type > tmp = sdpType;
+HXDLIN( 936)				cpp::Struct<  rtc::Description::Type > _hx_tmp1;
+HXDLIN( 936)				if (::hx::IsNotNull( tmp )) {
+HXLINE( 936)					_hx_tmp1 = tmp;
+            				}
+            				else {
+HXLINE( 936)					_hx_tmp1 = cpp::Struct(rtc::Description::Type::Unspec);
+            				}
+HXDLIN( 936)				_hx_tmp.setLocalDescription(_hx_tmp1);
             			}
-HXDLIN( 920)			_hx_tmp.setLocalDescription(_hx_tmp1);
             		}
             		HX_END_LOCAL_FUNC2((void))
 
-            	HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_916_setLocalDescription)
-HXDLIN( 916)		 ::borogove::calls::PeerConnection _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 917)		return ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_0(_gthis,sdpType)));
+            	HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_927_setLocalDescription)
+HXDLIN( 927)		 ::borogove::calls::PeerConnection _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 928)		return ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_0(_gthis,sdpType)));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(PeerConnection_obj,setLocalDescription,return )
 
 ::Dynamic PeerConnection_obj::setRemoteDescription( ::Dynamic description){
-            	HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_924_setRemoteDescription)
-HXLINE( 925)		 hx::StdString remote = ::hx::StdString(( (::String)(description->__Field(HX_("sdp",bf,9a,57,00),::hx::paccDynamic)) ));
-HXDLIN( 925)		 rtc::Description remote1 =  rtc::Description(remote,::hx::TCast< cpp::Struct<  rtc::Description::Type > >::cast(description->__Field(HX_("type",ba,f2,08,4d),::hx::paccDynamic)));
-HXLINE( 926)		this->pc->get_ref().setRemoteDescription(remote1);
-HXLINE( 927)		this->hasRemote = true;
-HXLINE( 929)		{
-HXLINE( 929)			int _g = 0;
-HXDLIN( 929)			int _g1 = remote1.mediaCount();
-HXDLIN( 929)			while((_g < _g1)){
-HXLINE( 929)				_g = (_g + 1);
-HXDLIN( 929)				int i = (_g - 1);
-HXLINE( 930)				auto mediaVariant = remote1.media(i);
-HXLINE( 931)				 rtc::Description::Media** mediaPointer = std::get_if<rtc::Description::Media *>(&mediaVariant);
-HXLINE( 932)				::cpp::Pointer<  rtc::Description::Media > media;
-HXDLIN( 932)				if (::hx::IsNull( mediaPointer )) {
-HXLINE( 932)					media = null();
+            	HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_941_setRemoteDescription)
+HXLINE( 942)		 hx::StdString remote = ::hx::StdString(( (::String)(description->__Field(HX_("sdp",bf,9a,57,00),::hx::paccDynamic)) ));
+HXDLIN( 942)		 rtc::Description remote1 =  rtc::Description(remote,::hx::TCast< cpp::Struct<  rtc::Description::Type > >::cast(description->__Field(HX_("type",ba,f2,08,4d),::hx::paccDynamic)));
+HXLINE( 943)		this->pc->get_ref().setRemoteDescription(remote1);
+HXLINE( 944)		this->hasRemote = true;
+HXLINE( 946)		{
+HXLINE( 946)			int _g = 0;
+HXDLIN( 946)			int _g1 = remote1.mediaCount();
+HXDLIN( 946)			while((_g < _g1)){
+HXLINE( 946)				_g = (_g + 1);
+HXDLIN( 946)				int i = (_g - 1);
+HXLINE( 947)				auto mediaVariant = remote1.media(i);
+HXLINE( 948)				 rtc::Description::Media** mediaPointer = std::get_if<rtc::Description::Media *>(&mediaVariant);
+HXLINE( 949)				::cpp::Pointer<  rtc::Description::Media > media;
+HXDLIN( 949)				if (::hx::IsNull( mediaPointer )) {
+HXLINE( 949)					media = null();
             				}
             				else {
-HXLINE( 932)					media = ::cpp::Pointer_obj::fromRaw(::cpp::Pointer_obj::fromRaw(mediaPointer)->get_ref());
+HXLINE( 949)					media = ::cpp::Pointer_obj::fromRaw(::cpp::Pointer_obj::fromRaw(mediaPointer)->get_ref());
+            				}
+HXLINE( 950)				 std::string mid = media->get_ref().mid();
+HXLINE( 951)				::Dynamic this1 = this->tracks;
+HXDLIN( 951)				 ::borogove::calls::MediaStreamTrack track = ( ( ::borogove::calls::MediaStreamTrack)(( ( ::haxe::ds::StringMap)(this1) )->get(( ( hx::StdString)(::hx::StdString(mid)) ).toString())) );
+HXLINE( 952)				if (::hx::IsNotNull( track )) {
+HXLINE( 953)					track->remoteMedia = media;
             				}
-HXLINE( 933)				 std::string mid = media->get_ref().mid();
-HXLINE( 934)				::Dynamic this1 = this->tracks;
-HXDLIN( 934)				 ::borogove::calls::MediaStreamTrack track = ( ( ::borogove::calls::MediaStreamTrack)(( ( ::haxe::ds::StringMap)(this1) )->get(( ( hx::StdString)(::hx::StdString(mid)) ).toString())) );
-HXLINE( 935)				if (::hx::IsNotNull( track )) {
-HXLINE( 936)					track->remoteMedia = media;
+HXLINE( 955)				{
+HXLINE( 955)					::Dynamic this2 = this->remoteMedia;
+HXDLIN( 955)					( ( ::haxe::ds::StringMap)(this2) )->set(( ( hx::StdString)(::hx::StdString(mid)) ).toString(),media);
             				}
             			}
             		}
-HXLINE( 939)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+HXLINE( 957)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(PeerConnection_obj,setRemoteDescription,return )
 
 ::Dynamic PeerConnection_obj::addIceCandidate( ::Dynamic candidate){
-            	HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_942_addIceCandidate)
-HXLINE( 943)		 rtc::PeerConnection & _hx_tmp = this->pc->get_ref();
-HXDLIN( 943)		 hx::StdString _hx_tmp1 = ::hx::StdString(( (::String)(candidate->__Field(HX_("candidate",43,34,d8,d0),::hx::paccDynamic)) ));
-HXDLIN( 943)		 hx::StdString _hx_tmp2 = ::hx::StdString(( (::String)(candidate->__Field(HX_("sdpMid",09,30,5f,d9),::hx::paccDynamic)) ));
-HXDLIN( 943)		_hx_tmp.addRemoteCandidate( rtc::Candidate(_hx_tmp1,_hx_tmp2));
-HXLINE( 944)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+            	HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_960_addIceCandidate)
+HXLINE( 961)		 rtc::PeerConnection & _hx_tmp = this->pc->get_ref();
+HXDLIN( 961)		 hx::StdString _hx_tmp1 = ::hx::StdString(( (::String)(candidate->__Field(HX_("candidate",43,34,d8,d0),::hx::paccDynamic)) ));
+HXDLIN( 961)		 hx::StdString _hx_tmp2 = ::hx::StdString(( (::String)(candidate->__Field(HX_("sdpMid",09,30,5f,d9),::hx::paccDynamic)) ));
+HXDLIN( 961)		_hx_tmp.addRemoteCandidate( rtc::Candidate(_hx_tmp1,_hx_tmp2));
+HXLINE( 962)		return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(PeerConnection_obj,addIceCandidate,return )
 
 void PeerConnection_obj::addPendingTracks(){
-            	HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_947_addPendingTracks)
-HXLINE( 948)		this->hasLocal = true;
-HXLINE( 949)		 ::borogove::calls::MediaStreamTrack track;
-HXLINE( 950)		while(true){
-HXLINE( 950)			track = this->pendingTracks->shift().StaticCast<  ::borogove::calls::MediaStreamTrack >();
-HXDLIN( 950)			if (!(::hx::IsNotNull( track ))) {
-HXLINE( 950)				goto _hx_goto_27;
+            	HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_965_addPendingTracks)
+HXLINE( 966)		this->hasLocal = true;
+HXLINE( 967)		 ::borogove::calls::MediaStreamTrack track;
+HXLINE( 968)		while(true){
+HXLINE( 968)			track = this->pendingTracks->shift().StaticCast<  ::borogove::calls::MediaStreamTrack >();
+HXDLIN( 968)			if (!(::hx::IsNotNull( track ))) {
+HXLINE( 968)				goto _hx_goto_27;
             			}
-HXLINE( 951)			this->addTrack(track,null());
+HXLINE( 969)			this->addTrack(track,null());
             		}
             		_hx_goto_27:;
             	}
@@ -505,18 +515,18 @@ HXLINE( 951)			this->addTrack(track,null());
 HX_DEFINE_DYNAMIC_FUNC0(PeerConnection_obj,addPendingTracks,(void))
 
 void PeerConnection_obj::addTrack( ::borogove::calls::MediaStreamTrack track, ::borogove::calls::MediaStream stream){
-            	HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_956_addTrack)
-HXDLIN( 956)		if (this->hasLocal) {
-HXLINE( 957)			 rtc::PeerConnection & _hx_tmp = this->pc->get_ref();
-HXDLIN( 957)			 rtc::Description::Media _hx_tmp1 = ( ( rtc::Description::Media)(( (cpp::Struct<  rtc::Description::Media >)(track->media.value()) )) );
-HXDLIN( 957)			track->set_track(_hx_tmp.addTrack(_hx_tmp1));
-HXLINE( 958)			{
-HXLINE( 958)				::Dynamic this1 = this->tracks;
-HXDLIN( 958)				( ( ::haxe::ds::StringMap)(this1) )->set(track->get_id(),track);
+            	HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_974_addTrack)
+HXDLIN( 974)		if (this->hasLocal) {
+HXLINE( 975)			 rtc::PeerConnection & _hx_tmp = this->pc->get_ref();
+HXDLIN( 975)			 rtc::Description::Media _hx_tmp1 = ( ( rtc::Description::Media)(( (cpp::Struct<  rtc::Description::Media >)(track->media.value()) )) );
+HXDLIN( 975)			track->set_track(_hx_tmp.addTrack(_hx_tmp1));
+HXLINE( 976)			{
+HXLINE( 976)				::Dynamic this1 = this->tracks;
+HXDLIN( 976)				( ( ::haxe::ds::StringMap)(this1) )->set(track->get_id(),track);
             			}
             		}
             		else {
-HXLINE( 960)			this->pendingTracks->push(track);
+HXLINE( 978)			this->pendingTracks->push(track);
             		}
             	}
 
@@ -524,14 +534,14 @@ HXLINE( 960)			this->pendingTracks->push(track);
 HX_DEFINE_DYNAMIC_FUNC2(PeerConnection_obj,addTrack,(void))
 
 ::Array< ::Dynamic> PeerConnection_obj::getTransceivers(){
-            	HX_GC_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_964_getTransceivers)
-HXLINE( 966)		::Array< ::Dynamic> ts = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 967)		{
-HXLINE( 967)			::Dynamic this1 = this->tracks;
-HXDLIN( 967)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(this1);
-HXDLIN( 967)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 967)				 ::borogove::calls::MediaStreamTrack _g_value = ( ( ::borogove::calls::MediaStreamTrack)(::haxe::IMap_obj::get(this1,_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)())) );
-HXLINE( 968)				ts->push( ::Dynamic(::hx::Anon_obj::Create(2)
+            	HX_GC_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_982_getTransceivers)
+HXLINE( 984)		::Array< ::Dynamic> ts = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 985)		{
+HXLINE( 985)			::Dynamic this1 = this->tracks;
+HXDLIN( 985)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(this1);
+HXDLIN( 985)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 985)				 ::borogove::calls::MediaStreamTrack _g_value = ( ( ::borogove::calls::MediaStreamTrack)(::haxe::IMap_obj::get(this1,_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)())) );
+HXLINE( 986)				ts->push( ::Dynamic(::hx::Anon_obj::Create(2)
             					->setFixed(0,HX_("receiver",2f,45,fd,e2), ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("track",8b,8e,1f,16),_g_value)))
             					->setFixed(1,HX_("sender",b5,c7,84,6b), ::Dynamic(::hx::Anon_obj::Create(2)
@@ -539,30 +549,30 @@ HXLINE( 968)				ts->push( ::Dynamic(::hx::Anon_obj::Create(2)
             						->setFixed(1,HX_("dtmf",e9,ba,71,42), ::borogove::calls::DTMFSender_obj::__alloc( HX_CTX ,_g_value))))));
             			}
             		}
-HXLINE( 973)		return ts;
+HXLINE( 991)		return ts;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(PeerConnection_obj,getTransceivers,return )
 
 void PeerConnection_obj::close(){
-            	HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_977_close)
-HXDLIN( 977)		this->pc->get_ref().close();
+            	HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_995_close)
+HXDLIN( 995)		this->pc->get_ref().close();
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(PeerConnection_obj,close,(void))
 
 void PeerConnection_obj::addEventListener(::String event, ::Dynamic callback){
-            	HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_980_addEventListener)
-HXLINE( 981)		if ((event == HX_("track",8b,8e,1f,16))) {
-HXLINE( 981)			this->trackListeners->push(callback);
+            	HX_STACKFRAME(&_hx_pos_3063e1bcf0a113bf_998_addEventListener)
+HXLINE( 999)		if ((event == HX_("track",8b,8e,1f,16))) {
+HXLINE( 999)			this->trackListeners->push(callback);
             		}
-HXLINE( 982)		if ((event == HX_("icecandidate",98,ef,c0,7b))) {
-HXLINE( 982)			this->localCandidateListeners->push(callback);
+HXLINE(1000)		if ((event == HX_("icecandidate",98,ef,c0,7b))) {
+HXLINE(1000)			this->localCandidateListeners->push(callback);
             		}
-HXLINE( 983)		if ((event == HX_("connectionstatechange",e3,a2,87,36))) {
-HXLINE( 983)			this->stateChangeListeners->push(callback);
+HXLINE(1001)		if ((event == HX_("connectionstatechange",e3,a2,87,36))) {
+HXLINE(1001)			this->stateChangeListeners->push(callback);
             		}
             	}
 
@@ -596,6 +606,7 @@ void PeerConnection_obj::__Mark(HX_MARK_PARAMS)
 	HX_MARK_MEMBER_NAME(pc,"pc");
 	HX_MARK_MEMBER_NAME(waitingOnLocal,"waitingOnLocal");
 	HX_MARK_MEMBER_NAME(tracks,"tracks");
+	HX_MARK_MEMBER_NAME(remoteMedia,"remoteMedia");
 	HX_MARK_MEMBER_NAME(trackListeners,"trackListeners");
 	HX_MARK_MEMBER_NAME(localCandidateListeners,"localCandidateListeners");
 	HX_MARK_MEMBER_NAME(stateChangeListeners,"stateChangeListeners");
@@ -614,6 +625,7 @@ void PeerConnection_obj::__Visit(HX_VISIT_PARAMS)
 	HX_VISIT_MEMBER_NAME(pc,"pc");
 	HX_VISIT_MEMBER_NAME(waitingOnLocal,"waitingOnLocal");
 	HX_VISIT_MEMBER_NAME(tracks,"tracks");
+	HX_VISIT_MEMBER_NAME(remoteMedia,"remoteMedia");
 	HX_VISIT_MEMBER_NAME(trackListeners,"trackListeners");
 	HX_VISIT_MEMBER_NAME(localCandidateListeners,"localCandidateListeners");
 	HX_VISIT_MEMBER_NAME(stateChangeListeners,"stateChangeListeners");
@@ -643,6 +655,9 @@ void PeerConnection_obj::__Visit(HX_VISIT_PARAMS)
 	case 9:
 		if (HX_FIELD_EQ(inName,"hasRemote") ) { return ::hx::Val( hasRemote ); }
 		break;
+	case 11:
+		if (HX_FIELD_EQ(inName,"remoteMedia") ) { return ::hx::Val( remoteMedia ); }
+		break;
 	case 13:
 		if (HX_FIELD_EQ(inName,"pendingTracks") ) { return ::hx::Val( pendingTracks ); }
 		if (HX_FIELD_EQ(inName,"onStateChange") ) { return ::hx::Val( onStateChange_dyn() ); }
@@ -698,6 +713,9 @@ void PeerConnection_obj::__Visit(HX_VISIT_PARAMS)
 	case 9:
 		if (HX_FIELD_EQ(inName,"hasRemote") ) { hasRemote=inValue.Cast< bool >(); return inValue; }
 		break;
+	case 11:
+		if (HX_FIELD_EQ(inName,"remoteMedia") ) { remoteMedia=inValue.Cast<  ::haxe::ds::StringMap >(); return inValue; }
+		break;
 	case 13:
 		if (HX_FIELD_EQ(inName,"pendingTracks") ) { pendingTracks=inValue.Cast< ::Array< ::Dynamic> >(); return inValue; }
 		break;
@@ -727,6 +745,7 @@ void PeerConnection_obj::__GetFields(Array< ::String> &outFields)
 	outFields->push(HX_("_pc",12,78,48,00));
 	outFields->push(HX_("pc",f3,61,00,00));
 	outFields->push(HX_("tracks",88,2b,7d,45));
+	outFields->push(HX_("remoteMedia",7e,f4,c4,b0));
 	outFields->push(HX_("trackListeners",74,0d,4f,fa));
 	outFields->push(HX_("localCandidateListeners",07,95,30,e7));
 	outFields->push(HX_("stateChangeListeners",de,12,31,3c));
@@ -745,6 +764,7 @@ static ::hx::StorageInfo PeerConnection_obj_sMemberStorageInfo[] = {
 	{::hx::fsUnknown /* ::cpp::Pointer<  rtc::PeerConnection > */ ,(int)offsetof(PeerConnection_obj,pc),HX_("pc",f3,61,00,00)},
 	{::hx::fsObject /*  ::Dynamic */ ,(int)offsetof(PeerConnection_obj,waitingOnLocal),HX_("waitingOnLocal",bf,a1,df,aa)},
 	{::hx::fsObject /*  ::haxe::ds::StringMap */ ,(int)offsetof(PeerConnection_obj,tracks),HX_("tracks",88,2b,7d,45)},
+	{::hx::fsObject /*  ::haxe::ds::StringMap */ ,(int)offsetof(PeerConnection_obj,remoteMedia),HX_("remoteMedia",7e,f4,c4,b0)},
 	{::hx::fsObject /* ::Array< ::Dynamic> */ ,(int)offsetof(PeerConnection_obj,trackListeners),HX_("trackListeners",74,0d,4f,fa)},
 	{::hx::fsObject /* ::Array< ::Dynamic> */ ,(int)offsetof(PeerConnection_obj,localCandidateListeners),HX_("localCandidateListeners",07,95,30,e7)},
 	{::hx::fsObject /* ::Array< ::Dynamic> */ ,(int)offsetof(PeerConnection_obj,stateChangeListeners),HX_("stateChangeListeners",de,12,31,3c)},
@@ -763,6 +783,7 @@ static ::String PeerConnection_obj_sMemberFields[] = {
 	HX_("pc",f3,61,00,00),
 	HX_("waitingOnLocal",bf,a1,df,aa),
 	HX_("tracks",88,2b,7d,45),
+	HX_("remoteMedia",7e,f4,c4,b0),
 	HX_("trackListeners",74,0d,4f,fa),
 	HX_("localCandidateListeners",07,95,30,e7),
 	HX_("stateChangeListeners",de,12,31,3c),
diff --git a/Sources/c_borogove/src/borogove/calls/Session.cpp b/Sources/c_borogove/src/borogove/calls/Session.cpp
index 67c2584..614a902 100644
--- a/Sources/c_borogove/src/borogove/calls/Session.cpp
+++ b/Sources/c_borogove/src/borogove/calls/Session.cpp
@@ -23,6 +23,7 @@
 #include <thenshim/Thenable.h>
 #endif
 
+HX_LOCAL_STACK_FRAME(_hx_pos_460f34caa00837fd_30_boot,"borogove.calls.Session","boot",0xca04af90,"borogove.calls.Session.boot","borogove/calls/Session.hx",30,0x33a79030)
 namespace borogove{
 namespace calls{
 
@@ -59,5 +60,28 @@ void Session_obj::__register()
 	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
 }
 
+void Session_obj::__boot()
+{
+{
+            	HX_STACKFRAME(&_hx_pos_460f34caa00837fd_30_boot)
+HXDLIN(  30)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(7)
+            				->setFixed(0,HX_("hangup",4d,d2,ff,b7), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
+            				->setFixed(1,HX_("videoTracks",63,c2,24,be), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
+            				->setFixed(2,HX_("accept",08,93,06,0b), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
+            				->setFixed(3,HX_("audioTracks",fe,5c,2d,14), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
+            				->setFixed(4,HX_("callStatus",70,be,2b,31), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
+            				->setFixed(5,HX_("dtmf",e9,ba,71,42), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
+            				->setFixed(6,HX_("addMedia",03,2b,19,7f), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d))))))));
+            	}
+}
+
 } // end namespace borogove
 } // end namespace calls
diff --git a/Sources/c_borogove/src/borogove/calls/Session__Companion.cpp b/Sources/c_borogove/src/borogove/calls/Session__Companion.cpp
new file mode 100644
index 0000000..3163d6f
--- /dev/null
+++ b/Sources/c_borogove/src/borogove/calls/Session__Companion.cpp
@@ -0,0 +1,323 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED__HaxeCBridge_Internal
+#include <_HaxeCBridge/Internal.h>
+#endif
+#ifndef INCLUDED_borogove_calls_DTMFSender
+#include <borogove/calls/DTMFSender.h>
+#endif
+#ifndef INCLUDED_borogove_calls_MediaStream
+#include <borogove/calls/MediaStream.h>
+#endif
+#ifndef INCLUDED_borogove_calls_MediaStreamTrack
+#include <borogove/calls/MediaStreamTrack.h>
+#endif
+#ifndef INCLUDED_borogove_calls_Session
+#include <borogove/calls/Session.h>
+#endif
+#ifndef INCLUDED_borogove_calls_Session__Companion
+#include <borogove/calls/Session__Companion.h>
+#endif
+#ifndef INCLUDED_cpp_Int64Map
+#include <cpp/Int64Map.h>
+#endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
+
+HX_LOCAL_STACK_FRAME(_hx_pos_7f8492da277c5647_398_sid__fromC,"borogove.calls.Session__Companion","sid__fromC",0xb4d809dd,"borogove.calls.Session__Companion.sid__fromC","HaxeCBridge.hx",398,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_7f8492da277c5647_398_chatId__fromC,"borogove.calls.Session__Companion","chatId__fromC",0x15871c94,"borogove.calls.Session__Companion.chatId__fromC","HaxeCBridge.hx",398,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_7f8492da277c5647_339_accept__fromC,"borogove.calls.Session__Companion","accept__fromC",0xb496eeff,"borogove.calls.Session__Companion.accept__fromC","HaxeCBridge.hx",339,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_7f8492da277c5647_339_hangup__fromC,"borogove.calls.Session__Companion","hangup__fromC",0x5d6c525a,"borogove.calls.Session__Companion.hangup__fromC","HaxeCBridge.hx",339,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_7f8492da277c5647_339_addMedia__fromC,"borogove.calls.Session__Companion","addMedia__fromC",0x547edbe4,"borogove.calls.Session__Companion.addMedia__fromC","HaxeCBridge.hx",339,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_7f8492da277c5647_339_callStatus__fromC,"borogove.calls.Session__Companion","callStatus__fromC",0xa6b1df97,"borogove.calls.Session__Companion.callStatus__fromC","HaxeCBridge.hx",339,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_7f8492da277c5647_335_audioTracks__fromC,"borogove.calls.Session__Companion","audioTracks__fromC",0x5ab3ebed,"borogove.calls.Session__Companion.audioTracks__fromC","HaxeCBridge.hx",335,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_7f8492da277c5647_335_videoTracks__fromC,"borogove.calls.Session__Companion","videoTracks__fromC",0x658a2d28,"borogove.calls.Session__Companion.videoTracks__fromC","HaxeCBridge.hx",335,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_7f8492da277c5647_339_dtmf__fromC,"borogove.calls.Session__Companion","dtmf__fromC",0x85e815be,"borogove.calls.Session__Companion.dtmf__fromC","HaxeCBridge.hx",339,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_92536cee04e1ee39_30_boot,"borogove.calls.Session__Companion","boot",0x3ae4ad64,"borogove.calls.Session__Companion.boot","borogove/calls/Session.hx",30,0x33a79030)
+namespace borogove{
+namespace calls{
+
+void Session__Companion_obj::__construct() { }
+
+Dynamic Session__Companion_obj::__CreateEmpty() { return new Session__Companion_obj; }
+
+void *Session__Companion_obj::_hx_vtable = 0;
+
+Dynamic Session__Companion_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< Session__Companion_obj > _hx_result = new Session__Companion_obj();
+	_hx_result->__construct();
+	return _hx_result;
+}
+
+bool Session__Companion_obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x40166246;
+}
+
+::String Session__Companion_obj::sid__fromC(::Dynamic _hx___self){
+            	HX_STACKFRAME(&_hx_pos_7f8492da277c5647_398_sid__fromC)
+HXDLIN( 398)		return ::borogove::calls::Session_obj::get_sid(_hx___self);
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(Session__Companion_obj,sid__fromC,return )
+
+::String Session__Companion_obj::chatId__fromC(::Dynamic _hx___self){
+            	HX_STACKFRAME(&_hx_pos_7f8492da277c5647_398_chatId__fromC)
+HXDLIN( 398)		return ::borogove::calls::Session_obj::get_chatId(_hx___self);
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(Session__Companion_obj,chatId__fromC,return )
+
+void Session__Companion_obj::accept__fromC(::Dynamic self){
+            	HX_STACKFRAME(&_hx_pos_7f8492da277c5647_339_accept__fromC)
+HXDLIN( 339)		::borogove::calls::Session_obj::accept(self);
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(Session__Companion_obj,accept__fromC,(void))
+
+void Session__Companion_obj::hangup__fromC(::Dynamic self){
+            	HX_STACKFRAME(&_hx_pos_7f8492da277c5647_339_hangup__fromC)
+HXDLIN( 339)		::borogove::calls::Session_obj::hangup(self);
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(Session__Companion_obj,hangup__fromC,(void))
+
+void Session__Companion_obj::addMedia__fromC(::Dynamic self,::cpp::Pointer< void* > streams,size_t streams__len){
+            	HX_STACKFRAME(&_hx_pos_7f8492da277c5647_339_addMedia__fromC)
+HXLINE( 282)		::Array< ::Dynamic> _hx_tmp;
+HXDLIN( 282)		if (::hx::IsNull( streams )) {
+HXLINE( 282)			_hx_tmp = null();
+            		}
+            		else {
+HXLINE( 282)			::cpp::Pointer<  ::borogove::calls::MediaStream > _this = streams->reinterpret();
+HXDLIN( 282)			::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new();
+HXDLIN( 282)			::cpp::Pointer<  ::borogove::calls::MediaStream > tmp = _this;
+HXDLIN( 282)			result->setUnmanagedData(tmp,( (int)(streams__len) ));
+HXDLIN( 282)			_hx_tmp = result->copy();
+            		}
+HXLINE( 339)		::borogove::calls::Session_obj::addMedia(self,_hx_tmp);
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC3(Session__Companion_obj,addMedia__fromC,(void))
+
+int Session__Companion_obj::callStatus__fromC(::Dynamic self){
+            	HX_STACKFRAME(&_hx_pos_7f8492da277c5647_339_callStatus__fromC)
+HXDLIN( 339)		return ::borogove::calls::Session_obj::callStatus(self);
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(Session__Companion_obj,callStatus__fromC,return )
+
+size_t Session__Companion_obj::audioTracks__fromC(::Dynamic self,void*** outPtr){
+            	HX_STACKFRAME(&_hx_pos_7f8492da277c5647_335_audioTracks__fromC)
+HXDLIN( 335)		::Array< ::Dynamic> out = ::borogove::calls::Session_obj::audioTracks(self);
+HXDLIN( 335)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 335)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 335)			{
+HXDLIN( 335)				int _g = 0;
+HXDLIN( 335)				while((_g < out->length)){
+HXDLIN( 335)					 ::borogove::calls::MediaStreamTrack el = out->__get(_g).StaticCast<  ::borogove::calls::MediaStreamTrack >();
+HXDLIN( 335)					_g = (_g + 1);
+HXDLIN( 335)					{
+HXDLIN( 335)						 ::Dynamic haxeObject = el;
+HXDLIN( 335)						void* ptr = haxeObject.mPtr;
+HXDLIN( 335)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 335)						{
+HXDLIN( 335)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 335)							if (::hx::IsNull( store )) {
+HXDLIN( 335)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
+            									->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
+HXDLIN( 335)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+            							}
+            							else {
+HXDLIN( 335)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+            							}
+            						}
+            					}
+            				}
+            			}
+HXDLIN( 335)			void** ptr1 = (void**)out->getBase();
+HXDLIN( 335)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 335)			{
+HXDLIN( 335)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 335)				if (::hx::IsNull( store1 )) {
+HXDLIN( 335)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+            						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
+            						->setFixed(1,HX_("value",71,7f,b8,31),out));
+HXDLIN( 335)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+            				}
+            				else {
+HXDLIN( 335)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+            				}
+            			}
+HXDLIN( 335)			_hx_tmp->set_ref(ptr1);
+            		}
+HXDLIN( 335)		return ( (size_t)(out->length) );
+            	}
+
+
+size_t Session__Companion_obj::videoTracks__fromC(::Dynamic self,void*** outPtr){
+            	HX_STACKFRAME(&_hx_pos_7f8492da277c5647_335_videoTracks__fromC)
+HXDLIN( 335)		::Array< ::Dynamic> out = ::borogove::calls::Session_obj::videoTracks(self);
+HXDLIN( 335)		if (::hx::IsNotNull( outPtr )) {
+HXDLIN( 335)			::cpp::Pointer< void** > _hx_tmp = ::cpp::Pointer_obj::fromRaw(outPtr);
+HXDLIN( 335)			{
+HXDLIN( 335)				int _g = 0;
+HXDLIN( 335)				while((_g < out->length)){
+HXDLIN( 335)					 ::borogove::calls::MediaStreamTrack el = out->__get(_g).StaticCast<  ::borogove::calls::MediaStreamTrack >();
+HXDLIN( 335)					_g = (_g + 1);
+HXDLIN( 335)					{
+HXDLIN( 335)						 ::Dynamic haxeObject = el;
+HXDLIN( 335)						void* ptr = haxeObject.mPtr;
+HXDLIN( 335)						::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 335)						{
+HXDLIN( 335)							 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 335)							if (::hx::IsNull( store )) {
+HXDLIN( 335)								store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            									->setFixed(0,HX_("refCount",7c,2e,66,86),1)
+            									->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
+HXDLIN( 335)								::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+            							}
+            							else {
+HXDLIN( 335)								::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+            							}
+            						}
+            					}
+            				}
+            			}
+HXDLIN( 335)			void** ptr1 = (void**)out->getBase();
+HXDLIN( 335)			::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 335)			{
+HXDLIN( 335)				 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 335)				if (::hx::IsNull( store1 )) {
+HXDLIN( 335)					store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+            						->setFixed(0,HX_("refCount",7c,2e,66,86),1)
+            						->setFixed(1,HX_("value",71,7f,b8,31),out));
+HXDLIN( 335)					::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+            				}
+            				else {
+HXDLIN( 335)					::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+            				}
+            			}
+HXDLIN( 335)			_hx_tmp->set_ref(ptr1);
+            		}
+HXDLIN( 335)		return ( (size_t)(out->length) );
+            	}
+
+
+ ::borogove::calls::DTMFSender Session__Companion_obj::dtmf__fromC(::Dynamic self){
+            	HX_STACKFRAME(&_hx_pos_7f8492da277c5647_339_dtmf__fromC)
+HXDLIN( 339)		return ::borogove::calls::Session_obj::dtmf(self);
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(Session__Companion_obj,dtmf__fromC,return )
+
+
+Session__Companion_obj::Session__Companion_obj()
+{
+}
+
+bool Session__Companion_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 10:
+		if (HX_FIELD_EQ(inName,"sid__fromC") ) { outValue = sid__fromC_dyn(); return true; }
+		break;
+	case 11:
+		if (HX_FIELD_EQ(inName,"dtmf__fromC") ) { outValue = dtmf__fromC_dyn(); return true; }
+		break;
+	case 13:
+		if (HX_FIELD_EQ(inName,"chatId__fromC") ) { outValue = chatId__fromC_dyn(); return true; }
+		if (HX_FIELD_EQ(inName,"accept__fromC") ) { outValue = accept__fromC_dyn(); return true; }
+		if (HX_FIELD_EQ(inName,"hangup__fromC") ) { outValue = hangup__fromC_dyn(); return true; }
+		break;
+	case 15:
+		if (HX_FIELD_EQ(inName,"addMedia__fromC") ) { outValue = addMedia__fromC_dyn(); return true; }
+		break;
+	case 17:
+		if (HX_FIELD_EQ(inName,"callStatus__fromC") ) { outValue = callStatus__fromC_dyn(); return true; }
+	}
+	return false;
+}
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo *Session__Companion_obj_sMemberStorageInfo = 0;
+static ::hx::StaticInfo *Session__Companion_obj_sStaticStorageInfo = 0;
+#endif
+
+::hx::Class Session__Companion_obj::__mClass;
+
+static ::String Session__Companion_obj_sStaticFields[] = {
+	HX_("sid__fromC",2b,ef,18,af),
+	HX_("chatId__fromC",06,fc,b1,94),
+	HX_("accept__fromC",71,ce,c1,33),
+	HX_("hangup__fromC",cc,31,97,dc),
+	HX_("addMedia__fromC",d6,fb,b5,1b),
+	HX_("callStatus__fromC",09,60,e6,01),
+	HX_("dtmf__fromC",b0,d4,6f,84),
+	::String(null())
+};
+
+void Session__Companion_obj::__register()
+{
+	Session__Companion_obj _hx_dummy;
+	Session__Companion_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("borogove.calls.Session__Companion",7c,c4,3f,a5);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &Session__Companion_obj::__GetStatic;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(Session__Companion_obj_sStaticFields);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(0 /* sMemberFields */);
+	__mClass->mCanCast = ::hx::TCanCast< Session__Companion_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = Session__Companion_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = Session__Companion_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+void Session__Companion_obj::__boot()
+{
+{
+            	HX_STACKFRAME(&_hx_pos_92536cee04e1ee39_30_boot)
+HXDLIN(  30)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(2)
+            			->setFixed(0,HX_("obj",f7,8f,54,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(0,HX_("HaxeCBridge.name",13,6a,03,0e),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("borogove_calls_Session",ee,be,cb,39)))))
+            			->setFixed(1,HX_("statics",05,3c,65,36), ::Dynamic(::hx::Anon_obj::Create(9)
+            				->setFixed(0,HX_("dtmf__fromC",b0,d4,6f,84), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(1,HX_("chatId__fromC",06,fc,b1,94), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(2,HX_("sid__fromC",2b,ef,18,af), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(3,HX_("audioTracks__fromC",3b,cf,6f,cd), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(4,HX_("videoTracks__fromC",76,10,46,d8), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(5,HX_("hangup__fromC",cc,31,97,dc), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(6,HX_("callStatus__fromC",09,60,e6,01), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(7,HX_("addMedia__fromC",d6,fb,b5,1b), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(8,HX_("accept__fromC",71,ce,c1,33), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null()))))));
+            	}
+}
+
+} // end namespace borogove
+} // end namespace calls
diff --git a/Sources/c_borogove/src/borogove/calls/_Session/Session_Fields_.cpp b/Sources/c_borogove/src/borogove/calls/_Session/Session_Fields_.cpp
index 7b222bd..647d4b4 100644
--- a/Sources/c_borogove/src/borogove/calls/_Session/Session_Fields_.cpp
+++ b/Sources/c_borogove/src/borogove/calls/_Session/Session_Fields_.cpp
@@ -29,7 +29,7 @@
 #include <borogove/calls/_Session/Session_Fields_.h>
 #endif
 
-HX_LOCAL_STACK_FRAME(_hx_pos_d89d9de038d31b1d_53_mkCallMessage,"borogove.calls._Session.Session_Fields_","mkCallMessage",0x0fc9b2e9,"borogove.calls._Session.Session_Fields_.mkCallMessage","borogove/calls/Session.hx",53,0x33a79030)
+HX_LOCAL_STACK_FRAME(_hx_pos_d89d9de038d31b1d_54_mkCallMessage,"borogove.calls._Session.Session_Fields_","mkCallMessage",0x0fc9b2e9,"borogove.calls._Session.Session_Fields_.mkCallMessage","borogove/calls/Session.hx",54,0x33a79030)
 namespace borogove{
 namespace calls{
 namespace _Session{
@@ -52,24 +52,24 @@ bool Session_Fields__obj::_hx_isInstanceOf(int inClassId) {
 }
 
  ::borogove::ChatMessage Session_Fields__obj::mkCallMessage( ::borogove::JID to, ::borogove::JID from, ::borogove::Stanza event){
-            	HX_GC_STACKFRAME(&_hx_pos_d89d9de038d31b1d_53_mkCallMessage)
-HXLINE(  54)		 ::borogove::ChatMessageBuilder m =  ::borogove::ChatMessageBuilder_obj::__alloc( HX_CTX );
-HXLINE(  55)		m->type = 1;
-HXLINE(  56)		m->to = to;
-HXLINE(  57)		m->recipients = ::Array_obj< ::Dynamic>::__new(1)->init(0,to->asBare());
-HXLINE(  58)		m->from = from;
-HXLINE(  59)		m->sender = m->from->asBare();
-HXLINE(  60)		m->replyTo = ::Array_obj< ::Dynamic>::__new(1)->init(0,m->sender);
-HXLINE(  61)		m->direction = 1;
-HXLINE(  62)		m->text = (HX_("call ",c2,71,1b,41) + event->name);
-HXLINE(  63)		m->timestamp = ::borogove::Date_obj::format(::Date_obj::now());
-HXLINE(  64)		m->payloads->push(event);
-HXLINE(  65)		m->localId = ::borogove::ID_obj::_hx_long();
-HXLINE(  66)		if ((event->name != HX_("propose",fe,fe,e9,f9))) {
-HXLINE(  67)			m->versions = ::Array_obj< ::Dynamic>::__new(1)->init(0,m->build());
+            	HX_GC_STACKFRAME(&_hx_pos_d89d9de038d31b1d_54_mkCallMessage)
+HXLINE(  55)		 ::borogove::ChatMessageBuilder m =  ::borogove::ChatMessageBuilder_obj::__alloc( HX_CTX );
+HXLINE(  56)		m->type = 1;
+HXLINE(  57)		m->to = to;
+HXLINE(  58)		m->recipients = ::Array_obj< ::Dynamic>::__new(1)->init(0,to->asBare());
+HXLINE(  59)		m->from = from;
+HXLINE(  60)		m->sender = m->from->asBare();
+HXLINE(  61)		m->replyTo = ::Array_obj< ::Dynamic>::__new(1)->init(0,m->sender);
+HXLINE(  62)		m->direction = 1;
+HXLINE(  63)		m->text = (HX_("call ",c2,71,1b,41) + event->name);
+HXLINE(  64)		m->timestamp = ::borogove::Date_obj::format(::Date_obj::now());
+HXLINE(  65)		m->payloads->push(event);
+HXLINE(  66)		m->localId = ::borogove::ID_obj::_hx_long();
+HXLINE(  67)		if ((event->name != HX_("propose",fe,fe,e9,f9))) {
+HXLINE(  68)			m->versions = ::Array_obj< ::Dynamic>::__new(1)->init(0,m->build());
             		}
-HXLINE(  69)		m->localId = ( (::String)(::Reflect_obj::field(event->attr,HX_("id",db,5b,00,00))) );
-HXLINE(  70)		return m->build();
+HXLINE(  70)		m->localId = ( (::String)(::Reflect_obj::field(event->attr,HX_("id",db,5b,00,00))) );
+HXLINE(  71)		return m->build();
             	}
 
 
diff --git a/Sources/c_borogove/src/borogove/persistence/KeyValueStore.cpp b/Sources/c_borogove/src/borogove/persistence/KeyValueStore.cpp
index 68577ff..e154127 100644
--- a/Sources/c_borogove/src/borogove/persistence/KeyValueStore.cpp
+++ b/Sources/c_borogove/src/borogove/persistence/KeyValueStore.cpp
@@ -8,6 +8,7 @@
 #include <thenshim/Thenable.h>
 #endif
 
+HX_LOCAL_STACK_FRAME(_hx_pos_dc2e6e2f2a1ce966_13_boot,"borogove.persistence.KeyValueStore","boot",0xfabcd84d,"borogove.persistence.KeyValueStore.boot","borogove/persistence/KeyValueStore.hx",13,0xd30803ed)
 namespace borogove{
 namespace persistence{
 
@@ -29,5 +30,18 @@ void KeyValueStore_obj::__register()
 	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
 }
 
+void KeyValueStore_obj::__boot()
+{
+{
+            	HX_STACKFRAME(&_hx_pos_dc2e6e2f2a1ce966_13_boot)
+HXDLIN(  13)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(2)
+            				->setFixed(0,HX_("get",96,80,4e,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
+            				->setFixed(1,HX_("set",a2,9b,57,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d))))))));
+            	}
+}
+
 } // end namespace borogove
 } // end namespace persistence
diff --git a/Sources/c_borogove/src/borogove/persistence/KeyValueStore__Companion.cpp b/Sources/c_borogove/src/borogove/persistence/KeyValueStore__Companion.cpp
new file mode 100644
index 0000000..a9f468a
--- /dev/null
+++ b/Sources/c_borogove/src/borogove/persistence/KeyValueStore__Companion.cpp
@@ -0,0 +1,165 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED__HaxeCBridge_Internal
+#include <_HaxeCBridge/Internal.h>
+#endif
+#ifndef INCLUDED_borogove_persistence_KeyValueStore
+#include <borogove/persistence/KeyValueStore.h>
+#endif
+#ifndef INCLUDED_borogove_persistence_KeyValueStore__Companion
+#include <borogove/persistence/KeyValueStore__Companion.h>
+#endif
+#ifndef INCLUDED_cpp_Int64Map
+#include <cpp/Int64Map.h>
+#endif
+#ifndef INCLUDED_haxe_IMap
+#include <haxe/IMap.h>
+#endif
+#ifndef INCLUDED_thenshim_Thenable
+#include <thenshim/Thenable.h>
+#endif
+#ifndef INCLUDED_thenshim__Promise_Promise_Impl_
+#include <thenshim/_Promise/Promise_Impl_.h>
+#endif
+
+HX_LOCAL_STACK_FRAME(_hx_pos_27d859e4fa2ade45_337_get__fromC,"borogove.persistence.KeyValueStore__Companion","get__fromC",0xaa1e1bf8,"borogove.persistence.KeyValueStore__Companion.get__fromC","HaxeCBridge.hx",337,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_27d859e4fa2ade45_337_set__fromC,"borogove.persistence.KeyValueStore__Companion","set__fromC",0xad9bba6c,"borogove.persistence.KeyValueStore__Companion.set__fromC","HaxeCBridge.hx",337,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_fd6baaf5e59319b7_13_boot,"borogove.persistence.KeyValueStore__Companion","boot",0x48a173c7,"borogove.persistence.KeyValueStore__Companion.boot","borogove/persistence/KeyValueStore.hx",13,0xd30803ed)
+namespace borogove{
+namespace persistence{
+
+void KeyValueStore__Companion_obj::__construct() { }
+
+Dynamic KeyValueStore__Companion_obj::__CreateEmpty() { return new KeyValueStore__Companion_obj; }
+
+void *KeyValueStore__Companion_obj::_hx_vtable = 0;
+
+Dynamic KeyValueStore__Companion_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< KeyValueStore__Companion_obj > _hx_result = new KeyValueStore__Companion_obj();
+	_hx_result->__construct();
+	return _hx_result;
+}
+
+bool KeyValueStore__Companion_obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x5dd44dfb;
+}
+
+void KeyValueStore__Companion_obj::get__fromC(::Dynamic self,::String k,::cpp::Function< void  (const char*,void*) > handler,void* handler__context){
+            	HX_STACKFRAME(&_hx_pos_27d859e4fa2ade45_337_get__fromC)
+HXDLIN( 337)		if (::hx::IsNull( handler )) {
+HXDLIN( 337)			::borogove::persistence::KeyValueStore_obj::get(self,k);
+            		}
+            		else {
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (const char* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
+            			void _hx_run(::String v){
+            				HX_STACKFRAME(&_hx_pos_27d859e4fa2ade45_337_get__fromC)
+HXDLIN( 337)				::cpp::Function< void  (const char*,void*) > handler1 = handler;
+HXLINE( 312)				const char* cStrPtr = v.utf8_str();
+HXDLIN( 312)				::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
+HXDLIN( 312)				{
+HXLINE( 312)					 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 312)					if (::hx::IsNull( store )) {
+HXLINE( 312)						store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            							->setFixed(0,HX_("refCount",7c,2e,66,86),1)
+            							->setFixed(1,HX_("value",71,7f,b8,31),v));
+HXDLIN( 312)						::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+            					}
+            					else {
+HXLINE( 312)						::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+            					}
+            				}
+HXLINE( 337)				handler1(cStrPtr,handler__context);
+            			}
+            			HX_END_LOCAL_FUNC1((void))
+
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::cpp::Function< void  (const char* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
+            			void _hx_run( ::Dynamic e){
+            				HX_STACKFRAME(&_hx_pos_27d859e4fa2ade45_337_get__fromC)
+HXDLIN( 337)				handler(null(),handler__context);
+            			}
+            			HX_END_LOCAL_FUNC1((void))
+
+HXDLIN( 337)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::persistence::KeyValueStore_obj::get(self,k), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
+            		}
+            	}
+
+
+void KeyValueStore__Companion_obj::set__fromC(::Dynamic self,::String k,::String v,::cpp::Function< void  (bool,void*) > handler,void* handler__context){
+            	HX_STACKFRAME(&_hx_pos_27d859e4fa2ade45_337_set__fromC)
+HXDLIN( 337)		if (::hx::IsNull( handler )) {
+HXDLIN( 337)			::borogove::persistence::KeyValueStore_obj::set(self,k,v);
+            		}
+            		else {
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (bool HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
+            			void _hx_run(bool v){
+            				HX_STACKFRAME(&_hx_pos_27d859e4fa2ade45_337_set__fromC)
+HXDLIN( 337)				handler(v,handler__context);
+            			}
+            			HX_END_LOCAL_FUNC1((void))
+
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::cpp::Function< void  (bool HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
+            			void _hx_run( ::Dynamic e){
+            				HX_STACKFRAME(&_hx_pos_27d859e4fa2ade45_337_set__fromC)
+HXDLIN( 337)				handler(false,handler__context);
+            			}
+            			HX_END_LOCAL_FUNC1((void))
+
+HXDLIN( 337)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::persistence::KeyValueStore_obj::set(self,k,v), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
+            		}
+            	}
+
+
+
+KeyValueStore__Companion_obj::KeyValueStore__Companion_obj()
+{
+}
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo *KeyValueStore__Companion_obj_sMemberStorageInfo = 0;
+static ::hx::StaticInfo *KeyValueStore__Companion_obj_sStaticStorageInfo = 0;
+#endif
+
+::hx::Class KeyValueStore__Companion_obj::__mClass;
+
+void KeyValueStore__Companion_obj::__register()
+{
+	KeyValueStore__Companion_obj _hx_dummy;
+	KeyValueStore__Companion_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("borogove.persistence.KeyValueStore__Companion",f9,98,de,3d);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &::hx::Class_obj::GetNoStaticField;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(0 /* sStaticFields */);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(0 /* sMemberFields */);
+	__mClass->mCanCast = ::hx::TCanCast< KeyValueStore__Companion_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = KeyValueStore__Companion_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = KeyValueStore__Companion_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+void KeyValueStore__Companion_obj::__boot()
+{
+{
+            	HX_STACKFRAME(&_hx_pos_fd6baaf5e59319b7_13_boot)
+HXDLIN(  13)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(2)
+            			->setFixed(0,HX_("obj",f7,8f,54,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(0,HX_("HaxeCBridge.name",13,6a,03,0e),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("borogove_persistence_KeyValueStore",11,f7,15,a2)))))
+            			->setFixed(1,HX_("statics",05,3c,65,36), ::Dynamic(::hx::Anon_obj::Create(2)
+            				->setFixed(0,HX_("get__fromC",a3,ce,fc,f2), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(1,HX_("set__fromC",17,6d,7a,f6), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null()))))));
+            	}
+}
+
+} // end namespace borogove
+} // end namespace persistence
diff --git a/Sources/c_borogove/src/borogove/persistence/MediaStore.cpp b/Sources/c_borogove/src/borogove/persistence/MediaStore.cpp
index 6345234..4965a52 100644
--- a/Sources/c_borogove/src/borogove/persistence/MediaStore.cpp
+++ b/Sources/c_borogove/src/borogove/persistence/MediaStore.cpp
@@ -11,6 +11,7 @@
 #include <thenshim/Thenable.h>
 #endif
 
+HX_LOCAL_STACK_FRAME(_hx_pos_1afb41cf71539cf2_14_boot,"borogove.persistence.MediaStore","boot",0x109ff3e7,"borogove.persistence.MediaStore.boot","borogove/persistence/MediaStore.hx",14,0xf16bbcc3)
 namespace borogove{
 namespace persistence{
 
@@ -34,5 +35,20 @@ void MediaStore_obj::__register()
 	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
 }
 
+void MediaStore_obj::__boot()
+{
+{
+            	HX_STACKFRAME(&_hx_pos_1afb41cf71539cf2_14_boot)
+HXDLIN(  14)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(1)
+            			->setFixed(0,HX_("fields",79,8e,8e,80), ::Dynamic(::hx::Anon_obj::Create(3)
+            				->setFixed(0,HX_("hasMedia",2a,4f,14,92), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
+            				->setFixed(1,HX_("removeMedia",00,e2,ef,03), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d)))))
+            				->setFixed(2,HX_("storeMedia",43,b1,3a,43), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.noemit",dc,2c,99,2f),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("wrapped",45,d5,64,0d))))))));
+            	}
+}
+
 } // end namespace borogove
 } // end namespace persistence
diff --git a/Sources/c_borogove/src/borogove/persistence/MediaStoreFS.cpp b/Sources/c_borogove/src/borogove/persistence/MediaStoreFS.cpp
index 02f3b25..fd8200c 100644
--- a/Sources/c_borogove/src/borogove/persistence/MediaStoreFS.cpp
+++ b/Sources/c_borogove/src/borogove/persistence/MediaStoreFS.cpp
@@ -45,7 +45,7 @@ HX_DEFINE_STACK_FRAME(_hx_pos_62805e222ed8ef0e_17_new,"borogove.persistence.Medi
 HX_LOCAL_STACK_FRAME(_hx_pos_62805e222ed8ef0e_32_setKV,"borogove.persistence.MediaStoreFS","setKV",0x4818e5c5,"borogove.persistence.MediaStoreFS.setKV","borogove/persistence/MediaStoreFS.hx",32,0xb4eb58d6)
 HX_LOCAL_STACK_FRAME(_hx_pos_62805e222ed8ef0e_41_getMediaPath,"borogove.persistence.MediaStoreFS","getMediaPath",0xc292883b,"borogove.persistence.MediaStoreFS.getMediaPath","borogove/persistence/MediaStoreFS.hx",41,0xb4eb58d6)
 HX_LOCAL_STACK_FRAME(_hx_pos_62805e222ed8ef0e_51_getMediaPath,"borogove.persistence.MediaStoreFS","getMediaPath",0xc292883b,"borogove.persistence.MediaStoreFS.getMediaPath","borogove/persistence/MediaStoreFS.hx",51,0xb4eb58d6)
-HX_LOCAL_STACK_FRAME(_hx_pos_959a077022e6b8e5_313_getMediaPath__fromC,"borogove.persistence.MediaStoreFS","getMediaPath__fromC",0xffdb359e,"borogove.persistence.MediaStoreFS.getMediaPath__fromC","HaxeCBridge.hx",313,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_959a077022e6b8e5_337_getMediaPath__fromC,"borogove.persistence.MediaStoreFS","getMediaPath__fromC",0xffdb359e,"borogove.persistence.MediaStoreFS.getMediaPath__fromC","HaxeCBridge.hx",337,0xa18550d8)
 HX_LOCAL_STACK_FRAME(_hx_pos_62805e222ed8ef0e_65_hasMedia,"borogove.persistence.MediaStoreFS","hasMedia",0x6622be32,"borogove.persistence.MediaStoreFS.hasMedia","borogove/persistence/MediaStoreFS.hx",65,0xb4eb58d6)
 HX_LOCAL_STACK_FRAME(_hx_pos_62805e222ed8ef0e_72_removeMedia,"borogove.persistence.MediaStoreFS","removeMedia",0x109a87f8,"borogove.persistence.MediaStoreFS.removeMedia","borogove/persistence/MediaStoreFS.hx",72,0xb4eb58d6)
 HX_LOCAL_STACK_FRAME(_hx_pos_62805e222ed8ef0e_71_removeMedia,"borogove.persistence.MediaStoreFS","removeMedia",0x109a87f8,"borogove.persistence.MediaStoreFS.removeMedia","borogove/persistence/MediaStoreFS.hx",71,0xb4eb58d6)
@@ -149,41 +149,41 @@ HXLINE(  43)		return null();
 HX_DEFINE_DYNAMIC_FUNC1(MediaStoreFS_obj,getMediaPath,return )
 
 void MediaStoreFS_obj::getMediaPath__fromC(::String uri,::cpp::Function< void  (const char*,void*) > handler,void* handler__context){
-            	HX_STACKFRAME(&_hx_pos_959a077022e6b8e5_313_getMediaPath__fromC)
-HXDLIN( 313)		if (::hx::IsNull( handler )) {
-HXDLIN( 313)			this->getMediaPath(uri);
+            	HX_STACKFRAME(&_hx_pos_959a077022e6b8e5_337_getMediaPath__fromC)
+HXDLIN( 337)		if (::hx::IsNull( handler )) {
+HXDLIN( 337)			this->getMediaPath(uri);
             		}
             		else {
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (const char* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
             			void _hx_run(::String v){
-            				HX_STACKFRAME(&_hx_pos_959a077022e6b8e5_313_getMediaPath__fromC)
-HXDLIN( 313)				::cpp::Function< void  (const char*,void*) > handler1 = handler;
-HXLINE( 295)				const char* cStrPtr = v.utf8_str();
-HXDLIN( 295)				::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
-HXDLIN( 295)				{
-HXLINE( 295)					 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 295)					if (::hx::IsNull( store )) {
-HXLINE( 295)						store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            				HX_STACKFRAME(&_hx_pos_959a077022e6b8e5_337_getMediaPath__fromC)
+HXDLIN( 337)				::cpp::Function< void  (const char*,void*) > handler1 = handler;
+HXLINE( 312)				const char* cStrPtr = v.utf8_str();
+HXDLIN( 312)				::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
+HXDLIN( 312)				{
+HXLINE( 312)					 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 312)					if (::hx::IsNull( store )) {
+HXLINE( 312)						store =  ::Dynamic(::hx::Anon_obj::Create(2)
             							->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             							->setFixed(1,HX_("value",71,7f,b8,31),v));
-HXDLIN( 295)						::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN( 312)						::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             					}
             					else {
-HXLINE( 295)						::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE( 312)						::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             					}
             				}
-HXLINE( 313)				handler1(cStrPtr,handler__context);
+HXLINE( 337)				handler1(cStrPtr,handler__context);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::cpp::Function< void  (const char* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
             			void _hx_run( ::Dynamic e){
-            				HX_STACKFRAME(&_hx_pos_959a077022e6b8e5_313_getMediaPath__fromC)
-HXDLIN( 313)				handler(null(),handler__context);
+            				HX_STACKFRAME(&_hx_pos_959a077022e6b8e5_337_getMediaPath__fromC)
+HXDLIN( 337)				handler(null(),handler__context);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-HXDLIN( 313)			::thenshim::_Promise::Promise_Impl__obj::then(this->getMediaPath(uri), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
+HXDLIN( 337)			::thenshim::_Promise::Promise_Impl__obj::then(this->getMediaPath(uri), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
             		}
             	}
 
diff --git a/Sources/c_borogove/src/borogove/persistence/MediaStore__Companion.cpp b/Sources/c_borogove/src/borogove/persistence/MediaStore__Companion.cpp
new file mode 100644
index 0000000..de552b8
--- /dev/null
+++ b/Sources/c_borogove/src/borogove/persistence/MediaStore__Companion.cpp
@@ -0,0 +1,221 @@
+// Generated by Haxe 4.3.3
+#include <hxcpp.h>
+
+#ifndef INCLUDED_borogove_persistence_MediaStore
+#include <borogove/persistence/MediaStore.h>
+#endif
+#ifndef INCLUDED_borogove_persistence_MediaStore__Companion
+#include <borogove/persistence/MediaStore__Companion.h>
+#endif
+#ifndef INCLUDED_thenshim_Thenable
+#include <thenshim/Thenable.h>
+#endif
+#ifndef INCLUDED_thenshim__Promise_Promise_Impl_
+#include <thenshim/_Promise/Promise_Impl_.h>
+#endif
+
+HX_LOCAL_STACK_FRAME(_hx_pos_c575748a802f6ed4_337_hasMedia__fromC,"borogove.persistence.MediaStore__Companion","hasMedia__fromC",0x97101834,"borogove.persistence.MediaStore__Companion.hasMedia__fromC","HaxeCBridge.hx",337,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_c575748a802f6ed4_339_removeMedia__fromC,"borogove.persistence.MediaStore__Companion","removeMedia__fromC",0x96ebc5f4,"borogove.persistence.MediaStore__Companion.removeMedia__fromC","HaxeCBridge.hx",339,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_c575748a802f6ed4_337_storeMedia__fromC,"borogove.persistence.MediaStore__Companion","storeMedia__fromC",0xe3958e7b,"borogove.persistence.MediaStore__Companion.storeMedia__fromC","HaxeCBridge.hx",337,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_b0d3af2db2f3f894_14_boot,"borogove.persistence.MediaStore__Companion","boot",0x45562a6d,"borogove.persistence.MediaStore__Companion.boot","borogove/persistence/MediaStore.hx",14,0xf16bbcc3)
+namespace borogove{
+namespace persistence{
+
+void MediaStore__Companion_obj::__construct() { }
+
+Dynamic MediaStore__Companion_obj::__CreateEmpty() { return new MediaStore__Companion_obj; }
+
+void *MediaStore__Companion_obj::_hx_vtable = 0;
+
+Dynamic MediaStore__Companion_obj::__Create(::hx::DynamicArray inArgs)
+{
+	::hx::ObjectPtr< MediaStore__Companion_obj > _hx_result = new MediaStore__Companion_obj();
+	_hx_result->__construct();
+	return _hx_result;
+}
+
+bool MediaStore__Companion_obj::_hx_isInstanceOf(int inClassId) {
+	return inClassId==(int)0x00000001 || inClassId==(int)0x7855aec5;
+}
+
+void MediaStore__Companion_obj::hasMedia__fromC(::Dynamic self,::String hashAlgorithm,::cpp::Pointer< unsigned char > hash,size_t hash__len,::cpp::Function< void  (bool,void*) > handler,void* handler__context){
+            	HX_STACKFRAME(&_hx_pos_c575748a802f6ed4_337_hasMedia__fromC)
+HXDLIN( 337)		if (::hx::IsNull( handler )) {
+HXLINE( 282)			::Array< unsigned char > _hx_tmp;
+HXDLIN( 282)			if (::hx::IsNull( hash )) {
+HXLINE( 282)				_hx_tmp = null();
+            			}
+            			else {
+HXLINE( 282)				::cpp::Pointer< unsigned char > _this = hash->reinterpret();
+HXDLIN( 282)				::Array< unsigned char > result = ::Array_obj< unsigned char >::__new();
+HXDLIN( 282)				::cpp::Pointer< unsigned char > tmp = _this;
+HXDLIN( 282)				result->setUnmanagedData(tmp,( (int)(hash__len) ));
+HXDLIN( 282)				_hx_tmp = result->copy();
+            			}
+HXLINE( 337)			::borogove::persistence::MediaStore_obj::hasMedia(self,hashAlgorithm,_hx_tmp);
+            		}
+            		else {
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (bool HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
+            			void _hx_run(bool v){
+            				HX_STACKFRAME(&_hx_pos_c575748a802f6ed4_337_hasMedia__fromC)
+HXDLIN( 337)				handler(v,handler__context);
+            			}
+            			HX_END_LOCAL_FUNC1((void))
+
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::cpp::Function< void  (bool HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
+            			void _hx_run( ::Dynamic e){
+            				HX_STACKFRAME(&_hx_pos_c575748a802f6ed4_337_hasMedia__fromC)
+HXDLIN( 337)				handler(false,handler__context);
+            			}
+            			HX_END_LOCAL_FUNC1((void))
+
+HXLINE( 282)			::Array< unsigned char > _hx_tmp1;
+HXDLIN( 282)			if (::hx::IsNull( hash )) {
+HXLINE( 282)				_hx_tmp1 = null();
+            			}
+            			else {
+HXLINE( 282)				::cpp::Pointer< unsigned char > _this1 = hash->reinterpret();
+HXDLIN( 282)				::Array< unsigned char > result1 = ::Array_obj< unsigned char >::__new();
+HXDLIN( 282)				::cpp::Pointer< unsigned char > tmp1 = _this1;
+HXDLIN( 282)				result1->setUnmanagedData(tmp1,( (int)(hash__len) ));
+HXDLIN( 282)				_hx_tmp1 = result1->copy();
+            			}
+HXLINE( 337)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::persistence::MediaStore_obj::hasMedia(self,hashAlgorithm,_hx_tmp1), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
+            		}
+            	}
+
+
+void MediaStore__Companion_obj::removeMedia__fromC(::Dynamic self,::String hashAlgorithm,::cpp::Pointer< unsigned char > hash,size_t hash__len){
+            	HX_STACKFRAME(&_hx_pos_c575748a802f6ed4_339_removeMedia__fromC)
+HXLINE( 282)		::Array< unsigned char > _hx_tmp;
+HXDLIN( 282)		if (::hx::IsNull( hash )) {
+HXLINE( 282)			_hx_tmp = null();
+            		}
+            		else {
+HXLINE( 282)			::cpp::Pointer< unsigned char > _this = hash->reinterpret();
+HXDLIN( 282)			::Array< unsigned char > result = ::Array_obj< unsigned char >::__new();
+HXDLIN( 282)			::cpp::Pointer< unsigned char > tmp = _this;
+HXDLIN( 282)			result->setUnmanagedData(tmp,( (int)(hash__len) ));
+HXDLIN( 282)			_hx_tmp = result->copy();
+            		}
+HXLINE( 339)		::borogove::persistence::MediaStore_obj::removeMedia(self,hashAlgorithm,_hx_tmp);
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC4(MediaStore__Companion_obj,removeMedia__fromC,(void))
+
+void MediaStore__Companion_obj::storeMedia__fromC(::Dynamic self,::String mime,::cpp::Pointer< unsigned char > bytes,size_t bytes__len,::cpp::Function< void  (bool,void*) > handler,void* handler__context){
+            	HX_STACKFRAME(&_hx_pos_c575748a802f6ed4_337_storeMedia__fromC)
+HXDLIN( 337)		if (::hx::IsNull( handler )) {
+HXLINE( 282)			::Array< unsigned char > _hx_tmp;
+HXDLIN( 282)			if (::hx::IsNull( bytes )) {
+HXLINE( 282)				_hx_tmp = null();
+            			}
+            			else {
+HXLINE( 282)				::cpp::Pointer< unsigned char > _this = bytes->reinterpret();
+HXDLIN( 282)				::Array< unsigned char > result = ::Array_obj< unsigned char >::__new();
+HXDLIN( 282)				::cpp::Pointer< unsigned char > tmp = _this;
+HXDLIN( 282)				result->setUnmanagedData(tmp,( (int)(bytes__len) ));
+HXDLIN( 282)				_hx_tmp = result->copy();
+            			}
+HXLINE( 337)			::borogove::persistence::MediaStore_obj::storeMedia(self,mime,_hx_tmp);
+            		}
+            		else {
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (bool HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
+            			void _hx_run(bool v){
+            				HX_STACKFRAME(&_hx_pos_c575748a802f6ed4_337_storeMedia__fromC)
+HXDLIN( 337)				handler(v,handler__context);
+            			}
+            			HX_END_LOCAL_FUNC1((void))
+
+            			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::cpp::Function< void  (bool HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
+            			void _hx_run( ::Dynamic e){
+            				HX_STACKFRAME(&_hx_pos_c575748a802f6ed4_337_storeMedia__fromC)
+HXDLIN( 337)				handler(false,handler__context);
+            			}
+            			HX_END_LOCAL_FUNC1((void))
+
+HXLINE( 282)			::Array< unsigned char > _hx_tmp1;
+HXDLIN( 282)			if (::hx::IsNull( bytes )) {
+HXLINE( 282)				_hx_tmp1 = null();
+            			}
+            			else {
+HXLINE( 282)				::cpp::Pointer< unsigned char > _this1 = bytes->reinterpret();
+HXDLIN( 282)				::Array< unsigned char > result1 = ::Array_obj< unsigned char >::__new();
+HXDLIN( 282)				::cpp::Pointer< unsigned char > tmp1 = _this1;
+HXDLIN( 282)				result1->setUnmanagedData(tmp1,( (int)(bytes__len) ));
+HXDLIN( 282)				_hx_tmp1 = result1->copy();
+            			}
+HXLINE( 337)			::thenshim::_Promise::Promise_Impl__obj::then(::borogove::persistence::MediaStore_obj::storeMedia(self,mime,_hx_tmp1), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
+            		}
+            	}
+
+
+
+MediaStore__Companion_obj::MediaStore__Companion_obj()
+{
+}
+
+bool MediaStore__Companion_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 18:
+		if (HX_FIELD_EQ(inName,"removeMedia__fromC") ) { outValue = removeMedia__fromC_dyn(); return true; }
+	}
+	return false;
+}
+
+#ifdef HXCPP_SCRIPTABLE
+static ::hx::StorageInfo *MediaStore__Companion_obj_sMemberStorageInfo = 0;
+static ::hx::StaticInfo *MediaStore__Companion_obj_sStaticStorageInfo = 0;
+#endif
+
+::hx::Class MediaStore__Companion_obj::__mClass;
+
+static ::String MediaStore__Companion_obj_sStaticFields[] = {
+	HX_("removeMedia__fromC",79,ce,9c,e1),
+	::String(null())
+};
+
+void MediaStore__Companion_obj::__register()
+{
+	MediaStore__Companion_obj _hx_dummy;
+	MediaStore__Companion_obj::_hx_vtable = *(void **)&_hx_dummy;
+	::hx::Static(__mClass) = new ::hx::Class_obj();
+	__mClass->mName = HX_("borogove.persistence.MediaStore__Companion",13,64,71,27);
+	__mClass->mSuper = &super::__SGetClass();
+	__mClass->mConstructEmpty = &__CreateEmpty;
+	__mClass->mConstructArgs = &__Create;
+	__mClass->mGetStaticField = &MediaStore__Companion_obj::__GetStatic;
+	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(MediaStore__Companion_obj_sStaticFields);
+	__mClass->mMembers = ::hx::Class_obj::dupFunctions(0 /* sMemberFields */);
+	__mClass->mCanCast = ::hx::TCanCast< MediaStore__Companion_obj >;
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mMemberStorageInfo = MediaStore__Companion_obj_sMemberStorageInfo;
+#endif
+#ifdef HXCPP_SCRIPTABLE
+	__mClass->mStaticStorageInfo = MediaStore__Companion_obj_sStaticStorageInfo;
+#endif
+	::hx::_hx_RegisterClass(__mClass->mName, __mClass);
+}
+
+void MediaStore__Companion_obj::__boot()
+{
+{
+            	HX_STACKFRAME(&_hx_pos_b0d3af2db2f3f894_14_boot)
+HXDLIN(  14)		__mClass->__meta__ =  ::Dynamic(::hx::Anon_obj::Create(2)
+            			->setFixed(0,HX_("obj",f7,8f,54,00), ::Dynamic(::hx::Anon_obj::Create(1)
+            				->setFixed(0,HX_("HaxeCBridge.name",13,6a,03,0e),::cpp::VirtualArray_obj::__new(1)->init(0,HX_("borogove_persistence_MediaStore",3b,01,fb,2e)))))
+            			->setFixed(1,HX_("statics",05,3c,65,36), ::Dynamic(::hx::Anon_obj::Create(3)
+            				->setFixed(0,HX_("removeMedia__fromC",79,ce,9c,e1), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(1,HX_("hasMedia__fromC",8f,ba,d6,fc), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null())))
+            				->setFixed(2,HX_("storeMedia__fromC",96,bd,0d,42), ::Dynamic(::hx::Anon_obj::Create(1)
+            					->setFixed(0,HX_("HaxeCBridge.wrapper",8b,ea,27,d4),null()))))));
+            	}
+}
+
+} // end namespace borogove
+} // end namespace persistence
diff --git a/Sources/c_borogove/src/borogove/persistence/Sqlite.cpp b/Sources/c_borogove/src/borogove/persistence/Sqlite.cpp
index bd21467..a401c4e 100644
--- a/Sources/c_borogove/src/borogove/persistence/Sqlite.cpp
+++ b/Sources/c_borogove/src/borogove/persistence/Sqlite.cpp
@@ -1,6 +1,9 @@
 // Generated by Haxe 4.3.3
 #include <hxcpp.h>
 
+#ifndef INCLUDED_EReg
+#include <EReg.h>
+#endif
 #ifndef INCLUDED_Lambda
 #include <Lambda.h>
 #endif
@@ -13,9 +16,15 @@
 #ifndef INCLUDED_StringBuf
 #include <StringBuf.h>
 #endif
+#ifndef INCLUDED_StringTools
+#include <StringTools.h>
+#endif
 #ifndef INCLUDED_Type
 #include <Type.h>
 #endif
+#ifndef INCLUDED_ValueType
+#include <ValueType.h>
+#endif
 #ifndef INCLUDED__HaxeCBridge_Internal
 #include <_HaxeCBridge/Internal.h>
 #endif
@@ -103,6 +112,9 @@
 #ifndef INCLUDED_haxe_format_JsonParser
 #include <haxe/format/JsonParser.h>
 #endif
+#ifndef INCLUDED_haxe_format_JsonPrinter
+#include <haxe/format/JsonPrinter.h>
+#endif
 #ifndef INCLUDED_haxe_io_Bytes
 #include <haxe/io/Bytes.h>
 #endif
@@ -119,284 +131,267 @@
 #include <thenshim/_Promise/Promise_Impl_.h>
 #endif
 
-HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_48_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",48,0x605e3eb4)
+HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_84_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",84,0x605e3eb4)
 static const ::String _hx_array_data_99390348_1[] = {
-	HX_("CREATE TABLE messages (\n\t\t\t\t\t\t\taccount_id TEXT NOT NULL,\n\t\t\t\t\t\t\tmam_id TEXT NOT NULL,\n\t\t\t\t\t\t\tmam_by TEXT NOT NULL,\n\t\t\t\t\t\t\tstanza_id TEXT NOT NULL,\n\t\t\t\t\t\t\tcorrection_id TEXT NOT NULL,\n\t\t\t\t\t\t\tsync_point INTEGER NOT NULL,\n\t\t\t\t\t\t\tchat_id TEXT NOT NULL,\n\t\t\t\t\t\t\tsender_id TEXT NOT NULL,\n\t\t\t\t\t\t\tcreated_at INTEGER NOT NULL,\n\t\t\t\t\t\t\tstatus INTEGER NOT NULL,\n\t\t\t\t\t\t\tdirection INTEGER NOT NULL,\n\t\t\t\t\t\t\ttype INTEGER NOT NULL,\n\t\t\t\t\t\t\tstanza TEXT NOT NULL,\n\t\t\t\t\t\t\tPRIMARY KEY (account_id, mam_id, mam_by, stanza_id)\n\t\t\t\t\t\t) STRICT;",58,1c,57,a1),HX_("CREATE INDEX messages_created_at ON messages (account_id, chat_id, created_at);",f1,c3,db,39),HX_("CREATE INDEX messages_correction_id ON messages (correction_id);",7e,cd,37,3e),HX_("CREATE TABLE chats (\n\t\t\t\t\t\t\taccount_id TEXT NOT NULL,\n\t\t\t\t\t\t\tchat_id TEXT NOT NULL,\n\t\t\t\t\t\t\ttrusted INTEGER NOT NULL,\n\t\t\t\t\t\t\tavatar_sha1 BLOB,\n\t\t\t\t\t\t\tfn TEXT,\n\t\t\t\t\t\t\tui_state INTEGER NOT NULL,\n\t\t\t\t\t\t\tblocked INTEGER NOT NULL,\n\t\t\t\t\t\t\textensions TEXT,\n\t\t\t\t\t\t\tread_up_to_id TEXT,\n\t\t\t\t\t\t\tread_up_to_by TEXT,\n\t\t\t\t\t\t\tcaps_ver BLOB,\n\t\t\t\t\t\t\tpresence BLOB NOT NULL,\n\t\t\t\t\t\t\tclass TEXT NOT NULL,\n\t\t\t\t\t\t\tPRIMARY KEY (account_id, chat_id)\n\t\t\t\t\t\t) STRICT;",84,84,f7,05),HX_("CREATE TABLE keyvaluepairs (\n\t\t\t\t\t\t\tk TEXT NOT NULL PRIMARY KEY,\n\t\t\t\t\t\t\tv TEXT NOT NULL\n\t\t\t\t\t\t) STRICT;",1e,36,08,e6),HX_("CREATE TABLE caps (\n\t\t\t\t\t\t\tsha1 BLOB NOT NULL PRIMARY KEY,\n\t\t\t\t\t\t\tcaps BLOB NOT NULL\n\t\t\t\t\t\t) STRICT;",79,bf,78,20),HX_("CREATE TABLE services (\n\t\t\t\t\t\t\taccount_id TEXT NOT NULL,\n\t\t\t\t\t\t\tservice_id TEXT NOT NULL,\n\t\t\t\t\t\t\tname TEXT,\n\t\t\t\t\t\t\tnode TEXT,\n\t\t\t\t\t\t\tcaps BLOB NOT NULL,\n\t\t\t\t\t\t\tPRIMARY KEY (account_id, service_id)\n\t\t\t\t\t\t) STRICT;",32,46,2e,5c),HX_("CREATE TABLE accounts (\n\t\t\t\t\t\t\taccount_id TEXT NOT NULL,\n\t\t\t\t\t\t\tclient_id TEXT NOT NULL,\n\t\t\t\t\t\t\tdisplay_name TEXT,\n\t\t\t\t\t\t\ttoken TEXT,\n\t\t\t\t\t\t\tfast_count INTEGER NOT NULL DEFAULT 0,\n\t\t\t\t\t\t\tsm_state BLOB,\n\t\t\t\t\t\t\tPRIMARY KEY (account_id)\n\t\t\t\t\t\t) STRICT;",b6,63,df,b2),HX_("CREATE TABLE reactions (\n\t\t\t\t\t\t\taccount_id TEXT NOT NULL,\n\t\t\t\t\t\t\tupdate_id TEXT NOT NULL,\n\t\t\t\t\t\t\tmam_id TEXT,\n\t\t\t\t\t\t\tmam_by TEXT,\n\t\t\t\t\t\t\tstanza_id TEXT,\n\t\t\t\t\t\t\tchat_id TEXT NOT NULL,\n\t\t\t\t\t\t\tsender_id TEXT NOT NULL,\n\t\t\t\t\t\t\tcreated_at INTEGER NOT NULL,\n\t\t\t\t\t\t\treactions BLOB NOT NULL,\n\t\t\t\t\t\t\tkind INTEGER NOT NULL,\n\t\t\t\t\t\t\tPRIMARY KEY (account_id, chat_id, sender_id, update_id)\n\t\t\t\t\t\t) STRICT;",09,3c,de,e0),HX_("PRAGMA user_version = 1;",45,c2,55,a9),
+	HX_("CREATE TABLE messages (\n\t\t\t\t\t\t\taccount_id TEXT NOT NULL,\n\t\t\t\t\t\t\tmam_id TEXT NOT NULL,\n\t\t\t\t\t\t\tmam_by TEXT NOT NULL,\n\t\t\t\t\t\t\tstanza_id TEXT NOT NULL,\n\t\t\t\t\t\t\tcorrection_id TEXT NOT NULL,\n\t\t\t\t\t\t\tsync_point INTEGER NOT NULL,\n\t\t\t\t\t\t\tchat_id TEXT NOT NULL,\n\t\t\t\t\t\t\tsender_id TEXT NOT NULL,\n\t\t\t\t\t\t\tcreated_at INTEGER NOT NULL,\n\t\t\t\t\t\t\tstatus INTEGER NOT NULL,\n\t\t\t\t\t\t\tdirection INTEGER NOT NULL,\n\t\t\t\t\t\t\ttype INTEGER NOT NULL,\n\t\t\t\t\t\t\tstanza TEXT NOT NULL,\n\t\t\t\t\t\t\tPRIMARY KEY (account_id, mam_id, mam_by, stanza_id)\n\t\t\t\t\t\t) STRICT",83,96,ac,55),HX_("CREATE INDEX messages_created_at ON messages (account_id, chat_id, created_at)",0a,a5,34,74),HX_("CREATE INDEX messages_correction_id ON messages (correction_id)",1d,cc,3a,55),HX_("CREATE TABLE chats (\n\t\t\t\t\t\t\taccount_id TEXT NOT NULL,\n\t\t\t\t\t\t\tchat_id TEXT NOT NULL,\n\t\t\t\t\t\t\ttrusted INTEGER NOT NULL,\n\t\t\t\t\t\t\tavatar_sha1 BLOB,\n\t\t\t\t\t\t\tfn TEXT,\n\t\t\t\t\t\t\tui_state INTEGER NOT NULL,\n\t\t\t\t\t\t\tblocked INTEGER NOT NULL,\n\t\t\t\t\t\t\textensions TEXT,\n\t\t\t\t\t\t\tread_up_to_id TEXT,\n\t\t\t\t\t\t\tread_up_to_by TEXT,\n\t\t\t\t\t\t\tcaps_ver BLOB,\n\t\t\t\t\t\t\tpresence BLOB NOT NULL,\n\t\t\t\t\t\t\tclass TEXT NOT NULL,\n\t\t\t\t\t\t\tPRIMARY KEY (account_id, chat_id)\n\t\t\t\t\t\t) STRICT",d7,57,b5,98),HX_("CREATE TABLE keyvaluepairs (\n\t\t\t\t\t\t\tk TEXT NOT NULL PRIMARY KEY,\n\t\t\t\t\t\t\tv TEXT NOT NULL\n\t\t\t\t\t\t) STRICT",7d,57,c4,25),HX_("CREATE TABLE caps (\n\t\t\t\t\t\t\tsha1 BLOB NOT NULL PRIMARY KEY,\n\t\t\t\t\t\t\tcaps BLOB NOT NULL\n\t\t\t\t\t\t) STRICT",82,72,8b,39),HX_("CREATE TABLE services (\n\t\t\t\t\t\t\taccount_id TEXT NOT NULL,\n\t\t\t\t\t\t\tservice_id TEXT NOT NULL,\n\t\t\t\t\t\t\tname TEXT,\n\t\t\t\t\t\t\tnode TEXT,\n\t\t\t\t\t\t\tcaps BLOB NOT NULL,\n\t\t\t\t\t\t\tPRIMARY KEY (account_id, service_id)\n\t\t\t\t\t\t) STRICT",e9,e5,5a,93),HX_("CREATE TABLE accounts (\n\t\t\t\t\t\t\taccount_id TEXT NOT NULL,\n\t\t\t\t\t\t\tclient_id TEXT NOT NULL,\n\t\t\t\t\t\t\tdisplay_name TEXT,\n\t\t\t\t\t\t\ttoken TEXT,\n\t\t\t\t\t\t\tfast_count INTEGER NOT NULL DEFAULT 0,\n\t\t\t\t\t\t\tsm_state BLOB,\n\t\t\t\t\t\t\tPRIMARY KEY (account_id)\n\t\t\t\t\t\t) STRICT",e5,e4,e8,18),HX_("CREATE TABLE reactions (\n\t\t\t\t\t\t\taccount_id TEXT NOT NULL,\n\t\t\t\t\t\t\tupdate_id TEXT NOT NULL,\n\t\t\t\t\t\t\tmam_id TEXT,\n\t\t\t\t\t\t\tmam_by TEXT,\n\t\t\t\t\t\t\tstanza_id TEXT,\n\t\t\t\t\t\t\tchat_id TEXT NOT NULL,\n\t\t\t\t\t\t\tsender_id TEXT NOT NULL,\n\t\t\t\t\t\t\tcreated_at INTEGER NOT NULL,\n\t\t\t\t\t\t\treactions BLOB NOT NULL,\n\t\t\t\t\t\t\tkind INTEGER NOT NULL,\n\t\t\t\t\t\t\tPRIMARY KEY (account_id, chat_id, sender_id, update_id)\n\t\t\t\t\t\t) STRICT",f2,b7,82,71),HX_("PRAGMA user_version = 1",36,cd,bd,7c),
 };
-HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_125_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",125,0x605e3eb4)
+HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_161_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",161,0x605e3eb4)
 static const ::String _hx_array_data_99390348_3[] = {
-	HX_("ALTER TABLE chats ADD COLUMN notifications_filtered INTEGER;",e5,d7,a4,6f),HX_("ALTER TABLE chats ADD COLUMN notify_mention INTEGER NOT NULL DEFAULT 0;",52,d4,13,7f),HX_("ALTER TABLE chats ADD COLUMN notify_reply INTEGER NOT NULL DEFAULT 0;",92,b1,9f,14),HX_("PRAGMA user_version = 2;",24,c3,55,a9),
+	HX_("ALTER TABLE chats ADD COLUMN notifications_filtered INTEGER",96,4b,fd,cd),HX_("ALTER TABLE chats ADD COLUMN notify_mention INTEGER NOT NULL DEFAULT 0",c9,7b,58,0e),HX_("ALTER TABLE chats ADD COLUMN notify_reply INTEGER NOT NULL DEFAULT 0",89,06,a6,fc),HX_("PRAGMA user_version = 2",37,cd,bd,7c),
 };
-HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_133_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",133,0x605e3eb4)
+HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_169_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",169,0x605e3eb4)
 static const ::String _hx_array_data_99390348_5[] = {
-	HX_("ALTER TABLE messages ADD COLUMN status_text TEXT;",55,3b,92,cb),HX_("PRAGMA user_version = 3;",03,c4,55,a9),
+	HX_("ALTER TABLE messages ADD COLUMN status_text TEXT",26,26,af,2d),HX_("PRAGMA user_version = 3",38,cd,bd,7c),
 };
-HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_46_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",46,0x605e3eb4)
-HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_45_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",45,0x605e3eb4)
-static const ::String _hx_array_data_99390348_8[] = {
-	HX_("PRAGMA user_version;",73,bf,dc,ae),
+HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_175_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",175,0x605e3eb4)
+static const ::String _hx_array_data_99390348_7[] = {
+	HX_("CREATE INDEX messages_stanza_id on messages (account_id, stanza_id)",5e,17,3a,20),HX_("PRAGMA user_version = 4",39,cd,bd,7c),
+};
+HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_181_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",181,0x605e3eb4)
+static const ::String _hx_array_data_99390348_9[] = {
+	HX_("CREATE INDEX messages_mam_id on messages (account_id, chat_id, mam_id)",ea,dd,5f,aa),HX_("PRAGMA user_version = 5",3a,cd,bd,7c),
+};
+HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_82_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",82,0x605e3eb4)
+HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_81_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",81,0x605e3eb4)
+static const ::String _hx_array_data_99390348_12[] = {
+	HX_("PRAGMA user_version",c8,0f,11,60),
 };
 HX_DEFINE_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_31_new,"borogove.persistence.Sqlite","new",0xf10be83a,"borogove.persistence.Sqlite.new","borogove/persistence/Sqlite.hx",31,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_146_get,"borogove.persistence.Sqlite","get",0xf1069870,"borogove.persistence.Sqlite.get","borogove/persistence/Sqlite.hx",146,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_156_set,"borogove.persistence.Sqlite","set",0xf10fb37c,"borogove.persistence.Sqlite.set","borogove/persistence/Sqlite.hx",156,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_157_set,"borogove.persistence.Sqlite","set",0xf10fb37c,"borogove.persistence.Sqlite.set","borogove/persistence/Sqlite.hx",157,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_159_set,"borogove.persistence.Sqlite","set",0xf10fb37c,"borogove.persistence.Sqlite.set","borogove/persistence/Sqlite.hx",159,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_175_lastId,"borogove.persistence.Sqlite","lastId",0x6b0dd837,"borogove.persistence.Sqlite.lastId","borogove/persistence/Sqlite.hx",175,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_164_lastId,"borogove.persistence.Sqlite","lastId",0x6b0dd837,"borogove.persistence.Sqlite.lastId","borogove/persistence/Sqlite.hx",164,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_192_storeChats,"borogove.persistence.Sqlite","storeChats",0xd6b04260,"borogove.persistence.Sqlite.storeChats","borogove/persistence/Sqlite.hx",192,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_191_storeChats,"borogove.persistence.Sqlite","storeChats",0xd6b04260,"borogove.persistence.Sqlite.storeChats","borogove/persistence/Sqlite.hx",191,0x605e3eb4)
-static const ::String _hx_array_data_99390348_26[] = {
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_194_get,"borogove.persistence.Sqlite","get",0xf1069870,"borogove.persistence.Sqlite.get","borogove/persistence/Sqlite.hx",194,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_204_set,"borogove.persistence.Sqlite","set",0xf10fb37c,"borogove.persistence.Sqlite.set","borogove/persistence/Sqlite.hx",204,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_205_set,"borogove.persistence.Sqlite","set",0xf10fb37c,"borogove.persistence.Sqlite.set","borogove/persistence/Sqlite.hx",205,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_207_set,"borogove.persistence.Sqlite","set",0xf10fb37c,"borogove.persistence.Sqlite.set","borogove/persistence/Sqlite.hx",207,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_232_lastId,"borogove.persistence.Sqlite","lastId",0x6b0dd837,"borogove.persistence.Sqlite.lastId","borogove/persistence/Sqlite.hx",232,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_212_lastId,"borogove.persistence.Sqlite","lastId",0x6b0dd837,"borogove.persistence.Sqlite.lastId","borogove/persistence/Sqlite.hx",212,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_249_storeChats,"borogove.persistence.Sqlite","storeChats",0xd6b04260,"borogove.persistence.Sqlite.storeChats","borogove/persistence/Sqlite.hx",249,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_248_storeChats,"borogove.persistence.Sqlite","storeChats",0xd6b04260,"borogove.persistence.Sqlite.storeChats","borogove/persistence/Sqlite.hx",248,0x605e3eb4)
+static const ::String _hx_array_data_99390348_30[] = {
 	HX_("INSERT OR REPLACE INTO chats VALUES ",3b,7d,10,d4),
 };
-static const ::String _hx_array_data_99390348_27[] = {
+static const ::String _hx_array_data_99390348_31[] = {
 	HX_(",",2c,00,00,00),
 };
-static const ::String _hx_array_data_99390348_28[] = {
+static const ::String _hx_array_data_99390348_32[] = {
 	HX_("(?,?,?,?,?,?,?,?,?,?,?,jsonb(?),?,?,?,?)",4e,16,2e,3d),
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_182_storeChats,"borogove.persistence.Sqlite","storeChats",0xd6b04260,"borogove.persistence.Sqlite.storeChats","borogove/persistence/Sqlite.hx",182,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_258_getChats,"borogove.persistence.Sqlite","getChats",0x78ebe00b,"borogove.persistence.Sqlite.getChats","borogove/persistence/Sqlite.hx",258,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_262_getChats,"borogove.persistence.Sqlite","getChats",0x78ebe00b,"borogove.persistence.Sqlite.getChats","borogove/persistence/Sqlite.hx",262,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_245_getChats,"borogove.persistence.Sqlite","getChats",0x78ebe00b,"borogove.persistence.Sqlite.getChats","borogove/persistence/Sqlite.hx",245,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_263_getChats,"borogove.persistence.Sqlite","getChats",0x78ebe00b,"borogove.persistence.Sqlite.getChats","borogove/persistence/Sqlite.hx",263,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_241_getChats,"borogove.persistence.Sqlite","getChats",0x78ebe00b,"borogove.persistence.Sqlite.getChats","borogove/persistence/Sqlite.hx",241,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_328_storeMessages,"borogove.persistence.Sqlite","storeMessages",0xa9801e27,"borogove.persistence.Sqlite.storeMessages","borogove/persistence/Sqlite.hx",328,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_343_storeMessages,"borogove.persistence.Sqlite","storeMessages",0xa9801e27,"borogove.persistence.Sqlite.storeMessages","borogove/persistence/Sqlite.hx",343,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_292_storeMessages,"borogove.persistence.Sqlite","storeMessages",0xa9801e27,"borogove.persistence.Sqlite.storeMessages","borogove/persistence/Sqlite.hx",292,0x605e3eb4)
-static const ::String _hx_array_data_99390348_52[] = {
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_239_storeChats,"borogove.persistence.Sqlite","storeChats",0xd6b04260,"borogove.persistence.Sqlite.storeChats","borogove/persistence/Sqlite.hx",239,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_315_getChats,"borogove.persistence.Sqlite","getChats",0x78ebe00b,"borogove.persistence.Sqlite.getChats","borogove/persistence/Sqlite.hx",315,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_319_getChats,"borogove.persistence.Sqlite","getChats",0x78ebe00b,"borogove.persistence.Sqlite.getChats","borogove/persistence/Sqlite.hx",319,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_302_getChats,"borogove.persistence.Sqlite","getChats",0x78ebe00b,"borogove.persistence.Sqlite.getChats","borogove/persistence/Sqlite.hx",302,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_320_getChats,"borogove.persistence.Sqlite","getChats",0x78ebe00b,"borogove.persistence.Sqlite.getChats","borogove/persistence/Sqlite.hx",320,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_298_getChats,"borogove.persistence.Sqlite","getChats",0x78ebe00b,"borogove.persistence.Sqlite.getChats","borogove/persistence/Sqlite.hx",298,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_385_storeMessages,"borogove.persistence.Sqlite","storeMessages",0xa9801e27,"borogove.persistence.Sqlite.storeMessages","borogove/persistence/Sqlite.hx",385,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_400_storeMessages,"borogove.persistence.Sqlite","storeMessages",0xa9801e27,"borogove.persistence.Sqlite.storeMessages","borogove/persistence/Sqlite.hx",400,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_349_storeMessages,"borogove.persistence.Sqlite","storeMessages",0xa9801e27,"borogove.persistence.Sqlite.storeMessages","borogove/persistence/Sqlite.hx",349,0x605e3eb4)
+static const ::String _hx_array_data_99390348_56[] = {
 	HX_("DELETE FROM messages WHERE account_id=? AND direction=? AND chat_id IN (",a1,9c,a2,06),
 };
-static const ::String _hx_array_data_99390348_53[] = {
+static const ::String _hx_array_data_99390348_57[] = {
 	HX_(") AND stanza_id IN (",e8,da,d3,eb),
 };
-static const ::String _hx_array_data_99390348_54[] = {
+static const ::String _hx_array_data_99390348_58[] = {
 	HX_(")",29,00,00,00),
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_351_updateMessage,"borogove.persistence.Sqlite","updateMessage",0x2541c718,"borogove.persistence.Sqlite.updateMessage","borogove/persistence/Sqlite.hx",351,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_374_getMessage,"borogove.persistence.Sqlite","getMessage",0x3cf0b337,"borogove.persistence.Sqlite.getMessage","borogove/persistence/Sqlite.hx",374,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_381_getMessage,"borogove.persistence.Sqlite","getMessage",0x3cf0b337,"borogove.persistence.Sqlite.getMessage","borogove/persistence/Sqlite.hx",381,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_375_getMessage,"borogove.persistence.Sqlite","getMessage",0x3cf0b337,"borogove.persistence.Sqlite.getMessage","borogove/persistence/Sqlite.hx",375,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_380_getMessage,"borogove.persistence.Sqlite","getMessage",0x3cf0b337,"borogove.persistence.Sqlite.getMessage","borogove/persistence/Sqlite.hx",380,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_363_getMessage,"borogove.persistence.Sqlite","getMessage",0x3cf0b337,"borogove.persistence.Sqlite.getMessage","borogove/persistence/Sqlite.hx",363,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_e0e41eef74e41160_313_getMessage__fromC,"borogove.persistence.Sqlite","getMessage__fromC",0x419ea222,"borogove.persistence.Sqlite.getMessage__fromC","HaxeCBridge.hx",313,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_412_getMessages,"borogove.persistence.Sqlite","getMessages",0x15ac1d5c,"borogove.persistence.Sqlite.getMessages","borogove/persistence/Sqlite.hx",412,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_427_getMessages,"borogove.persistence.Sqlite","getMessages",0x15ac1d5c,"borogove.persistence.Sqlite.getMessages","borogove/persistence/Sqlite.hx",427,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_385_getMessages,"borogove.persistence.Sqlite","getMessages",0x15ac1d5c,"borogove.persistence.Sqlite.getMessages","borogove/persistence/Sqlite.hx",385,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_432_getMessagesBefore,"borogove.persistence.Sqlite","getMessagesBefore",0x4d9d52fb,"borogove.persistence.Sqlite.getMessagesBefore","borogove/persistence/Sqlite.hx",432,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_437_getMessagesAfter,"borogove.persistence.Sqlite","getMessagesAfter",0xadefcb20,"borogove.persistence.Sqlite.getMessagesAfter","borogove/persistence/Sqlite.hx",437,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_453_getMessagesAround,"borogove.persistence.Sqlite","getMessagesAround",0x696ef6c9,"borogove.persistence.Sqlite.getMessagesAround","borogove/persistence/Sqlite.hx",453,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_457_getMessagesAround,"borogove.persistence.Sqlite","getMessagesAround",0x696ef6c9,"borogove.persistence.Sqlite.getMessagesAround","borogove/persistence/Sqlite.hx",457,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_441_getMessagesAround,"borogove.persistence.Sqlite","getMessagesAround",0x696ef6c9,"borogove.persistence.Sqlite.getMessagesAround","borogove/persistence/Sqlite.hx",441,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_444_getMessagesAround,"borogove.persistence.Sqlite","getMessagesAround",0x696ef6c9,"borogove.persistence.Sqlite.getMessagesAround","borogove/persistence/Sqlite.hx",444,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_447_getMessagesAround,"borogove.persistence.Sqlite","getMessagesAround",0x696ef6c9,"borogove.persistence.Sqlite.getMessagesAround","borogove/persistence/Sqlite.hx",447,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_466_getChatsUnreadDetails,"borogove.persistence.Sqlite","getChatsUnreadDetails",0x7e07eb48,"borogove.persistence.Sqlite.getChatsUnreadDetails","borogove/persistence/Sqlite.hx",466,0x605e3eb4)
-static const ::String _hx_array_data_99390348_87[] = {
-	HX_("SELECT chat_id, ROWID as row, MAX(created_at) AS created_at FROM messages WHERE account_id=?",d0,69,08,92),
-};
-static const ::String _hx_array_data_99390348_88[] = {
-	HX_(" AND chat_id IN (",14,bd,7b,de),
-};
-static const ::String _hx_array_data_99390348_89[] = {
-	HX_(",",2c,00,00,00),
-};
-static const ::String _hx_array_data_99390348_90[] = {
-	HX_("?",3f,00,00,00),
-};
-static const ::String _hx_array_data_99390348_91[] = {
-	HX_(") AND (mam_id IN (",64,f4,1c,69),
-};
-static const ::String _hx_array_data_99390348_92[] = {
-	HX_(",",2c,00,00,00),
-};
-static const ::String _hx_array_data_99390348_93[] = {
-	HX_("?",3f,00,00,00),
-};
-static const ::String _hx_array_data_99390348_94[] = {
-	HX_(") OR direction=?) GROUP BY chat_id",cc,ab,94,e3),
-};
-static const ::String _hx_array_data_99390348_95[] = {
-	HX_("SELECT chat_id AS chatId, stanza, direction, type, status, status_text, sender_id, mam_id, mam_by, sync_point, CASE WHEN subq.created_at IS NULL THEN COUNT(*) ELSE COUNT(*) - 1 END AS unreadCount, strftime('%FT%H:%M:%fZ', MAX(messages.created_at) / 1000.0, 'unixepoch') AS timestamp FROM messages LEFT JOIN (",42,d1,dc,39),
-};
-static const ::String _hx_array_data_99390348_96[] = {
-	HX_(") subq USING (chat_id) WHERE account_id=? AND (stanza_id IS NULL OR stanza_id='' OR stanza_id=correction_id) AND chat_id IN (",e7,a1,32,e5),
-};
-static const ::String _hx_array_data_99390348_97[] = {
-	HX_(",",2c,00,00,00),
-};
-static const ::String _hx_array_data_99390348_98[] = {
-	HX_("?",3f,00,00,00),
-};
-static const ::String _hx_array_data_99390348_99[] = {
-	HX_(") AND (subq.created_at IS NULL OR messages.created_at > subq.created_at OR (messages.created_at=subq.created_at AND messages.ROWID >= subq.row)) GROUP BY chat_id;",58,6f,52,ea),
-};
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_503_getChatsUnreadDetails,"borogove.persistence.Sqlite","getChatsUnreadDetails",0x7e07eb48,"borogove.persistence.Sqlite.getChatsUnreadDetails","borogove/persistence/Sqlite.hx",503,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_505_getChatsUnreadDetails,"borogove.persistence.Sqlite","getChatsUnreadDetails",0x7e07eb48,"borogove.persistence.Sqlite.getChatsUnreadDetails","borogove/persistence/Sqlite.hx",505,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_461_getChatsUnreadDetails,"borogove.persistence.Sqlite","getChatsUnreadDetails",0x7e07eb48,"borogove.persistence.Sqlite.getChatsUnreadDetails","borogove/persistence/Sqlite.hx",461,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_529_storeReaction,"borogove.persistence.Sqlite","storeReaction",0x6b372d04,"borogove.persistence.Sqlite.storeReaction","borogove/persistence/Sqlite.hx",529,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_520_storeReaction,"borogove.persistence.Sqlite","storeReaction",0x6b372d04,"borogove.persistence.Sqlite.storeReaction","borogove/persistence/Sqlite.hx",520,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_539_updateMessageStatus,"borogove.persistence.Sqlite","updateMessageStatus",0x5be4846a,"borogove.persistence.Sqlite.updateMessageStatus","borogove/persistence/Sqlite.hx",539,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_544_updateMessageStatus,"borogove.persistence.Sqlite","updateMessageStatus",0x5be4846a,"borogove.persistence.Sqlite.updateMessageStatus","borogove/persistence/Sqlite.hx",544,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_549_updateMessageStatus,"borogove.persistence.Sqlite","updateMessageStatus",0x5be4846a,"borogove.persistence.Sqlite.updateMessageStatus","borogove/persistence/Sqlite.hx",549,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_551_updateMessageStatus,"borogove.persistence.Sqlite","updateMessageStatus",0x5be4846a,"borogove.persistence.Sqlite.updateMessageStatus","borogove/persistence/Sqlite.hx",551,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_534_updateMessageStatus,"borogove.persistence.Sqlite","updateMessageStatus",0x5be4846a,"borogove.persistence.Sqlite.updateMessageStatus","borogove/persistence/Sqlite.hx",534,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_556_hasMedia,"borogove.persistence.Sqlite","hasMedia",0x65758110,"borogove.persistence.Sqlite.hasMedia","borogove/persistence/Sqlite.hx",556,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_561_removeMedia,"borogove.persistence.Sqlite","removeMedia",0xbeaa63da,"borogove.persistence.Sqlite.removeMedia","borogove/persistence/Sqlite.hx",561,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_566_storeMedia,"borogove.persistence.Sqlite","storeMedia",0x96b8a8a9,"borogove.persistence.Sqlite.storeMedia","borogove/persistence/Sqlite.hx",566,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_571_storeCaps,"borogove.persistence.Sqlite","storeCaps",0xbf81d7fc,"borogove.persistence.Sqlite.storeCaps","borogove/persistence/Sqlite.hx",571,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_574_storeCapsSet,"borogove.persistence.Sqlite","storeCapsSet",0xeacfa106,"borogove.persistence.Sqlite.storeCapsSet","borogove/persistence/Sqlite.hx",574,0x605e3eb4)
-static const ::String _hx_array_data_99390348_123[] = {
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_408_updateMessage,"borogove.persistence.Sqlite","updateMessage",0x2541c718,"borogove.persistence.Sqlite.updateMessage","borogove/persistence/Sqlite.hx",408,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_431_getMessage,"borogove.persistence.Sqlite","getMessage",0x3cf0b337,"borogove.persistence.Sqlite.getMessage","borogove/persistence/Sqlite.hx",431,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_438_getMessage,"borogove.persistence.Sqlite","getMessage",0x3cf0b337,"borogove.persistence.Sqlite.getMessage","borogove/persistence/Sqlite.hx",438,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_432_getMessage,"borogove.persistence.Sqlite","getMessage",0x3cf0b337,"borogove.persistence.Sqlite.getMessage","borogove/persistence/Sqlite.hx",432,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_437_getMessage,"borogove.persistence.Sqlite","getMessage",0x3cf0b337,"borogove.persistence.Sqlite.getMessage","borogove/persistence/Sqlite.hx",437,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_420_getMessage,"borogove.persistence.Sqlite","getMessage",0x3cf0b337,"borogove.persistence.Sqlite.getMessage","borogove/persistence/Sqlite.hx",420,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_e0e41eef74e41160_337_getMessage__fromC,"borogove.persistence.Sqlite","getMessage__fromC",0x419ea222,"borogove.persistence.Sqlite.getMessage__fromC","HaxeCBridge.hx",337,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_478_getMessages,"borogove.persistence.Sqlite","getMessages",0x15ac1d5c,"borogove.persistence.Sqlite.getMessages","borogove/persistence/Sqlite.hx",478,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_491_getMessages,"borogove.persistence.Sqlite","getMessages",0x15ac1d5c,"borogove.persistence.Sqlite.getMessages","borogove/persistence/Sqlite.hx",491,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_442_getMessages,"borogove.persistence.Sqlite","getMessages",0x15ac1d5c,"borogove.persistence.Sqlite.getMessages","borogove/persistence/Sqlite.hx",442,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_496_getMessagesBefore,"borogove.persistence.Sqlite","getMessagesBefore",0x4d9d52fb,"borogove.persistence.Sqlite.getMessagesBefore","borogove/persistence/Sqlite.hx",496,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_501_getMessagesAfter,"borogove.persistence.Sqlite","getMessagesAfter",0xadefcb20,"borogove.persistence.Sqlite.getMessagesAfter","borogove/persistence/Sqlite.hx",501,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_517_getMessagesAround,"borogove.persistence.Sqlite","getMessagesAround",0x696ef6c9,"borogove.persistence.Sqlite.getMessagesAround","borogove/persistence/Sqlite.hx",517,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_521_getMessagesAround,"borogove.persistence.Sqlite","getMessagesAround",0x696ef6c9,"borogove.persistence.Sqlite.getMessagesAround","borogove/persistence/Sqlite.hx",521,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_505_getMessagesAround,"borogove.persistence.Sqlite","getMessagesAround",0x696ef6c9,"borogove.persistence.Sqlite.getMessagesAround","borogove/persistence/Sqlite.hx",505,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_508_getMessagesAround,"borogove.persistence.Sqlite","getMessagesAround",0x696ef6c9,"borogove.persistence.Sqlite.getMessagesAround","borogove/persistence/Sqlite.hx",508,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_511_getMessagesAround,"borogove.persistence.Sqlite","getMessagesAround",0x696ef6c9,"borogove.persistence.Sqlite.getMessagesAround","borogove/persistence/Sqlite.hx",511,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_529_getChatUnreadDetails,"borogove.persistence.Sqlite","getChatUnreadDetails",0x2c7619cb,"borogove.persistence.Sqlite.getChatUnreadDetails","borogove/persistence/Sqlite.hx",529,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_525_getChatUnreadDetails,"borogove.persistence.Sqlite","getChatUnreadDetails",0x2c7619cb,"borogove.persistence.Sqlite.getChatUnreadDetails","borogove/persistence/Sqlite.hx",525,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_537_getChatsUnreadDetails,"borogove.persistence.Sqlite","getChatsUnreadDetails",0x7e07eb48,"borogove.persistence.Sqlite.getChatsUnreadDetails","borogove/persistence/Sqlite.hx",537,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_555_storeReaction,"borogove.persistence.Sqlite","storeReaction",0x6b372d04,"borogove.persistence.Sqlite.storeReaction","borogove/persistence/Sqlite.hx",555,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_546_storeReaction,"borogove.persistence.Sqlite","storeReaction",0x6b372d04,"borogove.persistence.Sqlite.storeReaction","borogove/persistence/Sqlite.hx",546,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_565_updateMessageStatus,"borogove.persistence.Sqlite","updateMessageStatus",0x5be4846a,"borogove.persistence.Sqlite.updateMessageStatus","borogove/persistence/Sqlite.hx",565,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_570_updateMessageStatus,"borogove.persistence.Sqlite","updateMessageStatus",0x5be4846a,"borogove.persistence.Sqlite.updateMessageStatus","borogove/persistence/Sqlite.hx",570,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_575_updateMessageStatus,"borogove.persistence.Sqlite","updateMessageStatus",0x5be4846a,"borogove.persistence.Sqlite.updateMessageStatus","borogove/persistence/Sqlite.hx",575,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_577_updateMessageStatus,"borogove.persistence.Sqlite","updateMessageStatus",0x5be4846a,"borogove.persistence.Sqlite.updateMessageStatus","borogove/persistence/Sqlite.hx",577,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_560_updateMessageStatus,"borogove.persistence.Sqlite","updateMessageStatus",0x5be4846a,"borogove.persistence.Sqlite.updateMessageStatus","borogove/persistence/Sqlite.hx",560,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_582_hasMedia,"borogove.persistence.Sqlite","hasMedia",0x65758110,"borogove.persistence.Sqlite.hasMedia","borogove/persistence/Sqlite.hx",582,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_587_removeMedia,"borogove.persistence.Sqlite","removeMedia",0xbeaa63da,"borogove.persistence.Sqlite.removeMedia","borogove/persistence/Sqlite.hx",587,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_592_storeMedia,"borogove.persistence.Sqlite","storeMedia",0x96b8a8a9,"borogove.persistence.Sqlite.storeMedia","borogove/persistence/Sqlite.hx",592,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_597_storeCaps,"borogove.persistence.Sqlite","storeCaps",0xbf81d7fc,"borogove.persistence.Sqlite.storeCaps","borogove/persistence/Sqlite.hx",597,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_600_storeCapsSet,"borogove.persistence.Sqlite","storeCapsSet",0xeacfa106,"borogove.persistence.Sqlite.storeCapsSet","borogove/persistence/Sqlite.hx",600,0x605e3eb4)
+static const ::String _hx_array_data_99390348_108[] = {
 	HX_("INSERT OR IGNORE INTO caps VALUES ",27,4b,68,bf),
 };
-static const ::String _hx_array_data_99390348_124[] = {
+static const ::String _hx_array_data_99390348_109[] = {
 	HX_(",",2c,00,00,00),
 };
-static const ::String _hx_array_data_99390348_125[] = {
+static const ::String _hx_array_data_99390348_110[] = {
 	HX_("(?,jsonb(?))",1c,61,06,9e),
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_600_getCaps,"borogove.persistence.Sqlite","getCaps",0x7da6d8b1,"borogove.persistence.Sqlite.getCaps","borogove/persistence/Sqlite.hx",600,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_591_getCaps,"borogove.persistence.Sqlite","getCaps",0x7da6d8b1,"borogove.persistence.Sqlite.getCaps","borogove/persistence/Sqlite.hx",591,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_610_storeLogin,"borogove.persistence.Sqlite","storeLogin",0x09f07d2e,"borogove.persistence.Sqlite.storeLogin","borogove/persistence/Sqlite.hx",610,0x605e3eb4)
-static const ::String _hx_array_data_99390348_130[] = {
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_626_getCaps,"borogove.persistence.Sqlite","getCaps",0x7da6d8b1,"borogove.persistence.Sqlite.getCaps","borogove/persistence/Sqlite.hx",626,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_617_getCaps,"borogove.persistence.Sqlite","getCaps",0x7da6d8b1,"borogove.persistence.Sqlite.getCaps","borogove/persistence/Sqlite.hx",617,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_636_storeLogin,"borogove.persistence.Sqlite","storeLogin",0x09f07d2e,"borogove.persistence.Sqlite.storeLogin","borogove/persistence/Sqlite.hx",636,0x605e3eb4)
+static const ::String _hx_array_data_99390348_115[] = {
 	HX_("INSERT INTO accounts (account_id, client_id, display_name",03,b0,6a,0b),
 };
-static const ::String _hx_array_data_99390348_131[] = {
+static const ::String _hx_array_data_99390348_116[] = {
 	HX_(", token, fast_count",a5,56,e4,ae),
 };
-static const ::String _hx_array_data_99390348_132[] = {
+static const ::String _hx_array_data_99390348_117[] = {
 	HX_(") VALUES (?,?,?",c4,1c,e3,67),
 };
-static const ::String _hx_array_data_99390348_133[] = {
+static const ::String _hx_array_data_99390348_118[] = {
 	HX_(",?",93,26,00,00),
 };
-static const ::String _hx_array_data_99390348_134[] = {
+static const ::String _hx_array_data_99390348_119[] = {
 	HX_(",0",84,26,00,00),
 };
-static const ::String _hx_array_data_99390348_135[] = {
+static const ::String _hx_array_data_99390348_120[] = {
 	HX_(") ON CONFLICT DO UPDATE SET client_id=?",cd,99,0c,96),
 };
-static const ::String _hx_array_data_99390348_136[] = {
+static const ::String _hx_array_data_99390348_121[] = {
 	HX_(", display_name=?",7e,ad,5b,0f),
 };
-static const ::String _hx_array_data_99390348_137[] = {
+static const ::String _hx_array_data_99390348_122[] = {
 	HX_(", token=?",a7,78,19,80),
 };
-static const ::String _hx_array_data_99390348_138[] = {
+static const ::String _hx_array_data_99390348_123[] = {
 	HX_(", fast_count=0",73,a8,4f,82),
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_640_getLogin,"borogove.persistence.Sqlite","getLogin",0xac2c1ad9,"borogove.persistence.Sqlite.getLogin","borogove/persistence/Sqlite.hx",640,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_636_getLogin,"borogove.persistence.Sqlite","getLogin",0xac2c1ad9,"borogove.persistence.Sqlite.getLogin","borogove/persistence/Sqlite.hx",636,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_659_removeAccount,"borogove.persistence.Sqlite","removeAccount",0x39d68523,"borogove.persistence.Sqlite.removeAccount","borogove/persistence/Sqlite.hx",659,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_677_listAccounts,"borogove.persistence.Sqlite","listAccounts",0x9e5f9e8a,"borogove.persistence.Sqlite.listAccounts","borogove/persistence/Sqlite.hx",677,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_676_listAccounts,"borogove.persistence.Sqlite","listAccounts",0x9e5f9e8a,"borogove.persistence.Sqlite.listAccounts","borogove/persistence/Sqlite.hx",676,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_e0e41eef74e41160_313_listAccounts__fromC,"borogove.persistence.Sqlite","listAccounts__fromC",0xe40e172f,"borogove.persistence.Sqlite.listAccounts__fromC","HaxeCBridge.hx",313,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_684_storeStreamManagement,"borogove.persistence.Sqlite","storeStreamManagement",0x8665337e,"borogove.persistence.Sqlite.storeStreamManagement","borogove/persistence/Sqlite.hx",684,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_691_storeStreamManagement,"borogove.persistence.Sqlite","storeStreamManagement",0x8665337e,"borogove.persistence.Sqlite.storeStreamManagement","borogove/persistence/Sqlite.hx",691,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_700_getStreamManagement,"borogove.persistence.Sqlite","getStreamManagement",0xb922efb3,"borogove.persistence.Sqlite.getStreamManagement","borogove/persistence/Sqlite.hx",700,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_710_storeService,"borogove.persistence.Sqlite","storeService",0x466dfb3a,"borogove.persistence.Sqlite.storeService","borogove/persistence/Sqlite.hx",710,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_725_findServicesWithFeature,"borogove.persistence.Sqlite","findServicesWithFeature",0x99a02f73,"borogove.persistence.Sqlite.findServicesWithFeature","borogove/persistence/Sqlite.hx",725,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_720_findServicesWithFeature,"borogove.persistence.Sqlite","findServicesWithFeature",0x99a02f73,"borogove.persistence.Sqlite.findServicesWithFeature","borogove/persistence/Sqlite.hx",720,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_744_hydrateReactions,"borogove.persistence.Sqlite","hydrateReactions",0x7d654d7d,"borogove.persistence.Sqlite.hydrateReactions","borogove/persistence/Sqlite.hx",744,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_772_fetchReactions,"borogove.persistence.Sqlite","fetchReactions",0x688fe376,"borogove.persistence.Sqlite.fetchReactions","borogove/persistence/Sqlite.hx",772,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_756_fetchReactions,"borogove.persistence.Sqlite","fetchReactions",0x688fe376,"borogove.persistence.Sqlite.fetchReactions","borogove/persistence/Sqlite.hx",756,0x605e3eb4)
-static const ::String _hx_array_data_99390348_174[] = {
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_666_getLogin,"borogove.persistence.Sqlite","getLogin",0xac2c1ad9,"borogove.persistence.Sqlite.getLogin","borogove/persistence/Sqlite.hx",666,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_662_getLogin,"borogove.persistence.Sqlite","getLogin",0xac2c1ad9,"borogove.persistence.Sqlite.getLogin","borogove/persistence/Sqlite.hx",662,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_685_removeAccount,"borogove.persistence.Sqlite","removeAccount",0x39d68523,"borogove.persistence.Sqlite.removeAccount","borogove/persistence/Sqlite.hx",685,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_703_listAccounts,"borogove.persistence.Sqlite","listAccounts",0x9e5f9e8a,"borogove.persistence.Sqlite.listAccounts","borogove/persistence/Sqlite.hx",703,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_702_listAccounts,"borogove.persistence.Sqlite","listAccounts",0x9e5f9e8a,"borogove.persistence.Sqlite.listAccounts","borogove/persistence/Sqlite.hx",702,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_e0e41eef74e41160_337_listAccounts__fromC,"borogove.persistence.Sqlite","listAccounts__fromC",0xe40e172f,"borogove.persistence.Sqlite.listAccounts__fromC","HaxeCBridge.hx",337,0xa18550d8)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_710_storeStreamManagement,"borogove.persistence.Sqlite","storeStreamManagement",0x8665337e,"borogove.persistence.Sqlite.storeStreamManagement","borogove/persistence/Sqlite.hx",710,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_717_storeStreamManagement,"borogove.persistence.Sqlite","storeStreamManagement",0x8665337e,"borogove.persistence.Sqlite.storeStreamManagement","borogove/persistence/Sqlite.hx",717,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_726_getStreamManagement,"borogove.persistence.Sqlite","getStreamManagement",0xb922efb3,"borogove.persistence.Sqlite.getStreamManagement","borogove/persistence/Sqlite.hx",726,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_736_storeService,"borogove.persistence.Sqlite","storeService",0x466dfb3a,"borogove.persistence.Sqlite.storeService","borogove/persistence/Sqlite.hx",736,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_751_findServicesWithFeature,"borogove.persistence.Sqlite","findServicesWithFeature",0x99a02f73,"borogove.persistence.Sqlite.findServicesWithFeature","borogove/persistence/Sqlite.hx",751,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_746_findServicesWithFeature,"borogove.persistence.Sqlite","findServicesWithFeature",0x99a02f73,"borogove.persistence.Sqlite.findServicesWithFeature","borogove/persistence/Sqlite.hx",746,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_770_hydrateReactions,"borogove.persistence.Sqlite","hydrateReactions",0x7d654d7d,"borogove.persistence.Sqlite.hydrateReactions","borogove/persistence/Sqlite.hx",770,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_798_fetchReactions,"borogove.persistence.Sqlite","fetchReactions",0x688fe376,"borogove.persistence.Sqlite.fetchReactions","borogove/persistence/Sqlite.hx",798,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_782_fetchReactions,"borogove.persistence.Sqlite","fetchReactions",0x688fe376,"borogove.persistence.Sqlite.fetchReactions","borogove/persistence/Sqlite.hx",782,0x605e3eb4)
+static const ::String _hx_array_data_99390348_159[] = {
 	HX_("SELECT kind, chat_id, mam_id, mam_by, stanza_id, sender_id, json(reactions) AS reactions FROM reactions WHERE 1=0",d2,04,de,a3),
 };
-static const ::String _hx_array_data_99390348_175[] = {
+static const ::String _hx_array_data_99390348_160[] = {
 	HX_(" OR (mam_id=? AND mam_by=?)",0f,bb,c5,e5),
 };
-static const ::String _hx_array_data_99390348_176[] = {
+static const ::String _hx_array_data_99390348_161[] = {
 	HX_(" OR stanza_id=?",6a,1d,f2,5b),
 };
-static const ::String _hx_array_data_99390348_177[] = {
+static const ::String _hx_array_data_99390348_162[] = {
 	HX_(" ORDER BY created_at, ROWID",00,65,8d,0e),
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_829_hydrateReplyTo,"borogove.persistence.Sqlite","hydrateReplyTo",0xa56a0758,"borogove.persistence.Sqlite.hydrateReplyTo","borogove/persistence/Sqlite.hx",829,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_831_hydrateReplyTo,"borogove.persistence.Sqlite","hydrateReplyTo",0xa56a0758,"borogove.persistence.Sqlite.hydrateReplyTo","borogove/persistence/Sqlite.hx",831,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_809_hydrateReplyTo,"borogove.persistence.Sqlite","hydrateReplyTo",0xa56a0758,"borogove.persistence.Sqlite.hydrateReplyTo","borogove/persistence/Sqlite.hx",809,0x605e3eb4)
-static const ::String _hx_array_data_99390348_184[] = {
-	HX_("SELECT chat_id, stanza_id, stanza, direction, type, status, status_text, strftime('%FT%H:%M:%fZ', created_at / 1000.0, 'unixepoch') AS timestamp, sender_id, mam_id, mam_by, sync_point FROM messages WHERE account_id=? AND (",16,b7,14,0d),
-};
-static const ::String _hx_array_data_99390348_185[] = {
-	HX_(")",29,00,00,00),
-};
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_843_hydrateMessages,"borogove.persistence.Sqlite","hydrateMessages",0x24719359,"borogove.persistence.Sqlite.hydrateMessages","borogove/persistence/Sqlite.hx",843,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_846_hydrateMessages,"borogove.persistence.Sqlite","hydrateMessages",0x24719359,"borogove.persistence.Sqlite.hydrateMessages","borogove/persistence/Sqlite.hx",846,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_877_hydrateMessages,"borogove.persistence.Sqlite","hydrateMessages",0x24719359,"borogove.persistence.Sqlite.hydrateMessages","borogove/persistence/Sqlite.hx",877,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_867_hydrateMessages,"borogove.persistence.Sqlite","hydrateMessages",0x24719359,"borogove.persistence.Sqlite.hydrateMessages","borogove/persistence/Sqlite.hx",867,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_885_hydrateCaps,"borogove.persistence.Sqlite","hydrateCaps",0x4e204c2e,"borogove.persistence.Sqlite.hydrateCaps","borogove/persistence/Sqlite.hx",885,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_866_hydrateReplyTo,"borogove.persistence.Sqlite","hydrateReplyTo",0xa56a0758,"borogove.persistence.Sqlite.hydrateReplyTo","borogove/persistence/Sqlite.hx",866,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_868_hydrateReplyTo,"borogove.persistence.Sqlite","hydrateReplyTo",0xa56a0758,"borogove.persistence.Sqlite.hydrateReplyTo","borogove/persistence/Sqlite.hx",868,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_835_hydrateReplyTo,"borogove.persistence.Sqlite","hydrateReplyTo",0xa56a0758,"borogove.persistence.Sqlite.hydrateReplyTo","borogove/persistence/Sqlite.hx",835,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_880_hydrateMessages,"borogove.persistence.Sqlite","hydrateMessages",0x24719359,"borogove.persistence.Sqlite.hydrateMessages","borogove/persistence/Sqlite.hx",880,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_883_hydrateMessages,"borogove.persistence.Sqlite","hydrateMessages",0x24719359,"borogove.persistence.Sqlite.hydrateMessages","borogove/persistence/Sqlite.hx",883,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_914_hydrateMessages,"borogove.persistence.Sqlite","hydrateMessages",0x24719359,"borogove.persistence.Sqlite.hydrateMessages","borogove/persistence/Sqlite.hx",914,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_904_hydrateMessages,"borogove.persistence.Sqlite","hydrateMessages",0x24719359,"borogove.persistence.Sqlite.hydrateMessages","borogove/persistence/Sqlite.hx",904,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_922_hydrateCaps,"borogove.persistence.Sqlite","hydrateCaps",0x4e204c2e,"borogove.persistence.Sqlite.hydrateCaps","borogove/persistence/Sqlite.hx",922,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_37_prepare,"borogove.persistence.Sqlite","prepare",0xa1479e61,"borogove.persistence.Sqlite.prepare","borogove/persistence/Sqlite.hx",37,0x605e3eb4)
 HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_31_boot,"borogove.persistence.Sqlite","boot",0xf1784b18,"borogove.persistence.Sqlite.boot","borogove/persistence/Sqlite.hx",31,0x605e3eb4)
 namespace borogove{
 namespace persistence{
 
 void Sqlite_obj::__construct(::String dbfile,::Dynamic media){
-            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_4) HXARGC(1)
+            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_6) HXARGC(1)
             		::Dynamic _hx_run( ::Dynamic exec){
-            			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_3, ::Dynamic,exec) HXARGC(1)
+            			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_5, ::Dynamic,exec) HXARGC(1)
             			::Dynamic _hx_run( ::haxe::iterators::ArrayIterator iter){
             				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,exec,int,version) HXARGC(1)
             				::Dynamic _hx_run( ::Dynamic _){
-            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_48_new)
-HXLINE(  49)					if ((version < 1)) {
-HXLINE(  50)						return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_1,10));
+            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_84_new)
+HXLINE(  85)					if ((version < 1)) {
+HXLINE(  86)						return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_1,10));
             					}
-HXLINE( 124)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+HXLINE( 160)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             				}
             				HX_END_LOCAL_FUNC1(return)
 
             				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::Dynamic,exec,int,version) HXARGC(1)
             				::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
-            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_125_new)
-HXLINE( 126)					if ((version < 2)) {
-HXLINE( 127)						return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_3,4));
+            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_161_new)
+HXLINE( 162)					if ((version < 2)) {
+HXLINE( 163)						return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_3,4));
             					}
-HXLINE( 132)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+HXLINE( 168)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             				}
             				HX_END_LOCAL_FUNC1(return)
 
             				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_2, ::Dynamic,exec,int,version) HXARGC(1)
             				::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
-            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_133_new)
-HXLINE( 134)					if ((version < 3)) {
-HXLINE( 135)						return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_5,2));
+            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_169_new)
+HXLINE( 170)					if ((version < 3)) {
+HXLINE( 171)						return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_5,2));
             					}
-HXLINE( 138)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+HXLINE( 174)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             				}
             				HX_END_LOCAL_FUNC1(return)
 
-            				HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_46_new)
-HXLINE(  47)				int version;
-HXDLIN(  47)				 ::Dynamic tmp = iter->array->__get(iter->current++);
-HXDLIN(  47)				 ::Dynamic tmp1;
-HXDLIN(  47)				if (::hx::IsNotNull( tmp )) {
-HXLINE(  47)					tmp1 =  ::Dynamic(tmp->__Field(HX_("user_version",e4,95,f3,73),::hx::paccDynamic));
+            				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_3, ::Dynamic,exec,int,version) HXARGC(1)
+            				::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
+            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_175_new)
+HXLINE( 176)					if ((version < 4)) {
+HXLINE( 177)						return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_7,2));
+            					}
+HXLINE( 180)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+            				}
+            				HX_END_LOCAL_FUNC1(return)
+
+            				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_4, ::Dynamic,exec,int,version) HXARGC(1)
+            				::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
+            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_181_new)
+HXLINE( 182)					if ((version < 5)) {
+HXLINE( 183)						return exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_9,2));
+            					}
+HXLINE( 186)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+            				}
+            				HX_END_LOCAL_FUNC1(return)
+
+            				HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_82_new)
+HXLINE(  83)				int version;
+HXDLIN(  83)				 ::Dynamic tmp = iter->array->__get(iter->current++);
+HXDLIN(  83)				 ::Dynamic tmp1;
+HXDLIN(  83)				if (::hx::IsNotNull( tmp )) {
+HXLINE(  83)					tmp1 =  ::Dynamic(tmp->__Field(HX_("user_version",e4,95,f3,73),::hx::paccDynamic));
             				}
             				else {
-HXLINE(  47)					tmp1 = null();
+HXLINE(  83)					tmp1 = null();
             				}
-HXDLIN(  47)				 ::Dynamic tmp2 = ::Std_obj::parseInt(( (::String)(tmp1) ));
-HXDLIN(  47)				if (::hx::IsNotNull( tmp2 )) {
-HXLINE(  47)					version = ( (int)(tmp2) );
+HXDLIN(  83)				 ::Dynamic tmp2 = ::Std_obj::parseInt(( (::String)(tmp1) ));
+HXDLIN(  83)				if (::hx::IsNotNull( tmp2 )) {
+HXLINE(  83)					version = ( (int)(tmp2) );
             				}
             				else {
-HXLINE(  47)					version = 0;
+HXLINE(  83)					version = 0;
             				}
-HXLINE(  48)				return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::resolve(null()), ::Dynamic(new _hx_Closure_0(exec,version)),null()), ::Dynamic(new _hx_Closure_1(exec,version)),null()), ::Dynamic(new _hx_Closure_2(exec,version)),null());
+HXLINE(  84)				return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::resolve(null()), ::Dynamic(new _hx_Closure_0(exec,version)),null()), ::Dynamic(new _hx_Closure_1(exec,version)),null()), ::Dynamic(new _hx_Closure_2(exec,version)),null()), ::Dynamic(new _hx_Closure_3(exec,version)),null()), ::Dynamic(new _hx_Closure_4(exec,version)),null());
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_45_new)
-HXLINE(  45)			return ::thenshim::_Promise::Promise_Impl__obj::then(exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_8,1)), ::Dynamic(new _hx_Closure_3(exec)),null());
+            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_81_new)
+HXLINE(  81)			return ::thenshim::_Promise::Promise_Impl__obj::then(exec(::Array_obj< ::String >::fromData( _hx_array_data_99390348_12,1)), ::Dynamic(new _hx_Closure_5(exec)),null());
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_31_new)
-HXLINE( 682)		this->smStoreNext = null();
-HXLINE( 681)		this->smStoreInProgress = false;
-HXLINE( 179)		this->storeChatTimer = null();
-HXLINE( 178)		this->storeChatBuffer =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE(  43)		this->media = media;
-HXLINE(  44)		::borogove::persistence::MediaStore_obj::setKV(media,::hx::ObjectPtr<OBJ_>(this));
-HXLINE(  45)		this->db =  ::borogove::persistence::SqliteDriver_obj::__alloc( HX_CTX ,dbfile, ::Dynamic(new _hx_Closure_4()));
+HXLINE( 708)		this->smStoreNext = null();
+HXLINE( 707)		this->smStoreInProgress = false;
+HXLINE( 236)		this->storeChatTimer = null();
+HXLINE( 235)		this->storeChatBuffer =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE(  79)		this->media = media;
+HXLINE(  80)		::borogove::persistence::MediaStore_obj::setKV(media,::hx::ObjectPtr<OBJ_>(this));
+HXLINE(  81)		this->db =  ::borogove::persistence::SqliteDriver_obj::__alloc( HX_CTX ,dbfile, ::Dynamic(new _hx_Closure_6()));
             	}
 
 Dynamic Sqlite_obj::__CreateEmpty() { return new Sqlite_obj; }
@@ -462,44 +457,44 @@ void *Sqlite_obj::_hx_getInterface(int inHash) {
 ::Dynamic Sqlite_obj::get(::String k){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		::Dynamic _hx_run( ::haxe::iterators::ArrayIterator iter){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_146_get)
-HXLINE( 147)			while((iter->current < iter->array->get_length())){
-HXLINE( 148)				return  ::Dynamic(iter->array->__get(iter->current++)->__Field(HX_("v",76,00,00,00),::hx::paccDynamic));
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_194_get)
+HXLINE( 195)			while((iter->current < iter->array->get_length())){
+HXLINE( 196)				return  ::Dynamic(iter->array->__get(iter->current++)->__Field(HX_("v",76,00,00,00),::hx::paccDynamic));
             			}
-HXLINE( 150)			return null();
+HXLINE( 198)			return null();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_146_get)
-HXDLIN( 146)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT v FROM keyvaluepairs WHERE k=? LIMIT 1",5f,f1,14,07),::cpp::VirtualArray_obj::__new(1)->init(0,k)), ::Dynamic(new _hx_Closure_0()),null());
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_194_get)
+HXDLIN( 194)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT v FROM keyvaluepairs WHERE k=? LIMIT 1",5f,f1,14,07),::cpp::VirtualArray_obj::__new(1)->init(0,k)), ::Dynamic(new _hx_Closure_0()),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Sqlite_obj,get,return )
 
 ::Dynamic Sqlite_obj::set(::String k,::String v){
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_156_set)
-HXDLIN( 156)		if (::hx::IsNull( v )) {
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_204_set)
+HXDLIN( 204)		if (::hx::IsNull( v )) {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             			bool _hx_run( ::haxe::iterators::ArrayIterator _){
-            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_157_set)
-HXLINE( 157)				return true;
+            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_205_set)
+HXLINE( 205)				return true;
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 157)			return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("DELETE FROM keyvaluepairs WHERE k=?",1a,ab,19,78),::cpp::VirtualArray_obj::__new(1)->init(0,k)), ::Dynamic(new _hx_Closure_0()),null());
+HXLINE( 205)			return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("DELETE FROM keyvaluepairs WHERE k=?",1a,ab,19,78),::cpp::VirtualArray_obj::__new(1)->init(0,k)), ::Dynamic(new _hx_Closure_0()),null());
             		}
             		else {
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             			bool _hx_run( ::haxe::iterators::ArrayIterator _){
-            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_159_set)
-HXLINE( 159)				return true;
+            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_207_set)
+HXLINE( 207)				return true;
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 159)			return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("INSERT OR REPLACE INTO keyvaluepairs VALUES (?,?)",18,81,b5,d3),::cpp::VirtualArray_obj::__new(2)->init(0,k)->init(1,v)), ::Dynamic(new _hx_Closure_1()),null());
+HXLINE( 207)			return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("INSERT OR REPLACE INTO keyvaluepairs VALUES (?,?)",18,81,b5,d3),::cpp::VirtualArray_obj::__new(2)->init(0,k)->init(1,v)), ::Dynamic(new _hx_Closure_1()),null());
             		}
-HXLINE( 156)		return null();
+HXLINE( 204)		return null();
             	}
 
 
@@ -508,32 +503,39 @@ HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,set,return )
 ::Dynamic Sqlite_obj::lastId(::String accountId,::String chatId){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		::String _hx_run( ::haxe::iterators::ArrayIterator iter){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_175_lastId)
-HXLINE( 175)			 ::Dynamic tmp = iter->array->__get(iter->current++);
-HXDLIN( 175)			 ::Dynamic _hx_tmp;
-HXDLIN( 175)			if (::hx::IsNotNull( tmp )) {
-HXLINE( 175)				_hx_tmp =  ::Dynamic(tmp->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic));
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_232_lastId)
+HXLINE( 232)			 ::Dynamic tmp = iter->array->__get(iter->current++);
+HXDLIN( 232)			 ::Dynamic _hx_tmp;
+HXDLIN( 232)			if (::hx::IsNotNull( tmp )) {
+HXLINE( 232)				_hx_tmp =  ::Dynamic(tmp->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic));
             			}
             			else {
-HXLINE( 175)				_hx_tmp = null();
+HXLINE( 232)				_hx_tmp = null();
             			}
-HXDLIN( 175)			return ::hx::TCast< ::String >::cast(_hx_tmp);
+HXDLIN( 232)			return ::hx::TCast< ::String >::cast(_hx_tmp);
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_164_lastId)
-HXLINE( 165)		::Array< ::String > params = ::Array_obj< ::String >::__new(1)->init(0,accountId);
-HXLINE( 166)		::String q = HX_("SELECT mam_id FROM messages WHERE mam_id IS NOT NULL AND sync_point AND account_id=?",20,14,35,bc);
-HXLINE( 167)		if (::hx::IsNull( chatId )) {
-HXLINE( 168)			q = (HX_("SELECT mam_id FROM messages WHERE mam_id IS NOT NULL AND sync_point AND account_id=?",20,14,35,bc) + HX_(" AND mam_by=?",48,20,9b,c4));
-HXLINE( 169)			params->push(accountId);
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_212_lastId)
+HXLINE( 213)		::Array< ::String > params = ::Array_obj< ::String >::__new(1)->init(0,accountId);
+HXLINE( 214)		::String q = HX_("SELECT mam_id, MAX(row) FROM (SELECT mam_id, ROWID as row FROM messages",4c,29,a4,9b);
+HXLINE( 215)		if (::hx::IsNull( chatId )) {
+HXLINE( 217)			q = (HX_("SELECT mam_id, MAX(row) FROM (SELECT mam_id, ROWID as row FROM messages",4c,29,a4,9b) + HX_(" NOT INDEXED",84,47,c5,90));
+            		}
+HXLINE( 219)		q = (q + HX_(" WHERE mam_id IS NOT NULL AND sync_point AND account_id=?",87,3d,51,a9));
+HXLINE( 220)		if (::hx::IsNull( chatId )) {
+HXLINE( 221)			q = (q + HX_(" AND mam_by=?",48,20,9b,c4));
+HXLINE( 222)			params->push(accountId);
             		}
             		else {
-HXLINE( 171)			q = (HX_("SELECT mam_id FROM messages WHERE mam_id IS NOT NULL AND sync_point AND account_id=?",20,14,35,bc) + HX_(" AND chat_id=?",3b,95,e7,43));
-HXLINE( 172)			params->push(chatId);
+HXLINE( 224)			q = (q + HX_(" AND chat_id=?",3b,95,e7,43));
+HXLINE( 225)			params->push(chatId);
+            		}
+HXLINE( 227)		if (::hx::IsNotNull( chatId )) {
+HXLINE( 229)			q = (q + HX_(" ORDER BY created_at DESC LIMIT 1000",94,4b,2a,00));
             		}
-HXLINE( 174)		q = (q + HX_(" ORDER BY ROWID DESC LIMIT 1",1f,5d,e2,de));
-HXLINE( 175)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(q,params), ::Dynamic(new _hx_Closure_0()),null());
+HXLINE( 231)		q = (q + HX_(")",29,00,00,00));
+HXLINE( 232)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(q,params), ::Dynamic(new _hx_Closure_0()),null());
             	}
 
 
@@ -544,191 +546,193 @@ void Sqlite_obj::storeChats(::String accountId,::Array< ::Dynamic> chats){
             		void _hx_run(){
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::Sqlite,_gthis) HXARGC(1)
             			 ::Dynamic _hx_run( ::borogove::Chat chat){
-            				HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_192_storeChats)
-HXLINE( 193)				 ::Dynamic storePresence =  ::Dynamic(::hx::Anon_obj::Create(0));
-HXLINE( 194)				 ::haxe::ds::ObjectMap caps =  ::haxe::ds::ObjectMap_obj::__alloc( HX_CTX );
-HXLINE( 195)				{
-HXLINE( 195)					::Dynamic this1 = chat->presence;
-HXDLIN( 195)					 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(this1);
-HXDLIN( 195)					while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 195)						::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN( 195)						 ::borogove::Presence _g_value = ( ( ::borogove::Presence)(::haxe::IMap_obj::get(this1,key)) );
-HXDLIN( 195)						{
-HXLINE( 196)							::String mapPresence;
-HXDLIN( 196)							if (::hx::IsNotNull( key )) {
-HXLINE( 196)								mapPresence = key;
+            				HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_249_storeChats)
+HXLINE( 250)				 ::Dynamic storePresence =  ::Dynamic(::hx::Anon_obj::Create(0));
+HXLINE( 251)				 ::haxe::ds::ObjectMap caps =  ::haxe::ds::ObjectMap_obj::__alloc( HX_CTX );
+HXLINE( 252)				{
+HXLINE( 252)					::Dynamic this1 = chat->presence;
+HXDLIN( 252)					 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(this1);
+HXDLIN( 252)					while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 252)						::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN( 252)						 ::borogove::Presence _g_value = ( ( ::borogove::Presence)(::haxe::IMap_obj::get(this1,key)) );
+HXDLIN( 252)						{
+HXLINE( 253)							::String mapPresence;
+HXDLIN( 253)							if (::hx::IsNotNull( key )) {
+HXLINE( 253)								mapPresence = key;
             							}
             							else {
-HXLINE( 196)								mapPresence = HX_("",00,00,00,00);
+HXLINE( 253)								mapPresence = HX_("",00,00,00,00);
             							}
-HXDLIN( 196)							if (::hx::IsNull( ::Reflect_obj::field(storePresence,mapPresence) )) {
-HXLINE( 196)								::String mapPresence1;
-HXDLIN( 196)								if (::hx::IsNotNull( key )) {
-HXLINE( 196)									mapPresence1 = key;
+HXDLIN( 253)							if (::hx::IsNull( ::Reflect_obj::field(storePresence,mapPresence) )) {
+HXLINE( 253)								::String mapPresence1;
+HXDLIN( 253)								if (::hx::IsNotNull( key )) {
+HXLINE( 253)									mapPresence1 = key;
             								}
             								else {
-HXLINE( 196)									mapPresence1 = HX_("",00,00,00,00);
+HXLINE( 253)									mapPresence1 = HX_("",00,00,00,00);
             								}
-HXDLIN( 196)								::Reflect_obj::setField(storePresence,mapPresence1, ::Dynamic(::hx::Anon_obj::Create(0)));
+HXDLIN( 253)								::Reflect_obj::setField(storePresence,mapPresence1, ::Dynamic(::hx::Anon_obj::Create(0)));
             							}
-HXLINE( 197)							if (::hx::IsNotNull( _g_value->caps )) {
-HXLINE( 198)								{
-HXLINE( 198)									::Array< unsigned char > k = _g_value->caps->verRaw()->hash;
-HXDLIN( 198)									caps->set(k,_g_value->caps);
+HXLINE( 254)							if (::hx::IsNotNull( _g_value->caps )) {
+HXLINE( 255)								{
+HXLINE( 255)									::Array< unsigned char > k = _g_value->caps->verRaw()->hash;
+HXDLIN( 255)									caps->set(k,_g_value->caps);
             								}
-HXLINE( 199)								::String mapPresence2;
-HXDLIN( 199)								if (::hx::IsNotNull( key )) {
-HXLINE( 199)									mapPresence2 = key;
+HXLINE( 256)								::String mapPresence2;
+HXDLIN( 256)								if (::hx::IsNotNull( key )) {
+HXLINE( 256)									mapPresence2 = key;
             								}
             								else {
-HXLINE( 199)									mapPresence2 = HX_("",00,00,00,00);
+HXLINE( 256)									mapPresence2 = HX_("",00,00,00,00);
             								}
-HXDLIN( 199)								::Reflect_obj::field(storePresence,mapPresence2)->__SetField(HX_("caps",21,1c,ba,41),_g_value->caps->ver(),::hx::paccDynamic);
+HXDLIN( 256)								::Reflect_obj::field(storePresence,mapPresence2)->__SetField(HX_("caps",21,1c,ba,41),_g_value->caps->ver(),::hx::paccDynamic);
             							}
-HXLINE( 201)							if (::hx::IsNotNull( _g_value->mucUser )) {
-HXLINE( 202)								::String mapPresence3;
-HXDLIN( 202)								if (::hx::IsNotNull( key )) {
-HXLINE( 202)									mapPresence3 = key;
+HXLINE( 258)							if (::hx::IsNotNull( _g_value->mucUser )) {
+HXLINE( 259)								::String mapPresence3;
+HXDLIN( 259)								if (::hx::IsNotNull( key )) {
+HXLINE( 259)									mapPresence3 = key;
             								}
             								else {
-HXLINE( 202)									mapPresence3 = HX_("",00,00,00,00);
+HXLINE( 259)									mapPresence3 = HX_("",00,00,00,00);
             								}
-HXDLIN( 202)								::Reflect_obj::field(storePresence,mapPresence3)->__SetField(HX_("mucUser",e6,f3,96,b5),_g_value->mucUser->toString(),::hx::paccDynamic);
+HXDLIN( 259)								::Reflect_obj::field(storePresence,mapPresence3)->__SetField(HX_("mucUser",e6,f3,96,b5),_g_value->mucUser->toString(),::hx::paccDynamic);
             							}
-HXLINE( 204)							if (::hx::IsNotNull( _g_value->avatarHash )) {
-HXLINE( 205)								::String mapPresence4;
-HXDLIN( 205)								if (::hx::IsNotNull( key )) {
-HXLINE( 205)									mapPresence4 = key;
+HXLINE( 261)							if (::hx::IsNotNull( _g_value->avatarHash )) {
+HXLINE( 262)								::String mapPresence4;
+HXDLIN( 262)								if (::hx::IsNotNull( key )) {
+HXLINE( 262)									mapPresence4 = key;
             								}
             								else {
-HXLINE( 205)									mapPresence4 = HX_("",00,00,00,00);
+HXLINE( 262)									mapPresence4 = HX_("",00,00,00,00);
             								}
-HXDLIN( 205)								::Reflect_obj::field(storePresence,mapPresence4)->__SetField(HX_("avatarHash",87,5c,82,37),_g_value->avatarHash->serializeUri(),::hx::paccDynamic);
+HXDLIN( 262)								::Reflect_obj::field(storePresence,mapPresence4)->__SetField(HX_("avatarHash",87,5c,82,37),_g_value->avatarHash->serializeUri(),::hx::paccDynamic);
             							}
             						}
             					}
             				}
-HXLINE( 208)				_gthis->storeCapsSet(caps);
-HXLINE( 209)				return storePresence;
+HXLINE( 265)				_gthis->storeCapsSet(caps);
+HXLINE( 266)				return storePresence;
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_191_storeChats)
-HXLINE( 192)			 ::Dynamic mapPresence =  ::Dynamic(new _hx_Closure_0(_gthis));
-HXLINE( 211)			 ::StringBuf q =  ::StringBuf_obj::__alloc( HX_CTX );
-HXLINE( 212)			{
-HXLINE( 212)				if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 212)					q->flush();
+            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_248_storeChats)
+HXLINE( 249)			 ::Dynamic mapPresence =  ::Dynamic(new _hx_Closure_0(_gthis));
+HXLINE( 268)			 ::StringBuf q =  ::StringBuf_obj::__alloc( HX_CTX );
+HXLINE( 269)			{
+HXLINE( 269)				if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 269)					q->flush();
             				}
-HXDLIN( 212)				if (::hx::IsNull( q->b )) {
-HXLINE( 212)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_26,1);
+HXDLIN( 269)				if (::hx::IsNull( q->b )) {
+HXLINE( 269)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_30,1);
             				}
             				else {
-HXLINE( 212)					q->b->push(HX_("INSERT OR REPLACE INTO chats VALUES ",3b,7d,10,d4));
+HXLINE( 269)					q->b->push(HX_("INSERT OR REPLACE INTO chats VALUES ",3b,7d,10,d4));
             				}
             			}
-HXLINE( 213)			bool first = true;
-HXLINE( 214)			{
-HXLINE( 214)				 ::Dynamic _ = _gthis->storeChatBuffer->iterator();
-HXDLIN( 214)				while(( (bool)(_->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 214)					_->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
-HXLINE( 215)					if (!(first)) {
-HXLINE( 215)						if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 215)							q->flush();
+HXLINE( 270)			bool first = true;
+HXLINE( 271)			{
+HXLINE( 271)				 ::Dynamic _ = _gthis->storeChatBuffer->iterator();
+HXDLIN( 271)				while(( (bool)(_->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 271)					_->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
+HXLINE( 272)					if (!(first)) {
+HXLINE( 272)						if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 272)							q->flush();
             						}
-HXDLIN( 215)						if (::hx::IsNull( q->b )) {
-HXLINE( 215)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_27,1);
+HXDLIN( 272)						if (::hx::IsNull( q->b )) {
+HXLINE( 272)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_31,1);
             						}
             						else {
-HXLINE( 215)							q->b->push(HX_(",",2c,00,00,00));
+HXLINE( 272)							q->b->push(HX_(",",2c,00,00,00));
             						}
             					}
-HXLINE( 216)					first = false;
-HXLINE( 217)					{
-HXLINE( 217)						if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 217)							q->flush();
+HXLINE( 273)					first = false;
+HXLINE( 274)					{
+HXLINE( 274)						if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 274)							q->flush();
             						}
-HXDLIN( 217)						if (::hx::IsNull( q->b )) {
-HXLINE( 217)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_28,1);
+HXDLIN( 274)						if (::hx::IsNull( q->b )) {
+HXLINE( 274)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_32,1);
             						}
             						else {
-HXLINE( 217)							q->b->push(HX_("(?,?,?,?,?,?,?,?,?,?,?,jsonb(?),?,?,?,?)",4e,16,2e,3d));
+HXLINE( 274)							q->b->push(HX_("(?,?,?,?,?,?,?,?,?,?,?,jsonb(?),?,?,?,?)",4e,16,2e,3d));
             						}
             					}
             				}
             			}
-HXLINE( 219)			 ::borogove::persistence::SqliteDriver _gthis1 = _gthis->db;
-HXLINE( 220)			::String _hx_tmp = q->toString();
-HXLINE( 221)			::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 221)			{
-HXLINE( 221)				 ::Dynamic x = _gthis->storeChatBuffer->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 221)				while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 221)					 ::borogove::Chat x1 = ( ( ::borogove::Chat)(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXLINE( 222)					 ::borogove::Channel channel = ( ( ::borogove::Channel)(::Std_obj::downcast(x1,::hx::ClassOf< ::borogove::Channel >())) );
-HXLINE( 223)					if (::hx::IsNotNull( channel )) {
-HXLINE( 223)						_gthis->storeCaps(channel->disco);
-            					}
-HXLINE( 225)					::String accountId1 = accountId;
-HXDLIN( 225)					::String x2 = x1->chatId;
-HXDLIN( 225)					bool row = x1->isTrusted();
-HXDLIN( 225)					::Array< unsigned char > x3 = x1->avatarSha1;
-HXLINE( 226)					::String row1 = x1->getDisplayName();
-HXDLIN( 226)					int x4 = x1->uiState;
-HXDLIN( 226)					bool x5 = x1->isBlocked;
-HXLINE( 227)					::String row2 = x1->extensions->toString();
-HXDLIN( 227)					::String row3 = x1->readUpTo();
-HXDLIN( 227)					::String x6 = x1->readUpToBy;
-HXLINE( 228)					 ::borogove::Caps tmp;
-HXDLIN( 228)					if (::hx::IsNotNull( channel )) {
-HXLINE( 228)						tmp = channel->disco;
+HXLINE( 276)			 ::borogove::persistence::SqliteDriver _gthis1 = _gthis->db;
+HXLINE( 277)			::String _hx_tmp = q->toString();
+HXLINE( 278)			::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 278)			{
+HXLINE( 278)				 ::Dynamic x = _gthis->storeChatBuffer->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN( 278)				while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 278)					 ::borogove::Chat x1 = ( ( ::borogove::Chat)(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXLINE( 279)					 ::borogove::Channel channel = ( ( ::borogove::Channel)(::Std_obj::downcast(x1,::hx::ClassOf< ::borogove::Channel >())) );
+HXLINE( 280)					if (::hx::IsNotNull( channel )) {
+HXLINE( 280)						_gthis->storeCaps(channel->disco);
+            					}
+HXLINE( 282)					::String accountId1 = accountId;
+HXDLIN( 282)					::String x2 = x1->chatId;
+HXDLIN( 282)					bool row = x1->isTrusted();
+HXDLIN( 282)					::Array< unsigned char > x3 = x1->avatarSha1;
+HXLINE( 283)					::String row1 = x1->getDisplayName();
+HXDLIN( 283)					int x4 = x1->uiState;
+HXDLIN( 283)					bool x5 = x1->isBlocked;
+HXLINE( 284)					::String row2 = x1->extensions->toString();
+HXDLIN( 284)					::String row3 = x1->readUpTo();
+HXDLIN( 284)					::String x6 = x1->readUpToBy;
+HXLINE( 285)					 ::borogove::Caps tmp;
+HXDLIN( 285)					if (::hx::IsNotNull( channel )) {
+HXLINE( 285)						tmp = channel->disco;
             					}
             					else {
-HXLINE( 228)						tmp = null();
+HXLINE( 285)						tmp = null();
             					}
-HXDLIN( 228)					::Array< unsigned char > row4;
-HXDLIN( 228)					if (::hx::IsNotNull( tmp )) {
-HXLINE( 228)						row4 = tmp->verRaw()->hash;
+HXDLIN( 285)					::Array< unsigned char > row4;
+HXDLIN( 285)					if (::hx::IsNotNull( tmp )) {
+HXLINE( 285)						row4 = tmp->verRaw()->hash;
             					}
             					else {
-HXLINE( 228)						row4 = null();
+HXLINE( 285)						row4 = null();
             					}
-HXDLIN( 228)					::String row5 = ::borogove::JsonPrinter_obj::print(mapPresence(x1),null(),null());
-HXLINE( 229)					::String row6 = ( (::String)(::Type_obj::getClassName(::Type_obj::getClass(x1)).split(HX_(".",2e,00,00,00))->pop()) );
-HXLINE( 230)					bool row7 = x1->notificationsFiltered();
-HXDLIN( 230)					bool row8 = x1->notifyMention();
-HXLINE( 221)					_g->push(::cpp::VirtualArray_obj::__new(16)->init(0,accountId1)->init(1,x2)->init(2,row)->init(3,x3)->init(4,row1)->init(5,x4)->init(6,x5)->init(7,row2)->init(8,row3)->init(9,x6)->init(10,row4)->init(11,row5)->init(12,row6)->init(13,row7)->init(14,row8)->init(15,x1->notifyReply()));
+HXDLIN( 285)					 ::Dynamic replacer = null();
+HXDLIN( 285)					::String space = null();
+HXDLIN( 285)					::String row5 = ::haxe::format::JsonPrinter_obj::print(mapPresence(x1),replacer,space);
+HXLINE( 286)					::String row6 = ( (::String)(::Type_obj::getClassName(::Type_obj::getClass(x1)).split(HX_(".",2e,00,00,00))->pop()) );
+HXLINE( 287)					bool row7 = x1->notificationsFiltered();
+HXDLIN( 287)					bool row8 = x1->notifyMention();
+HXLINE( 278)					_g->push(::cpp::VirtualArray_obj::__new(16)->init(0,accountId1)->init(1,x2)->init(2,row)->init(3,x3)->init(4,row1)->init(5,x4)->init(6,x5)->init(7,row2)->init(8,row3)->init(9,x6)->init(10,row4)->init(11,row5)->init(12,row6)->init(13,row7)->init(14,row8)->init(15,x1->notifyReply()));
             				}
             			}
-HXDLIN( 221)			::cpp::VirtualArray _g1 = ::cpp::VirtualArray_obj::__new(0);
-HXDLIN( 221)			{
-HXLINE( 221)				 ::Dynamic e = _g->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 221)				while(( (bool)(e->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 221)					 ::Dynamic x7 = e->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 221)					while(( (bool)(x7->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 221)						_g1->push(x7->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
+HXDLIN( 278)			::cpp::VirtualArray _g1 = ::cpp::VirtualArray_obj::__new(0);
+HXDLIN( 278)			{
+HXLINE( 278)				 ::Dynamic e = _g->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN( 278)				while(( (bool)(e->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 278)					 ::Dynamic x7 = e->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN( 278)					while(( (bool)(x7->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 278)						_g1->push(x7->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
             					}
             				}
             			}
-HXLINE( 219)			_gthis1->exec(_hx_tmp,_g1);
-HXLINE( 235)			_gthis->storeChatTimer = null();
-HXLINE( 236)			_gthis->storeChatBuffer->clear();
+HXLINE( 276)			_gthis1->exec(_hx_tmp,_g1);
+HXLINE( 292)			_gthis->storeChatTimer = null();
+HXLINE( 293)			_gthis->storeChatBuffer->clear();
             		}
             		HX_END_LOCAL_FUNC0((void))
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_182_storeChats)
-HXDLIN( 182)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 183)		if (::hx::IsNotNull( this->storeChatTimer )) {
-HXLINE( 184)			this->storeChatTimer->stop();
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_239_storeChats)
+HXDLIN( 239)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 240)		if (::hx::IsNotNull( this->storeChatTimer )) {
+HXLINE( 241)			this->storeChatTimer->stop();
             		}
-HXLINE( 187)		{
-HXLINE( 187)			int _g = 0;
-HXDLIN( 187)			while((_g < chats->length)){
-HXLINE( 187)				 ::borogove::Chat chat = chats->__get(_g).StaticCast<  ::borogove::Chat >();
-HXDLIN( 187)				_g = (_g + 1);
-HXLINE( 188)				this->storeChatBuffer->set(((accountId + HX_("\n",0a,00,00,00)) + chat->chatId),chat);
+HXLINE( 244)		{
+HXLINE( 244)			int _g = 0;
+HXDLIN( 244)			while((_g < chats->length)){
+HXLINE( 244)				 ::borogove::Chat chat = chats->__get(_g).StaticCast<  ::borogove::Chat >();
+HXDLIN( 244)				_g = (_g + 1);
+HXLINE( 245)				this->storeChatBuffer->set(((accountId + HX_("\n",0a,00,00,00)) + chat->chatId),chat);
             			}
             		}
-HXLINE( 191)		this->storeChatTimer = ::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_1(_gthis,accountId)),100);
+HXLINE( 248)		this->storeChatTimer = ::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_1(_gthis,accountId)),100);
             	}
 
 
@@ -739,171 +743,171 @@ HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,storeChats,(void))
             		::Dynamic _hx_run( ::haxe::iterators::ArrayIterator result){
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::haxe::ds::ObjectMap,fetchCaps) HXARGC(0)
             			 ::Dynamic _hx_run(){
-            				HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_258_getChats)
-HXLINE( 258)				return fetchCaps->keys();
+            				HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_315_getChats)
+HXLINE( 315)				return fetchCaps->keys();
             			}
             			HX_END_LOCAL_FUNC0(return)
 
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1,::cpp::VirtualArray,chats) HXARGC(1)
             			 ::Dynamic _hx_run( ::haxe::iterators::ArrayIterator capsResult){
-            				HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_262_getChats)
-HXLINE( 262)				return  ::Dynamic(::hx::Anon_obj::Create(2)
+            				HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_319_getChats)
+HXLINE( 319)				return  ::Dynamic(::hx::Anon_obj::Create(2)
             					->setFixed(0,HX_("caps",21,1c,ba,41),capsResult)
             					->setFixed(1,HX_("chats",9b,9e,b3,45),chats));
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_245_getChats)
-HXLINE( 246)			 ::haxe::ds::ObjectMap fetchCaps =  ::haxe::ds::ObjectMap_obj::__alloc( HX_CTX );
-HXLINE( 247)			::cpp::VirtualArray chats = ::cpp::VirtualArray_obj::__new(0);
-HXLINE( 248)			while((result->current < result->array->get_length())){
-HXLINE( 248)				 ::Dynamic row = result->array->__get(result->current++);
-HXLINE( 249)				 ::Dynamic capsJson;
-HXDLIN( 249)				if (::hx::IsNull( row->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic) )) {
-HXLINE( 249)					capsJson = null();
+            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_302_getChats)
+HXLINE( 303)			 ::haxe::ds::ObjectMap fetchCaps =  ::haxe::ds::ObjectMap_obj::__alloc( HX_CTX );
+HXLINE( 304)			::cpp::VirtualArray chats = ::cpp::VirtualArray_obj::__new(0);
+HXLINE( 305)			while((result->current < result->array->get_length())){
+HXLINE( 305)				 ::Dynamic row = result->array->__get(result->current++);
+HXLINE( 306)				 ::Dynamic capsJson;
+HXDLIN( 306)				if (::hx::IsNull( row->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic) )) {
+HXLINE( 306)					capsJson = null();
             				}
             				else {
-HXLINE( 249)					capsJson =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic)) ))->doParse();
+HXLINE( 306)					capsJson =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic)) ))->doParse();
             				}
-HXLINE( 250)				 ::borogove::Caps _hx_tmp;
-HXDLIN( 250)				if (::hx::IsNull( capsJson )) {
-HXLINE( 250)					_hx_tmp = null();
+HXLINE( 307)				 ::borogove::Caps _hx_tmp;
+HXDLIN( 307)				if (::hx::IsNull( capsJson )) {
+HXLINE( 307)					_hx_tmp = null();
             				}
             				else {
-HXLINE( 250)					_hx_tmp = _gthis->hydrateCaps(capsJson,( (::Array< unsigned char >)(row->__Field(HX_("caps_ver",05,68,56,1e),::hx::paccDynamic)) ));
-            				}
-HXDLIN( 250)				row->__SetField(HX_("capsObj",56,b6,8b,a6),_hx_tmp,::hx::paccDynamic);
-HXLINE( 251)				 ::Dynamic presenceJson =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("presence",3b,52,d7,66),::hx::paccDynamic)) ))->doParse();
-HXLINE( 252)				row->__SetField(HX_("presenceJson",03,fa,cd,23),presenceJson,::hx::paccDynamic);
-HXLINE( 253)				{
-HXLINE( 253)					::Array< ::String > _g_keys = ::Reflect_obj::fields(presenceJson);
-HXDLIN( 253)					int _g_index = 0;
-HXDLIN( 253)					while((_g_index < _g_keys->length)){
-HXLINE( 253)						_g_index = (_g_index + 1);
-HXDLIN( 253)						 ::Dynamic _g_value = ::Reflect_obj::field(presenceJson,_g_keys->__get((_g_index - 1)));
-HXLINE( 254)						if (::hx::IsNotNull( _g_value->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic) )) {
-HXLINE( 254)							::Array< unsigned char > k = ::haxe::crypto::Base64_obj::decode(( (::String)(_g_value->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic)) ),null())->b;
-HXDLIN( 254)							fetchCaps->set(k,true);
+HXLINE( 307)					_hx_tmp = _gthis->hydrateCaps(capsJson,( (::Array< unsigned char >)(row->__Field(HX_("caps_ver",05,68,56,1e),::hx::paccDynamic)) ));
+            				}
+HXDLIN( 307)				row->__SetField(HX_("capsObj",56,b6,8b,a6),_hx_tmp,::hx::paccDynamic);
+HXLINE( 308)				 ::Dynamic presenceJson =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("presence",3b,52,d7,66),::hx::paccDynamic)) ))->doParse();
+HXLINE( 309)				row->__SetField(HX_("presenceJson",03,fa,cd,23),presenceJson,::hx::paccDynamic);
+HXLINE( 310)				{
+HXLINE( 310)					::Array< ::String > _g_keys = ::Reflect_obj::fields(presenceJson);
+HXDLIN( 310)					int _g_index = 0;
+HXDLIN( 310)					while((_g_index < _g_keys->length)){
+HXLINE( 310)						_g_index = (_g_index + 1);
+HXDLIN( 310)						 ::Dynamic _g_value = ::Reflect_obj::field(presenceJson,_g_keys->__get((_g_index - 1)));
+HXLINE( 311)						if (::hx::IsNotNull( _g_value->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic) )) {
+HXLINE( 311)							::Array< unsigned char > k = ::haxe::crypto::Base64_obj::decode(( (::String)(_g_value->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic)) ),null())->b;
+HXDLIN( 311)							fetchCaps->set(k,true);
             						}
             					}
             				}
-HXLINE( 256)				chats->push(row);
+HXLINE( 313)				chats->push(row);
             			}
-HXLINE( 258)			::Array< ::Dynamic> fetchCapsSha1s = ::Lambda_obj::array( ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE( 315)			::Array< ::Dynamic> fetchCapsSha1s = ::Lambda_obj::array( ::Dynamic(::hx::Anon_obj::Create(1)
             				->setFixed(0,HX_("iterator",ee,49,9a,93), ::Dynamic(new _hx_Closure_0(fetchCaps)))));
-HXLINE( 259)			 ::borogove::persistence::SqliteDriver _gthis1 = _gthis->db;
-HXLINE( 260)			::Array< ::String > result1 = ::Array_obj< ::String >::__new(fetchCapsSha1s->length);
-HXDLIN( 260)			{
-HXLINE( 260)				int _g = 0;
-HXDLIN( 260)				int _g1 = fetchCapsSha1s->length;
-HXDLIN( 260)				while((_g < _g1)){
-HXLINE( 260)					_g = (_g + 1);
-HXDLIN( 260)					int i = (_g - 1);
-HXDLIN( 260)					{
-HXLINE( 260)						_hx_array_unsafe_get(fetchCapsSha1s,i);
-HXDLIN( 260)						result1->__unsafe_set(i,HX_("?",3f,00,00,00));
+HXLINE( 316)			 ::borogove::persistence::SqliteDriver _gthis1 = _gthis->db;
+HXLINE( 317)			::Array< ::String > result1 = ::Array_obj< ::String >::__new(fetchCapsSha1s->length);
+HXDLIN( 317)			{
+HXLINE( 317)				int _g = 0;
+HXDLIN( 317)				int _g1 = fetchCapsSha1s->length;
+HXDLIN( 317)				while((_g < _g1)){
+HXLINE( 317)					_g = (_g + 1);
+HXDLIN( 317)					int i = (_g - 1);
+HXDLIN( 317)					{
+HXLINE( 317)						_hx_array_unsafe_get(fetchCapsSha1s,i);
+HXDLIN( 317)						result1->__unsafe_set(i,HX_("?",3f,00,00,00));
             					}
             				}
             			}
-HXLINE( 259)			return ::thenshim::_Promise::Promise_Impl__obj::then(_gthis1->exec(((HX_("SELECT sha1, json(caps) AS caps FROM caps WHERE sha1 IN (",5a,e4,9c,e2) + result1->join(HX_(",",2c,00,00,00))) + HX_(")",29,00,00,00)),fetchCapsSha1s), ::Dynamic(new _hx_Closure_1(chats)),null());
+HXLINE( 316)			return ::thenshim::_Promise::Promise_Impl__obj::then(_gthis1->exec(((HX_("SELECT sha1, json(caps) AS caps FROM caps WHERE sha1 IN (",5a,e4,9c,e2) + result1->join(HX_(",",2c,00,00,00))) + HX_(")",29,00,00,00)),fetchCapsSha1s), ::Dynamic(new _hx_Closure_1(chats)),null());
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_3, ::borogove::persistence::Sqlite,_gthis) HXARGC(1)
             		::Array< ::Dynamic> _hx_run( ::Dynamic result){
-            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_263_getChats)
-HXLINE( 264)			 ::haxe::ds::StringMap capsMap =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE( 265)			{
-HXLINE( 265)				 ::haxe::iterators::ArrayIterator _g = ( ( ::haxe::iterators::ArrayIterator)(result->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic)) );
-HXDLIN( 265)				while((_g->current < _g->array->get_length())){
-HXLINE( 265)					 ::Dynamic row = _g->array->__get(_g->current++);
-HXLINE( 266)					 ::Dynamic json =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic)) ))->doParse();
-HXLINE( 267)					{
-HXLINE( 267)						::String k = ::haxe::crypto::Base64_obj::encode(::haxe::io::Bytes_obj::ofData(( (::Array< unsigned char >)(row->__Field(HX_("sha1",85,c8,52,4c),::hx::paccDynamic)) )),null());
-HXDLIN( 267)						capsMap->set(k,_gthis->hydrateCaps(json,( (::Array< unsigned char >)(row->__Field(HX_("sha1",85,c8,52,4c),::hx::paccDynamic)) )));
-            					}
-            				}
-            			}
-HXLINE( 269)			result->__SetField(HX_("caps",21,1c,ba,41),null(),::hx::paccDynamic);
-HXLINE( 270)			::Array< ::Dynamic> chats = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 271)			 ::Dynamic row1 = null();
-HXLINE( 272)			while(true){
-HXLINE( 272)				row1 = ( (::cpp::VirtualArray)(result->__Field(HX_("chats",9b,9e,b3,45),::hx::paccDynamic)) )->pop();
-HXDLIN( 272)				if (!(::hx::IsNotNull( row1 ))) {
-HXLINE( 272)					goto _hx_goto_34;
-            				}
-HXLINE( 273)				 ::haxe::ds::StringMap presenceMap =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE( 274)				 ::Dynamic presenceJson =  ::Dynamic(row1->__Field(HX_("presenceJson",03,fa,cd,23),::hx::paccDynamic));
-HXLINE( 275)				{
-HXLINE( 275)					int _g1 = 0;
-HXDLIN( 275)					::Array< ::String > _g2 = ::Reflect_obj::fields(presenceJson);
-HXDLIN( 275)					while((_g1 < _g2->length)){
-HXLINE( 275)						::String resource = _g2->__get(_g1);
-HXDLIN( 275)						_g1 = (_g1 + 1);
-HXLINE( 276)						 ::Dynamic presence = ::Reflect_obj::field(presenceJson,resource);
-HXLINE( 277)						::Reflect_obj::deleteField(presenceJson,resource);
-HXLINE( 278)						{
-HXLINE( 279)							 ::borogove::Caps v;
-HXDLIN( 279)							if (::hx::IsNull( presence->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic) )) {
-HXLINE( 279)								v = null();
+            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_320_getChats)
+HXLINE( 321)			 ::haxe::ds::StringMap capsMap =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 322)			{
+HXLINE( 322)				 ::haxe::iterators::ArrayIterator _g = ( ( ::haxe::iterators::ArrayIterator)(result->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic)) );
+HXDLIN( 322)				while((_g->current < _g->array->get_length())){
+HXLINE( 322)					 ::Dynamic row = _g->array->__get(_g->current++);
+HXLINE( 323)					 ::Dynamic json =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic)) ))->doParse();
+HXLINE( 324)					{
+HXLINE( 324)						::String k = ::haxe::crypto::Base64_obj::encode(::haxe::io::Bytes_obj::ofData(( (::Array< unsigned char >)(row->__Field(HX_("sha1",85,c8,52,4c),::hx::paccDynamic)) )),null());
+HXDLIN( 324)						capsMap->set(k,_gthis->hydrateCaps(json,( (::Array< unsigned char >)(row->__Field(HX_("sha1",85,c8,52,4c),::hx::paccDynamic)) )));
+            					}
+            				}
+            			}
+HXLINE( 326)			result->__SetField(HX_("caps",21,1c,ba,41),null(),::hx::paccDynamic);
+HXLINE( 327)			::Array< ::Dynamic> chats = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 328)			 ::Dynamic row1 = null();
+HXLINE( 329)			while(true){
+HXLINE( 329)				row1 = ( (::cpp::VirtualArray)(result->__Field(HX_("chats",9b,9e,b3,45),::hx::paccDynamic)) )->pop();
+HXDLIN( 329)				if (!(::hx::IsNotNull( row1 ))) {
+HXLINE( 329)					goto _hx_goto_38;
+            				}
+HXLINE( 330)				 ::haxe::ds::StringMap presenceMap =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 331)				 ::Dynamic presenceJson =  ::Dynamic(row1->__Field(HX_("presenceJson",03,fa,cd,23),::hx::paccDynamic));
+HXLINE( 332)				{
+HXLINE( 332)					int _g1 = 0;
+HXDLIN( 332)					::Array< ::String > _g2 = ::Reflect_obj::fields(presenceJson);
+HXDLIN( 332)					while((_g1 < _g2->length)){
+HXLINE( 332)						::String resource = _g2->__get(_g1);
+HXDLIN( 332)						_g1 = (_g1 + 1);
+HXLINE( 333)						 ::Dynamic presence = ::Reflect_obj::field(presenceJson,resource);
+HXLINE( 334)						::Reflect_obj::deleteField(presenceJson,resource);
+HXLINE( 335)						{
+HXLINE( 336)							 ::borogove::Caps v;
+HXDLIN( 336)							if (::hx::IsNull( presence->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic) )) {
+HXLINE( 336)								v = null();
             							}
             							else {
-HXLINE( 279)								v = ( ( ::borogove::Caps)(capsMap->get(( (::String)(presence->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic)) ))) );
+HXLINE( 336)								v = ( ( ::borogove::Caps)(capsMap->get(( (::String)(presence->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic)) ))) );
             							}
-HXLINE( 280)							 ::borogove::Stanza v1;
-HXDLIN( 280)							bool v2;
-HXDLIN( 280)							if (::hx::IsNotNull( presence->__Field(HX_("mucUser",e6,f3,96,b5),::hx::paccDynamic) )) {
-HXLINE( 280)								v2 = ::borogove::Config_obj::constrainedMemoryMode;
+HXLINE( 337)							 ::borogove::Stanza v1;
+HXDLIN( 337)							bool v2;
+HXDLIN( 337)							if (::hx::IsNotNull( presence->__Field(HX_("mucUser",e6,f3,96,b5),::hx::paccDynamic) )) {
+HXLINE( 337)								v2 = ::borogove::Config_obj::constrainedMemoryMode;
             							}
             							else {
-HXLINE( 280)								v2 = true;
+HXLINE( 337)								v2 = true;
             							}
-HXDLIN( 280)							if (v2) {
-HXLINE( 280)								v1 = null();
+HXDLIN( 337)							if (v2) {
+HXLINE( 337)								v1 = null();
             							}
             							else {
-HXLINE( 280)								v1 = ::borogove::Stanza_obj::parse(( (::String)(presence->__Field(HX_("mucUser",e6,f3,96,b5),::hx::paccDynamic)) ));
+HXLINE( 337)								v1 = ::borogove::Stanza_obj::parse(( (::String)(presence->__Field(HX_("mucUser",e6,f3,96,b5),::hx::paccDynamic)) ));
             							}
-HXLINE( 281)							 ::borogove::Hash v3;
-HXDLIN( 281)							if (::hx::IsNull( presence->__Field(HX_("avatarHash",87,5c,82,37),::hx::paccDynamic) )) {
-HXLINE( 281)								v3 = null();
+HXLINE( 338)							 ::borogove::Hash v3;
+HXDLIN( 338)							if (::hx::IsNull( presence->__Field(HX_("avatarHash",87,5c,82,37),::hx::paccDynamic) )) {
+HXLINE( 338)								v3 = null();
             							}
             							else {
-HXLINE( 281)								v3 = ::borogove::Hash_obj::fromUri(( (::String)(presence->__Field(HX_("avatarHash",87,5c,82,37),::hx::paccDynamic)) ));
+HXLINE( 338)								v3 = ::borogove::Hash_obj::fromUri(( (::String)(presence->__Field(HX_("avatarHash",87,5c,82,37),::hx::paccDynamic)) ));
             							}
-HXLINE( 278)							presenceMap->set(resource, ::borogove::Presence_obj::__alloc( HX_CTX ,v,v1,v3));
+HXLINE( 335)							presenceMap->set(resource, ::borogove::Presence_obj::__alloc( HX_CTX ,v,v1,v3));
             						}
             					}
             				}
-HXLINE( 285)				::String row2 = ( (::String)(row1->__Field(HX_("chat_id",22,ea,bd,d0),::hx::paccDynamic)) );
-HXDLIN( 285)				bool _hx_tmp = ::hx::IsNotEq( row1->__Field(HX_("trusted",f7,b7,a6,16),::hx::paccDynamic),0 );
-HXDLIN( 285)				::Array< unsigned char > row3 = ( (::Array< unsigned char >)(row1->__Field(HX_("avatar_sha1",ab,69,a3,a4),::hx::paccDynamic)) );
-HXDLIN( 285)				::String row4 = ( (::String)(row1->__Field(HX_("fn",48,59,00,00),::hx::paccDynamic)) );
-HXDLIN( 285)				 ::Dynamic row5 = row1->__Field(HX_("ui_state",a6,9a,4e,b2),::hx::paccDynamic);
-HXDLIN( 285)				bool _hx_tmp1 = ::hx::IsNotEq( row1->__Field(HX_("blocked",ec,7a,fe,44),::hx::paccDynamic),0 );
-HXDLIN( 285)				::String row6 = ( (::String)(row1->__Field(HX_("extensions",14,7c,70,89),::hx::paccDynamic)) );
-HXDLIN( 285)				::String row7 = ( (::String)(row1->__Field(HX_("read_up_to_id",84,60,ad,9e),::hx::paccDynamic)) );
-HXDLIN( 285)				::String row8 = ( (::String)(row1->__Field(HX_("read_up_to_by",80,5a,ad,9e),::hx::paccDynamic)) );
-HXDLIN( 285)				 ::Dynamic _hx_tmp2;
-HXDLIN( 285)				if (::hx::IsNull( row1->__Field(HX_("notifications_filtered",4e,91,57,51),::hx::paccDynamic) )) {
-HXLINE( 285)					_hx_tmp2 = null();
+HXLINE( 342)				::String row2 = ( (::String)(row1->__Field(HX_("chat_id",22,ea,bd,d0),::hx::paccDynamic)) );
+HXDLIN( 342)				bool _hx_tmp = ::hx::IsNotEq( row1->__Field(HX_("trusted",f7,b7,a6,16),::hx::paccDynamic),0 );
+HXDLIN( 342)				::Array< unsigned char > row3 = ( (::Array< unsigned char >)(row1->__Field(HX_("avatar_sha1",ab,69,a3,a4),::hx::paccDynamic)) );
+HXDLIN( 342)				::String row4 = ( (::String)(row1->__Field(HX_("fn",48,59,00,00),::hx::paccDynamic)) );
+HXDLIN( 342)				 ::Dynamic row5 = row1->__Field(HX_("ui_state",a6,9a,4e,b2),::hx::paccDynamic);
+HXDLIN( 342)				bool _hx_tmp1 = ::hx::IsNotEq( row1->__Field(HX_("blocked",ec,7a,fe,44),::hx::paccDynamic),0 );
+HXDLIN( 342)				::String row6 = ( (::String)(row1->__Field(HX_("extensions",14,7c,70,89),::hx::paccDynamic)) );
+HXDLIN( 342)				::String row7 = ( (::String)(row1->__Field(HX_("read_up_to_id",84,60,ad,9e),::hx::paccDynamic)) );
+HXDLIN( 342)				::String row8 = ( (::String)(row1->__Field(HX_("read_up_to_by",80,5a,ad,9e),::hx::paccDynamic)) );
+HXDLIN( 342)				 ::Dynamic _hx_tmp2;
+HXDLIN( 342)				if (::hx::IsNull( row1->__Field(HX_("notifications_filtered",4e,91,57,51),::hx::paccDynamic) )) {
+HXLINE( 342)					_hx_tmp2 = null();
             				}
             				else {
-HXLINE( 285)					_hx_tmp2 = ::hx::IsNotEq( row1->__Field(HX_("notifications_filtered",4e,91,57,51),::hx::paccDynamic),0 );
+HXLINE( 342)					_hx_tmp2 = ::hx::IsNotEq( row1->__Field(HX_("notifications_filtered",4e,91,57,51),::hx::paccDynamic),0 );
             				}
-HXDLIN( 285)				bool _hx_tmp3 = ::hx::IsNotEq( row1->__Field(HX_("notify_mention",34,44,26,d0),::hx::paccDynamic),0 );
-HXDLIN( 285)				bool _hx_tmp4 = ::hx::IsNotEq( row1->__Field(HX_("notify_reply",f4,e7,df,1b),::hx::paccDynamic),0 );
-HXDLIN( 285)				 ::borogove::Caps row9 = ( ( ::borogove::Caps)(row1->__Field(HX_("capsObj",56,b6,8b,a6),::hx::paccDynamic)) );
-HXDLIN( 285)				chats->push( ::borogove::SerializedChat_obj::__alloc( HX_CTX ,row2,_hx_tmp,row3,presenceMap,row4,row5,_hx_tmp1,row6,row7,row8,_hx_tmp2,_hx_tmp3,_hx_tmp4,row9,::Array_obj< int >::__new(0),( (::String)(::Reflect_obj::field(row1,HX_("class",38,78,58,48))) )));
+HXDLIN( 342)				bool _hx_tmp3 = ::hx::IsNotEq( row1->__Field(HX_("notify_mention",34,44,26,d0),::hx::paccDynamic),0 );
+HXDLIN( 342)				bool _hx_tmp4 = ::hx::IsNotEq( row1->__Field(HX_("notify_reply",f4,e7,df,1b),::hx::paccDynamic),0 );
+HXDLIN( 342)				 ::borogove::Caps row9 = ( ( ::borogove::Caps)(row1->__Field(HX_("capsObj",56,b6,8b,a6),::hx::paccDynamic)) );
+HXDLIN( 342)				chats->push( ::borogove::SerializedChat_obj::__alloc( HX_CTX ,row2,_hx_tmp,row3,presenceMap,row4,row5,_hx_tmp1,row6,row7,row8,_hx_tmp2,_hx_tmp3,_hx_tmp4,row9,::Array_obj< int >::__new(0),( (::String)(::Reflect_obj::field(row1,HX_("class",38,78,58,48))) )));
             			}
-            			_hx_goto_34:;
-HXLINE( 287)			return chats;
+            			_hx_goto_38:;
+HXLINE( 344)			return chats;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_241_getChats)
-HXDLIN( 241)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 242)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT chat_id, trusted, avatar_sha1, fn, ui_state, blocked, extensions, read_up_to_id, read_up_to_by, notifications_filtered, notify_mention, notify_reply, json(caps) AS caps, caps_ver, json(presence) AS presence, class FROM chats LEFT JOIN caps ON chats.caps_ver=caps.sha1 WHERE account_id=?",32,f7,06,7e),::cpp::VirtualArray_obj::__new(1)->init(0,accountId)), ::Dynamic(new _hx_Closure_2(_gthis)),null()), ::Dynamic(new _hx_Closure_3(_gthis)),null());
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_298_getChats)
+HXDLIN( 298)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 299)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT chat_id, trusted, avatar_sha1, fn, ui_state, blocked, extensions, read_up_to_id, read_up_to_by, notifications_filtered, notify_mention, notify_reply, json(caps) AS caps, caps_ver, json(presence) AS presence, class FROM chats LEFT JOIN caps ON chats.caps_ver=caps.sha1 WHERE account_id=?",32,f7,06,7e),::cpp::VirtualArray_obj::__new(1)->init(0,accountId)), ::Dynamic(new _hx_Closure_2(_gthis)),null()), ::Dynamic(new _hx_Closure_3(_gthis)),null());
             	}
 
 
@@ -912,91 +916,91 @@ HX_DEFINE_DYNAMIC_FUNC1(Sqlite_obj,getChats,return )
 ::Dynamic Sqlite_obj::storeMessages(::String accountId,::Array< ::Dynamic> messages){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0,::Array< ::Dynamic>,messages, ::borogove::persistence::Sqlite,_gthis,::String,accountId) HXARGC(1)
             		::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
-            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_328_storeMessages)
-HXLINE( 328)			 ::borogove::persistence::SqliteDriver _gthis1 = _gthis->db;
-HXLINE( 329)			::Array< ::String > result = ::Array_obj< ::String >::__new(messages->length);
-HXDLIN( 329)			{
-HXLINE( 329)				int _g = 0;
-HXDLIN( 329)				int _g1 = messages->length;
-HXDLIN( 329)				while((_g < _g1)){
-HXLINE( 329)					_g = (_g + 1);
-HXDLIN( 329)					int i = (_g - 1);
-HXDLIN( 329)					{
-HXLINE( 329)						_hx_array_unsafe_get(messages,i);
-HXDLIN( 329)						result->__unsafe_set(i,HX_("(?,?,?,?,?,?,?,?,CAST(unixepoch(?, 'subsec') * 1000 AS INTEGER),?,?,?,?,?)",a3,f4,ed,ae));
-            					}
-            				}
-            			}
-HXDLIN( 329)			::String _hx_tmp = (HX_("INSERT OR REPLACE INTO messages VALUES ",28,32,a2,bc) + result->join(HX_(",",2c,00,00,00)));
-HXLINE( 330)			::Array< ::Dynamic> _g2 = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 330)			{
-HXLINE( 330)				int _g_current = 0;
-HXDLIN( 330)				::Array< ::Dynamic> _g_array = messages;
-HXDLIN( 330)				while((_g_current < _g_array->length)){
-HXLINE( 330)					_g_current = (_g_current + 1);
-HXDLIN( 330)					 ::borogove::ChatMessage x = _g_array->__get((_g_current - 1)).StaticCast<  ::borogove::ChatMessage >();
-HXLINE( 332)					 ::borogove::ChatMessage message;
-HXDLIN( 332)					if ((x->versions->length == 1)) {
-HXLINE( 332)						message = x->versions->__get(0).StaticCast<  ::borogove::ChatMessage >();
+            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_385_storeMessages)
+HXLINE( 385)			 ::borogove::persistence::SqliteDriver _gthis1 = _gthis->db;
+HXLINE( 386)			::Array< ::String > result = ::Array_obj< ::String >::__new(messages->length);
+HXDLIN( 386)			{
+HXLINE( 386)				int _g = 0;
+HXDLIN( 386)				int _g1 = messages->length;
+HXDLIN( 386)				while((_g < _g1)){
+HXLINE( 386)					_g = (_g + 1);
+HXDLIN( 386)					int i = (_g - 1);
+HXDLIN( 386)					{
+HXLINE( 386)						_hx_array_unsafe_get(messages,i);
+HXDLIN( 386)						result->__unsafe_set(i,HX_("(?,?,?,?,?,?,?,?,CAST(unixepoch(?, 'subsec') * 1000 AS INTEGER),?,?,?,?,?)",a3,f4,ed,ae));
+            					}
+            				}
+            			}
+HXDLIN( 386)			::String _hx_tmp = (HX_("INSERT OR REPLACE INTO messages VALUES ",28,32,a2,bc) + result->join(HX_(",",2c,00,00,00)));
+HXLINE( 387)			::Array< ::Dynamic> _g2 = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 387)			{
+HXLINE( 387)				int _g_current = 0;
+HXDLIN( 387)				::Array< ::Dynamic> _g_array = messages;
+HXDLIN( 387)				while((_g_current < _g_array->length)){
+HXLINE( 387)					_g_current = (_g_current + 1);
+HXDLIN( 387)					 ::borogove::ChatMessage x = _g_array->__get((_g_current - 1)).StaticCast<  ::borogove::ChatMessage >();
+HXLINE( 389)					 ::borogove::ChatMessage message;
+HXDLIN( 389)					if ((x->versions->length == 1)) {
+HXLINE( 389)						message = x->versions->__get(0).StaticCast<  ::borogove::ChatMessage >();
             					}
             					else {
-HXLINE( 332)						message = x;
+HXLINE( 389)						message = x;
             					}
-HXLINE( 334)					::String accountId1 = accountId;
-HXDLIN( 334)					::String _hx_tmp1;
-HXDLIN( 334)					::String tmp = message->serverId;
-HXDLIN( 334)					if (::hx::IsNotNull( tmp )) {
-HXLINE( 334)						_hx_tmp1 = tmp;
+HXLINE( 391)					::String accountId1 = accountId;
+HXDLIN( 391)					::String _hx_tmp1;
+HXDLIN( 391)					::String tmp = message->serverId;
+HXDLIN( 391)					if (::hx::IsNotNull( tmp )) {
+HXLINE( 391)						_hx_tmp1 = tmp;
             					}
             					else {
-HXLINE( 334)						_hx_tmp1 = HX_("",00,00,00,00);
+HXLINE( 391)						_hx_tmp1 = HX_("",00,00,00,00);
             					}
-HXDLIN( 334)					::String _hx_tmp2;
-HXDLIN( 334)					::String tmp1 = message->serverIdBy;
-HXDLIN( 334)					if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 334)						_hx_tmp2 = tmp1;
+HXDLIN( 391)					::String _hx_tmp2;
+HXDLIN( 391)					::String tmp1 = message->serverIdBy;
+HXDLIN( 391)					if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 391)						_hx_tmp2 = tmp1;
             					}
             					else {
-HXLINE( 334)						_hx_tmp2 = HX_("",00,00,00,00);
+HXLINE( 391)						_hx_tmp2 = HX_("",00,00,00,00);
             					}
-HXLINE( 335)					::String _hx_tmp3;
-HXDLIN( 335)					::String tmp2 = message->localId;
-HXDLIN( 335)					if (::hx::IsNotNull( tmp2 )) {
-HXLINE( 335)						_hx_tmp3 = tmp2;
+HXLINE( 392)					::String _hx_tmp3;
+HXDLIN( 392)					::String tmp2 = message->localId;
+HXDLIN( 392)					if (::hx::IsNotNull( tmp2 )) {
+HXLINE( 392)						_hx_tmp3 = tmp2;
             					}
             					else {
-HXLINE( 335)						_hx_tmp3 = HX_("",00,00,00,00);
+HXLINE( 392)						_hx_tmp3 = HX_("",00,00,00,00);
             					}
-HXDLIN( 335)					::String _hx_tmp4;
-HXDLIN( 335)					::String tmp3 = x->localId;
-HXDLIN( 335)					if (::hx::IsNotNull( tmp3 )) {
-HXLINE( 335)						_hx_tmp4 = tmp3;
+HXDLIN( 392)					::String _hx_tmp4;
+HXDLIN( 392)					::String tmp3 = x->localId;
+HXDLIN( 392)					if (::hx::IsNotNull( tmp3 )) {
+HXLINE( 392)						_hx_tmp4 = tmp3;
             					}
             					else {
-HXLINE( 335)						_hx_tmp4 = x->serverId;
+HXLINE( 392)						_hx_tmp4 = x->serverId;
             					}
-HXDLIN( 335)					bool correctable = x->syncPoint;
-HXLINE( 336)					::String _hx_tmp5 = x->chatId();
-HXDLIN( 336)					::String correctable1 = x->senderId;
-HXLINE( 337)					::String message1 = message->timestamp;
-HXDLIN( 337)					int message2 = message->status;
-HXDLIN( 337)					int message3 = message->direction;
-HXDLIN( 337)					int message4 = message->type;
-HXLINE( 338)					::String _hx_tmp6 = message->asStanza()->toString();
-HXLINE( 330)					_g2->push(::cpp::VirtualArray_obj::__new(14)->init(0,accountId1)->init(1,_hx_tmp1)->init(2,_hx_tmp2)->init(3,_hx_tmp3)->init(4,_hx_tmp4)->init(5,correctable)->init(6,_hx_tmp5)->init(7,correctable1)->init(8,message1)->init(9,message2)->init(10,message3)->init(11,message4)->init(12,_hx_tmp6)->init(13,message->statusText));
+HXDLIN( 392)					bool correctable = x->syncPoint;
+HXLINE( 393)					::String _hx_tmp5 = x->chatId();
+HXDLIN( 393)					::String correctable1 = x->senderId;
+HXLINE( 394)					::String message1 = message->timestamp;
+HXDLIN( 394)					int message2 = message->status;
+HXDLIN( 394)					int message3 = message->direction;
+HXDLIN( 394)					int message4 = message->type;
+HXLINE( 395)					::String _hx_tmp6 = message->asStanza()->toString();
+HXLINE( 387)					_g2->push(::cpp::VirtualArray_obj::__new(14)->init(0,accountId1)->init(1,_hx_tmp1)->init(2,_hx_tmp2)->init(3,_hx_tmp3)->init(4,_hx_tmp4)->init(5,correctable)->init(6,_hx_tmp5)->init(7,correctable1)->init(8,message1)->init(9,message2)->init(10,message3)->init(11,message4)->init(12,_hx_tmp6)->init(13,message->statusText));
             				}
             			}
-HXDLIN( 330)			::cpp::VirtualArray _g3 = ::cpp::VirtualArray_obj::__new(0);
-HXDLIN( 330)			{
-HXLINE( 330)				 ::Dynamic e = _g2->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 330)				while(( (bool)(e->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 330)					 ::Dynamic x1 = e->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 330)					while(( (bool)(x1->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 330)						_g3->push(x1->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
+HXDLIN( 387)			::cpp::VirtualArray _g3 = ::cpp::VirtualArray_obj::__new(0);
+HXDLIN( 387)			{
+HXLINE( 387)				 ::Dynamic e = _g2->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN( 387)				while(( (bool)(e->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 387)					 ::Dynamic x1 = e->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN( 387)					while(( (bool)(x1->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 387)						_g3->push(x1->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
             					}
             				}
             			}
-HXLINE( 328)			return _gthis1->exec(_hx_tmp,_g3);
+HXLINE( 385)			return _gthis1->exec(_hx_tmp,_g3);
             		}
             		HX_END_LOCAL_FUNC1(return)
 
@@ -1004,198 +1008,198 @@ HXLINE( 328)			return _gthis1->exec(_hx_tmp,_g3);
             		::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::borogove::persistence::Sqlite,_gthis,::String,accountId) HXARGC(1)
             			::Dynamic _hx_run(::Array< ::Dynamic> ms){
-            				HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_343_storeMessages)
-HXLINE( 343)				return _gthis->hydrateReactions(accountId,ms);
+            				HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_400_storeMessages)
+HXLINE( 400)				return _gthis->hydrateReactions(accountId,ms);
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_343_storeMessages)
-HXLINE( 343)			return ::thenshim::_Promise::Promise_Impl__obj::then(_gthis->hydrateReplyTo(accountId,messages,replyTos), ::Dynamic(new _hx_Closure_1(_gthis,accountId)),null());
+            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_400_storeMessages)
+HXLINE( 400)			return ::thenshim::_Promise::Promise_Impl__obj::then(_gthis->hydrateReplyTo(accountId,messages,replyTos), ::Dynamic(new _hx_Closure_1(_gthis,accountId)),null());
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_292_storeMessages)
-HXDLIN( 292)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 293)		if ((messages->length < 1)) {
-HXLINE( 294)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(messages);
-            		}
-HXLINE( 297)		::Array< ::String > chatIds = ::Array_obj< ::String >::__new(0);
-HXLINE( 298)		::Array< ::String > localIds = ::Array_obj< ::String >::__new(0);
-HXLINE( 299)		::Array< ::Dynamic> replyTos = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 300)		{
-HXLINE( 300)			int _g = 0;
-HXDLIN( 300)			while((_g < messages->length)){
-HXLINE( 300)				 ::borogove::ChatMessage message = messages->__get(_g).StaticCast<  ::borogove::ChatMessage >();
-HXDLIN( 300)				_g = (_g + 1);
-HXLINE( 301)				bool _hx_tmp;
-HXDLIN( 301)				if (::hx::IsNull( message->serverId )) {
-HXLINE( 301)					_hx_tmp = ::hx::IsNull( message->localId );
+            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_349_storeMessages)
+HXDLIN( 349)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 350)		if ((messages->length < 1)) {
+HXLINE( 351)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(messages);
+            		}
+HXLINE( 354)		::Array< ::String > chatIds = ::Array_obj< ::String >::__new(0);
+HXLINE( 355)		::Array< ::String > localIds = ::Array_obj< ::String >::__new(0);
+HXLINE( 356)		::Array< ::Dynamic> replyTos = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 357)		{
+HXLINE( 357)			int _g = 0;
+HXDLIN( 357)			while((_g < messages->length)){
+HXLINE( 357)				 ::borogove::ChatMessage message = messages->__get(_g).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN( 357)				_g = (_g + 1);
+HXLINE( 358)				bool _hx_tmp;
+HXDLIN( 358)				if (::hx::IsNull( message->serverId )) {
+HXLINE( 358)					_hx_tmp = ::hx::IsNull( message->localId );
             				}
             				else {
-HXLINE( 301)					_hx_tmp = false;
+HXLINE( 358)					_hx_tmp = false;
             				}
-HXDLIN( 301)				if (_hx_tmp) {
-HXLINE( 301)					HX_STACK_DO_THROW(HX_("Cannot store a message with no id",54,e5,b0,de));
+HXDLIN( 358)				if (_hx_tmp) {
+HXLINE( 358)					HX_STACK_DO_THROW(HX_("Cannot store a message with no id",54,e5,b0,de));
             				}
-HXLINE( 302)				bool _hx_tmp1;
-HXDLIN( 302)				if (::hx::IsNull( message->serverId )) {
-HXLINE( 302)					_hx_tmp1 = message->isIncoming();
+HXLINE( 359)				bool _hx_tmp1;
+HXDLIN( 359)				if (::hx::IsNull( message->serverId )) {
+HXLINE( 359)					_hx_tmp1 = message->isIncoming();
             				}
             				else {
-HXLINE( 302)					_hx_tmp1 = false;
+HXLINE( 359)					_hx_tmp1 = false;
             				}
-HXDLIN( 302)				if (_hx_tmp1) {
-HXLINE( 302)					HX_STACK_DO_THROW(HX_("Cannot store an incoming message with no server id",d7,6d,19,fb));
+HXDLIN( 359)				if (_hx_tmp1) {
+HXLINE( 359)					HX_STACK_DO_THROW(HX_("Cannot store an incoming message with no server id",d7,6d,19,fb));
             				}
-HXLINE( 303)				bool _hx_tmp2;
-HXDLIN( 303)				if (::hx::IsNotNull( message->serverId )) {
-HXLINE( 303)					_hx_tmp2 = ::hx::IsNull( message->serverIdBy );
+HXLINE( 360)				bool _hx_tmp2;
+HXDLIN( 360)				if (::hx::IsNotNull( message->serverId )) {
+HXLINE( 360)					_hx_tmp2 = ::hx::IsNull( message->serverIdBy );
             				}
             				else {
-HXLINE( 303)					_hx_tmp2 = false;
+HXLINE( 360)					_hx_tmp2 = false;
             				}
-HXDLIN( 303)				if (_hx_tmp2) {
-HXLINE( 303)					HX_STACK_DO_THROW(HX_("Cannot store a message with a server id and no by",00,9f,b7,38));
+HXDLIN( 360)				if (_hx_tmp2) {
+HXLINE( 360)					HX_STACK_DO_THROW(HX_("Cannot store a message with a server id and no by",00,9f,b7,38));
             				}
-HXLINE( 305)				bool _hx_tmp3;
-HXDLIN( 305)				if (!(message->isIncoming())) {
-HXLINE( 305)					_hx_tmp3 = (message->versions->length < 1);
+HXLINE( 362)				bool _hx_tmp3;
+HXDLIN( 362)				if (!(message->isIncoming())) {
+HXLINE( 362)					_hx_tmp3 = (message->versions->length < 1);
             				}
             				else {
-HXLINE( 305)					_hx_tmp3 = false;
+HXLINE( 362)					_hx_tmp3 = false;
             				}
-HXDLIN( 305)				if (_hx_tmp3) {
-HXLINE( 308)					chatIds->push(message->chatId());
-HXLINE( 309)					localIds->push(message->localId);
+HXDLIN( 362)				if (_hx_tmp3) {
+HXLINE( 365)					chatIds->push(message->chatId());
+HXLINE( 366)					localIds->push(message->localId);
             				}
-HXLINE( 311)				bool _hx_tmp4;
-HXDLIN( 311)				if (::hx::IsNotNull( message->replyToMessage )) {
-HXLINE( 311)					_hx_tmp4 = ::hx::IsNull( message->replyToMessage->serverIdBy );
+HXLINE( 368)				bool _hx_tmp4;
+HXDLIN( 368)				if (::hx::IsNotNull( message->replyToMessage )) {
+HXLINE( 368)					_hx_tmp4 = ::hx::IsNull( message->replyToMessage->serverIdBy );
             				}
             				else {
-HXLINE( 311)					_hx_tmp4 = false;
+HXLINE( 368)					_hx_tmp4 = false;
             				}
-HXDLIN( 311)				if (_hx_tmp4) {
-HXLINE( 312)					::Array< ::Dynamic> replyTos1 = replyTos;
-HXDLIN( 312)					::String _hx_tmp5 = message->chatId();
-HXDLIN( 312)					replyTos1->push( ::Dynamic(::hx::Anon_obj::Create(3)
+HXDLIN( 368)				if (_hx_tmp4) {
+HXLINE( 369)					::Array< ::Dynamic> replyTos1 = replyTos;
+HXDLIN( 369)					::String _hx_tmp5 = message->chatId();
+HXDLIN( 369)					replyTos1->push( ::Dynamic(::hx::Anon_obj::Create(3)
             						->setFixed(0,HX_("chatId",d3,04,77,b7),_hx_tmp5)
             						->setFixed(1,HX_("serverId",7e,01,b2,e2),message->replyToMessage->serverId)
             						->setFixed(2,HX_("localId",26,7a,c6,2d),message->replyToMessage->localId)));
             				}
             			}
             		}
-HXLINE( 316)		::Dynamic _hx_tmp6;
-HXDLIN( 316)		bool _hx_tmp7;
-HXDLIN( 316)		if ((chatIds->length > 0)) {
-HXLINE( 316)			_hx_tmp7 = (localIds->length > 0);
+HXLINE( 373)		::Dynamic _hx_tmp6;
+HXDLIN( 373)		bool _hx_tmp7;
+HXDLIN( 373)		if ((chatIds->length > 0)) {
+HXLINE( 373)			_hx_tmp7 = (localIds->length > 0);
             		}
             		else {
-HXLINE( 316)			_hx_tmp7 = false;
+HXLINE( 373)			_hx_tmp7 = false;
             		}
-HXDLIN( 316)		if (_hx_tmp7) {
-HXLINE( 318)			 ::StringBuf q =  ::StringBuf_obj::__alloc( HX_CTX );
-HXLINE( 319)			{
-HXLINE( 319)				if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 319)					q->flush();
+HXDLIN( 373)		if (_hx_tmp7) {
+HXLINE( 375)			 ::StringBuf q =  ::StringBuf_obj::__alloc( HX_CTX );
+HXLINE( 376)			{
+HXLINE( 376)				if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 376)					q->flush();
             				}
-HXDLIN( 319)				if (::hx::IsNull( q->b )) {
-HXLINE( 319)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_52,1);
+HXDLIN( 376)				if (::hx::IsNull( q->b )) {
+HXLINE( 376)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_56,1);
             				}
             				else {
-HXLINE( 319)					q->b->push(HX_("DELETE FROM messages WHERE account_id=? AND direction=? AND chat_id IN (",a1,9c,a2,06));
-            				}
-            			}
-HXLINE( 320)			{
-HXLINE( 320)				::Array< ::String > result = ::Array_obj< ::String >::__new(chatIds->length);
-HXDLIN( 320)				{
-HXLINE( 320)					int _g1 = 0;
-HXDLIN( 320)					int _g2 = chatIds->length;
-HXDLIN( 320)					while((_g1 < _g2)){
-HXLINE( 320)						_g1 = (_g1 + 1);
-HXDLIN( 320)						int i = (_g1 - 1);
-HXDLIN( 320)						{
-HXLINE( 320)							_hx_array_unsafe_get(chatIds,i);
-HXDLIN( 320)							result->__unsafe_set(i,HX_("?",3f,00,00,00));
+HXLINE( 376)					q->b->push(HX_("DELETE FROM messages WHERE account_id=? AND direction=? AND chat_id IN (",a1,9c,a2,06));
+            				}
+            			}
+HXLINE( 377)			{
+HXLINE( 377)				::Array< ::String > result = ::Array_obj< ::String >::__new(chatIds->length);
+HXDLIN( 377)				{
+HXLINE( 377)					int _g1 = 0;
+HXDLIN( 377)					int _g2 = chatIds->length;
+HXDLIN( 377)					while((_g1 < _g2)){
+HXLINE( 377)						_g1 = (_g1 + 1);
+HXDLIN( 377)						int i = (_g1 - 1);
+HXDLIN( 377)						{
+HXLINE( 377)							_hx_array_unsafe_get(chatIds,i);
+HXDLIN( 377)							result->__unsafe_set(i,HX_("?",3f,00,00,00));
             						}
             					}
             				}
-HXDLIN( 320)				::String x = result->join(HX_(",",2c,00,00,00));
-HXDLIN( 320)				if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 320)					q->flush();
+HXDLIN( 377)				::String x = result->join(HX_(",",2c,00,00,00));
+HXDLIN( 377)				if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 377)					q->flush();
             				}
-HXDLIN( 320)				if (::hx::IsNull( q->b )) {
-HXLINE( 320)					q->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(x));
+HXDLIN( 377)				if (::hx::IsNull( q->b )) {
+HXLINE( 377)					q->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(x));
             				}
             				else {
-HXLINE( 320)					::Array< ::String > q1 = q->b;
-HXDLIN( 320)					q1->push(::Std_obj::string(x));
+HXLINE( 377)					::Array< ::String > q1 = q->b;
+HXDLIN( 377)					q1->push(::Std_obj::string(x));
             				}
             			}
-HXLINE( 321)			{
-HXLINE( 321)				if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 321)					q->flush();
+HXLINE( 378)			{
+HXLINE( 378)				if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 378)					q->flush();
             				}
-HXDLIN( 321)				if (::hx::IsNull( q->b )) {
-HXLINE( 321)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_53,1);
+HXDLIN( 378)				if (::hx::IsNull( q->b )) {
+HXLINE( 378)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_57,1);
             				}
             				else {
-HXLINE( 321)					q->b->push(HX_(") AND stanza_id IN (",e8,da,d3,eb));
-            				}
-            			}
-HXLINE( 322)			{
-HXLINE( 322)				::Array< ::String > result1 = ::Array_obj< ::String >::__new(localIds->length);
-HXDLIN( 322)				{
-HXLINE( 322)					int _g3 = 0;
-HXDLIN( 322)					int _g4 = localIds->length;
-HXDLIN( 322)					while((_g3 < _g4)){
-HXLINE( 322)						_g3 = (_g3 + 1);
-HXDLIN( 322)						int i1 = (_g3 - 1);
-HXDLIN( 322)						{
-HXLINE( 322)							_hx_array_unsafe_get(localIds,i1);
-HXDLIN( 322)							result1->__unsafe_set(i1,HX_("?",3f,00,00,00));
+HXLINE( 378)					q->b->push(HX_(") AND stanza_id IN (",e8,da,d3,eb));
+            				}
+            			}
+HXLINE( 379)			{
+HXLINE( 379)				::Array< ::String > result1 = ::Array_obj< ::String >::__new(localIds->length);
+HXDLIN( 379)				{
+HXLINE( 379)					int _g3 = 0;
+HXDLIN( 379)					int _g4 = localIds->length;
+HXDLIN( 379)					while((_g3 < _g4)){
+HXLINE( 379)						_g3 = (_g3 + 1);
+HXDLIN( 379)						int i1 = (_g3 - 1);
+HXDLIN( 379)						{
+HXLINE( 379)							_hx_array_unsafe_get(localIds,i1);
+HXDLIN( 379)							result1->__unsafe_set(i1,HX_("?",3f,00,00,00));
             						}
             					}
             				}
-HXDLIN( 322)				::String x1 = result1->join(HX_(",",2c,00,00,00));
-HXDLIN( 322)				if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 322)					q->flush();
+HXDLIN( 379)				::String x1 = result1->join(HX_(",",2c,00,00,00));
+HXDLIN( 379)				if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 379)					q->flush();
             				}
-HXDLIN( 322)				if (::hx::IsNull( q->b )) {
-HXLINE( 322)					q->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(x1));
+HXDLIN( 379)				if (::hx::IsNull( q->b )) {
+HXLINE( 379)					q->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(x1));
             				}
             				else {
-HXLINE( 322)					::Array< ::String > q2 = q->b;
-HXDLIN( 322)					q2->push(::Std_obj::string(x1));
+HXLINE( 379)					::Array< ::String > q2 = q->b;
+HXDLIN( 379)					q2->push(::Std_obj::string(x1));
             				}
             			}
-HXLINE( 323)			{
-HXLINE( 323)				if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 323)					q->flush();
+HXLINE( 380)			{
+HXLINE( 380)				if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 380)					q->flush();
             				}
-HXDLIN( 323)				if (::hx::IsNull( q->b )) {
-HXLINE( 323)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_54,1);
+HXDLIN( 380)				if (::hx::IsNull( q->b )) {
+HXLINE( 380)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_58,1);
             				}
             				else {
-HXLINE( 323)					q->b->push(HX_(")",29,00,00,00));
+HXLINE( 380)					q->b->push(HX_(")",29,00,00,00));
             				}
             			}
-HXLINE( 324)			 ::borogove::persistence::SqliteDriver _hx_tmp8 = this->db;
-HXDLIN( 324)			::String _hx_tmp9 = q->toString();
-HXLINE( 316)			_hx_tmp6 = _hx_tmp8->exec(_hx_tmp9,::cpp::VirtualArray_obj::__new(2)->init(0,accountId)->init(1,1)->concat(chatIds)->concat(localIds));
+HXLINE( 381)			 ::borogove::persistence::SqliteDriver _hx_tmp8 = this->db;
+HXDLIN( 381)			::String _hx_tmp9 = q->toString();
+HXLINE( 373)			_hx_tmp6 = _hx_tmp8->exec(_hx_tmp9,::cpp::VirtualArray_obj::__new(2)->init(0,accountId)->init(1,1)->concat(chatIds)->concat(localIds));
             		}
             		else {
-HXLINE( 316)			_hx_tmp6 = ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+HXLINE( 373)			_hx_tmp6 = ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             		}
-HXDLIN( 316)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp6, ::Dynamic(new _hx_Closure_0(messages,_gthis,accountId)),null()), ::Dynamic(new _hx_Closure_2(messages,_gthis,replyTos,accountId)),null());
+HXDLIN( 373)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp6, ::Dynamic(new _hx_Closure_0(messages,_gthis,accountId)),null()), ::Dynamic(new _hx_Closure_2(messages,_gthis,replyTos,accountId)),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,storeMessages,return )
 
 void Sqlite_obj::updateMessage(::String accountId, ::borogove::ChatMessage message){
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_351_updateMessage)
-HXDLIN( 351)		this->storeMessages(accountId,::Array_obj< ::Dynamic>::__new(1)->init(0,message));
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_408_updateMessage)
+HXDLIN( 408)		this->storeMessages(accountId,::Array_obj< ::Dynamic>::__new(1)->init(0,message));
             	}
 
 
@@ -1204,8 +1208,8 @@ HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,updateMessage,(void))
 ::Dynamic Sqlite_obj::getMessage(::String accountId,::String chatId,::String serverId,::String localId){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::Sqlite,_gthis,::String,accountId) HXARGC(1)
             		::Array< ::Dynamic> _hx_run( ::haxe::iterators::ArrayIterator result){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_374_getMessage)
-HXLINE( 374)			return _gthis->hydrateMessages(accountId,result);
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_431_getMessage)
+HXLINE( 431)			return _gthis->hydrateMessages(accountId,result);
             		}
             		HX_END_LOCAL_FUNC1(return)
 
@@ -1213,131 +1217,131 @@ HXLINE( 374)			return _gthis->hydrateMessages(accountId,result);
             		::Dynamic _hx_run(::Array< ::Dynamic> messages){
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_2) HXARGC(1)
             			::Array< ::Dynamic> _hx_run(::Array< ::Dynamic> items){
-            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_381_getMessage)
-HXLINE( 381)				::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 381)				{
-HXLINE( 381)					int _g_current = 0;
-HXDLIN( 381)					while((_g_current < items->length)){
-HXLINE( 381)						_g_current = (_g_current + 1);
-HXDLIN( 381)						{
-HXLINE( 381)							 ::Dynamic x = items->__get((_g_current - 1)).StaticCast< ::Array< ::Dynamic> >()->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 381)							while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 381)								_g->push(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
+            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_438_getMessage)
+HXLINE( 438)				::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 438)				{
+HXLINE( 438)					int _g_current = 0;
+HXDLIN( 438)					while((_g_current < items->length)){
+HXLINE( 438)						_g_current = (_g_current + 1);
+HXDLIN( 438)						{
+HXLINE( 438)							 ::Dynamic x = items->__get((_g_current - 1)).StaticCast< ::Array< ::Dynamic> >()->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN( 438)							while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 438)								_g->push(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
             							}
             						}
             					}
             				}
-HXDLIN( 381)				return _g;
+HXDLIN( 438)				return _g;
             			}
             			HX_END_LOCAL_FUNC1(return)
 
             			HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_3) HXARGC(1)
             			 ::borogove::ChatMessage _hx_run(::Array< ::Dynamic> items){
-            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_381_getMessage)
-HXLINE( 381)				if ((items->length > 0)) {
-HXLINE( 381)					return items->__get(0).StaticCast<  ::borogove::ChatMessage >();
+            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_438_getMessage)
+HXLINE( 438)				if ((items->length > 0)) {
+HXLINE( 438)					return items->__get(0).StaticCast<  ::borogove::ChatMessage >();
             				}
             				else {
-HXLINE( 381)					return null();
+HXLINE( 438)					return null();
             				}
-HXDLIN( 381)				return null();
+HXDLIN( 438)				return null();
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_375_getMessage)
-HXLINE( 375)			::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(messages->length);
-HXDLIN( 375)			{
-HXLINE( 375)				int _g = 0;
-HXDLIN( 375)				int _g1 = messages->length;
-HXDLIN( 375)				while((_g < _g1)){
-HXLINE( 375)					_g = (_g + 1);
-HXDLIN( 375)					int i = (_g - 1);
-HXDLIN( 375)					{
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_432_getMessage)
+HXLINE( 432)			::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(messages->length);
+HXDLIN( 432)			{
+HXLINE( 432)				int _g = 0;
+HXDLIN( 432)				int _g1 = messages->length;
+HXDLIN( 432)				while((_g < _g1)){
+HXLINE( 432)					_g = (_g + 1);
+HXDLIN( 432)					int i = (_g - 1);
+HXDLIN( 432)					{
             						HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::borogove::persistence::Sqlite,_gthis,::String,accountId) HXARGC(1)
             						::Dynamic _hx_run(::Array< ::Dynamic> messages){
-            							HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_380_getMessage)
-HXLINE( 380)							return _gthis->hydrateReactions(accountId,messages);
+            							HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_437_getMessage)
+HXLINE( 437)							return _gthis->hydrateReactions(accountId,messages);
             						}
             						HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 376)						 ::borogove::ChatMessage message = ( ( ::borogove::ChatMessage)(_hx_array_unsafe_get(messages,i)) );
-HXDLIN( 376)						::Dynamic inValue;
-HXDLIN( 376)						if (::hx::IsNotNull( message->replyToMessage )) {
-HXLINE( 376)							inValue = _gthis->hydrateReplyTo(accountId,::Array_obj< ::Dynamic>::__new(1)->init(0,message),::Array_obj< ::Dynamic>::__new(1)->init(0, ::Dynamic(::hx::Anon_obj::Create(3)
+HXLINE( 433)						 ::borogove::ChatMessage message = ( ( ::borogove::ChatMessage)(_hx_array_unsafe_get(messages,i)) );
+HXDLIN( 433)						::Dynamic inValue;
+HXDLIN( 433)						if (::hx::IsNotNull( message->replyToMessage )) {
+HXLINE( 433)							inValue = _gthis->hydrateReplyTo(accountId,::Array_obj< ::Dynamic>::__new(1)->init(0,message),::Array_obj< ::Dynamic>::__new(1)->init(0, ::Dynamic(::hx::Anon_obj::Create(3)
             								->setFixed(0,HX_("chatId",d3,04,77,b7),chatId)
             								->setFixed(1,HX_("serverId",7e,01,b2,e2),message->replyToMessage->serverId)
             								->setFixed(2,HX_("localId",26,7a,c6,2d),message->replyToMessage->localId))));
             						}
             						else {
-HXLINE( 376)							inValue = ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(1)->init(0,message));
+HXLINE( 433)							inValue = ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(1)->init(0,message));
             						}
-HXLINE( 375)						::Dynamic inValue1 = ::thenshim::_Promise::Promise_Impl__obj::then(inValue, ::Dynamic(new _hx_Closure_1(_gthis,accountId)),null());
-HXDLIN( 375)						result->__unsafe_set(i,inValue1);
+HXLINE( 432)						::Dynamic inValue1 = ::thenshim::_Promise::Promise_Impl__obj::then(inValue, ::Dynamic(new _hx_Closure_1(_gthis,accountId)),null());
+HXDLIN( 432)						result->__unsafe_set(i,inValue1);
             					}
             				}
             			}
-HXDLIN( 375)			return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(result), ::Dynamic(new _hx_Closure_2()),null()), ::Dynamic(new _hx_Closure_3()),null());
+HXDLIN( 432)			return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::PromiseTools_obj::all(result), ::Dynamic(new _hx_Closure_2()),null()), ::Dynamic(new _hx_Closure_3()),null());
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_363_getMessage)
-HXDLIN( 363)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 364)		::String q = HX_("SELECT stanza, direction, type, status, status_text, strftime('%FT%H:%M:%fZ', created_at / 1000.0, 'unixepoch') AS timestamp, sender_id, mam_id, mam_by, sync_point FROM messages WHERE account_id=? AND chat_id=?",95,dd,7c,85);
-HXLINE( 365)		::Array< ::String > params = ::Array_obj< ::String >::__new(2)->init(0,accountId)->init(1,chatId);
-HXLINE( 366)		if (::hx::IsNotNull( serverId )) {
-HXLINE( 367)			q = (HX_("SELECT stanza, direction, type, status, status_text, strftime('%FT%H:%M:%fZ', created_at / 1000.0, 'unixepoch') AS timestamp, sender_id, mam_id, mam_by, sync_point FROM messages WHERE account_id=? AND chat_id=?",95,dd,7c,85) + HX_(" AND mam_id=?",4c,af,2b,c9));
-HXLINE( 368)			params->push(serverId);
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_420_getMessage)
+HXDLIN( 420)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 421)		::String q = HX_("SELECT stanza, direction, type, status, status_text, strftime('%FT%H:%M:%fZ', created_at / 1000.0, 'unixepoch') AS timestamp, sender_id, mam_id, mam_by, sync_point FROM messages WHERE account_id=? AND chat_id=?",95,dd,7c,85);
+HXLINE( 422)		::Array< ::String > params = ::Array_obj< ::String >::__new(2)->init(0,accountId)->init(1,chatId);
+HXLINE( 423)		if (::hx::IsNotNull( serverId )) {
+HXLINE( 424)			q = (HX_("SELECT stanza, direction, type, status, status_text, strftime('%FT%H:%M:%fZ', created_at / 1000.0, 'unixepoch') AS timestamp, sender_id, mam_id, mam_by, sync_point FROM messages WHERE account_id=? AND chat_id=?",95,dd,7c,85) + HX_(" AND mam_id=?",4c,af,2b,c9));
+HXLINE( 425)			params->push(serverId);
             		}
             		else {
-HXLINE( 369)			if (::hx::IsNotNull( localId )) {
-HXLINE( 370)				q = (HX_("SELECT stanza, direction, type, status, status_text, strftime('%FT%H:%M:%fZ', created_at / 1000.0, 'unixepoch') AS timestamp, sender_id, mam_id, mam_by, sync_point FROM messages WHERE account_id=? AND chat_id=?",95,dd,7c,85) + HX_(" AND stanza_id=?",be,a8,32,e3));
-HXLINE( 371)				params->push(localId);
+HXLINE( 426)			if (::hx::IsNotNull( localId )) {
+HXLINE( 427)				q = (HX_("SELECT stanza, direction, type, status, status_text, strftime('%FT%H:%M:%fZ', created_at / 1000.0, 'unixepoch') AS timestamp, sender_id, mam_id, mam_by, sync_point FROM messages WHERE account_id=? AND chat_id=?",95,dd,7c,85) + HX_(" AND stanza_id=?",be,a8,32,e3));
+HXLINE( 428)				params->push(localId);
             			}
             		}
-HXLINE( 373)		q = (q + HX_("LIMIT 1",ec,af,c7,0e));
-HXLINE( 374)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(q,params), ::Dynamic(new _hx_Closure_0(_gthis,accountId)),null()), ::Dynamic(new _hx_Closure_4(_gthis,chatId,accountId)),null());
+HXLINE( 430)		q = (q + HX_("LIMIT 1",ec,af,c7,0e));
+HXLINE( 431)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(q,params), ::Dynamic(new _hx_Closure_0(_gthis,accountId)),null()), ::Dynamic(new _hx_Closure_4(_gthis,chatId,accountId)),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC4(Sqlite_obj,getMessage,return )
 
 void Sqlite_obj::getMessage__fromC(::String accountId,::String chatId,::String serverId,::String localId,::cpp::Function< void  (void*,void*) > handler,void* handler__context){
-            	HX_STACKFRAME(&_hx_pos_e0e41eef74e41160_313_getMessage__fromC)
-HXDLIN( 313)		if (::hx::IsNull( handler )) {
-HXDLIN( 313)			this->getMessage(accountId,chatId,serverId,localId);
+            	HX_STACKFRAME(&_hx_pos_e0e41eef74e41160_337_getMessage__fromC)
+HXDLIN( 337)		if (::hx::IsNull( handler )) {
+HXDLIN( 337)			this->getMessage(accountId,chatId,serverId,localId);
             		}
             		else {
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (void* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
             			void _hx_run( ::borogove::ChatMessage v){
-            				HX_STACKFRAME(&_hx_pos_e0e41eef74e41160_313_getMessage__fromC)
-HXDLIN( 313)				::cpp::Function< void  (void*,void*) > handler1 = handler;
-HXLINE( 297)				 ::Dynamic haxeObject = v;
-HXDLIN( 297)				void* ptr = haxeObject.mPtr;
-HXDLIN( 297)				::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
-HXDLIN( 297)				{
-HXLINE( 297)					 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 297)					if (::hx::IsNull( store )) {
-HXLINE( 297)						store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            				HX_STACKFRAME(&_hx_pos_e0e41eef74e41160_337_getMessage__fromC)
+HXDLIN( 337)				::cpp::Function< void  (void*,void*) > handler1 = handler;
+HXLINE( 314)				 ::Dynamic haxeObject = v;
+HXDLIN( 314)				void* ptr = haxeObject.mPtr;
+HXDLIN( 314)				::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(ptr);
+HXDLIN( 314)				{
+HXLINE( 314)					 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 314)					if (::hx::IsNull( store )) {
+HXLINE( 314)						store =  ::Dynamic(::hx::Anon_obj::Create(2)
             							->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             							->setFixed(1,HX_("value",71,7f,b8,31),haxeObject));
-HXDLIN( 297)						::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXDLIN( 314)						::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             					}
             					else {
-HXLINE( 297)						::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE( 314)						::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             					}
             				}
-HXLINE( 313)				handler1(ptr,handler__context);
+HXLINE( 337)				handler1(ptr,handler__context);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::cpp::Function< void  (void* HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
             			void _hx_run( ::Dynamic e){
-            				HX_STACKFRAME(&_hx_pos_e0e41eef74e41160_313_getMessage__fromC)
-HXDLIN( 313)				handler(null(),handler__context);
+            				HX_STACKFRAME(&_hx_pos_e0e41eef74e41160_337_getMessage__fromC)
+HXDLIN( 337)				handler(null(),handler__context);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-HXDLIN( 313)			::thenshim::_Promise::Promise_Impl__obj::then(this->getMessage(accountId,chatId,serverId,localId), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
+HXDLIN( 337)			::thenshim::_Promise::Promise_Impl__obj::then(this->getMessage(accountId,chatId,serverId,localId), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
             		}
             	}
 
@@ -1345,109 +1349,132 @@ HXDLIN( 313)			::thenshim::_Promise::Promise_Impl__obj::then(this->getMessage(ac
 ::Dynamic Sqlite_obj::getMessages(::String accountId,::String chatId,::String time,::String op){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::Sqlite,_gthis,::String,accountId) HXARGC(1)
             		::Array< ::Dynamic> _hx_run( ::haxe::iterators::ArrayIterator result){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_412_getMessages)
-HXLINE( 412)			return _gthis->hydrateMessages(accountId,result);
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_478_getMessages)
+HXLINE( 478)			return _gthis->hydrateMessages(accountId,result);
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_1, ::borogove::persistence::Sqlite,_gthis,::String,op,::String,accountId) HXARGC(1)
             		::Dynamic _hx_run(::Array< ::Dynamic> iter){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_412_getMessages)
-HXLINE( 413)			::Array< ::Dynamic> arr = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 414)			::Array< ::Dynamic> replyTos = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 415)			{
-HXLINE( 415)				int _g = 0;
-HXDLIN( 415)				while((_g < iter->length)){
-HXLINE( 415)					 ::borogove::ChatMessage message = iter->__get(_g).StaticCast<  ::borogove::ChatMessage >();
-HXDLIN( 415)					_g = (_g + 1);
-HXLINE( 416)					if (::hx::IsNotNull( message )) {
-HXLINE( 417)						arr->push(message);
-HXLINE( 418)						bool _hx_tmp;
-HXDLIN( 418)						if (::hx::IsNotNull( message->replyToMessage )) {
-HXLINE( 418)							_hx_tmp = ::hx::IsNull( message->replyToMessage->serverIdBy );
-            						}
-            						else {
-HXLINE( 418)							_hx_tmp = false;
-            						}
-HXDLIN( 418)						if (_hx_tmp) {
-HXLINE( 419)							::String _hx_tmp1 = message->chatId();
-HXDLIN( 419)							replyTos->push( ::Dynamic(::hx::Anon_obj::Create(3)
-            								->setFixed(0,HX_("chatId",d3,04,77,b7),_hx_tmp1)
-            								->setFixed(1,HX_("serverId",7e,01,b2,e2),message->replyToMessage->serverId)
-            								->setFixed(2,HX_("localId",26,7a,c6,2d),message->replyToMessage->localId)));
-            						}
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_478_getMessages)
+HXLINE( 479)			::Array< ::Dynamic> arr = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 480)			::Array< ::Dynamic> replyTos = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 481)			{
+HXLINE( 481)				int _g = 0;
+HXDLIN( 481)				while((_g < iter->length)){
+HXLINE( 481)					 ::borogove::ChatMessage message = iter->__get(_g).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN( 481)					_g = (_g + 1);
+HXLINE( 482)					arr->push(message);
+HXLINE( 483)					bool _hx_tmp;
+HXDLIN( 483)					if (::hx::IsNotNull( message->replyToMessage )) {
+HXLINE( 483)						_hx_tmp = ::hx::IsNull( message->replyToMessage->serverIdBy );
+            					}
+            					else {
+HXLINE( 483)						_hx_tmp = false;
+            					}
+HXDLIN( 483)					if (_hx_tmp) {
+HXLINE( 484)						::String _hx_tmp1 = message->chatId();
+HXDLIN( 484)						replyTos->push( ::Dynamic(::hx::Anon_obj::Create(3)
+            							->setFixed(0,HX_("chatId",d3,04,77,b7),_hx_tmp1)
+            							->setFixed(1,HX_("serverId",7e,01,b2,e2),message->replyToMessage->serverId)
+            							->setFixed(2,HX_("localId",26,7a,c6,2d),message->replyToMessage->localId)));
             					}
             				}
             			}
-HXLINE( 423)			bool _hx_tmp2;
-HXDLIN( 423)			if ((op != HX_("<",3c,00,00,00))) {
-HXLINE( 423)				_hx_tmp2 = (op == HX_("<=",81,34,00,00));
+HXLINE( 487)			bool _hx_tmp2;
+HXDLIN( 487)			if ((op != HX_("<",3c,00,00,00))) {
+HXLINE( 487)				_hx_tmp2 = (op == HX_("<=",81,34,00,00));
             			}
             			else {
-HXLINE( 423)				_hx_tmp2 = true;
+HXLINE( 487)				_hx_tmp2 = true;
             			}
-HXDLIN( 423)			if (_hx_tmp2) {
-HXLINE( 424)				arr->reverse();
+HXDLIN( 487)			if (_hx_tmp2) {
+HXLINE( 488)				arr->reverse();
             			}
-HXLINE( 426)			return _gthis->hydrateReplyTo(accountId,arr,replyTos);
+HXLINE( 490)			return _gthis->hydrateReplyTo(accountId,arr,replyTos);
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_2, ::borogove::persistence::Sqlite,_gthis,::String,accountId) HXARGC(1)
             		::Dynamic _hx_run(::Array< ::Dynamic> messages){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_427_getMessages)
-HXLINE( 427)			return _gthis->hydrateReactions(accountId,messages);
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_491_getMessages)
+HXLINE( 491)			return _gthis->hydrateReactions(accountId,messages);
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_385_getMessages)
-HXDLIN( 385)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 386)		::String q = HX_("SELECT\n\t\t\tcorrection_id AS stanza_id,\n\t\t\tversions.stanza,\n\t\t\tjson_group_object(CASE WHEN versions.mam_id IS NULL OR versions.mam_id='' THEN versions.stanza_id ELSE versions.mam_id END, strftime('%FT%H:%M:%fZ', versions.created_at / 1000.0, 'unixepoch')) AS version_times,\n\t\t\tjson_group_object(CASE WHEN versions.mam_id IS NULL OR versions.mam_id='' THEN versions.stanza_id ELSE versions.mam_id END, versions.stanza) AS versions,\n\t\t\tmessages.direction,\n\t\t\tmessages.type,\n\t\t\tmessages.status,\n\t\t\tmessages.status_text,\n\t\t\tstrftime('%FT%H:%M:%fZ', messages.created_at / 1000.0, 'unixepoch') AS timestamp,\n\t\t\tmessages.sender_id,\n\t\t\tmessages.mam_id,\n\t\t\tmessages.mam_by,\n\t\t\tmessages.sync_point,\n\t\t\tMAX(versions.created_at)\n\t\t\tFROM messages INNER JOIN messages versions USING (correction_id, sender_id) WHERE (messages.stanza_id IS NULL OR messages.stanza_id='' OR messages.stanza_id=correction_id) AND messages.account_id=? AND messages.chat_id=?",e9,a2,7e,af);
-HXLINE( 402)		::Array< ::String > params = ::Array_obj< ::String >::__new(2)->init(0,accountId)->init(1,chatId);
-HXLINE( 403)		if (::hx::IsNotNull( time )) {
-HXLINE( 404)			q = (HX_("SELECT\n\t\t\tcorrection_id AS stanza_id,\n\t\t\tversions.stanza,\n\t\t\tjson_group_object(CASE WHEN versions.mam_id IS NULL OR versions.mam_id='' THEN versions.stanza_id ELSE versions.mam_id END, strftime('%FT%H:%M:%fZ', versions.created_at / 1000.0, 'unixepoch')) AS version_times,\n\t\t\tjson_group_object(CASE WHEN versions.mam_id IS NULL OR versions.mam_id='' THEN versions.stanza_id ELSE versions.mam_id END, versions.stanza) AS versions,\n\t\t\tmessages.direction,\n\t\t\tmessages.type,\n\t\t\tmessages.status,\n\t\t\tmessages.status_text,\n\t\t\tstrftime('%FT%H:%M:%fZ', messages.created_at / 1000.0, 'unixepoch') AS timestamp,\n\t\t\tmessages.sender_id,\n\t\t\tmessages.mam_id,\n\t\t\tmessages.mam_by,\n\t\t\tmessages.sync_point,\n\t\t\tMAX(versions.created_at)\n\t\t\tFROM messages INNER JOIN messages versions USING (correction_id, sender_id) WHERE (messages.stanza_id IS NULL OR messages.stanza_id='' OR messages.stanza_id=correction_id) AND messages.account_id=? AND messages.chat_id=?",e9,a2,7e,af) + ((HX_(" AND messages.created_at ",3d,a0,ae,bb) + op) + HX_("CAST(unixepoch(?, 'subsec') * 1000 AS INTEGER)",17,de,5d,f8)));
-HXLINE( 405)			params->push(time);
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_442_getMessages)
+HXDLIN( 442)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 443)		::String q = HX_("WITH page AS (SELECT stanza_id, mam_id FROM messages where account_id=? AND chat_id=? AND (stanza_id IS NULL OR stanza_id='' OR stanza_id=correction_id)",a0,7a,6e,a0);
+HXLINE( 444)		::Array< ::String > params = ::Array_obj< ::String >::__new(2)->init(0,accountId)->init(1,chatId);
+HXLINE( 445)		if (::hx::IsNotNull( time )) {
+HXLINE( 446)			q = (HX_("WITH page AS (SELECT stanza_id, mam_id FROM messages where account_id=? AND chat_id=? AND (stanza_id IS NULL OR stanza_id='' OR stanza_id=correction_id)",a0,7a,6e,a0) + ((HX_(" AND messages.created_at ",3d,a0,ae,bb) + op) + HX_("CAST(unixepoch(?, 'subsec') * 1000 AS INTEGER)",17,de,5d,f8)));
+HXLINE( 447)			params->push(time);
             		}
-HXLINE( 407)		q = (q + HX_(" GROUP BY correction_id, messages.sender_id ORDER BY messages.created_at",6a,b6,3b,02));
-HXLINE( 408)		bool _hx_tmp;
-HXDLIN( 408)		if ((op != HX_("<",3c,00,00,00))) {
-HXLINE( 408)			_hx_tmp = (op == HX_("<=",81,34,00,00));
+HXLINE( 449)		q = (q + HX_(" ORDER BY messages.created_at",55,af,d5,29));
+HXLINE( 450)		bool _hx_tmp;
+HXDLIN( 450)		if ((op != HX_("<",3c,00,00,00))) {
+HXLINE( 450)			_hx_tmp = (op == HX_("<=",81,34,00,00));
             		}
             		else {
-HXLINE( 408)			_hx_tmp = true;
+HXLINE( 450)			_hx_tmp = true;
             		}
-HXDLIN( 408)		if (_hx_tmp) {
-HXLINE( 408)			q = (q + HX_(" DESC",71,b6,f9,99));
+HXDLIN( 450)		if (_hx_tmp) {
+HXLINE( 450)			q = (q + HX_(" DESC",71,b6,f9,99));
             		}
-HXLINE( 409)		q = (q + HX_(", messages.ROWID",a7,cc,85,7b));
-HXLINE( 410)		bool _hx_tmp1;
-HXDLIN( 410)		if ((op != HX_("<",3c,00,00,00))) {
-HXLINE( 410)			_hx_tmp1 = (op == HX_("<=",81,34,00,00));
+HXLINE( 451)		q = (q + HX_(", messages.ROWID",a7,cc,85,7b));
+HXLINE( 452)		bool _hx_tmp1;
+HXDLIN( 452)		if ((op != HX_("<",3c,00,00,00))) {
+HXLINE( 452)			_hx_tmp1 = (op == HX_("<=",81,34,00,00));
             		}
             		else {
-HXLINE( 410)			_hx_tmp1 = true;
+HXLINE( 452)			_hx_tmp1 = true;
             		}
-HXDLIN( 410)		if (_hx_tmp1) {
-HXLINE( 410)			q = (q + HX_(" DESC",71,b6,f9,99));
+HXDLIN( 452)		if (_hx_tmp1) {
+HXLINE( 452)			q = (q + HX_(" DESC",71,b6,f9,99));
             		}
-HXLINE( 411)		q = (q + HX_(" LIMIT 50",60,62,1f,3e));
-HXLINE( 412)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(q,params), ::Dynamic(new _hx_Closure_0(_gthis,accountId)),null()), ::Dynamic(new _hx_Closure_1(_gthis,op,accountId)),null()), ::Dynamic(new _hx_Closure_2(_gthis,accountId)),null());
+HXLINE( 453)		q = (q + HX_(" LIMIT 50) ",37,de,84,8e));
+HXLINE( 454)		q = (q + HX_("SELECT\n\t\t\tcorrection_id AS stanza_id,\n\t\t\tversions.stanza,\n\t\t\tjson_group_object(CASE WHEN versions.mam_id IS NULL OR versions.mam_id='' THEN versions.stanza_id ELSE versions.mam_id END, strftime('%FT%H:%M:%fZ', versions.created_at / 1000.0, 'unixepoch')) AS version_times,\n\t\t\tjson_group_object(CASE WHEN versions.mam_id IS NULL OR versions.mam_id='' THEN versions.stanza_id ELSE versions.mam_id END, versions.stanza) AS versions,\n\t\t\tmessages.direction,\n\t\t\tmessages.type,\n\t\t\tmessages.status,\n\t\t\tmessages.status_text,\n\t\t\tstrftime('%FT%H:%M:%fZ', messages.created_at / 1000.0, 'unixepoch') AS timestamp,\n\t\t\tmessages.sender_id,\n\t\t\tmessages.mam_id,\n\t\t\tmessages.mam_by,\n\t\t\tmessages.sync_point,\n\t\t\tMAX(versions.created_at)\n\t\t\tFROM messages INNER JOIN messages versions USING (correction_id, sender_id) WHERE (messages.stanza_id, messages.mam_id) IN (SELECT * FROM page) AND messages.account_id=? AND messages.chat_id=? GROUP BY correction_id, messages.sender_id",a3,ed,c1,0b));
+HXLINE( 470)		q = (q + HX_(" ORDER BY messages.created_at",55,af,d5,29));
+HXLINE( 471)		bool _hx_tmp2;
+HXDLIN( 471)		if ((op != HX_("<",3c,00,00,00))) {
+HXLINE( 471)			_hx_tmp2 = (op == HX_("<=",81,34,00,00));
+            		}
+            		else {
+HXLINE( 471)			_hx_tmp2 = true;
+            		}
+HXDLIN( 471)		if (_hx_tmp2) {
+HXLINE( 471)			q = (q + HX_(" DESC",71,b6,f9,99));
+            		}
+HXLINE( 472)		q = (q + HX_(", messages.ROWID",a7,cc,85,7b));
+HXLINE( 473)		bool _hx_tmp3;
+HXDLIN( 473)		if ((op != HX_("<",3c,00,00,00))) {
+HXLINE( 473)			_hx_tmp3 = (op == HX_("<=",81,34,00,00));
+            		}
+            		else {
+HXLINE( 473)			_hx_tmp3 = true;
+            		}
+HXDLIN( 473)		if (_hx_tmp3) {
+HXLINE( 473)			q = (q + HX_(" DESC",71,b6,f9,99));
+            		}
+HXLINE( 475)		params->push(accountId);
+HXLINE( 476)		params->push(chatId);
+HXLINE( 478)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(q,params), ::Dynamic(new _hx_Closure_0(_gthis,accountId)),null()), ::Dynamic(new _hx_Closure_1(_gthis,op,accountId)),null()), ::Dynamic(new _hx_Closure_2(_gthis,accountId)),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC4(Sqlite_obj,getMessages,return )
 
 ::Dynamic Sqlite_obj::getMessagesBefore(::String accountId,::String chatId,::String beforeId,::String beforeTime){
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_432_getMessagesBefore)
-HXDLIN( 432)		return this->getMessages(accountId,chatId,beforeTime,HX_("<",3c,00,00,00));
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_496_getMessagesBefore)
+HXDLIN( 496)		return this->getMessages(accountId,chatId,beforeTime,HX_("<",3c,00,00,00));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC4(Sqlite_obj,getMessagesBefore,return )
 
 ::Dynamic Sqlite_obj::getMessagesAfter(::String accountId,::String chatId,::String afterId,::String afterTime){
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_437_getMessagesAfter)
-HXDLIN( 437)		return this->getMessages(accountId,chatId,afterTime,HX_(">",3e,00,00,00));
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_501_getMessagesAfter)
+HXDLIN( 501)		return this->getMessages(accountId,chatId,afterTime,HX_(">",3e,00,00,00));
             	}
 
 
@@ -1456,332 +1483,130 @@ HX_DEFINE_DYNAMIC_FUNC4(Sqlite_obj,getMessagesAfter,return )
 ::Dynamic Sqlite_obj::getMessagesAround(::String accountId,::String chatId,::String aroundId,::String aroundTime){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_2, ::borogove::persistence::Sqlite,_gthis,::String,chatId,::String,accountId) HXARGC(1)
             		::Dynamic _hx_run(::String aroundTime){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_453_getMessagesAround)
-HXLINE( 454)			::Dynamic _hx_tmp = _gthis->getMessages(accountId,chatId,aroundTime,HX_("<",3c,00,00,00));
-HXLINE( 453)			return ::thenshim::PromiseTools_obj::all(::Array_obj< ::Dynamic>::__new(2)->init(0,_hx_tmp)->init(1,_gthis->getMessages(accountId,chatId,aroundTime,HX_(">=",3f,36,00,00))));
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_517_getMessagesAround)
+HXLINE( 518)			::Dynamic _hx_tmp = _gthis->getMessages(accountId,chatId,aroundTime,HX_("<",3c,00,00,00));
+HXLINE( 517)			return ::thenshim::PromiseTools_obj::all(::Array_obj< ::Dynamic>::__new(2)->init(0,_hx_tmp)->init(1,_gthis->getMessages(accountId,chatId,aroundTime,HX_(">=",3f,36,00,00))));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_3) HXARGC(1)
             		::Array< ::Dynamic> _hx_run(::Array< ::Dynamic> results){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_457_getMessagesAround)
-HXLINE( 457)			::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 457)			{
-HXLINE( 457)				int _g_current = 0;
-HXDLIN( 457)				while((_g_current < results->length)){
-HXLINE( 457)					_g_current = (_g_current + 1);
-HXDLIN( 457)					{
-HXLINE( 457)						 ::Dynamic x = results->__get((_g_current - 1)).StaticCast< ::Array< ::Dynamic> >()->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 457)						while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 457)							_g->push(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_521_getMessagesAround)
+HXLINE( 521)			::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 521)			{
+HXLINE( 521)				int _g_current = 0;
+HXDLIN( 521)				while((_g_current < results->length)){
+HXLINE( 521)					_g_current = (_g_current + 1);
+HXDLIN( 521)					{
+HXLINE( 521)						 ::Dynamic x = results->__get((_g_current - 1)).StaticCast< ::Array< ::Dynamic> >()->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN( 521)						while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 521)							_g->push(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
             						}
             					}
             				}
             			}
-HXDLIN( 457)			return _g;
+HXDLIN( 521)			return _g;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_441_getMessagesAround)
-HXDLIN( 441)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 442)		::Dynamic _hx_tmp;
-HXDLIN( 442)		if (::hx::IsNull( aroundTime )) {
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_505_getMessagesAround)
+HXDLIN( 505)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 506)		::Dynamic _hx_tmp;
+HXDLIN( 506)		if (::hx::IsNull( aroundTime )) {
             			HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_1, ::borogove::persistence::Sqlite,_gthis,::String,chatId,::String,aroundId,::String,accountId) HXARGC(1)
             			::Dynamic _hx_run( ::borogove::ChatMessage m){
-            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_444_getMessagesAround)
-HXLINE( 444)				if (::hx::IsNotNull( m )) {
-HXLINE( 445)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(m->timestamp);
+            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_508_getMessagesAround)
+HXLINE( 508)				if (::hx::IsNotNull( m )) {
+HXLINE( 509)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(m->timestamp);
             				}
             				else {
             					HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             					::String _hx_run( ::borogove::ChatMessage m){
-            						HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_447_getMessagesAround)
-HXLINE( 447)						if (::hx::IsNotNull( m )) {
-HXLINE( 447)							return m->timestamp;
+            						HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_511_getMessagesAround)
+HXLINE( 511)						if (::hx::IsNotNull( m )) {
+HXLINE( 511)							return m->timestamp;
             						}
             						else {
-HXLINE( 447)							return null();
+HXLINE( 511)							return null();
             						}
-HXDLIN( 447)						return null();
+HXDLIN( 511)						return null();
             					}
             					HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 447)					return ::thenshim::_Promise::Promise_Impl__obj::then(_gthis->getMessage(accountId,chatId,null(),aroundId), ::Dynamic(new _hx_Closure_0()),null());
+HXLINE( 511)					return ::thenshim::_Promise::Promise_Impl__obj::then(_gthis->getMessage(accountId,chatId,null(),aroundId), ::Dynamic(new _hx_Closure_0()),null());
             				}
-HXLINE( 444)				return null();
+HXLINE( 508)				return null();
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 442)			_hx_tmp = ::thenshim::_Promise::Promise_Impl__obj::then(this->getMessage(accountId,chatId,aroundId,null()), ::Dynamic(new _hx_Closure_1(_gthis,chatId,aroundId,accountId)),null());
+HXLINE( 506)			_hx_tmp = ::thenshim::_Promise::Promise_Impl__obj::then(this->getMessage(accountId,chatId,aroundId,null()), ::Dynamic(new _hx_Closure_1(_gthis,chatId,aroundId,accountId)),null());
             		}
             		else {
-HXLINE( 442)			_hx_tmp = ::thenshim::_Promise::Promise_Impl__obj::resolve(aroundTime);
+HXLINE( 506)			_hx_tmp = ::thenshim::_Promise::Promise_Impl__obj::resolve(aroundTime);
             		}
-HXDLIN( 442)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp, ::Dynamic(new _hx_Closure_2(_gthis,chatId,accountId)),null()), ::Dynamic(new _hx_Closure_3()),null());
+HXDLIN( 506)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp, ::Dynamic(new _hx_Closure_2(_gthis,chatId,accountId)),null()), ::Dynamic(new _hx_Closure_3()),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC4(Sqlite_obj,getMessagesAround,return )
 
-::Dynamic Sqlite_obj::getChatsUnreadDetails(::String accountId,::Array< ::Dynamic> chats){
-            		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::Sqlite,_gthis,::Array< ::Dynamic>,chats,::String,accountId) HXARGC(1)
-            		::Dynamic _hx_run( ::Dynamic _){
-            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_466_getChatsUnreadDetails)
-HXLINE( 467)			::cpp::VirtualArray params = ::cpp::VirtualArray_obj::__new(1)->init(0,accountId);
-HXLINE( 469)			 ::StringBuf subq =  ::StringBuf_obj::__alloc( HX_CTX );
-HXLINE( 470)			{
-HXLINE( 470)				if (::hx::IsNotNull( subq->charBuf )) {
-HXLINE( 470)					subq->flush();
-            				}
-HXDLIN( 470)				if (::hx::IsNull( subq->b )) {
-HXLINE( 470)					subq->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_87,1);
-            				}
-            				else {
-HXLINE( 470)					subq->b->push(HX_("SELECT chat_id, ROWID as row, MAX(created_at) AS created_at FROM messages WHERE account_id=?",d0,69,08,92));
-            				}
-            			}
-HXLINE( 471)			{
-HXLINE( 471)				if (::hx::IsNotNull( subq->charBuf )) {
-HXLINE( 471)					subq->flush();
-            				}
-HXDLIN( 471)				if (::hx::IsNull( subq->b )) {
-HXLINE( 471)					subq->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_88,1);
-            				}
-            				else {
-HXLINE( 471)					subq->b->push(HX_(" AND chat_id IN (",14,bd,7b,de));
-            				}
-            			}
-HXLINE( 472)			{
-HXLINE( 472)				int _g_current = 0;
-HXDLIN( 472)				::Array< ::Dynamic> _g_array = chats;
-HXDLIN( 472)				while((_g_current < _g_array->length)){
-HXLINE( 472)					 ::borogove::Chat _g_value = _g_array->__get(_g_current).StaticCast<  ::borogove::Chat >();
-HXDLIN( 472)					_g_current = (_g_current + 1);
-HXDLIN( 472)					{
-HXLINE( 473)						if (((_g_current - 1) != 0)) {
-HXLINE( 473)							if (::hx::IsNotNull( subq->charBuf )) {
-HXLINE( 473)								subq->flush();
-            							}
-HXDLIN( 473)							if (::hx::IsNull( subq->b )) {
-HXLINE( 473)								subq->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_89,1);
-            							}
-            							else {
-HXLINE( 473)								subq->b->push(HX_(",",2c,00,00,00));
-            							}
-            						}
-HXLINE( 474)						{
-HXLINE( 474)							if (::hx::IsNotNull( subq->charBuf )) {
-HXLINE( 474)								subq->flush();
-            							}
-HXDLIN( 474)							if (::hx::IsNull( subq->b )) {
-HXLINE( 474)								subq->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_90,1);
-            							}
-            							else {
-HXLINE( 474)								subq->b->push(HX_("?",3f,00,00,00));
-            							}
-            						}
-HXLINE( 475)						params->push(_g_value->chatId);
-            					}
-            				}
-            			}
-HXLINE( 477)			{
-HXLINE( 477)				if (::hx::IsNotNull( subq->charBuf )) {
-HXLINE( 477)					subq->flush();
-            				}
-HXDLIN( 477)				if (::hx::IsNull( subq->b )) {
-HXLINE( 477)					subq->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_91,1);
-            				}
-            				else {
-HXLINE( 477)					subq->b->push(HX_(") AND (mam_id IN (",64,f4,1c,69));
-            				}
-            			}
-HXLINE( 478)			bool didOne = false;
-HXLINE( 479)			{
-HXLINE( 479)				int _g = 0;
-HXDLIN( 479)				while((_g < chats->length)){
-HXLINE( 479)					 ::borogove::Chat chat = chats->__get(_g).StaticCast<  ::borogove::Chat >();
-HXDLIN( 479)					_g = (_g + 1);
-HXLINE( 480)					if (::hx::IsNotNull( chat->readUpTo() )) {
-HXLINE( 481)						if (didOne) {
-HXLINE( 481)							if (::hx::IsNotNull( subq->charBuf )) {
-HXLINE( 481)								subq->flush();
-            							}
-HXDLIN( 481)							if (::hx::IsNull( subq->b )) {
-HXLINE( 481)								subq->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_92,1);
-            							}
-            							else {
-HXLINE( 481)								subq->b->push(HX_(",",2c,00,00,00));
-            							}
-            						}
-HXLINE( 482)						{
-HXLINE( 482)							if (::hx::IsNotNull( subq->charBuf )) {
-HXLINE( 482)								subq->flush();
-            							}
-HXDLIN( 482)							if (::hx::IsNull( subq->b )) {
-HXLINE( 482)								subq->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_93,1);
-            							}
-            							else {
-HXLINE( 482)								subq->b->push(HX_("?",3f,00,00,00));
-            							}
-            						}
-HXLINE( 483)						params->push(chat->readUpTo());
-HXLINE( 484)						didOne = true;
-            					}
-            				}
-            			}
-HXLINE( 487)			{
-HXLINE( 487)				if (::hx::IsNotNull( subq->charBuf )) {
-HXLINE( 487)					subq->flush();
-            				}
-HXDLIN( 487)				if (::hx::IsNull( subq->b )) {
-HXLINE( 487)					subq->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_94,1);
-            				}
-            				else {
-HXLINE( 487)					subq->b->push(HX_(") OR direction=?) GROUP BY chat_id",cc,ab,94,e3));
-            				}
-            			}
-HXLINE( 488)			params->push(1);
-HXLINE( 490)			 ::StringBuf q =  ::StringBuf_obj::__alloc( HX_CTX );
-HXLINE( 491)			{
-HXLINE( 491)				if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 491)					q->flush();
-            				}
-HXDLIN( 491)				if (::hx::IsNull( q->b )) {
-HXLINE( 491)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_95,1);
-            				}
-            				else {
-HXLINE( 491)					q->b->push(HX_("SELECT chat_id AS chatId, stanza, direction, type, status, status_text, sender_id, mam_id, mam_by, sync_point, CASE WHEN subq.created_at IS NULL THEN COUNT(*) ELSE COUNT(*) - 1 END AS unreadCount, strftime('%FT%H:%M:%fZ', MAX(messages.created_at) / 1000.0, 'unixepoch') AS timestamp FROM messages LEFT JOIN (",42,d1,dc,39));
-            				}
-            			}
-HXLINE( 492)			{
-HXLINE( 492)				::String x = subq->toString();
-HXDLIN( 492)				if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 492)					q->flush();
-            				}
-HXDLIN( 492)				if (::hx::IsNull( q->b )) {
-HXLINE( 492)					q->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(x));
-            				}
-            				else {
-HXLINE( 492)					::Array< ::String > q1 = q->b;
-HXDLIN( 492)					q1->push(::Std_obj::string(x));
-            				}
-            			}
-HXLINE( 493)			{
-HXLINE( 493)				if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 493)					q->flush();
-            				}
-HXDLIN( 493)				if (::hx::IsNull( q->b )) {
-HXLINE( 493)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_96,1);
-            				}
-            				else {
-HXLINE( 493)					q->b->push(HX_(") subq USING (chat_id) WHERE account_id=? AND (stanza_id IS NULL OR stanza_id='' OR stanza_id=correction_id) AND chat_id IN (",e7,a1,32,e5));
-            				}
-            			}
-HXLINE( 494)			params->push(accountId);
-HXLINE( 495)			{
-HXLINE( 495)				int _g_current1 = 0;
-HXDLIN( 495)				::Array< ::Dynamic> _g_array1 = chats;
-HXDLIN( 495)				while((_g_current1 < _g_array1->length)){
-HXLINE( 495)					 ::borogove::Chat _g_value1 = _g_array1->__get(_g_current1).StaticCast<  ::borogove::Chat >();
-HXDLIN( 495)					_g_current1 = (_g_current1 + 1);
-HXDLIN( 495)					{
-HXLINE( 496)						if (((_g_current1 - 1) != 0)) {
-HXLINE( 496)							if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 496)								q->flush();
-            							}
-HXDLIN( 496)							if (::hx::IsNull( q->b )) {
-HXLINE( 496)								q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_97,1);
-            							}
-            							else {
-HXLINE( 496)								q->b->push(HX_(",",2c,00,00,00));
-            							}
-            						}
-HXLINE( 497)						{
-HXLINE( 497)							if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 497)								q->flush();
-            							}
-HXDLIN( 497)							if (::hx::IsNull( q->b )) {
-HXLINE( 497)								q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_98,1);
-            							}
-            							else {
-HXLINE( 497)								q->b->push(HX_("?",3f,00,00,00));
-            							}
-            						}
-HXLINE( 498)						params->push(_g_value1->chatId);
-            					}
-            				}
+::Dynamic Sqlite_obj::getChatUnreadDetails(::String accountId, ::borogove::Chat chat){
+            		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::Sqlite,_gthis, ::borogove::Chat,chat,::String,accountId) HXARGC(1)
+            		 ::Dynamic _hx_run( ::haxe::iterators::ArrayIterator result){
+            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_529_getChatUnreadDetails)
+HXLINE( 530)			 ::Dynamic row = result->array->__get(result->current++);
+HXLINE( 531)			::Array< ::Dynamic> lastMessage;
+HXDLIN( 531)			if (::hx::IsNull( row->__Field(HX_("stanza",f5,5d,f7,05),::hx::paccDynamic) )) {
+HXLINE( 531)				lastMessage = ::Array_obj< ::Dynamic>::__new(0);
             			}
-HXLINE( 500)			{
-HXLINE( 500)				if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 500)					q->flush();
-            				}
-HXDLIN( 500)				if (::hx::IsNull( q->b )) {
-HXLINE( 500)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_99,1);
-            				}
-            				else {
-HXLINE( 500)					q->b->push(HX_(") AND (subq.created_at IS NULL OR messages.created_at > subq.created_at OR (messages.created_at=subq.created_at AND messages.ROWID >= subq.row)) GROUP BY chat_id;",58,6f,52,ea));
-            				}
+            			else {
+HXLINE( 531)				lastMessage = _gthis->hydrateMessages(accountId, ::haxe::iterators::ArrayIterator_obj::__alloc( HX_CTX ,::cpp::VirtualArray_obj::__new(1)->init(0,row)));
             			}
-HXLINE( 501)			 ::borogove::persistence::SqliteDriver _gthis1 = _gthis->db;
-HXDLIN( 501)			return _gthis1->exec(q->toString(),params);
+HXLINE( 532)			return  ::Dynamic(::hx::Anon_obj::Create(3)
+            				->setFixed(0,HX_("message",c7,35,11,9a),lastMessage->__get(0).StaticCast<  ::borogove::ChatMessage >())
+            				->setFixed(1,HX_("unreadCount",20,18,f1,a0), ::Dynamic(row->__Field(HX_("unreadCount",20,18,f1,a0),::hx::paccDynamic)))
+            				->setFixed(2,HX_("chatId",d3,04,77,b7),chat->chatId));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_2) HXARGC(1)
-            		::cpp::VirtualArray _hx_run( ::haxe::iterators::ArrayIterator result){
-            			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::haxe::iterators::ArrayIterator,result) HXARGC(0)
-            			 ::haxe::iterators::ArrayIterator _hx_run(){
-            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_503_getChatsUnreadDetails)
-HXLINE( 503)				return result;
-            			}
-            			HX_END_LOCAL_FUNC0(return)
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_525_getChatUnreadDetails)
+HXDLIN( 525)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 526)		 ::borogove::persistence::SqliteDriver _hx_tmp = this->db;
+HXLINE( 528)		::String accountId1 = accountId;
+HXDLIN( 528)		::String chat1 = chat->chatId;
+HXDLIN( 528)		::String _hx_tmp1 = chat->readUpTo();
+HXLINE( 526)		return ::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->exec(HX_("WITH subq as (SELECT ROWID as row, COALESCE(MAX(created_at), 0) as created_at FROM messages where account_id=? AND chat_id=? AND (mam_id=? OR direction=?)) SELECT chat_id AS chatId, stanza, direction, type, status, status_text, sender_id, mam_id, mam_by, sync_point, CASE WHEN (SELECT row FROM subq) IS NULL THEN COUNT(*) ELSE COUNT(*) - 1 END AS unreadCount, strftime('%FT%H:%M:%fZ', MAX(messages.created_at) / 1000.0, 'unixepoch') AS timestamp FROM messages WHERE account_id=? AND chat_id=? AND (stanza_id IS NULL OR stanza_id='' OR stanza_id=correction_id) AND (messages.created_at >= (SELECT created_at FROM subq) AND (messages.created_at <> (SELECT created_at FROM subq) OR messages.ROWID = (SELECT row FROM subq)))",69,c0,d3,b0),::cpp::VirtualArray_obj::__new(6)->init(0,accountId1)->init(1,chat1)->init(2,_hx_tmp1)->init(3,1)->init(4,accountId)->init(5,chat->chatId)), ::Dynamic(new _hx_Closure_0(_gthis,chat,accountId)),null());
+            	}
 
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_503_getChatsUnreadDetails)
-HXLINE( 503)			return ::Lambda_obj::array( ::Dynamic(::hx::Anon_obj::Create(1)
-            				->setFixed(0,HX_("iterator",ee,49,9a,93), ::Dynamic(new _hx_Closure_1(result)))));
-            		}
-            		HX_END_LOCAL_FUNC1(return)
 
-            		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_4, ::borogove::persistence::Sqlite,_gthis,::String,accountId) HXARGC(1)
-            		::Dynamic _hx_run(::cpp::VirtualArray rows){
-            			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_3,::cpp::VirtualArray,rows) HXARGC(1)
-            			::Array< ::Dynamic> _hx_run(::Array< ::Dynamic> messages){
-            				HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_505_getChatsUnreadDetails)
-HXLINE( 506)				::Array< ::Dynamic> details = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 507)				{
-HXLINE( 507)					int _g_current = 0;
-HXDLIN( 507)					while((_g_current < messages->length)){
-HXLINE( 507)						 ::borogove::ChatMessage _g_value = messages->__get(_g_current).StaticCast<  ::borogove::ChatMessage >();
-HXDLIN( 507)						_g_current = (_g_current + 1);
-HXDLIN( 507)						int _g_key = (_g_current - 1);
-HXLINE( 508)						details->push( ::Dynamic(::hx::Anon_obj::Create(3)
-            							->setFixed(0,HX_("message",c7,35,11,9a),_g_value)
-            							->setFixed(1,HX_("unreadCount",20,18,f1,a0), ::Dynamic(rows->__get(_g_key)->__Field(HX_("unreadCount",20,18,f1,a0),::hx::paccDynamic)))
-            							->setFixed(2,HX_("chatId",d3,04,77,b7), ::Dynamic(rows->__get(_g_key)->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)))));
-            					}
-            				}
-HXLINE( 514)				return details;
-            			}
-            			HX_END_LOCAL_FUNC1(return)
+HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,getChatUnreadDetails,return )
 
-            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_505_getChatsUnreadDetails)
-HXLINE( 505)			return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::resolve(_gthis->hydrateMessages(accountId, ::haxe::iterators::ArrayIterator_obj::__alloc( HX_CTX ,rows))), ::Dynamic(new _hx_Closure_3(rows)),null());
-            		}
-            		HX_END_LOCAL_FUNC1(return)
-
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_461_getChatsUnreadDetails)
-HXDLIN( 461)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 462)		bool _hx_tmp;
-HXDLIN( 462)		if (::hx::IsNotNull( chats )) {
-HXLINE( 462)			_hx_tmp = (chats->length < 1);
+::Dynamic Sqlite_obj::getChatsUnreadDetails(::String accountId,::Array< ::Dynamic> chats){
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_537_getChatsUnreadDetails)
+HXLINE( 538)		bool _hx_tmp;
+HXDLIN( 538)		if (::hx::IsNotNull( chats )) {
+HXLINE( 538)			_hx_tmp = (chats->length < 1);
             		}
             		else {
-HXLINE( 462)			_hx_tmp = true;
+HXLINE( 538)			_hx_tmp = true;
+            		}
+HXDLIN( 538)		if (_hx_tmp) {
+HXLINE( 539)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(0));
             		}
-HXDLIN( 462)		if (_hx_tmp) {
-HXLINE( 463)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(0));
+HXLINE( 542)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(chats->length);
+HXDLIN( 542)		{
+HXLINE( 542)			int _g = 0;
+HXDLIN( 542)			int _g1 = chats->length;
+HXDLIN( 542)			while((_g < _g1)){
+HXLINE( 542)				_g = (_g + 1);
+HXDLIN( 542)				int i = (_g - 1);
+HXDLIN( 542)				{
+HXLINE( 542)					::Dynamic inValue = this->getChatUnreadDetails(accountId,( ( ::borogove::Chat)(_hx_array_unsafe_get(chats,i)) ));
+HXDLIN( 542)					result->__unsafe_set(i,inValue);
+            				}
+            			}
             		}
-HXLINE( 466)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::resolve(null()), ::Dynamic(new _hx_Closure_0(_gthis,chats,accountId)),null()), ::Dynamic(new _hx_Closure_2()),null()), ::Dynamic(new _hx_Closure_4(_gthis,accountId)),null());
+HXDLIN( 542)		return ::thenshim::PromiseTools_obj::all(result);
             	}
 
 
@@ -1790,24 +1615,24 @@ HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,getChatsUnreadDetails,return )
 ::Dynamic Sqlite_obj::storeReaction(::String accountId, ::borogove::ReactionUpdate update){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::Sqlite,_gthis,::String,accountId, ::borogove::ReactionUpdate,update) HXARGC(1)
             		::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_529_storeReaction)
-HXLINE( 529)			return _gthis->getMessage(accountId,update->chatId,update->serverId,update->localId);
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_555_storeReaction)
+HXLINE( 555)			return _gthis->getMessage(accountId,update->chatId,update->serverId,update->localId);
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_520_storeReaction)
-HXDLIN( 520)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 521)		 ::borogove::persistence::SqliteDriver _hx_tmp = this->db;
-HXLINE( 524)		::String accountId1 = accountId;
-HXDLIN( 524)		::String update1 = update->updateId;
-HXDLIN( 524)		::String update2 = update->serverId;
-HXDLIN( 524)		::String update3 = update->serverIdBy;
-HXLINE( 525)		::String update4 = update->localId;
-HXDLIN( 525)		::String update5 = update->chatId;
-HXDLIN( 525)		::String update6 = update->senderId;
-HXDLIN( 525)		::String update7 = update->timestamp;
-HXLINE( 526)		::String _hx_tmp1 = ::borogove::JsonPrinter_obj::print(update->reactions,null(),null());
-HXLINE( 521)		return ::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->exec(HX_("INSERT OR REPLACE INTO reactions VALUES (?,?,?,?,?,?,?,CAST(unixepoch(?, 'subsec') * 1000 AS INTEGER),jsonb(?),?)",e2,55,57,48),::cpp::VirtualArray_obj::__new(10)->init(0,accountId1)->init(1,update1)->init(2,update2)->init(3,update3)->init(4,update4)->init(5,update5)->init(6,update6)->init(7,update7)->init(8,_hx_tmp1)->init(9,update->kind)), ::Dynamic(new _hx_Closure_0(_gthis,accountId,update)),null());
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_546_storeReaction)
+HXDLIN( 546)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 547)		 ::borogove::persistence::SqliteDriver _hx_tmp = this->db;
+HXLINE( 550)		::String accountId1 = accountId;
+HXDLIN( 550)		::String update1 = update->updateId;
+HXDLIN( 550)		::String update2 = update->serverId;
+HXDLIN( 550)		::String update3 = update->serverIdBy;
+HXLINE( 551)		::String update4 = update->localId;
+HXDLIN( 551)		::String update5 = update->chatId;
+HXDLIN( 551)		::String update6 = update->senderId;
+HXDLIN( 551)		::String update7 = update->timestamp;
+HXLINE( 552)		::String _hx_tmp1 = ::borogove::JsonPrinter_obj::print(update->reactions,null(),null());
+HXLINE( 547)		return ::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->exec(HX_("INSERT OR REPLACE INTO reactions VALUES (?,?,?,?,?,?,?,CAST(unixepoch(?, 'subsec') * 1000 AS INTEGER),jsonb(?),?)",e2,55,57,48),::cpp::VirtualArray_obj::__new(10)->init(0,accountId1)->init(1,update1)->init(2,update2)->init(3,update3)->init(4,update4)->init(5,update5)->init(6,update6)->init(7,update7)->init(8,_hx_tmp1)->init(9,update->kind)), ::Dynamic(new _hx_Closure_0(_gthis,accountId,update)),null());
             	}
 
 
@@ -1816,205 +1641,207 @@ HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,storeReaction,return )
 ::Dynamic Sqlite_obj::updateMessageStatus(::String accountId,::String localId,int status,::String statusText){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::Sqlite,_gthis,::String,localId,::String,accountId) HXARGC(1)
             		::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_539_updateMessageStatus)
-HXLINE( 539)			return _gthis->db->exec(HX_("SELECT stanza, direction, type, status, status_text, strftime('%FT%H:%M:%fZ', created_at / 1000.0, 'unixepoch') AS timestamp, sender_id, correction_id AS stanza_id, mam_id, mam_by, sync_point FROM messages WHERE account_id=? AND stanza_id=? AND direction=? LIMIT 1",ed,02,c0,1d),::cpp::VirtualArray_obj::__new(3)->init(0,accountId)->init(1,localId)->init(2,1));
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_565_updateMessageStatus)
+HXLINE( 565)			return _gthis->db->exec(HX_("SELECT stanza, direction, type, status, status_text, strftime('%FT%H:%M:%fZ', created_at / 1000.0, 'unixepoch') AS timestamp, sender_id, correction_id AS stanza_id, mam_id, mam_by, sync_point FROM messages WHERE account_id=? AND stanza_id=? AND direction=? LIMIT 1",ed,02,c0,1d),::cpp::VirtualArray_obj::__new(3)->init(0,accountId)->init(1,localId)->init(2,1));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_2, ::borogove::persistence::Sqlite,_gthis,::String,accountId) HXARGC(1)
             		::Dynamic _hx_run( ::haxe::iterators::ArrayIterator result){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_544_updateMessageStatus)
-HXLINE( 544)			::Array< ::Dynamic> _this = _gthis->hydrateMessages(accountId,result);
-HXDLIN( 544)			::Array< ::Dynamic> result1 = ::Array_obj< ::Dynamic>::__new(_this->length);
-HXDLIN( 544)			{
-HXLINE( 544)				int _g = 0;
-HXDLIN( 544)				int _g1 = _this->length;
-HXDLIN( 544)				while((_g < _g1)){
-HXLINE( 544)					_g = (_g + 1);
-HXDLIN( 544)					int i = (_g - 1);
-HXDLIN( 544)					{
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_570_updateMessageStatus)
+HXLINE( 570)			::Array< ::Dynamic> _this = _gthis->hydrateMessages(accountId,result);
+HXDLIN( 570)			::Array< ::Dynamic> result1 = ::Array_obj< ::Dynamic>::__new(_this->length);
+HXDLIN( 570)			{
+HXLINE( 570)				int _g = 0;
+HXDLIN( 570)				int _g1 = _this->length;
+HXDLIN( 570)				while((_g < _g1)){
+HXLINE( 570)					_g = (_g + 1);
+HXDLIN( 570)					int i = (_g - 1);
+HXDLIN( 570)					{
             						HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::borogove::persistence::Sqlite,_gthis,::String,accountId) HXARGC(1)
             						::Dynamic _hx_run(::Array< ::Dynamic> messages){
-            							HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_549_updateMessageStatus)
-HXLINE( 549)							return _gthis->hydrateReactions(accountId,messages);
+            							HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_575_updateMessageStatus)
+HXLINE( 575)							return _gthis->hydrateReactions(accountId,messages);
             						}
             						HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 545)						 ::borogove::ChatMessage message = ( ( ::borogove::ChatMessage)(_hx_array_unsafe_get(_this,i)) );
-HXDLIN( 545)						::Dynamic inValue;
-HXDLIN( 545)						if (::hx::IsNotNull( message->replyToMessage )) {
-HXLINE( 546)							 ::borogove::persistence::Sqlite _gthis1 = _gthis;
-HXDLIN( 546)							::String accountId1 = accountId;
-HXDLIN( 546)							::String inValue1 = message->chatId();
-HXLINE( 545)							inValue = _gthis1->hydrateReplyTo(accountId1,::Array_obj< ::Dynamic>::__new(1)->init(0,message),::Array_obj< ::Dynamic>::__new(1)->init(0, ::Dynamic(::hx::Anon_obj::Create(3)
+HXLINE( 571)						 ::borogove::ChatMessage message = ( ( ::borogove::ChatMessage)(_hx_array_unsafe_get(_this,i)) );
+HXDLIN( 571)						::Dynamic inValue;
+HXDLIN( 571)						if (::hx::IsNotNull( message->replyToMessage )) {
+HXLINE( 572)							 ::borogove::persistence::Sqlite _gthis1 = _gthis;
+HXDLIN( 572)							::String accountId1 = accountId;
+HXDLIN( 572)							::String inValue1 = message->chatId();
+HXLINE( 571)							inValue = _gthis1->hydrateReplyTo(accountId1,::Array_obj< ::Dynamic>::__new(1)->init(0,message),::Array_obj< ::Dynamic>::__new(1)->init(0, ::Dynamic(::hx::Anon_obj::Create(3)
             								->setFixed(0,HX_("chatId",d3,04,77,b7),inValue1)
             								->setFixed(1,HX_("serverId",7e,01,b2,e2),message->replyToMessage->serverId)
             								->setFixed(2,HX_("localId",26,7a,c6,2d),message->replyToMessage->localId))));
             						}
             						else {
-HXLINE( 545)							inValue = ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(1)->init(0,message));
+HXLINE( 571)							inValue = ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(1)->init(0,message));
             						}
-HXLINE( 544)						::Dynamic inValue2 = ::thenshim::_Promise::Promise_Impl__obj::then(inValue, ::Dynamic(new _hx_Closure_1(_gthis,accountId)),null());
-HXDLIN( 544)						result1->__unsafe_set(i,inValue2);
+HXLINE( 570)						::Dynamic inValue2 = ::thenshim::_Promise::Promise_Impl__obj::then(inValue, ::Dynamic(new _hx_Closure_1(_gthis,accountId)),null());
+HXDLIN( 570)						result1->__unsafe_set(i,inValue2);
             					}
             				}
             			}
-HXDLIN( 544)			return ::thenshim::PromiseTools_obj::all(result1);
+HXDLIN( 570)			return ::thenshim::PromiseTools_obj::all(result1);
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_3) HXARGC(1)
             		::Array< ::Dynamic> _hx_run(::Array< ::Dynamic> hydrated){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_551_updateMessageStatus)
-HXLINE( 551)			::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 551)			{
-HXLINE( 551)				int _g_current = 0;
-HXDLIN( 551)				while((_g_current < hydrated->length)){
-HXLINE( 551)					_g_current = (_g_current + 1);
-HXDLIN( 551)					{
-HXLINE( 551)						 ::Dynamic x = hydrated->__get((_g_current - 1)).StaticCast< ::Array< ::Dynamic> >()->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 551)						while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 551)							_g->push(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_577_updateMessageStatus)
+HXLINE( 577)			::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 577)			{
+HXLINE( 577)				int _g_current = 0;
+HXDLIN( 577)				while((_g_current < hydrated->length)){
+HXLINE( 577)					_g_current = (_g_current + 1);
+HXDLIN( 577)					{
+HXLINE( 577)						 ::Dynamic x = hydrated->__get((_g_current - 1)).StaticCast< ::Array< ::Dynamic> >()->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN( 577)						while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 577)							_g->push(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
             						}
             					}
             				}
             			}
-HXDLIN( 551)			return _g;
+HXDLIN( 577)			return _g;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_4,::String,localId) HXARGC(1)
             		::Dynamic _hx_run(::Array< ::Dynamic> hydrated){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_551_updateMessageStatus)
-HXLINE( 551)			if ((hydrated->length > 0)) {
-HXLINE( 551)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(hydrated->__get(0).StaticCast<  ::borogove::ChatMessage >());
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_577_updateMessageStatus)
+HXLINE( 577)			if ((hydrated->length > 0)) {
+HXLINE( 577)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(hydrated->__get(0).StaticCast<  ::borogove::ChatMessage >());
             			}
             			else {
-HXLINE( 551)				return ::thenshim::_Promise::Promise_Impl__obj::reject((HX_("Message not found: ",62,21,15,ae) + localId));
+HXLINE( 577)				return ::thenshim::_Promise::Promise_Impl__obj::reject((HX_("Message not found: ",62,21,15,ae) + localId));
             			}
-HXDLIN( 551)			return null();
+HXDLIN( 577)			return null();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_534_updateMessageStatus)
-HXDLIN( 534)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 535)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("UPDATE messages SET status=?, status_text=? WHERE account_id=? AND stanza_id=? AND direction=? AND status <> ? AND status <> ?",71,68,f3,d1),::cpp::VirtualArray_obj::__new(7)->init(0,status)->init(1,statusText)->init(2,accountId)->init(3,localId)->init(4,1)->init(5,2)->init(6,3)), ::Dynamic(new _hx_Closure_0(_gthis,localId,accountId)),null()), ::Dynamic(new _hx_Closure_2(_gthis,accountId)),null()), ::Dynamic(new _hx_Closure_3()),null()), ::Dynamic(new _hx_Closure_4(localId)),null());
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_560_updateMessageStatus)
+HXDLIN( 560)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 561)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("UPDATE messages SET status=?, status_text=? WHERE account_id=? AND stanza_id=? AND direction=? AND status <> ? AND status <> ?",71,68,f3,d1),::cpp::VirtualArray_obj::__new(7)->init(0,status)->init(1,statusText)->init(2,accountId)->init(3,localId)->init(4,1)->init(5,2)->init(6,3)), ::Dynamic(new _hx_Closure_0(_gthis,localId,accountId)),null()), ::Dynamic(new _hx_Closure_2(_gthis,accountId)),null()), ::Dynamic(new _hx_Closure_3()),null()), ::Dynamic(new _hx_Closure_4(localId)),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC4(Sqlite_obj,updateMessageStatus,return )
 
 ::Dynamic Sqlite_obj::hasMedia(::String hashAlgorithm,::Array< unsigned char > hash){
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_556_hasMedia)
-HXDLIN( 556)		return ::borogove::persistence::MediaStore_obj::hasMedia(this->media,hashAlgorithm,hash);
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_582_hasMedia)
+HXDLIN( 582)		return ::borogove::persistence::MediaStore_obj::hasMedia(this->media,hashAlgorithm,hash);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,hasMedia,return )
 
 void Sqlite_obj::removeMedia(::String hashAlgorithm,::Array< unsigned char > hash){
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_561_removeMedia)
-HXDLIN( 561)		::borogove::persistence::MediaStore_obj::removeMedia(this->media,hashAlgorithm,hash);
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_587_removeMedia)
+HXDLIN( 587)		::borogove::persistence::MediaStore_obj::removeMedia(this->media,hashAlgorithm,hash);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,removeMedia,(void))
 
 ::Dynamic Sqlite_obj::storeMedia(::String mime,::Array< unsigned char > bd){
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_566_storeMedia)
-HXDLIN( 566)		return ::borogove::persistence::MediaStore_obj::storeMedia(this->media,mime,bd);
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_592_storeMedia)
+HXDLIN( 592)		return ::borogove::persistence::MediaStore_obj::storeMedia(this->media,mime,bd);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,storeMedia,return )
 
 void Sqlite_obj::storeCaps( ::borogove::Caps caps){
-            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_571_storeCaps)
-HXDLIN( 571)		 ::haxe::ds::ObjectMap _g =  ::haxe::ds::ObjectMap_obj::__alloc( HX_CTX );
-HXDLIN( 571)		_g->set(caps->verRaw()->hash,caps);
-HXDLIN( 571)		this->storeCapsSet(_g);
+            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_597_storeCaps)
+HXDLIN( 597)		 ::haxe::ds::ObjectMap _g =  ::haxe::ds::ObjectMap_obj::__alloc( HX_CTX );
+HXDLIN( 597)		_g->set(caps->verRaw()->hash,caps);
+HXDLIN( 597)		this->storeCapsSet(_g);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Sqlite_obj,storeCaps,(void))
 
 void Sqlite_obj::storeCapsSet( ::haxe::ds::ObjectMap capsSet){
-            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_574_storeCapsSet)
-HXLINE( 575)		::cpp::VirtualArray params = ::cpp::VirtualArray_obj::__new(0);
-HXLINE( 576)		 ::StringBuf q =  ::StringBuf_obj::__alloc( HX_CTX );
-HXLINE( 577)		{
-HXLINE( 577)			if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 577)				q->flush();
+            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_600_storeCapsSet)
+HXLINE( 601)		::cpp::VirtualArray params = ::cpp::VirtualArray_obj::__new(0);
+HXLINE( 602)		 ::StringBuf q =  ::StringBuf_obj::__alloc( HX_CTX );
+HXLINE( 603)		{
+HXLINE( 603)			if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 603)				q->flush();
             			}
-HXDLIN( 577)			if (::hx::IsNull( q->b )) {
-HXLINE( 577)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_123,1);
+HXDLIN( 603)			if (::hx::IsNull( q->b )) {
+HXLINE( 603)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_108,1);
             			}
             			else {
-HXLINE( 577)				q->b->push(HX_("INSERT OR IGNORE INTO caps VALUES ",27,4b,68,bf));
-            			}
-            		}
-HXLINE( 578)		bool first = true;
-HXLINE( 579)		{
-HXLINE( 579)			::Dynamic map = capsSet;
-HXDLIN( 579)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map);
-HXDLIN( 579)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 579)				::Array< unsigned char > key = ( (::Array< unsigned char >)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN( 579)				 ::borogove::Caps _g_value = ( ( ::borogove::Caps)(::haxe::IMap_obj::get(map,key)) );
-HXDLIN( 579)				{
-HXLINE( 580)					if (!(first)) {
-HXLINE( 580)						if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 580)							q->flush();
+HXLINE( 603)				q->b->push(HX_("INSERT OR IGNORE INTO caps VALUES ",27,4b,68,bf));
+            			}
+            		}
+HXLINE( 604)		bool first = true;
+HXLINE( 605)		{
+HXLINE( 605)			::Dynamic map = capsSet;
+HXDLIN( 605)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map);
+HXDLIN( 605)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 605)				::Array< unsigned char > key = ( (::Array< unsigned char >)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN( 605)				 ::borogove::Caps _g_value = ( ( ::borogove::Caps)(::haxe::IMap_obj::get(map,key)) );
+HXDLIN( 605)				{
+HXLINE( 606)					if (!(first)) {
+HXLINE( 606)						if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 606)							q->flush();
             						}
-HXDLIN( 580)						if (::hx::IsNull( q->b )) {
-HXLINE( 580)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_124,1);
+HXDLIN( 606)						if (::hx::IsNull( q->b )) {
+HXLINE( 606)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_109,1);
             						}
             						else {
-HXLINE( 580)							q->b->push(HX_(",",2c,00,00,00));
+HXLINE( 606)							q->b->push(HX_(",",2c,00,00,00));
             						}
             					}
-HXLINE( 581)					{
-HXLINE( 581)						if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 581)							q->flush();
+HXLINE( 607)					{
+HXLINE( 607)						if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 607)							q->flush();
             						}
-HXDLIN( 581)						if (::hx::IsNull( q->b )) {
-HXLINE( 581)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_125,1);
+HXDLIN( 607)						if (::hx::IsNull( q->b )) {
+HXLINE( 607)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_110,1);
             						}
             						else {
-HXLINE( 581)							q->b->push(HX_("(?,jsonb(?))",1c,61,06,9e));
+HXLINE( 607)							q->b->push(HX_("(?,jsonb(?))",1c,61,06,9e));
             						}
             					}
-HXLINE( 582)					params->push(key);
-HXLINE( 583)					::String caps = _g_value->node;
-HXDLIN( 583)					::Array< ::Dynamic> caps1 = _g_value->identities;
-HXDLIN( 583)					::Array< ::String > caps2 = _g_value->features;
-HXDLIN( 583)					::Array< ::Dynamic> _this = _g_value->data;
-HXDLIN( 583)					::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
-HXDLIN( 583)					{
-HXLINE( 583)						int _g = 0;
-HXDLIN( 583)						int _g1 = _this->length;
-HXDLIN( 583)						while((_g < _g1)){
-HXLINE( 583)							_g = (_g + 1);
-HXDLIN( 583)							int i = (_g - 1);
-HXDLIN( 583)							{
-HXLINE( 583)								::String inValue = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this,i)) )->toString();
-HXDLIN( 583)								result->__unsafe_set(i,inValue);
+HXLINE( 608)					params->push(key);
+HXLINE( 609)					::String caps = _g_value->node;
+HXDLIN( 609)					::Array< ::Dynamic> caps1 = _g_value->identities;
+HXDLIN( 609)					::Array< ::String > caps2 = _g_value->features;
+HXDLIN( 609)					::Array< ::Dynamic> _this = _g_value->data;
+HXDLIN( 609)					::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
+HXDLIN( 609)					{
+HXLINE( 609)						int _g = 0;
+HXDLIN( 609)						int _g1 = _this->length;
+HXDLIN( 609)						while((_g < _g1)){
+HXLINE( 609)							_g = (_g + 1);
+HXDLIN( 609)							int i = (_g - 1);
+HXDLIN( 609)							{
+HXLINE( 609)								::String inValue = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this,i)) )->toString();
+HXDLIN( 609)								result->__unsafe_set(i,inValue);
             							}
             						}
             					}
-HXDLIN( 583)					params->push(::borogove::JsonPrinter_obj::print( ::Dynamic(::hx::Anon_obj::Create(4)
+HXDLIN( 609)					 ::Dynamic replacer = null();
+HXDLIN( 609)					::String space = null();
+HXDLIN( 609)					params->push(::haxe::format::JsonPrinter_obj::print( ::Dynamic(::hx::Anon_obj::Create(4)
             						->setFixed(0,HX_("identities",1c,c5,6d,d7),caps1)
             						->setFixed(1,HX_("features",fd,6c,d7,12),caps2)
             						->setFixed(2,HX_("data",2a,56,63,42),result)
-            						->setFixed(3,HX_("node",02,0a,0a,49),caps)),null(),null()));
-HXLINE( 584)					first = false;
+            						->setFixed(3,HX_("node",02,0a,0a,49),caps)),replacer,space));
+HXLINE( 610)					first = false;
             				}
             			}
             		}
-HXLINE( 586)		if ((params->get_length() < 1)) {
-HXLINE( 586)			return;
+HXLINE( 612)		if ((params->get_length() < 1)) {
+HXLINE( 612)			return;
             		}
-HXLINE( 587)		 ::borogove::persistence::SqliteDriver _hx_tmp = this->db;
-HXDLIN( 587)		_hx_tmp->exec(q->toString(),params);
+HXLINE( 613)		 ::borogove::persistence::SqliteDriver _hx_tmp = this->db;
+HXDLIN( 613)		_hx_tmp->exec(q->toString(),params);
             	}
 
 
@@ -2023,150 +1850,150 @@ HX_DEFINE_DYNAMIC_FUNC1(Sqlite_obj,storeCapsSet,(void))
 ::Dynamic Sqlite_obj::getCaps(::String ver){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::Sqlite,_gthis,::Array< unsigned char >,verData) HXARGC(1)
             		 ::borogove::Caps _hx_run( ::haxe::iterators::ArrayIterator result){
-            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_600_getCaps)
-HXLINE( 601)			while((result->current < result->array->get_length())){
-HXLINE( 602)				 ::Dynamic json =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(result->array->__get(result->current++)->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic)) ))->doParse();
-HXLINE( 603)				return _gthis->hydrateCaps(json,verData);
+            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_626_getCaps)
+HXLINE( 627)			while((result->current < result->array->get_length())){
+HXLINE( 628)				 ::Dynamic json =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(result->array->__get(result->current++)->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic)) ))->doParse();
+HXLINE( 629)				return _gthis->hydrateCaps(json,verData);
             			}
-HXLINE( 605)			return null();
+HXLINE( 631)			return null();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_591_getCaps)
-HXDLIN( 591)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 592)		::Array< unsigned char > verData;
-HXDLIN( 592)		try {
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_617_getCaps)
+HXDLIN( 617)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 618)		::Array< unsigned char > verData;
+HXDLIN( 618)		try {
             			HX_STACK_CATCHABLE( ::Dynamic, 0);
-HXLINE( 592)			verData = ::haxe::crypto::Base64_obj::decode(ver,null())->b;
+HXLINE( 618)			verData = ::haxe::crypto::Base64_obj::decode(ver,null())->b;
             		} catch( ::Dynamic _hx_e) {
             			if (_hx_e.IsClass<  ::Dynamic >() ){
             				HX_STACK_BEGIN_CATCH
             				 ::Dynamic _g = _hx_e;
-HXLINE( 595)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+HXLINE( 621)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             			}
             			else {
             				HX_STACK_DO_THROW(_hx_e);
             			}
             		}
-HXLINE( 597)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT json(caps) AS caps FROM caps WHERE sha1=? LIMIT 1",5a,98,24,09),::cpp::VirtualArray_obj::__new(1)->init(0,verData)), ::Dynamic(new _hx_Closure_0(_gthis,verData)),null());
+HXLINE( 623)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT json(caps) AS caps FROM caps WHERE sha1=? LIMIT 1",5a,98,24,09),::cpp::VirtualArray_obj::__new(1)->init(0,verData)), ::Dynamic(new _hx_Closure_0(_gthis,verData)),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Sqlite_obj,getCaps,return )
 
 void Sqlite_obj::storeLogin(::String accountId,::String clientId,::String displayName,::String token){
-            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_610_storeLogin)
-HXLINE( 611)		::Array< ::String > params = ::Array_obj< ::String >::__new(3)->init(0,accountId)->init(1,clientId)->init(2,displayName);
-HXLINE( 612)		 ::StringBuf q =  ::StringBuf_obj::__alloc( HX_CTX );
-HXLINE( 613)		{
-HXLINE( 613)			if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 613)				q->flush();
+            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_636_storeLogin)
+HXLINE( 637)		::Array< ::String > params = ::Array_obj< ::String >::__new(3)->init(0,accountId)->init(1,clientId)->init(2,displayName);
+HXLINE( 638)		 ::StringBuf q =  ::StringBuf_obj::__alloc( HX_CTX );
+HXLINE( 639)		{
+HXLINE( 639)			if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 639)				q->flush();
             			}
-HXDLIN( 613)			if (::hx::IsNull( q->b )) {
-HXLINE( 613)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_130,1);
+HXDLIN( 639)			if (::hx::IsNull( q->b )) {
+HXLINE( 639)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_115,1);
             			}
             			else {
-HXLINE( 613)				q->b->push(HX_("INSERT INTO accounts (account_id, client_id, display_name",03,b0,6a,0b));
+HXLINE( 639)				q->b->push(HX_("INSERT INTO accounts (account_id, client_id, display_name",03,b0,6a,0b));
             			}
             		}
-HXLINE( 614)		if (::hx::IsNotNull( token )) {
-HXLINE( 615)			if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 615)				q->flush();
+HXLINE( 640)		if (::hx::IsNotNull( token )) {
+HXLINE( 641)			if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 641)				q->flush();
             			}
-HXDLIN( 615)			if (::hx::IsNull( q->b )) {
-HXLINE( 615)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_131,1);
+HXDLIN( 641)			if (::hx::IsNull( q->b )) {
+HXLINE( 641)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_116,1);
             			}
             			else {
-HXLINE( 615)				q->b->push(HX_(", token, fast_count",a5,56,e4,ae));
+HXLINE( 641)				q->b->push(HX_(", token, fast_count",a5,56,e4,ae));
             			}
             		}
-HXLINE( 617)		{
-HXLINE( 617)			if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 617)				q->flush();
+HXLINE( 643)		{
+HXLINE( 643)			if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 643)				q->flush();
             			}
-HXDLIN( 617)			if (::hx::IsNull( q->b )) {
-HXLINE( 617)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_132,1);
+HXDLIN( 643)			if (::hx::IsNull( q->b )) {
+HXLINE( 643)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_117,1);
             			}
             			else {
-HXLINE( 617)				q->b->push(HX_(") VALUES (?,?,?",c4,1c,e3,67));
+HXLINE( 643)				q->b->push(HX_(") VALUES (?,?,?",c4,1c,e3,67));
             			}
             		}
-HXLINE( 618)		if (::hx::IsNotNull( token )) {
-HXLINE( 619)			{
-HXLINE( 619)				if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 619)					q->flush();
+HXLINE( 644)		if (::hx::IsNotNull( token )) {
+HXLINE( 645)			{
+HXLINE( 645)				if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 645)					q->flush();
             				}
-HXDLIN( 619)				if (::hx::IsNull( q->b )) {
-HXLINE( 619)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_133,1);
+HXDLIN( 645)				if (::hx::IsNull( q->b )) {
+HXLINE( 645)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_118,1);
             				}
             				else {
-HXLINE( 619)					q->b->push(HX_(",?",93,26,00,00));
+HXLINE( 645)					q->b->push(HX_(",?",93,26,00,00));
             				}
             			}
-HXLINE( 620)			params->push(token);
-HXLINE( 621)			{
-HXLINE( 621)				if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 621)					q->flush();
+HXLINE( 646)			params->push(token);
+HXLINE( 647)			{
+HXLINE( 647)				if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 647)					q->flush();
             				}
-HXDLIN( 621)				if (::hx::IsNull( q->b )) {
-HXLINE( 621)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_134,1);
+HXDLIN( 647)				if (::hx::IsNull( q->b )) {
+HXLINE( 647)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_119,1);
             				}
             				else {
-HXLINE( 621)					q->b->push(HX_(",0",84,26,00,00));
+HXLINE( 647)					q->b->push(HX_(",0",84,26,00,00));
             				}
             			}
             		}
-HXLINE( 623)		{
-HXLINE( 623)			if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 623)				q->flush();
+HXLINE( 649)		{
+HXLINE( 649)			if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 649)				q->flush();
             			}
-HXDLIN( 623)			if (::hx::IsNull( q->b )) {
-HXLINE( 623)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_135,1);
+HXDLIN( 649)			if (::hx::IsNull( q->b )) {
+HXLINE( 649)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_120,1);
             			}
             			else {
-HXLINE( 623)				q->b->push(HX_(") ON CONFLICT DO UPDATE SET client_id=?",cd,99,0c,96));
+HXLINE( 649)				q->b->push(HX_(") ON CONFLICT DO UPDATE SET client_id=?",cd,99,0c,96));
             			}
             		}
-HXLINE( 624)		params->push(clientId);
-HXLINE( 625)		{
-HXLINE( 625)			if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 625)				q->flush();
+HXLINE( 650)		params->push(clientId);
+HXLINE( 651)		{
+HXLINE( 651)			if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 651)				q->flush();
             			}
-HXDLIN( 625)			if (::hx::IsNull( q->b )) {
-HXLINE( 625)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_136,1);
+HXDLIN( 651)			if (::hx::IsNull( q->b )) {
+HXLINE( 651)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_121,1);
             			}
             			else {
-HXLINE( 625)				q->b->push(HX_(", display_name=?",7e,ad,5b,0f));
+HXLINE( 651)				q->b->push(HX_(", display_name=?",7e,ad,5b,0f));
             			}
             		}
-HXLINE( 626)		params->push(displayName);
-HXLINE( 627)		if (::hx::IsNotNull( token )) {
-HXLINE( 628)			{
-HXLINE( 628)				if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 628)					q->flush();
+HXLINE( 652)		params->push(displayName);
+HXLINE( 653)		if (::hx::IsNotNull( token )) {
+HXLINE( 654)			{
+HXLINE( 654)				if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 654)					q->flush();
             				}
-HXDLIN( 628)				if (::hx::IsNull( q->b )) {
-HXLINE( 628)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_137,1);
+HXDLIN( 654)				if (::hx::IsNull( q->b )) {
+HXLINE( 654)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_122,1);
             				}
             				else {
-HXLINE( 628)					q->b->push(HX_(", token=?",a7,78,19,80));
+HXLINE( 654)					q->b->push(HX_(", token=?",a7,78,19,80));
             				}
             			}
-HXLINE( 629)			params->push(token);
-HXLINE( 630)			{
-HXLINE( 630)				if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 630)					q->flush();
+HXLINE( 655)			params->push(token);
+HXLINE( 656)			{
+HXLINE( 656)				if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 656)					q->flush();
             				}
-HXDLIN( 630)				if (::hx::IsNull( q->b )) {
-HXLINE( 630)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_138,1);
+HXDLIN( 656)				if (::hx::IsNull( q->b )) {
+HXLINE( 656)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_123,1);
             				}
             				else {
-HXLINE( 630)					q->b->push(HX_(", fast_count=0",73,a8,4f,82));
+HXLINE( 656)					q->b->push(HX_(", fast_count=0",73,a8,4f,82));
             				}
             			}
             		}
-HXLINE( 632)		 ::borogove::persistence::SqliteDriver _hx_tmp = this->db;
-HXDLIN( 632)		_hx_tmp->exec(q->toString(),params);
+HXLINE( 658)		 ::borogove::persistence::SqliteDriver _hx_tmp = this->db;
+HXDLIN( 658)		_hx_tmp->exec(q->toString(),params);
             	}
 
 
@@ -2175,15 +2002,15 @@ HX_DEFINE_DYNAMIC_FUNC4(Sqlite_obj,storeLogin,(void))
 ::Dynamic Sqlite_obj::getLogin(::String accountId){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::Sqlite,_gthis,::String,accountId) HXARGC(1)
             		 ::Dynamic _hx_run( ::haxe::iterators::ArrayIterator result){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_640_getLogin)
-HXLINE( 641)			while((result->current < result->array->get_length())){
-HXLINE( 641)				 ::Dynamic row = result->array->__get(result->current++);
-HXLINE( 643)				if (::hx::IsNotNull( row->__Field(HX_("token",f9,82,2b,14),::hx::paccDynamic) )) {
-HXLINE( 644)					_gthis->db->exec(HX_("UPDATE accounts SET fast_count=fast_count+1 WHERE account_id=?",a6,3f,55,2d),::cpp::VirtualArray_obj::__new(1)->init(0,accountId));
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_666_getLogin)
+HXLINE( 667)			while((result->current < result->array->get_length())){
+HXLINE( 667)				 ::Dynamic row = result->array->__get(result->current++);
+HXLINE( 669)				if (::hx::IsNotNull( row->__Field(HX_("token",f9,82,2b,14),::hx::paccDynamic) )) {
+HXLINE( 670)					_gthis->db->exec(HX_("UPDATE accounts SET fast_count=fast_count+1 WHERE account_id=?",a6,3f,55,2d),::cpp::VirtualArray_obj::__new(1)->init(0,accountId));
             				}
-HXLINE( 646)				return row;
+HXLINE( 672)				return row;
             			}
-HXLINE( 649)			return  ::Dynamic(::hx::Anon_obj::Create(4)
+HXLINE( 675)			return  ::Dynamic(::hx::Anon_obj::Create(4)
             				->setFixed(0,HX_("fastCount",93,fc,67,a5),0)
             				->setFixed(1,HX_("token",f9,82,2b,14),null())
             				->setFixed(2,HX_("clientId",06,73,8f,15),null())
@@ -2191,23 +2018,23 @@ HXLINE( 649)			return  ::Dynamic(::hx::Anon_obj::Create(4)
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_636_getLogin)
-HXDLIN( 636)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 637)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT client_id AS clientId, display_name AS displayName, token, COALESCE(fast_count, 0) AS fastCount FROM accounts WHERE account_id=? LIMIT 1",d8,8f,02,8f),::cpp::VirtualArray_obj::__new(1)->init(0,accountId)), ::Dynamic(new _hx_Closure_0(_gthis,accountId)),null());
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_662_getLogin)
+HXDLIN( 662)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 663)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT client_id AS clientId, display_name AS displayName, token, COALESCE(fast_count, 0) AS fastCount FROM accounts WHERE account_id=? LIMIT 1",d8,8f,02,8f),::cpp::VirtualArray_obj::__new(1)->init(0,accountId)), ::Dynamic(new _hx_Closure_0(_gthis,accountId)),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Sqlite_obj,getLogin,return )
 
 void Sqlite_obj::removeAccount(::String accountId,bool completely){
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_659_removeAccount)
-HXLINE( 660)		this->db->exec(HX_("DELETE FROM accounts WHERE account_id=?",a1,e8,94,4e),::cpp::VirtualArray_obj::__new(1)->init(0,accountId));
-HXLINE( 662)		if (!(completely)) {
-HXLINE( 662)			return;
-            		}
-HXLINE( 664)		this->db->exec(HX_("DELETE FROM messages WHERE account_id=?",bb,0a,07,c2),::cpp::VirtualArray_obj::__new(1)->init(0,accountId));
-HXLINE( 665)		this->db->exec(HX_("DELETE FROM chats WHERE account_id=?",2e,3d,02,57),::cpp::VirtualArray_obj::__new(1)->init(0,accountId));
-HXLINE( 666)		this->db->exec(HX_("DELETE FROM services WHERE account_id=?",29,fc,5f,4f),::cpp::VirtualArray_obj::__new(1)->init(0,accountId));
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_685_removeAccount)
+HXLINE( 686)		this->db->exec(HX_("DELETE FROM accounts WHERE account_id=?",a1,e8,94,4e),::cpp::VirtualArray_obj::__new(1)->init(0,accountId));
+HXLINE( 688)		if (!(completely)) {
+HXLINE( 688)			return;
+            		}
+HXLINE( 690)		this->db->exec(HX_("DELETE FROM messages WHERE account_id=?",bb,0a,07,c2),::cpp::VirtualArray_obj::__new(1)->init(0,accountId));
+HXLINE( 691)		this->db->exec(HX_("DELETE FROM chats WHERE account_id=?",2e,3d,02,57),::cpp::VirtualArray_obj::__new(1)->init(0,accountId));
+HXLINE( 692)		this->db->exec(HX_("DELETE FROM services WHERE account_id=?",29,fc,5f,4f),::cpp::VirtualArray_obj::__new(1)->init(0,accountId));
             	}
 
 
@@ -2216,124 +2043,124 @@ HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,removeAccount,(void))
 ::Dynamic Sqlite_obj::listAccounts(){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             		::Array< ::String > _hx_run( ::haxe::iterators::ArrayIterator result){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_677_listAccounts)
-HXLINE( 677)			if (::hx::IsNull( result )) {
-HXLINE( 677)				return ::Array_obj< ::String >::__new(0);
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_703_listAccounts)
+HXLINE( 703)			if (::hx::IsNull( result )) {
+HXLINE( 703)				return ::Array_obj< ::String >::__new(0);
             			}
             			else {
-HXLINE( 677)				::Array< ::String > _g = ::Array_obj< ::String >::__new(0);
-HXDLIN( 677)				{
+HXLINE( 703)				::Array< ::String > _g = ::Array_obj< ::String >::__new(0);
+HXDLIN( 703)				{
             					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::haxe::iterators::ArrayIterator,result) HXARGC(0)
             					 ::haxe::iterators::ArrayIterator _hx_run(){
-            						HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_677_listAccounts)
-HXLINE( 677)						return result;
+            						HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_703_listAccounts)
+HXLINE( 703)						return result;
             					}
             					HX_END_LOCAL_FUNC0(return)
 
-HXLINE( 677)					 ::Dynamic x =  ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE( 703)					 ::Dynamic x =  ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("iterator",ee,49,9a,93), ::Dynamic(new _hx_Closure_0(result))))->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 677)					while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 677)						_g->push( ::Dynamic(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()->__Field(HX_("account_id",6d,df,ad,00),::hx::paccDynamic)));
+HXDLIN( 703)					while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 703)						_g->push( ::Dynamic(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()->__Field(HX_("account_id",6d,df,ad,00),::hx::paccDynamic)));
             					}
             				}
-HXDLIN( 677)				return _g;
+HXDLIN( 703)				return _g;
             			}
-HXDLIN( 677)			return null();
+HXDLIN( 703)			return null();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_676_listAccounts)
-HXDLIN( 676)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT account_id FROM accounts",4d,82,81,0c),null()), ::Dynamic(new _hx_Closure_1()),null());
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_702_listAccounts)
+HXDLIN( 702)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT account_id FROM accounts",4d,82,81,0c),null()), ::Dynamic(new _hx_Closure_1()),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC0(Sqlite_obj,listAccounts,return )
 
 void Sqlite_obj::listAccounts__fromC(::cpp::Function< void  (const char**,size_t,void*) > handler,void* handler__context){
-            	HX_STACKFRAME(&_hx_pos_e0e41eef74e41160_313_listAccounts__fromC)
-HXDLIN( 313)		if (::hx::IsNull( handler )) {
-HXDLIN( 313)			this->listAccounts();
+            	HX_STACKFRAME(&_hx_pos_e0e41eef74e41160_337_listAccounts__fromC)
+HXDLIN( 337)		if (::hx::IsNull( handler )) {
+HXDLIN( 337)			this->listAccounts();
             		}
             		else {
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::Function< void  (const char** HX_COMMA size_t HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
             			void _hx_run(::Array< ::String > v){
-            				HX_STACKFRAME(&_hx_pos_e0e41eef74e41160_313_listAccounts__fromC)
-HXDLIN( 313)				::cpp::Function< void  (const char**,size_t,void*) > handler1 = handler;
-HXLINE( 291)				::Array< size_t > arr = ::Array_obj< size_t >::__new(v->length);
-HXDLIN( 291)				{
-HXLINE( 291)					int _g_current = 0;
-HXDLIN( 291)					::Array< ::String > _g_array = v;
-HXDLIN( 291)					while((_g_current < _g_array->length)){
-HXLINE( 291)						::String _g_value = _g_array->__get(_g_current);
-HXDLIN( 291)						_g_current = (_g_current + 1);
-HXDLIN( 291)						::String el = _g_value;
-HXDLIN( 291)						{
-HXLINE( 291)							const char* cStrPtr = el.utf8_str();
-HXDLIN( 291)							::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
-HXDLIN( 291)							{
-HXLINE( 291)								 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
-HXDLIN( 291)								if (::hx::IsNull( store )) {
-HXLINE(2192)									store =  ::Dynamic(::hx::Anon_obj::Create(2)
+            				HX_STACKFRAME(&_hx_pos_e0e41eef74e41160_337_listAccounts__fromC)
+HXDLIN( 337)				::cpp::Function< void  (const char**,size_t,void*) > handler1 = handler;
+HXLINE( 308)				::Array< size_t > arr = ::Array_obj< size_t >::__new(v->length);
+HXDLIN( 308)				{
+HXLINE( 308)					int _g_current = 0;
+HXDLIN( 308)					::Array< ::String > _g_array = v;
+HXDLIN( 308)					while((_g_current < _g_array->length)){
+HXLINE( 308)						::String _g_value = _g_array->__get(_g_current);
+HXDLIN( 308)						_g_current = (_g_current + 1);
+HXDLIN( 308)						::String el = _g_value;
+HXDLIN( 308)						{
+HXLINE( 308)							const char* cStrPtr = el.utf8_str();
+HXDLIN( 308)							::cpp::Int64 ptrInt64 = reinterpret_cast<int64_t>(cStrPtr);
+HXDLIN( 308)							{
+HXLINE( 308)								 ::Dynamic store = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt64);
+HXDLIN( 308)								if (::hx::IsNull( store )) {
+HXLINE(2243)									store =  ::Dynamic(::hx::Anon_obj::Create(2)
             										->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             										->setFixed(1,HX_("value",71,7f,b8,31),el));
-HXLINE( 291)									::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
+HXLINE( 308)									::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt64,store);
             								}
             								else {
-HXLINE( 291)									::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE( 308)									::hx::FieldRef((store).mPtr,HX_("refCount",7c,2e,66,86))++;
             								}
             							}
-HXDLIN( 291)							const char* ptr = cStrPtr;
-HXDLIN( 291)							arr[(_g_current - 1)] = reinterpret_cast<size_t>(ptr);
+HXDLIN( 308)							const char* ptr = cStrPtr;
+HXDLIN( 308)							arr[(_g_current - 1)] = reinterpret_cast<size_t>(ptr);
             						}
             					}
             				}
-HXDLIN( 291)				void** ptr1 = (void**)arr->getBase();
-HXDLIN( 291)				::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
-HXDLIN( 291)				{
-HXLINE( 291)					 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
-HXDLIN( 291)					if (::hx::IsNull( store1 )) {
-HXLINE(2192)						store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
+HXDLIN( 308)				void** ptr1 = (void**)arr->getBase();
+HXDLIN( 308)				::cpp::Int64 ptrInt641 = reinterpret_cast<int64_t>(ptr1);
+HXDLIN( 308)				{
+HXLINE( 308)					 ::Dynamic store1 = ::_HaxeCBridge::Internal_obj::gcRetainMap->get(ptrInt641);
+HXDLIN( 308)					if (::hx::IsNull( store1 )) {
+HXLINE(2243)						store1 =  ::Dynamic(::hx::Anon_obj::Create(2)
             							->setFixed(0,HX_("refCount",7c,2e,66,86),1)
             							->setFixed(1,HX_("value",71,7f,b8,31),arr));
-HXLINE( 291)						::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
+HXLINE( 308)						::_HaxeCBridge::Internal_obj::gcRetainMap->set(ptrInt641,store1);
             					}
             					else {
-HXLINE( 291)						::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
+HXLINE( 308)						::hx::FieldRef((store1).mPtr,HX_("refCount",7c,2e,66,86))++;
             					}
             				}
-HXLINE( 313)				handler1(( (const char**)(ptr1) ),( (size_t)(v->length) ),handler__context);
+HXLINE( 337)				handler1(( (const char**)(ptr1) ),( (size_t)(v->length) ),handler__context);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
             			HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1,::cpp::Function< void  (const char** HX_COMMA size_t HX_COMMA void*) >,handler,void*,handler__context) HXARGC(1)
             			void _hx_run( ::Dynamic e){
-            				HX_STACKFRAME(&_hx_pos_e0e41eef74e41160_313_listAccounts__fromC)
-HXDLIN( 313)				handler(null(),( (size_t)(0) ),handler__context);
+            				HX_STACKFRAME(&_hx_pos_e0e41eef74e41160_337_listAccounts__fromC)
+HXDLIN( 337)				handler(null(),( (size_t)(0) ),handler__context);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-HXDLIN( 313)			::thenshim::_Promise::Promise_Impl__obj::then(this->listAccounts(), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
+HXDLIN( 337)			::thenshim::_Promise::Promise_Impl__obj::then(this->listAccounts(), ::Dynamic(new _hx_Closure_0(handler,handler__context)), ::Dynamic(new _hx_Closure_1(handler,handler__context)));
             		}
             	}
 
 
 void Sqlite_obj::storeStreamManagement(::String accountId,::Array< unsigned char > sm){
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_684_storeStreamManagement)
-HXDLIN( 684)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 685)		this->smStoreNext = sm;
-HXLINE( 686)		if (!(this->smStoreInProgress)) {
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_710_storeStreamManagement)
+HXDLIN( 710)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 711)		this->smStoreNext = sm;
+HXLINE( 712)		if (!(this->smStoreInProgress)) {
             			HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::Sqlite,_gthis,::String,accountId,::Array< unsigned char >,sm) HXARGC(1)
             			void _hx_run( ::haxe::iterators::ArrayIterator _){
-            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_691_storeStreamManagement)
-HXLINE( 692)				_gthis->smStoreInProgress = false;
-HXLINE( 693)				if (::hx::IsPointerNotEq( _gthis->smStoreNext,sm )) {
-HXLINE( 693)					_gthis->storeStreamManagement(accountId,sm);
+            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_717_storeStreamManagement)
+HXLINE( 718)				_gthis->smStoreInProgress = false;
+HXLINE( 719)				if (::hx::IsPointerNotEq( _gthis->smStoreNext,sm )) {
+HXLINE( 719)					_gthis->storeStreamManagement(accountId,sm);
             				}
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 687)			this->smStoreInProgress = true;
-HXLINE( 688)			::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("UPDATE accounts SET sm_state=? WHERE account_id=?",39,71,68,1b),::cpp::VirtualArray_obj::__new(2)->init(0,sm)->init(1,accountId)), ::Dynamic(new _hx_Closure_0(_gthis,accountId,sm)),null());
+HXLINE( 713)			this->smStoreInProgress = true;
+HXLINE( 714)			::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("UPDATE accounts SET sm_state=? WHERE account_id=?",39,71,68,1b),::cpp::VirtualArray_obj::__new(2)->init(0,sm)->init(1,accountId)), ::Dynamic(new _hx_Closure_0(_gthis,accountId,sm)),null());
             		}
             	}
 
@@ -2343,26 +2170,26 @@ HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,storeStreamManagement,(void))
 ::Dynamic Sqlite_obj::getStreamManagement(::String accountId){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		::Dynamic _hx_run( ::haxe::iterators::ArrayIterator result){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_700_getStreamManagement)
-HXLINE( 701)			while((result->current < result->array->get_length())){
-HXLINE( 702)				return  ::Dynamic(result->array->__get(result->current++)->__Field(HX_("sm_state",6c,91,3f,e6),::hx::paccDynamic));
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_726_getStreamManagement)
+HXLINE( 727)			while((result->current < result->array->get_length())){
+HXLINE( 728)				return  ::Dynamic(result->array->__get(result->current++)->__Field(HX_("sm_state",6c,91,3f,e6),::hx::paccDynamic));
             			}
-HXLINE( 705)			return null();
+HXLINE( 731)			return null();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_700_getStreamManagement)
-HXDLIN( 700)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT sm_state FROM accounts  WHERE account_id=?",94,7f,74,ea),::cpp::VirtualArray_obj::__new(1)->init(0,accountId)), ::Dynamic(new _hx_Closure_0()),null());
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_726_getStreamManagement)
+HXDLIN( 726)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT sm_state FROM accounts  WHERE account_id=?",94,7f,74,ea),::cpp::VirtualArray_obj::__new(1)->init(0,accountId)), ::Dynamic(new _hx_Closure_0()),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Sqlite_obj,getStreamManagement,return )
 
 void Sqlite_obj::storeService(::String accountId,::String serviceId,::String name,::String node, ::borogove::Caps caps){
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_710_storeService)
-HXLINE( 711)		this->storeCaps(caps);
-HXLINE( 713)		 ::borogove::persistence::SqliteDriver _hx_tmp = this->db;
-HXDLIN( 713)		_hx_tmp->exec(HX_("INSERT OR REPLACE INTO services VALUES (?,?,?,?,?)",2c,3a,d9,f8),::cpp::VirtualArray_obj::__new(5)->init(0,accountId)->init(1,serviceId)->init(2,name)->init(3,node)->init(4,caps->verRaw()->hash));
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_736_storeService)
+HXLINE( 737)		this->storeCaps(caps);
+HXLINE( 739)		 ::borogove::persistence::SqliteDriver _hx_tmp = this->db;
+HXDLIN( 739)		_hx_tmp->exec(HX_("INSERT OR REPLACE INTO services VALUES (?,?,?,?,?)",2c,3a,d9,f8),::cpp::VirtualArray_obj::__new(5)->init(0,accountId)->init(1,serviceId)->init(2,name)->init(3,node)->init(4,caps->verRaw()->hash));
             	}
 
 
@@ -2371,43 +2198,43 @@ HX_DEFINE_DYNAMIC_FUNC5(Sqlite_obj,storeService,(void))
 ::Dynamic Sqlite_obj::findServicesWithFeature(::String accountId,::String feature){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::Sqlite,_gthis,::String,feature) HXARGC(1)
             		::Array< ::Dynamic> _hx_run( ::haxe::iterators::ArrayIterator result){
-            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_725_findServicesWithFeature)
-HXLINE( 726)			::Array< ::Dynamic> services = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 727)			while((result->current < result->array->get_length())){
-HXLINE( 727)				 ::Dynamic row = result->array->__get(result->current++);
-HXLINE( 728)				 ::Dynamic json =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic)) ))->doParse();
-HXLINE( 729)				::Array< ::String > features;
-HXDLIN( 729)				::Array< ::String > tmp;
-HXDLIN( 729)				if (::hx::IsNotNull( json )) {
-HXLINE( 729)					tmp = ( (::Array< ::String >)(json->__Field(HX_("features",fd,6c,d7,12),::hx::paccDynamic)) );
+            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_751_findServicesWithFeature)
+HXLINE( 752)			::Array< ::Dynamic> services = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 753)			while((result->current < result->array->get_length())){
+HXLINE( 753)				 ::Dynamic row = result->array->__get(result->current++);
+HXLINE( 754)				 ::Dynamic json =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic)) ))->doParse();
+HXLINE( 755)				::Array< ::String > features;
+HXDLIN( 755)				::Array< ::String > tmp;
+HXDLIN( 755)				if (::hx::IsNotNull( json )) {
+HXLINE( 755)					tmp = ( (::Array< ::String >)(json->__Field(HX_("features",fd,6c,d7,12),::hx::paccDynamic)) );
             				}
             				else {
-HXLINE( 729)					tmp = null();
+HXLINE( 755)					tmp = null();
             				}
-HXDLIN( 729)				if (::hx::IsNotNull( tmp )) {
-HXLINE( 729)					features = tmp;
+HXDLIN( 755)				if (::hx::IsNotNull( tmp )) {
+HXLINE( 755)					features = tmp;
             				}
             				else {
-HXLINE( 729)					features = ::Array_obj< ::String >::__new(0);
+HXLINE( 755)					features = ::Array_obj< ::String >::__new(0);
             				}
-HXLINE( 730)				if (features->contains(feature)) {
-HXLINE( 732)					::String row1 = ( (::String)(row->__Field(HX_("service_id",e5,24,3d,7d),::hx::paccDynamic)) );
-HXLINE( 733)					::String row2 = ( (::String)(row->__Field(HX_("name",4b,72,ff,48),::hx::paccDynamic)) );
-HXLINE( 734)					::String row3 = ( (::String)(row->__Field(HX_("node",02,0a,0a,49),::hx::paccDynamic)) );
-HXLINE( 731)					services->push( ::Dynamic(::hx::Anon_obj::Create(4)
+HXLINE( 756)				if (features->contains(feature)) {
+HXLINE( 758)					::String row1 = ( (::String)(row->__Field(HX_("service_id",e5,24,3d,7d),::hx::paccDynamic)) );
+HXLINE( 759)					::String row2 = ( (::String)(row->__Field(HX_("name",4b,72,ff,48),::hx::paccDynamic)) );
+HXLINE( 760)					::String row3 = ( (::String)(row->__Field(HX_("node",02,0a,0a,49),::hx::paccDynamic)) );
+HXLINE( 757)					services->push( ::Dynamic(::hx::Anon_obj::Create(4)
             						->setFixed(0,HX_("serviceId",70,93,d4,bc),row1)
             						->setFixed(1,HX_("caps",21,1c,ba,41),_gthis->hydrateCaps(json,null()))
             						->setFixed(2,HX_("name",4b,72,ff,48),row2)
             						->setFixed(3,HX_("node",02,0a,0a,49),row3)));
             				}
             			}
-HXLINE( 739)			return services;
+HXLINE( 765)			return services;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_720_findServicesWithFeature)
-HXDLIN( 720)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 722)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT service_id, name, node, json(caps.caps) AS caps FROM services INNER JOIN caps ON services.caps=caps.sha1 WHERE account_id=?",fc,fb,5f,40),::cpp::VirtualArray_obj::__new(1)->init(0,accountId)), ::Dynamic(new _hx_Closure_0(_gthis,feature)),null());
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_746_findServicesWithFeature)
+HXDLIN( 746)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 748)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT service_id, name, node, json(caps.caps) AS caps FROM services INNER JOIN caps ON services.caps=caps.sha1 WHERE account_id=?",fc,fb,5f,40),::cpp::VirtualArray_obj::__new(1)->init(0,accountId)), ::Dynamic(new _hx_Closure_0(_gthis,feature)),null());
             	}
 
 
@@ -2416,71 +2243,71 @@ HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,findServicesWithFeature,return )
 ::Dynamic Sqlite_obj::hydrateReactions(::String accountId,::Array< ::Dynamic> messages){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0,::Array< ::Dynamic>,messages) HXARGC(1)
             		::Array< ::Dynamic> _hx_run( ::haxe::ds::StringMap result){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_744_hydrateReactions)
-HXLINE( 745)			{
-HXLINE( 745)				::Dynamic map = result;
-HXDLIN( 745)				 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map);
-HXDLIN( 745)				while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 745)					::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN( 745)					 ::haxe::ds::StringMap _g_value = ( ( ::haxe::ds::StringMap)(::haxe::IMap_obj::get(map,key)) );
-HXDLIN( 745)					{
-HXLINE( 746)						 ::borogove::ChatMessage result1 = null();
-HXDLIN( 746)						{
-HXLINE( 746)							int _g = 0;
-HXDLIN( 746)							while((_g < messages->length)){
-HXLINE( 746)								 ::borogove::ChatMessage v = messages->__get(_g).StaticCast<  ::borogove::ChatMessage >();
-HXDLIN( 746)								_g = (_g + 1);
-HXLINE( 747)								bool m;
-HXDLIN( 747)								::String m1;
-HXDLIN( 747)								if (::hx::IsNull( v->serverId )) {
-HXLINE( 747)									m1 = v->localId;
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_770_hydrateReactions)
+HXLINE( 771)			{
+HXLINE( 771)				::Dynamic map = result;
+HXDLIN( 771)				 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map);
+HXDLIN( 771)				while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 771)					::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN( 771)					 ::haxe::ds::StringMap _g_value = ( ( ::haxe::ds::StringMap)(::haxe::IMap_obj::get(map,key)) );
+HXDLIN( 771)					{
+HXLINE( 772)						 ::borogove::ChatMessage result1 = null();
+HXDLIN( 772)						{
+HXLINE( 772)							int _g = 0;
+HXDLIN( 772)							while((_g < messages->length)){
+HXLINE( 772)								 ::borogove::ChatMessage v = messages->__get(_g).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN( 772)								_g = (_g + 1);
+HXLINE( 773)								bool m;
+HXDLIN( 773)								::String m1;
+HXDLIN( 773)								if (::hx::IsNull( v->serverId )) {
+HXLINE( 773)									m1 = v->localId;
             								}
             								else {
-HXLINE( 747)									m1 = ((v->serverId + HX_("\n",0a,00,00,00)) + v->serverIdBy);
+HXLINE( 773)									m1 = ((v->serverId + HX_("\n",0a,00,00,00)) + v->serverIdBy);
             								}
-HXDLIN( 747)								if ((((m1 + HX_("\n",0a,00,00,00)) + v->chatId()) != key)) {
-HXLINE( 748)									::String m2;
-HXDLIN( 748)									if (::hx::IsNull( v->localId )) {
-HXLINE( 748)										m2 = ((v->serverId + HX_("\n",0a,00,00,00)) + v->serverIdBy);
+HXDLIN( 773)								if ((((m1 + HX_("\n",0a,00,00,00)) + v->chatId()) != key)) {
+HXLINE( 774)									::String m2;
+HXDLIN( 774)									if (::hx::IsNull( v->localId )) {
+HXLINE( 774)										m2 = ((v->serverId + HX_("\n",0a,00,00,00)) + v->serverIdBy);
             									}
             									else {
-HXLINE( 748)										m2 = v->localId;
+HXLINE( 774)										m2 = v->localId;
             									}
-HXLINE( 747)									m = (((m2 + HX_("\n",0a,00,00,00)) + v->chatId()) == key);
+HXLINE( 773)									m = (((m2 + HX_("\n",0a,00,00,00)) + v->chatId()) == key);
             								}
             								else {
-HXLINE( 747)									m = true;
+HXLINE( 773)									m = true;
             								}
-HXLINE( 746)								if (m) {
+HXLINE( 772)								if (m) {
 HXLINE(  71)									result1 = v;
-HXLINE( 746)									goto _hx_goto_162;
+HXLINE( 772)									goto _hx_goto_147;
             								}
             							}
-            							_hx_goto_162:;
+            							_hx_goto_147:;
             						}
-HXDLIN( 746)						 ::borogove::ChatMessage m3 = result1;
-HXLINE( 750)						if (::hx::IsNotNull( m3 )) {
-HXLINE( 750)							m3->set_reactions(_g_value);
+HXDLIN( 772)						 ::borogove::ChatMessage m3 = result1;
+HXLINE( 776)						if (::hx::IsNotNull( m3 )) {
+HXLINE( 776)							m3->set_reactions(_g_value);
             						}
             					}
             				}
             			}
-HXLINE( 752)			return messages;
+HXLINE( 778)			return messages;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_744_hydrateReactions)
-HXDLIN( 744)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(messages->length);
-HXDLIN( 744)		{
-HXDLIN( 744)			int _g = 0;
-HXDLIN( 744)			int _g1 = messages->length;
-HXDLIN( 744)			while((_g < _g1)){
-HXDLIN( 744)				_g = (_g + 1);
-HXDLIN( 744)				int i = (_g - 1);
-HXDLIN( 744)				{
-HXDLIN( 744)					 ::borogove::ChatMessage m = ( ( ::borogove::ChatMessage)(_hx_array_unsafe_get(messages,i)) );
-HXDLIN( 744)					::String inValue = m->chatId();
-HXDLIN( 744)					result->__unsafe_set(i, ::Dynamic(::hx::Anon_obj::Create(4)
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_770_hydrateReactions)
+HXDLIN( 770)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(messages->length);
+HXDLIN( 770)		{
+HXDLIN( 770)			int _g = 0;
+HXDLIN( 770)			int _g1 = messages->length;
+HXDLIN( 770)			while((_g < _g1)){
+HXDLIN( 770)				_g = (_g + 1);
+HXDLIN( 770)				int i = (_g - 1);
+HXDLIN( 770)				{
+HXDLIN( 770)					 ::borogove::ChatMessage m = ( ( ::borogove::ChatMessage)(_hx_array_unsafe_get(messages,i)) );
+HXDLIN( 770)					::String inValue = m->chatId();
+HXDLIN( 770)					result->__unsafe_set(i, ::Dynamic(::hx::Anon_obj::Create(4)
             						->setFixed(0,HX_("chatId",d3,04,77,b7),inValue)
             						->setFixed(1,HX_("serverId",7e,01,b2,e2),m->serverId)
             						->setFixed(2,HX_("localId",26,7a,c6,2d),m->localId)
@@ -2488,7 +2315,7 @@ HXDLIN( 744)					result->__unsafe_set(i, ::Dynamic(::hx::Anon_obj::Create(4)
             				}
             			}
             		}
-HXDLIN( 744)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->fetchReactions(accountId,result), ::Dynamic(new _hx_Closure_0(messages)),null());
+HXDLIN( 770)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->fetchReactions(accountId,result), ::Dynamic(new _hx_Closure_0(messages)),null());
             	}
 
 
@@ -2497,170 +2324,170 @@ HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,hydrateReactions,return )
 ::Dynamic Sqlite_obj::fetchReactions(::String accountId,::Array< ::Dynamic> ids){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		 ::haxe::ds::StringMap _hx_run( ::haxe::iterators::ArrayIterator rows){
-            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_772_fetchReactions)
-HXLINE( 773)			 ::haxe::ds::StringMap agg =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE( 774)			while((rows->current < rows->array->get_length())){
-HXLINE( 774)				 ::Dynamic row = rows->array->__get(rows->current++);
-HXLINE( 775)				::cpp::VirtualArray reactions = ( (::cpp::VirtualArray)( ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("reactions",aa,cc,95,e7),::hx::paccDynamic)) ))->doParse()) );
-HXLINE( 776)				::String mapId;
-HXDLIN( 776)				bool mapId1;
-HXDLIN( 776)				if (::hx::IsNotNull( row->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic) )) {
-HXLINE( 776)					mapId1 = ::hx::IsEq( row->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic),HX_("",00,00,00,00) );
+            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_798_fetchReactions)
+HXLINE( 799)			 ::haxe::ds::StringMap agg =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 800)			while((rows->current < rows->array->get_length())){
+HXLINE( 800)				 ::Dynamic row = rows->array->__get(rows->current++);
+HXLINE( 801)				::cpp::VirtualArray reactions = ( (::cpp::VirtualArray)( ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("reactions",aa,cc,95,e7),::hx::paccDynamic)) ))->doParse()) );
+HXLINE( 802)				::String mapId;
+HXDLIN( 802)				bool mapId1;
+HXDLIN( 802)				if (::hx::IsNotNull( row->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic) )) {
+HXLINE( 802)					mapId1 = ::hx::IsEq( row->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic),HX_("",00,00,00,00) );
             				}
             				else {
-HXLINE( 776)					mapId1 = true;
+HXLINE( 802)					mapId1 = true;
             				}
-HXDLIN( 776)				if (mapId1) {
-HXLINE( 776)					mapId = ( (::String)(row->__Field(HX_("stanza_id",25,7b,7a,e9),::hx::paccDynamic)) );
+HXDLIN( 802)				if (mapId1) {
+HXLINE( 802)					mapId = ( (::String)(row->__Field(HX_("stanza_id",25,7b,7a,e9),::hx::paccDynamic)) );
             				}
             				else {
-HXLINE( 776)					mapId = ( (::String)(((row->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic) + HX_("\n",0a,00,00,00)) + row->__Field(HX_("mam_by",fd,46,19,b7),::hx::paccDynamic))) );
+HXLINE( 802)					mapId = ( (::String)(((row->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic) + HX_("\n",0a,00,00,00)) + row->__Field(HX_("mam_by",fd,46,19,b7),::hx::paccDynamic))) );
             				}
-HXDLIN( 776)				::String mapId2 = ( (::String)(((mapId + HX_("\n",0a,00,00,00)) + row->__Field(HX_("chat_id",22,ea,bd,d0),::hx::paccDynamic))) );
-HXLINE( 777)				if (!(agg->exists(mapId2))) {
-HXLINE( 777)					agg->set(mapId2, ::haxe::ds::StringMap_obj::__alloc( HX_CTX ));
+HXDLIN( 802)				::String mapId2 = ( (::String)(((mapId + HX_("\n",0a,00,00,00)) + row->__Field(HX_("chat_id",22,ea,bd,d0),::hx::paccDynamic))) );
+HXLINE( 803)				if (!(agg->exists(mapId2))) {
+HXLINE( 803)					agg->set(mapId2, ::haxe::ds::StringMap_obj::__alloc( HX_CTX ));
             				}
-HXLINE( 778)				 ::haxe::ds::StringMap map = ( ( ::haxe::ds::StringMap)(agg->get(mapId2)) );
-HXLINE( 779)				if (!(map->exists(( (::String)(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)) )))) {
-HXLINE( 779)					map->set(( (::String)(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)) ),::cpp::VirtualArray_obj::__new(0));
+HXLINE( 804)				 ::haxe::ds::StringMap map = ( ( ::haxe::ds::StringMap)(agg->get(mapId2)) );
+HXLINE( 805)				if (!(map->exists(( (::String)(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)) )))) {
+HXLINE( 805)					map->set(( (::String)(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)) ),::cpp::VirtualArray_obj::__new(0));
             				}
-HXLINE( 780)				if (::hx::IsEq( row->__Field(HX_("kind",54,e1,09,47),::hx::paccDynamic),1 )) {
-HXLINE( 781)					int _g = 0;
-HXDLIN( 781)					while((_g < reactions->get_length())){
-HXLINE( 781)						 ::Dynamic reaction = reactions->__get(_g);
-HXDLIN( 781)						_g = (_g + 1);
-HXDLIN( 781)						( (::cpp::VirtualArray)(map->get( ::Dynamic(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)))) )->push(reaction);
+HXLINE( 806)				if (::hx::IsEq( row->__Field(HX_("kind",54,e1,09,47),::hx::paccDynamic),1 )) {
+HXLINE( 807)					int _g = 0;
+HXDLIN( 807)					while((_g < reactions->get_length())){
+HXLINE( 807)						 ::Dynamic reaction = reactions->__get(_g);
+HXDLIN( 807)						_g = (_g + 1);
+HXDLIN( 807)						( (::cpp::VirtualArray)(map->get( ::Dynamic(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)))) )->push(reaction);
             					}
             				}
             				else {
-HXLINE( 782)					if (::hx::IsEq( row->__Field(HX_("kind",54,e1,09,47),::hx::paccDynamic),0 )) {
-HXLINE( 783)						::String k = ( (::String)(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)) );
-HXDLIN( 783)						::cpp::VirtualArray _this = ( (::cpp::VirtualArray)(map->get( ::Dynamic(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)))) );
-HXDLIN( 783)						::cpp::VirtualArray _g1 = ::cpp::VirtualArray_obj::__new(0);
-HXDLIN( 783)						{
-HXLINE( 783)							int _g2 = 0;
-HXDLIN( 783)							while((_g2 < _this->get_length())){
-HXLINE( 783)								 ::Dynamic v = _this->__get(_g2);
-HXDLIN( 783)								_g2 = (_g2 + 1);
-HXDLIN( 783)								if (::hx::IsNotNull( v->__Field(HX_("uri",6c,2b,59,00),::hx::paccDynamic) )) {
-HXLINE( 783)									_g1->push(v);
+HXLINE( 808)					if (::hx::IsEq( row->__Field(HX_("kind",54,e1,09,47),::hx::paccDynamic),0 )) {
+HXLINE( 809)						::String k = ( (::String)(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)) );
+HXDLIN( 809)						::cpp::VirtualArray _this = ( (::cpp::VirtualArray)(map->get( ::Dynamic(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)))) );
+HXDLIN( 809)						::cpp::VirtualArray _g1 = ::cpp::VirtualArray_obj::__new(0);
+HXDLIN( 809)						{
+HXLINE( 809)							int _g2 = 0;
+HXDLIN( 809)							while((_g2 < _this->get_length())){
+HXLINE( 809)								 ::Dynamic v = _this->__get(_g2);
+HXDLIN( 809)								_g2 = (_g2 + 1);
+HXDLIN( 809)								if (::hx::IsNotNull( v->__Field(HX_("uri",6c,2b,59,00),::hx::paccDynamic) )) {
+HXLINE( 809)									_g1->push(v);
             								}
             							}
             						}
-HXDLIN( 783)						::cpp::VirtualArray v1 = reactions->concat(_g1);
-HXDLIN( 783)						map->set(k,v1);
+HXDLIN( 809)						::cpp::VirtualArray v1 = reactions->concat(_g1);
+HXDLIN( 809)						map->set(k,v1);
             					}
             					else {
-HXLINE( 784)						if (::hx::IsEq( row->__Field(HX_("kind",54,e1,09,47),::hx::paccDynamic),2 )) {
-HXLINE( 785)							map->set(( (::String)(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)) ),reactions);
+HXLINE( 810)						if (::hx::IsEq( row->__Field(HX_("kind",54,e1,09,47),::hx::paccDynamic),2 )) {
+HXLINE( 811)							map->set(( (::String)(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)) ),reactions);
             						}
             					}
             				}
             			}
-HXLINE( 788)			 ::haxe::ds::StringMap result =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE( 789)			{
-HXLINE( 789)				::Dynamic map1 = agg;
-HXDLIN( 789)				 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map1);
-HXDLIN( 789)				while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 789)					::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN( 789)					 ::haxe::ds::StringMap _g_value = ( ( ::haxe::ds::StringMap)(::haxe::IMap_obj::get(map1,key)) );
-HXDLIN( 789)					{
-HXLINE( 790)						 ::haxe::ds::StringMap map2 =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE( 791)						{
-HXLINE( 791)							 ::Dynamic reactionsBySender = _g_value->iterator();
-HXDLIN( 791)							while(( (bool)(reactionsBySender->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 791)								::cpp::VirtualArray reactionsBySender1 = ( (::cpp::VirtualArray)(reactionsBySender->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXLINE( 792)								{
-HXLINE( 792)									int _g3 = 0;
-HXDLIN( 792)									while((_g3 < reactionsBySender1->get_length())){
-HXLINE( 792)										 ::Dynamic reactionD = reactionsBySender1->__get(_g3);
-HXDLIN( 792)										_g3 = (_g3 + 1);
-HXLINE( 793)										 ::borogove::Reaction reaction1;
-HXDLIN( 793)										if (::hx::IsNull( reactionD->__Field(HX_("uri",6c,2b,59,00),::hx::paccDynamic) )) {
-HXLINE( 793)											reaction1 =  ::borogove::Reaction_obj::__alloc( HX_CTX ,( (::String)(reactionD->__Field(HX_("senderId",f0,1e,0e,ec),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("timestamp",d6,d4,ce,a5),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("text",ad,cc,f9,4c),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("envelopeId",0b,03,af,a8),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("key",9f,89,51,00),::hx::paccDynamic)) ));
+HXLINE( 814)			 ::haxe::ds::StringMap result =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 815)			{
+HXLINE( 815)				::Dynamic map1 = agg;
+HXDLIN( 815)				 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map1);
+HXDLIN( 815)				while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 815)					::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN( 815)					 ::haxe::ds::StringMap _g_value = ( ( ::haxe::ds::StringMap)(::haxe::IMap_obj::get(map1,key)) );
+HXDLIN( 815)					{
+HXLINE( 816)						 ::haxe::ds::StringMap map2 =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 817)						{
+HXLINE( 817)							 ::Dynamic reactionsBySender = _g_value->iterator();
+HXDLIN( 817)							while(( (bool)(reactionsBySender->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 817)								::cpp::VirtualArray reactionsBySender1 = ( (::cpp::VirtualArray)(reactionsBySender->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXLINE( 818)								{
+HXLINE( 818)									int _g3 = 0;
+HXDLIN( 818)									while((_g3 < reactionsBySender1->get_length())){
+HXLINE( 818)										 ::Dynamic reactionD = reactionsBySender1->__get(_g3);
+HXDLIN( 818)										_g3 = (_g3 + 1);
+HXLINE( 819)										 ::borogove::Reaction reaction1;
+HXDLIN( 819)										if (::hx::IsNull( reactionD->__Field(HX_("uri",6c,2b,59,00),::hx::paccDynamic) )) {
+HXLINE( 819)											reaction1 =  ::borogove::Reaction_obj::__alloc( HX_CTX ,( (::String)(reactionD->__Field(HX_("senderId",f0,1e,0e,ec),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("timestamp",d6,d4,ce,a5),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("text",ad,cc,f9,4c),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("envelopeId",0b,03,af,a8),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("key",9f,89,51,00),::hx::paccDynamic)) ));
             										}
             										else {
-HXLINE( 793)											reaction1 =  ::borogove::CustomEmojiReaction_obj::__alloc( HX_CTX ,( (::String)(reactionD->__Field(HX_("senderId",f0,1e,0e,ec),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("timestamp",d6,d4,ce,a5),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("text",ad,cc,f9,4c),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("uri",6c,2b,59,00),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("envelopeId",0b,03,af,a8),::hx::paccDynamic)) ));
+HXLINE( 819)											reaction1 =  ::borogove::CustomEmojiReaction_obj::__alloc( HX_CTX ,( (::String)(reactionD->__Field(HX_("senderId",f0,1e,0e,ec),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("timestamp",d6,d4,ce,a5),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("text",ad,cc,f9,4c),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("uri",6c,2b,59,00),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("envelopeId",0b,03,af,a8),::hx::paccDynamic)) ));
             										}
-HXLINE( 799)										if (!(map2->exists(reaction1->key))) {
-HXLINE( 799)											map2->set(reaction1->key,::Array_obj< ::Dynamic>::__new(0));
+HXLINE( 825)										if (!(map2->exists(reaction1->key))) {
+HXLINE( 825)											map2->set(reaction1->key,::Array_obj< ::Dynamic>::__new(0));
             										}
-HXLINE( 800)										( (::Array< ::Dynamic>)(map2->get(reaction1->key)) )->push(reaction1);
+HXLINE( 826)										( (::Array< ::Dynamic>)(map2->get(reaction1->key)) )->push(reaction1);
             									}
             								}
             							}
             						}
-HXLINE( 803)						result->set(key,map2);
+HXLINE( 829)						result->set(key,map2);
             					}
             				}
             			}
-HXLINE( 805)			return result;
+HXLINE( 831)			return result;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_756_fetchReactions)
-HXLINE( 757)		 ::StringBuf q =  ::StringBuf_obj::__alloc( HX_CTX );
-HXLINE( 758)		{
-HXLINE( 758)			if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 758)				q->flush();
+            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_782_fetchReactions)
+HXLINE( 783)		 ::StringBuf q =  ::StringBuf_obj::__alloc( HX_CTX );
+HXLINE( 784)		{
+HXLINE( 784)			if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 784)				q->flush();
             			}
-HXDLIN( 758)			if (::hx::IsNull( q->b )) {
-HXLINE( 758)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_174,1);
+HXDLIN( 784)			if (::hx::IsNull( q->b )) {
+HXLINE( 784)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_159,1);
             			}
             			else {
-HXLINE( 758)				q->b->push(HX_("SELECT kind, chat_id, mam_id, mam_by, stanza_id, sender_id, json(reactions) AS reactions FROM reactions WHERE 1=0",d2,04,de,a3));
-            			}
-            		}
-HXLINE( 759)		::Array< ::String > params = ::Array_obj< ::String >::__new(0);
-HXLINE( 760)		{
-HXLINE( 760)			int _g = 0;
-HXDLIN( 760)			while((_g < ids->length)){
-HXLINE( 760)				 ::Dynamic item = ids->__get(_g);
-HXDLIN( 760)				_g = (_g + 1);
-HXLINE( 761)				if (::hx::IsNotNull( item->__Field(HX_("serverId",7e,01,b2,e2),::hx::paccDynamic) )) {
-HXLINE( 762)					{
-HXLINE( 762)						if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 762)							q->flush();
+HXLINE( 784)				q->b->push(HX_("SELECT kind, chat_id, mam_id, mam_by, stanza_id, sender_id, json(reactions) AS reactions FROM reactions WHERE 1=0",d2,04,de,a3));
+            			}
+            		}
+HXLINE( 785)		::Array< ::String > params = ::Array_obj< ::String >::__new(0);
+HXLINE( 786)		{
+HXLINE( 786)			int _g = 0;
+HXDLIN( 786)			while((_g < ids->length)){
+HXLINE( 786)				 ::Dynamic item = ids->__get(_g);
+HXDLIN( 786)				_g = (_g + 1);
+HXLINE( 787)				if (::hx::IsNotNull( item->__Field(HX_("serverId",7e,01,b2,e2),::hx::paccDynamic) )) {
+HXLINE( 788)					{
+HXLINE( 788)						if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 788)							q->flush();
             						}
-HXDLIN( 762)						if (::hx::IsNull( q->b )) {
-HXLINE( 762)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_175,1);
+HXDLIN( 788)						if (::hx::IsNull( q->b )) {
+HXLINE( 788)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_160,1);
             						}
             						else {
-HXLINE( 762)							q->b->push(HX_(" OR (mam_id=? AND mam_by=?)",0f,bb,c5,e5));
+HXLINE( 788)							q->b->push(HX_(" OR (mam_id=? AND mam_by=?)",0f,bb,c5,e5));
             						}
             					}
-HXLINE( 763)					params->push( ::Dynamic(item->__Field(HX_("serverId",7e,01,b2,e2),::hx::paccDynamic)));
-HXLINE( 764)					params->push( ::Dynamic(item->__Field(HX_("serverIdBy",f5,16,54,74),::hx::paccDynamic)));
+HXLINE( 789)					params->push( ::Dynamic(item->__Field(HX_("serverId",7e,01,b2,e2),::hx::paccDynamic)));
+HXLINE( 790)					params->push( ::Dynamic(item->__Field(HX_("serverIdBy",f5,16,54,74),::hx::paccDynamic)));
             				}
-HXLINE( 766)				if (::hx::IsNotNull( item->__Field(HX_("localId",26,7a,c6,2d),::hx::paccDynamic) )) {
-HXLINE( 767)					{
-HXLINE( 767)						if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 767)							q->flush();
+HXLINE( 792)				if (::hx::IsNotNull( item->__Field(HX_("localId",26,7a,c6,2d),::hx::paccDynamic) )) {
+HXLINE( 793)					{
+HXLINE( 793)						if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 793)							q->flush();
             						}
-HXDLIN( 767)						if (::hx::IsNull( q->b )) {
-HXLINE( 767)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_176,1);
+HXDLIN( 793)						if (::hx::IsNull( q->b )) {
+HXLINE( 793)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_161,1);
             						}
             						else {
-HXLINE( 767)							q->b->push(HX_(" OR stanza_id=?",6a,1d,f2,5b));
+HXLINE( 793)							q->b->push(HX_(" OR stanza_id=?",6a,1d,f2,5b));
             						}
             					}
-HXLINE( 768)					params->push( ::Dynamic(item->__Field(HX_("localId",26,7a,c6,2d),::hx::paccDynamic)));
+HXLINE( 794)					params->push( ::Dynamic(item->__Field(HX_("localId",26,7a,c6,2d),::hx::paccDynamic)));
             				}
             			}
             		}
-HXLINE( 771)		{
-HXLINE( 771)			if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 771)				q->flush();
+HXLINE( 797)		{
+HXLINE( 797)			if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 797)				q->flush();
             			}
-HXDLIN( 771)			if (::hx::IsNull( q->b )) {
-HXLINE( 771)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_177,1);
+HXDLIN( 797)			if (::hx::IsNull( q->b )) {
+HXLINE( 797)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_162,1);
             			}
             			else {
-HXLINE( 771)				q->b->push(HX_(" ORDER BY created_at, ROWID",00,65,8d,0e));
+HXLINE( 797)				q->b->push(HX_(" ORDER BY created_at, ROWID",00,65,8d,0e));
             			}
             		}
-HXLINE( 772)		 ::borogove::persistence::SqliteDriver _hx_tmp = this->db;
-HXDLIN( 772)		return ::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->exec(q->toString(),params), ::Dynamic(new _hx_Closure_0()),null());
+HXLINE( 798)		 ::borogove::persistence::SqliteDriver _hx_tmp = this->db;
+HXDLIN( 798)		return ::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->exec(q->toString(),params), ::Dynamic(new _hx_Closure_0()),null());
             	}
 
 
@@ -2669,341 +2496,396 @@ HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,fetchReactions,return )
 ::Dynamic Sqlite_obj::hydrateReplyTo(::String accountId,::Array< ::Dynamic> messages,::Array< ::Dynamic> replyTos){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_1,::Array< ::Dynamic>,messages, ::borogove::persistence::Sqlite,_gthis,::String,accountId) HXARGC(1)
             		::Array< ::Dynamic> _hx_run( ::haxe::iterators::ArrayIterator iter){
-            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_829_hydrateReplyTo)
-HXLINE( 830)			if (::hx::IsNotNull( iter )) {
+            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_866_hydrateReplyTo)
+HXLINE( 867)			if (::hx::IsNotNull( iter )) {
             				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::haxe::iterators::ArrayIterator,iter) HXARGC(0)
             				 ::haxe::iterators::ArrayIterator _hx_run(){
-            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_831_hydrateReplyTo)
-HXLINE( 831)					return iter;
+            					HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_868_hydrateReplyTo)
+HXLINE( 868)					return iter;
             				}
             				HX_END_LOCAL_FUNC0(return)
 
-HXLINE( 831)				::Array< ::Dynamic> parents = ::Lambda_obj::array( ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE( 868)				::Array< ::Dynamic> parents = ::Lambda_obj::array( ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("iterator",ee,49,9a,93), ::Dynamic(new _hx_Closure_0(iter)))));
-HXLINE( 832)				{
-HXLINE( 832)					int _g = 0;
-HXDLIN( 832)					while((_g < messages->length)){
-HXLINE( 832)						 ::borogove::ChatMessage message = messages->__get(_g).StaticCast<  ::borogove::ChatMessage >();
-HXDLIN( 832)						_g = (_g + 1);
-HXLINE( 833)						if (::hx::IsNotNull( message->replyToMessage )) {
-HXLINE( 834)							 ::Dynamic result = null();
-HXDLIN( 834)							{
-HXLINE( 834)								int _g1 = 0;
-HXDLIN( 834)								while((_g1 < parents->length)){
-HXLINE( 834)									 ::Dynamic v = parents->__get(_g1);
-HXDLIN( 834)									_g1 = (_g1 + 1);
-HXDLIN( 834)									bool found;
-HXDLIN( 834)									bool found1;
-HXDLIN( 834)									::String v1 = ( (::String)(v->__Field(HX_("chat_id",22,ea,bd,d0),::hx::paccDynamic)) );
-HXDLIN( 834)									if ((v1 == message->chatId())) {
-HXLINE( 834)										if (::hx::IsNotNull( message->replyToMessage->serverId )) {
-HXLINE( 834)											found1 = ::hx::IsEq( v->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic),message->replyToMessage->serverId );
+HXLINE( 869)				{
+HXLINE( 869)					int _g = 0;
+HXDLIN( 869)					while((_g < messages->length)){
+HXLINE( 869)						 ::borogove::ChatMessage message = messages->__get(_g).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN( 869)						_g = (_g + 1);
+HXLINE( 870)						if (::hx::IsNotNull( message->replyToMessage )) {
+HXLINE( 871)							 ::Dynamic result = null();
+HXDLIN( 871)							{
+HXLINE( 871)								int _g1 = 0;
+HXDLIN( 871)								while((_g1 < parents->length)){
+HXLINE( 871)									 ::Dynamic v = parents->__get(_g1);
+HXDLIN( 871)									_g1 = (_g1 + 1);
+HXDLIN( 871)									bool found;
+HXDLIN( 871)									bool found1;
+HXDLIN( 871)									::String v1 = ( (::String)(v->__Field(HX_("chat_id",22,ea,bd,d0),::hx::paccDynamic)) );
+HXDLIN( 871)									if ((v1 == message->chatId())) {
+HXLINE( 871)										if (::hx::IsNotNull( message->replyToMessage->serverId )) {
+HXLINE( 871)											found1 = ::hx::IsEq( v->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic),message->replyToMessage->serverId );
             										}
             										else {
-HXLINE( 834)											found1 = true;
+HXLINE( 871)											found1 = true;
             										}
             									}
             									else {
-HXLINE( 834)										found1 = false;
+HXLINE( 871)										found1 = false;
             									}
-HXDLIN( 834)									if (found1) {
-HXLINE( 834)										if (::hx::IsNotNull( message->replyToMessage->localId )) {
-HXLINE( 834)											found = ::hx::IsEq( v->__Field(HX_("stanza_id",25,7b,7a,e9),::hx::paccDynamic),message->replyToMessage->localId );
+HXDLIN( 871)									if (found1) {
+HXLINE( 871)										if (::hx::IsNotNull( message->replyToMessage->localId )) {
+HXLINE( 871)											found = ::hx::IsEq( v->__Field(HX_("stanza_id",25,7b,7a,e9),::hx::paccDynamic),message->replyToMessage->localId );
             										}
             										else {
-HXLINE( 834)											found = true;
+HXLINE( 871)											found = true;
             										}
             									}
             									else {
-HXLINE( 834)										found = false;
+HXLINE( 871)										found = false;
             									}
-HXDLIN( 834)									if (found) {
-HXLINE( 834)										result = v;
-HXDLIN( 834)										goto _hx_goto_180;
+HXDLIN( 871)									if (found) {
+HXLINE( 871)										result = v;
+HXDLIN( 871)										goto _hx_goto_165;
             									}
             								}
-            								_hx_goto_180:;
+            								_hx_goto_165:;
             							}
-HXDLIN( 834)							 ::Dynamic found2 = result;
-HXLINE( 835)							if (::hx::IsNotNull( found2 )) {
-HXLINE( 835)								message->set_replyToMessage(_gthis->hydrateMessages(accountId, ::haxe::iterators::ArrayIterator_obj::__alloc( HX_CTX ,::cpp::VirtualArray_obj::__new(1)->init(0,found2)))->__get(0).StaticCast<  ::borogove::ChatMessage >());
+HXDLIN( 871)							 ::Dynamic found2 = result;
+HXLINE( 872)							if (::hx::IsNotNull( found2 )) {
+HXLINE( 872)								message->set_replyToMessage(_gthis->hydrateMessages(accountId, ::haxe::iterators::ArrayIterator_obj::__alloc( HX_CTX ,::cpp::VirtualArray_obj::__new(1)->init(0,found2)))->__get(0).StaticCast<  ::borogove::ChatMessage >());
             							}
             						}
             					}
             				}
             			}
-HXLINE( 839)			return messages;
+HXLINE( 876)			return messages;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_809_hydrateReplyTo)
-HXDLIN( 809)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 810)		::Dynamic _hx_tmp;
-HXDLIN( 810)		if ((replyTos->length < 1)) {
-HXLINE( 810)			_hx_tmp = ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_835_hydrateReplyTo)
+HXDLIN( 835)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 836)		::Dynamic _hx_tmp;
+HXDLIN( 836)		if ((replyTos->length < 1)) {
+HXLINE( 836)			_hx_tmp = ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             		}
             		else {
-HXLINE( 813)			::Array< ::String > params = ::Array_obj< ::String >::__new(1)->init(0,accountId);
-HXLINE( 814)			 ::StringBuf q =  ::StringBuf_obj::__alloc( HX_CTX );
-HXLINE( 815)			{
-HXLINE( 815)				if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 815)					q->flush();
-            				}
-HXDLIN( 815)				if (::hx::IsNull( q->b )) {
-HXLINE( 815)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_184,1);
-            				}
-            				else {
-HXLINE( 815)					q->b->push(HX_("SELECT chat_id, stanza_id, stanza, direction, type, status, status_text, strftime('%FT%H:%M:%fZ', created_at / 1000.0, 'unixepoch') AS timestamp, sender_id, mam_id, mam_by, sync_point FROM messages WHERE account_id=? AND (",16,b7,14,0d));
-            				}
-            			}
-HXLINE( 816)			{
-HXLINE( 816)				::Array< ::String > result = ::Array_obj< ::String >::__new(replyTos->length);
-HXDLIN( 816)				{
-HXLINE( 816)					int _g = 0;
-HXDLIN( 816)					int _g1 = replyTos->length;
-HXDLIN( 816)					while((_g < _g1)){
-HXLINE( 816)						_g = (_g + 1);
-HXDLIN( 816)						int i = (_g - 1);
-HXDLIN( 816)						{
-HXLINE( 817)							 ::Dynamic parent = _hx_array_unsafe_get(replyTos,i);
-HXLINE( 816)							::String inValue;
-HXLINE( 817)							if (::hx::IsNotNull( parent->__Field(HX_("serverId",7e,01,b2,e2),::hx::paccDynamic) )) {
-HXLINE( 818)								params->push( ::Dynamic(parent->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)));
-HXLINE( 819)								params->push( ::Dynamic(parent->__Field(HX_("serverId",7e,01,b2,e2),::hx::paccDynamic)));
-HXLINE( 816)								inValue = HX_(" (chat_id=? AND mam_id=?)",59,03,f2,84);
-            							}
-            							else {
-HXLINE( 822)								params->push( ::Dynamic(parent->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)));
-HXLINE( 823)								params->push( ::Dynamic(parent->__Field(HX_("localId",26,7a,c6,2d),::hx::paccDynamic)));
-HXLINE( 816)								inValue = HX_(" (chat_id=? AND stanza_id=?)",2f,d3,29,86);
-            							}
-HXDLIN( 816)							result->__unsafe_set(i,inValue);
-            						}
+HXLINE( 839)			::Array< ::String > mamIds = ::Array_obj< ::String >::__new(0);
+HXLINE( 840)			::Array< ::String > mamIdsS = ::Array_obj< ::String >::__new(0);
+HXLINE( 841)			::Array< ::String > stanzaIds = ::Array_obj< ::String >::__new(0);
+HXLINE( 842)			::Array< ::String > stanzaIdsS = ::Array_obj< ::String >::__new(0);
+HXLINE( 843)			::Array< ::String > params = ::Array_obj< ::String >::__new(1)->init(0,accountId);
+HXLINE( 845)			{
+HXLINE( 845)				int _g = 0;
+HXDLIN( 845)				while((_g < replyTos->length)){
+HXLINE( 845)					 ::Dynamic parent = replyTos->__get(_g);
+HXDLIN( 845)					_g = (_g + 1);
+HXLINE( 846)					if (::hx::IsNotNull( parent->__Field(HX_("serverId",7e,01,b2,e2),::hx::paccDynamic) )) {
+HXLINE( 847)						mamIds->push( ::Dynamic(parent->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)));
+HXLINE( 848)						mamIds->push( ::Dynamic(parent->__Field(HX_("serverId",7e,01,b2,e2),::hx::paccDynamic)));
+HXLINE( 849)						mamIdsS->push(HX_("(?,?)",7f,3f,cd,31));
+            					}
+            					else {
+HXLINE( 851)						stanzaIds->push( ::Dynamic(parent->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)));
+HXLINE( 852)						stanzaIds->push( ::Dynamic(parent->__Field(HX_("localId",26,7a,c6,2d),::hx::paccDynamic)));
+HXLINE( 853)						stanzaIdsS->push(HX_("(?,?)",7f,3f,cd,31));
             					}
-            				}
-HXDLIN( 816)				::String x = result->join(HX_(" OR ",7d,0d,63,15));
-HXDLIN( 816)				if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 816)					q->flush();
-            				}
-HXDLIN( 816)				if (::hx::IsNull( q->b )) {
-HXLINE( 816)					q->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(x));
-            				}
-            				else {
-HXLINE( 816)					::Array< ::String > q1 = q->b;
-HXDLIN( 816)					q1->push(::Std_obj::string(x));
             				}
             			}
-HXLINE( 827)			{
-HXLINE( 827)				if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 827)					q->flush();
-            				}
-HXDLIN( 827)				if (::hx::IsNull( q->b )) {
-HXLINE( 827)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_185,1);
-            				}
-            				else {
-HXLINE( 827)					q->b->push(HX_(")",29,00,00,00));
-            				}
+HXLINE( 856)			::Array< ::String > q = ::Array_obj< ::String >::__new(0);
+HXLINE( 857)			if ((mamIds->length > 0)) {
+HXLINE( 858)				q->push((((HX_("SELECT chat_id, stanza_id, stanza, direction, type, status, status_text, strftime('%FT%H:%M:%fZ', created_at / 1000.0, 'unixepoch') AS timestamp, sender_id, mam_id, mam_by, sync_point FROM messages WHERE account_id=?",77,29,5c,6f) + HX_(" AND (chat_id, mam_id) IN (",9c,23,d1,7d)) + mamIdsS->join(HX_(",",2c,00,00,00))) + HX_(")",29,00,00,00)));
+HXLINE( 859)				params = params->concat(mamIds);
+            			}
+HXLINE( 861)			if ((stanzaIds->length > 0)) {
+HXLINE( 862)				q->push((((HX_("SELECT chat_id, stanza_id, stanza, direction, type, status, status_text, strftime('%FT%H:%M:%fZ', created_at / 1000.0, 'unixepoch') AS timestamp, sender_id, mam_id, mam_by, sync_point FROM messages WHERE account_id=?",77,29,5c,6f) + HX_(" AND (chat_id, stanza_id) IN (",72,6a,27,14)) + stanzaIdsS->join(HX_(",",2c,00,00,00))) + HX_(")",29,00,00,00)));
+HXLINE( 863)				params = params->concat(stanzaIds);
             			}
-HXLINE( 828)			 ::borogove::persistence::SqliteDriver _hx_tmp1 = this->db;
-HXLINE( 810)			_hx_tmp = _hx_tmp1->exec(q->toString(),params);
+HXLINE( 865)			 ::borogove::persistence::SqliteDriver _hx_tmp1 = this->db;
+HXLINE( 836)			_hx_tmp = _hx_tmp1->exec(q->join(HX_(" UNION ALL ",f0,e4,70,26)),params);
             		}
-HXDLIN( 810)		return ::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp, ::Dynamic(new _hx_Closure_1(messages,_gthis,accountId)),null());
+HXDLIN( 836)		return ::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp, ::Dynamic(new _hx_Closure_1(messages,_gthis,accountId)),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC3(Sqlite_obj,hydrateReplyTo,return )
 
 ::Array< ::Dynamic> Sqlite_obj::hydrateMessages(::String accountId, ::Dynamic rows){
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_843_hydrateMessages)
-HXLINE( 845)		 ::borogove::JID accountJid = ::borogove::JID_obj::parse(accountId);
-HXLINE( 846)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 846)		{
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_880_hydrateMessages)
+HXLINE( 882)		 ::borogove::JID accountJid = ::borogove::JID_obj::parse(accountId);
+HXLINE( 883)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 883)		{
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,rows) HXARGC(0)
             			 ::Dynamic _hx_run(){
-            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_846_hydrateMessages)
-HXLINE( 846)				return rows;
+            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_883_hydrateMessages)
+HXLINE( 883)				return rows;
             			}
             			HX_END_LOCAL_FUNC0(return)
 
-HXLINE( 846)			 ::Dynamic x =  ::Dynamic(new _hx_Closure_0(rows))();
-HXDLIN( 846)			while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 883)			 ::Dynamic x =  ::Dynamic(new _hx_Closure_0(rows))();
+HXDLIN( 883)			while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
             				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_3, ::borogove::JID,accountJid, ::Dynamic,row) HXARGC(2)
             				 ::borogove::ChatMessageBuilder _hx_run( ::borogove::ChatMessageBuilder builder, ::borogove::Stanza _){
-            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_846_hydrateMessages)
-HXLINE( 847)					builder->syncPoint = ::hx::IsNotEq( row->__Field(HX_("sync_point",2c,6c,7f,80),::hx::paccDynamic),0 );
-HXLINE( 848)					builder->timestamp = ( (::String)(row->__Field(HX_("timestamp",d6,d4,ce,a5),::hx::paccDynamic)) );
-HXLINE( 849)					builder->type = ( (int)(row->__Field(HX_("type",ba,f2,08,4d),::hx::paccDynamic)) );
-HXLINE( 850)					builder->status = ( (int)(row->__Field(HX_("status",32,e7,fb,05),::hx::paccDynamic)) );
-HXLINE( 851)					builder->statusText = ( (::String)(row->__Field(HX_("status_text",1a,ac,61,da),::hx::paccDynamic)) );
-HXLINE( 852)					builder->senderId = ( (::String)(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)) );
-HXLINE( 853)					::String _hx_tmp;
-HXDLIN( 853)					if (::hx::IsEq( row->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic),HX_("",00,00,00,00) )) {
-HXLINE( 853)						_hx_tmp = null();
+            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_883_hydrateMessages)
+HXLINE( 884)					builder->syncPoint = ::hx::IsNotEq( row->__Field(HX_("sync_point",2c,6c,7f,80),::hx::paccDynamic),0 );
+HXLINE( 885)					builder->timestamp = ( (::String)(row->__Field(HX_("timestamp",d6,d4,ce,a5),::hx::paccDynamic)) );
+HXLINE( 886)					builder->type = ( (int)(row->__Field(HX_("type",ba,f2,08,4d),::hx::paccDynamic)) );
+HXLINE( 887)					builder->status = ( (int)(row->__Field(HX_("status",32,e7,fb,05),::hx::paccDynamic)) );
+HXLINE( 888)					builder->statusText = ( (::String)(row->__Field(HX_("status_text",1a,ac,61,da),::hx::paccDynamic)) );
+HXLINE( 889)					builder->senderId = ( (::String)(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)) );
+HXLINE( 890)					::String _hx_tmp;
+HXDLIN( 890)					if (::hx::IsEq( row->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic),HX_("",00,00,00,00) )) {
+HXLINE( 890)						_hx_tmp = null();
             					}
             					else {
-HXLINE( 853)						_hx_tmp = ( (::String)(row->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic)) );
+HXLINE( 890)						_hx_tmp = ( (::String)(row->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic)) );
             					}
-HXDLIN( 853)					builder->serverId = _hx_tmp;
-HXLINE( 854)					::String _hx_tmp1;
-HXDLIN( 854)					if (::hx::IsEq( row->__Field(HX_("mam_by",fd,46,19,b7),::hx::paccDynamic),HX_("",00,00,00,00) )) {
-HXLINE( 854)						_hx_tmp1 = null();
+HXDLIN( 890)					builder->serverId = _hx_tmp;
+HXLINE( 891)					::String _hx_tmp1;
+HXDLIN( 891)					if (::hx::IsEq( row->__Field(HX_("mam_by",fd,46,19,b7),::hx::paccDynamic),HX_("",00,00,00,00) )) {
+HXLINE( 891)						_hx_tmp1 = null();
             					}
             					else {
-HXLINE( 854)						_hx_tmp1 = ( (::String)(row->__Field(HX_("mam_by",fd,46,19,b7),::hx::paccDynamic)) );
+HXLINE( 891)						_hx_tmp1 = ( (::String)(row->__Field(HX_("mam_by",fd,46,19,b7),::hx::paccDynamic)) );
             					}
-HXDLIN( 854)					builder->serverIdBy = _hx_tmp1;
-HXLINE( 855)					if (::hx::IsNotEq( builder->direction,row->__Field(HX_("direction",3f,62,40,10),::hx::paccDynamic) )) {
-HXLINE( 856)						builder->direction = ( (int)(row->__Field(HX_("direction",3f,62,40,10),::hx::paccDynamic)) );
-HXLINE( 857)						::Array< ::Dynamic> replyTo = builder->replyTo;
-HXLINE( 858)						builder->replyTo = builder->recipients;
-HXLINE( 859)						builder->recipients = replyTo;
+HXDLIN( 891)					builder->serverIdBy = _hx_tmp1;
+HXLINE( 892)					if (::hx::IsNotEq( builder->direction,row->__Field(HX_("direction",3f,62,40,10),::hx::paccDynamic) )) {
+HXLINE( 893)						builder->direction = ( (int)(row->__Field(HX_("direction",3f,62,40,10),::hx::paccDynamic)) );
+HXLINE( 894)						::Array< ::Dynamic> replyTo = builder->replyTo;
+HXLINE( 895)						builder->replyTo = builder->recipients;
+HXLINE( 896)						builder->recipients = replyTo;
             					}
-HXLINE( 861)					bool _hx_tmp2;
-HXDLIN( 861)					if (::hx::IsNotNull( row->__Field(HX_("stanza_id",25,7b,7a,e9),::hx::paccDynamic) )) {
-HXLINE( 861)						_hx_tmp2 = ::hx::IsNotEq( row->__Field(HX_("stanza_id",25,7b,7a,e9),::hx::paccDynamic),HX_("",00,00,00,00) );
+HXLINE( 898)					bool _hx_tmp2;
+HXDLIN( 898)					if (::hx::IsNotNull( row->__Field(HX_("stanza_id",25,7b,7a,e9),::hx::paccDynamic) )) {
+HXLINE( 898)						_hx_tmp2 = ::hx::IsNotEq( row->__Field(HX_("stanza_id",25,7b,7a,e9),::hx::paccDynamic),HX_("",00,00,00,00) );
             					}
             					else {
-HXLINE( 861)						_hx_tmp2 = false;
+HXLINE( 898)						_hx_tmp2 = false;
             					}
-HXDLIN( 861)					if (_hx_tmp2) {
-HXLINE( 861)						builder->localId = ( (::String)(row->__Field(HX_("stanza_id",25,7b,7a,e9),::hx::paccDynamic)) );
+HXDLIN( 898)					if (_hx_tmp2) {
+HXLINE( 898)						builder->localId = ( (::String)(row->__Field(HX_("stanza_id",25,7b,7a,e9),::hx::paccDynamic)) );
             					}
-HXLINE( 862)					if (::hx::IsNotNull( row->__Field(HX_("versions",5b,4e,b8,d6),::hx::paccDynamic) )) {
-HXLINE( 863)						 ::Dynamic versionTimes =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("version_times",1f,50,f9,17),::hx::paccDynamic)) ))->doParse();
-HXLINE( 864)						 ::Dynamic versions =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("versions",5b,4e,b8,d6),::hx::paccDynamic)) ))->doParse();
-HXLINE( 865)						if ((::Reflect_obj::fields(versions)->length > 1)) {
+HXLINE( 899)					if (::hx::IsNotNull( row->__Field(HX_("versions",5b,4e,b8,d6),::hx::paccDynamic) )) {
+HXLINE( 900)						 ::Dynamic versionTimes =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("version_times",1f,50,f9,17),::hx::paccDynamic)) ))->doParse();
+HXLINE( 901)						 ::Dynamic versions =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("versions",5b,4e,b8,d6),::hx::paccDynamic)) ))->doParse();
+HXLINE( 902)						if ((::Reflect_obj::fields(versions)->length > 1)) {
             							HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_2) HXARGC(2)
             							int _hx_run( ::borogove::ChatMessage a, ::borogove::ChatMessage b){
-            								HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_877_hydrateMessages)
-HXLINE( 877)								return ::Reflect_obj::compare(b->timestamp,a->timestamp);
+            								HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_914_hydrateMessages)
+HXLINE( 914)								return ::Reflect_obj::compare(b->timestamp,a->timestamp);
             							}
             							HX_END_LOCAL_FUNC2(return)
 
-HXLINE( 866)							{
-HXLINE( 866)								::Array< ::String > _g_keys = ::Reflect_obj::fields(versions);
-HXDLIN( 866)								int _g_index = 0;
-HXDLIN( 866)								while((_g_index < _g_keys->length)){
-HXLINE( 866)									_g_index = (_g_index + 1);
-HXDLIN( 866)									::String key = _g_keys->__get((_g_index - 1));
-HXDLIN( 866)									::String versionId = key;
-HXDLIN( 866)									{
+HXLINE( 903)							{
+HXLINE( 903)								::Array< ::String > _g_keys = ::Reflect_obj::fields(versions);
+HXDLIN( 903)								int _g_index = 0;
+HXDLIN( 903)								while((_g_index < _g_keys->length)){
+HXLINE( 903)									_g_index = (_g_index + 1);
+HXDLIN( 903)									::String key = _g_keys->__get((_g_index - 1));
+HXDLIN( 903)									::String versionId = key;
+HXDLIN( 903)									{
             										HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::Dynamic,versionTimes,::String,versionId) HXARGC(2)
             										 ::borogove::ChatMessageBuilder _hx_run( ::borogove::ChatMessageBuilder toPushB, ::borogove::Stanza _){
-            											HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_867_hydrateMessages)
-HXLINE( 868)											bool versionM;
-HXDLIN( 868)											if (::hx::IsNull( toPushB->serverId )) {
-HXLINE( 868)												versionM = (versionId != toPushB->localId);
+            											HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_904_hydrateMessages)
+HXLINE( 905)											bool versionM;
+HXDLIN( 905)											if (::hx::IsNull( toPushB->serverId )) {
+HXLINE( 905)												versionM = (versionId != toPushB->localId);
             											}
             											else {
-HXLINE( 868)												versionM = false;
+HXLINE( 905)												versionM = false;
             											}
-HXDLIN( 868)											if (versionM) {
-HXLINE( 868)												toPushB->serverId = versionId;
+HXDLIN( 905)											if (versionM) {
+HXLINE( 905)												toPushB->serverId = versionId;
             											}
-HXLINE( 869)											toPushB->timestamp = ( (::String)(::Reflect_obj::field(versionTimes,versionId)) );
-HXLINE( 870)											return toPushB;
+HXLINE( 906)											toPushB->timestamp = ( (::String)(::Reflect_obj::field(versionTimes,versionId)) );
+HXLINE( 907)											return toPushB;
             										}
             										HX_END_LOCAL_FUNC2(return)
 
-HXLINE( 867)										 ::borogove::Stanza versionM = ::borogove::Stanza_obj::parse(( (::String)(::Reflect_obj::field(versions,key)) ));
-HXDLIN( 867)										 ::borogove::ChatMessage versionM1 = ::borogove::ChatMessage_obj::fromStanza(versionM,accountJid, ::Dynamic(new _hx_Closure_1(versionTimes,versionId)));
-HXLINE( 872)										 ::borogove::ChatMessage toPush;
-HXDLIN( 872)										bool toPush1;
-HXDLIN( 872)										if (::hx::IsNotNull( versionM1 )) {
-HXLINE( 872)											toPush1 = (versionM1->versions->length < 1);
+HXLINE( 904)										 ::borogove::Stanza versionM = ::borogove::Stanza_obj::parse(( (::String)(::Reflect_obj::field(versions,key)) ));
+HXDLIN( 904)										 ::borogove::ChatMessage versionM1 = ::borogove::ChatMessage_obj::fromStanza(versionM,accountJid, ::Dynamic(new _hx_Closure_1(versionTimes,versionId)));
+HXLINE( 909)										 ::borogove::ChatMessage toPush;
+HXDLIN( 909)										bool toPush1;
+HXDLIN( 909)										if (::hx::IsNotNull( versionM1 )) {
+HXLINE( 909)											toPush1 = (versionM1->versions->length < 1);
             										}
             										else {
-HXLINE( 872)											toPush1 = true;
+HXLINE( 909)											toPush1 = true;
             										}
-HXDLIN( 872)										if (toPush1) {
-HXLINE( 872)											toPush = versionM1;
+HXDLIN( 909)										if (toPush1) {
+HXLINE( 909)											toPush = versionM1;
             										}
             										else {
-HXLINE( 872)											toPush = versionM1->versions->__get(0).StaticCast<  ::borogove::ChatMessage >();
+HXLINE( 909)											toPush = versionM1->versions->__get(0).StaticCast<  ::borogove::ChatMessage >();
             										}
-HXLINE( 873)										if (::hx::IsNotNull( toPush )) {
-HXLINE( 874)											builder->versions->push(toPush);
+HXLINE( 910)										if (::hx::IsNotNull( toPush )) {
+HXLINE( 911)											builder->versions->push(toPush);
             										}
             									}
             								}
             							}
-HXLINE( 877)							builder->versions->sort( ::Dynamic(new _hx_Closure_2()));
+HXLINE( 914)							builder->versions->sort( ::Dynamic(new _hx_Closure_2()));
             						}
             					}
-HXLINE( 880)					return builder;
+HXLINE( 917)					return builder;
             				}
             				HX_END_LOCAL_FUNC2(return)
 
-HXLINE( 846)				 ::Dynamic row = x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
-HXDLIN( 846)				 ::borogove::Stanza _hx_tmp = ::borogove::Stanza_obj::parse(( (::String)(row->__Field(HX_("stanza",f5,5d,f7,05),::hx::paccDynamic)) ));
-HXDLIN( 846)				_g->push(::borogove::ChatMessage_obj::fromStanza(_hx_tmp,accountJid, ::Dynamic(new _hx_Closure_3(accountJid,row))));
+HXLINE( 883)				 ::Dynamic row = x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
+HXDLIN( 883)				 ::borogove::Stanza _hx_tmp = ::borogove::Stanza_obj::parse(( (::String)(row->__Field(HX_("stanza",f5,5d,f7,05),::hx::paccDynamic)) ));
+HXDLIN( 883)				_g->push(::borogove::ChatMessage_obj::fromStanza(_hx_tmp,accountJid, ::Dynamic(new _hx_Closure_3(accountJid,row))));
             			}
             		}
-HXDLIN( 846)		return _g;
+HXDLIN( 883)		return _g;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,hydrateMessages,return )
 
  ::borogove::Caps Sqlite_obj::hydrateCaps( ::Dynamic o,::Array< unsigned char > ver){
-            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_885_hydrateCaps)
-HXLINE( 886)		::String o1 = ( (::String)(o->__Field(HX_("node",02,0a,0a,49),::hx::paccDynamic)) );
-HXLINE( 887)		::Array< ::Dynamic> _this;
-HXDLIN( 887)		::Array< ::Dynamic> tmp = ( (::Array< ::Dynamic>)(o->__Field(HX_("identities",1c,c5,6d,d7),::hx::paccDynamic)) );
-HXDLIN( 887)		if (::hx::IsNotNull( tmp )) {
-HXLINE( 887)			_this = tmp;
+            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_922_hydrateCaps)
+HXLINE( 923)		::String o1 = ( (::String)(o->__Field(HX_("node",02,0a,0a,49),::hx::paccDynamic)) );
+HXLINE( 924)		::Array< ::Dynamic> _this;
+HXDLIN( 924)		::Array< ::Dynamic> tmp = ( (::Array< ::Dynamic>)(o->__Field(HX_("identities",1c,c5,6d,d7),::hx::paccDynamic)) );
+HXDLIN( 924)		if (::hx::IsNotNull( tmp )) {
+HXLINE( 924)			_this = tmp;
             		}
             		else {
-HXLINE( 887)			_this = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 924)			_this = ::Array_obj< ::Dynamic>::__new(0);
             		}
-HXDLIN( 887)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_this->length);
-HXDLIN( 887)		{
-HXLINE( 887)			int _g = 0;
-HXDLIN( 887)			int _g1 = _this->length;
-HXDLIN( 887)			while((_g < _g1)){
-HXLINE( 887)				_g = (_g + 1);
-HXDLIN( 887)				int i = (_g - 1);
-HXDLIN( 887)				{
-HXLINE( 887)					 ::Dynamic i1 = _hx_array_unsafe_get(_this,i);
-HXDLIN( 887)					result->__unsafe_set(i, ::borogove::Identity_obj::__alloc( HX_CTX ,( (::String)(i1->__Field(HX_("category",fe,2a,6c,ad),::hx::paccDynamic)) ),( (::String)(i1->__Field(HX_("type",ba,f2,08,4d),::hx::paccDynamic)) ),( (::String)(i1->__Field(HX_("name",4b,72,ff,48),::hx::paccDynamic)) ),null()));
+HXDLIN( 924)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_this->length);
+HXDLIN( 924)		{
+HXLINE( 924)			int _g = 0;
+HXDLIN( 924)			int _g1 = _this->length;
+HXDLIN( 924)			while((_g < _g1)){
+HXLINE( 924)				_g = (_g + 1);
+HXDLIN( 924)				int i = (_g - 1);
+HXDLIN( 924)				{
+HXLINE( 924)					 ::Dynamic i1 = _hx_array_unsafe_get(_this,i);
+HXDLIN( 924)					result->__unsafe_set(i, ::borogove::Identity_obj::__alloc( HX_CTX ,( (::String)(i1->__Field(HX_("category",fe,2a,6c,ad),::hx::paccDynamic)) ),( (::String)(i1->__Field(HX_("type",ba,f2,08,4d),::hx::paccDynamic)) ),( (::String)(i1->__Field(HX_("name",4b,72,ff,48),::hx::paccDynamic)) ),null()));
             				}
             			}
             		}
-HXLINE( 888)		::Array< ::String > _hx_tmp;
-HXDLIN( 888)		::Array< ::String > tmp1 = ( (::Array< ::String >)(o->__Field(HX_("features",fd,6c,d7,12),::hx::paccDynamic)) );
-HXDLIN( 888)		if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 888)			_hx_tmp = tmp1;
+HXLINE( 925)		::Array< ::String > _hx_tmp;
+HXDLIN( 925)		::Array< ::String > tmp1 = ( (::Array< ::String >)(o->__Field(HX_("features",fd,6c,d7,12),::hx::paccDynamic)) );
+HXDLIN( 925)		if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 925)			_hx_tmp = tmp1;
             		}
             		else {
-HXLINE( 888)			_hx_tmp = ::Array_obj< ::String >::__new(0);
+HXLINE( 925)			_hx_tmp = ::Array_obj< ::String >::__new(0);
             		}
-HXLINE( 889)		::Array< ::String > _this1;
-HXDLIN( 889)		::Array< ::String > tmp2 = ( (::Array< ::String >)(o->__Field(HX_("data",2a,56,63,42),::hx::paccDynamic)) );
-HXDLIN( 889)		if (::hx::IsNotNull( tmp2 )) {
-HXLINE( 889)			_this1 = tmp2;
+HXLINE( 926)		::Array< ::String > _this1;
+HXDLIN( 926)		::Array< ::String > tmp2 = ( (::Array< ::String >)(o->__Field(HX_("data",2a,56,63,42),::hx::paccDynamic)) );
+HXDLIN( 926)		if (::hx::IsNotNull( tmp2 )) {
+HXLINE( 926)			_this1 = tmp2;
             		}
             		else {
-HXLINE( 889)			_this1 = ::Array_obj< ::String >::__new(0);
+HXLINE( 926)			_this1 = ::Array_obj< ::String >::__new(0);
             		}
-HXDLIN( 889)		::Array< ::Dynamic> result1 = ::Array_obj< ::Dynamic>::__new(_this1->length);
-HXDLIN( 889)		{
-HXLINE( 889)			int _g2 = 0;
-HXDLIN( 889)			int _g3 = _this1->length;
-HXDLIN( 889)			while((_g2 < _g3)){
-HXLINE( 889)				_g2 = (_g2 + 1);
-HXDLIN( 889)				int i2 = (_g2 - 1);
-HXDLIN( 889)				{
-HXLINE( 889)					 ::borogove::Stanza inValue = ::borogove::Stanza_obj::parse(( (::String)(_hx_array_unsafe_get(_this1,i2)) ));
-HXDLIN( 889)					result1->__unsafe_set(i2,inValue);
+HXDLIN( 926)		::Array< ::Dynamic> result1 = ::Array_obj< ::Dynamic>::__new(_this1->length);
+HXDLIN( 926)		{
+HXLINE( 926)			int _g2 = 0;
+HXDLIN( 926)			int _g3 = _this1->length;
+HXDLIN( 926)			while((_g2 < _g3)){
+HXLINE( 926)				_g2 = (_g2 + 1);
+HXDLIN( 926)				int i2 = (_g2 - 1);
+HXDLIN( 926)				{
+HXLINE( 926)					 ::borogove::Stanza inValue = ::borogove::Stanza_obj::parse(( (::String)(_hx_array_unsafe_get(_this1,i2)) ));
+HXDLIN( 926)					result1->__unsafe_set(i2,inValue);
             				}
             			}
             		}
-HXLINE( 885)		return  ::borogove::Caps_obj::__alloc( HX_CTX ,o1,result,_hx_tmp,result1,ver);
+HXLINE( 922)		return  ::borogove::Caps_obj::__alloc( HX_CTX ,o1,result,_hx_tmp,result1,ver);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,hydrateCaps,return )
 
+::String Sqlite_obj::prepare( ::Dynamic q){
+            		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,q) HXARGC(1)
+            		::String _hx_run( ::EReg f){
+            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_37_prepare)
+HXLINE(  38)			::cpp::VirtualArray tmp = ( (::cpp::VirtualArray)(q->__Field(HX_("params",46,fb,7a,ed),::hx::paccDynamic)) );
+HXDLIN(  38)			::cpp::VirtualArray p;
+HXDLIN(  38)			if (::hx::IsNotNull( tmp )) {
+HXLINE(  38)				p = tmp;
+            			}
+            			else {
+HXLINE(  38)				p = ::cpp::VirtualArray_obj::__new(0);
+            			}
+HXDLIN(  38)			 ::Dynamic p1 = p->shift();
+HXLINE(  39)			 ::ValueType _g = ::Type_obj::_hx_typeof(p1);
+HXDLIN(  39)			switch((int)(_g->_hx_getIndex())){
+            				case (int)0: {
+HXLINE(  57)					return HX_("NULL",87,66,cf,33);
+            				}
+            				break;
+            				case (int)1: {
+HXLINE(  55)					return ::Std_obj::string(p1);
+            				}
+            				break;
+            				case (int)2: {
+HXLINE(  53)					return ::Std_obj::string(p1);
+            				}
+            				break;
+            				case (int)3: {
+HXLINE(  51)					if (::hx::IsEq( p1,true )) {
+HXLINE(  51)						return HX_("1",31,00,00,00);
+            					}
+            					else {
+HXLINE(  51)						return HX_("0",30,00,00,00);
+            					}
+            				}
+            				break;
+            				case (int)6: {
+HXLINE(  61)					::hx::Class _hx_switch_0 = _g->_hx_getObject(0).StaticCast< ::hx::Class >();
+            					if (  (_hx_switch_0==::hx::ArrayBase::__mClass) ){
+HXLINE(  60)						return ((HX_("X'",cf,4c,00,00) + ::haxe::io::Bytes_obj::ofData(( (::Array< unsigned char >)(p1) ))->toHex()) + HX_("'",27,00,00,00));
+HXDLIN(  60)						goto _hx_goto_179;
+            					}
+            					if (  (_hx_switch_0==::hx::ClassOf< ::String >()) ){
+HXLINE(  41)						if (::hx::IsGreaterEq( p1->__Field(HX_("indexOf",c9,48,bf,e0),::hx::paccDynamic)(HX_("\x00""",00,00,00,00)),0 )) {
+HXLINE(  42)							::Array< ::String > hexChars = ::Array_obj< ::String >::__new();
+HXLINE(  43)							{
+HXLINE(  43)								int _g1 = 0;
+HXDLIN(  43)								int _g2 = ( (int)(p1->__Field(HX_("length",e6,94,07,9f),::hx::paccDynamic)) );
+HXDLIN(  43)								while((_g1 < _g2)){
+HXLINE(  43)									_g1 = (_g1 + 1);
+HXLINE(  44)									hexChars->push(::StringTools_obj::hex(( (::String)(p1) ).cca((_g1 - 1)),2));
+            								}
+            							}
+HXLINE(  46)							return ((HX_("x'",af,68,00,00) + hexChars->join(HX_("",00,00,00,00))) + HX_("'",27,00,00,00));
+            						}
+            						else {
+HXLINE(  48)							return ((HX_("'",27,00,00,00) + ::Std_obj::string(p1->__Field(HX_("split",da,ea,6e,81),::hx::paccDynamic)(HX_("'",27,00,00,00))->__Field(HX_("join",ea,33,65,46),::hx::paccDynamic)(HX_("''",20,22,00,00)))) + HX_("'",27,00,00,00));
+            						}
+HXLINE(  41)						goto _hx_goto_179;
+            					}
+            					if (  (_hx_switch_0==::hx::ClassOf< ::haxe::io::Bytes >()) ){
+HXLINE(  63)						return ((HX_("X'",cf,4c,00,00) + ( ( ::haxe::io::Bytes)(p1) )->toHex()) + HX_("'",27,00,00,00));
+HXDLIN(  63)						goto _hx_goto_179;
+            					}
+            					/* default */{
+HXLINE(  65)						HX_STACK_DO_THROW((HX_("UKNONWN: ",54,2e,a9,30) + ::Std_obj::string(::Type_obj::_hx_typeof(p1))));
+            					}
+            					_hx_goto_179:;
+            				}
+            				break;
+            				default:{
+HXLINE(  65)					HX_STACK_DO_THROW((HX_("UKNONWN: ",54,2e,a9,30) + ::Std_obj::string(::Type_obj::_hx_typeof(p1))));
+            				}
+            			}
+HXLINE(  39)			return null();
+            		}
+            		HX_END_LOCAL_FUNC1(return)
+
+            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_37_prepare)
+HXDLIN(  37)		return  ::EReg_obj::__alloc( HX_CTX ,HX_("\\?",63,50,00,00),HX_("gm",26,5a,00,00))->map(( (::String)(q->__Field(HX_("sql",0e,a6,57,00),::hx::paccDynamic)) ), ::Dynamic(new _hx_Closure_0(q)));
+            	}
+
+
+STATIC_HX_DEFINE_DYNAMIC_FUNC1(Sqlite_obj,prepare,return )
+
 
 ::hx::ObjectPtr< Sqlite_obj > Sqlite_obj::__new(::String dbfile,::Dynamic media) {
 	::hx::ObjectPtr< Sqlite_obj > __this = new Sqlite_obj();
@@ -3116,6 +2998,9 @@ void Sqlite_obj::__Visit(HX_VISIT_PARAMS)
 		if (HX_FIELD_EQ(inName,"updateMessageStatus") ) { return ::hx::Val( updateMessageStatus_dyn() ); }
 		if (HX_FIELD_EQ(inName,"getStreamManagement") ) { return ::hx::Val( getStreamManagement_dyn() ); }
 		break;
+	case 20:
+		if (HX_FIELD_EQ(inName,"getChatUnreadDetails") ) { return ::hx::Val( getChatUnreadDetails_dyn() ); }
+		break;
 	case 21:
 		if (HX_FIELD_EQ(inName,"getChatsUnreadDetails") ) { return ::hx::Val( getChatsUnreadDetails_dyn() ); }
 		if (HX_FIELD_EQ(inName,"storeStreamManagement") ) { return ::hx::Val( storeStreamManagement_dyn() ); }
@@ -3126,6 +3011,15 @@ void Sqlite_obj::__Visit(HX_VISIT_PARAMS)
 	return super::__Field(inName,inCallProp);
 }
 
+bool Sqlite_obj::__GetStatic(const ::String &inName, Dynamic &outValue, ::hx::PropertyAccess inCallProp)
+{
+	switch(inName.length) {
+	case 7:
+		if (HX_FIELD_EQ(inName,"prepare") ) { outValue = prepare_dyn(); return true; }
+	}
+	return false;
+}
+
 ::hx::Val Sqlite_obj::__SetField(const ::String &inName,const ::hx::Val &inValue,::hx::PropertyAccess inCallProp)
 {
 	switch(inName.length) {
@@ -3191,6 +3085,7 @@ static ::String Sqlite_obj_sMemberFields[] = {
 	HX_("getMessagesBefore",a1,f1,44,11),
 	HX_("getMessagesAfter",3a,43,91,57),
 	HX_("getMessagesAround",6f,95,16,2d),
+	HX_("getChatUnreadDetails",e5,a6,9e,c8),
 	HX_("getChatsUnreadDetails",ee,d4,5a,85),
 	HX_("storeReaction",aa,00,75,ab),
 	HX_("updateMessageStatus",90,98,ad,0f),
@@ -3219,6 +3114,11 @@ static ::String Sqlite_obj_sMemberFields[] = {
 
 ::hx::Class Sqlite_obj::__mClass;
 
+static ::String Sqlite_obj_sStaticFields[] = {
+	HX_("prepare",87,91,dd,37),
+	::String(null())
+};
+
 void Sqlite_obj::__register()
 {
 	Sqlite_obj _hx_dummy;
@@ -3228,9 +3128,9 @@ void Sqlite_obj::__register()
 	__mClass->mSuper = &super::__SGetClass();
 	__mClass->mConstructEmpty = &__CreateEmpty;
 	__mClass->mConstructArgs = &__Create;
-	__mClass->mGetStaticField = &::hx::Class_obj::GetNoStaticField;
+	__mClass->mGetStaticField = &Sqlite_obj::__GetStatic;
 	__mClass->mSetStaticField = &::hx::Class_obj::SetNoStaticField;
-	__mClass->mStatics = ::hx::Class_obj::dupFunctions(0 /* sStaticFields */);
+	__mClass->mStatics = ::hx::Class_obj::dupFunctions(Sqlite_obj_sStaticFields);
 	__mClass->mMembers = ::hx::Class_obj::dupFunctions(Sqlite_obj_sMemberFields);
 	__mClass->mCanCast = ::hx::TCanCast< Sqlite_obj >;
 #ifdef HXCPP_SCRIPTABLE
diff --git a/Sources/c_borogove/src/borogove/persistence/SqliteDriver.cpp b/Sources/c_borogove/src/borogove/persistence/SqliteDriver.cpp
index 6c74961..a609f9e 100644
--- a/Sources/c_borogove/src/borogove/persistence/SqliteDriver.cpp
+++ b/Sources/c_borogove/src/borogove/persistence/SqliteDriver.cpp
@@ -1,35 +1,32 @@
 // Generated by Haxe 4.3.3
 #include <hxcpp.h>
 
-#ifndef INCLUDED_EReg
-#include <EReg.h>
-#endif
 #ifndef INCLUDED_Lambda
 #include <Lambda.h>
 #endif
-#ifndef INCLUDED_Std
-#include <Std.h>
-#endif
 #ifndef INCLUDED_StringTools
 #include <StringTools.h>
 #endif
-#ifndef INCLUDED_Type
-#include <Type.h>
-#endif
-#ifndef INCLUDED_ValueType
-#include <ValueType.h>
-#endif
 #ifndef INCLUDED_borogove_Config
 #include <borogove/Config.h>
 #endif
+#ifndef INCLUDED_borogove_Persistence
+#include <borogove/Persistence.h>
+#endif
+#ifndef INCLUDED_borogove_persistence_KeyValueStore
+#include <borogove/persistence/KeyValueStore.h>
+#endif
+#ifndef INCLUDED_borogove_persistence_Sqlite
+#include <borogove/persistence/Sqlite.h>
+#endif
 #ifndef INCLUDED_borogove_persistence_SqliteDriver
 #include <borogove/persistence/SqliteDriver.h>
 #endif
 #ifndef INCLUDED_haxe_Exception
 #include <haxe/Exception.h>
 #endif
-#ifndef INCLUDED_haxe_io_Bytes
-#include <haxe/io/Bytes.h>
+#ifndef INCLUDED_haxe_Log
+#include <haxe/Log.h>
 #endif
 #ifndef INCLUDED_haxe_iterators_ArrayIterator
 #include <haxe/iterators/ArrayIterator.h>
@@ -63,16 +60,16 @@
 #endif
 
 HX_DEFINE_STACK_FRAME(_hx_pos_a11c44f890417883_19_new,"borogove.persistence.SqliteDriver","new",0x5c9c4682,"borogove.persistence.SqliteDriver.new","borogove/persistence/SqliteDriver.hx",19,0xf8c083ec)
-HX_DEFINE_STACK_FRAME(_hx_pos_a11c44f890417883_25_new,"borogove.persistence.SqliteDriver","new",0x5c9c4682,"borogove.persistence.SqliteDriver.new","borogove/persistence/SqliteDriver.hx",25,0xf8c083ec)
-HX_DEFINE_STACK_FRAME(_hx_pos_a11c44f890417883_26_new,"borogove.persistence.SqliteDriver","new",0x5c9c4682,"borogove.persistence.SqliteDriver.new","borogove/persistence/SqliteDriver.hx",26,0xf8c083ec)
+HX_DEFINE_STACK_FRAME(_hx_pos_a11c44f890417883_27_new,"borogove.persistence.SqliteDriver","new",0x5c9c4682,"borogove.persistence.SqliteDriver.new","borogove/persistence/SqliteDriver.hx",27,0xf8c083ec)
+HX_DEFINE_STACK_FRAME(_hx_pos_a11c44f890417883_28_new,"borogove.persistence.SqliteDriver","new",0x5c9c4682,"borogove.persistence.SqliteDriver.new","borogove/persistence/SqliteDriver.hx",28,0xf8c083ec)
 HX_DEFINE_STACK_FRAME(_hx_pos_a11c44f890417883_21_new,"borogove.persistence.SqliteDriver","new",0x5c9c4682,"borogove.persistence.SqliteDriver.new","borogove/persistence/SqliteDriver.hx",21,0xf8c083ec)
 HX_DEFINE_STACK_FRAME(_hx_pos_a11c44f890417883_8_new,"borogove.persistence.SqliteDriver","new",0x5c9c4682,"borogove.persistence.SqliteDriver.new","borogove/persistence/SqliteDriver.hx",8,0xf8c083ec)
+HX_LOCAL_STACK_FRAME(_hx_pos_a11c44f890417883_35_execute,"borogove.persistence.SqliteDriver","execute",0xc8683957,"borogove.persistence.SqliteDriver.execute","borogove/persistence/SqliteDriver.hx",35,0xf8c083ec)
+HX_LOCAL_STACK_FRAME(_hx_pos_a11c44f890417883_53_execute,"borogove.persistence.SqliteDriver","execute",0xc8683957,"borogove.persistence.SqliteDriver.execute","borogove/persistence/SqliteDriver.hx",53,0xf8c083ec)
 HX_LOCAL_STACK_FRAME(_hx_pos_a11c44f890417883_33_execute,"borogove.persistence.SqliteDriver","execute",0xc8683957,"borogove.persistence.SqliteDriver.execute","borogove/persistence/SqliteDriver.hx",33,0xf8c083ec)
-HX_LOCAL_STACK_FRAME(_hx_pos_a11c44f890417883_50_execute,"borogove.persistence.SqliteDriver","execute",0xc8683957,"borogove.persistence.SqliteDriver.execute","borogove/persistence/SqliteDriver.hx",50,0xf8c083ec)
-HX_LOCAL_STACK_FRAME(_hx_pos_a11c44f890417883_31_execute,"borogove.persistence.SqliteDriver","execute",0xc8683957,"borogove.persistence.SqliteDriver.execute","borogove/persistence/SqliteDriver.hx",31,0xf8c083ec)
-HX_LOCAL_STACK_FRAME(_hx_pos_a11c44f890417883_62_exec,"borogove.persistence.SqliteDriver","exec",0xa63cdb2f,"borogove.persistence.SqliteDriver.exec","borogove/persistence/SqliteDriver.hx",62,0xf8c083ec)
-HX_LOCAL_STACK_FRAME(_hx_pos_a11c44f890417883_61_exec,"borogove.persistence.SqliteDriver","exec",0xa63cdb2f,"borogove.persistence.SqliteDriver.exec","borogove/persistence/SqliteDriver.hx",61,0xf8c083ec)
-HX_LOCAL_STACK_FRAME(_hx_pos_a11c44f890417883_70_prepare,"borogove.persistence.SqliteDriver","prepare",0x3438c0a9,"borogove.persistence.SqliteDriver.prepare","borogove/persistence/SqliteDriver.hx",70,0xf8c083ec)
+HX_LOCAL_STACK_FRAME(_hx_pos_a11c44f890417883_67_execMany,"borogove.persistence.SqliteDriver","execMany",0x784b076e,"borogove.persistence.SqliteDriver.execMany","borogove/persistence/SqliteDriver.hx",67,0xf8c083ec)
+HX_LOCAL_STACK_FRAME(_hx_pos_a11c44f890417883_66_execMany,"borogove.persistence.SqliteDriver","execMany",0x784b076e,"borogove.persistence.SqliteDriver.execMany","borogove/persistence/SqliteDriver.hx",66,0xf8c083ec)
+HX_LOCAL_STACK_FRAME(_hx_pos_a11c44f890417883_74_exec,"borogove.persistence.SqliteDriver","exec",0xa63cdb2f,"borogove.persistence.SqliteDriver.exec","borogove/persistence/SqliteDriver.hx",74,0xf8c083ec)
 namespace borogove{
 namespace persistence{
 
@@ -88,23 +85,44 @@ HXLINE(  19)			_gthis->setReady = resolve;
             		void _hx_run(){
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_1, ::borogove::persistence::SqliteDriver,_gthis) HXARGC(1)
             			::Dynamic _hx_run(::Array< ::String > sql){
-            				HX_GC_STACKFRAME(&_hx_pos_a11c44f890417883_25_new)
-HXLINE(  25)				return _gthis->execute(_gthis->writePool,sql,::cpp::VirtualArray_obj::__new(0));
+            				HX_GC_STACKFRAME(&_hx_pos_a11c44f890417883_27_new)
+HXLINE(  27)				 ::borogove::persistence::SqliteDriver _gthis1 = _gthis;
+HXDLIN(  27)				::Dynamic _gthis2 = _gthis->writePool;
+HXDLIN(  27)				::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(sql->length);
+HXDLIN(  27)				{
+HXLINE(  27)					int _g = 0;
+HXDLIN(  27)					int _g1 = sql->length;
+HXDLIN(  27)					while((_g < _g1)){
+HXLINE(  27)						_g = (_g + 1);
+HXDLIN(  27)						int i = (_g - 1);
+HXDLIN(  27)						{
+HXLINE(  27)							 ::Dynamic inValue =  ::Dynamic(::hx::Anon_obj::Create(2)
+            								->setFixed(0,HX_("params",46,fb,7a,ed),::cpp::VirtualArray_obj::__new(0))
+            								->setFixed(1,HX_("sql",0e,a6,57,00),_hx_array_unsafe_get(sql,i)));
+HXDLIN(  27)							result->__unsafe_set(i,inValue);
+            						}
+            					}
+            				}
+HXDLIN(  27)				return _gthis1->execute(_gthis2,result);
             			}
             			HX_END_LOCAL_FUNC1(return)
 
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_2, ::borogove::persistence::SqliteDriver,_gthis) HXARGC(1)
             			void _hx_run( ::Dynamic _){
-            				HX_GC_STACKFRAME(&_hx_pos_a11c44f890417883_26_new)
-HXLINE(  26)				_gthis->setReady(true);
+            				HX_GC_STACKFRAME(&_hx_pos_a11c44f890417883_28_new)
+HXLINE(  28)				_gthis->setReady(true);
             			}
             			HX_END_LOCAL_FUNC1((void))
 
             			HX_GC_STACKFRAME(&_hx_pos_a11c44f890417883_21_new)
 HXLINE(  22)			::Dynamic db = ::sys::db::Sqlite_obj::open(dbfile);
 HXLINE(  23)			::sys::db::Connection_obj::request(db,HX_("PRAGMA journal_mode=WAL",74,ce,b2,c7));
-HXLINE(  24)			_gthis->dbs->push(db);
-HXLINE(  25)			::thenshim::_Promise::Promise_Impl__obj::then(migrate( ::Dynamic(new _hx_Closure_1(_gthis))), ::Dynamic(new _hx_Closure_2(_gthis)),null());
+HXLINE(  24)			::sys::db::Connection_obj::request(db,HX_("PRAGMA temp_store=2",ef,8d,52,36));
+HXLINE(  25)			if (::borogove::Config_obj::constrainedMemoryMode) {
+HXLINE(  25)				::sys::db::Connection_obj::request(db,HX_("PRAGMA cache_size=0",d5,e5,b6,fc));
+            			}
+HXLINE(  26)			_gthis->dbs->push(db);
+HXLINE(  27)			::thenshim::_Promise::Promise_Impl__obj::then(migrate( ::Dynamic(new _hx_Closure_1(_gthis))), ::Dynamic(new _hx_Closure_2(_gthis)),null());
             		}
             		HX_END_LOCAL_FUNC0((void))
 
@@ -140,52 +158,63 @@ bool SqliteDriver_obj::_hx_isInstanceOf(int inClassId) {
 	return inClassId==(int)0x00000001 || inClassId==(int)0x35b461ca;
 }
 
-::Dynamic SqliteDriver_obj::execute(::Dynamic pool,::Array< ::String > qs,::cpp::VirtualArray params){
-            		HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_2, ::borogove::persistence::SqliteDriver,_gthis,::Dynamic,pool,::Array< ::String >,qs,::cpp::VirtualArray,params) HXARGC(2)
+::Dynamic SqliteDriver_obj::execute(::Dynamic pool,::Array< ::Dynamic> qs){
+            		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_2, ::borogove::persistence::SqliteDriver,_gthis,::Dynamic,pool,::Array< ::Dynamic>,qs) HXARGC(2)
             		void _hx_run( ::Dynamic resolve, ::Dynamic reject){
-            			HX_BEGIN_LOCAL_FUNC_S5(::hx::LocalFunc,_hx_Closure_1, ::borogove::persistence::SqliteDriver,_gthis,::Array< ::String >,qs, ::Dynamic,resolve, ::Dynamic,reject,::cpp::VirtualArray,params) HXARGC(0)
+            			HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_1, ::borogove::persistence::SqliteDriver,_gthis,::Array< ::Dynamic>,qs, ::Dynamic,resolve, ::Dynamic,reject) HXARGC(0)
             			void _hx_run(){
-            				HX_GC_STACKFRAME(&_hx_pos_a11c44f890417883_33_execute)
-HXLINE(  34)				::Dynamic db = _gthis->dbs->pop(false);
-HXLINE(  35)				try {
+            				HX_GC_STACKFRAME(&_hx_pos_a11c44f890417883_35_execute)
+HXLINE(  36)				::Dynamic db = _gthis->dbs->pop(false);
+HXLINE(  37)				try {
             					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0,::Array< ::Dynamic>,result) HXARGC(0)
             					::Dynamic _hx_run(){
-            						HX_STACKFRAME(&_hx_pos_a11c44f890417883_50_execute)
-HXLINE(  50)						return result->__get(0);
+            						HX_STACKFRAME(&_hx_pos_a11c44f890417883_53_execute)
+HXLINE(  53)						return result->__get(0);
             					}
             					HX_END_LOCAL_FUNC0(return)
 
             					HX_STACK_CATCHABLE( ::Dynamic, 0);
-HXLINE(  36)					if (::hx::IsNull( db )) {
-HXLINE(  37)						db = ::sys::db::Sqlite_obj::open(_gthis->dbfile);
+HXLINE(  38)					if (::hx::IsNull( db )) {
+HXLINE(  39)						db = ::sys::db::Sqlite_obj::open(_gthis->dbfile);
             					}
-HXLINE(  39)					::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(1)->init(0,null());
-HXLINE(  40)					{
-HXLINE(  40)						int _g = 0;
-HXDLIN(  40)						while((_g < qs->length)){
-HXLINE(  40)							::String q = qs->__get(_g);
-HXDLIN(  40)							_g = (_g + 1);
-HXLINE(  41)							if (::hx::IsNull( result->__get(0) )) {
-HXLINE(  42)								::String prepared = _gthis->prepare(db,q,params);
-HXLINE(  43)								result[0] = ::sys::db::Connection_obj::request(db,prepared);
-            							}
-            							else {
-HXLINE(  45)								::sys::db::Connection_obj::request(db,q);
+HXLINE(  41)					::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(1)->init(0,null());
+HXLINE(  42)					{
+HXLINE(  42)						int _g = 0;
+HXDLIN(  42)						while((_g < qs->length)){
+HXLINE(  42)							 ::Dynamic q = qs->__get(_g);
+HXDLIN(  42)							_g = (_g + 1);
+HXLINE(  43)							::String prepared = ::borogove::persistence::Sqlite_obj::prepare(q);
+HXLINE(  44)							Float start =  ::__time_stamp();
+HXLINE(  45)							result[0] = ::sys::db::Connection_obj::request(db,prepared);
+HXLINE(  46)							Float runtime = ( ::__time_stamp() - start);
+HXLINE(  47)							if ((runtime > 1)) {
+HXLINE(  48)								::haxe::Log_obj::trace(HX_("XYZZY sql time",47,59,0c,c4), ::Dynamic(::hx::Anon_obj::Create(5)
+            									->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.persistence.SqliteDriver",90,9d,1a,56))
+            									->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(2)->init(0,runtime)->init(1,prepared))
+            									->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("execute",35,0a,0d,cc))
+            									->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/persistence/SqliteDriver.hx",ec,83,c0,f8))
+            									->setFixed(4,HX_("lineNumber",dd,81,22,76),48)));
             							}
             						}
             					}
-HXLINE(  50)					::cpp::VirtualArray arr = ::Lambda_obj::array( ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE(  53)					::cpp::VirtualArray arr = ::Lambda_obj::array( ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("iterator",ee,49,9a,93), ::Dynamic(new _hx_Closure_0(result)))));
-HXLINE(  51)					_gthis->dbs->push(db);
-HXLINE(  52)					resolve( ::haxe::iterators::ArrayIterator_obj::__alloc( HX_CTX ,arr));
+HXLINE(  54)					_gthis->dbs->push(db);
+HXLINE(  55)					resolve( ::haxe::iterators::ArrayIterator_obj::__alloc( HX_CTX ,arr));
             				} catch( ::Dynamic _hx_e) {
             					if (_hx_e.IsClass<  ::Dynamic >() ){
             						HX_STACK_BEGIN_CATCH
             						 ::Dynamic _g1 = _hx_e;
-HXLINE(  53)						 ::haxe::Exception _g2 = ::haxe::Exception_obj::caught(_g1);
-HXDLIN(  53)						{
-HXLINE(  54)							_gthis->dbs->push(db);
-HXLINE(  55)							reject(_g2);
+HXLINE(  56)						 ::haxe::Exception _g2 = ::haxe::Exception_obj::caught(_g1);
+HXDLIN(  56)						{
+HXLINE(  57)							::haxe::Log_obj::trace(HX_("XYZZY err",7d,7a,4d,54), ::Dynamic(::hx::Anon_obj::Create(5)
+            								->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.persistence.SqliteDriver",90,9d,1a,56))
+            								->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,_g2))
+            								->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("execute",35,0a,0d,cc))
+            								->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/persistence/SqliteDriver.hx",ec,83,c0,f8))
+            								->setFixed(4,HX_("lineNumber",dd,81,22,76),57)));
+HXLINE(  58)							_gthis->dbs->push(db);
+HXLINE(  59)							reject(_g2);
             						}
             					}
             					else {
@@ -195,119 +224,51 @@ HXLINE(  55)							reject(_g2);
             			}
             			HX_END_LOCAL_FUNC0((void))
 
-            			HX_STACKFRAME(&_hx_pos_a11c44f890417883_33_execute)
-HXLINE(  33)			::sys::thread::IThreadPool_obj::run(pool, ::Dynamic(new _hx_Closure_1(_gthis,qs,resolve,reject,params)));
+            			HX_STACKFRAME(&_hx_pos_a11c44f890417883_35_execute)
+HXLINE(  35)			::sys::thread::IThreadPool_obj::run(pool, ::Dynamic(new _hx_Closure_1(_gthis,qs,resolve,reject)));
             		}
             		HX_END_LOCAL_FUNC2((void))
 
-            	HX_STACKFRAME(&_hx_pos_a11c44f890417883_31_execute)
-HXDLIN(  31)		 ::borogove::persistence::SqliteDriver _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(  32)		return ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_2(_gthis,pool,qs,params)));
+            	HX_STACKFRAME(&_hx_pos_a11c44f890417883_33_execute)
+HXDLIN(  33)		 ::borogove::persistence::SqliteDriver _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(  34)		return ::thenshim::_Promise::Promise_Impl__obj::_new( ::Dynamic(new _hx_Closure_2(_gthis,pool,qs)));
             	}
 
 
-HX_DEFINE_DYNAMIC_FUNC3(SqliteDriver_obj,execute,return )
+HX_DEFINE_DYNAMIC_FUNC2(SqliteDriver_obj,execute,return )
 
-::Dynamic SqliteDriver_obj::exec( ::Dynamic sql,::cpp::VirtualArray params){
-            		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::SqliteDriver,_gthis, ::Dynamic,sql,::cpp::VirtualArray,params) HXARGC(1)
+::Dynamic SqliteDriver_obj::execMany(::Array< ::Dynamic> qs){
+            		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::SqliteDriver,_gthis,::Array< ::Dynamic>,qs) HXARGC(1)
             		::Dynamic _hx_run(bool _){
-            			HX_STACKFRAME(&_hx_pos_a11c44f890417883_62_exec)
-HXLINE(  63)			::cpp::VirtualArray qs;
-HXDLIN(  63)			if (::Std_obj::isOfType(sql,::hx::ClassOf< ::String >())) {
-HXLINE(  63)				qs = ::cpp::VirtualArray_obj::__new(1)->init(0,sql);
-            			}
-            			else {
-HXLINE(  63)				qs = ( (::cpp::VirtualArray)(sql) );
-            			}
-HXLINE(  64)			::Dynamic pool;
-HXDLIN(  64)			if (::StringTools_obj::startsWith(( (::String)(qs->__get(0)) ),HX_("SELECT",fc,c6,b5,1c))) {
-HXLINE(  64)				pool = _gthis->readPool;
+            			HX_STACKFRAME(&_hx_pos_a11c44f890417883_67_execMany)
+HXLINE(  68)			::Dynamic pool;
+HXDLIN(  68)			if (::StringTools_obj::startsWith(( (::String)(qs->__get(0)->__Field(HX_("sql",0e,a6,57,00),::hx::paccDynamic)) ),HX_("SELECT",fc,c6,b5,1c))) {
+HXLINE(  68)				pool = _gthis->readPool;
             			}
             			else {
-HXLINE(  64)				pool = _gthis->writePool;
+HXLINE(  68)				pool = _gthis->writePool;
             			}
-HXLINE(  65)			::cpp::VirtualArray tmp = params;
-HXDLIN(  65)			::cpp::VirtualArray _hx_tmp;
-HXDLIN(  65)			if (::hx::IsNotNull( tmp )) {
-HXLINE(  65)				_hx_tmp = tmp;
-            			}
-            			else {
-HXLINE(  65)				_hx_tmp = ::cpp::VirtualArray_obj::__new(0);
-            			}
-HXDLIN(  65)			return _gthis->execute(pool,qs,_hx_tmp);
+HXLINE(  69)			return _gthis->execute(pool,qs);
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_a11c44f890417883_61_exec)
-HXDLIN(  61)		 ::borogove::persistence::SqliteDriver _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE(  62)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->ready, ::Dynamic(new _hx_Closure_0(_gthis,sql,params)),null());
+            	HX_STACKFRAME(&_hx_pos_a11c44f890417883_66_execMany)
+HXDLIN(  66)		 ::borogove::persistence::SqliteDriver _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE(  67)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->ready, ::Dynamic(new _hx_Closure_0(_gthis,qs)),null());
             	}
 
 
-HX_DEFINE_DYNAMIC_FUNC2(SqliteDriver_obj,exec,return )
+HX_DEFINE_DYNAMIC_FUNC1(SqliteDriver_obj,execMany,return )
 
-::String SqliteDriver_obj::prepare(::Dynamic db,::String sql,::cpp::VirtualArray params){
-            		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0,::cpp::VirtualArray,params,::Dynamic,db) HXARGC(1)
-            		::String _hx_run( ::EReg f){
-            			HX_GC_STACKFRAME(&_hx_pos_a11c44f890417883_70_prepare)
-HXLINE(  71)			 ::Dynamic p = params->shift();
-HXLINE(  72)			 ::ValueType _g = ::Type_obj::_hx_typeof(p);
-HXDLIN(  72)			switch((int)(_g->_hx_getIndex())){
-            				case (int)0: {
-HXLINE(  82)					return HX_("NULL",87,66,cf,33);
-            				}
-            				break;
-            				case (int)1: {
-HXLINE(  80)					return ::Std_obj::string(p);
-            				}
-            				break;
-            				case (int)2: {
-HXLINE(  78)					return ::Std_obj::string(p);
-            				}
-            				break;
-            				case (int)3: {
-HXLINE(  76)					if (::hx::IsEq( p,true )) {
-HXLINE(  76)						return HX_("1",31,00,00,00);
-            					}
-            					else {
-HXLINE(  76)						return HX_("0",30,00,00,00);
-            					}
-            				}
-            				break;
-            				case (int)6: {
-HXLINE(  86)					::hx::Class _hx_switch_0 = _g->_hx_getObject(0).StaticCast< ::hx::Class >();
-            					if (  (_hx_switch_0==::hx::ArrayBase::__mClass) ){
-HXLINE(  85)						return ((HX_("X'",cf,4c,00,00) + ::haxe::io::Bytes_obj::ofData(( (::Array< unsigned char >)(p) ))->toHex()) + HX_("'",27,00,00,00));
-HXDLIN(  85)						goto _hx_goto_12;
-            					}
-            					if (  (_hx_switch_0==::hx::ClassOf< ::String >()) ){
-HXLINE(  74)						return ::sys::db::Connection_obj::quote(db,p);
-HXDLIN(  74)						goto _hx_goto_12;
-            					}
-            					if (  (_hx_switch_0==::hx::ClassOf< ::haxe::io::Bytes >()) ){
-HXLINE(  88)						return ((HX_("X'",cf,4c,00,00) + ( ( ::haxe::io::Bytes)(p) )->toHex()) + HX_("'",27,00,00,00));
-HXDLIN(  88)						goto _hx_goto_12;
-            					}
-            					/* default */{
-HXLINE(  90)						HX_STACK_DO_THROW((HX_("UKNONWN: ",54,2e,a9,30) + ::Std_obj::string(::Type_obj::_hx_typeof(p))));
-            					}
-            					_hx_goto_12:;
-            				}
-            				break;
-            				default:{
-HXLINE(  90)					HX_STACK_DO_THROW((HX_("UKNONWN: ",54,2e,a9,30) + ::Std_obj::string(::Type_obj::_hx_typeof(p))));
-            				}
-            			}
-HXLINE(  72)			return null();
-            		}
-            		HX_END_LOCAL_FUNC1(return)
-
-            	HX_GC_STACKFRAME(&_hx_pos_a11c44f890417883_70_prepare)
-HXDLIN(  70)		return  ::EReg_obj::__alloc( HX_CTX ,HX_("\\?",63,50,00,00),HX_("gm",26,5a,00,00))->map(sql, ::Dynamic(new _hx_Closure_0(params,db)));
+::Dynamic SqliteDriver_obj::exec(::String sql,::cpp::VirtualArray params){
+            	HX_STACKFRAME(&_hx_pos_a11c44f890417883_74_exec)
+HXDLIN(  74)		return this->execMany(::Array_obj< ::Dynamic>::__new(1)->init(0, ::Dynamic(::hx::Anon_obj::Create(2)
+            			->setFixed(0,HX_("params",46,fb,7a,ed),params)
+            			->setFixed(1,HX_("sql",0e,a6,57,00),sql))));
             	}
 
 
-HX_DEFINE_DYNAMIC_FUNC3(SqliteDriver_obj,prepare,return )
+HX_DEFINE_DYNAMIC_FUNC2(SqliteDriver_obj,exec,return )
 
 
 ::hx::ObjectPtr< SqliteDriver_obj > SqliteDriver_obj::__new(::String dbfile, ::Dynamic migrate) {
@@ -366,11 +327,11 @@ void SqliteDriver_obj::__Visit(HX_VISIT_PARAMS)
 		break;
 	case 7:
 		if (HX_FIELD_EQ(inName,"execute") ) { return ::hx::Val( execute_dyn() ); }
-		if (HX_FIELD_EQ(inName,"prepare") ) { return ::hx::Val( prepare_dyn() ); }
 		break;
 	case 8:
 		if (HX_FIELD_EQ(inName,"readPool") ) { return ::hx::Val( readPool ); }
 		if (HX_FIELD_EQ(inName,"setReady") ) { return ::hx::Val( setReady ); }
+		if (HX_FIELD_EQ(inName,"execMany") ) { return ::hx::Val( execMany_dyn() ); }
 		break;
 	case 9:
 		if (HX_FIELD_EQ(inName,"writePool") ) { return ::hx::Val( writePool ); }
@@ -431,8 +392,8 @@ static ::String SqliteDriver_obj_sMemberFields[] = {
 	HX_("ready",63,a0,ba,e6),
 	HX_("setReady",61,09,ef,f4),
 	HX_("execute",35,0a,0d,cc),
+	HX_("execMany",d0,f8,dc,a4),
 	HX_("exec",91,f3,1d,43),
-	HX_("prepare",87,91,dd,37),
 	::String(null()) };
 
 ::hx::Class SqliteDriver_obj::__mClass;
diff --git a/Sources/c_borogove/src/borogove/streams/XmppStropheStream.cpp b/Sources/c_borogove/src/borogove/streams/XmppStropheStream.cpp
index fff938f..be99bfb 100644
--- a/Sources/c_borogove/src/borogove/streams/XmppStropheStream.cpp
+++ b/Sources/c_borogove/src/borogove/streams/XmppStropheStream.cpp
@@ -42,6 +42,9 @@
 #ifndef INCLUDED_haxe_IMap
 #include <haxe/IMap.h>
 #endif
+#ifndef INCLUDED_haxe_Log
+#include <haxe/Log.h>
+#endif
 #ifndef INCLUDED_haxe_Timer
 #include <haxe/Timer.h>
 #endif
@@ -60,11 +63,11 @@ HX_DEFINE_STACK_FRAME(_hx_pos_0c65e41c3007e035_239_new,"borogove.streams.XmppStr
 HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_296_newId,"borogove.streams.XmppStropheStream","newId",0xd43cf7ff,"borogove.streams.XmppStropheStream.newId","borogove/streams/XmppStropheStream.hx",296,0x2dd892ee)
 HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_385_onIq,"borogove.streams.XmppStropheStream","onIq",0xa38117c3,"borogove.streams.XmppStropheStream.onIq","borogove/streams/XmppStropheStream.hx",385,0x2dd892ee)
 HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_424_connect,"borogove.streams.XmppStropheStream","connect",0x376a7c8e,"borogove.streams.XmppStropheStream.connect","borogove/streams/XmppStropheStream.hx",424,0x2dd892ee)
-HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_436_disconnect,"borogove.streams.XmppStropheStream","disconnect",0x8fa92238,"borogove.streams.XmppStropheStream.disconnect","borogove/streams/XmppStropheStream.hx",436,0x2dd892ee)
-HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_441_poll,"borogove.streams.XmppStropheStream","poll",0xa42b2f1b,"borogove.streams.XmppStropheStream.poll","borogove/streams/XmppStropheStream.hx",441,0x2dd892ee)
-HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_439_poll,"borogove.streams.XmppStropheStream","poll",0xa42b2f1b,"borogove.streams.XmppStropheStream.poll","borogove/streams/XmppStropheStream.hx",439,0x2dd892ee)
-HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_524_sendStanza,"borogove.streams.XmppStropheStream","sendStanza",0xcdb24339,"borogove.streams.XmppStropheStream.sendStanza","borogove/streams/XmppStropheStream.hx",524,0x2dd892ee)
-HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_532_finalize,"borogove.streams.XmppStropheStream","finalize",0x8048947a,"borogove.streams.XmppStropheStream.finalize","borogove/streams/XmppStropheStream.hx",532,0x2dd892ee)
+HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_437_disconnect,"borogove.streams.XmppStropheStream","disconnect",0x8fa92238,"borogove.streams.XmppStropheStream.disconnect","borogove/streams/XmppStropheStream.hx",437,0x2dd892ee)
+HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_442_poll,"borogove.streams.XmppStropheStream","poll",0xa42b2f1b,"borogove.streams.XmppStropheStream.poll","borogove/streams/XmppStropheStream.hx",442,0x2dd892ee)
+HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_440_poll,"borogove.streams.XmppStropheStream","poll",0xa42b2f1b,"borogove.streams.XmppStropheStream.poll","borogove/streams/XmppStropheStream.hx",440,0x2dd892ee)
+HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_525_sendStanza,"borogove.streams.XmppStropheStream","sendStanza",0xcdb24339,"borogove.streams.XmppStropheStream.sendStanza","borogove/streams/XmppStropheStream.hx",525,0x2dd892ee)
+HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_533_finalize,"borogove.streams.XmppStropheStream","finalize",0x8048947a,"borogove.streams.XmppStropheStream.finalize","borogove/streams/XmppStropheStream.hx",533,0x2dd892ee)
 HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_299_strophe_certfail_handler,"borogove.streams.XmppStropheStream","strophe_certfail_handler",0x762926d9,"borogove.streams.XmppStropheStream.strophe_certfail_handler","borogove/streams/XmppStropheStream.hx",299,0x2dd892ee)
 HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_317_strophe_fast_token_handler,"borogove.streams.XmppStropheStream","strophe_fast_token_handler",0x01296ced,"borogove.streams.XmppStropheStream.strophe_fast_token_handler","borogove/streams/XmppStropheStream.hx",317,0x2dd892ee)
 HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_323_strophe_sm_handler,"borogove.streams.XmppStropheStream","strophe_sm_handler",0x892f1fb1,"borogove.streams.XmppStropheStream.strophe_sm_handler","borogove/streams/XmppStropheStream.hx",323,0x2dd892ee)
@@ -72,10 +75,10 @@ HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_329_strophe_sm_ack_handler,"borogo
 HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_335_strophe_sm_fail_handler,"borogove.streams.XmppStropheStream","strophe_sm_fail_handler",0x56025be2,"borogove.streams.XmppStropheStream.strophe_sm_fail_handler","borogove/streams/XmppStropheStream.hx",335,0x2dd892ee)
 HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_341_strophe_stanza,"borogove.streams.XmppStropheStream","strophe_stanza",0x9ef00fc1,"borogove.streams.XmppStropheStream.strophe_stanza","borogove/streams/XmppStropheStream.hx",341,0x2dd892ee)
 HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_388_strophe_connect,"borogove.streams.XmppStropheStream","strophe_connect",0x56231c9e,"borogove.streams.XmppStropheStream.strophe_connect","borogove/streams/XmppStropheStream.hx",388,0x2dd892ee)
-HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_448_parseStanza,"borogove.streams.XmppStropheStream","parseStanza",0xf2f56d2c,"borogove.streams.XmppStropheStream.parseStanza","borogove/streams/XmppStropheStream.hx",448,0x2dd892ee)
-HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_457_serializeStanza,"borogove.streams.XmppStropheStream","serializeStanza",0xb8bb5c99,"borogove.streams.XmppStropheStream.serializeStanza","borogove/streams/XmppStropheStream.hx",457,0x2dd892ee)
-HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_470_convertToStanza,"borogove.streams.XmppStropheStream","convertToStanza",0xfb6eef87,"borogove.streams.XmppStropheStream.convertToStanza","borogove/streams/XmppStropheStream.hx",470,0x2dd892ee)
-HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_498_convertFromStanza,"borogove.streams.XmppStropheStream","convertFromStanza",0xc6cb6876,"borogove.streams.XmppStropheStream.convertFromStanza","borogove/streams/XmppStropheStream.hx",498,0x2dd892ee)
+HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_449_parseStanza,"borogove.streams.XmppStropheStream","parseStanza",0xf2f56d2c,"borogove.streams.XmppStropheStream.parseStanza","borogove/streams/XmppStropheStream.hx",449,0x2dd892ee)
+HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_458_serializeStanza,"borogove.streams.XmppStropheStream","serializeStanza",0xb8bb5c99,"borogove.streams.XmppStropheStream.serializeStanza","borogove/streams/XmppStropheStream.hx",458,0x2dd892ee)
+HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_471_convertToStanza,"borogove.streams.XmppStropheStream","convertToStanza",0xfb6eef87,"borogove.streams.XmppStropheStream.convertToStanza","borogove/streams/XmppStropheStream.hx",471,0x2dd892ee)
+HX_LOCAL_STACK_FRAME(_hx_pos_0c65e41c3007e035_499_convertFromStanza,"borogove.streams.XmppStropheStream","convertFromStanza",0xc6cb6876,"borogove.streams.XmppStropheStream.convertFromStanza","borogove/streams/XmppStropheStream.hx",499,0x2dd892ee)
 
 xmpp_log_t *logger = xmpp_get_default_logger(XMPP_LEVEL_DEBUG);
 xmpp_ctx_t* borogove::streams::XmppStropheStream_obj::ctx = xmpp_ctx_new(0,logger);
@@ -193,68 +196,74 @@ HXDLIN( 385)		this->iqHandlers->get(type).StaticCast<  ::haxe::ds::StringMap >()
 
 void XmppStropheStream_obj::connect(::String jid,::Array< unsigned char > sm){
             	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_424_connect)
-HXLINE( 425)		::cpp::Pointer< char > tmp = cpp::Pointer_obj::fromPointer(jid.c_str());
-HXDLIN( 425)		xmpp_conn_set_jid(this->conn,tmp);
-HXLINE( 426)		if (::hx::IsNotNull( sm )) {
-HXLINE( 428)			const unsigned char* smPtr = (unsigned char*)sm->getBase();
-HXLINE( 429)			xmpp_conn_restore_sm_state(this->conn,smPtr,( (size_t)(sm->length) ));
+HXLINE( 425)		::haxe::Log_obj::trace(HX_("SM data",70,2f,26,f4), ::Dynamic(::hx::Anon_obj::Create(5)
+            			->setFixed(0,HX_("className",a3,92,3d,dc),HX_("borogove.streams.XmppStropheStream",12,5d,bb,9f))
+            			->setFixed(1,HX_("customParams",d7,51,18,ed),::cpp::VirtualArray_obj::__new(1)->init(0,sm))
+            			->setFixed(2,HX_("methodName",cc,19,0f,12),HX_("connect",ea,3b,80,15))
+            			->setFixed(3,HX_("fileName",e7,5a,43,62),HX_("borogove/streams/XmppStropheStream.hx",ee,92,d8,2d))
+            			->setFixed(4,HX_("lineNumber",dd,81,22,76),425)));
+HXLINE( 426)		::cpp::Pointer< char > tmp = cpp::Pointer_obj::fromPointer(jid.c_str());
+HXDLIN( 426)		xmpp_conn_set_jid(this->conn,tmp);
+HXLINE( 427)		if (::hx::IsNotNull( sm )) {
+HXLINE( 429)			const unsigned char* smPtr = (unsigned char*)sm->getBase();
+HXLINE( 430)			xmpp_conn_restore_sm_state(this->conn,smPtr,( (size_t)(sm->length) ));
             		}
-HXLINE( 431)		this->trigger(HX_("auth/password-needed",80,f0,74,49), ::Dynamic(::hx::Anon_obj::Create(0)));
-HXLINE( 432)		this->poll(null());
+HXLINE( 432)		this->trigger(HX_("auth/password-needed",80,f0,74,49), ::Dynamic(::hx::Anon_obj::Create(0)));
+HXLINE( 433)		this->poll(null());
             	}
 
 
 void XmppStropheStream_obj::disconnect(){
-            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_436_disconnect)
-HXDLIN( 436)		xmpp_disconnect(this->conn);
+            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_437_disconnect)
+HXDLIN( 437)		xmpp_disconnect(this->conn);
             	}
 
 
 void XmppStropheStream_obj::poll( ::Dynamic __o_timeout){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::borogove::streams::XmppStropheStream,_gthis) HXARGC(0)
             		void _hx_run(){
-            			HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_441_poll)
-HXLINE( 442)			_gthis->stanzaThisPoll = false;
-HXLINE( 443)			xmpp_run_once(::borogove::streams::XmppStropheStream_obj::ctx,( (::cpp::UInt64)(5) ));
-HXLINE( 444)			 ::Dynamic _hx_tmp;
-HXDLIN( 444)			if (_gthis->stanzaThisPoll) {
-HXLINE( 444)				_hx_tmp = 5;
+            			HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_442_poll)
+HXLINE( 443)			_gthis->stanzaThisPoll = false;
+HXLINE( 444)			xmpp_run_once(::borogove::streams::XmppStropheStream_obj::ctx,( (::cpp::UInt64)(5) ));
+HXLINE( 445)			 ::Dynamic _hx_tmp;
+HXDLIN( 445)			if (_gthis->stanzaThisPoll) {
+HXLINE( 445)				_hx_tmp = 5;
             			}
             			else {
-HXLINE( 444)				_hx_tmp = 100;
+HXLINE( 445)				_hx_tmp = 100;
             			}
-HXDLIN( 444)			_gthis->poll(_hx_tmp);
+HXDLIN( 445)			_gthis->poll(_hx_tmp);
             		}
             		HX_END_LOCAL_FUNC0((void))
 
             		 ::Dynamic timeout = __o_timeout;
             		if (::hx::IsNull(__o_timeout)) timeout = 100;
-            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_439_poll)
-HXDLIN( 439)		 ::borogove::streams::XmppStropheStream _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 440)		if (::hx::IsNotNull( this->pollTimer )) {
-HXLINE( 440)			this->pollTimer->stop();
+            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_440_poll)
+HXDLIN( 440)		 ::borogove::streams::XmppStropheStream _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 441)		if (::hx::IsNotNull( this->pollTimer )) {
+HXLINE( 441)			this->pollTimer->stop();
             		}
-HXLINE( 441)		this->pollTimer = ::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_0(_gthis)),( (int)(timeout) ));
+HXLINE( 442)		this->pollTimer = ::haxe::Timer_obj::delay( ::Dynamic(new _hx_Closure_0(_gthis)),( (int)(timeout) ));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(XmppStropheStream_obj,poll,(void))
 
 void XmppStropheStream_obj::sendStanza( ::borogove::Stanza stanza){
-            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_524_sendStanza)
-HXDLIN( 524)		if (this->ready) {
-HXLINE( 525)			 xmpp_conn_t* _hx_tmp = this->conn;
-HXDLIN( 525)			xmpp_send(_hx_tmp,::borogove::streams::XmppStropheStream_obj::convertFromStanza(stanza));
+            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_525_sendStanza)
+HXDLIN( 525)		if (this->ready) {
+HXLINE( 526)			 xmpp_conn_t* _hx_tmp = this->conn;
+HXDLIN( 526)			xmpp_send(_hx_tmp,::borogove::streams::XmppStropheStream_obj::convertFromStanza(stanza));
             		}
             		else {
-HXLINE( 527)			this->pending->push(stanza);
+HXLINE( 528)			this->pending->push(stanza);
             		}
             	}
 
 
 void XmppStropheStream_obj::finalize(){
-            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_532_finalize)
-HXDLIN( 532)		xmpp_conn_release(this->conn);
+            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_533_finalize)
+HXDLIN( 533)		xmpp_conn_release(this->conn);
             	}
 
 
@@ -464,126 +473,126 @@ HXLINE( 416)			stream->trigger(HX_("status/offline",c6,eb,eb,54), ::Dynamic(::hx
 
 
  ::borogove::Stanza XmppStropheStream_obj::parseStanza(::String s){
-            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_448_parseStanza)
-HXLINE( 449)		::cpp::Pointer< char > tmp = cpp::Pointer_obj::fromPointer(s.c_str());
-HXDLIN( 449)		 xmpp_stanza_t* sstanza = xmpp_stanza_new_from_string(::borogove::streams::XmppStropheStream_obj::ctx,tmp);
-HXLINE( 450)		if (::hx::IsNull( sstanza )) {
-HXLINE( 450)			HX_STACK_DO_THROW((HX_("Failed to parse stanza: ",6a,ef,ec,9c) + s));
+            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_449_parseStanza)
+HXLINE( 450)		::cpp::Pointer< char > tmp = cpp::Pointer_obj::fromPointer(s.c_str());
+HXDLIN( 450)		 xmpp_stanza_t* sstanza = xmpp_stanza_new_from_string(::borogove::streams::XmppStropheStream_obj::ctx,tmp);
+HXLINE( 451)		if (::hx::IsNull( sstanza )) {
+HXLINE( 451)			HX_STACK_DO_THROW((HX_("Failed to parse stanza: ",6a,ef,ec,9c) + s));
             		}
-HXLINE( 451)		 ::borogove::Stanza stanza = ::borogove::streams::XmppStropheStream_obj::convertToStanza(sstanza,null());
-HXLINE( 452)		xmpp_stanza_release(sstanza);
-HXLINE( 453)		return stanza;
+HXLINE( 452)		 ::borogove::Stanza stanza = ::borogove::streams::XmppStropheStream_obj::convertToStanza(sstanza,null());
+HXLINE( 453)		xmpp_stanza_release(sstanza);
+HXLINE( 454)		return stanza;
             	}
 
 
 STATIC_HX_DEFINE_DYNAMIC_FUNC1(XmppStropheStream_obj,parseStanza,return )
 
 ::String XmppStropheStream_obj::serializeStanza( ::borogove::Stanza stanza){
-            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_457_serializeStanza)
-HXLINE( 458)		 xmpp_stanza_t* sstanza = ::borogove::streams::XmppStropheStream_obj::convertFromStanza(stanza);
-HXLINE( 459)		char* buf = null();
-HXLINE( 460)		size_t bufsize = ( (size_t)(-1) );
-HXLINE( 461)		::cpp::Pointer< char* > tmp = ::cpp::Pointer_obj::addressOf(buf);
-HXDLIN( 461)		::cpp::Pointer< size_t > tmp1 = ::cpp::Pointer_obj::addressOf(bufsize);
-HXDLIN( 461)		int err = xmpp_stanza_to_text(sstanza,tmp,tmp1);
-HXLINE( 462)		xmpp_stanza_release(sstanza);
-HXLINE( 463)		bool _hx_tmp = (err != 0);
-HXDLIN( 463)		if (_hx_tmp) {
-HXLINE( 463)			return null();
+            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_458_serializeStanza)
+HXLINE( 459)		 xmpp_stanza_t* sstanza = ::borogove::streams::XmppStropheStream_obj::convertFromStanza(stanza);
+HXLINE( 460)		char* buf = null();
+HXLINE( 461)		size_t bufsize = ( (size_t)(-1) );
+HXLINE( 462)		::cpp::Pointer< char* > tmp = ::cpp::Pointer_obj::addressOf(buf);
+HXDLIN( 462)		::cpp::Pointer< size_t > tmp1 = ::cpp::Pointer_obj::addressOf(bufsize);
+HXDLIN( 462)		int err = xmpp_stanza_to_text(sstanza,tmp,tmp1);
+HXLINE( 463)		xmpp_stanza_release(sstanza);
+HXLINE( 464)		bool _hx_tmp = (err != 0);
+HXDLIN( 464)		if (_hx_tmp) {
+HXLINE( 464)			return null();
             		}
-HXLINE( 464)		::cpp::Pointer< char > bufPtr = cpp::Pointer_obj::fromRaw(buf);
-HXLINE( 465)		::String s =  ::String(bufPtr->ptr);
-HXLINE( 466)		 xmpp_ctx_t* _hx_tmp1 = ::borogove::streams::XmppStropheStream_obj::ctx;
-HXDLIN( 466)		void* _hx_tmp2 = bufPtr->rawCast();
-HXDLIN( 466)		xmpp_free(_hx_tmp1,_hx_tmp2);
-HXLINE( 467)		return s;
+HXLINE( 465)		::cpp::Pointer< char > bufPtr = cpp::Pointer_obj::fromRaw(buf);
+HXLINE( 466)		::String s =  ::String(bufPtr->ptr);
+HXLINE( 467)		 xmpp_ctx_t* _hx_tmp1 = ::borogove::streams::XmppStropheStream_obj::ctx;
+HXDLIN( 467)		void* _hx_tmp2 = bufPtr->rawCast();
+HXDLIN( 467)		xmpp_free(_hx_tmp1,_hx_tmp2);
+HXLINE( 468)		return s;
             	}
 
 
 STATIC_HX_DEFINE_DYNAMIC_FUNC1(XmppStropheStream_obj,serializeStanza,return )
 
  ::borogove::Stanza XmppStropheStream_obj::convertToStanza( xmpp_stanza_t* el,void* dummy){
-            	HX_GC_STACKFRAME(&_hx_pos_0c65e41c3007e035_470_convertToStanza)
-HXLINE( 471)		::cpp::Pointer< char > name = xmpp_stanza_get_name(el);
-HXLINE( 472)		int attrlen = xmpp_stanza_get_attribute_count(el);
-HXLINE( 473)		void* attrsraw = ::hx::InternalNew(((attrlen * 2) * sizeof(char*)),false);
-HXLINE( 474)		const char** attrsarray = static_cast<const char**>(attrsraw);
-HXLINE( 475)		::cpp::Pointer< const char* > attrsptr = ::cpp::Pointer_obj::fromRaw(attrsarray);
-HXLINE( 476)		xmpp_stanza_get_attributes(el,attrsarray,(attrlen * 2));
-HXLINE( 477)		 ::Dynamic attrs =  ::Dynamic(::hx::Anon_obj::Create(0));
-HXLINE( 478)		{
-HXLINE( 478)			int _g = 0;
-HXDLIN( 478)			int _g1 = attrlen;
-HXDLIN( 478)			while((_g < _g1)){
-HXLINE( 478)				_g = (_g + 1);
-HXDLIN( 478)				int i = (_g - 1);
-HXLINE( 479)				::cpp::Pointer< char > key = cpp::Pointer_obj::fromRaw(attrsptr->at((i * 2)));
-HXLINE( 480)				::cpp::Pointer< char > value = cpp::Pointer_obj::fromRaw(attrsptr->at(((i * 2) + 1)));
-HXLINE( 481)				{
-HXLINE( 481)					::String key1 =  ::String(key->ptr);
-HXDLIN( 481)					::String value1 =  ::String(value->ptr);
-HXDLIN( 481)					::Reflect_obj::setField(attrs,key1,value1);
+            	HX_GC_STACKFRAME(&_hx_pos_0c65e41c3007e035_471_convertToStanza)
+HXLINE( 472)		::cpp::Pointer< char > name = xmpp_stanza_get_name(el);
+HXLINE( 473)		int attrlen = xmpp_stanza_get_attribute_count(el);
+HXLINE( 474)		void* attrsraw = ::hx::InternalNew(((attrlen * 2) * sizeof(char*)),false);
+HXLINE( 475)		const char** attrsarray = static_cast<const char**>(attrsraw);
+HXLINE( 476)		::cpp::Pointer< const char* > attrsptr = ::cpp::Pointer_obj::fromRaw(attrsarray);
+HXLINE( 477)		xmpp_stanza_get_attributes(el,attrsarray,(attrlen * 2));
+HXLINE( 478)		 ::Dynamic attrs =  ::Dynamic(::hx::Anon_obj::Create(0));
+HXLINE( 479)		{
+HXLINE( 479)			int _g = 0;
+HXDLIN( 479)			int _g1 = attrlen;
+HXDLIN( 479)			while((_g < _g1)){
+HXLINE( 479)				_g = (_g + 1);
+HXDLIN( 479)				int i = (_g - 1);
+HXLINE( 480)				::cpp::Pointer< char > key = cpp::Pointer_obj::fromRaw(attrsptr->at((i * 2)));
+HXLINE( 481)				::cpp::Pointer< char > value = cpp::Pointer_obj::fromRaw(attrsptr->at(((i * 2) + 1)));
+HXLINE( 482)				{
+HXLINE( 482)					::String key1 =  ::String(key->ptr);
+HXDLIN( 482)					::String value1 =  ::String(value->ptr);
+HXDLIN( 482)					::Reflect_obj::setField(attrs,key1,value1);
             				}
             			}
             		}
-HXLINE( 483)		 ::borogove::Stanza stanza =  ::borogove::Stanza_obj::__alloc( HX_CTX , ::String(name->ptr),attrs);
-HXLINE( 485)		 xmpp_stanza_t* child = xmpp_stanza_get_children(el);
-HXLINE( 486)		while(::hx::IsNotNull( child )){
-HXLINE( 487)			if (xmpp_stanza_is_text(child)) {
-HXLINE( 488)				::cpp::Pointer< char > inPtr = cpp::Pointer_obj::fromRaw(xmpp_stanza_get_text_ptr(child));
-HXDLIN( 488)				stanza->text( ::String(inPtr->ptr));
+HXLINE( 484)		 ::borogove::Stanza stanza =  ::borogove::Stanza_obj::__alloc( HX_CTX , ::String(name->ptr),attrs);
+HXLINE( 486)		 xmpp_stanza_t* child = xmpp_stanza_get_children(el);
+HXLINE( 487)		while(::hx::IsNotNull( child )){
+HXLINE( 488)			if (xmpp_stanza_is_text(child)) {
+HXLINE( 489)				::cpp::Pointer< char > inPtr = cpp::Pointer_obj::fromRaw(xmpp_stanza_get_text_ptr(child));
+HXDLIN( 489)				stanza->text( ::String(inPtr->ptr));
             			}
             			else {
-HXLINE( 490)				stanza->addChild(::borogove::streams::XmppStropheStream_obj::convertToStanza(child,null()));
+HXLINE( 491)				stanza->addChild(::borogove::streams::XmppStropheStream_obj::convertToStanza(child,null()));
             			}
-HXLINE( 492)			child = xmpp_stanza_get_next(child);
+HXLINE( 493)			child = xmpp_stanza_get_next(child);
             		}
-HXLINE( 495)		return stanza;
+HXLINE( 496)		return stanza;
             	}
 
 
  xmpp_stanza_t* XmppStropheStream_obj::convertFromStanza( ::borogove::Stanza el){
-            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_498_convertFromStanza)
-HXLINE( 499)		 xmpp_stanza_t* xml = xmpp_stanza_new(::borogove::streams::XmppStropheStream_obj::ctx);
-HXLINE( 500)		::cpp::Pointer< char > tmp = cpp::Pointer_obj::fromPointer(el->name.c_str());
-HXDLIN( 500)		xmpp_stanza_set_name(xml,tmp);
-HXLINE( 501)		{
-HXLINE( 501)			 ::Dynamic access = el->attr;
-HXDLIN( 501)			::Array< ::String > _g_keys = ::Reflect_obj::fields(access);
-HXDLIN( 501)			int _g_index = 0;
-HXDLIN( 501)			while((_g_index < _g_keys->length)){
-HXLINE( 501)				_g_index = (_g_index + 1);
-HXDLIN( 501)				::String key = _g_keys->__get((_g_index - 1));
-HXDLIN( 501)				::String attr_value = ( (::String)(::Reflect_obj::field(access,key)) );
-HXLINE( 504)				if (::hx::IsNotNull( attr_value )) {
-HXLINE( 505)					::cpp::Pointer< char > tmp1 = cpp::Pointer_obj::fromPointer(key.c_str());
-HXDLIN( 505)					::cpp::Pointer< char > tmp2 = cpp::Pointer_obj::fromPointer(attr_value.c_str());
-HXDLIN( 505)					xmpp_stanza_set_attribute(xml,tmp1,tmp2);
+            	HX_STACKFRAME(&_hx_pos_0c65e41c3007e035_499_convertFromStanza)
+HXLINE( 500)		 xmpp_stanza_t* xml = xmpp_stanza_new(::borogove::streams::XmppStropheStream_obj::ctx);
+HXLINE( 501)		::cpp::Pointer< char > tmp = cpp::Pointer_obj::fromPointer(el->name.c_str());
+HXDLIN( 501)		xmpp_stanza_set_name(xml,tmp);
+HXLINE( 502)		{
+HXLINE( 502)			 ::Dynamic access = el->attr;
+HXDLIN( 502)			::Array< ::String > _g_keys = ::Reflect_obj::fields(access);
+HXDLIN( 502)			int _g_index = 0;
+HXDLIN( 502)			while((_g_index < _g_keys->length)){
+HXLINE( 502)				_g_index = (_g_index + 1);
+HXDLIN( 502)				::String key = _g_keys->__get((_g_index - 1));
+HXDLIN( 502)				::String attr_value = ( (::String)(::Reflect_obj::field(access,key)) );
+HXLINE( 505)				if (::hx::IsNotNull( attr_value )) {
+HXLINE( 506)					::cpp::Pointer< char > tmp1 = cpp::Pointer_obj::fromPointer(key.c_str());
+HXDLIN( 506)					::cpp::Pointer< char > tmp2 = cpp::Pointer_obj::fromPointer(attr_value.c_str());
+HXDLIN( 506)					xmpp_stanza_set_attribute(xml,tmp1,tmp2);
             				}
             			}
             		}
-HXLINE( 508)		if ((el->children->length > 0)) {
-HXLINE( 509)			int _g = 0;
-HXDLIN( 509)			::Array< ::Dynamic> _g1 = el->children;
-HXDLIN( 509)			while((_g < _g1->length)){
-HXLINE( 509)				 ::borogove::Node child = _g1->__get(_g).StaticCast<  ::borogove::Node >();
-HXDLIN( 509)				_g = (_g + 1);
-HXLINE( 510)				switch((int)(child->_hx_getIndex())){
+HXLINE( 509)		if ((el->children->length > 0)) {
+HXLINE( 510)			int _g = 0;
+HXDLIN( 510)			::Array< ::Dynamic> _g1 = el->children;
+HXDLIN( 510)			while((_g < _g1->length)){
+HXLINE( 510)				 ::borogove::Node child = _g1->__get(_g).StaticCast<  ::borogove::Node >();
+HXDLIN( 510)				_g = (_g + 1);
+HXLINE( 511)				switch((int)(child->_hx_getIndex())){
             					case (int)0: {
-HXLINE( 512)						xmpp_stanza_add_child_ex(xml,::borogove::streams::XmppStropheStream_obj::convertFromStanza(child->_hx_getObject(0).StaticCast<  ::borogove::Stanza >()),false);
+HXLINE( 513)						xmpp_stanza_add_child_ex(xml,::borogove::streams::XmppStropheStream_obj::convertFromStanza(child->_hx_getObject(0).StaticCast<  ::borogove::Stanza >()),false);
             					}
             					break;
             					case (int)1: {
-HXLINE( 514)						 xmpp_stanza_t* text_node = xmpp_stanza_new(::borogove::streams::XmppStropheStream_obj::ctx);
-HXLINE( 515)						::cpp::Pointer< char > tmp3 = cpp::Pointer_obj::fromPointer(child->_hx_getString(0).c_str());
-HXDLIN( 515)						xmpp_stanza_set_text(text_node,tmp3);
-HXLINE( 516)						xmpp_stanza_add_child_ex(xml,text_node,false);
+HXLINE( 515)						 xmpp_stanza_t* text_node = xmpp_stanza_new(::borogove::streams::XmppStropheStream_obj::ctx);
+HXLINE( 516)						::cpp::Pointer< char > tmp3 = cpp::Pointer_obj::fromPointer(child->_hx_getString(0).c_str());
+HXDLIN( 516)						xmpp_stanza_set_text(text_node,tmp3);
+HXLINE( 517)						xmpp_stanza_add_child_ex(xml,text_node,false);
             					}
             					break;
             				}
             			}
             		}
-HXLINE( 520)		return xml;
+HXLINE( 521)		return xml;
             	}
 
 
diff --git a/Sources/c_borogove/src/haxe/format/JsonPrinter.cpp b/Sources/c_borogove/src/haxe/format/JsonPrinter.cpp
index 8810a9d..7b7dd4d 100644
--- a/Sources/c_borogove/src/haxe/format/JsonPrinter.cpp
+++ b/Sources/c_borogove/src/haxe/format/JsonPrinter.cpp
@@ -77,17 +77,13 @@ namespace format{
 
 void JsonPrinter_obj::__construct( ::Dynamic replacer,::String space){
             	HX_GC_STACKFRAME(&_hx_pos_9c6ac6b04494726e_56_new)
-            	HX_STACK_THIS(this)
-            	HX_STACK_ARG(replacer,"replacer")
-            	HX_STACK_ARG(space,"space")
-HXLINE(  56)
-HXLINE(  57)		this->replacer = replacer/* CppVarLocal: ::Dynamic *//* CppSet:void */;
-HXLINE(  58)		this->indent = space/* CppVarLocal:::String *//* CppSet:void */;
-HXLINE(  59)		this->pretty = ::hx::IsNotNull( space/* CppVarLocal:::String */ )/* CppNullCompare:bool *//* CppSet:void */;
-HXLINE(  60)		this->nind = 0/* CppInt:int *//* CppSet:void */;
-HXLINE(  67)		this->buf =  ::StringBuf_obj::__alloc( HX_CTX )/* CppCallNew: ::StringBuf *//* CppSet:void */;
+HXLINE(  57)		this->replacer = replacer;
+HXLINE(  58)		this->indent = space;
+HXLINE(  59)		this->pretty = ::hx::IsNotNull( space );
+HXLINE(  60)		this->nind = 0;
+HXLINE(  67)		this->buf =  ::StringBuf_obj::__alloc( HX_CTX );
             	}
-/* CppBlock:void */
+
 Dynamic JsonPrinter_obj::__CreateEmpty() { return new JsonPrinter_obj; }
 
 void *JsonPrinter_obj::_hx_vtable = 0;
@@ -105,685 +101,553 @@ bool JsonPrinter_obj::_hx_isInstanceOf(int inClassId) {
 
 void JsonPrinter_obj::write( ::Dynamic k, ::Dynamic v){
             	HX_STACKFRAME(&_hx_pos_9c6ac6b04494726e_81_write)
-            	HX_STACK_THIS(this)
-            	HX_STACK_ARG(k,"k")
-            	HX_STACK_ARG(v,"v")
-HXLINE(  81)
-HXLINE(  82)		if (::hx::IsNotNull( this->replacer/* CppVarThis: ::Dynamic */ )/* CppNullCompare:bool */) {
-HXLINE(  83)			v = this->replacer/* CppVarThis: ::Dynamic */(k/* CppVarLocal: ::Dynamic */,v/* CppVarLocal: ::Dynamic */)/* CppCallExpression: ::Dynamic *//* CppSet:void */;
+HXLINE(  82)		if (::hx::IsNotNull( this->replacer )) {
+HXLINE(  83)			v = this->replacer(k,v);
             		}
-/* CppBlock:void *//* CppIf:void */;
 HXLINE(  84)		{
-HXLINE(  84)			 ::ValueType _g = ::Type_obj::_hx_typeof(v/* CppVarLocal: ::Dynamic */)/* CppCallStatic: ::ValueType *//* CppVarDecl:void */;
-HXDLIN(  84)			switch((int)(_g/* CppVarLocal: ::ValueType */->_hx_getIndex()/* CppEnumIndex:int */)){
+HXLINE(  84)			 ::ValueType _g = ::Type_obj::_hx_typeof(v);
+HXDLIN(  84)			switch((int)(_g->_hx_getIndex())){
             				case (int)0: {
-HXLINE( 136)					 ::StringBuf _this = this->buf/* CppVarThis: ::StringBuf *//* CppVarDecl:void */;
-HXDLIN( 136)					if (::hx::IsNotNull( _this/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */ )/* CppNullCompare:bool */) {
-HXLINE( 136)						_this/* CppVarLocal: ::StringBuf */->flush()/* CppCallInstance( ::StringBuf,flush):void */;
+HXLINE( 136)					 ::StringBuf _this = this->buf;
+HXDLIN( 136)					if (::hx::IsNotNull( _this->charBuf )) {
+HXLINE( 136)						_this->flush();
             					}
-/* CppBlock:void *//* CppIf:void */;
-HXDLIN( 136)					if (::hx::IsNull( _this/* CppVarLocal: ::StringBuf */->b/* CppVarInstance( ::StringBuf::->b):::Array< ::String > */ )/* CppNullCompare:bool */) {
-HXLINE( 136)						_this/* CppVarLocal: ::StringBuf */->b = ::Array_obj< ::String >::fromData( _hx_array_data_f7b98003_4,1)/* CppArrayDecl:::Array< ::String > *//* CppSet:void */;
+HXDLIN( 136)					if (::hx::IsNull( _this->b )) {
+HXLINE( 136)						_this->b = ::Array_obj< ::String >::fromData( _hx_array_data_f7b98003_4,1);
             					}
-/* CppBlock:void */            					else {
-HXLINE( 136)						_this/* CppVarLocal: ::StringBuf */->b/* CppVarInstance( ::StringBuf::->b):::Array< ::String > */->push(HX_("null",87,9e,0e,49)/* CppString:::String */)/* CppCallInstance(::Array< ::String >,push):void */;
+            					else {
+HXLINE( 136)						_this->b->push(HX_("null",87,9e,0e,49));
             					}
-/* CppBlock:void *//* CppIf:void */;
             				}
-/* CppBlock:void */            				break;
+            				break;
             				case (int)1: {
-HXLINE(  90)					::String v1 = ( (::String)(v/* CppVarLocal: ::Dynamic */) )/* CppCastScalar:::String *//* CppVarDecl:void */;
+HXLINE(  90)					::String v1 = ( (::String)(v) );
 HXDLIN(  90)					{
-HXLINE(  90)						 ::StringBuf _this1 = this->buf/* CppVarThis: ::StringBuf *//* CppVarDecl:void */;
-HXDLIN(  90)						if (::hx::IsNotNull( _this1/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */ )/* CppNullCompare:bool */) {
-HXLINE(  90)							_this1/* CppVarLocal: ::StringBuf */->flush()/* CppCallInstance( ::StringBuf,flush):void */;
+HXLINE(  90)						 ::StringBuf _this1 = this->buf;
+HXDLIN(  90)						if (::hx::IsNotNull( _this1->charBuf )) {
+HXLINE(  90)							_this1->flush();
             						}
-/* CppBlock:void *//* CppIf:void */;
-HXDLIN(  90)						if (::hx::IsNull( _this1/* CppVarLocal: ::StringBuf */->b/* CppVarInstance( ::StringBuf::->b):::Array< ::String > */ )/* CppNullCompare:bool */) {
-HXLINE(  90)							_this1/* CppVarLocal: ::StringBuf */->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(v1/* CppVarLocal:::String */)/* CppCallStatic:::String */)/* CppArrayDecl:::Array< ::String > *//* CppSet:void */;
+HXDLIN(  90)						if (::hx::IsNull( _this1->b )) {
+HXLINE(  90)							_this1->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(v1));
             						}
-/* CppBlock:void */            						else {
-HXLINE(  90)							::Array< ::String > _this2 = _this1/* CppVarLocal: ::StringBuf */->b/* CppVarInstance( ::StringBuf::->b):::Array< ::String > *//* CppVarDecl:void */;
-HXDLIN(  90)							_this2/* CppVarLocal:::Array< ::String > */->push(::Std_obj::string(v1/* CppVarLocal:::String */)/* CppCallStatic:::String */)/* CppCallInstance(::Array< ::String >,push):void */;
+            						else {
+HXLINE(  90)							::Array< ::String > _this2 = _this1->b;
+HXDLIN(  90)							_this2->push(::Std_obj::string(v1));
             						}
-/* CppBlock:void *//* CppIf:void */;
             					}
-/* CppBlock:void */;
             				}
-/* CppBlock:void */            				break;
+            				break;
             				case (int)2: {
-HXLINE(  92)					::String v2/* CppVarDecl:void */;
-HXDLIN(  92)					if (::Math_obj::isFinite(( (Float)(v/* CppVarLocal: ::Dynamic */) )/* CppCastScalar:Float */)/* CppCallStatic:bool */) {
-HXLINE(  92)						v2 = ::Std_obj::string(v/* CppVarLocal: ::Dynamic */)/* CppCallStatic:::String *//* CppSet:void */;
+HXLINE(  92)					::String v2;
+HXDLIN(  92)					if (::Math_obj::isFinite(( (Float)(v) ))) {
+HXLINE(  92)						v2 = ::Std_obj::string(v);
             					}
-/* CppBlock:void */            					else {
-HXLINE(  92)						v2 = HX_("null",87,9e,0e,49)/* CppString:::String *//* CppSet:void */;
+            					else {
+HXLINE(  92)						v2 = HX_("null",87,9e,0e,49);
             					}
-/* CppBlock:void *//* CppIf:void */;
 HXDLIN(  92)					{
-HXLINE(  92)						 ::StringBuf _this3 = this->buf/* CppVarThis: ::StringBuf *//* CppVarDecl:void */;
-HXDLIN(  92)						if (::hx::IsNotNull( _this3/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */ )/* CppNullCompare:bool */) {
-HXLINE(  92)							_this3/* CppVarLocal: ::StringBuf */->flush()/* CppCallInstance( ::StringBuf,flush):void */;
+HXLINE(  92)						 ::StringBuf _this3 = this->buf;
+HXDLIN(  92)						if (::hx::IsNotNull( _this3->charBuf )) {
+HXLINE(  92)							_this3->flush();
             						}
-/* CppBlock:void *//* CppIf:void */;
-HXDLIN(  92)						if (::hx::IsNull( _this3/* CppVarLocal: ::StringBuf */->b/* CppVarInstance( ::StringBuf::->b):::Array< ::String > */ )/* CppNullCompare:bool */) {
-HXLINE(  92)							_this3/* CppVarLocal: ::StringBuf */->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(v2/* CppVarLocal:::String */)/* CppCallStatic:::String */)/* CppArrayDecl:::Array< ::String > *//* CppSet:void */;
+HXDLIN(  92)						if (::hx::IsNull( _this3->b )) {
+HXLINE(  92)							_this3->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(v2));
             						}
-/* CppBlock:void */            						else {
-HXLINE(  92)							::Array< ::String > _this4 = _this3/* CppVarLocal: ::StringBuf */->b/* CppVarInstance( ::StringBuf::->b):::Array< ::String > *//* CppVarDecl:void */;
-HXDLIN(  92)							_this4/* CppVarLocal:::Array< ::String > */->push(::Std_obj::string(v2/* CppVarLocal:::String */)/* CppCallStatic:::String */)/* CppCallInstance(::Array< ::String >,push):void */;
+            						else {
+HXLINE(  92)							::Array< ::String > _this4 = _this3->b;
+HXDLIN(  92)							_this4->push(::Std_obj::string(v2));
             						}
-/* CppBlock:void *//* CppIf:void */;
             					}
-/* CppBlock:void */;
             				}
-/* CppBlock:void */            				break;
+            				break;
             				case (int)3: {
-HXLINE( 134)					::String v3 = ( (::String)(v/* CppVarLocal: ::Dynamic */) )/* CppCastScalar:::String *//* CppVarDecl:void */;
+HXLINE( 134)					::String v3 = ( (::String)(v) );
 HXDLIN( 134)					{
-HXLINE( 134)						 ::StringBuf _this5 = this->buf/* CppVarThis: ::StringBuf *//* CppVarDecl:void */;
-HXDLIN( 134)						if (::hx::IsNotNull( _this5/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */ )/* CppNullCompare:bool */) {
-HXLINE( 134)							_this5/* CppVarLocal: ::StringBuf */->flush()/* CppCallInstance( ::StringBuf,flush):void */;
+HXLINE( 134)						 ::StringBuf _this5 = this->buf;
+HXDLIN( 134)						if (::hx::IsNotNull( _this5->charBuf )) {
+HXLINE( 134)							_this5->flush();
             						}
-/* CppBlock:void *//* CppIf:void */;
-HXDLIN( 134)						if (::hx::IsNull( _this5/* CppVarLocal: ::StringBuf */->b/* CppVarInstance( ::StringBuf::->b):::Array< ::String > */ )/* CppNullCompare:bool */) {
-HXLINE( 134)							_this5/* CppVarLocal: ::StringBuf */->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(v3/* CppVarLocal:::String */)/* CppCallStatic:::String */)/* CppArrayDecl:::Array< ::String > *//* CppSet:void */;
+HXDLIN( 134)						if (::hx::IsNull( _this5->b )) {
+HXLINE( 134)							_this5->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(v3));
             						}
-/* CppBlock:void */            						else {
-HXLINE( 134)							::Array< ::String > _this6 = _this5/* CppVarLocal: ::StringBuf */->b/* CppVarInstance( ::StringBuf::->b):::Array< ::String > *//* CppVarDecl:void */;
-HXDLIN( 134)							_this6/* CppVarLocal:::Array< ::String > */->push(::Std_obj::string(v3/* CppVarLocal:::String */)/* CppCallStatic:::String */)/* CppCallInstance(::Array< ::String >,push):void */;
+            						else {
+HXLINE( 134)							::Array< ::String > _this6 = _this5->b;
+HXDLIN( 134)							_this6->push(::Std_obj::string(v3));
             						}
-/* CppBlock:void *//* CppIf:void */;
             					}
-/* CppBlock:void */;
             				}
-/* CppBlock:void */            				break;
+            				break;
             				case (int)4: {
-HXLINE(  88)					this->fieldsString(v/* CppVarLocal: ::Dynamic */,::Reflect_obj::fields(v/* CppVarLocal: ::Dynamic */)/* CppCallStatic:::Array< ::String > */)/* CppCallThis:void */;
+HXLINE(  88)					this->fieldsString(v,::Reflect_obj::fields(v));
             				}
-/* CppBlock:void */            				break;
+            				break;
             				case (int)5: {
-HXLINE(  94)					 ::StringBuf _this7 = this->buf/* CppVarThis: ::StringBuf *//* CppVarDecl:void */;
-HXDLIN(  94)					if (::hx::IsNotNull( _this7/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */ )/* CppNullCompare:bool */) {
-HXLINE(  94)						_this7/* CppVarLocal: ::StringBuf */->flush()/* CppCallInstance( ::StringBuf,flush):void */;
+HXLINE(  94)					 ::StringBuf _this7 = this->buf;
+HXDLIN(  94)					if (::hx::IsNotNull( _this7->charBuf )) {
+HXLINE(  94)						_this7->flush();
             					}
-/* CppBlock:void *//* CppIf:void */;
-HXDLIN(  94)					if (::hx::IsNull( _this7/* CppVarLocal: ::StringBuf */->b/* CppVarInstance( ::StringBuf::->b):::Array< ::String > */ )/* CppNullCompare:bool */) {
-HXLINE(  94)						_this7/* CppVarLocal: ::StringBuf */->b = ::Array_obj< ::String >::fromData( _hx_array_data_f7b98003_5,1)/* CppArrayDecl:::Array< ::String > *//* CppSet:void */;
+HXDLIN(  94)					if (::hx::IsNull( _this7->b )) {
+HXLINE(  94)						_this7->b = ::Array_obj< ::String >::fromData( _hx_array_data_f7b98003_5,1);
             					}
-/* CppBlock:void */            					else {
-HXLINE(  94)						_this7/* CppVarLocal: ::StringBuf */->b/* CppVarInstance( ::StringBuf::->b):::Array< ::String > */->push(HX_("\"<fun>\"",09,3c,cc,8b)/* CppString:::String */)/* CppCallInstance(::Array< ::String >,push):void */;
+            					else {
+HXLINE(  94)						_this7->b->push(HX_("\"<fun>\"",09,3c,cc,8b));
             					}
-/* CppBlock:void *//* CppIf:void */;
             				}
-/* CppBlock:void */            				break;
+            				break;
             				case (int)6: {
-HXLINE(  95)					::hx::Class _g1 = _g/* CppVarLocal: ::ValueType */->_hx_getObject(0).StaticCast< ::hx::Class >()/* CppEnumParameter:::hx::Class *//* CppVarDecl:void */;
-HXLINE(  96)					if (::hx::IsPointerEq( _g1/* CppVarLocal:::hx::Class */,::hx::ClassOf< ::String >()/* CppClassOf:::hx::Class */ )/* CppCompare:bool */) {
-HXLINE(  97)						this->quote(( (::String)(v/* CppVarLocal: ::Dynamic */) )/* CppCastScalar:::String */)/* CppCallThis:void */;
+HXLINE(  95)					::hx::Class _g1 = _g->_hx_getObject(0).StaticCast< ::hx::Class >();
+HXLINE(  96)					if (::hx::IsPointerEq( _g1,::hx::ClassOf< ::String >() )) {
+HXLINE(  97)						this->quote(( (::String)(v) ));
             					}
-/* CppBlock:void */            					else {
-HXLINE(  98)						if (::hx::IsPointerEq( _g1/* CppVarLocal:::hx::Class */,::hx::ArrayBase::__mClass/* CppClassOf:::hx::Class */ )/* CppCompare:bool */) {
-HXLINE(  99)							HX_VARI_NAME( ::cpp::VirtualArray,v4,"v") = ( (::cpp::VirtualArray)(v/* CppVarLocal: ::Dynamic */) )/* CppCast:::cpp::VirtualArray *//* CppVarDecl:void */;
+            					else {
+HXLINE(  98)						if (::hx::IsPointerEq( _g1,::hx::ArrayBase::__mClass )) {
+HXLINE(  99)							::cpp::VirtualArray v4 = ( (::cpp::VirtualArray)(v) );
 HXLINE( 100)							{
-HXLINE( 100)								 ::StringBuf _this8 = this->buf/* CppVarThis: ::StringBuf *//* CppVarDecl:void */;
+HXLINE( 100)								 ::StringBuf _this8 = this->buf;
 HXDLIN( 100)								{
-HXLINE( 100)									if (::hx::IsNull( _this8/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */ )/* CppNullCompare:bool */) {
-HXLINE( 100)										_this8/* CppVarLocal: ::StringBuf */->charBuf = ::Array_obj< char >::__new()/* CppCallNew:::Array< char > *//* CppSet:void */;
+HXLINE( 100)									if (::hx::IsNull( _this8->charBuf )) {
+HXLINE( 100)										_this8->charBuf = ::Array_obj< char >::__new();
             									}
-/* CppBlock:void *//* CppIf:void */;
-HXDLIN( 100)									_this8/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */->push(91/* CppInt:int */)/* CppCallInstance(::Array< char >,push):void */;
+HXDLIN( 100)									_this8->charBuf->push(91);
             								}
-/* CppBlock:void */;
             							}
-/* CppBlock:void */;
-HXLINE( 102)							HX_VARI( int,len) = v4/* CppVarLocal:::cpp::VirtualArray */->get_length()/* CppCallInternal:int *//* CppVarDecl:void */;
-HXLINE( 103)							HX_VARI( int,last) = (len/* CppVarLocal:int */ - 1/* CppInt:int */)/* CppBinop:int *//* CppVarDecl:void */;
+HXLINE( 102)							int len = v4->get_length();
+HXLINE( 103)							int last = (len - 1);
 HXLINE( 104)							{
-HXLINE( 104)								int _g2 = 0/* CppInt:int *//* CppVarDecl:void */;
-HXDLIN( 104)								while((_g2/* CppVarLocal:int */ < len/* CppVarLocal:int */)/* CppBinop:bool */){
-HXLINE( 104)									_g2 = (_g2/* CppVarLocal:int */ + 1/* CppInt:int */)/* CppBinop:int *//* CppSet:void */;
-HXDLIN( 104)									HX_VARI( int,i) = (_g2/* CppVarLocal:int */ - 1/* CppInt:int */)/* CppBinop:int *//* CppVarDecl:void */;
-HXLINE( 105)									if ((i/* CppVarLocal:int */ > 0/* CppInt:int */)/* CppBinop:bool */) {
-HXLINE( 106)										 ::StringBuf _this9 = this->buf/* CppVarThis: ::StringBuf *//* CppVarDecl:void */;
+HXLINE( 104)								int _g2 = 0;
+HXDLIN( 104)								while((_g2 < len)){
+HXLINE( 104)									_g2 = (_g2 + 1);
+HXDLIN( 104)									int i = (_g2 - 1);
+HXLINE( 105)									if ((i > 0)) {
+HXLINE( 106)										 ::StringBuf _this9 = this->buf;
 HXDLIN( 106)										{
-HXLINE( 106)											if (::hx::IsNull( _this9/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */ )/* CppNullCompare:bool */) {
-HXLINE( 106)												_this9/* CppVarLocal: ::StringBuf */->charBuf = ::Array_obj< char >::__new()/* CppCallNew:::Array< char > *//* CppSet:void */;
+HXLINE( 106)											if (::hx::IsNull( _this9->charBuf )) {
+HXLINE( 106)												_this9->charBuf = ::Array_obj< char >::__new();
             											}
-/* CppBlock:void *//* CppIf:void */;
-HXDLIN( 106)											_this9/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */->push(44/* CppInt:int */)/* CppCallInstance(::Array< char >,push):void */;
+HXDLIN( 106)											_this9->charBuf->push(44);
             										}
-/* CppBlock:void */;
             									}
-/* CppBlock:void */            									else {
-HXLINE( 108)										this->nind++/* CppCrement:void */;
+            									else {
+HXLINE( 108)										this->nind++;
             									}
-/* CppBlock:void *//* CppIf:void */;
-HXLINE( 109)									if (this->pretty/* CppVarThis:bool */) {
-HXLINE( 109)										 ::StringBuf _this10 = this->buf/* CppVarThis: ::StringBuf *//* CppVarDecl:void */;
+HXLINE( 109)									if (this->pretty) {
+HXLINE( 109)										 ::StringBuf _this10 = this->buf;
 HXDLIN( 109)										{
-HXLINE( 109)											if (::hx::IsNull( _this10/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */ )/* CppNullCompare:bool */) {
-HXLINE( 109)												_this10/* CppVarLocal: ::StringBuf */->charBuf = ::Array_obj< char >::__new()/* CppCallNew:::Array< char > *//* CppSet:void */;
+HXLINE( 109)											if (::hx::IsNull( _this10->charBuf )) {
+HXLINE( 109)												_this10->charBuf = ::Array_obj< char >::__new();
             											}
-/* CppBlock:void *//* CppIf:void */;
-HXDLIN( 109)											_this10/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */->push(10/* CppInt:int */)/* CppCallInstance(::Array< char >,push):void */;
+HXDLIN( 109)											_this10->charBuf->push(10);
             										}
-/* CppBlock:void */;
             									}
-/* CppBlock:void *//* CppIf:void */;
-HXLINE( 110)									if (this->pretty/* CppVarThis:bool */) {
-HXLINE( 110)										::String v5 = ::StringTools_obj::lpad(HX_("",00,00,00,00)/* CppString:::String */,this->indent/* CppVarThis:::String */,(this->nind/* CppVarThis:int */ * this->indent/* CppVarThis:::String */.length/* CppVarInstance(::String::.length):int */)/* CppBinop:int */)/* CppCallStatic:::String *//* CppVarDecl:void */;
+HXLINE( 110)									if (this->pretty) {
+HXLINE( 110)										::String v5 = ::StringTools_obj::lpad(HX_("",00,00,00,00),this->indent,(this->nind * this->indent.length));
 HXDLIN( 110)										{
-HXLINE( 110)											 ::StringBuf _this11 = this->buf/* CppVarThis: ::StringBuf *//* CppVarDecl:void */;
-HXDLIN( 110)											if (::hx::IsNotNull( _this11/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */ )/* CppNullCompare:bool */) {
-HXLINE( 110)												_this11/* CppVarLocal: ::StringBuf */->flush()/* CppCallInstance( ::StringBuf,flush):void */;
+HXLINE( 110)											 ::StringBuf _this11 = this->buf;
+HXDLIN( 110)											if (::hx::IsNotNull( _this11->charBuf )) {
+HXLINE( 110)												_this11->flush();
             											}
-/* CppBlock:void *//* CppIf:void */;
-HXDLIN( 110)											if (::hx::IsNull( _this11/* CppVarLocal: ::StringBuf */->b/* CppVarInstance( ::StringBuf::->b):::Array< ::String > */ )/* CppNullCompare:bool */) {
-HXLINE( 110)												_this11/* CppVarLocal: ::StringBuf */->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(v5/* CppVarLocal:::String */)/* CppCallStatic:::String */)/* CppArrayDecl:::Array< ::String > *//* CppSet:void */;
+HXDLIN( 110)											if (::hx::IsNull( _this11->b )) {
+HXLINE( 110)												_this11->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(v5));
             											}
-/* CppBlock:void */            											else {
-HXLINE( 110)												::Array< ::String > _this12 = _this11/* CppVarLocal: ::StringBuf */->b/* CppVarInstance( ::StringBuf::->b):::Array< ::String > *//* CppVarDecl:void */;
-HXDLIN( 110)												_this12/* CppVarLocal:::Array< ::String > */->push(::Std_obj::string(v5/* CppVarLocal:::String */)/* CppCallStatic:::String */)/* CppCallInstance(::Array< ::String >,push):void */;
+            											else {
+HXLINE( 110)												::Array< ::String > _this12 = _this11->b;
+HXDLIN( 110)												_this12->push(::Std_obj::string(v5));
             											}
-/* CppBlock:void *//* CppIf:void */;
             										}
-/* CppBlock:void */;
             									}
-/* CppBlock:void *//* CppIf:void */;
-HXLINE( 111)									this->write(i/* CppVarLocal:int */,v4/* CppVarLocal:::cpp::VirtualArray */->__get(i/* CppVarLocal:int */)/* CppArray: ::Dynamic */)/* CppCallThis:void */;
-HXLINE( 112)									if ((i/* CppVarLocal:int */ == last/* CppVarLocal:int */)/* CppBinop:bool */) {
-HXLINE( 113)										this->nind--/* CppCrement:void */;
-HXLINE( 114)										if (this->pretty/* CppVarThis:bool */) {
-HXLINE( 114)											 ::StringBuf _this13 = this->buf/* CppVarThis: ::StringBuf *//* CppVarDecl:void */;
+HXLINE( 111)									this->write(i,v4->__get(i));
+HXLINE( 112)									if ((i == last)) {
+HXLINE( 113)										this->nind--;
+HXLINE( 114)										if (this->pretty) {
+HXLINE( 114)											 ::StringBuf _this13 = this->buf;
 HXDLIN( 114)											{
-HXLINE( 114)												if (::hx::IsNull( _this13/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */ )/* CppNullCompare:bool */) {
-HXLINE( 114)													_this13/* CppVarLocal: ::StringBuf */->charBuf = ::Array_obj< char >::__new()/* CppCallNew:::Array< char > *//* CppSet:void */;
+HXLINE( 114)												if (::hx::IsNull( _this13->charBuf )) {
+HXLINE( 114)													_this13->charBuf = ::Array_obj< char >::__new();
             												}
-/* CppBlock:void *//* CppIf:void */;
-HXDLIN( 114)												_this13/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */->push(10/* CppInt:int */)/* CppCallInstance(::Array< char >,push):void */;
+HXDLIN( 114)												_this13->charBuf->push(10);
             											}
-/* CppBlock:void */;
             										}
-/* CppBlock:void *//* CppIf:void */;
-HXLINE( 115)										if (this->pretty/* CppVarThis:bool */) {
-HXLINE( 115)											::String v6 = ::StringTools_obj::lpad(HX_("",00,00,00,00)/* CppString:::String */,this->indent/* CppVarThis:::String */,(this->nind/* CppVarThis:int */ * this->indent/* CppVarThis:::String */.length/* CppVarInstance(::String::.length):int */)/* CppBinop:int */)/* CppCallStatic:::String *//* CppVarDecl:void */;
+HXLINE( 115)										if (this->pretty) {
+HXLINE( 115)											::String v6 = ::StringTools_obj::lpad(HX_("",00,00,00,00),this->indent,(this->nind * this->indent.length));
 HXDLIN( 115)											{
-HXLINE( 115)												 ::StringBuf _this14 = this->buf/* CppVarThis: ::StringBuf *//* CppVarDecl:void */;
-HXDLIN( 115)												if (::hx::IsNotNull( _this14/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */ )/* CppNullCompare:bool */) {
-HXLINE( 115)													_this14/* CppVarLocal: ::StringBuf */->flush()/* CppCallInstance( ::StringBuf,flush):void */;
+HXLINE( 115)												 ::StringBuf _this14 = this->buf;
+HXDLIN( 115)												if (::hx::IsNotNull( _this14->charBuf )) {
+HXLINE( 115)													_this14->flush();
             												}
-/* CppBlock:void *//* CppIf:void */;
-HXDLIN( 115)												if (::hx::IsNull( _this14/* CppVarLocal: ::StringBuf */->b/* CppVarInstance( ::StringBuf::->b):::Array< ::String > */ )/* CppNullCompare:bool */) {
-HXLINE( 115)													_this14/* CppVarLocal: ::StringBuf */->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(v6/* CppVarLocal:::String */)/* CppCallStatic:::String */)/* CppArrayDecl:::Array< ::String > *//* CppSet:void */;
+HXDLIN( 115)												if (::hx::IsNull( _this14->b )) {
+HXLINE( 115)													_this14->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(v6));
             												}
-/* CppBlock:void */            												else {
-HXLINE( 115)													::Array< ::String > _this15 = _this14/* CppVarLocal: ::StringBuf */->b/* CppVarInstance( ::StringBuf::->b):::Array< ::String > *//* CppVarDecl:void */;
-HXDLIN( 115)													_this15/* CppVarLocal:::Array< ::String > */->push(::Std_obj::string(v6/* CppVarLocal:::String */)/* CppCallStatic:::String */)/* CppCallInstance(::Array< ::String >,push):void */;
+            												else {
+HXLINE( 115)													::Array< ::String > _this15 = _this14->b;
+HXDLIN( 115)													_this15->push(::Std_obj::string(v6));
             												}
-/* CppBlock:void *//* CppIf:void */;
             											}
-/* CppBlock:void */;
             										}
-/* CppBlock:void *//* CppIf:void */;
             									}
-/* CppBlock:void *//* CppIf:void */;
             								}
-/* CppBlock:void *//* CppWhile:void */;
             							}
-/* CppBlock:void */;
 HXLINE( 118)							{
-HXLINE( 118)								 ::StringBuf _this16 = this->buf/* CppVarThis: ::StringBuf *//* CppVarDecl:void */;
+HXLINE( 118)								 ::StringBuf _this16 = this->buf;
 HXDLIN( 118)								{
-HXLINE( 118)									if (::hx::IsNull( _this16/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */ )/* CppNullCompare:bool */) {
-HXLINE( 118)										_this16/* CppVarLocal: ::StringBuf */->charBuf = ::Array_obj< char >::__new()/* CppCallNew:::Array< char > *//* CppSet:void */;
+HXLINE( 118)									if (::hx::IsNull( _this16->charBuf )) {
+HXLINE( 118)										_this16->charBuf = ::Array_obj< char >::__new();
             									}
-/* CppBlock:void *//* CppIf:void */;
-HXDLIN( 118)									_this16/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */->push(93/* CppInt:int */)/* CppCallInstance(::Array< char >,push):void */;
+HXDLIN( 118)									_this16->charBuf->push(93);
             								}
-/* CppBlock:void */;
             							}
-/* CppBlock:void */;
             						}
-/* CppBlock:void */            						else {
-HXLINE( 119)							if (::hx::IsPointerEq( _g1/* CppVarLocal:::hx::Class */,::hx::ClassOf< ::haxe::ds::StringMap >()/* CppClassOf:::hx::Class */ )/* CppCompare:bool */) {
-HXLINE( 120)								HX_VARI_NAME(  ::haxe::ds::StringMap,v7,"v") = ( ( ::haxe::ds::StringMap)(v/* CppVarLocal: ::Dynamic */) )/* CppCast: ::haxe::ds::StringMap *//* CppVarDecl:void */;
-HXLINE( 121)								HX_VARI(  ::Dynamic,o) =  ::Dynamic(::hx::Anon_obj::Create(0))/* CppObjectDecl: ::Dynamic *//* CppVarDecl:void */;
+            						else {
+HXLINE( 119)							if (::hx::IsPointerEq( _g1,::hx::ClassOf< ::haxe::ds::StringMap >() )) {
+HXLINE( 120)								 ::haxe::ds::StringMap v7 = ( ( ::haxe::ds::StringMap)(v) );
+HXLINE( 121)								 ::Dynamic o =  ::Dynamic(::hx::Anon_obj::Create(0));
 HXLINE( 122)								{
-HXLINE( 122)									HX_VARI_NAME(  ::Dynamic,k1,"k") = v7/* CppVarLocal: ::haxe::ds::StringMap */->keys()/* CppCallInstance( ::haxe::ds::StringMap,keys): ::Dynamic *//* CppVarDecl:void */;
-HXDLIN( 122)									while(( (bool)(k1/* CppVarLocal: ::Dynamic */->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)/* CppDynamicField:::cpp::Variant */()/* CppCallExpression: ::Dynamic */) )/* CppCastScalar:bool */){
-HXLINE( 122)										HX_VARI_NAME( ::String,k2,"k") = ( (::String)(k1/* CppVarLocal: ::Dynamic */->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)/* CppDynamicField:::cpp::Variant */()/* CppCallExpression: ::Dynamic */) )/* CppCastScalar:::String *//* CppVarDecl:void */;
-HXLINE( 123)										::Reflect_obj::setField(o/* CppVarLocal: ::Dynamic */,k2/* CppVarLocal:::String */,v7/* CppVarLocal: ::haxe::ds::StringMap */->get(k2/* CppVarLocal:::String */)/* CppCallInstance( ::haxe::ds::StringMap,get): ::Dynamic */)/* CppCallStatic:void */;
+HXLINE( 122)									 ::Dynamic k1 = v7->keys();
+HXDLIN( 122)									while(( (bool)(k1->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 122)										::String k2 = ( (::String)(k1->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXLINE( 123)										::Reflect_obj::setField(o,k2,v7->get(k2));
             									}
-/* CppBlock:void *//* CppWhile:void */;
             								}
-/* CppBlock:void */;
 HXLINE( 124)								{
-HXLINE( 124)									 ::Dynamic v8 = o/* CppVarLocal: ::Dynamic *//* CppVarDecl:void */;
-HXDLIN( 124)									this->fieldsString(v8/* CppVarLocal: ::Dynamic */,::Reflect_obj::fields(v8/* CppVarLocal: ::Dynamic */)/* CppCallStatic:::Array< ::String > */)/* CppCallThis:void */;
+HXLINE( 124)									 ::Dynamic v8 = o;
+HXDLIN( 124)									this->fieldsString(v8,::Reflect_obj::fields(v8));
             								}
-/* CppBlock:void */;
             							}
-/* CppBlock:void */            							else {
-HXLINE( 125)								if (::hx::IsPointerEq( _g1/* CppVarLocal:::hx::Class */,::hx::ClassOf< ::Date >()/* CppClassOf:::hx::Class */ )/* CppCompare:bool */) {
-HXLINE( 127)									this->quote(( ( ::Date)(v/* CppVarLocal: ::Dynamic */) )/* CppCast: ::Date */->toString()/* CppCallInstance( ::Date,toString):::String */)/* CppCallThis:void */;
+            							else {
+HXLINE( 125)								if (::hx::IsPointerEq( _g1,::hx::ClassOf< ::Date >() )) {
+HXLINE( 127)									this->quote(( ( ::Date)(v) )->toString());
             								}
-/* CppBlock:void */            								else {
-HXLINE( 129)									this->classString(v/* CppVarLocal: ::Dynamic */)/* CppCallThis:void */;
+            								else {
+HXLINE( 129)									this->classString(v);
             								}
-/* CppBlock:void *//* CppIf:void */;
             							}
-/* CppBlock:void *//* CppIf:void */;
             						}
-/* CppBlock:void *//* CppIf:void */;
             					}
-/* CppBlock:void *//* CppIf:void */;
             				}
-/* CppBlock:void */            				break;
+            				break;
             				case (int)7: {
-HXLINE( 132)					::String v9 = ::Std_obj::string(_hx_getEnumValueIndex(v/* CppVarLocal: ::Dynamic */)/* CppCallStatic:int */)/* CppCallStatic:::String *//* CppVarDecl:void */;
+HXLINE( 132)					::String v9 = ::Std_obj::string(_hx_getEnumValueIndex(v));
 HXDLIN( 132)					{
-HXLINE( 132)						 ::StringBuf _this17 = this->buf/* CppVarThis: ::StringBuf *//* CppVarDecl:void */;
-HXDLIN( 132)						if (::hx::IsNotNull( _this17/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */ )/* CppNullCompare:bool */) {
-HXLINE( 132)							_this17/* CppVarLocal: ::StringBuf */->flush()/* CppCallInstance( ::StringBuf,flush):void */;
+HXLINE( 132)						 ::StringBuf _this17 = this->buf;
+HXDLIN( 132)						if (::hx::IsNotNull( _this17->charBuf )) {
+HXLINE( 132)							_this17->flush();
             						}
-/* CppBlock:void *//* CppIf:void */;
-HXDLIN( 132)						if (::hx::IsNull( _this17/* CppVarLocal: ::StringBuf */->b/* CppVarInstance( ::StringBuf::->b):::Array< ::String > */ )/* CppNullCompare:bool */) {
-HXLINE( 132)							_this17/* CppVarLocal: ::StringBuf */->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(v9/* CppVarLocal:::String */)/* CppCallStatic:::String */)/* CppArrayDecl:::Array< ::String > *//* CppSet:void */;
+HXDLIN( 132)						if (::hx::IsNull( _this17->b )) {
+HXLINE( 132)							_this17->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(v9));
             						}
-/* CppBlock:void */            						else {
-HXLINE( 132)							::Array< ::String > _this18 = _this17/* CppVarLocal: ::StringBuf */->b/* CppVarInstance( ::StringBuf::->b):::Array< ::String > *//* CppVarDecl:void */;
-HXDLIN( 132)							_this18/* CppVarLocal:::Array< ::String > */->push(::Std_obj::string(v9/* CppVarLocal:::String */)/* CppCallStatic:::String */)/* CppCallInstance(::Array< ::String >,push):void */;
+            						else {
+HXLINE( 132)							::Array< ::String > _this18 = _this17->b;
+HXDLIN( 132)							_this18->push(::Std_obj::string(v9));
             						}
-/* CppBlock:void *//* CppIf:void */;
             					}
-/* CppBlock:void */;
             				}
-/* CppBlock:void */            				break;
+            				break;
             				case (int)8: {
-HXLINE(  86)					 ::StringBuf _this19 = this->buf/* CppVarThis: ::StringBuf *//* CppVarDecl:void */;
-HXDLIN(  86)					if (::hx::IsNotNull( _this19/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */ )/* CppNullCompare:bool */) {
-HXLINE(  86)						_this19/* CppVarLocal: ::StringBuf */->flush()/* CppCallInstance( ::StringBuf,flush):void */;
+HXLINE(  86)					 ::StringBuf _this19 = this->buf;
+HXDLIN(  86)					if (::hx::IsNotNull( _this19->charBuf )) {
+HXLINE(  86)						_this19->flush();
             					}
-/* CppBlock:void *//* CppIf:void */;
-HXDLIN(  86)					if (::hx::IsNull( _this19/* CppVarLocal: ::StringBuf */->b/* CppVarInstance( ::StringBuf::->b):::Array< ::String > */ )/* CppNullCompare:bool */) {
-HXLINE(  86)						_this19/* CppVarLocal: ::StringBuf */->b = ::Array_obj< ::String >::fromData( _hx_array_data_f7b98003_6,1)/* CppArrayDecl:::Array< ::String > *//* CppSet:void */;
+HXDLIN(  86)					if (::hx::IsNull( _this19->b )) {
+HXLINE(  86)						_this19->b = ::Array_obj< ::String >::fromData( _hx_array_data_f7b98003_6,1);
             					}
-/* CppBlock:void */            					else {
-HXLINE(  86)						_this19/* CppVarLocal: ::StringBuf */->b/* CppVarInstance( ::StringBuf::->b):::Array< ::String > */->push(HX_("\"???\"",45,2f,74,bd)/* CppString:::String */)/* CppCallInstance(::Array< ::String >,push):void */;
+            					else {
+HXLINE(  86)						_this19->b->push(HX_("\"???\"",45,2f,74,bd));
             					}
-/* CppBlock:void *//* CppIf:void */;
             				}
-/* CppBlock:void */            				break;
+            				break;
             			}
-/* CppIntSwitch:void */;
             		}
-/* CppBlock:void */;
             	}
-/* CppBlock:void */
+
 
 HX_DEFINE_DYNAMIC_FUNC2(JsonPrinter_obj,write,(void))
 
 void JsonPrinter_obj::classString( ::Dynamic v){
             	HX_STACKFRAME(&_hx_pos_9c6ac6b04494726e_158_classString)
-            	HX_STACK_THIS(this)
-            	HX_STACK_ARG(v,"v")
-HXLINE( 158)
-HXDLIN( 158)		this->fieldsString(v/* CppVarLocal: ::Dynamic */,::Type_obj::getInstanceFields(::Type_obj::getClass(v/* CppVarLocal: ::Dynamic */)/* CppCallStatic:::hx::Class */)/* CppCallStatic:::Array< ::String > */)/* CppCallThis:void */;
+HXDLIN( 158)		this->fieldsString(v,::Type_obj::getInstanceFields(::Type_obj::getClass(v)));
             	}
-/* CppBlock:void */
+
 
 HX_DEFINE_DYNAMIC_FUNC1(JsonPrinter_obj,classString,(void))
 
 void JsonPrinter_obj::fieldsString( ::Dynamic v,::Array< ::String > fields){
             	HX_STACKFRAME(&_hx_pos_9c6ac6b04494726e_165_fieldsString)
-            	HX_STACK_THIS(this)
-            	HX_STACK_ARG(v,"v")
-            	HX_STACK_ARG(fields,"fields")
-HXLINE( 165)
 HXLINE( 166)		{
-HXLINE( 166)			 ::StringBuf _this = this->buf/* CppVarThis: ::StringBuf *//* CppVarDecl:void */;
+HXLINE( 166)			 ::StringBuf _this = this->buf;
 HXDLIN( 166)			{
-HXLINE( 166)				if (::hx::IsNull( _this/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */ )/* CppNullCompare:bool */) {
-HXLINE( 166)					_this/* CppVarLocal: ::StringBuf */->charBuf = ::Array_obj< char >::__new()/* CppCallNew:::Array< char > *//* CppSet:void */;
+HXLINE( 166)				if (::hx::IsNull( _this->charBuf )) {
+HXLINE( 166)					_this->charBuf = ::Array_obj< char >::__new();
             				}
-/* CppBlock:void *//* CppIf:void */;
-HXDLIN( 166)				_this/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */->push(123/* CppInt:int */)/* CppCallInstance(::Array< char >,push):void */;
+HXDLIN( 166)				_this->charBuf->push(123);
             			}
-/* CppBlock:void */;
             		}
-/* CppBlock:void */;
-HXLINE( 167)		HX_VARI( int,len) = fields/* CppVarLocal:::Array< ::String > */->length/* CppVarInstance(::Array< ::String >::->length):int *//* CppVarDecl:void */;
-HXLINE( 168)		HX_VARI( int,last) = (len/* CppVarLocal:int */ - 1/* CppInt:int */)/* CppBinop:int *//* CppVarDecl:void */;
-HXLINE( 169)		HX_VARI( bool,first) = true/* CppBool:bool *//* CppVarDecl:void */;
+HXLINE( 167)		int len = fields->length;
+HXLINE( 168)		int last = (len - 1);
+HXLINE( 169)		bool first = true;
 HXLINE( 170)		{
-HXLINE( 170)			int _g = 0/* CppInt:int *//* CppVarDecl:void */;
-HXDLIN( 170)			while((_g/* CppVarLocal:int */ < len/* CppVarLocal:int */)/* CppBinop:bool */){
-HXLINE( 170)				_g = (_g/* CppVarLocal:int */ + 1/* CppInt:int */)/* CppBinop:int *//* CppSet:void */;
-HXDLIN( 170)				HX_VARI( int,i) = (_g/* CppVarLocal:int */ - 1/* CppInt:int */)/* CppBinop:int *//* CppVarDecl:void */;
-HXLINE( 171)				HX_VARI( ::String,f) = fields/* CppVarLocal:::Array< ::String > */->__get(i/* CppVarLocal:int */)/* CppArray:::String *//* CppVarDecl:void */;
-HXLINE( 172)				HX_VARI(  ::Dynamic,value) = ::Reflect_obj::field(v/* CppVarLocal: ::Dynamic */,f/* CppVarLocal:::String */)/* CppCallStatic: ::Dynamic *//* CppVarDecl:void */;
-HXLINE( 173)				if (::Reflect_obj::isFunction(value/* CppVarLocal: ::Dynamic */)/* CppCallStatic:bool */) {
-HXLINE( 174)					continue/* CppContinue:void */;
+HXLINE( 170)			int _g = 0;
+HXDLIN( 170)			while((_g < len)){
+HXLINE( 170)				_g = (_g + 1);
+HXDLIN( 170)				int i = (_g - 1);
+HXLINE( 171)				::String f = fields->__get(i);
+HXLINE( 172)				 ::Dynamic value = ::Reflect_obj::field(v,f);
+HXLINE( 173)				if (::Reflect_obj::isFunction(value)) {
+HXLINE( 174)					continue;
             				}
-/* CppBlock:void *//* CppIf:void */;
-HXLINE( 175)				if (first/* CppVarLocal:bool */) {
-HXLINE( 176)					this->nind++/* CppCrement:void */;
-HXLINE( 177)					first = false/* CppBool:bool *//* CppSet:void */;
+HXLINE( 175)				if (first) {
+HXLINE( 176)					this->nind++;
+HXLINE( 177)					first = false;
             				}
-/* CppBlock:void */            				else {
-HXLINE( 179)					 ::StringBuf _this1 = this->buf/* CppVarThis: ::StringBuf *//* CppVarDecl:void */;
+            				else {
+HXLINE( 179)					 ::StringBuf _this1 = this->buf;
 HXDLIN( 179)					{
-HXLINE( 179)						if (::hx::IsNull( _this1/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */ )/* CppNullCompare:bool */) {
-HXLINE( 179)							_this1/* CppVarLocal: ::StringBuf */->charBuf = ::Array_obj< char >::__new()/* CppCallNew:::Array< char > *//* CppSet:void */;
+HXLINE( 179)						if (::hx::IsNull( _this1->charBuf )) {
+HXLINE( 179)							_this1->charBuf = ::Array_obj< char >::__new();
             						}
-/* CppBlock:void *//* CppIf:void */;
-HXDLIN( 179)						_this1/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */->push(44/* CppInt:int */)/* CppCallInstance(::Array< char >,push):void */;
+HXDLIN( 179)						_this1->charBuf->push(44);
             					}
-/* CppBlock:void */;
             				}
-/* CppBlock:void *//* CppIf:void */;
-HXLINE( 180)				if (this->pretty/* CppVarThis:bool */) {
-HXLINE( 180)					 ::StringBuf _this2 = this->buf/* CppVarThis: ::StringBuf *//* CppVarDecl:void */;
+HXLINE( 180)				if (this->pretty) {
+HXLINE( 180)					 ::StringBuf _this2 = this->buf;
 HXDLIN( 180)					{
-HXLINE( 180)						if (::hx::IsNull( _this2/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */ )/* CppNullCompare:bool */) {
-HXLINE( 180)							_this2/* CppVarLocal: ::StringBuf */->charBuf = ::Array_obj< char >::__new()/* CppCallNew:::Array< char > *//* CppSet:void */;
+HXLINE( 180)						if (::hx::IsNull( _this2->charBuf )) {
+HXLINE( 180)							_this2->charBuf = ::Array_obj< char >::__new();
             						}
-/* CppBlock:void *//* CppIf:void */;
-HXDLIN( 180)						_this2/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */->push(10/* CppInt:int */)/* CppCallInstance(::Array< char >,push):void */;
+HXDLIN( 180)						_this2->charBuf->push(10);
             					}
-/* CppBlock:void */;
             				}
-/* CppBlock:void *//* CppIf:void */;
-HXLINE( 181)				if (this->pretty/* CppVarThis:bool */) {
-HXLINE( 181)					::String v1 = ::StringTools_obj::lpad(HX_("",00,00,00,00)/* CppString:::String */,this->indent/* CppVarThis:::String */,(this->nind/* CppVarThis:int */ * this->indent/* CppVarThis:::String */.length/* CppVarInstance(::String::.length):int */)/* CppBinop:int */)/* CppCallStatic:::String *//* CppVarDecl:void */;
+HXLINE( 181)				if (this->pretty) {
+HXLINE( 181)					::String v1 = ::StringTools_obj::lpad(HX_("",00,00,00,00),this->indent,(this->nind * this->indent.length));
 HXDLIN( 181)					{
-HXLINE( 181)						 ::StringBuf _this3 = this->buf/* CppVarThis: ::StringBuf *//* CppVarDecl:void */;
-HXDLIN( 181)						if (::hx::IsNotNull( _this3/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */ )/* CppNullCompare:bool */) {
-HXLINE( 181)							_this3/* CppVarLocal: ::StringBuf */->flush()/* CppCallInstance( ::StringBuf,flush):void */;
+HXLINE( 181)						 ::StringBuf _this3 = this->buf;
+HXDLIN( 181)						if (::hx::IsNotNull( _this3->charBuf )) {
+HXLINE( 181)							_this3->flush();
             						}
-/* CppBlock:void *//* CppIf:void */;
-HXDLIN( 181)						if (::hx::IsNull( _this3/* CppVarLocal: ::StringBuf */->b/* CppVarInstance( ::StringBuf::->b):::Array< ::String > */ )/* CppNullCompare:bool */) {
-HXLINE( 181)							_this3/* CppVarLocal: ::StringBuf */->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(v1/* CppVarLocal:::String */)/* CppCallStatic:::String */)/* CppArrayDecl:::Array< ::String > *//* CppSet:void */;
+HXDLIN( 181)						if (::hx::IsNull( _this3->b )) {
+HXLINE( 181)							_this3->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(v1));
             						}
-/* CppBlock:void */            						else {
-HXLINE( 181)							::Array< ::String > _this4 = _this3/* CppVarLocal: ::StringBuf */->b/* CppVarInstance( ::StringBuf::->b):::Array< ::String > *//* CppVarDecl:void */;
-HXDLIN( 181)							_this4/* CppVarLocal:::Array< ::String > */->push(::Std_obj::string(v1/* CppVarLocal:::String */)/* CppCallStatic:::String */)/* CppCallInstance(::Array< ::String >,push):void */;
+            						else {
+HXLINE( 181)							::Array< ::String > _this4 = _this3->b;
+HXDLIN( 181)							_this4->push(::Std_obj::string(v1));
             						}
-/* CppBlock:void *//* CppIf:void */;
             					}
-/* CppBlock:void */;
             				}
-/* CppBlock:void *//* CppIf:void */;
-HXLINE( 182)				this->quote(f/* CppVarLocal:::String */)/* CppCallThis:void */;
+HXLINE( 182)				this->quote(f);
 HXLINE( 183)				{
-HXLINE( 183)					 ::StringBuf _this5 = this->buf/* CppVarThis: ::StringBuf *//* CppVarDecl:void */;
+HXLINE( 183)					 ::StringBuf _this5 = this->buf;
 HXDLIN( 183)					{
-HXLINE( 183)						if (::hx::IsNull( _this5/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */ )/* CppNullCompare:bool */) {
-HXLINE( 183)							_this5/* CppVarLocal: ::StringBuf */->charBuf = ::Array_obj< char >::__new()/* CppCallNew:::Array< char > *//* CppSet:void */;
+HXLINE( 183)						if (::hx::IsNull( _this5->charBuf )) {
+HXLINE( 183)							_this5->charBuf = ::Array_obj< char >::__new();
             						}
-/* CppBlock:void *//* CppIf:void */;
-HXDLIN( 183)						_this5/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */->push(58/* CppInt:int */)/* CppCallInstance(::Array< char >,push):void */;
+HXDLIN( 183)						_this5->charBuf->push(58);
             					}
-/* CppBlock:void */;
             				}
-/* CppBlock:void */;
-HXLINE( 184)				if (this->pretty/* CppVarThis:bool */) {
-HXLINE( 185)					 ::StringBuf _this6 = this->buf/* CppVarThis: ::StringBuf *//* CppVarDecl:void */;
+HXLINE( 184)				if (this->pretty) {
+HXLINE( 185)					 ::StringBuf _this6 = this->buf;
 HXDLIN( 185)					{
-HXLINE( 185)						if (::hx::IsNull( _this6/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */ )/* CppNullCompare:bool */) {
-HXLINE( 185)							_this6/* CppVarLocal: ::StringBuf */->charBuf = ::Array_obj< char >::__new()/* CppCallNew:::Array< char > *//* CppSet:void */;
+HXLINE( 185)						if (::hx::IsNull( _this6->charBuf )) {
+HXLINE( 185)							_this6->charBuf = ::Array_obj< char >::__new();
             						}
-/* CppBlock:void *//* CppIf:void */;
-HXDLIN( 185)						_this6/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */->push(32/* CppInt:int */)/* CppCallInstance(::Array< char >,push):void */;
+HXDLIN( 185)						_this6->charBuf->push(32);
             					}
-/* CppBlock:void */;
             				}
-/* CppBlock:void *//* CppIf:void */;
-HXLINE( 186)				this->write(f/* CppVarLocal:::String */,value/* CppVarLocal: ::Dynamic */)/* CppCallThis:void */;
-HXLINE( 187)				if ((i/* CppVarLocal:int */ == last/* CppVarLocal:int */)/* CppBinop:bool */) {
-HXLINE( 188)					this->nind--/* CppCrement:void */;
-HXLINE( 189)					if (this->pretty/* CppVarThis:bool */) {
-HXLINE( 189)						 ::StringBuf _this7 = this->buf/* CppVarThis: ::StringBuf *//* CppVarDecl:void */;
+HXLINE( 186)				this->write(f,value);
+HXLINE( 187)				if ((i == last)) {
+HXLINE( 188)					this->nind--;
+HXLINE( 189)					if (this->pretty) {
+HXLINE( 189)						 ::StringBuf _this7 = this->buf;
 HXDLIN( 189)						{
-HXLINE( 189)							if (::hx::IsNull( _this7/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */ )/* CppNullCompare:bool */) {
-HXLINE( 189)								_this7/* CppVarLocal: ::StringBuf */->charBuf = ::Array_obj< char >::__new()/* CppCallNew:::Array< char > *//* CppSet:void */;
+HXLINE( 189)							if (::hx::IsNull( _this7->charBuf )) {
+HXLINE( 189)								_this7->charBuf = ::Array_obj< char >::__new();
             							}
-/* CppBlock:void *//* CppIf:void */;
-HXDLIN( 189)							_this7/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */->push(10/* CppInt:int */)/* CppCallInstance(::Array< char >,push):void */;
+HXDLIN( 189)							_this7->charBuf->push(10);
             						}
-/* CppBlock:void */;
             					}
-/* CppBlock:void *//* CppIf:void */;
-HXLINE( 190)					if (this->pretty/* CppVarThis:bool */) {
-HXLINE( 190)						::String v2 = ::StringTools_obj::lpad(HX_("",00,00,00,00)/* CppString:::String */,this->indent/* CppVarThis:::String */,(this->nind/* CppVarThis:int */ * this->indent/* CppVarThis:::String */.length/* CppVarInstance(::String::.length):int */)/* CppBinop:int */)/* CppCallStatic:::String *//* CppVarDecl:void */;
+HXLINE( 190)					if (this->pretty) {
+HXLINE( 190)						::String v2 = ::StringTools_obj::lpad(HX_("",00,00,00,00),this->indent,(this->nind * this->indent.length));
 HXDLIN( 190)						{
-HXLINE( 190)							 ::StringBuf _this8 = this->buf/* CppVarThis: ::StringBuf *//* CppVarDecl:void */;
-HXDLIN( 190)							if (::hx::IsNotNull( _this8/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */ )/* CppNullCompare:bool */) {
-HXLINE( 190)								_this8/* CppVarLocal: ::StringBuf */->flush()/* CppCallInstance( ::StringBuf,flush):void */;
+HXLINE( 190)							 ::StringBuf _this8 = this->buf;
+HXDLIN( 190)							if (::hx::IsNotNull( _this8->charBuf )) {
+HXLINE( 190)								_this8->flush();
             							}
-/* CppBlock:void *//* CppIf:void */;
-HXDLIN( 190)							if (::hx::IsNull( _this8/* CppVarLocal: ::StringBuf */->b/* CppVarInstance( ::StringBuf::->b):::Array< ::String > */ )/* CppNullCompare:bool */) {
-HXLINE( 190)								_this8/* CppVarLocal: ::StringBuf */->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(v2/* CppVarLocal:::String */)/* CppCallStatic:::String */)/* CppArrayDecl:::Array< ::String > *//* CppSet:void */;
+HXDLIN( 190)							if (::hx::IsNull( _this8->b )) {
+HXLINE( 190)								_this8->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(v2));
             							}
-/* CppBlock:void */            							else {
-HXLINE( 190)								::Array< ::String > _this9 = _this8/* CppVarLocal: ::StringBuf */->b/* CppVarInstance( ::StringBuf::->b):::Array< ::String > *//* CppVarDecl:void */;
-HXDLIN( 190)								_this9/* CppVarLocal:::Array< ::String > */->push(::Std_obj::string(v2/* CppVarLocal:::String */)/* CppCallStatic:::String */)/* CppCallInstance(::Array< ::String >,push):void */;
+            							else {
+HXLINE( 190)								::Array< ::String > _this9 = _this8->b;
+HXDLIN( 190)								_this9->push(::Std_obj::string(v2));
             							}
-/* CppBlock:void *//* CppIf:void */;
             						}
-/* CppBlock:void */;
             					}
-/* CppBlock:void *//* CppIf:void */;
             				}
-/* CppBlock:void *//* CppIf:void */;
             			}
-/* CppBlock:void *//* CppWhile:void */;
             		}
-/* CppBlock:void */;
 HXLINE( 193)		{
-HXLINE( 193)			 ::StringBuf _this10 = this->buf/* CppVarThis: ::StringBuf *//* CppVarDecl:void */;
+HXLINE( 193)			 ::StringBuf _this10 = this->buf;
 HXDLIN( 193)			{
-HXLINE( 193)				if (::hx::IsNull( _this10/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */ )/* CppNullCompare:bool */) {
-HXLINE( 193)					_this10/* CppVarLocal: ::StringBuf */->charBuf = ::Array_obj< char >::__new()/* CppCallNew:::Array< char > *//* CppSet:void */;
+HXLINE( 193)				if (::hx::IsNull( _this10->charBuf )) {
+HXLINE( 193)					_this10->charBuf = ::Array_obj< char >::__new();
             				}
-/* CppBlock:void *//* CppIf:void */;
-HXDLIN( 193)				_this10/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */->push(125/* CppInt:int */)/* CppCallInstance(::Array< char >,push):void */;
+HXDLIN( 193)				_this10->charBuf->push(125);
             			}
-/* CppBlock:void */;
             		}
-/* CppBlock:void */;
             	}
-/* CppBlock:void */
+
 
 HX_DEFINE_DYNAMIC_FUNC2(JsonPrinter_obj,fieldsString,(void))
 
 void JsonPrinter_obj::quote(::String s){
             	HX_STACKFRAME(&_hx_pos_9c6ac6b04494726e_196_quote)
-            	HX_STACK_THIS(this)
-            	HX_STACK_ARG(s,"s")
-HXLINE( 196)
 HXLINE( 203)		{
-HXLINE( 203)			 ::StringBuf _this = this->buf/* CppVarThis: ::StringBuf *//* CppVarDecl:void */;
+HXLINE( 203)			 ::StringBuf _this = this->buf;
 HXDLIN( 203)			{
-HXLINE( 203)				if (::hx::IsNull( _this/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */ )/* CppNullCompare:bool */) {
-HXLINE( 203)					_this/* CppVarLocal: ::StringBuf */->charBuf = ::Array_obj< char >::__new()/* CppCallNew:::Array< char > *//* CppSet:void */;
+HXLINE( 203)				if (::hx::IsNull( _this->charBuf )) {
+HXLINE( 203)					_this->charBuf = ::Array_obj< char >::__new();
             				}
-/* CppBlock:void *//* CppIf:void */;
-HXDLIN( 203)				_this/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */->push(34/* CppInt:int */)/* CppCallInstance(::Array< char >,push):void */;
+HXDLIN( 203)				_this->charBuf->push(34);
             			}
-/* CppBlock:void */;
             		}
-/* CppBlock:void */;
-HXLINE( 204)		HX_VARI( int,i) = 0/* CppInt:int *//* CppVarDecl:void */;
-HXLINE( 205)		HX_VARI( int,length) = s/* CppVarLocal:::String */.length/* CppVarInstance(::String::.length):int *//* CppVarDecl:void */;
-HXLINE( 209)		while((i/* CppVarLocal:int */ < length/* CppVarLocal:int */)/* CppBinop:bool */){
-HXLINE( 210)			i = (i/* CppVarLocal:int */ + 1/* CppInt:int */)/* CppBinop:int *//* CppSet:void */;
-HXDLIN( 210)			HX_VARI( int,c) = s/* CppVarLocal:::String */.cca((i/* CppVarLocal:int */ - 1/* CppInt:int */)/* CppBinop:int */)/* CppCallInternal:int *//* CppVarDecl:void */;
-HXLINE( 211)			switch((int)(c/* CppVarLocal:int */)){
+HXLINE( 204)		int i = 0;
+HXLINE( 205)		int length = s.length;
+HXLINE( 209)		while((i < length)){
+HXLINE( 210)			i = (i + 1);
+HXDLIN( 210)			int c = s.cca((i - 1));
+HXLINE( 211)			switch((int)(c)){
             				case (int)8: {
-HXLINE( 223)					 ::StringBuf _this1 = this->buf/* CppVarThis: ::StringBuf *//* CppVarDecl:void */;
-HXDLIN( 223)					if (::hx::IsNotNull( _this1/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */ )/* CppNullCompare:bool */) {
-HXLINE( 223)						_this1/* CppVarLocal: ::StringBuf */->flush()/* CppCallInstance( ::StringBuf,flush):void */;
+HXLINE( 223)					 ::StringBuf _this1 = this->buf;
+HXDLIN( 223)					if (::hx::IsNotNull( _this1->charBuf )) {
+HXLINE( 223)						_this1->flush();
             					}
-/* CppBlock:void *//* CppIf:void */;
-HXDLIN( 223)					if (::hx::IsNull( _this1/* CppVarLocal: ::StringBuf */->b/* CppVarInstance( ::StringBuf::->b):::Array< ::String > */ )/* CppNullCompare:bool */) {
-HXLINE( 223)						_this1/* CppVarLocal: ::StringBuf */->b = ::Array_obj< ::String >::fromData( _hx_array_data_f7b98003_12,1)/* CppArrayDecl:::Array< ::String > *//* CppSet:void */;
+HXDLIN( 223)					if (::hx::IsNull( _this1->b )) {
+HXLINE( 223)						_this1->b = ::Array_obj< ::String >::fromData( _hx_array_data_f7b98003_12,1);
             					}
-/* CppBlock:void */            					else {
-HXLINE( 223)						_this1/* CppVarLocal: ::StringBuf */->b/* CppVarInstance( ::StringBuf::->b):::Array< ::String > */->push(HX_("\\b",86,50,00,00)/* CppString:::String */)/* CppCallInstance(::Array< ::String >,push):void */;
+            					else {
+HXLINE( 223)						_this1->b->push(HX_("\\b",86,50,00,00));
             					}
-/* CppBlock:void *//* CppIf:void */;
             				}
-/* CppBlock:void */            				break;
+            				break;
             				case (int)9: {
-HXLINE( 221)					 ::StringBuf _this2 = this->buf/* CppVarThis: ::StringBuf *//* CppVarDecl:void */;
-HXDLIN( 221)					if (::hx::IsNotNull( _this2/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */ )/* CppNullCompare:bool */) {
-HXLINE( 221)						_this2/* CppVarLocal: ::StringBuf */->flush()/* CppCallInstance( ::StringBuf,flush):void */;
+HXLINE( 221)					 ::StringBuf _this2 = this->buf;
+HXDLIN( 221)					if (::hx::IsNotNull( _this2->charBuf )) {
+HXLINE( 221)						_this2->flush();
             					}
-/* CppBlock:void *//* CppIf:void */;
-HXDLIN( 221)					if (::hx::IsNull( _this2/* CppVarLocal: ::StringBuf */->b/* CppVarInstance( ::StringBuf::->b):::Array< ::String > */ )/* CppNullCompare:bool */) {
-HXLINE( 221)						_this2/* CppVarLocal: ::StringBuf */->b = ::Array_obj< ::String >::fromData( _hx_array_data_f7b98003_13,1)/* CppArrayDecl:::Array< ::String > *//* CppSet:void */;
+HXDLIN( 221)					if (::hx::IsNull( _this2->b )) {
+HXLINE( 221)						_this2->b = ::Array_obj< ::String >::fromData( _hx_array_data_f7b98003_13,1);
             					}
-/* CppBlock:void */            					else {
-HXLINE( 221)						_this2/* CppVarLocal: ::StringBuf */->b/* CppVarInstance( ::StringBuf::->b):::Array< ::String > */->push(HX_("\\t",98,50,00,00)/* CppString:::String */)/* CppCallInstance(::Array< ::String >,push):void */;
+            					else {
+HXLINE( 221)						_this2->b->push(HX_("\\t",98,50,00,00));
             					}
-/* CppBlock:void *//* CppIf:void */;
             				}
-/* CppBlock:void */            				break;
+            				break;
             				case (int)10: {
-HXLINE( 217)					 ::StringBuf _this3 = this->buf/* CppVarThis: ::StringBuf *//* CppVarDecl:void */;
-HXDLIN( 217)					if (::hx::IsNotNull( _this3/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */ )/* CppNullCompare:bool */) {
-HXLINE( 217)						_this3/* CppVarLocal: ::StringBuf */->flush()/* CppCallInstance( ::StringBuf,flush):void */;
+HXLINE( 217)					 ::StringBuf _this3 = this->buf;
+HXDLIN( 217)					if (::hx::IsNotNull( _this3->charBuf )) {
+HXLINE( 217)						_this3->flush();
             					}
-/* CppBlock:void *//* CppIf:void */;
-HXDLIN( 217)					if (::hx::IsNull( _this3/* CppVarLocal: ::StringBuf */->b/* CppVarInstance( ::StringBuf::->b):::Array< ::String > */ )/* CppNullCompare:bool */) {
-HXLINE( 217)						_this3/* CppVarLocal: ::StringBuf */->b = ::Array_obj< ::String >::fromData( _hx_array_data_f7b98003_14,1)/* CppArrayDecl:::Array< ::String > *//* CppSet:void */;
+HXDLIN( 217)					if (::hx::IsNull( _this3->b )) {
+HXLINE( 217)						_this3->b = ::Array_obj< ::String >::fromData( _hx_array_data_f7b98003_14,1);
             					}
-/* CppBlock:void */            					else {
-HXLINE( 217)						_this3/* CppVarLocal: ::StringBuf */->b/* CppVarInstance( ::StringBuf::->b):::Array< ::String > */->push(HX_("\\n",92,50,00,00)/* CppString:::String */)/* CppCallInstance(::Array< ::String >,push):void */;
+            					else {
+HXLINE( 217)						_this3->b->push(HX_("\\n",92,50,00,00));
             					}
-/* CppBlock:void *//* CppIf:void */;
             				}
-/* CppBlock:void */            				break;
+            				break;
             				case (int)12: {
-HXLINE( 225)					 ::StringBuf _this4 = this->buf/* CppVarThis: ::StringBuf *//* CppVarDecl:void */;
-HXDLIN( 225)					if (::hx::IsNotNull( _this4/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */ )/* CppNullCompare:bool */) {
-HXLINE( 225)						_this4/* CppVarLocal: ::StringBuf */->flush()/* CppCallInstance( ::StringBuf,flush):void */;
+HXLINE( 225)					 ::StringBuf _this4 = this->buf;
+HXDLIN( 225)					if (::hx::IsNotNull( _this4->charBuf )) {
+HXLINE( 225)						_this4->flush();
             					}
-/* CppBlock:void *//* CppIf:void */;
-HXDLIN( 225)					if (::hx::IsNull( _this4/* CppVarLocal: ::StringBuf */->b/* CppVarInstance( ::StringBuf::->b):::Array< ::String > */ )/* CppNullCompare:bool */) {
-HXLINE( 225)						_this4/* CppVarLocal: ::StringBuf */->b = ::Array_obj< ::String >::fromData( _hx_array_data_f7b98003_15,1)/* CppArrayDecl:::Array< ::String > *//* CppSet:void */;
+HXDLIN( 225)					if (::hx::IsNull( _this4->b )) {
+HXLINE( 225)						_this4->b = ::Array_obj< ::String >::fromData( _hx_array_data_f7b98003_15,1);
             					}
-/* CppBlock:void */            					else {
-HXLINE( 225)						_this4/* CppVarLocal: ::StringBuf */->b/* CppVarInstance( ::StringBuf::->b):::Array< ::String > */->push(HX_("\\f",8a,50,00,00)/* CppString:::String */)/* CppCallInstance(::Array< ::String >,push):void */;
+            					else {
+HXLINE( 225)						_this4->b->push(HX_("\\f",8a,50,00,00));
             					}
-/* CppBlock:void *//* CppIf:void */;
             				}
-/* CppBlock:void */            				break;
+            				break;
             				case (int)13: {
-HXLINE( 219)					 ::StringBuf _this5 = this->buf/* CppVarThis: ::StringBuf *//* CppVarDecl:void */;
-HXDLIN( 219)					if (::hx::IsNotNull( _this5/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */ )/* CppNullCompare:bool */) {
-HXLINE( 219)						_this5/* CppVarLocal: ::StringBuf */->flush()/* CppCallInstance( ::StringBuf,flush):void */;
+HXLINE( 219)					 ::StringBuf _this5 = this->buf;
+HXDLIN( 219)					if (::hx::IsNotNull( _this5->charBuf )) {
+HXLINE( 219)						_this5->flush();
             					}
-/* CppBlock:void *//* CppIf:void */;
-HXDLIN( 219)					if (::hx::IsNull( _this5/* CppVarLocal: ::StringBuf */->b/* CppVarInstance( ::StringBuf::->b):::Array< ::String > */ )/* CppNullCompare:bool */) {
-HXLINE( 219)						_this5/* CppVarLocal: ::StringBuf */->b = ::Array_obj< ::String >::fromData( _hx_array_data_f7b98003_16,1)/* CppArrayDecl:::Array< ::String > *//* CppSet:void */;
+HXDLIN( 219)					if (::hx::IsNull( _this5->b )) {
+HXLINE( 219)						_this5->b = ::Array_obj< ::String >::fromData( _hx_array_data_f7b98003_16,1);
             					}
-/* CppBlock:void */            					else {
-HXLINE( 219)						_this5/* CppVarLocal: ::StringBuf */->b/* CppVarInstance( ::StringBuf::->b):::Array< ::String > */->push(HX_("\\r",96,50,00,00)/* CppString:::String */)/* CppCallInstance(::Array< ::String >,push):void */;
+            					else {
+HXLINE( 219)						_this5->b->push(HX_("\\r",96,50,00,00));
             					}
-/* CppBlock:void *//* CppIf:void */;
             				}
-/* CppBlock:void */            				break;
+            				break;
             				case (int)34: {
-HXLINE( 213)					 ::StringBuf _this6 = this->buf/* CppVarThis: ::StringBuf *//* CppVarDecl:void */;
-HXDLIN( 213)					if (::hx::IsNotNull( _this6/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */ )/* CppNullCompare:bool */) {
-HXLINE( 213)						_this6/* CppVarLocal: ::StringBuf */->flush()/* CppCallInstance( ::StringBuf,flush):void */;
+HXLINE( 213)					 ::StringBuf _this6 = this->buf;
+HXDLIN( 213)					if (::hx::IsNotNull( _this6->charBuf )) {
+HXLINE( 213)						_this6->flush();
             					}
-/* CppBlock:void *//* CppIf:void */;
-HXDLIN( 213)					if (::hx::IsNull( _this6/* CppVarLocal: ::StringBuf */->b/* CppVarInstance( ::StringBuf::->b):::Array< ::String > */ )/* CppNullCompare:bool */) {
-HXLINE( 213)						_this6/* CppVarLocal: ::StringBuf */->b = ::Array_obj< ::String >::fromData( _hx_array_data_f7b98003_17,1)/* CppArrayDecl:::Array< ::String > *//* CppSet:void */;
+HXDLIN( 213)					if (::hx::IsNull( _this6->b )) {
+HXLINE( 213)						_this6->b = ::Array_obj< ::String >::fromData( _hx_array_data_f7b98003_17,1);
             					}
-/* CppBlock:void */            					else {
-HXLINE( 213)						_this6/* CppVarLocal: ::StringBuf */->b/* CppVarInstance( ::StringBuf::->b):::Array< ::String > */->push(HX_("\\\"",46,50,00,00)/* CppString:::String */)/* CppCallInstance(::Array< ::String >,push):void */;
+            					else {
+HXLINE( 213)						_this6->b->push(HX_("\\\"",46,50,00,00));
             					}
-/* CppBlock:void *//* CppIf:void */;
             				}
-/* CppBlock:void */            				break;
+            				break;
             				case (int)92: {
-HXLINE( 215)					 ::StringBuf _this7 = this->buf/* CppVarThis: ::StringBuf *//* CppVarDecl:void */;
-HXDLIN( 215)					if (::hx::IsNotNull( _this7/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */ )/* CppNullCompare:bool */) {
-HXLINE( 215)						_this7/* CppVarLocal: ::StringBuf */->flush()/* CppCallInstance( ::StringBuf,flush):void */;
+HXLINE( 215)					 ::StringBuf _this7 = this->buf;
+HXDLIN( 215)					if (::hx::IsNotNull( _this7->charBuf )) {
+HXLINE( 215)						_this7->flush();
             					}
-/* CppBlock:void *//* CppIf:void */;
-HXDLIN( 215)					if (::hx::IsNull( _this7/* CppVarLocal: ::StringBuf */->b/* CppVarInstance( ::StringBuf::->b):::Array< ::String > */ )/* CppNullCompare:bool */) {
-HXLINE( 215)						_this7/* CppVarLocal: ::StringBuf */->b = ::Array_obj< ::String >::fromData( _hx_array_data_f7b98003_18,1)/* CppArrayDecl:::Array< ::String > *//* CppSet:void */;
+HXDLIN( 215)					if (::hx::IsNull( _this7->b )) {
+HXLINE( 215)						_this7->b = ::Array_obj< ::String >::fromData( _hx_array_data_f7b98003_18,1);
             					}
-/* CppBlock:void */            					else {
-HXLINE( 215)						_this7/* CppVarLocal: ::StringBuf */->b/* CppVarInstance( ::StringBuf::->b):::Array< ::String > */->push(HX_("\\\\",80,50,00,00)/* CppString:::String */)/* CppCallInstance(::Array< ::String >,push):void */;
+            					else {
+HXLINE( 215)						_this7->b->push(HX_("\\\\",80,50,00,00));
             					}
-/* CppBlock:void *//* CppIf:void */;
             				}
-/* CppBlock:void */            				break;
+            				break;
             				default:{
-HXLINE( 248)					 ::StringBuf _this8 = this->buf/* CppVarThis: ::StringBuf *//* CppVarDecl:void */;
-HXDLIN( 248)					if ((c/* CppVarLocal:int */ >= 127/* CppInt:int */)/* CppBinop:bool */) {
-HXLINE( 248)						::String x = ::String::fromCharCode(c/* CppVarLocal:int */)/* CppCallStatic:::String *//* CppVarDecl:void */;
-HXDLIN( 248)						if (::hx::IsNotNull( _this8/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */ )/* CppNullCompare:bool */) {
-HXLINE( 248)							_this8/* CppVarLocal: ::StringBuf */->flush()/* CppCallInstance( ::StringBuf,flush):void */;
+HXLINE( 248)					 ::StringBuf _this8 = this->buf;
+HXDLIN( 248)					if ((c >= 127)) {
+HXLINE( 248)						::String x = ::String::fromCharCode(c);
+HXDLIN( 248)						if (::hx::IsNotNull( _this8->charBuf )) {
+HXLINE( 248)							_this8->flush();
             						}
-/* CppBlock:void *//* CppIf:void */;
-HXDLIN( 248)						if (::hx::IsNull( _this8/* CppVarLocal: ::StringBuf */->b/* CppVarInstance( ::StringBuf::->b):::Array< ::String > */ )/* CppNullCompare:bool */) {
-HXLINE( 248)							_this8/* CppVarLocal: ::StringBuf */->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(x/* CppVarLocal:::String */)/* CppCallStatic:::String */)/* CppArrayDecl:::Array< ::String > *//* CppSet:void */;
+HXDLIN( 248)						if (::hx::IsNull( _this8->b )) {
+HXLINE( 248)							_this8->b = ::Array_obj< ::String >::__new(1)->init(0,::Std_obj::string(x));
             						}
-/* CppBlock:void */            						else {
-HXLINE( 248)							::Array< ::String > _this9 = _this8/* CppVarLocal: ::StringBuf */->b/* CppVarInstance( ::StringBuf::->b):::Array< ::String > *//* CppVarDecl:void */;
-HXDLIN( 248)							_this9/* CppVarLocal:::Array< ::String > */->push(::Std_obj::string(x/* CppVarLocal:::String */)/* CppCallStatic:::String */)/* CppCallInstance(::Array< ::String >,push):void */;
+            						else {
+HXLINE( 248)							::Array< ::String > _this9 = _this8->b;
+HXDLIN( 248)							_this9->push(::Std_obj::string(x));
             						}
-/* CppBlock:void *//* CppIf:void */;
             					}
-/* CppBlock:void */            					else {
-HXLINE( 248)						if (::hx::IsNull( _this8/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */ )/* CppNullCompare:bool */) {
-HXLINE( 248)							_this8/* CppVarLocal: ::StringBuf */->charBuf = ::Array_obj< char >::__new()/* CppCallNew:::Array< char > *//* CppSet:void */;
+            					else {
+HXLINE( 248)						if (::hx::IsNull( _this8->charBuf )) {
+HXLINE( 248)							_this8->charBuf = ::Array_obj< char >::__new();
             						}
-/* CppBlock:void *//* CppIf:void */;
-HXDLIN( 248)						_this8/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */->push(c/* CppVarLocal:int */)/* CppCallInstance(::Array< char >,push):void */;
+HXDLIN( 248)						_this8->charBuf->push(c);
             					}
-/* CppBlock:void *//* CppIf:void */;
             				}
-/* CppBlock:void */            			}
-/* CppIntSwitch:void */;
+            			}
             		}
-/* CppBlock:void *//* CppWhile:void */;
 HXLINE( 256)		{
-HXLINE( 256)			 ::StringBuf _this10 = this->buf/* CppVarThis: ::StringBuf *//* CppVarDecl:void */;
+HXLINE( 256)			 ::StringBuf _this10 = this->buf;
 HXDLIN( 256)			{
-HXLINE( 256)				if (::hx::IsNull( _this10/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */ )/* CppNullCompare:bool */) {
-HXLINE( 256)					_this10/* CppVarLocal: ::StringBuf */->charBuf = ::Array_obj< char >::__new()/* CppCallNew:::Array< char > *//* CppSet:void */;
+HXLINE( 256)				if (::hx::IsNull( _this10->charBuf )) {
+HXLINE( 256)					_this10->charBuf = ::Array_obj< char >::__new();
             				}
-/* CppBlock:void *//* CppIf:void */;
-HXDLIN( 256)				_this10/* CppVarLocal: ::StringBuf */->charBuf/* CppVarInstance( ::StringBuf::->charBuf):::Array< char > */->push(34/* CppInt:int */)/* CppCallInstance(::Array< char >,push):void */;
+HXDLIN( 256)				_this10->charBuf->push(34);
             			}
-/* CppBlock:void */;
             		}
-/* CppBlock:void */;
             	}
-/* CppBlock:void */
+
 
 HX_DEFINE_DYNAMIC_FUNC1(JsonPrinter_obj,quote,(void))
 
 ::String JsonPrinter_obj::print( ::Dynamic o, ::Dynamic replacer,::String space){
             	HX_GC_STACKFRAME(&_hx_pos_9c6ac6b04494726e_44_print)
-            	HX_STACK_ARG(o,"o")
-            	HX_STACK_ARG(replacer,"replacer")
-            	HX_STACK_ARG(space,"space")
-HXLINE(  44)
-HXLINE(  45)		HX_VARI(  ::haxe::format::JsonPrinter,printer) =  ::haxe::format::JsonPrinter_obj::__alloc( HX_CTX ,replacer/* CppVarLocal: ::Dynamic */,space/* CppVarLocal:::String */)/* CppCallNew: ::haxe::format::JsonPrinter *//* CppVarDecl:void */;
-HXLINE(  46)		printer/* CppVarLocal: ::haxe::format::JsonPrinter */->write(HX_("",00,00,00,00)/* CppString:::String */,o/* CppVarLocal: ::Dynamic */)/* CppCallInstance( ::haxe::format::JsonPrinter,write):void */;
-HXLINE(  47)		return printer/* CppVarLocal: ::haxe::format::JsonPrinter */->buf/* CppVarInstance( ::haxe::format::JsonPrinter::->buf): ::StringBuf */->toString()/* CppCallInstance( ::StringBuf,toString):::String *//* CppReturn:void */;
+HXLINE(  45)		 ::haxe::format::JsonPrinter printer =  ::haxe::format::JsonPrinter_obj::__alloc( HX_CTX ,replacer,space);
+HXLINE(  46)		printer->write(HX_("",00,00,00,00),o);
+HXLINE(  47)		return printer->buf->toString();
             	}
-/* CppBlock:void */
+
 
 STATIC_HX_DEFINE_DYNAMIC_FUNC3(JsonPrinter_obj,print,return )
 
diff --git a/Sources/c_borogove/src/sys/db/Connection.cpp b/Sources/c_borogove/src/sys/db/Connection.cpp
index 84a1f68..ce80299 100644
--- a/Sources/c_borogove/src/sys/db/Connection.cpp
+++ b/Sources/c_borogove/src/sys/db/Connection.cpp
@@ -14,7 +14,6 @@ namespace db{
 
 static ::String Connection_obj_sMemberFields[] = {
 	HX_("request",4f,df,84,44),
-	HX_("quote",3c,23,f2,5d),
 	::String(null()) };
 
 ::hx::Class Connection_obj::__mClass;
diff --git a/Sources/c_borogove/src/sys/db/_Sqlite/SqliteConnection.cpp b/Sources/c_borogove/src/sys/db/_Sqlite/SqliteConnection.cpp
index 53fa034..31315c7 100644
--- a/Sources/c_borogove/src/sys/db/_Sqlite/SqliteConnection.cpp
+++ b/Sources/c_borogove/src/sys/db/_Sqlite/SqliteConnection.cpp
@@ -4,9 +4,6 @@
 #ifndef INCLUDED_Std
 #include <Std.h>
 #endif
-#ifndef INCLUDED_StringTools
-#include <StringTools.h>
-#endif
 #ifndef INCLUDED_haxe_Exception
 #include <haxe/Exception.h>
 #endif
@@ -28,7 +25,6 @@
 
 HX_DEFINE_STACK_FRAME(_hx_pos_1eeb76bb81389462_29_new,"sys.db._Sqlite.SqliteConnection","new",0xf8a8646e,"sys.db._Sqlite.SqliteConnection.new","/usr/local/lib/haxe/std/cpp/_std/sys/db/Sqlite.hx",29,0xe962a745)
 HX_LOCAL_STACK_FRAME(_hx_pos_1eeb76bb81389462_37_request,"sys.db._Sqlite.SqliteConnection","request",0x544f925d,"sys.db._Sqlite.SqliteConnection.request","/usr/local/lib/haxe/std/cpp/_std/sys/db/Sqlite.hx",37,0xe962a745)
-HX_LOCAL_STACK_FRAME(_hx_pos_1eeb76bb81389462_48_quote,"sys.db._Sqlite.SqliteConnection","quote",0x839e56ca,"sys.db._Sqlite.SqliteConnection.quote","/usr/local/lib/haxe/std/cpp/_std/sys/db/Sqlite.hx",48,0xe962a745)
 namespace sys{
 namespace db{
 namespace _Sqlite{
@@ -55,7 +51,6 @@ bool SqliteConnection_obj::_hx_isInstanceOf(int inClassId) {
 
 static ::sys::db::Connection_obj _hx_sys_db__Sqlite_SqliteConnection__hx_sys_db_Connection= {
 	( ::Dynamic (::hx::Object::*)(::String))&::sys::db::_Sqlite::SqliteConnection_obj::request,
-	( ::String (::hx::Object::*)(::String))&::sys::db::_Sqlite::SqliteConnection_obj::quote,
 };
 
 void *SqliteConnection_obj::_hx_getInterface(int inHash) {
@@ -105,26 +100,6 @@ HXDLIN(  37)		return null();
 
 HX_DEFINE_DYNAMIC_FUNC1(SqliteConnection_obj,request,return )
 
-::String SqliteConnection_obj::quote(::String s){
-            	HX_STACKFRAME(&_hx_pos_1eeb76bb81389462_48_quote)
-HXLINE(  49)		if ((s.indexOf(HX_("\x00""",00,00,00,00),null()) >= 0)) {
-HXLINE(  50)			::Array< ::String > hexChars = ::Array_obj< ::String >::__new();
-HXLINE(  51)			{
-HXLINE(  51)				int _g = 0;
-HXDLIN(  51)				int _g1 = s.length;
-HXDLIN(  51)				while((_g < _g1)){
-HXLINE(  51)					_g = (_g + 1);
-HXLINE(  52)					hexChars->push(::StringTools_obj::hex(s.cca((_g - 1)),2));
-            				}
-            			}
-HXLINE(  53)			return ((HX_("x'",af,68,00,00) + hexChars->join(HX_("",00,00,00,00))) + HX_("'",27,00,00,00));
-            		}
-HXLINE(  55)		return ((HX_("'",27,00,00,00) + s.split(HX_("'",27,00,00,00))->join(HX_("''",20,22,00,00))) + HX_("'",27,00,00,00));
-            	}
-
-
-HX_DEFINE_DYNAMIC_FUNC1(SqliteConnection_obj,quote,return )
-
 
 ::hx::ObjectPtr< SqliteConnection_obj > SqliteConnection_obj::__new(::String file) {
 	::hx::ObjectPtr< SqliteConnection_obj > __this = new SqliteConnection_obj();
@@ -161,9 +136,6 @@ void SqliteConnection_obj::__Visit(HX_VISIT_PARAMS)
 	case 1:
 		if (HX_FIELD_EQ(inName,"c") ) { return ::hx::Val( c ); }
 		break;
-	case 5:
-		if (HX_FIELD_EQ(inName,"quote") ) { return ::hx::Val( quote_dyn() ); }
-		break;
 	case 7:
 		if (HX_FIELD_EQ(inName,"request") ) { return ::hx::Val( request_dyn() ); }
 	}
@@ -196,7 +168,6 @@ static ::hx::StaticInfo *SqliteConnection_obj_sStaticStorageInfo = 0;
 static ::String SqliteConnection_obj_sMemberFields[] = {
 	HX_("c",63,00,00,00),
 	HX_("request",4f,df,84,44),
-	HX_("quote",3c,23,f2,5d),
 	::String(null()) };
 
 ::hx::Class SqliteConnection_obj::__mClass;
diff --git a/Sources/libdatachannel/libdatachannel b/Sources/libdatachannel/libdatachannel
index 3e9bf68..99dadbd 160000
--- a/Sources/libdatachannel/libdatachannel
+++ b/Sources/libdatachannel/libdatachannel
@@ -1 +1 @@
-Subproject commit 3e9bf686920cbff994b7103e7864f59ef93f4dff
+Subproject commit 99dadbde19552cc995a87bffe1ff71d5a6c459fa