wow
--
You received this message because you are subscribed to the Google
Groups Android Developers group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options,
On some Motorola devices, I get an NPE when calling
LicenseChecker.onDestroy():
android.os.MessageQueue.enqueueMessage:183
android.os.Looper.quit:173
com.android.vending.licensing.LicenseChecker.onDestroy:281
Example device:
Motorola CLIQ / DEXT
model: MB200
display: CUPCAKE.1.4.8
Also:
how a pirated app can be updated 5 minutes after a submission ?
I actually have seen a repeatable case where the Market app will start
tracking an app as if it were purchased when it wasn't. Back when my
G1 was running Android 1.5, I had one of my paid apps installed
already, then tried to buy
The sample App (android-sdk-windows\market_licensing\sample) red lines
on :
import com.android.vending.licensing.AESObfuscator;
import com.android.vending.licensing.LicenseChecker;
import com.android.vending.licensing.LicenseCheckerCallback;
import
Oh, OK, found it now. I have to reference the library project to get
rid of import red squiggles.
On Sep 3, 11:15 am, Droid rod...@gmail.com wrote:
The sample App (android-sdk-windows\market_licensing\sample) red lines
on :
import com.android.vending.licensing.AESObfuscator;
import
Have you had a look here?
http://developer.android.com/guide/publishing/licensing.html
Greets
Nicholas
On 3 Sep., 12:15, Droid rod...@gmail.com wrote:
The sample App (android-sdk-windows\market_licensing\sample) red lines
on :
import com.android.vending.licensing.AESObfuscator;
import
In a nutshell, what I'm hoping LVL can grow into is a system that
packages license verification in a way that is really really hard to
remove. It seems like we've got half of that equation nicely under
way with LVL in its current form.
The sort of anti-piracy system you're after is
I have implemented the LVL to send event on private webservices each
time the market respond an NOT ALLOWED.
Five minutes after the submission to android market, some events were
throwed.
How can this be possible ?
how a pirated app can be updated 5 minutes after a submission ?
On 27 août,
I suggest you start a new thread for this issue; this sticky topic
is better used for generalized discussion of LVL, not debugging of
individual issues.
String
On Aug 26, 5:31 am, Feelsocial feelsocial.andr...@gmail.com wrote:
Hi String , i have uploaded and saved my new licensed version 2 of
Had time to take a look at this raw data. You can see results here if
you're interested. Some things surprised me: http://bit.ly/bSaoBe.
On Aug 25, 1:46 pm, keyeslabs keyes...@gmail.com wrote:
Um there is a culture of piracy *everywhere*. :}
If you are saying that because you think most
HI Trevor Johns. i am testing in AVD of froyo 2.2 (Google API) and
login with my market account in google account. The question is that
when i changed the my app version from 1 to 2, google licensing server
not allowing me to use app. Where when i again change it to 2 from 1,
its allowin me to use
On Tue, Aug 24, 2010 at 8:59 PM, Carl Whalley
carl.whal...@googlemail.comwrote:
I'm curious about something regarding signing. If someone does as this
hack shows and patches the apk, they need to resign the new build. If
they then put this version out and its widely distributed, can't
Google
On Tue, Aug 24, 2010 at 1:20 PM, keyeslabs keyes...@gmail.com wrote:
LVL is flawed in the same ways that AAL (and other similar approaches)
is flawed. Google could do better, and I hope that they will.
Obfuscation isn't really going to do much to improve the situation.
What is really needed
One thing that would help would be to remove the dependency on the Android
Market app and open up the licensing system to support sales outside of the
Android Market. The aim here is for devs to have a simple way to support
Android devices that don't have the Market app, not to avoid the 30% cut.
On Wed, Aug 25, 2010 at 12:51 AM, Mark Carter mjc1...@googlemail.comwrote:
One thing that would help would be to remove the dependency on the Android
Market app and open up the licensing system to support sales outside of the
Android Market. The aim here is for devs to have a simple way to
On 25 August 2010 10:31, Dianne Hackborn hack...@android.com wrote:
Er I was referring to helping protect apps against piracy. :}
I would hope LVL supporting more devices should help against piracy ;)
On 25 August 2010 10:31, Dianne Hackborn hack...@android.com wrote:
And as far as
That's clearer, thanks.
Presumably if you upload apps hacked this way to the Market, your
account will get pulled. And since this is the only way of getting
apps into the Market it remains safe?
On Aug 25, 8:36 am, Dianne Hackborn hack...@android.com wrote:
On Tue, Aug 24, 2010 at 8:59 PM, Carl
LVL is flawed in the same ways that AAL (and other similar approaches)
is flawed. Google could do better, and I hope that they will.
I think it's wrong to focus on what Google could or could not do here.
Did you read my reply to your original mail? If so what did you think
of it?
All copy
I don't completely buy the assertion that PR wasn't part of the
equation in designing, announcing, blogging, and writing press
releases about LVL. Piracy is one of the biggest thorns in the side
of Android at the moment. If Google doesn't recognize that as both a
technical AND a PR problem,
All copy protection systems have two parts - something they bind to,
and the obfuscation that makes it harder to rip that binding out.
This is basically correct, if you assume that things like encryption
are bundled under the umbrella of obfuscation.
So there are obviously two ways copy
On Wed, Aug 25, 2010 at 1:56 AM, Mark Carter mjc1...@googlemail.com wrote:
Yes, I want a simple way to reach out to a market that is likely to be tens
(hundreds?) of millions of users in a couple of years' time.
I see lots of tablets out there that don't run Android Market but run my
app
On Wed, Aug 25, 2010 at 8:13 AM, keyeslabs keyes...@gmail.com wrote:
Again, my contention is that something stronger than obfuscation is
needed to lock the APK down. OS-level APK encryption support in
addition to license verification. I would like to see us get to the
point that users must
On Wed, Aug 25, 2010 at 5:25 AM, keyeslabs keyes...@gmail.com wrote:
I don't completely buy the assertion that PR wasn't part of the
equation in designing, announcing, blogging, and writing press
releases about LVL. Piracy is one of the biggest thorns in the side
of Android at the moment.
25.08.2010 21:04, Dianne Hackborn пишет:
If there are other suggestions that will actually make things harder
without doing that, I would certainly like to hear them.
Um, make the Market App side of LVL check that the application making
LVL calls is signed with the same key as the .apk
Sorry if things are coming off that way Dianne. I'm passionate about
this topic (obviously), but I only admire and respect you (in
particular) and the Android team in general. You've saved my butt
more than once. :)
I'm invested here. I'm all in on Android and success of the platform
matters
I'm not sure how this would make code modification impossible?
You patch the application, make it always return a yes, it was ok to
the licensing service inside the apk. Application then requests
authentication, it fails, failure comes to application which still
continues to say yes, it was ok.
Yeah there we are. As far as I can see, the next step in preventing piracy
is to not allow users to install apps outside of Market at all.
We're not going to do that.
That's not what I was picturing. Isn't there some way that we could
do both? Apps downloaded from market could be encrypted
Um there is a culture of piracy *everywhere*. :}
If you are saying that because you think most people are pirating Android
apps... I think your perception of things is probably pretty off. I know
lots of people who have Android devices, and none of them even think of
turning on the option
Encrypting the .apk is like forward-locking; it is easily defeated on
rooted phones.
On 08/25/10 13:33, keyeslabs wrote:
That's not what I was picturing. Isn't there some way that we could
do both? Apps downloaded from market could be encrypted and only
decrypted by the OS when used (in
How about allowing the dev to specify response int values in the Dev
Console?
The recent crack script would (probably) not be able to work out which
code means what. Therefore, a pirate would have to crack each app
individually.
That's right isn't it? The automation only works because LICENSED
Isn't that only because the APK gets decrypted and written to disk
as opposed to only being done in transient memory as the application
is launched? There's an application startup overhead obviously to
decrypting the APK on-the-fly, but seems like a much higher bar than
just cp
Maybe this is a dumb question, but what are some ROI benchmarks for
piracy prevention (for Android apps)?
For example, if a publisher spends X dollars on piracy prevention
(however effective it may be) the revenue goes up (or down) by Y
dollars.
Just curious if piracy prevention is more
Tim,
Removing or stubbing calls to licensing service inside Market App is
difficult, since those calls use encrypted responses. This is not
trivial to mess with.
The LVL library and the application, or the communication between them,
is the easier point of attack. In fact, the original
I agree and I don't see how people are missing this valuable point you
make Mark.
Currently we are at: crackers must modify the program code to allow
piracy
From here there are two ways to make piracy more difficult:
A) Make secure, non-rooted phones reject apps so that even a cracked
app won't
Hi String , i have uploaded and saved my new licensed version 2 of my
application on market. And testing on my emulator but its still not
allowing. My version 2 is still not published? Moreover, application
licensed version 1 was running fine.Help me plzz..
Thanks,
On Aug 21, 2:29 pm, String
Seems like I was unfortunately very right on this prediction. Just
off by a few days :).
LVL is flawed in the same ways that AAL (and other similar approaches)
is flawed. Google could do better, and I hope that they will.
Obfuscation isn't really going to do much to improve the situation.
What
I'm curious about something regarding signing. If someone does as this
hack shows and patches the apk, they need to resign the new build. If
they then put this version out and its widely distributed, can't
Google see the certificate used to resign it, compare with the
original and just revoke the
Hi all,
I am facing the problem in licensing of my old published paid apps.
Basically i have paid app which is published by version code 1. I
implemented the license code on it, it working fine to me. Licensing
server giving the response or allow that you can use it. But once i
changed version
I think you need to upload an APK with versioncode=2 to your Market
console. You don't need to publish it, but you do need to upload and
save that version before LVL will give a correct response for it.
String
On Aug 21, 9:15 am, Feelsocial feelsocial.andr...@gmail.com wrote:
Hi all,
I am
Thx String 4 reply. I will try your recomendation . I will upload my new
updated version app on market but not publish it. And then test, the
licensing server response. I hope its will work fine to me...
On Sat, Aug 21, 2010 at 2:29 PM, String sterling.ud...@googlemail.comwrote:
I think you
very good
--
You received this message because you are subscribed to the Google
Groups Android Developers group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more
Do you obfuscate the URLs that contact the Android Market Licensing
server? If you do not, the first thing that the crackers will do is
replace your server URLs with bogus ones with a a hex editor, and your
whole system is dead in the water. Please advise.
On Jul 27, 1:53 pm, Trevor Johns
Um, no. You should read up on public key cryptography.
Their substitute server will not work, because it will not have the
proper private key corresponding to the expected certificate. So to
get started, they'll have to also replace the public certificate that
it's expecting. That would be in the
I put license check in my app and wanted to test it
I use device with myem...@gmail.com
From documentation
This response will be sent to devices using myem...@gmail.com or the
Test accounts listed above for applications you have uploaded to
Market. Additionally, this account (but not the Test
Perhaps, but you didn't answer my question. Anybody else?
Also, in the included sample app, the license check is triggered
during onCreate. This means that when I click Buy App, go to the
market, then immediately hit the back button, it goes back to the app
and doesn't check again (at least not
As stated earlier obfuscating the app doesn't help much. It's easy to
find the license check in the byte code and change it, so the app is
not really protected. There is still much work left for the developer
to find a solution to prevent the app from working if it is not signed
with the original
On Jul 31, 11:21 pm, keyeslabs keyes...@gmail.com wrote:
Speaking as someone who has traveled this road before with my own
implementation of basically the same approach, obfuscation will be
critical. With AAL, it took about three days for someone to crack the
app.
There are various ways to
Will there eventually be a way to obfuscate automatically during .apk
export in eclipse? The ant method looks relatively easy to setup, but
I'd like to know if this is coming. (Especially since it's /strongly
recommended/ in the docs)
--
You received this message because you are subscribed to
And even if you skip the request refund step, we'll see a large number of
license checks for a single account in our logs.
So, not only can we disable that account, but we'll also know who was
responsible. :P
--
Trevor Johns
Google Developer Programs, Android
http://developer.android.com
On
Thanks, guys. Of course, my UK bank accounts are currently pointing to
my HK address, but I guess I could change them back, or open another
UK based account.
Anyway, I will let my vent stand on behalf of everyone else in the
world who doesn't have that option!
Hate to say it, but if Apple can do
On a slightly different note - in case anyone was wondering...if a
user has paid for an app and then inserts a sim card from a non-paid
app country (so that he can no longer see paid apps on the Market),
the LVL still correctly returns that the user is licensed. I was
expecting this, but its good
On Tue, Aug 3, 2010 at 11:17 AM, James W jpbwebs...@gmail.com wrote:
Hate to say it, but if Apple can do it, why can't Google...?
Google don't want?
Tom
--
You received this message because you are subscribed to the Google
Groups Android Developers group.
To post to this group, send email
On Jul 31, 11:21 pm, keyeslabs keyes...@gmail.com wrote:
... someone to crack the
app. The process looks something like this: decompile the apk using
a freely available open source tool, find the code that invokes the
licensing check, skip it, recompile and repackage the apk.
Isn't there is
As soon as you request a refund then the license server will return
NOT_LICENSED for that Google account.
On 3 August 2010 12:37, andreas.walt...@googlemail.com
andreas.walt...@googlemail.com wrote:
On Jul 31, 11:21 pm, keyeslabs keyes...@gmail.com wrote:
... someone to crack the
app. The
Yes absolutely.
Not really the ideal place to vent, but the delay in rolling out to
other countries is beyond ridiculous and incredibly frustrating.
It has got to be self defeating also.
I moved from England to Hong Kong, so now I cannot buy apps, I cannot
sell my apps, because HK is not
AFAIK, whether you can sell apps or not is dictated by the country of your
Google Developer account.
So if your Google Developer account (or is that Google account?) is
registered in the UK, you can move to HK and still sell paid apps.
On 2 August 2010 10:00:20 UTC+2, James W
I can confirm that. If you are a resident of country where you can
sell your apps from, meaning you have an address and a bank account,
you can still sell apps. It's not like Google is checking your IP
address when you are uploading your app.
On Aug 2, 4:10 pm, Mark Carter
I will bump that thread
http://groups.google.com/group/android-developers/browse_thread/thread/97e2ba40f258f21b
until I will get a reply.
Thanks :)
On Jul 27, 7:55 pm, Trevor Johns trevorjo...@google.com wrote:
Android fans,
For those of you who haven't already heard through our blog, we've
It was the obfuscation messing up this line in LicenceChecker:
new Intent(ILicensingService.class.getName()),
I changed this to
new Intent(ILicensingService.Stub.getDescriptor()),
and added a correspinding static function in ILicensingService.
Since the docs recommend obfuscation, I think the
This sounds great, but is completely useless to me as Im in Ireland
and no paid apps available to my potential users, so I've gone ahead
and made my own user registration and payment system based around
PayPal. A complete waste of my time, but what can ya do?
From Reto Meier:
Unfortunately I
Speaking as someone who has traveled this road before with my own
implementation of basically the same approach, obfuscation will be
critical. With AAL, it took about three days for someone to crack the
app. The process looks something like this: decompile the apk using
a freely available open
Just noticed this. Excellent news! Thanks.
Now to find some time to explore it... :)
--
You received this message because you are subscribed to the Google
Groups Android Developers group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group,
Building with eclipse it seems OK, but via Ant I get:
I/LicenseChecker( 2115): Binding to licensing service.
E/LicenseChecker( 2115): Could not bind to service.
W/ActivityManager( 85): Unable to start service Intent { act=av }:
not found
Any hints ?
Pent
--
You received this message because
Now don't get me wrong, I am sure Google did a better job of it than
ARM did, but I learned to hate licensing servers from the bitter
experience of using ARM's licensing server for their development
tools. We had continual problems with false negatives, i.e, the
program refused to run because it
same problem here:
http://groups.google.com/group/android-developers/browse_thread/thread/8f09bd1993d14f13
On Jul 30, 5:24 pm, Pent tas...@dinglisch.net wrote:
Building with eclipse it seems OK, but via Ant I get:
I/LicenseChecker( 2115): Binding to licensing service.
E/LicenseChecker( 2115):
if you are using an emulator, make sure you use the Google APIs
add-on for API 8 (2.2) in revision 2.
Instructions for the setup:
http://developer.android.com/guide/publishing/licensing.html#acct-signin
On Fri, Jul 30, 2010 at 8:24 AM, Pent tas...@dinglisch.net wrote:
Building with eclipse it
On Wed, Jul 28, 2010 at 9:24 AM, Joseph Earl joseph.w.e...@gmail.comwrote:
Any chance you guys are working a solution for large applications that
will work across Android 1.5-2.1?
No those platforms are already exist; it would make no sense to modify them
to support new features.
Currently
On Fri, Jul 30, 2010 at 12:01 PM, Dianne Hackborn hack...@android.comwrote:
On Wed, Jul 28, 2010 at 9:24 AM, Joseph Earl joseph.w.e...@gmail.comwrote:
Any chance you guys are working a solution for large applications that
will work across Android 1.5-2.1?
No those platforms are already
On Fri, Jul 30, 2010 at 3:08 PM, Shane Isbell shane.isb...@gmail.com wrote:
Does this mean that apps installed on SD card are not going to be able to
store private data (Context.MODE_PRIVATE) on device?
AFAIK, the app's local files (e.g., getFilesDir()) is still in the
on-board flash, not on
On Fri, Jul 30, 2010 at 12:08 PM, Shane Isbell shane.isb...@gmail.comwrote:
Does this mean that apps installed on SD card are not going to be able to
store private data (Context.MODE_PRIVATE) on device?
No that is a totally different thing. All installed apps have a private
data directory,
With the new LVL we can have only one build for Free trial and for
Full version,
it's really find your adjectives that we need to upload two
identical copyes of the same software with different package name,
don't you think?
On Jul 28, 6:01 pm, Joseph Earl joseph.w.e...@gmail.com wrote:
Not
ProGuard obfuscates your compiled code.
The Obfuscator referred to in the Licensing Server doc obfuscates
licensing info retrieved from AppMarket.
On Jul 28, 7:44 am, sblantipodi perini.dav...@dpsoftware.org wrote:
I haven't understood if using this library external obfuscation
(proguard for
Great stuff,
I'll certainly be implementing this as soon as I can.
Thanks :)
On Jul 27, 6:55 pm, Trevor Johns trevorjo...@google.com wrote:
Android fans,
For those of you who haven't already heard through our blog, we've
just launched the Android Market licensing service:
I'm getting NOT_MARKET_MANAGED when using my own gmail account on my
N1 and using Respond normally. The app is a paid app on the Android
Market. The only difference could be the app signature (I'm debugging
so not doing production signing). My gmail account was used to publish
the app and I have
Seems that this call in AESObfuscator is taking a few seconds:
SecretKey tmp = factory.generateSecret(keySpec);
--
You received this message because you are subscribed to the Google
Groups Android Developers group.
To post to this group, send email to android-developers@googlegroups.com
To
Really required in the Republic of Ireland too, Android devices are
getting quite popular here and the time has come to open the paid
market
On Jul 27, 9:24 pm, Sebastian Rodriguez srodrig...@gmail.com wrote:
I agree with Anton Persson. When will Google realize that opening the paid
market to
Ok, just figured this out. The version code of the app I was testing was not
one that was recognised by the Android Market. So, it is the combination of
package name and version code that needs to have been published.
Its sort of explained in line 2317 of the docs :)
Once an application is
Please open Android Market to more countries. This is really cool
feature but currently useless for me.
And also I would be happy to use this for in-app purchase if possible.
Tom
On 28 čnc, 11:32, Mark Carter mjc1...@googlemail.com wrote:
Ok, just figured this out. The version code of the app
Hi all...
When you bought my software you bought a license, this license can be
ported from android to other platform like Symbian, Winmob, bada,
JavaME, Blackberry...
Every customers who bought my license is registered on our database,
(email address and device id),
this let me generate a new
Excellent!
Thank you
On Jul 28, 6:44 am, sblantipodi perini.dav...@dpsoftware.org wrote:
Hi all...
When you bought my software you bought a license, this license can be
ported from android to other platform like Symbian, Winmob, bada,
JavaME, Blackberry...
Every customers who bought my
Not with this system as far as I'm aware - users will have to purchase
a new license when changing to a phone running a different OS.
You'll have to continue using your own system if you want this kind of
functionality.
On Jul 28, 12:44 pm, sblantipodi perini.dav...@dpsoftware.org wrote:
Hi
Any chance you guys are working a solution for large applications that
will work across Android 1.5-2.1?
Currently the only secure way of doing it is by targeting Froyo only
(using 8 as minSdkVersion) - however it will be at least a year, more
likely 3, before this an acceptable solution to
Joseph thanks for your reply, using my own system means that I can't
sell my software on the market.
Am I right?
On Jul 28, 6:01 pm, Joseph Earl joseph.w.e...@gmail.com wrote:
Not with this system as far as I'm aware - users will have to purchase
a new license when changing to a phone running a
Not necessarily.
Rather than force users to go to your site to purchase a license code/
key, you'd need to allow users to purchase from Android Market as
usual, and then ask them to enter the Google Checkout code when the
app first launches.
Your own system can then deal with verifying the
A third-party obfuscator is not strictly required, but it certainly adds an
additional level of security. We even mention it in our developer docs:
The LVL provides a full Obfuscator implementation called AESObfuscator that
uses AES encryption to obfuscate data. You can use AESObfuscator in your
I just posted my toughts on the integration process in a separate
thread on this forum, as I didn't want to hijack this one. It might
be interesting read for some people:
http://groups.google.com/group/android-developers/browse_thread/thread/d54f65beff467b26#
--
You received this message
Excellent! Now all we need is a subscription payment model and we can
actually make some money!
-John Coryat
--
You received this message because you are subscribed to the Google
Groups Android Developers group.
To post to this group, send email to android-developers@googlegroups.com
To
That, and the ability for folks to actually access the paid-for apps...
Sweden, like probably many countries still, have no access to the paid
apps... When will Google understand that this is critical for them to keep
the momentum? If the status quo persists, people we give up, pack their bags
excellent, is there some code sample on how to use this new apis?
On Jul 27, 8:42 pm, Kostya Vasilyev kmans...@gmail.com wrote:
What's great is that it's available on all Android versions starting
with 1.5 (i.e. it's not a Froyo only feature).
-- Kostya
27.07.2010 21:55, Trevor Johns пишет:
Yes. There's a code sample that's bundled as part of the library download.
You'll find it in $SDK_ROOT/market_licensing/sample.
--
Trevor Johns
Google Developer Programs, Android
http://developer.android.com
On Tue, Jul 27, 2010 at 11:55 AM, sblantipodi
perini.dav...@dpsoftware.orgwrote:
I saw that entry, and have a question.
What will happen if the user doesn't have network connectivity? Many
users turn of data traffic when they travel to other countries, but
the probably still want to use the licensed applications.
On 27 Juli, 19:55, Trevor Johns trevorjo...@google.com
Developers can chose whether to implement response caching or not.
Assuming caching is enabled, we require a network connection for the first
license check, but then the user can go offline for a period of time before
requiring another license check.
--
Trevor Johns
Google Developer Programs,
Is caching implemented in the library or in the Market app?
I am concerned about potential abuse, such as replacing cache contents.
--
Kostya Vasilyev -- http://kmansoft.wordpress.com
28.07.2010 0:23 пользователь Trevor Johns trevorjo...@google.com
написал:
Developers can chose whether to
It's implemented in the library.
Cache contents are protected using a swappable Obfuscator class. We include
a standard obfuscator implementation that encrypts cache data using AES-256
and an application-specific key, along with a copy of the device ID. This
prevents tampering with cache data, or
OK, great. Thanks for the info.
--
Kostya Vasilyev -- http://kmansoft.wordpress.com
28.07.2010 0:55 пользователь Trevor Johns trevorjo...@google.com
написал:
It's implemented in the library.
Cache contents are protected using a swappable Obfuscator class. We include
a standard obfuscator
I agree with Anton Persson. When will Google realize that opening the paid
market to all the other countries is crucial for the market environment :(
We don't have access to them here in Singapore either.
But this is a major step already, let's hope for even better!
Seb
On 28 July 2010 04:19,
I haven't understood if using this library external obfuscation
(proguard for example) is needed
for security reason or if we can avoid using external obfuscator, it's
quite a pain using proguard in netbeans plus android sdk.
On Jul 27, 10:24 pm, Sebastian Rodriguez srodrig...@gmail.com wrote:
I
I just wanted to say a big thank you!
Stephen
On Jul 27, 10:55 am, Trevor Johns trevorjo...@google.com wrote:
Android fans,
For those of you who haven't already heard through our blog, we've
just launched the Android Market licensing service:
98 matches
Mail list logo