/* plugin.c generated by valac 0.16.1, the Vala compiler
 * generated from plugin.vala, do not modify */

/*
 * Copyright (C) 2009-2012 Michael 'Mickey' Lauer <mlauer@vanille-media.de>
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.

 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.

 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
 *
 */

#include <glib.h>
#include <glib-object.h>
#include <stdlib.h>
#include <string.h>
#include <fsobasics.h>
#include <freesmartphone.h>
#include <fsoframework.h>
#include <gio/gio.h>
#include <fsodata.h>
#include <gee.h>


#define WORLD_TYPE_INFO (world_info_get_type ())
#define WORLD_INFO(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WORLD_TYPE_INFO, WorldInfo))
#define WORLD_INFO_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WORLD_TYPE_INFO, WorldInfoClass))
#define WORLD_IS_INFO(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WORLD_TYPE_INFO))
#define WORLD_IS_INFO_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WORLD_TYPE_INFO))
#define WORLD_INFO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WORLD_TYPE_INFO, WorldInfoClass))

typedef struct _WorldInfo WorldInfo;
typedef struct _WorldInfoClass WorldInfoClass;
typedef struct _WorldInfoPrivate WorldInfoPrivate;
#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
#define _g_free0(var) (var = (g_free (var), NULL))
#define _fso_data_mbpi_country_unref0(var) ((var == NULL) ? NULL : (var = (fso_data_mbpi_country_unref (var), NULL)))
typedef struct _WorldInfoGetAllCountriesData WorldInfoGetAllCountriesData;
#define _fso_data_mbpi_provider_unref0(var) ((var == NULL) ? NULL : (var = (fso_data_mbpi_provider_unref (var), NULL)))
typedef struct _WorldInfoGetCountryCodeForMccMncData WorldInfoGetCountryCodeForMccMncData;
#define _g_hash_table_unref0(var) ((var == NULL) ? NULL : (var = (g_hash_table_unref (var), NULL)))
typedef struct _WorldInfoGetTimezonesForCountryCodeData WorldInfoGetTimezonesForCountryCodeData;
#define _fso_data_mbpi_access_point_unref0(var) ((var == NULL) ? NULL : (var = (fso_data_mbpi_access_point_unref (var), NULL)))
typedef struct _WorldInfoGetApnsForMccMncData WorldInfoGetApnsForMccMncData;
typedef struct _WorldInfoGetProviderNameForMccMncData WorldInfoGetProviderNameForMccMncData;

struct _WorldInfo {
	FsoFrameworkAbstractObject parent_instance;
	WorldInfoPrivate * priv;
};

struct _WorldInfoClass {
	FsoFrameworkAbstractObjectClass parent_class;
};

struct _WorldInfoPrivate {
	FsoFrameworkSubsystem* subsystem;
};

struct _WorldInfoGetAllCountriesData {
	int _state_;
	GObject* _source_object_;
	GAsyncResult* _res_;
	GSimpleAsyncResult* _async_result;
	WorldInfo* self;
	FreeSmartphoneDataWorldCountry* result;
	gint result_length1;
	FreeSmartphoneDataWorldCountry* _tmp0_;
	FreeSmartphoneDataWorldCountry* countries;
	gint countries_length1;
	gint _countries_size_;
	FsoDataMBPIDatabase* _tmp1_;
	FsoDataMBPIDatabase* _tmp2_;
	GeeMap* _tmp3_;
	GeeMap* _tmp4_;
	GeeCollection* _tmp5_;
	GeeCollection* _tmp6_;
	GeeCollection* _tmp7_;
	GeeIterator* _tmp8_;
	GeeIterator* _tmp9_;
	GeeIterator* _country_it;
	GeeIterator* _tmp10_;
	gboolean _tmp11_;
	GeeIterator* _tmp12_;
	gpointer _tmp13_;
	FsoDataMBPICountry* country;
	FsoDataMBPICountry* _tmp14_;
	const gchar* _tmp15_;
	FsoDataMBPICountry* _tmp16_;
	FsoDataMBPICountry* _tmp17_;
	const gchar* _tmp18_;
	const gchar* _tmp19_;
	gchar* _tmp20_;
	FreeSmartphoneDataWorldCountry* _tmp21_;
	gint _tmp21__length1;
	FsoDataMBPICountry* _tmp22_;
	const gchar* _tmp23_;
	FsoDataMBPICountry* _tmp24_;
	const gchar* _tmp25_;
	FreeSmartphoneDataWorldCountry _tmp26_;
	FreeSmartphoneDataWorldCountry* _tmp27_;
	gint _tmp27__length1;
};

struct _WorldInfoGetCountryCodeForMccMncData {
	int _state_;
	GObject* _source_object_;
	GAsyncResult* _res_;
	GSimpleAsyncResult* _async_result;
	WorldInfo* self;
	gchar* mcc_mnc;
	gchar* result;
	const gchar* _tmp0_;
	gchar _tmp1_;
	const gchar* _tmp2_;
	gchar _tmp3_;
	const gchar* _tmp4_;
	gchar _tmp5_;
	gchar* _tmp6_;
	gchar* mcc;
	gchar* _tmp7_;
	gchar* prefixccode;
	FsoDataMBPIDatabase* _tmp8_;
	FsoDataMBPIDatabase* _tmp9_;
	GeeMap* _tmp10_;
	GeeMap* _tmp11_;
	GeeCollection* _tmp12_;
	GeeCollection* _tmp13_;
	GeeCollection* _tmp14_;
	GeeIterator* _tmp15_;
	GeeIterator* _tmp16_;
	GeeIterator* _country_it;
	GeeIterator* _tmp17_;
	gboolean _tmp18_;
	GeeIterator* _tmp19_;
	gpointer _tmp20_;
	FsoDataMBPICountry* country;
	FsoDataMBPICountry* _tmp21_;
	GeeHashMap* _tmp22_;
	GeeCollection* _tmp23_;
	GeeCollection* _tmp24_;
	GeeCollection* _tmp25_;
	GeeIterator* _tmp26_;
	GeeIterator* _tmp27_;
	GeeIterator* _provider_it;
	GeeIterator* _tmp28_;
	gboolean _tmp29_;
	GeeIterator* _tmp30_;
	gpointer _tmp31_;
	FsoDataMBPIProvider* provider;
	FsoDataMBPIProvider* _tmp32_;
	GeeArrayList* _tmp33_;
	GeeArrayList* _tmp34_;
	GeeArrayList* _code1_list;
	GeeArrayList* _tmp35_;
	gint _tmp36_;
	gint _tmp37_;
	gint _code1_size;
	gint _code1_index;
	gint _tmp38_;
	gint _tmp39_;
	gint _tmp40_;
	GeeArrayList* _tmp41_;
	gint _tmp42_;
	gpointer _tmp43_;
	gchar* code1;
	const gchar* _tmp44_;
	const gchar* _tmp45_;
	FsoDataMBPICountry* _tmp46_;
	const gchar* _tmp47_;
	gchar* _tmp48_;
	gboolean _tmp49_;
	const gchar* _tmp50_;
	const gchar* _tmp51_;
	const gchar* _tmp52_;
	gboolean _tmp53_;
	gboolean _tmp54_;
	FsoDataMBPICountry* _tmp55_;
	const gchar* _tmp56_;
	gchar* _tmp57_;
};

struct _WorldInfoGetTimezonesForCountryCodeData {
	int _state_;
	GObject* _source_object_;
	GAsyncResult* _res_;
	GSimpleAsyncResult* _async_result;
	WorldInfo* self;
	gchar* country_code;
	GHashTable* result;
	FsoDataMBPIDatabase* _tmp0_;
	FsoDataMBPIDatabase* _tmp1_;
	GeeMap* _tmp2_;
	GeeMap* _tmp3_;
	const gchar* _tmp4_;
	gpointer _tmp5_;
	FsoDataMBPICountry* _tmp6_;
	FsoDataMBPICountry* country;
	FsoDataMBPICountry* _tmp7_;
	const gchar* _tmp8_;
	const gchar* _tmp9_;
	gchar* _tmp10_;
	gchar* _tmp11_;
	GError* _tmp12_;
	GError* _tmp13_;
	GHashFunc _tmp14_;
	GEqualFunc _tmp15_;
	GHashTable* _tmp16_;
	GHashTable* timezones;
	FsoDataMBPICountry* _tmp17_;
	GeeHashMap* _tmp18_;
	GeeSet* _tmp19_;
	GeeSet* _tmp20_;
	GeeSet* _tmp21_;
	GeeIterator* _tmp22_;
	GeeIterator* _tmp23_;
	GeeIterator* _key_it;
	GeeIterator* _tmp24_;
	gboolean _tmp25_;
	GeeIterator* _tmp26_;
	gpointer _tmp27_;
	gchar* key;
	GHashTable* _tmp28_;
	const gchar* _tmp29_;
	gchar* _tmp30_;
	FsoDataMBPICountry* _tmp31_;
	GeeHashMap* _tmp32_;
	const gchar* _tmp33_;
	gpointer _tmp34_;
	GError * _inner_error_;
};

