Categorized | Android News

Tasker location and network tracking, time card part 2 – Android customization

Tasker time Location maps and planes

Last week we took to Tasker to build the first parts of an automated time card in our Android customization series. We will continue the project this week, building on last week by adding location aware autonomy to the project.

As a quick recap, last week we built Tasker Tasks that write our log in and log out times to a file, popped up on screen our total time spent for the day and teased further ideas for what to do with, and how to track, our accumulated data.

This week we take to Tasker again, we will build two triggers, the first will be a location aware trigger, and the second will look at attaching to a specific WiFi network.

Before we begin

It will be easiest to follow along today if you have already gone through the steps in part 1 of this project. That said, the concepts we are about to learn can be used for any other purpose that you would like. I’ll have some examples of alternatives as we go.

Tasker – Google Play StoreYou will need Tasker installed on your Android device to proceed. Eventually you folks are going to ask me to stop including this message, but for now, Tasker is $ 2.99 in the Google Play Store.

Tracking your time with Tasker, part 2

As mentioned, we are continuing our project from last week, building the automation aspects of our time card project. Many of you expressed that tracking your time was just depressing, I can respect that, so I want you to understand that what we are about to learn today goes well beyond the time card project. Automatic actions based on your physical location and/or the WiFi networks you are connected to can be used for any number of projects.

Tasker Time card

Enough of the explanations, let’s get started.

Location aware trigger

Google has made it possible within Android to utilize your device location data. The idea is to allow an app to take specific actions automatically based on where you are. Tasker is able to utilize this feature.

Here’s what we are going to do: we will allow Tasker to tap into our device location, then, when we enter a specified location, we fire our work started Task. As you might guess, we have our work stopped Task fire when we then leave that designated location.

Fire up Tasker and familiarize yourself with your time card project. You’ll just need to know which Tasks you are going to want to fire on entrance and exit of your work/school/other location.

Start a new Profile. If asked, name it appropriately, I’ll call mine “WorkGPSCoord”.

Tasker time card Location profile

Select Location.

You are greeted with a warning about how GPS driven location tracking can be a serious battery drain. We hear you, Tasker, we’ll use an alternative solution later in this tutorial.

Locate your desired location on the map, be sure to zoom in as far as you can to be as accurate as possible. Note that you can choose to use Net and/or GPS location tracking and can narrow your effective radius between 30m and, crazily enough, 999km. I suspect 30m, 50m or even 100m radius will be sufficient for your needs.

Once dialed in, simply hit the system Back button to save and exit the map selection.

Now you are asked to provide a name for this map location, you call yours what you need, I’ll just call mine “Work“.

Tasker time card Location profile 2

Finally, choose your time card log in Task from the list, you’ll recall that mine was called “TimeCardLogIn.”

Now that you have your log in firing when you arrive into your desired location, we need to add an exit Task to automatically write your log off data when you leave the area.

Long press on the name of your log in Task in the Profile.

Choose Add Exit Task.

Select your work log off Task, mine was called “TimeCardlogOut.”

That is how easy it is, folks. I urge you to think outside the box on this one, I am sure you can think of many more projects that could utilize your physical location to automatically perform an action. If you need an idea, why not install the Secure Settings plugin so that you can turn off device lock when you are at home, and have it lock when you are away from home.

WiFi network connection trigger

The title may have been a tad confusing there, sorry, what we are looking at doing is simple, when your device connects to a specific WiFi network, automatically run our time card log in Task. And when we then disconnect from that WiFi network, log out. Sounds easy.

Fire up a new Profile in Tasker. If required, give it an appropriate name, I’ll call mine “WorkWiFiLogIn”.

Tasker time card WiFi SSID profile

Choose State.

Choose Net.

Choose WiFi Connected.

Under SSID, enter the exact name of your work/school/other WiFi network. This is easiest done when you are at the location, as you can then hit that magnifying glass icon to see and select the SSID of any WiFi connections in the area.

You can see also that you have the option to choose a WiFi router MAC address or IP address. Depending on the complexity of your WiFi network, you may need to dial this in as specific as possible, but I suspect you’ll be good enough using just the SSID for now.

Hit the system Back button to save the WiFi settings.

Tasker time card WiFi SSID profile 2

Select your time card log in Task.

As before, now long press on the log in task.

Choose Add Exit Task.

