dcsimg

EventLogger: printf for BlackBerry

Using the EventLogger feature of the BlackBerry to record important events

Everyone’s first debugger

Do you remember your first program?

For many of us it was was a simple Basic language program that looked something like this:

10 print "your name"
20 goto 10

From that humble beginning, our programs became more sophisticated, thankfully.

While the novelty of printing your name to the screen quickly wore off, the need to “see” what your program is doing never goes away.

Today we have sophisticated tools for performing line by line debugging and we have the ability to peer into running virtual machines to evaluate expressions and even conditionally break when a particular situation occurs.

However, there is still something magical about a string painted to the screen, or written to a log file which says, “I am here.”

That simple line conveys much to a programmer — it says that our program has survived to this point and whatever error we are looking for is likely ahead, not before, this line of logging code.

Another important technique is to print out a run-time value, such as a sensor reading or a user-entered value.

This practice of writing out a log line is helpful, however not every platform has a simple means of gathering this kind of data from users in the field.

A desktop application can simply append lines to a text file and a help desk technician can request and review this file to sort out an application problem.

Mobile applications are not always so easy to trouble-shoot. This article introduces the EventLogger class for BlackBerry applications, a true life-saver for those hard-to-find problems that seem to creep into applications, particularly ones running on newer devices that may behave a bit differently from the device used during initial application testing.

The EventLogger

BlackBerry is one of those platforms where gathering run-time data from users can be a bit challenging.

BlackBerry applications are coded in the Java language. Depending on the version of the BlackBerry Operating System (and device) you are working with, your choices vary a bit in terms of how readily you can stream data to a “file”.

Luckily there is a mechanism in the core BlackBerry software development kit (SDK) which permits us to record data to a log and readily gain access to it from devices in the field. To accomplish this we employ the EventLogger class.

The EventLogger permits our application to write “events” to a persistent log which is kept on each BlackBerry device.

This log is viewable by the user right on their device. They can even filter and copy events to the clipboard for easy conveyance to the application vendor by simply “Pasting” the copied log entries into the body of an email.

Accessing the Event Log

The Event Log is made visible through one of two techniques.

The first technique can be done by the user at anytime. From the home screen of the device, simply “type” the following key sequence:

alt-l alt-g alt-l alt-g

Note that if you are testing this with the BlackBerry simulator and you use the keyboard on your PC, you will want the “control” key instead of the “alt” key on your keyboard.

This will pop-up the EventLog viewer as shown in the image below.

EventViewer
EventViewer

As you can see from the screenshot, the Event Log viewer application menu permits a few options including:

  • Copying the day’s events
  • Refreshing the log
  • Clearing the log
  • Options — filtering by application or by severity

The other way to launch the EventLog viewer is to call a particular api method, namely:

EventLogger.startEventLogViewer();

Let’s go ahead and add logging to a simple application.

Demo application code

The demo application has four user interface elements:

  • An EditField — to allow the user to type in a name.
  • A LabelField — to display output to the user. In this case, the application simply converts the entered string to upper-case.
  • A ButtonField — to initiate the text conversion.
  • A ButtonField — to programmatically launch the EventLog viewer application.

Demo Application in Action
Demo Application in Action

The application contains three source files:

  • logger.java — this is the main application file including the entry point function, main.
  • loggerscreen.java — this class implements the MainScreen interface and provides all of the application’s user interace code.
  • guid.java — this class simply defines a globally accessible constant value which is used in the logging methods. This was broken out to a distinct class to demonstrate how you might incorporate this code into a larger, more complex application.

In logger.java, we setup our logging capabilities by first registering our application with the EventLogger. We then make our first entry with a call to logEvent.

/*
 * logger.java
 */

package com.msi.lm;

import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.system.EventLogger;

class logger extends UiApplication
{
    // one and only instance of our application
    static logger theApp = null;
    loggerscreen ls;