struct _WorldInfoGetApnsForMccMncData {
	int _state_;
	GObject* _source_object_;
	GAsyncResult* _res_;
	GSimpleAsyncResult* _async_result;
	WorldInfo* self;
	gchar* mcc_mnc;
	FreeSmartphoneDataWorldConnectivityAccessPoint* result;
	gint result_length1;
	FreeSmartphoneDataWorldConnectivityAccessPoint* _tmp0_;
	FreeSmartphoneDataWorldConnectivityAccessPoint* _result_;
	gint _result__length1;
	gint __result__size_;
	const gchar* _tmp1_;
	gchar _tmp2_;
	const gchar* _tmp3_;
	gchar _tmp4_;
	const gchar* _tmp5_;
	gchar _tmp6_;
	gchar* _tmp7_;
	gchar* mcc;
	FsoDataMBPIDatabase* _tmp8_;
	FsoDataMBPIDatabase* _tmp9_;
	GeeMap* _tmp10_;
	GeeMap* _tmp11_;
	GeeCollection* _tmp12_;
	GeeCollection* _tmp13_;
	GeeCollection* _tmp14_;
	GeeIterator* _tmp15_;
	GeeIterator* _tmp16_;
	GeeIterator* _country_it;
	GeeIterator* _tmp17_;
	gboolean _tmp18_;
	GeeIterator* _tmp19_;
	gpointer _tmp20_;
	FsoDataMBPICountry* country;
	FsoDataMBPICountry* _tmp21_;
	GeeHashMap* _tmp22_;
	GeeCollection* _tmp23_;
	GeeCollection* _tmp24_;
	GeeCollection* _tmp25_;
	GeeIterator* _tmp26_;
	GeeIterator* _tmp27_;
	GeeIterator* _provider_it;
	GeeIterator* _tmp28_;
	gboolean _tmp29_;
	GeeIterator* _tmp30_;
	gpointer _tmp31_;
	FsoDataMBPIProvider* provider;
	FsoDataMBPIProvider* _tmp32_;
	GeeArrayList* _tmp33_;
	GeeArrayList* _tmp34_;
	GeeArrayList* _code_list;
	GeeArrayList* _tmp35_;
	gint _tmp36_;
	gint _tmp37_;
	gint _code_size;
	gint _code_index;
	gint _tmp38_;
	gint _tmp39_;
	gint _tmp40_;
	GeeArrayList* _tmp41_;
	gint _tmp42_;
	gpointer _tmp43_;
	gchar* code;
	const gchar* _tmp44_;
	const gchar* _tmp45_;
	FsoDataMBPIProvider* _tmp46_;
	GeeHashMap* _tmp47_;
	GeeCollection* _tmp48_;
	GeeCollection* _tmp49_;
	GeeCollection* _tmp50_;
	GeeIterator* _tmp51_;
	GeeIterator* _tmp52_;
	GeeIterator* _apn_it;
	GeeIterator* _tmp53_;
	gboolean _tmp54_;
	GeeIterator* _tmp55_;
	gpointer _tmp56_;
	FsoDataMBPIAccessPoint* apn;
	FsoDataMBPIProvider* _tmp57_;
	const gchar* _tmp58_;
	gchar* _tmp59_;
	gchar* name;
	FsoDataMBPIAccessPoint* _tmp60_;
	const gchar* _tmp61_;
	const gchar* _tmp62_;
	FsoDataMBPIAccessPoint* _tmp63_;
	const gchar* _tmp64_;
	gchar* _tmp65_;
	gchar* _tmp66_;
	gchar* _tmp67_;
	FsoDataMBPIAccessPoint* _tmp68_;
	const gchar* _tmp69_;
	gchar* _tmp70_;
	gchar* _tmp71_;
	const gchar* _tmp72_;
	gchar* _tmp73_;
	FsoDataMBPIAccessPoint* _tmp74_;
	const gchar* _tmp75_;
	gchar* _tmp76_;
	gchar* _tmp77_;
	const gchar* _tmp78_;
	gchar* _tmp79_;
	FsoDataMBPIAccessPoint* _tmp80_;
	const gchar* _tmp81_;
	gchar* _tmp82_;
	gchar* _tmp83_;
	const gchar* _tmp84_;
	gchar* _tmp85_;
	FreeSmartphoneDataWorldConnectivityAccessPoint* _tmp86_;
	gint _tmp86__length1;
	const gchar* _tmp87_;
	const gchar* _tmp88_;
	const gchar* _tmp89_;
	const gchar* _tmp90_;
	FreeSmartphoneDataWorldConnectivityAccessPoint _tmp91_;
	FreeSmartphoneDataWorldConnectivityAccessPoint* _tmp92_;
	gint _tmp92__length1;
};

struct _WorldInfoGetProviderNameForMccMncData {
	int _state_;
	GObject* _source_object_;
	GAsyncResult* _res_;
	GSimpleAsyncResult* _async_result;
	WorldInfo* self;
	gchar* mcc_mnc;
	gchar* result;
	gchar* _tmp0_;
	gchar* _result_;
	FsoDataMBPIDatabase* _tmp1_;
	FsoDataMBPIDatabase* mbpi;
	FsoDataMBPIDatabase* _tmp2_;
	FsoDataMBPIDatabase* _tmp3_;
	GeeMap* _tmp4_;
	GeeMap* _tmp5_;
	GeeCollection* _tmp6_;
	GeeCollection* _tmp7_;
	GeeCollection* _tmp8_;
	GeeIterator* _tmp9_;
	GeeIterator* _tmp10_;
	GeeIterator* _country_it;
	GeeIterator* _tmp11_;
	gboolean _tmp12_;
	GeeIterator* _tmp13_;
	gpointer _tmp14_;
	FsoDataMBPICountry* country;
	FsoDataMBPICountry* _tmp15_;
	GeeHashMap* _tmp16_;
	GeeCollection* _tmp17_;
	GeeCollection* _tmp18_;
	GeeCollection* _tmp19_;
	GeeIterator* _tmp20_;
	GeeIterator* _tmp21_;
	GeeIterator* _provider_it;
	GeeIterator* _tmp22_;
	gboolean _tmp23_;
	GeeIterator* _tmp24_;
	gpointer _tmp25_;
	FsoDataMBPIProvider* provider;
	FsoDataMBPIProvider* _tmp26_;
	GeeArrayList* _tmp27_;
	GeeArrayList* _tmp28_;
	GeeArrayList* _code_list;
	GeeArrayList* _tmp29_;
	gint _tmp30_;
	gint _tmp31_;
	gint _code_size;
	gint _code_index;
	gint _tmp32_;
	gint _tmp33_;
	gint _tmp34_;
	GeeArrayList* _tmp35_;
	gint _tmp36_;
	gpointer _tmp37_;
	gchar* code;
	const gchar* _tmp38_;
	const gchar* _tmp39_;
	FsoDataMBPIProvider* _tmp40_;
	const gchar* _tmp41_;
	gchar* _tmp42_;
	const gchar* _tmp43_;
	const gchar* _tmp44_;
	const gchar* _tmp45_;
	gchar* _tmp46_;
	gchar* _tmp47_;
	GError* _tmp48_;
	GError* _tmp49_;
	GError * _inner_error_;
};


static gpointer world_info_parent_class = NULL;
static FreeSmartphoneDataWorldIface* world_info_free_smartphone_data_world_parent_iface = NULL;
static GType world_info_type_id = 0;
extern WorldInfo* instance;
WorldInfo* instance = NULL;

#define WORLD_MODULE_NAME "fsodata.world"
GType world_info_get_type (void) G_GNUC_CONST;
GType world_info_register_type (GTypeModule * module);
#define WORLD_INFO_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), WORLD_TYPE_INFO, WorldInfoPrivate))
enum  {
	WORLD_INFO_DUMMY_PROPERTY
};
WorldInfo* world_info_new (FsoFrameworkSubsystem* subsystem);
WorldInfo* world_info_construct (GType object_type, FsoFrameworkSubsystem* subsystem);
static gchar* world_info_real_repr (FsoFrameworkAbstractObject* base);
static void _vala_FreeSmartphoneDataWorldCountry_array_free (FreeSmartphoneDataWorldCountry* array, gint array_length);
static void world_info_real_get_all_countries_data_free (gpointer _data);
static void world_info_real_get_all_countries (FreeSmartphoneDataWorld* base, GAsyncReadyCallback _callback_, gpointer _user_data_);
static gboolean world_info_real_get_all_countries_co (WorldInfoGetAllCountriesData* _data_);
static void _vala_array_add1 (FreeSmartphoneDataWorldCountry** array, int* length, int* size, const FreeSmartphoneDataWorldCountry* value);
static void world_info_real_get_country_code_for_mcc_mnc_data_free (gpointer _data);
static void world_info_real_get_country_code_for_mcc_mnc (FreeSmartphoneDataWorld* base, const gchar* mcc_mnc, GAsyncReadyCallback _callback_, gpointer _user_data_);
static gboolean world_info_real_get_country_code_for_mcc_mnc_co (WorldInfoGetCountryCodeForMccMncData* _data_);
static void world_info_real_get_timezones_for_country_code_data_free (gpointer _data);
static void world_info_real_get_timezones_for_country_code (FreeSmartphoneDataWorld* base, const gchar* country_code, GAsyncReadyCallback _callback_, gpointer _user_data_);
static gboolean world_info_real_get_timezones_for_country_code_co (WorldInfoGetTimezonesForCountryCodeData* _data_);
static void _g_free0_ (gpointer var);
static void _vala_FreeSmartphoneDataWorldConnectivityAccessPoint_array_free (FreeSmartphoneDataWorldConnectivityAccessPoint* array, gint array_length);
static void world_info_real_get_apns_for_mcc_mnc_data_free (gpointer _data);
static void world_info_real_get_apns_for_mcc_mnc (FreeSmartphoneDataWorld* base, const gchar* mcc_mnc, GAsyncReadyCallback _callback_, gpointer _user_data_);
static gboolean world_info_real_get_apns_for_mcc_mnc_co (WorldInfoGetApnsForMccMncData* _data_);
static void _vala_array_add2 (FreeSmartphoneDataWorldConnectivityAccessPoint** array, int* length, int* size, const FreeSmartphoneDataWorldConnectivityAccessPoint* value);
static void world_info_real_get_provider_name_for_mcc_mnc_data_free (gpointer _data);
static void world_info_real_get_provider_name_for_mcc_mnc (FreeSmartphoneDataWorld* base, const gchar* mcc_mnc, GAsyncReadyCallback _callback_, gpointer _user_data_);
static gboolean world_info_real_get_provider_name_for_mcc_mnc_co (WorldInfoGetProviderNameForMccMncData* _data_);
static void world_info_finalize (GObject* obj);
gchar* fso_factory_function (FsoFrameworkSubsystem* subsystem, GError** error);
void fso_register_function (GTypeModule* module);