Choose your time card log out Task.

Done!

Tasker time card WiFi SSID profile final

While this puts an end to the time card project, I hope that you see how much you could do with the WiFi and SSID controls. One of the more common uses is to adjust volumes based on network, i.e. muting ringer at work, turning up media volume when you are home and more.

Others will actually turn off things like Bluetooth, Cell connection, change security settings, wallpaper and much more when they connect to specific networks.

What’s next

Tasker time Location map Google

Utilizing location services for Tasker really can be a battery drain, be sure to spend some time tweaking the project for optimal efficiency. From there, consider other conditions to limit when the Profile is active.

If you are dedicated to using your GPS for this or any other Tasker project, consider building another Tasker project altogether that turns on and off your GPS antenna, or even turn on and off the location based Tasker Profile when appropriate. If your normal routine allows you to, simply turn off GPS while you sleep and while you are not likely to be in motion. If you have a dock or NFC in your car, you could use that to turn on and off GPS as well.

Tasker time Location map planes

I know most of you dislike the idea of a work time card – thinking outside the box, I’ve used this basic project to track my time at the gym, driving time, sleep time (including naps) and more. I’ll admit that I like analytics, keeping track of my time and the things in it.

I’ll also admit that this project was built more for the fun of it than anything. It is a great project to learn a few concepts to take to other projects, but for those of you that aren’t fans of the trouble shooting required, yes, there are dedicated apps for almost every Tasker project I build.

Next week

I hope this time card project was a helpful addition to our Android customization series for you. We will continue with Tasker next week, heading back into variables – we’ve previously explored some variable management, this time we’ll look at some variable manipulation.

As far as having your device automatically perform actions when you enter or exit specific physical locations, what are your favorite actions to take?

Android Authority

This post was written by:

- who has written 427 posts on Android Zoone.


Contact the author

Leave a Reply

Android Developers

Service Unavailable.

Related Sites