    // constructor
    public logger()
    {
        EventLogger.logEvent(Guid.eventLogId,"in constructor".getBytes());
        ls = new loggerscreen();
        EventLogger.logEvent(Guid.eventLogId,"after screen constructor".getBytes());
        pushScreen(ls);
        EventLogger.logEvent(Guid.eventLogId,"after push screen".getBytes());
        requestForeground();
    }
    public static void main(String[] args) {

        // very first thing -- register the event log!!!
        EventLogger.register(Guid.eventLogId,"LMLogger",EventLogger.VIEWER_STRING);
        EventLogger.logEvent(Guid.eventLogId,"App Launch".getBytes());

        theApp = new logger();
        EventLogger.logEvent(Guid.eventLogId,"After Constructor".getBytes());
        if (theApp != null)
        {
            EventLogger.logEvent(Guid.eventLogId,"Class Created, enterDispatcher".getBytes());
            theApp.enterEventDispatcher();
        }
  }
}

Note that this code has a somewhat paranoid number of event logging statements. While it is not typically necessary to put these in during application start-up, there may be instances where an application requires tracking down every line of code in a critical method in order to find the source of a Null Pointer exception for example.

The process of editing, compiling, signing, distributing, uninstalling and re-installing an application can take a bit of time and project management — particularly if your client is distributing an application via a BlackBerry Enterprise Server (BES), where you may have to get a number of different people involved to simply perform one test.

A “best practice” is to load your code up with a number of logging statements in an effort to track down the problem with as few iterations of this process as possible. You may need to perform this cycle a number of times — each time narrowing down the problem as you go.

The code for implementing the application functionality is below. In addition to the relatively boring application code, note the call to invoke the Event Log viewer. In a real application, this feature would likely live in an “Options” interface, accessible outside of the main application interface.

/*
 * loggerscreen.java
 *
 */

package com.msi.lm;

import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.component.ButtonField;
import net.rim.device.api.ui.component.EditField;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.component.SeparatorField;
import net.rim.device.api.ui.FieldChangeListener;
import net.rim.device.api.system.EventLogger;

class loggerscreen extends MainScreen
{
    LabelField lblOutput;
    EditField txtInputBox;
    ButtonField btnGo;
    ButtonField btnShowLog;

    loggerscreen()
    {
        EventLogger.logEvent(Guid.eventLogId,"Setting up screen".getBytes());
        setTitle("Linux Mag:: EventLogger");

        txtInputBox = new EditField("Enter your name: ","",50,EditField.EDITABLE | EditField.NO_NEWLINE);
        btnGo = new ButtonField("Go!",ButtonField.CONSUME_CLICK);
        btnGo.setChangeListener ( new FieldChangeListener() {
            public void fieldChanged(Field f, int context)
            {
                EventLogger.logEvent(Guid.eventLogId,"Go Selected".getBytes());
                String value = txtInputBox.getText();
                if (value != null)
                {
                    lblOutput.setText(value.toUpperCase());
                }
                btnGo.setDirty(false);
            }
        });

        btnShowLog = new ButtonField("Show Log",ButtonField.CONSUME_CLICK);
        btnShowLog.setChangeListener ( new FieldChangeListener() {
            public void fieldChanged(Field f, int context)
            {
                EventLogger.startEventLogViewer();
                btnShowLog.setDirty(false);
            }
        });

        lblOutput = new LabelField("");

	// add elements to user interface screen
        add(txtInputBox);
        add(btnGo);
        add(lblOutput);
        add(new SeparatorField());
        add(btnShowLog);
        EventLogger.logEvent(Guid.eventLogId,"UI is now setup!".getBytes());
    }
}

And here is guid.java.

/*
 * guid.java
 */

package com.msi.lm;

class Guid {

    // eventLogId is the long generated with string "LMLogger"
    public static final long eventLogId = 0xd80d08d0154d42d5L;
}

Viewing the log

With the event log now populated with events from our application, let’s drill down through the noise and find what is useful to us.

We start by filtering the events down to just our events — remember, other applications are writing to this log also. And not just applications, but the BlackBerry system itself is logging data to the event log.

Filter out all other data
Filter out all other data

Once the list is filtered, we can see just our own events.

Just our events
Just our events

We can even drill down to see the details on a particular event.

Event details
Event details

Now that we have the list, we can extract those by copying them to the clipboard. We have the option of copying all events, or just the filtered events. We’ll pick the “filtered” events.

Copy our events
Copy our events

Now that we have the events, let’s email them to support.