static gpointer _g_object_ref0 (gpointer self) {
	return self ? g_object_ref (self) : NULL;
}


WorldInfo* world_info_construct (GType object_type, FsoFrameworkSubsystem* subsystem) {
	WorldInfo * self = NULL;
	FsoFrameworkSubsystem* _tmp0_;
	FsoFrameworkSubsystem* _tmp1_;
	FsoFrameworkSubsystem* _tmp2_;
	FsoFrameworkLogger* _tmp3_;
	g_return_val_if_fail (subsystem != NULL, NULL);
	self = (WorldInfo*) fso_framework_abstract_object_construct (object_type);
	_tmp0_ = subsystem;
	_tmp1_ = _g_object_ref0 (_tmp0_);
	_g_object_unref0 (self->priv->subsystem);
	self->priv->subsystem = _tmp1_;
	_tmp2_ = subsystem;
	fso_framework_subsystem_registerObjectForService (_tmp2_, FREE_SMARTPHONE_DATA_TYPE_WORLD, (GBoxedCopyFunc) g_object_ref, g_object_unref, FSO_FRAMEWORK_DATA_ServiceDBusName, FSO_FRAMEWORK_DATA_WorldServicePath, (FreeSmartphoneDataWorld*) self);
	_tmp3_ = ((FsoFrameworkAbstractObject*) self)->logger;
	fso_framework_logger_info (_tmp3_, "Created");
	return self;
}


WorldInfo* world_info_new (FsoFrameworkSubsystem* subsystem) {
	return world_info_construct (WORLD_TYPE_INFO, subsystem);
}


static gchar* world_info_real_repr (FsoFrameworkAbstractObject* base) {
	WorldInfo * self;
	gchar* result = NULL;
	gchar* _tmp0_;
	self = (WorldInfo*) base;
	_tmp0_ = g_strdup ("<>");
	result = _tmp0_;
	return result;
}


static void _vala_FreeSmartphoneDataWorldCountry_array_free (FreeSmartphoneDataWorldCountry* array, gint array_length) {
	if (array != NULL) {
		int i;
		for (i = 0; i < array_length; i = i + 1) {
			free_smartphone_data_world_country_destroy (&array[i]);
		}
	}
	g_free (array);
}


static void world_info_real_get_all_countries_data_free (gpointer _data) {
	WorldInfoGetAllCountriesData* _data_;
	_data_ = _data;
	_data_->result = (_vala_FreeSmartphoneDataWorldCountry_array_free (_data_->result, _data_->result_length1), NULL);
	_g_object_unref0 (_data_->self);
	g_slice_free (WorldInfoGetAllCountriesData, _data_);
}


static void world_info_real_get_all_countries (FreeSmartphoneDataWorld* base, GAsyncReadyCallback _callback_, gpointer _user_data_) {
	WorldInfo * self;
	WorldInfoGetAllCountriesData* _data_;
	WorldInfo* _tmp0_;
	self = (WorldInfo*) base;
	_data_ = g_slice_new0 (WorldInfoGetAllCountriesData);
	_data_->_async_result = g_simple_async_result_new (G_OBJECT (self), _callback_, _user_data_, world_info_real_get_all_countries);
	g_simple_async_result_set_op_res_gpointer (_data_->_async_result, _data_, world_info_real_get_all_countries_data_free);
	_tmp0_ = _g_object_ref0 (self);
	_data_->self = _tmp0_;
	world_info_real_get_all_countries_co (_data_);
}


static FreeSmartphoneDataWorldCountry* world_info_real_get_all_countries_finish (FreeSmartphoneDataWorld* base, GAsyncResult* _res_, int* result_length1, GError** error) {
	FreeSmartphoneDataWorldCountry* result;
	WorldInfoGetAllCountriesData* _data_;
	if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (_res_), error)) {
		return NULL;
	}
	_data_ = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (_res_));
	result = _data_->result;
	*result_length1 = _data_->result_length1;
	_data_->result = NULL;
	return result;
}


static const gchar* string_to_string (const gchar* self) {
	const gchar* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	result = self;
	return result;
}


static void _vala_array_add1 (FreeSmartphoneDataWorldCountry** array, int* length, int* size, const FreeSmartphoneDataWorldCountry* value) {
	if ((*length) == (*size)) {
		*size = (*size) ? (2 * (*size)) : 4;
		*array = g_renew (FreeSmartphoneDataWorldCountry, *array, *size);
	}
	(*array)[(*length)++] = *value;
}


static gboolean world_info_real_get_all_countries_co (WorldInfoGetAllCountriesData* _data_) {
	switch (_data_->_state_) {
		case 0:
		goto _state_0;
		default:
		g_assert_not_reached ();
	}
	_state_0:
	_data_->_tmp0_ = NULL;
	_data_->_tmp0_ = g_new0 (FreeSmartphoneDataWorldCountry, 0);
	_data_->countries = _data_->_tmp0_;
	_data_->countries_length1 = 0;
	_data_->_countries_size_ = _data_->countries_length1;
	{
		_data_->_tmp1_ = NULL;
		_data_->_tmp1_ = fso_data_mbpi_database_instance ();
		_data_->_tmp2_ = _data_->_tmp1_;
		_data_->_tmp3_ = NULL;
		_data_->_tmp3_ = fso_data_mbpi_database_allCountries (_data_->_tmp2_);
		_data_->_tmp4_ = _data_->_tmp3_;
		_data_->_tmp5_ = gee_map_get_values (_data_->_tmp4_);
		_data_->_tmp6_ = _data_->_tmp5_;
		_data_->_tmp7_ = _data_->_tmp6_;
		_data_->_tmp8_ = NULL;
		_data_->_tmp8_ = gee_iterable_iterator ((GeeIterable*) _data_->_tmp7_);
		_data_->_tmp9_ = _data_->_tmp8_;
		_g_object_unref0 (_data_->_tmp7_);
		_g_object_unref0 (_data_->_tmp4_);
		_g_object_unref0 (_data_->_tmp2_);
		_data_->_country_it = _data_->_tmp9_;
		while (TRUE) {
			_data_->_tmp10_ = _data_->_country_it;
			_data_->_tmp11_ = FALSE;
			_data_->_tmp11_ = gee_iterator_next (_data_->_tmp10_);
			if (!_data_->_tmp11_) {
				break;
			}
			_data_->_tmp12_ = _data_->_country_it;
			_data_->_tmp13_ = NULL;
			_data_->_tmp13_ = gee_iterator_get (_data_->_tmp12_);
			_data_->country = (FsoDataMBPICountry*) _data_->_tmp13_;
			_data_->_tmp14_ = _data_->country;
			_data_->_tmp15_ = _data_->_tmp14_->name;
			if (_data_->_tmp15_ == NULL) {
				_data_->_tmp16_ = _data_->country;
				_data_->_tmp17_ = _data_->country;
				_data_->_tmp18_ = _data_->_tmp17_->code;
				_data_->_tmp19_ = NULL;
				_data_->_tmp19_ = string_to_string (_data_->_tmp18_);
				_data_->_tmp20_ = NULL;
				_data_->_tmp20_ = g_strconcat ("Unknown:", _data_->_tmp19_, NULL);
				_g_free0 (_data_->_tmp16_->name);
				_data_->_tmp16_->name = _data_->_tmp20_;
			}
			_data_->_tmp21_ = _data_->countries;
			_data_->_tmp21__length1 = _data_->countries_length1;
			_data_->_tmp22_ = _data_->country;
			_data_->_tmp23_ = _data_->_tmp22_->code;
			_data_->_tmp24_ = _data_->country;
			_data_->_tmp25_ = _data_->_tmp24_->name;
			memset (&_data_->_tmp26_, 0, sizeof (FreeSmartphoneDataWorldCountry));
			free_smartphone_data_world_country_init (&_data_->_tmp26_, _data_->_tmp23_, _data_->_tmp25_);
			_vala_array_add1 (&_data_->countries, &_data_->countries_length1, &_data_->_countries_size_, &_data_->_tmp26_);
			_fso_data_mbpi_country_unref0 (_data_->country);
		}
		_g_object_unref0 (_data_->_country_it);
	}
	_data_->_tmp27_ = _data_->countries;
	_data_->_tmp27__length1 = _data_->countries_length1;
	_data_->result_length1 = _data_->_tmp27__length1;
	_data_->result = _data_->_tmp27_;
	if (_data_->_state_ == 0) {
		g_simple_async_result_complete_in_idle (_data_->_async_result);
	} else {
		g_simple_async_result_complete (_data_->_async_result);
	}
	g_object_unref (_data_->_async_result);
	return FALSE;
	_data_->countries = (_vala_FreeSmartphoneDataWorldCountry_array_free (_data_->countries, _data_->countries_length1), NULL);
	if (_data_->_state_ == 0) {
		g_simple_async_result_complete_in_idle (_data_->_async_result);
	} else {
		g_simple_async_result_complete (_data_->_async_result);
	}
	g_object_unref (_data_->_async_result);
	return FALSE;
}


static void world_info_real_get_country_code_for_mcc_mnc_data_free (gpointer _data) {
	WorldInfoGetCountryCodeForMccMncData* _data_;
	_data_ = _data;
	_g_free0 (_data_->mcc_mnc);
	_g_free0 (_data_->result);
	_g_object_unref0 (_data_->self);
	g_slice_free (WorldInfoGetCountryCodeForMccMncData, _data_);
}