PHVsPjxsaT48c3Ryb25nPndvb19hZHNfcm90YXRlPC9zdHJvbmc+IC0gdHJ1ZTwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX2ltYWdlXzE8L3N0cm9uZz4gLSBodHRwOi8vd3d3LmxvY2FsY2xpY2twYXJ0bmVycy5jb20vYWZmaWxpYXRlX2FkL2FmZmlsaWF0ZV9iYW5uZXJfMTI1eDEyNS5wbmc8L2xpPjxsaT48c3Ryb25nPndvb19hZF9pbWFnZV8yPC9zdHJvbmc+IC0gaHR0cDovL21vYmlsZWJhbm5lcmNyZWF0b3IuY29tL2Jhbm5lcnMvMTI1eDEyNS5naWY8L2xpPjxsaT48c3Ryb25nPndvb19hZF9pbWFnZV8zPC9zdHJvbmc+IC0gaHR0cDovL3d3dy53b290aGVtZXMuY29tL2Fkcy8xMjV4MTI1Yy5qcGc8L2xpPjxsaT48c3Ryb25nPndvb19hZF9pbWFnZV80PC9zdHJvbmc+IC0gaHR0cDovL3d3dy53b290aGVtZXMuY29tL2Fkcy8xMjV4MTI1ZC5qcGc8L2xpPjxsaT48c3Ryb25nPndvb19hZF9tcHVfYWRzZW5zZTwvc3Ryb25nPiAtIDxzY3JpcHQgaWQ9XCJtTkNDXCIgbGFuZ3VhZ2U9XCJqYXZhc2NyaXB0XCI+ICBtZWRpYW5ldF93aWR0aD1cJzMwMFwnOyAgbWVkaWFuZXRfaGVpZ2h0PSBcJzI1MFwnOyAgbWVkaWFuZXRfY3JpZD1cJzc4NDE5OTM3NFwnOyAgPC9zY3JpcHQ+ICA8c2NyaXB0IGlkPVwibU5TQ1wiIHNyYz1cIi8vY29udGV4dHVhbC5tZWRpYS5uZXQvbm1lZGlhbmV0LmpzP2NpZD04Q1U4Q1U0R1FcIiBsYW5ndWFnZT1cImphdmFzY3JpcHRcIj48L3NjcmlwdD4gPC9saT48bGk+PHN0cm9uZz53b29fYWRfbXB1X2Rpc2FibGU8L3N0cm9uZz4gLSBmYWxzZTwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX21wdV9pbWFnZTwvc3Ryb25nPiAtIGh0dHA6Ly93d3cud29vdGhlbWVzLmNvbS9hZHMvMzAweDI1MGEuanBnPC9saT48bGk+PHN0cm9uZz53b29fYWRfbXB1X3VybDwvc3Ryb25nPiAtIGh0dHA6Ly93d3cud29vdGhlbWVzLmNvbTwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX3RvcF9hZHNlbnNlPC9zdHJvbmc+IC0gPHNjcmlwdCBpZD1cIm1OQ0NcIiBsYW5ndWFnZT1cImphdmFzY3JpcHRcIj4gIG1lZGlhbmV0X3dpZHRoPVwnNDY4XCc7ICBtZWRpYW5ldF9oZWlnaHQ9IFwnNjBcJzsgIG1lZGlhbmV0X2NyaWQ9XCc3ODAzNDc4NTFcJzsgIDwvc2NyaXB0PiAgPHNjcmlwdCBpZD1cIm1OU0NcIiBzcmM9XCIvL2NvbnRleHR1YWwubWVkaWEubmV0L25tZWRpYW5ldC5qcz9jaWQ9OENVOENVNEdRXCIgbGFuZ3VhZ2U9XCJqYXZhc2NyaXB0XCI+PC9zY3JpcHQ+IDwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX3RvcF9kaXNhYmxlPC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19hZF90b3BfaW1hZ2U8L3N0cm9uZz4gLSBodHRwOi8vd3d3Lndvb3RoZW1lcy5jb20vYWRzLzQ2OHg2MGEuanBnPC9saT48bGk+PHN0cm9uZz53b29fYWRfdG9wX3VybDwvc3Ryb25nPiAtIGh0dHA6Ly93d3cud29vdGhlbWVzLmNvbTwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX3VybF8xPC9zdHJvbmc+IC0gaHR0cDovL3NpdGlvbmV0LmxvY2FsY2xpay5ob3AuY2xpY2tiYW5rLm5ldDwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX3VybF8yPC9zdHJvbmc+IC0gaHR0cDovL3NpdGlvbmV0Lm1vYmliYW5uZXIuaG9wLmNsaWNrYmFuay5uZXQ8L2xpPjxsaT48c3Ryb25nPndvb19hZF91cmxfMzwvc3Ryb25nPiAtIGh0dHA6Ly93d3cud29vdGhlbWVzLmNvbTwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX3VybF80PC9zdHJvbmc+IC0gaHR0cDovL3d3dy53b290aGVtZXMuY29tPC9saT48bGk+PHN0cm9uZz53b29fYWx0X3N0eWxlc2hlZXQ8L3N0cm9uZz4gLSBncmVlbi5jc3M8L2xpPjxsaT48c3Ryb25nPndvb19hcmNoaXZlX2V4Y2VycHQ8L3N0cm9uZz4gLSB0cnVlPC9saT48bGk+PHN0cm9uZz53b29fYXV0aG9yPC9zdHJvbmc+IC0gdHJ1ZTwvbGk+PGxpPjxzdHJvbmc+d29vX2F1dG9faW1nPC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19ibG9nX2V4Y2VycHQ8L3N0cm9uZz4gLSB0cnVlPC9saT48bGk+PHN0cm9uZz53b29fY2Fyb3VzZWxfaGVpZ2h0PC9zdHJvbmc+IC0gMjkyPC9saT48bGk+PHN0cm9uZz53b29fY3VzdG9tX2Nzczwvc3Ryb25nPiAtIDwvbGk+PGxpPjxzdHJvbmc+d29vX2N1c3RvbV9mYXZpY29uPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fY3VzdG9tX3VwbG9hZF90cmFja2luZzwvc3Ryb25nPiAtIGE6MDp7fTwvbGk+PGxpPjxzdHJvbmc+d29vX2V4Y2x1ZGU8L3N0cm9uZz4gLSBhOjM6e2k6MDtpOjMwO2k6MjtpOjU3O2k6NDtpOjUxO308L2xpPjxsaT48c3Ryb25nPndvb19leGNsdWRlX3ZpZGVvPC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19mZWF0dXJlZF9jYXRlZ29yeTwvc3Ryb25nPiAtIEFuZHJvaWQ8L2xpPjxsaT48c3Ryb25nPndvb19mZWF0X2VudHJpZXM8L3N0cm9uZz4gLSAzPC9saT48bGk+PHN0cm9uZz53b29fZmVlZGJ1cm5lcl9pZDwvc3Ryb25nPiAtIDwvbGk+PGxpPjxzdHJvbmc+d29vX2ZlZWRidXJuZXJfdXJsPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fZnJhbWV3b3JrX3ZlcnNpb248L3N0cm9uZz4gLSA1LjUuMzwvbGk+PGxpPjxzdHJvbmc+d29vX2dvb2dsZV9hbmFseXRpY3M8L3N0cm9uZz4gLSA8L2xpPjxsaT48c3Ryb25nPndvb19ob21lPC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19ob21lX3RodW1iX2hlaWdodDwvc3Ryb25nPiAtIDU3PC9saT48bGk+PHN0cm9uZz53b29faG9tZV90aHVtYl93aWR0aDwvc3Ryb25nPiAtIDEwMDwvbGk+PGxpPjxzdHJvbmc+d29vX2ltYWdlX3NpbmdsZTwvc3Ryb25nPiAtIGZhbHNlPC9saT48bGk+PHN0cm9uZz53b29fbG9nbzwvc3Ryb25nPiAtIGh0dHA6Ly9hbmRyb2lkLXpvb25lLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAxMy8wNS9sb2dvX2FuZHJvaWRfem9vbmUzLnBuZzwvbGk+PGxpPjxzdHJvbmc+d29vX21hbnVhbDwvc3Ryb25nPiAtIGh0dHA6Ly93d3cud29vdGhlbWVzLmNvbS9zdXBwb3J0L3RoZW1lLWRvY3VtZW50YXRpb24vZ2F6ZXR0ZS1lZGl0aW9uLzwvbGk+PGxpPjxzdHJvbmc+d29vX29wdGlvbnM8L3N0cm9uZz4gLSBhOjUyOntzOjE4OiJ3b29fYWx0X3N0eWxlc2hlZXQiO3M6OToiZ3JlZW4uY3NzIjtzOjg6Indvb19sb2dvIjtzOjc1OiJodHRwOi8vYW5kcm9pZC16b29uZS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMTMvMDUvbG9nb19hbmRyb2lkX3pvb25lMy5wbmciO3M6MTM6Indvb190ZXh0dGl0bGUiO3M6NToiZmFsc2UiO3M6MTg6Indvb19jdXN0b21fZmF2aWNvbiI7czowOiIiO3M6MjA6Indvb19nb29nbGVfYW5hbHl0aWNzIjtzOjA6IiI7czoxODoid29vX2ZlZWRidXJuZXJfdXJsIjtzOjA6IiI7czoxNzoid29vX2ZlZWRidXJuZXJfaWQiO3M6MDoiIjtzOjE0OiJ3b29fY3VzdG9tX2NzcyI7czowOiIiO3M6MTc6Indvb19zaG93X2Nhcm91c2VsIjtzOjQ6InRydWUiO3M6MjE6Indvb19mZWF0dXJlZF9jYXRlZ29yeSI7czo3OiJBbmRyb2lkIjtzOjE2OiJ3b29fZmVhdF9lbnRyaWVzIjtzOjE6IjMiO3M6Mjc6Indvb19zbGlkZXJfbWFnYXppbmVfZXhjbHVkZSI7czo0OiJ0cnVlIjtzOjE2OiJ3b29fc2xpZGVyX3NmYWRlIjtzOjU6ImZhbHNlIjtzOjE2OiJ3b29fc2xpZGVyX2NmYWRlIjtzOjU6ImZhbHNlIjtzOjE2OiJ3b29fc2xpZGVyX3NwZWVkIjtzOjM6IjAuNiI7czoxODoid29vX3NsaWRlcl90aW1lb3V0IjtzOjE6IjYiO3M6MjQ6Indvb19zbGlkZXJfY29udGVudF9zcGVlZCI7czozOiIwLjYiO3M6MTk6Indvb19jYXJvdXNlbF9oZWlnaHQiO3M6MzoiMjkyIjtzOjg6Indvb19ob21lIjtzOjU6ImZhbHNlIjtzOjE2OiJ3b29fYmxvZ19leGNlcnB0IjtzOjQ6InRydWUiO3M6MTk6Indvb19hcmNoaXZlX2V4Y2VycHQiO3M6NDoidHJ1ZSI7czoxMDoid29vX2F1dGhvciI7czo0OiJ0cnVlIjtzOjE0OiJ3b29fc2hvd192aWRlbyI7czo0OiJ0cnVlIjtzOjE3OiJ3b29fZXhjbHVkZV92aWRlbyI7czo1OiJmYWxzZSI7czoxODoid29vX3ZpZGVvX2NhdGVnb3J5IjtzOjY6IlZpZGVvcyI7czoxODoid29vX3dwdGh1bWJfbm90aWNlIjtzOjA6IiI7czoyMjoid29vX3Bvc3RfaW1hZ2Vfc3VwcG9ydCI7czo0OiJ0cnVlIjtzOjE0OiJ3b29fcGlzX3Jlc2l6ZSI7czo0OiJ0cnVlIjtzOjE3OiJ3b29fcGlzX2hhcmRfY3JvcCI7czo0OiJ0cnVlIjtzOjEwOiJ3b29fcmVzaXplIjtzOjQ6InRydWUiO3M6MTI6Indvb19hdXRvX2ltZyI7czo1OiJmYWxzZSI7czoyMDoid29vX2hvbWVfdGh1bWJfd2lkdGgiO3M6MzoiMTAwIjtzOjIxOiJ3b29faG9tZV90aHVtYl9oZWlnaHQiO3M6MjoiNTciO3M6MTU6Indvb190aHVtYl93aWR0aCI7czozOiIxMDAiO3M6MTY6Indvb190aHVtYl9oZWlnaHQiO3M6MjoiNTciO3M6MTY6Indvb19pbWFnZV9zaW5nbGUiO3M6NToiZmFsc2UiO3M6MTY6Indvb19zaW5nbGVfd2lkdGgiO3M6MzoiMjUwIjtzOjE3OiJ3b29fc2luZ2xlX2hlaWdodCI7czozOiIxODAiO3M6MTM6Indvb19yc3NfdGh1bWIiO3M6NToiZmFsc2UiO3M6MTg6Indvb19hZF90b3BfZGlzYWJsZSI7czo1OiJmYWxzZSI7czoxODoid29vX2FkX3RvcF9hZHNlbnNlIjtzOjMxMzoiPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0NCmdvb2dsZV9hZF9jbGllbnQgPSAiY2EtcHViLTEzOTYwMzUxNzk5NDgyNjkiOw0KLyogNDY4eDYwYW5kcm9pZHpvb25lICovDQpnb29nbGVfYWRfc2xvdCA9ICIxOTM1ODA4Njc3IjsNCmdvb2dsZV9hZF93aWR0aCA9IDQ2ODsNCmdvb2dsZV9hZF9oZWlnaHQgPSA2MDsNCi8vLS0+DQo8L3NjcmlwdD4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ig0Kc3JjPSJodHRwOi8vcGFnZWFkMi5nb29nbGVzeW5kaWNhdGlvbi5jb20vcGFnZWFkL3Nob3dfYWRzLmpzIj4NCjwvc2NyaXB0PiI7czoxNjoid29vX2FkX3RvcF9pbWFnZSI7czo0MDoiaHR0cDovL3d3dy53b290aGVtZXMuY29tL2Fkcy80Njh4NjBhLmpwZyI7czoxNDoid29vX2FkX3RvcF91cmwiO3M6MjQ6Imh0dHA6Ly93d3cud29vdGhlbWVzLmNvbSI7czoxNDoid29vX2Fkc19yb3RhdGUiO3M6NDoidHJ1ZSI7czoxNDoid29vX2FkX2ltYWdlXzEiO3M6NDE6Imh0dHA6Ly93d3cud29vdGhlbWVzLmNvbS9hZHMvMTI1eDEyNWEuanBnIjtzOjEyOiJ3b29fYWRfdXJsXzEiO3M6MjQ6Imh0dHA6Ly93d3cud29vdGhlbWVzLmNvbSI7czoxNDoid29vX2FkX2ltYWdlXzIiO3M6NDE6Imh0dHA6Ly93d3cud29vdGhlbWVzLmNvbS9hZHMvMTI1eDEyNWIuanBnIjtzOjEyOiJ3b29fYWRfdXJsXzIiO3M6MjQ6Imh0dHA6Ly93d3cud29vdGhlbWVzLmNvbSI7czoxNDoid29vX2FkX2ltYWdlXzMiO3M6NDE6Imh0dHA6Ly93d3cud29vdGhlbWVzLmNvbS9hZHMvMTI1eDEyNWMuanBnIjtzOjEyOiJ3b29fYWRfdXJsXzMiO3M6MjQ6Imh0dHA6Ly93d3cud29vdGhlbWVzLmNvbSI7czoxNDoid29vX2FkX2ltYWdlXzQiO3M6NDE6Imh0dHA6Ly93d3cud29vdGhlbWVzLmNvbS9hZHMvMTI1eDEyNWQuanBnIjtzOjEyOiJ3b29fYWRfdXJsXzQiO3M6MjQ6Imh0dHA6Ly93d3cud29vdGhlbWVzLmNvbSI7fTwvbGk+PGxpPjxzdHJvbmc+d29vX3Bpc19oYXJkX2Nyb3A8L3N0cm9uZz4gLSB0cnVlPC9saT48bGk+PHN0cm9uZz53b29fcGlzX3Jlc2l6ZTwvc3Ryb25nPiAtIHRydWU8L2xpPjxsaT48c3Ryb25nPndvb19wb3N0X2ltYWdlX3N1cHBvcnQ8L3N0cm9uZz4gLSB0cnVlPC9saT48bGk+PHN0cm9uZz53b29fcmVzaXplPC9zdHJvbmc+IC0gdHJ1ZTwvbGk+PGxpPjxzdHJvbmc+d29vX3Jzc190aHVtYjwvc3Ryb25nPiAtIGZhbHNlPC9saT48bGk+PHN0cm9uZz53b29fc2hvcnRuYW1lPC9zdHJvbmc+IC0gd29vPC9saT48bGk+PHN0cm9uZz53b29fc2hvd19jYXJvdXNlbDwvc3Ryb25nPiAtIHRydWU8L2xpPjxsaT48c3Ryb25nPndvb19zaG93X3ZpZGVvPC9zdHJvbmc+IC0gdHJ1ZTwvbGk+PGxpPjxzdHJvbmc+d29vX3NpbmdsZV9oZWlnaHQ8L3N0cm9uZz4gLSAxODA8L2xpPjxsaT48c3Ryb25nPndvb19zaW5nbGVfd2lkdGg8L3N0cm9uZz4gLSAyNTA8L2xpPjxsaT48c3Ryb25nPndvb19zbGlkZXJfY2ZhZGU8L3N0cm9uZz4gLSBmYWxzZTwvbGk+PGxpPjxzdHJvbmc+d29vX3NsaWRlcl9jb250ZW50X3NwZWVkPC9zdHJvbmc+IC0gMC42PC9saT48bGk+PHN0cm9uZz53b29fc2xpZGVyX21hZ2F6aW5lX2V4Y2x1ZGU8L3N0cm9uZz4gLSB0cnVlPC9saT48bGk+PHN0cm9uZz53b29fc2xpZGVyX3NmYWRlPC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19zbGlkZXJfc3BlZWQ8L3N0cm9uZz4gLSAwLjY8L2xpPjxsaT48c3Ryb25nPndvb19zbGlkZXJfdGltZW91dDwvc3Ryb25nPiAtIDY8L2xpPjxsaT48c3Ryb25nPndvb190YWJzPC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb190ZXh0dGl0bGU8L3N0cm9uZz4gLSBmYWxzZTwvbGk+PGxpPjxzdHJvbmc+d29vX3RoZW1lbmFtZTwvc3Ryb25nPiAtIEdhemV0dGU8L2xpPjxsaT48c3Ryb25nPndvb190aHVtYl9oZWlnaHQ8L3N0cm9uZz4gLSA1NzwvbGk+PGxpPjxzdHJvbmc+d29vX3RodW1iX3dpZHRoPC9zdHJvbmc+IC0gMTAwPC9saT48bGk+PHN0cm9uZz53b29fdmlkZW9fY2F0ZWdvcnk8L3N0cm9uZz4gLSBWaWRlb3M8L2xpPjxsaT48c3Ryb25nPndvb193cHRodW1iX25vdGljZTwvc3Ryb25nPiAtIDwvbGk+PC91bD4=