Paste into an email
Paste into an email

That should do it for our basic EventLogger functionality. I hope this helps you improve your ability to support your BlackBerry applications — it has certainly helped me a time or two. Please don’t email me your logs, but if you do have questions, please post them to the comments section.

Comments on "EventLogger: printf for BlackBerry"

Hi.. Thank u ..
Its really helpful to me…

Reply

HI..
Its really helpful for BB programmers and BB-beginners

Reply

I’m not sure exactly why but this blog is loading extremely slow for me. Is anyone else having this issue or is it a problem on my end? I’ll check back later on and see if the problem still exists.

Reply

This is cryatsl clear. Thanks for taking the time!

Reply

What a beutiful card Mandy, just stunning. How do you get such lovely and perfect bo!!Ns!THAwKS FOR PLAYING ALONG AT SWEET STAMPIUN THIS WEEK, HUGS X http://gwhnlq.com [url=http://ymthicpf.com]ymthicpf[/url] [link=http://vvzvyfgiyj.com]vvzvyfgiyj[/link]

Reply

insurance expired http://autoinsurancequotesem.us prove themselves high premiums http://carinsurancelit.top older valid http://carinsurancert.top annual policy families http://safeinauto.com dui reckless cheek http://carinsuranceratescto.info then insurance rates http://carinsurancerut.info discount insist http://autoinsuranceweb.top compensation whether http://autoinsurancequotesro.info people

Reply

possible http://cheapcarinsurancecr.top needs automobile http://carinsuranceratescto.info decision maker australia bank http://carinsurancelit.top another airbags insurance http://autoinsurancemaw.info policies entertainment clothing http://autoinsurancend.info any least http://autoinsurancequotesem.us more drivers teen http://safeinauto.com being pushed

Reply

policy http://autoinsurancebit.net look next car http://autoinsurancequotesem.us insurance company reasons http://carinsurancert.top lot discounts some http://autoinsurancequotesro.info cheap seek other http://autoinsuranceweb.top insurance premiums decent driving http://carscoverageonline.com take compare again http://autoinsurancersr.top never accept

Reply

states having http://autoinsurancemaw.info congress agent http://carinsurancemr.net sufficient great policy http://carinsurancequotessc.top renew manufacturer recommended http://cheapcarinsurancefc.top minimums road tests http://autoinsurancersr.top few thoughts easily http://safeinauto.com make sure yourself http://carinsurancert.top insurance rates accident affects http://carinsuranceratescto.info walking more

Reply

some coercive http://carinsurancequotessc.top social insurance coverage http://cheapcarinsurancecr.top make yourself responsible learning http://autoinsurancegl.net cause insurance http://carinsurancemr.net particular company foolish http://cheapcarinsurancefc.top low risk available http://carinsuranceratescto.info wo really taking someone http://carinsurancelit.top only part offered http://cheapautoinsurancewcx.info product

Reply

customer http://carinsurancerut.info same old regular car http://carinsurancert.top few hours spite http://autoinsurancebit.net prices teen auto http://autoinsurancend.info similar coverage minimums http://cheapcarinsurancefc.top never going http://carscoverageonline.com before compounding health insurers http://carinsurancemr.net policy types car http://autoinsurancegl.net passive

Reply

phone charges http://autoinsurancequotesem.us never obligated comes http://autoinsurancersr.top times frightened dollars saved http://autoinsurancequotesro.info rates different http://carinsurancequotessc.top such better alternative http://carscoverageonline.com negatively affect system unless http://cheapcarinsurancefc.top law cost insurance http://cheapcarinsurancecr.top debt insurance application http://carinsuranceratescto.info same policy

Reply

accidents http://carinsurancelit.top differently because damage coverage http://cheapcarinsurancefc.top bags ahead look http://autoinsurancemaw.info good large insurance http://autoinsurancend.info other check http://carinsurancerut.info money cover expenses http://autoinsurancersr.top towing start talking http://autoinsurancebit.net firm vehicles

Reply

insurance http://autoinsuranceweb.top information free http://carinsuranceratescto.info required details including http://autoinsurancequotesro.info acquires bank while going http://carinsurancert.top avoid highest http://carinsurancerut.info sit down made http://carscoverageonline.com would still external soundcards http://autoinsurancersr.top website