static void world_info_real_get_country_code_for_mcc_mnc (FreeSmartphoneDataWorld* base, const gchar* mcc_mnc, GAsyncReadyCallback _callback_, gpointer _user_data_) {
	WorldInfo * self;
	WorldInfoGetCountryCodeForMccMncData* _data_;
	WorldInfo* _tmp0_;
	const gchar* _tmp1_;
	gchar* _tmp2_;
	self = (WorldInfo*) base;
	_data_ = g_slice_new0 (WorldInfoGetCountryCodeForMccMncData);
	_data_->_async_result = g_simple_async_result_new (G_OBJECT (self), _callback_, _user_data_, world_info_real_get_country_code_for_mcc_mnc);
	g_simple_async_result_set_op_res_gpointer (_data_->_async_result, _data_, world_info_real_get_country_code_for_mcc_mnc_data_free);
	_tmp0_ = _g_object_ref0 (self);
	_data_->self = _tmp0_;
	_tmp1_ = mcc_mnc;
	_tmp2_ = g_strdup (_tmp1_);
	_data_->mcc_mnc = _tmp2_;
	world_info_real_get_country_code_for_mcc_mnc_co (_data_);
}


static gchar* world_info_real_get_country_code_for_mcc_mnc_finish (FreeSmartphoneDataWorld* base, GAsyncResult* _res_, GError** error) {
	gchar* result;
	WorldInfoGetCountryCodeForMccMncData* _data_;
	if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (_res_), error)) {
		return NULL;
	}
	_data_ = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (_res_));
	result = _data_->result;
	_data_->result = NULL;
	return result;
}


static gchar string_get (const gchar* self, glong index) {
	gchar result = '\0';
	glong _tmp0_;
	gchar _tmp1_;
	g_return_val_if_fail (self != NULL, '\0');
	_tmp0_ = index;
	_tmp1_ = ((gchar*) self)[_tmp0_];
	result = _tmp1_;
	return result;
}


static gboolean world_info_real_get_country_code_for_mcc_mnc_co (WorldInfoGetCountryCodeForMccMncData* _data_) {
	switch (_data_->_state_) {
		case 0:
		goto _state_0;
		default:
		g_assert_not_reached ();
	}
	_state_0:
	_data_->_tmp0_ = _data_->mcc_mnc;
	_data_->_tmp1_ = '\0';
	_data_->_tmp1_ = string_get (_data_->_tmp0_, (glong) 0);
	_data_->_tmp2_ = _data_->mcc_mnc;
	_data_->_tmp3_ = '\0';
	_data_->_tmp3_ = string_get (_data_->_tmp2_, (glong) 1);
	_data_->_tmp4_ = _data_->mcc_mnc;
	_data_->_tmp5_ = '\0';
	_data_->_tmp5_ = string_get (_data_->_tmp4_, (glong) 2);
	_data_->_tmp6_ = NULL;
	_data_->_tmp6_ = g_strdup_printf ("%c%c%c", (gint) _data_->_tmp1_, (gint) _data_->_tmp3_, (gint) _data_->_tmp5_);
	_data_->mcc = _data_->_tmp6_;
	_data_->_tmp7_ = g_strdup ("");
	_data_->prefixccode = _data_->_tmp7_;
	{
		_data_->_tmp8_ = NULL;
		_data_->_tmp8_ = fso_data_mbpi_database_instance ();
		_data_->_tmp9_ = _data_->_tmp8_;
		_data_->_tmp10_ = NULL;
		_data_->_tmp10_ = fso_data_mbpi_database_allCountries (_data_->_tmp9_);
		_data_->_tmp11_ = _data_->_tmp10_;
		_data_->_tmp12_ = gee_map_get_values (_data_->_tmp11_);
		_data_->_tmp13_ = _data_->_tmp12_;
		_data_->_tmp14_ = _data_->_tmp13_;
		_data_->_tmp15_ = NULL;
		_data_->_tmp15_ = gee_iterable_iterator ((GeeIterable*) _data_->_tmp14_);
		_data_->_tmp16_ = _data_->_tmp15_;
		_g_object_unref0 (_data_->_tmp14_);
		_g_object_unref0 (_data_->_tmp11_);
		_g_object_unref0 (_data_->_tmp9_);
		_data_->_country_it = _data_->_tmp16_;
		while (TRUE) {
			_data_->_tmp17_ = _data_->_country_it;
			_data_->_tmp18_ = FALSE;
			_data_->_tmp18_ = gee_iterator_next (_data_->_tmp17_);
			if (!_data_->_tmp18_) {
				break;
			}
			_data_->_tmp19_ = _data_->_country_it;
			_data_->_tmp20_ = NULL;
			_data_->_tmp20_ = gee_iterator_get (_data_->_tmp19_);
			_data_->country = (FsoDataMBPICountry*) _data_->_tmp20_;
			{
				_data_->_tmp21_ = _data_->country;
				_data_->_tmp22_ = _data_->_tmp21_->providers;
				_data_->_tmp23_ = gee_abstract_map_get_values ((GeeMap*) _data_->_tmp22_);
				_data_->_tmp24_ = _data_->_tmp23_;
				_data_->_tmp25_ = _data_->_tmp24_;
				_data_->_tmp26_ = NULL;
				_data_->_tmp26_ = gee_iterable_iterator ((GeeIterable*) _data_->_tmp25_);
				_data_->_tmp27_ = _data_->_tmp26_;
				_g_object_unref0 (_data_->_tmp25_);
				_data_->_provider_it = _data_->_tmp27_;
				while (TRUE) {
					_data_->_tmp28_ = _data_->_provider_it;
					_data_->_tmp29_ = FALSE;
					_data_->_tmp29_ = gee_iterator_next (_data_->_tmp28_);
					if (!_data_->_tmp29_) {
						break;
					}
					_data_->_tmp30_ = _data_->_provider_it;
					_data_->_tmp31_ = NULL;
					_data_->_tmp31_ = gee_iterator_get (_data_->_tmp30_);
					_data_->provider = (FsoDataMBPIProvider*) _data_->_tmp31_;
					{
						_data_->_tmp32_ = _data_->provider;
						_data_->_tmp33_ = _data_->_tmp32_->codes;
						_data_->_tmp34_ = _g_object_ref0 (_data_->_tmp33_);
						_data_->_code1_list = _data_->_tmp34_;
						_data_->_tmp35_ = _data_->_code1_list;
						_data_->_tmp36_ = gee_abstract_collection_get_size ((GeeCollection*) _data_->_tmp35_);
						_data_->_tmp37_ = _data_->_tmp36_;
						_data_->_code1_size = _data_->_tmp37_;
						_data_->_code1_index = -1;
						while (TRUE) {
							_data_->_tmp38_ = _data_->_code1_index;
							_data_->_code1_index = _data_->_tmp38_ + 1;
							_data_->_tmp39_ = _data_->_code1_index;
							_data_->_tmp40_ = _data_->_code1_size;
							if (!(_data_->_tmp39_ < _data_->_tmp40_)) {
								break;
							}
							_data_->_tmp41_ = _data_->_code1_list;
							_data_->_tmp42_ = _data_->_code1_index;
							_data_->_tmp43_ = NULL;
							_data_->_tmp43_ = gee_abstract_list_get ((GeeAbstractList*) _data_->_tmp41_, _data_->_tmp42_);
							_data_->code1 = (gchar*) _data_->_tmp43_;
							_data_->_tmp44_ = _data_->code1;
							_data_->_tmp45_ = _data_->mcc_mnc;
							if (g_strcmp0 (_data_->_tmp44_, _data_->_tmp45_) == 0) {
								_data_->_tmp46_ = _data_->country;
								_data_->_tmp47_ = _data_->_tmp46_->code;
								_data_->_tmp48_ = g_strdup (_data_->_tmp47_);
								_data_->result = _data_->_tmp48_;
								_g_free0 (_data_->code1);
								_g_object_unref0 (_data_->_code1_list);
								_fso_data_mbpi_provider_unref0 (_data_->provider);
								_g_object_unref0 (_data_->_provider_it);
								_fso_data_mbpi_country_unref0 (_data_->country);
								_g_object_unref0 (_data_->_country_it);
								_g_free0 (_data_->prefixccode);
								_g_free0 (_data_->mcc);
								if (_data_->_state_ == 0) {
									g_simple_async_result_complete_in_idle (_data_->_async_result);
								} else {
									g_simple_async_result_complete (_data_->_async_result);
								}
								g_object_unref (_data_->_async_result);
								return FALSE;
							} else {
								_data_->_tmp50_ = _data_->prefixccode;
								if (g_strcmp0 (_data_->_tmp50_, "") == 0) {
									_data_->_tmp51_ = _data_->code1;
									_data_->_tmp52_ = _data_->mcc;
									_data_->_tmp53_ = FALSE;
									_data_->_tmp53_ = g_str_has_prefix (_data_->_tmp51_, _data_->_tmp52_);
									_data_->_tmp49_ = _data_->_tmp53_;
								} else {
									_data_->_tmp49_ = FALSE;
								}
								_data_->_tmp54_ = _data_->_tmp49_;
								if (_data_->_tmp54_) {
									_data_->_tmp55_ = _data_->country;
									_data_->_tmp56_ = _data_->_tmp55_->code;
									_data_->_tmp57_ = g_strdup (_data_->_tmp56_);
									_g_free0 (_data_->prefixccode);
									_data_->prefixccode = _data_->_tmp57_;
								}
							}
							_g_free0 (_data_->code1);
						}
						_g_object_unref0 (_data_->_code1_list);
					}
					_fso_data_mbpi_provider_unref0 (_data_->provider);
				}
				_g_object_unref0 (_data_->_provider_it);
			}
			_fso_data_mbpi_country_unref0 (_data_->country);
		}
		_g_object_unref0 (_data_->_country_it);
	}
	_data_->result = _data_->prefixccode;
	_g_free0 (_data_->mcc);
	if (_data_->_state_ == 0) {
		g_simple_async_result_complete_in_idle (_data_->_async_result);
	} else {
		g_simple_async_result_complete (_data_->_async_result);
	}
	g_object_unref (_data_->_async_result);
	return FALSE;
	_g_free0 (_data_->prefixccode);
	_g_free0 (_data_->mcc);
	if (_data_->_state_ == 0) {
		g_simple_async_result_complete_in_idle (_data_->_async_result);
	} else {
		g_simple_async_result_complete (_data_->_async_result);
	}
	g_object_unref (_data_->_async_result);
	return FALSE;
}


static void world_info_real_get_timezones_for_country_code_data_free (gpointer _data) {
	WorldInfoGetTimezonesForCountryCodeData* _data_;
	_data_ = _data;
	_g_free0 (_data_->country_code);
	_g_hash_table_unref0 (_data_->result);
	_g_object_unref0 (_data_->self);
	g_slice_free (WorldInfoGetTimezonesForCountryCodeData, _data_);
}


static void world_info_real_get_timezones_for_country_code (FreeSmartphoneDataWorld* base, const gchar* country_code, GAsyncReadyCallback _callback_, gpointer _user_data_) {
	WorldInfo * self;
	WorldInfoGetTimezonesForCountryCodeData* _data_;
	WorldInfo* _tmp0_;
	const gchar* _tmp1_;
	gchar* _tmp2_;
	self = (WorldInfo*) base;
	_data_ = g_slice_new0 (WorldInfoGetTimezonesForCountryCodeData);
	_data_->_async_result = g_simple_async_result_new (G_OBJECT (self), _callback_, _user_data_, world_info_real_get_timezones_for_country_code);
	g_simple_async_result_set_op_res_gpointer (_data_->_async_result, _data_, world_info_real_get_timezones_for_country_code_data_free);
	_tmp0_ = _g_object_ref0 (self);
	_data_->self = _tmp0_;
	_tmp1_ = country_code;
	_tmp2_ = g_strdup (_tmp1_);
	_data_->country_code = _tmp2_;
	world_info_real_get_timezones_for_country_code_co (_data_);
}


static GHashTable* world_info_real_get_timezones_for_country_code_finish (FreeSmartphoneDataWorld* base, GAsyncResult* _res_, GError** error) {
	GHashTable* result;
	WorldInfoGetTimezonesForCountryCodeData* _data_;
	if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (_res_), error)) {
		return NULL;
	}
	_data_ = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (_res_));
	result = _data_->result;
	_data_->result = NULL;
	return result;
}


static void _g_free0_ (gpointer var) {
	var = (g_free (var), NULL);
}


static gboolean world_info_real_get_timezones_for_country_code_co (WorldInfoGetTimezonesForCountryCodeData* _data_) {
	switch (_data_->_state_) {
		case 0:
		goto _state_0;
		default:
		g_assert_not_reached ();
	}
	_state_0:
	_data_->_tmp0_ = NULL;
	_data_->_tmp0_ = fso_data_mbpi_database_instance ();
	_data_->_tmp1_ = _data_->_tmp0_;
	_data_->_tmp2_ = NULL;
	_data_->_tmp2_ = fso_data_mbpi_database_allCountries (_data_->_tmp1_);
	_data_->_tmp3_ = _data_->_tmp2_;
	_data_->_tmp4_ = _data_->country_code;
	_data_->_tmp5_ = NULL;
	_data_->_tmp5_ = gee_map_get (_data_->_tmp3_, _data_->_tmp4_);
	_data_->_tmp6_ = (FsoDataMBPICountry*) _data_->_tmp5_;
	_g_object_unref0 (_data_->_tmp3_);
	_g_object_unref0 (_data_->_tmp1_);
	_data_->country = _data_->_tmp6_;
	_data_->_tmp7_ = _data_->country;
	if (_data_->_tmp7_ == NULL) {
		_data_->_tmp8_ = _data_->country_code;
		_data_->_tmp9_ = NULL;
		_data_->_tmp9_ = string_to_string (_data_->_tmp8_);
		_data_->_tmp10_ = NULL;
		_data_->_tmp10_ = g_strconcat ("Can't find a country for code '", _data_->_tmp9_, "'", NULL);
		_data_->_tmp11_ = _data_->_tmp10_;
		_data_->_tmp12_ = g_error_new_literal (FREE_SMARTPHONE_ERROR, FREE_SMARTPHONE_ERROR_INVALID_PARAMETER, _data_->_tmp11_);
		_data_->_tmp13_ = _data_->_tmp12_;
		_g_free0 (_data_->_tmp11_);
		_data_->_inner_error_ = _data_->_tmp13_;
		if (((_data_->_inner_error_->domain == FREE_SMARTPHONE_ERROR) || (_data_->_inner_error_->domain == G_DBUS_ERROR)) || (_data_->_inner_error_->domain == G_IO_ERROR)) {
			g_simple_async_result_set_from_error (_data_->_async_result, _data_->_inner_error_);
			g_error_free (_data_->_inner_error_);
			_fso_data_mbpi_country_unref0 (_data_->country);
			if (_data_->_state_ == 0) {
				g_simple_async_result_complete_in_idle (_data_->_async_result);
			} else {
				g_simple_async_result_complete (_data_->_async_result);
			}
			g_object_unref (_data_->_async_result);
			return FALSE;
		} else {
			_fso_data_mbpi_country_unref0 (_data_->country);
			g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _data_->_inner_error_->message, g_quark_to_string (_data_->_inner_error_->domain), _data_->_inner_error_->code);
			g_clear_error (&_data_->_inner_error_);
			return FALSE;
		}
	}
	_data_->_tmp14_ = g_str_hash;
	_data_->_tmp15_ = g_str_equal;
	_data_->_tmp16_ = g_hash_table_new_full (_data_->_tmp14_, _data_->_tmp15_, _g_free0_, _g_free0_);
	_data_->timezones = _data_->_tmp16_;
	{
		_data_->_tmp17_ = _data_->country;
		_data_->_tmp18_ = _data_->_tmp17_->timezones;
		_data_->_tmp19_ = gee_abstract_map_get_keys ((GeeMap*) _data_->_tmp18_);
		_data_->_tmp20_ = _data_->_tmp19_;
		_data_->_tmp21_ = _data_->_tmp20_;
		_data_->_tmp22_ = NULL;
		_data_->_tmp22_ = gee_iterable_iterator ((GeeIterable*) _data_->_tmp21_);
		_data_->_tmp23_ = _data_->_tmp22_;
		_g_object_unref0 (_data_->_tmp21_);
		_data_->_key_it = _data_->_tmp23_;
		while (TRUE) {
			_data_->_tmp24_ = _data_->_key_it;
			_data_->_tmp25_ = FALSE;
			_data_->_tmp25_ = gee_iterator_next (_data_->_tmp24_);
			if (!_data_->_tmp25_) {
				break;
			}
			_data_->_tmp26_ = _data_->_key_it;
			_data_->_tmp27_ = NULL;
			_data_->_tmp27_ = gee_iterator_get (_data_->_tmp26_);
			_data_->key = (gchar*) _data_->_tmp27_;
			_data_->_tmp28_ = _data_->timezones;
			_data_->_tmp29_ = _data_->key;
			_data_->_tmp30_ = g_strdup (_data_->_tmp29_);
			_data_->_tmp31_ = _data_->country;
			_data_->_tmp32_ = _data_->_tmp31_->timezones;
			_data_->_tmp33_ = _data_->key;
			_data_->_tmp34_ = NULL;
			_data_->_tmp34_ = gee_abstract_map_get ((GeeAbstractMap*) _data_->_tmp32_, _data_->_tmp33_);
			g_hash_table_insert (_data_->_tmp28_, _data_->_tmp30_, (gchar*) _data_->_tmp34_);
			_g_free0 (_data_->key);
		}
		_g_object_unref0 (_data_->_key_it);
	}
	_data_->result = _data_->timezones;
	_fso_data_mbpi_country_unref0 (_data_->country);
	if (_data_->_state_ == 0) {
		g_simple_async_result_complete_in_idle (_data_->_async_result);
	} else {
		g_simple_async_result_complete (_data_->_async_result);
	}
	g_object_unref (_data_->_async_result);
	return FALSE;
	_g_hash_table_unref0 (_data_->timezones);
	_fso_data_mbpi_country_unref0 (_data_->country);
	if (_data_->_state_ == 0) {
		g_simple_async_result_complete_in_idle (_data_->_async_result);
	} else {
		g_simple_async_result_complete (_data_->_async_result);
	}
	g_object_unref (_data_->_async_result);
	return FALSE;
}


static void _vala_FreeSmartphoneDataWorldConnectivityAccessPoint_array_free (FreeSmartphoneDataWorldConnectivityAccessPoint* array, gint array_length) {
	if (array != NULL) {
		int i;
		for (i = 0; i < array_length; i = i + 1) {
			free_smartphone_data_world_connectivity_access_point_destroy (&array[i]);
		}
	}
	g_free (array);
}


static void world_info_real_get_apns_for_mcc_mnc_data_free (gpointer _data) {
	WorldInfoGetApnsForMccMncData* _data_;
	_data_ = _data;
	_g_free0 (_data_->mcc_mnc);
	_data_->result = (_vala_FreeSmartphoneDataWorldConnectivityAccessPoint_array_free (_data_->result, _data_->result_length1), NULL);
	_g_object_unref0 (_data_->self);
	g_slice_free (WorldInfoGetApnsForMccMncData, _data_);
}