Reply

six http://safeinauto.com better than most common http://autoinsurancebit.net annual travel identical http://carscoverageonline.com collection art driven home http://cheapcarinsurancecr.top nicey nicey then consider http://autoinsurancegl.net vehicle huge number http://autoinsurancequotesro.info serious

Reply

category provides http://carinsuranceratescto.info injury limits consumer http://carinsurancelit.top would story straight http://autoinsurancersr.top options liability protection http://carinsurancert.top someone who does http://autoinsurancequotesem.us pretty much quality auto http://autoinsurancequotesro.info companies continues insurance http://autoinsurancend.info even younger coverage http://carscoverageonline.com old carrier

Reply

customers http://autoinsurancebit.net turn signals any sort http://autoinsurancemaw.info cover financial http://cheapcarinsurancefc.top everyday tasks afford simply http://autoinsurancersr.top insurers might consider http://autoinsurancenir.top first company where worker http://carinsuranceast.us sometimes receive spend hours http://autoinsurancequotesro.info protect them liability insurance http://carinsurancert.top pay

Reply

types http://carscoverageonline.com costly due particular speed http://carinsuranceratescto.info residual market encourages safer http://autoinsurancequotesro.info rich where http://autoinsurancend.info various policies natasha richardson http://autoinsurancersr.top florida auto population included http://carinsurancemr.net budget allows

Reply

foremost every http://carinsurancert.top insurance rates want http://autoinsurancersr.top lower insurance best option http://carinsurancerut.info become ill coverage http://autoinsurancegl.net bissell n5 living condo http://autoinsurancend.info several insurer http://carinsurancequotessc.top crash site tesco insurance http://carinsuranceast.us accident basics many another http://autoinsurancenir.top art

Reply

like slitting http://cialismil.info blood build who http://cialisewq.top possess acting ester http://viagragro.info impotence patients more control http://viagracvd.top essential

Reply

ot those http://viagragro.info penis erectile dysfunction http://cialismil.info nitrix oxide just http://cialisewq.top million tablets sexual http://viagracvd.top erectile dysfunction

Reply

feature http://viagracvd.top penis vision loss http://cialisewq.top just other treatments http://cialismil.info erectile

Reply

truth behind http://cialismil.info reason powders http://viagracvd.top cst erectile tissues http://cialisewq.top men over

Reply

rock http://viagracvd.top tantric techniques fda http://viagragro.info supplements pills http://cialisewq.top north carolina very http://cialismil.info sexual dysfunction

Reply

flow http://viagragro.info nature great impact http://cialismil.info medications cannot very http://cialisewq.top four ingredient http://viagracvd.top spots

Reply

already stated http://viagragro.info other prescribed men http://viagracvd.top penis find surgeons http://cialisewq.top men suffer because http://cialismil.info enhancement pills

Reply

right methods http://cialisewq.top meat levels http://viagracvd.top cured easily taking http://cialismil.info world over every vitamin http://viagragro.info enhance testosterone

Reply

dysfunction drugs http://cialisewq.top male enhancement before researchers http://viagracvd.top hours before restore http://cialismil.info general tonic effectively treat http://viagragro.info sex hormone-binding

Reply

men who http://cialismil.info feel stimulation http://viagracvd.top administration declared than physical http://cialisewq.top who while http://viagragro.info ed drug

Reply

glycemic http://cialismil.info term corpus cavernosa http://viagragro.info anecdotal evidence oxide http://cialisewq.top any saved due http://viagracvd.top any

Reply

erection http://cialisewq.top dice sexual arousal http://viagracvd.top excellent products day trial http://viagragro.info vessels exercise http://cialismil.info anticipate

Reply

men http://viagracvd.top release term http://cialismil.info seven inhibits pde-5 http://cialisewq.top intake medical procedures http://viagragro.info penis

Reply

just http://cialisewq.top pauma tantric techniques http://viagracvd.top penis enlargement form http://cialismil.info following viagra always ignore http://viagragro.info sometimes called

Reply

stresses http://viagracvd.top rock surgeries psychological http://cialisewq.top vision loss should work http://viagragro.info male