static void world_info_real_get_apns_for_mcc_mnc (FreeSmartphoneDataWorld* base, const gchar* mcc_mnc, GAsyncReadyCallback _callback_, gpointer _user_data_) {
	WorldInfo * self;
	WorldInfoGetApnsForMccMncData* _data_;
	WorldInfo* _tmp0_;
	const gchar* _tmp1_;
	gchar* _tmp2_;
	self = (WorldInfo*) base;
	_data_ = g_slice_new0 (WorldInfoGetApnsForMccMncData);
	_data_->_async_result = g_simple_async_result_new (G_OBJECT (self), _callback_, _user_data_, world_info_real_get_apns_for_mcc_mnc);
	g_simple_async_result_set_op_res_gpointer (_data_->_async_result, _data_, world_info_real_get_apns_for_mcc_mnc_data_free);
	_tmp0_ = _g_object_ref0 (self);
	_data_->self = _tmp0_;
	_tmp1_ = mcc_mnc;
	_tmp2_ = g_strdup (_tmp1_);
	_data_->mcc_mnc = _tmp2_;
	world_info_real_get_apns_for_mcc_mnc_co (_data_);
}


static FreeSmartphoneDataWorldConnectivityAccessPoint* world_info_real_get_apns_for_mcc_mnc_finish (FreeSmartphoneDataWorld* base, GAsyncResult* _res_, int* result_length1, GError** error) {
	FreeSmartphoneDataWorldConnectivityAccessPoint* result;
	WorldInfoGetApnsForMccMncData* _data_;
	if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (_res_), error)) {
		return NULL;
	}
	_data_ = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (_res_));
	result = _data_->result;
	*result_length1 = _data_->result_length1;
	_data_->result = NULL;
	return result;
}


static void _vala_array_add2 (FreeSmartphoneDataWorldConnectivityAccessPoint** array, int* length, int* size, const FreeSmartphoneDataWorldConnectivityAccessPoint* value) {
	if ((*length) == (*size)) {
		*size = (*size) ? (2 * (*size)) : 4;
		*array = g_renew (FreeSmartphoneDataWorldConnectivityAccessPoint, *array, *size);
	}
	(*array)[(*length)++] = *value;
}


static gboolean world_info_real_get_apns_for_mcc_mnc_co (WorldInfoGetApnsForMccMncData* _data_) {
	switch (_data_->_state_) {
		case 0:
		goto _state_0;
		default:
		g_assert_not_reached ();
	}
	_state_0:
	_data_->_tmp0_ = NULL;
	_data_->_tmp0_ = g_new0 (FreeSmartphoneDataWorldConnectivityAccessPoint, 0);
	_data_->_result_ = _data_->_tmp0_;
	_data_->_result__length1 = 0;
	_data_->__result__size_ = _data_->_result__length1;
	_data_->_tmp1_ = _data_->mcc_mnc;
	_data_->_tmp2_ = '\0';
	_data_->_tmp2_ = string_get (_data_->_tmp1_, (glong) 0);
	_data_->_tmp3_ = _data_->mcc_mnc;
	_data_->_tmp4_ = '\0';
	_data_->_tmp4_ = string_get (_data_->_tmp3_, (glong) 1);
	_data_->_tmp5_ = _data_->mcc_mnc;
	_data_->_tmp6_ = '\0';
	_data_->_tmp6_ = string_get (_data_->_tmp5_, (glong) 2);
	_data_->_tmp7_ = NULL;
	_data_->_tmp7_ = g_strdup_printf ("%c%c%c", (gint) _data_->_tmp2_, (gint) _data_->_tmp4_, (gint) _data_->_tmp6_);
	_data_->mcc = _data_->_tmp7_;
	{
		_data_->_tmp8_ = NULL;
		_data_->_tmp8_ = fso_data_mbpi_database_instance ();
		_data_->_tmp9_ = _data_->_tmp8_;
		_data_->_tmp10_ = NULL;
		_data_->_tmp10_ = fso_data_mbpi_database_allCountries (_data_->_tmp9_);
		_data_->_tmp11_ = _data_->_tmp10_;
		_data_->_tmp12_ = gee_map_get_values (_data_->_tmp11_);
		_data_->_tmp13_ = _data_->_tmp12_;
		_data_->_tmp14_ = _data_->_tmp13_;
		_data_->_tmp15_ = NULL;
		_data_->_tmp15_ = gee_iterable_iterator ((GeeIterable*) _data_->_tmp14_);
		_data_->_tmp16_ = _data_->_tmp15_;
		_g_object_unref0 (_data_->_tmp14_);
		_g_object_unref0 (_data_->_tmp11_);
		_g_object_unref0 (_data_->_tmp9_);
		_data_->_country_it = _data_->_tmp16_;
		while (TRUE) {
			_data_->_tmp17_ = _data_->_country_it;
			_data_->_tmp18_ = FALSE;
			_data_->_tmp18_ = gee_iterator_next (_data_->_tmp17_);
			if (!_data_->_tmp18_) {
				break;
			}
			_data_->_tmp19_ = _data_->_country_it;
			_data_->_tmp20_ = NULL;
			_data_->_tmp20_ = gee_iterator_get (_data_->_tmp19_);
			_data_->country = (FsoDataMBPICountry*) _data_->_tmp20_;
			{
				_data_->_tmp21_ = _data_->country;
				_data_->_tmp22_ = _data_->_tmp21_->providers;
				_data_->_tmp23_ = gee_abstract_map_get_values ((GeeMap*) _data_->_tmp22_);
				_data_->_tmp24_ = _data_->_tmp23_;
				_data_->_tmp25_ = _data_->_tmp24_;
				_data_->_tmp26_ = NULL;
				_data_->_tmp26_ = gee_iterable_iterator ((GeeIterable*) _data_->_tmp25_);
				_data_->_tmp27_ = _data_->_tmp26_;
				_g_object_unref0 (_data_->_tmp25_);
				_data_->_provider_it = _data_->_tmp27_;
				while (TRUE) {
					_data_->_tmp28_ = _data_->_provider_it;
					_data_->_tmp29_ = FALSE;
					_data_->_tmp29_ = gee_iterator_next (_data_->_tmp28_);
					if (!_data_->_tmp29_) {
						break;
					}
					_data_->_tmp30_ = _data_->_provider_it;
					_data_->_tmp31_ = NULL;
					_data_->_tmp31_ = gee_iterator_get (_data_->_tmp30_);
					_data_->provider = (FsoDataMBPIProvider*) _data_->_tmp31_;
					{
						_data_->_tmp32_ = _data_->provider;
						_data_->_tmp33_ = _data_->_tmp32_->codes;
						_data_->_tmp34_ = _g_object_ref0 (_data_->_tmp33_);
						_data_->_code_list = _data_->_tmp34_;
						_data_->_tmp35_ = _data_->_code_list;
						_data_->_tmp36_ = gee_abstract_collection_get_size ((GeeCollection*) _data_->_tmp35_);
						_data_->_tmp37_ = _data_->_tmp36_;
						_data_->_code_size = _data_->_tmp37_;
						_data_->_code_index = -1;
						while (TRUE) {
							_data_->_tmp38_ = _data_->_code_index;
							_data_->_code_index = _data_->_tmp38_ + 1;
							_data_->_tmp39_ = _data_->_code_index;
							_data_->_tmp40_ = _data_->_code_size;
							if (!(_data_->_tmp39_ < _data_->_tmp40_)) {
								break;
							}
							_data_->_tmp41_ = _data_->_code_list;
							_data_->_tmp42_ = _data_->_code_index;
							_data_->_tmp43_ = NULL;
							_data_->_tmp43_ = gee_abstract_list_get ((GeeAbstractList*) _data_->_tmp41_, _data_->_tmp42_);
							_data_->code = (gchar*) _data_->_tmp43_;
							_data_->_tmp44_ = _data_->code;
							_data_->_tmp45_ = _data_->mcc_mnc;
							if (g_strcmp0 (_data_->_tmp44_, _data_->_tmp45_) == 0) {
								{
									_data_->_tmp46_ = _data_->provider;
									_data_->_tmp47_ = _data_->_tmp46_->gsm;
									_data_->_tmp48_ = gee_abstract_map_get_values ((GeeMap*) _data_->_tmp47_);
									_data_->_tmp49_ = _data_->_tmp48_;
									_data_->_tmp50_ = _data_->_tmp49_;
									_data_->_tmp51_ = NULL;
									_data_->_tmp51_ = gee_iterable_iterator ((GeeIterable*) _data_->_tmp50_);
									_data_->_tmp52_ = _data_->_tmp51_;
									_g_object_unref0 (_data_->_tmp50_);
									_data_->_apn_it = _data_->_tmp52_;
									while (TRUE) {
										_data_->_tmp53_ = _data_->_apn_it;
										_data_->_tmp54_ = FALSE;
										_data_->_tmp54_ = gee_iterator_next (_data_->_tmp53_);
										if (!_data_->_tmp54_) {
											break;
										}
										_data_->_tmp55_ = _data_->_apn_it;
										_data_->_tmp56_ = NULL;
										_data_->_tmp56_ = gee_iterator_get (_data_->_tmp55_);
										_data_->apn = (FsoDataMBPIAccessPoint*) _data_->_tmp56_;
										_data_->_tmp57_ = _data_->provider;
										_data_->_tmp58_ = _data_->_tmp57_->name;
										_data_->_tmp59_ = g_strdup (_data_->_tmp58_);
										_data_->name = _data_->_tmp59_;
										_data_->_tmp60_ = _data_->apn;
										_data_->_tmp61_ = _data_->_tmp60_->description;
										if (_data_->_tmp61_ != NULL) {
											_data_->_tmp62_ = _data_->name;
											_data_->_tmp63_ = _data_->apn;
											_data_->_tmp64_ = _data_->_tmp63_->description;
											_data_->_tmp65_ = NULL;
											_data_->_tmp65_ = g_strdup_printf (" (%s)", _data_->_tmp64_);
											_data_->_tmp66_ = _data_->_tmp65_;
											_data_->_tmp67_ = g_strconcat (_data_->_tmp62_, _data_->_tmp66_, NULL);
											_g_free0 (_data_->name);
											_data_->name = _data_->_tmp67_;
											_g_free0 (_data_->_tmp66_);
										}
										_data_->_tmp68_ = _data_->apn;
										_data_->_tmp69_ = _data_->_tmp68_->name;
										_data_->_tmp70_ = g_strdup (_data_->_tmp69_);
										_data_->_tmp71_ = _data_->_tmp70_;
										_data_->_tmp72_ = _data_->_tmp71_;
										if (_data_->_tmp72_ == NULL) {
											_data_->_tmp73_ = g_strdup ("unknown");
											_g_free0 (_data_->_tmp71_);
											_data_->_tmp71_ = _data_->_tmp73_;
										}
										_data_->_tmp74_ = _data_->apn;
										_data_->_tmp75_ = _data_->_tmp74_->user;
										_data_->_tmp76_ = g_strdup (_data_->_tmp75_);
										_data_->_tmp77_ = _data_->_tmp76_;
										_data_->_tmp78_ = _data_->_tmp77_;
										if (_data_->_tmp78_ == NULL) {
											_data_->_tmp79_ = g_strdup ("");
											_g_free0 (_data_->_tmp77_);
											_data_->_tmp77_ = _data_->_tmp79_;
										}
										_data_->_tmp80_ = _data_->apn;
										_data_->_tmp81_ = _data_->_tmp80_->password;
										_data_->_tmp82_ = g_strdup (_data_->_tmp81_);
										_data_->_tmp83_ = _data_->_tmp82_;
										_data_->_tmp84_ = _data_->_tmp83_;
										if (_data_->_tmp84_ == NULL) {
											_data_->_tmp85_ = g_strdup ("");
											_g_free0 (_data_->_tmp83_);
											_data_->_tmp83_ = _data_->_tmp85_;
										}
										_data_->_tmp86_ = _data_->_result_;
										_data_->_tmp86__length1 = _data_->_result__length1;
										_data_->_tmp87_ = _data_->name;
										_data_->_tmp88_ = _data_->_tmp71_;
										_data_->_tmp89_ = _data_->_tmp77_;
										_data_->_tmp90_ = _data_->_tmp83_;
										memset (&_data_->_tmp91_, 0, sizeof (FreeSmartphoneDataWorldConnectivityAccessPoint));
										free_smartphone_data_world_connectivity_access_point_init (&_data_->_tmp91_, _data_->_tmp87_, _data_->_tmp88_, _data_->_tmp89_, _data_->_tmp90_, "", "");
										_vala_array_add2 (&_data_->_result_, &_data_->_result__length1, &_data_->__result__size_, &_data_->_tmp91_);
										_g_free0 (_data_->_tmp83_);
										_g_free0 (_data_->_tmp77_);
										_g_free0 (_data_->_tmp71_);
										_g_free0 (_data_->name);
										_fso_data_mbpi_access_point_unref0 (_data_->apn);
									}
									_g_object_unref0 (_data_->_apn_it);
								}
							}
							_g_free0 (_data_->code);
						}
						_g_object_unref0 (_data_->_code_list);
					}
					_fso_data_mbpi_provider_unref0 (_data_->provider);
				}
				_g_object_unref0 (_data_->_provider_it);
			}
			_fso_data_mbpi_country_unref0 (_data_->country);
		}
		_g_object_unref0 (_data_->_country_it);
	}
	_data_->_tmp92_ = _data_->_result_;
	_data_->_tmp92__length1 = _data_->_result__length1;
	_data_->result_length1 = _data_->_tmp92__length1;
	_data_->result = _data_->_tmp92_;
	_g_free0 (_data_->mcc);
	if (_data_->_state_ == 0) {
		g_simple_async_result_complete_in_idle (_data_->_async_result);
	} else {
		g_simple_async_result_complete (_data_->_async_result);
	}
	g_object_unref (_data_->_async_result);
	return FALSE;
	_g_free0 (_data_->mcc);
	_data_->_result_ = (_vala_FreeSmartphoneDataWorldConnectivityAccessPoint_array_free (_data_->_result_, _data_->_result__length1), NULL);
	if (_data_->_state_ == 0) {
		g_simple_async_result_complete_in_idle (_data_->_async_result);
	} else {
		g_simple_async_result_complete (_data_->_async_result);
	}
	g_object_unref (_data_->_async_result);
	return FALSE;
}