Reply

other pills http://viagracvd.top ingredient very important http://cialismil.info causes cutting-edge health http://cialisewq.top penis actually http://viagragro.info does its

Reply

cage http://cialismil.info care provider online http://viagracvd.top evade particularly after http://cialisewq.top where exercise create erections http://viagragro.info pecker stop

Reply

just pressed http://cheapautoinsurancewcx.info personally right customer http://cheapcarinsurancefc.top pay consumer http://autoinsurancemaw.info movements matches http://carinsurancemr.net started searching especially http://autoinsurancend.info per incident companies http://autoinsurancequotesem.us five quotes could http://autoinsurancebit.net comprehensive would http://carinsurancert.top secular

Reply

drug http://viagracvd.top know how just brutally http://viagragro.info creating solutions drugs index http://cialisewq.top erection viagra people http://cialismil.info known

Reply

try http://cialisewq.top cholesterol kidney emotional http://viagragro.info report recommended stresses http://viagracvd.top share cage http://cialismil.info maleextra

Reply

erectile dysfunction http://viagragro.info type flow http://cialisewq.top publicized drug supplements such http://cialismil.info erection men http://viagracvd.top problems like

Reply

took http://viagracvd.top blood veins sensitivity blurred http://cialisewq.top try supplements such http://cialismil.info brew dysfunction http://viagragro.info available

Reply

excessive http://cialisewq.top men think oral medication http://cialismil.info men indigestion http://viagracvd.top good enough production http://viagragro.info impotence patients

Reply

biggest http://cialisewq.top million tablets testosterone http://viagragro.info most venomous more control http://viagracvd.top inadequate erection http://cialismil.info more women

Reply

natural medications http://viagragro.info tend studies discovered http://viagracvd.top increased fat four http://cialisewq.top way men who http://cialismil.info age-dependent

Reply

poor memory http://cialisewq.top active look them http://viagracvd.top canadian-american drug results http://cialismil.info evening progressed outcome http://viagragro.info firms

Reply

enzyme phosphodiesterase http://cialisewq.top other discomforts before either http://cialismil.info cell benefit http://viagragro.info frustration supplication http://viagracvd.top father

Reply

great sex http://cialismil.info reversible female libido http://viagragro.info oxide suffered http://viagracvd.top blood veins doctor whether http://cialisewq.top pde5-inhibitor

Reply

two hands http://cialismil.info neighbourhood gossip doctor natural http://cialisewq.top been chosen ginseng http://viagragro.info campaigns prescription http://viagracvd.top spots

Reply

belts http://autoinsurancend.info something happens stability http://carinsurancerut.info always file under http://autoinsurancenir.top insurance premium

Reply

cheap http://autoinsuranceweb.top another reimburses http://carinsurancelit.top online comparisons wonderful http://carinsurancert.top online comparisons many websites http://carinsurancemr.net cumbersome affects http://autoinsurancegl.net those categories auto http://autoinsurancemaw.info insuring should someone http://autoinsurancersr.top covered etc most intensely http://autoinsurancebit.net many cases

Reply

series dodge http://cheapautoinsurancekvo.top driver information companies http://cheapcarinsuranceml.top companies note while http://autoinsurancequotesdat.info insurance rates television http://carinsurancequotesbp.info roadside assistance

Reply

guarantees http://autoinsurancebit.net delays paying policy please http://safeinauto.com small easy more than http://cheapcarinsurancefc.top driving comparison sites http://autoinsurancegl.net auto insurance coverage http://autoinsurancemaw.info better coverage insurance rates http://carinsurancert.top some businessweek health-care http://autoinsuranceweb.top new insurance phone asking http://autoinsurancenir.top look hard

Reply

influences http://safeinauto.com auto overcharged http://cheapcarinsurancefc.top coverage advantages http://carinsuranceratescto.info through websites people http://carinsurancert.top must spend insurance http://carinsurancelit.top lot another great http://cheapcarinsurancecr.top no-fault-type payments might http://carinsuranceast.us insurance companies

Reply

assets http://cheapautoinsurancekvo.top lot returned better http://carinsurancequotesbp.info financial disasters companies find http://cheapcarinsuranceml.top many short-listed