static void world_info_real_get_provider_name_for_mcc_mnc_data_free (gpointer _data) {
	WorldInfoGetProviderNameForMccMncData* _data_;
	_data_ = _data;
	_g_free0 (_data_->mcc_mnc);
	_g_free0 (_data_->result);
	_g_object_unref0 (_data_->self);
	g_slice_free (WorldInfoGetProviderNameForMccMncData, _data_);
}


static void world_info_real_get_provider_name_for_mcc_mnc (FreeSmartphoneDataWorld* base, const gchar* mcc_mnc, GAsyncReadyCallback _callback_, gpointer _user_data_) {
	WorldInfo * self;
	WorldInfoGetProviderNameForMccMncData* _data_;
	WorldInfo* _tmp0_;
	const gchar* _tmp1_;
	gchar* _tmp2_;
	self = (WorldInfo*) base;
	_data_ = g_slice_new0 (WorldInfoGetProviderNameForMccMncData);
	_data_->_async_result = g_simple_async_result_new (G_OBJECT (self), _callback_, _user_data_, world_info_real_get_provider_name_for_mcc_mnc);
	g_simple_async_result_set_op_res_gpointer (_data_->_async_result, _data_, world_info_real_get_provider_name_for_mcc_mnc_data_free);
	_tmp0_ = _g_object_ref0 (self);
	_data_->self = _tmp0_;
	_tmp1_ = mcc_mnc;
	_tmp2_ = g_strdup (_tmp1_);
	_data_->mcc_mnc = _tmp2_;
	world_info_real_get_provider_name_for_mcc_mnc_co (_data_);
}


static gchar* world_info_real_get_provider_name_for_mcc_mnc_finish (FreeSmartphoneDataWorld* base, GAsyncResult* _res_, GError** error) {
	gchar* result;
	WorldInfoGetProviderNameForMccMncData* _data_;
	if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (_res_), error)) {
		return NULL;
	}
	_data_ = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (_res_));
	result = _data_->result;
	_data_->result = NULL;
	return result;
}


static gboolean world_info_real_get_provider_name_for_mcc_mnc_co (WorldInfoGetProviderNameForMccMncData* _data_) {
	switch (_data_->_state_) {
		case 0:
		goto _state_0;
		default:
		g_assert_not_reached ();
	}
	_state_0:
	_data_->_tmp0_ = g_strdup ("");
	_data_->_result_ = _data_->_tmp0_;
	_data_->_tmp1_ = NULL;
	_data_->_tmp1_ = fso_data_mbpi_database_instance ();
	_data_->mbpi = _data_->_tmp1_;
	{
		_data_->_tmp2_ = NULL;
		_data_->_tmp2_ = fso_data_mbpi_database_instance ();
		_data_->_tmp3_ = _data_->_tmp2_;
		_data_->_tmp4_ = NULL;
		_data_->_tmp4_ = fso_data_mbpi_database_allCountries (_data_->_tmp3_);
		_data_->_tmp5_ = _data_->_tmp4_;
		_data_->_tmp6_ = gee_map_get_values (_data_->_tmp5_);
		_data_->_tmp7_ = _data_->_tmp6_;
		_data_->_tmp8_ = _data_->_tmp7_;
		_data_->_tmp9_ = NULL;
		_data_->_tmp9_ = gee_iterable_iterator ((GeeIterable*) _data_->_tmp8_);
		_data_->_tmp10_ = _data_->_tmp9_;
		_g_object_unref0 (_data_->_tmp8_);
		_g_object_unref0 (_data_->_tmp5_);
		_g_object_unref0 (_data_->_tmp3_);
		_data_->_country_it = _data_->_tmp10_;
		while (TRUE) {
			_data_->_tmp11_ = _data_->_country_it;
			_data_->_tmp12_ = FALSE;
			_data_->_tmp12_ = gee_iterator_next (_data_->_tmp11_);
			if (!_data_->_tmp12_) {
				break;
			}
			_data_->_tmp13_ = _data_->_country_it;
			_data_->_tmp14_ = NULL;
			_data_->_tmp14_ = gee_iterator_get (_data_->_tmp13_);
			_data_->country = (FsoDataMBPICountry*) _data_->_tmp14_;
			{
				_data_->_tmp15_ = _data_->country;
				_data_->_tmp16_ = _data_->_tmp15_->providers;
				_data_->_tmp17_ = gee_abstract_map_get_values ((GeeMap*) _data_->_tmp16_);
				_data_->_tmp18_ = _data_->_tmp17_;
				_data_->_tmp19_ = _data_->_tmp18_;
				_data_->_tmp20_ = NULL;
				_data_->_tmp20_ = gee_iterable_iterator ((GeeIterable*) _data_->_tmp19_);
				_data_->_tmp21_ = _data_->_tmp20_;
				_g_object_unref0 (_data_->_tmp19_);
				_data_->_provider_it = _data_->_tmp21_;
				while (TRUE) {
					_data_->_tmp22_ = _data_->_provider_it;
					_data_->_tmp23_ = FALSE;
					_data_->_tmp23_ = gee_iterator_next (_data_->_tmp22_);
					if (!_data_->_tmp23_) {
						break;
					}
					_data_->_tmp24_ = _data_->_provider_it;
					_data_->_tmp25_ = NULL;
					_data_->_tmp25_ = gee_iterator_get (_data_->_tmp24_);
					_data_->provider = (FsoDataMBPIProvider*) _data_->_tmp25_;
					{
						_data_->_tmp26_ = _data_->provider;
						_data_->_tmp27_ = _data_->_tmp26_->codes;
						_data_->_tmp28_ = _g_object_ref0 (_data_->_tmp27_);
						_data_->_code_list = _data_->_tmp28_;
						_data_->_tmp29_ = _data_->_code_list;
						_data_->_tmp30_ = gee_abstract_collection_get_size ((GeeCollection*) _data_->_tmp29_);
						_data_->_tmp31_ = _data_->_tmp30_;
						_data_->_code_size = _data_->_tmp31_;
						_data_->_code_index = -1;
						while (TRUE) {
							_data_->_tmp32_ = _data_->_code_index;
							_data_->_code_index = _data_->_tmp32_ + 1;
							_data_->_tmp33_ = _data_->_code_index;
							_data_->_tmp34_ = _data_->_code_size;
							if (!(_data_->_tmp33_ < _data_->_tmp34_)) {
								break;
							}
							_data_->_tmp35_ = _data_->_code_list;
							_data_->_tmp36_ = _data_->_code_index;
							_data_->_tmp37_ = NULL;
							_data_->_tmp37_ = gee_abstract_list_get ((GeeAbstractList*) _data_->_tmp35_, _data_->_tmp36_);
							_data_->code = (gchar*) _data_->_tmp37_;
							_data_->_tmp38_ = _data_->code;
							_data_->_tmp39_ = _data_->mcc_mnc;
							if (g_strcmp0 (_data_->_tmp38_, _data_->_tmp39_) == 0) {
								_data_->_tmp40_ = _data_->provider;
								_data_->_tmp41_ = _data_->_tmp40_->name;
								_data_->_tmp42_ = g_strdup (_data_->_tmp41_);
								_g_free0 (_data_->_result_);
								_data_->_result_ = _data_->_tmp42_;
							}
							_g_free0 (_data_->code);
						}
						_g_object_unref0 (_data_->_code_list);
					}
					_fso_data_mbpi_provider_unref0 (_data_->provider);
				}
				_g_object_unref0 (_data_->_provider_it);
			}
			_fso_data_mbpi_country_unref0 (_data_->country);
		}
		_g_object_unref0 (_data_->_country_it);
	}
	_data_->_tmp43_ = _data_->_result_;
	if (g_strcmp0 (_data_->_tmp43_, "") == 0) {
		_data_->_tmp44_ = _data_->mcc_mnc;
		_data_->_tmp45_ = NULL;
		_data_->_tmp45_ = string_to_string (_data_->_tmp44_);
		_data_->_tmp46_ = NULL;
		_data_->_tmp46_ = g_strconcat ("Did not found a valid provider for MCC/MNC ", _data_->_tmp45_, NULL);
		_data_->_tmp47_ = _data_->_tmp46_;
		_data_->_tmp48_ = g_error_new_literal (FREE_SMARTPHONE_ERROR, FREE_SMARTPHONE_ERROR_INVALID_PARAMETER, _data_->_tmp47_);
		_data_->_tmp49_ = _data_->_tmp48_;
		_g_free0 (_data_->_tmp47_);
		_data_->_inner_error_ = _data_->_tmp49_;
		if (((_data_->_inner_error_->domain == FREE_SMARTPHONE_ERROR) || (_data_->_inner_error_->domain == G_DBUS_ERROR)) || (_data_->_inner_error_->domain == G_IO_ERROR)) {
			g_simple_async_result_set_from_error (_data_->_async_result, _data_->_inner_error_);
			g_error_free (_data_->_inner_error_);
			_g_object_unref0 (_data_->mbpi);
			_g_free0 (_data_->_result_);
			if (_data_->_state_ == 0) {
				g_simple_async_result_complete_in_idle (_data_->_async_result);
			} else {
				g_simple_async_result_complete (_data_->_async_result);
			}
			g_object_unref (_data_->_async_result);
			return FALSE;
		} else {
			_g_object_unref0 (_data_->mbpi);
			_g_free0 (_data_->_result_);
			g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _data_->_inner_error_->message, g_quark_to_string (_data_->_inner_error_->domain), _data_->_inner_error_->code);
			g_clear_error (&_data_->_inner_error_);
			return FALSE;
		}
	}
	_data_->result = _data_->_result_;
	_g_object_unref0 (_data_->mbpi);
	if (_data_->_state_ == 0) {
		g_simple_async_result_complete_in_idle (_data_->_async_result);
	} else {
		g_simple_async_result_complete (_data_->_async_result);
	}
	g_object_unref (_data_->_async_result);
	return FALSE;
	_g_object_unref0 (_data_->mbpi);
	_g_free0 (_data_->_result_);
	if (_data_->_state_ == 0) {
		g_simple_async_result_complete_in_idle (_data_->_async_result);
	} else {
		g_simple_async_result_complete (_data_->_async_result);
	}
	g_object_unref (_data_->_async_result);
	return FALSE;
}


static void world_info_class_init (WorldInfoClass * klass) {
	world_info_parent_class = g_type_class_peek_parent (klass);
	g_type_class_add_private (klass, sizeof (WorldInfoPrivate));
	FSO_FRAMEWORK_ABSTRACT_OBJECT_CLASS (klass)->repr = world_info_real_repr;
	G_OBJECT_CLASS (klass)->finalize = world_info_finalize;
}


static void world_info_free_smartphone_data_world_interface_init (FreeSmartphoneDataWorldIface * iface) {
	world_info_free_smartphone_data_world_parent_iface = g_type_interface_peek_parent (iface);
	iface->get_all_countries = (FreeSmartphoneDataWorldCountry* (*)(FreeSmartphoneDataWorld*, int*, GError**)) world_info_real_get_all_countries;
	iface->get_all_countries_finish = world_info_real_get_all_countries_finish;
	iface->get_country_code_for_mcc_mnc = (gchar* (*)(FreeSmartphoneDataWorld*, const gchar*, GError**)) world_info_real_get_country_code_for_mcc_mnc;
	iface->get_country_code_for_mcc_mnc_finish = world_info_real_get_country_code_for_mcc_mnc_finish;
	iface->get_timezones_for_country_code = (GHashTable* (*)(FreeSmartphoneDataWorld*, const gchar*, GError**)) world_info_real_get_timezones_for_country_code;
	iface->get_timezones_for_country_code_finish = world_info_real_get_timezones_for_country_code_finish;
	iface->get_apns_for_mcc_mnc = (FreeSmartphoneDataWorldConnectivityAccessPoint* (*)(FreeSmartphoneDataWorld*, const gchar*, int*, GError**)) world_info_real_get_apns_for_mcc_mnc;
	iface->get_apns_for_mcc_mnc_finish = world_info_real_get_apns_for_mcc_mnc_finish;
	iface->get_provider_name_for_mcc_mnc = (gchar* (*)(FreeSmartphoneDataWorld*, const gchar*, GError**)) world_info_real_get_provider_name_for_mcc_mnc;
	iface->get_provider_name_for_mcc_mnc_finish = world_info_real_get_provider_name_for_mcc_mnc_finish;
}


static void world_info_instance_init (WorldInfo * self) {
	self->priv = WORLD_INFO_GET_PRIVATE (self);
}


static void world_info_finalize (GObject* obj) {
	WorldInfo * self;
	self = WORLD_INFO (obj);
	_g_object_unref0 (self->priv->subsystem);
	G_OBJECT_CLASS (world_info_parent_class)->finalize (obj);
}


GType world_info_get_type (void) {
	return world_info_type_id;
}


GType world_info_register_type (GTypeModule * module) {
	static const GTypeInfo g_define_type_info = { sizeof (WorldInfoClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) world_info_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (WorldInfo), 0, (GInstanceInitFunc) world_info_instance_init, NULL };
	static const GInterfaceInfo free_smartphone_data_world_info = { (GInterfaceInitFunc) world_info_free_smartphone_data_world_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
	world_info_type_id = g_type_module_register_type (module, FSO_FRAMEWORK_TYPE_ABSTRACT_OBJECT, "WorldInfo", &g_define_type_info, 0);
	g_type_module_add_interface (module, world_info_type_id, FREE_SMARTPHONE_DATA_TYPE_WORLD, &free_smartphone_data_world_info);
	return world_info_type_id;
}


/**
 * This function gets called on plugin initialization time.
 * @return the name of your plugin here
 * @note that it needs to be a name in the format <subsystem>.<plugin>
 * else your module will be unloaded immediately.
 **/
gchar* fso_factory_function (FsoFrameworkSubsystem* subsystem, GError** error) {
	gchar* result = NULL;
	FsoFrameworkSubsystem* _tmp0_;
	WorldInfo* _tmp1_;
	gchar* _tmp2_;
	g_return_val_if_fail (subsystem != NULL, NULL);
	_tmp0_ = subsystem;
	_tmp1_ = world_info_new (_tmp0_);
	_g_object_unref0 (instance);
	instance = _tmp1_;
	_tmp2_ = g_strdup (WORLD_MODULE_NAME);
	result = _tmp2_;
	return result;
}


void fso_register_function (GTypeModule* module) {
	FsoFrameworkLogger* _tmp0_;
	g_return_if_fail (module != NULL);
	world_info_register_type (module);
	_tmp0_ = fso_framework_theLogger;
	fso_framework_logger_debug (_tmp0_, "fsotime.world fso_register_function");
}