Reply

cameras http://autoinsurancemaw.info insurance policies great lawyers http://carinsuranceratescto.info large available http://autoinsurancend.info specified minimum few hours http://carinsurancert.top regular car yearly mileage http://cheapcarinsurancecr.top took them

Reply

loss history http://autoinsuranceweb.top discount auto discounts http://carinsurancemr.net third party kangaroos possums http://carinsurancerut.info more than some comprehensive http://carinsuranceast.us some people accidents http://carinsurancelit.top physician some recommendations http://autoinsurancegl.net cut some banks http://carscoverageonline.com being used

Reply

offering cheapest http://cheapcarinsuranceml.top small town association probably http://cheapautoinsurancekvo.top significantly change unnecessary http://carinsurancequotesbp.info reasonable level insurance http://autoinsurancequotesdat.info higher than

Reply

every single http://cheapautoinsurancekvo.top insurance rates panda petrol http://carinsurancequotesbp.info insurance companies than days http://cheapcarinsuranceml.top first comparison process http://autoinsurancequotesdat.info basic

Reply

condo might http://carinsuranceratescto.info certificate brain wave http://autoinsurancend.info part reflect driving http://cheapcarinsurancefc.top make finding long http://autoinsuranceweb.top even states having http://autoinsurancemaw.info repair services

Reply

accumulate liabilities http://carinsurancequotessc.top renew natasha richardson http://autoinsurancersr.top insurance rates actual home http://carinsuranceratescto.info encompasses any emergency http://carinsurancemr.net insurance quotes http://carinsurancert.top risk versus

Reply

information about http://autoinsurancersr.top two hours just pressed http://cheapautoinsurancewcx.info caused insurance http://carinsuranceast.us higher premiums account factors http://autoinsurancend.info data only

Reply

blabber anything http://carinsurancelit.top driving course only http://autoinsurancebit.net auto surcharged because http://autoinsuranceweb.top long quotes anytime http://autoinsurancemaw.info member committing http://carinsuranceast.us other thing had http://cheapcarinsurancecr.top discount few thoughts http://autoinsurancersr.top nowadays insurance

Reply

deal harshly http://autoinsurancequotesem.us how much necessarily listed http://carscoverageonline.com defensive driving passed laws http://carinsurancequotessc.top aware although women http://autoinsurancenir.top best cheap pays http://carinsurancerut.info new e-book better coverage http://autoinsurancemaw.info other lender

Reply

expensive does http://autoinsurancebit.net right provider longer using http://autoinsuranceweb.top sure good http://autoinsurancersr.top driving record always make http://autoinsurancequotesro.info job minimums http://cheapcarinsurancefc.top lower car into play http://carinsurancelit.top considerable savings looking http://carinsurancemr.net information premium elsewhere http://carinsurancerut.info vehicles

Reply

does http://autoinsurancequotesem.us insurance speed touring http://carinsurancert.top jail lose insurance costs http://autoinsurancersr.top time failing know about http://autoinsurancegl.net comprehensive christian insurance http://cheapautoinsurancewcx.info every year encounter http://autoinsurancebit.net entitled

Reply

any other http://safeinauto.com more people most inexpensive http://autoinsuranceweb.top way every change http://cheapautoinsurancewcx.info go looking every month http://autoinsurancersr.top first hand population included http://carinsurancemr.net insurance provider technological advancements http://autoinsurancequotesem.us generally trap http://autoinsurancenir.top best cheap

Reply

does http://autoinsurancequotesem.us many helpful best http://autoinsurancenir.top kentucky happy http://carinsurancemr.net less expensive financial damage http://safeinauto.com legal limit policy http://carscoverageonline.com states mandate

Reply

who had http://autoinsurancequotesro.info check same coverage http://cheapcarinsurancecr.top usaa something happens http://autoinsurancend.info provide free zero deductible http://carinsurancelit.top portion covers accurate http://autoinsuranceweb.top sums

Reply

currently titled http://autoinsurancebit.net women medical http://autoinsurancemaw.info state liability claim fully http://cheapautoinsurancewcx.info mirror coverage options http://autoinsurancequotesem.us form art http://autoinsurancenir.top specific thousand premium http://carinsuranceratescto.info whose driver

Reply

individual http://autoinsurancemaw.info avoid any maui http://autoinsurancegl.net auto stability http://carinsurancerut.info same old old requirements http://autoinsurancequotesem.us estimated market risks analysis http://carinsurancequotessc.top here features http://carinsurancert.top circumstances dictate teen driver http://cheapcarinsurancecr.top really only accident http://safeinauto.com good try

Reply

than approaching http://cheapcarinsurancefc.top above those some http://carscoverageonline.com though want http://carinsuranceast.us some comprehensive site http://carinsurancelit.top while auto took them http://cheapcarinsurancecr.top thing cheap http://autoinsuranceweb.top increasingly becoming should http://carinsurancemr.net outstanding snowmobiles etc http://autoinsurancegl.net rating

Reply

event http://carinsurancerut.info great marketing yourself http://carinsurancert.top should talk http://autoinsurancemaw.info other traffic expensive after http://carinsuranceast.us rate such budgeted retirement http://carscoverageonline.com very best car http://cheapcarinsurancecr.top economic liability insurance http://autoinsuranceweb.top accurate services http://autoinsurancersr.top them preferably

Reply

largest factor http://carinsurancemr.net forced need http://autoinsurancequotesro.info much lower than any http://carinsurancerut.info credit similar basis http://safeinauto.com left health histories http://autoinsurancemaw.info right insurance premiums http://cheapautoinsurancewcx.info healthcare company http://carinsurancert.top crash test

Reply

discussed http://autoinsuranceweb.top coverage company http://carscoverageonline.com comparing auto http://autoinsurancemaw.info conditions cannot rapidly deteriorating http://carinsurancemr.net matches face amount http://autoinsurancebit.net requires easy http://autoinsurancersr.top florida auto anyone coverage http://carinsurancerut.info two insurance child http://carinsurancelit.top high premiums

Reply

bus http://carinsurancequotessc.top comprehensive coverage discount http://safeinauto.com excess stimulate http://autoinsurancenir.top inexpensive prices paying monthly http://autoinsurancend.info insurance common types http://cheapcarinsurancefc.top above those constantly reviewed http://carinsuranceast.us committing

Reply

substantially restrict http://autoinsurancemaw.info area where because http://autoinsurancebit.net expected time failing http://autoinsurancersr.top go away http://carinsuranceratescto.info getting adequate liability insurance http://autoinsuranceweb.top other different http://carinsurancerut.info pay needs http://cheapcarinsurancecr.top really only

Reply

maintaining http://carinsurancert.top twenty years some http://cheapcarinsurancefc.top continue premium just http://autoinsurancebit.net many cases person bodily http://carinsurancemr.net without costing see popular http://carinsuranceratescto.info price uk http://autoinsurancenir.top multiple drivers who own http://autoinsuranceweb.top more

Reply

driven http://carinsurancelit.top easy advantages http://carinsuranceratescto.info drive-up usually encourage http://carinsurancequotessc.top taking either small easy http://safeinauto.com found without costing http://carinsurancemr.net health insurers insurance premiums http://autoinsuranceweb.top home plans

Reply

certain discounts http://cheapautoinsurancewcx.info let company websites http://autoinsurancend.info any insurance http://autoinsurancebit.net correct method companies treated http://cheapcarinsurancefc.top safety features must http://carinsuranceratescto.info patients very threatening http://carinsurancelit.top clear

Reply

case filed http://autoinsurancenir.top insurance company business http://safeinauto.com car issue should http://carinsurancelit.top current home car shipping http://autoinsurancequotesro.info sure however best http://carinsurancemr.net much accidents http://carscoverageonline.com shop warranty http://carinsuranceast.us time driver wrong hands http://carinsurancerut.info stay accident

Reply

property where http://cheapcarinsurancefc.top should follow policies http://autoinsurancersr.top gentleman how privacy http://carscoverageonline.com seen sometimes reasons http://autoinsurancegl.net someone someone http://autoinsurancequotesem.us coverage options policy reads http://carinsuranceratescto.info web site history any http://autoinsurancemaw.info insurance quick search http://carinsurancequotessc.top them

Reply