[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#857435: unblock: pidgin/2.12.0-1



On Sat, 11 Mar 2017 at 05:07:25 +0000, dequis wrote:
> - The diff includes translation updates. That makes it bigger, but it's
>   still mostly due to the protocol removals (lots of translatable
>   strings removed).

Here is a somewhat less monstrous diff, generated with:

apt-get source pidgin=2.11.0-3
apt-get source pidgin
git diff -M --irreversible-delete pidgin-2.11.0 pidgin-2.12.0 | filterdiff -x '*.po' -x '*/configure' -x '*/Makefile.in' -x '*/pidgin.spec' -x '*/pidgin-installer.nsi' -x '*/POTFILES.in'

(git diff --irreversible-delete makes it print a header for files
that were completely deleted, but not the content.)

I hope this helps,
    S
diff --git a/pidgin-2.11.0/ChangeLog b/pidgin-2.12.0/ChangeLog
index 6e5717d..a89c9b8 100644
--- a/pidgin-2.11.0/ChangeLog
+++ b/pidgin-2.12.0/ChangeLog
@@ -1,6 +1,48 @@
 Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul
 
-version 2.11.0 (06/21/16):
+version 2.12.0 (03/09/2017):
+	libpurple:
+	* Fix an out of bounds memory read in purple_markup_unescape_entity.
+	  CVE-2017-2640
+	* Fix use of uninitialised memory if running non-debug-enabled versions of glib
+	* Updated AIM dev and dist ID's to new ones that were assigned by AOL.
+	* TLS certificate verification now uses SHA-256 checksums.
+	* Fixed SASL external auth for Freenode.
+	* Removed the MSN protocol plugin. It has been unusable and dormant for some
+	  time. MSNP18 has been discontinued and the protocol plugin would require a
+	  large update to start working again. See: http://ismsndeadyet.com/ The
+	  third-party Pidgin SkypeWeb plugin, however, should provide enough
+	  functionality as a replacement if people still want to use MSN:
+	  https://github.com/EionRobb/skype4pidgin/tree/master/skypeweb
+	* Removed Mxit protocol plugin. The service was closed at the end of
+	  September 2016. See
+	  https://pidgin.im/pipermail/devel/2016-September/024078.htm
+	* Removed the MySpaceIM protocol plugin. The service has been defunct for a
+	  long time. (#15356)
+	* Remove the Yahoo! protocol plugin. Yahoo has completely
+	  reimplemented their protocol, so this version is no longer operable as
+	  of August 5th, 2016:
+	  https://yahoo.tumblr.com/post/145715934739/q2-2016-progress-report-on-our-product
+	  A new protocol plugin has been written to support the new protocol.
+	  It can be found here: https://github.com/EionRobb/funyahoo-plusplus
+	  This also removes support for Yahoo! Japan. According to
+	  http://messenger.yahoo.co.jp/ the service ended March 26th, 2014.
+	* Remove the Facebook (XMPP) account option. According to
+	  https://developers.facebook.com/docs/chat the XMPP Chat API service
+	  ended April 30th, 2015. A new protocol plugin has been written,
+	  using a different method, to support Facebook. It can be found at
+	  https://github.com/dequis/purple-facebook/wiki
+	* Fixed gnutls certificate validation errors that mainly affected google (Dequis)
+
+	General
+	* Replaced instances of d.pidgin.im with developer.pidgin.im and updated the
+	  urls to use https. (#17036)
+
+	IRC
+	* Fixed issue of messages being silently cut off at 500 characters. Large
+	  messages are now split into parts and sent one by one. (#4753)
+
+version 2.11.0 (06/21/2016):
 	General:
 	* 2.10.12 was accidentally released with new additions to the API and
 	  should have been released as 2.11.0.  Unfortunately, we did not catch
@@ -23,14 +65,14 @@ version 2.11.0 (06/21/16):
 	  don't support rich text
 	* Fix a potential crash while exiting pidgin
 
-	AIM:
-	* Add support for the newer kerberos-based authentication of AIM 8.x
-
 	Windows-Specific Changes:
 	* Use getaddrinfo for DNS to enable IPv6 (#1075)
 	* Updates to dependencies:
 		* NSS 3.24 and NSPR 4.12.
 
+	AIM:
+	* Add support for the newer kerberos-based authentication of AIM 8.x
+
 	Bonjour
 	* Fixed building on Mac OSX (Patrick Cloke) (#16883)
 
@@ -75,7 +117,7 @@ version 2.11.0 (06/21/16):
 	* Fix a remote out-of-bounds read.  Discovered by Yves Younan of Cisco
 	  Talos.  (TALOS-CAN-0143)
 
-version 2.10.12 (12/31/15):
+version 2.10.12 (12/31/2015):
 	General:
 	* purple-url-handler now works with Python 3.x (Daniël van Eeden)
 	* Fixed an issue where transient startup statuses could be deleted
@@ -96,7 +138,7 @@ version 2.10.12 (12/31/15):
 	Gadu-Gadu:
 	* Updated internal libgadu to version 1.12.1.
 
-version 2.10.11 (11/23/14):
+version 2.10.11 (11/23/2014):
 	General:
 	* Fix handling of Self-Signed SSL/TLS Certificates when using the NSS
 	  plugin (#16412)
@@ -114,7 +156,7 @@ version 2.10.11 (11/23/14):
 	* Fail early when buddy list is unavailable instead of wasting bandwidth
 	  endlessly re-trying.
 
-version 2.10.10 (10/22/14):
+version 2.10.10 (10/22/2014):
 	General:
 	* Check the basic constraints extension when validating SSL/TLS
 	  certificates. This fixes a security hole that allowed a malicious
@@ -361,7 +403,7 @@ version 2.10.7 (02/13/2013):
 	Yahoo!:
 	* Fix a double-free in profile/picture loading code. (Mihai Serban)
 	  (#15053)
-	* Fix retrieving server-side buddy aliases. (Catalin Salgu) (#15381)
+	* Fix retrieving server-side buddy aliases. (Catalin Salgau) (#15381)
 
 	Plugins:
 	* The Voice/Video Settings plugin supports using the sndio GStreamer
diff --git a/pidgin-2.11.0/ChangeLog.API b/pidgin-2.12.0/ChangeLog.API
index 4225138..44d18bc 100644
--- a/pidgin-2.11.0/ChangeLog.API
+++ b/pidgin-2.12.0/ChangeLog.API
@@ -1,5 +1,16 @@
 Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul
 
+version 2.12.0:
+	libpurple:
+		Added:
+		* PURPLE_MESSAGE_REMOTE_SEND in PurpleMessageFlags, to specify
+		messages like _SEND that were sent from another location.
+		* purple_certificate_get_fingerprint_sha256
+		* purple_certificate_compare_pubkeys
+		* PurpleCertificateScheme.get_fingerprint_sha256
+		* PurpleCertificateScheme.compare_pubkeys
+		* PURPLE_CERTIFICATE_SCHEME_HAS_FUNC
+
 version 2.11.0:
 	libpurple:
 		Added:
diff --git a/pidgin-2.11.0/Makefile.am b/pidgin-2.12.0/Makefile.am
index cba9df2..5879311 100644
--- a/pidgin-2.11.0/Makefile.am
+++ b/pidgin-2.12.0/Makefile.am
@@ -50,8 +50,8 @@ version-check:
 	head ChangeLog.API | grep "^version $(PACKAGE_VERSION):$$" >/dev/null
 
 # Ensure we're working from a tag...
-	test x`hg log -r "tag($(PACKAGE_VERSION))" --template "{node}"` = x`hg id -i --debug`
-# ... and have no changes in the working copy. (this isn't really necessary with hg because hg id appends a "+")
+	test x`hg log -r "tag($(PACKAGE_VERSION))" --template "{node}"` = x`hg log -r . -T '{node}'`
+# ... and have no changes in the working copy.
 	test "x`hg st -mard`" = x
 
 sign-packages: dist
@@ -82,7 +82,7 @@ endif
 # successfully; the rm -f ensures both
 package_revision_raw.txt: .FORCE
 	$(AM_V_GEN)REAL_BLDDIR=$$PWD/$(top_builddir); \
-	(hg --cwd $(srcdir) id -i --debug) 2>/dev/null >$@.new \
+	(hg --cwd $(srcdir) log -r . -T {node}) 2>/dev/null >$@.new \
 	|| rm -f $@.new
 	$(AM_V_at)if test -f $@.new; then \
 		if ! diff $@ $@.new > /dev/null; then \
diff --git a/pidgin-2.11.0/README b/pidgin-2.12.0/README
index 196300a..ea812c8 100644
--- a/pidgin-2.11.0/README
+++ b/pidgin-2.12.0/README
@@ -4,7 +4,7 @@ See AUTHORS and COPYRIGHT for the list of contributors.
 
 libpurple is a library intended to be used by programmers seeking
 to write an IM client that connects to many IM networks.  It supports
-AIM, ICQ, XMPP, MSN and Yahoo!, among others.
+AIM, ICQ, and XMPP, among others.
 
 Pidgin is a graphical IM client written in C which uses the GTK+
 toolkit.
diff --git a/pidgin-2.11.0/configure.ac b/pidgin-2.12.0/configure.ac
index b20406f..b8acd2a 100644
--- a/pidgin-2.11.0/configure.ac
+++ b/pidgin-2.12.0/configure.ac
@@ -43,9 +43,9 @@ AC_PREREQ([2.50])
 #
 # Make sure to update finch/libgnt/configure.ac with libgnt version changes.
 #
-m4_define([purple_lt_current], [11])
+m4_define([purple_lt_current], [12])
 m4_define([purple_major_version], [2])
-m4_define([purple_minor_version], [11])
+m4_define([purple_minor_version], [12])
 m4_define([purple_micro_version], [0])
 m4_define([purple_version_suffix], [])
 m4_define([purple_version],
@@ -1189,7 +1189,7 @@ if test "x$STATIC_PRPLS" != "x" -a "x$DYNAMIC_PRPLS" = "xall"; then
 fi
 
 if test "x$STATIC_PRPLS" = "xall" ; then
-	STATIC_PRPLS="bonjour gg irc jabber msn myspace mxit novell oscar sametime silc simple yahoo zephyr"
+	STATIC_PRPLS="bonjour gg irc jabber novell oscar sametime silc simple zephyr"
 fi
 if test "x$have_meanwhile" != "xyes" ; then
 	STATIC_PRPLS=`echo $STATIC_PRPLS | $sedpath 's/sametime//'`
@@ -1209,19 +1209,13 @@ extern_init=
 load_proto=
 for i in $STATIC_PRPLS ; do
 	dnl Ugly special case for "libsilcpurple.la":
-	dnl ... and Ugly special case for multi-protocol oscar and yahoo
+	dnl ... and Ugly special case for multi-protocol oscar
 	if test \( "x$i" = "xoscar" -o "x$i" = "xaim" -o "x$i" = "xicq" \) -a "x$static_oscar" != "xyes"; then
 		STATIC_LINK_LIBS="$STATIC_LINK_LIBS \$(top_builddir)/libpurple/protocols/oscar/liboscar.la"
 		extern_init="$extern_init extern gboolean purple_init_aim_plugin();"
 		extern_init="$extern_init extern gboolean purple_init_icq_plugin();"
 		load_proto="$load_proto purple_init_aim_plugin();"
 		load_proto="$load_proto purple_init_icq_plugin();"
-	elif test "x$i" = "xyahoo"; then
-		STATIC_LINK_LIBS="$STATIC_LINK_LIBS \$(top_builddir)/libpurple/protocols/yahoo/libymsg.la"
-		extern_init="$extern_init extern gboolean purple_init_yahoo_plugin();"
-		extern_init="$extern_init extern gboolean purple_init_yahoojp_plugin();"
-		load_proto="$load_proto purple_init_yahoo_plugin();"
-		load_proto="$load_proto purple_init_yahoojp_plugin();"
 	else
 		if test "x$i" = "xsilc"; then
 			STATIC_LINK_LIBS="$STATIC_LINK_LIBS \$(top_builddir)/libpurple/protocols/$i/lib${i}purple.la"
@@ -1238,9 +1232,6 @@ for i in $STATIC_PRPLS ; do
 		gg)			static_gg=yes ;;
 		irc)		static_irc=yes ;;
 		jabber)		static_jabber=yes ;;
-		msn)		static_msn=yes ;;
-		myspace)	static_myspace=yes ;;
-		mxit)		static_mxit=yes ;;
 		novell)		static_novell=yes ;;
 		oscar)		static_oscar=yes ;;
 		aim)		static_oscar=yes ;;
@@ -1249,7 +1240,6 @@ for i in $STATIC_PRPLS ; do
 		silc)		static_silc=yes ;;
 		silc10)		static_silc=yes ;;
 		simple)		static_simple=yes ;;
-		yahoo)		static_yahoo=yes ;;
 		zephyr)		static_zephyr=yes ;;
 		*)			echo "Invalid static protocol $i!!" ; exit 1 ;;
 	esac
@@ -1258,15 +1248,11 @@ AM_CONDITIONAL(STATIC_BONJOUR, test "x$static_bonjour" = "xyes")
 AM_CONDITIONAL(STATIC_GG, test "x$static_gg" = "xyes")
 AM_CONDITIONAL(STATIC_IRC, test "x$static_irc" = "xyes")
 AM_CONDITIONAL(STATIC_JABBER, test "x$static_jabber" = "xyes")
-AM_CONDITIONAL(STATIC_MSN, test "x$static_msn" = "xyes")
-AM_CONDITIONAL(STATIC_MYSPACE, test "x$static_myspace" = "xyes")
-AM_CONDITIONAL(STATIC_MXIT, test "x$static_mxit" = "xyes")
 AM_CONDITIONAL(STATIC_NOVELL, test "x$static_novell" = "xyes")
 AM_CONDITIONAL(STATIC_OSCAR, test "x$static_oscar" = "xyes")
 AM_CONDITIONAL(STATIC_SAMETIME, test "x$static_sametime" = "xyes" -a "x$have_meanwhile" = "xyes")
 AM_CONDITIONAL(STATIC_SILC, test "x$static_silc" = "xyes" -a "x$have_silc" = "xyes")
 AM_CONDITIONAL(STATIC_SIMPLE, test "x$static_simple" = "xyes")
-AM_CONDITIONAL(STATIC_YAHOO, test "x$static_yahoo" = "xyes")
 AM_CONDITIONAL(STATIC_ZEPHYR, test "x$static_zephyr" = "xyes")
 AC_SUBST(STATIC_LINK_LIBS)
 AC_DEFINE_UNQUOTED(STATIC_PROTO_INIT, $extern_init static void static_proto_init(void) { $load_proto },
@@ -1274,7 +1260,7 @@ AC_DEFINE_UNQUOTED(STATIC_PROTO_INIT, $extern_init static void static_proto_init
 
 AC_ARG_WITH(dynamic_prpls, [AC_HELP_STRING([--with-dynamic-prpls], [specify which protocols to build dynamically])], [DYNAMIC_PRPLS=`echo $withval | $sedpath 's/,/ /g'`])
 if test "x$DYNAMIC_PRPLS" = "xall" ; then
-	DYNAMIC_PRPLS="bonjour gg irc jabber msn myspace mxit novell oscar sametime silc simple yahoo zephyr"
+	DYNAMIC_PRPLS="bonjour gg irc jabber novell oscar sametime silc simple zephyr"
 fi
 if test "x$have_meanwhile" != "xyes"; then
 	DYNAMIC_PRPLS=`echo $DYNAMIC_PRPLS | $sedpath 's/sametime//'`
@@ -1295,9 +1281,6 @@ for i in $DYNAMIC_PRPLS ; do
 		gg)			dynamic_gg=yes ;;
 		irc)		dynamic_irc=yes ;;
 		jabber)		dynamic_jabber=yes ;;
-		msn)		dynamic_msn=yes ;;
-		myspace)	dynamic_myspace=yes ;;
-		mxit)		dynamic_mxit=yes ;;
 		novell)		dynamic_novell=yes ;;
 		null)		dynamic_null=yes ;;
 		oscar)		dynamic_oscar=yes ;;
@@ -1307,7 +1290,6 @@ for i in $DYNAMIC_PRPLS ; do
 		silc)		dynamic_silc=yes ;;
 		silc10)		dynamic_silc=yes ;;
 		simple)		dynamic_simple=yes ;;
-		yahoo)		dynamic_yahoo=yes ;;
 		zephyr)		dynamic_zephyr=yes ;;
 		*)			echo "Invalid dynamic protocol $i!!" ; exit 1 ;;
 	esac
@@ -1794,7 +1776,7 @@ AC_ARG_ENABLE(nss,
 	[enable_nss="$enableval"],
 	[enable_nss="yes"])
 
-msg_ssl="None. MSN, Yahoo!, Novell Groupwise and Google Talk will not work without GnuTLS or NSS. OpenSSL is NOT usable!"
+msg_ssl="None. Novell Groupwise and Google Talk will not work without GnuTLS or NSS. OpenSSL is NOT usable!"
 looked_for_gnutls="no"
 dnl #
 dnl # Check for GnuTLS if it's specified.
@@ -2205,19 +2187,19 @@ elif test "x$looked_for_gnutls" = "xyes" -a "x$looked_for_nss" = "xyes" -a "x$fo
 	AC_MSG_ERROR([
 Neither GnuTLS or NSS SSL development headers found.
 Use --disable-nss --disable-gnutls if you do not need SSL support.
-MSN, Yahoo!, Novell Groupwise and Google Talk will not work without GnuTLS or NSS. OpenSSL is NOT usable!
+Novell Groupwise and Google Talk will not work without GnuTLS or NSS. OpenSSL is NOT usable!
 ])
 elif test "x$looked_for_gnutls" = "xyes" -a "x$force_deps" = "xyes" ; then
 	AC_MSG_ERROR([
 GnuTLS SSL development headers not found.
 Use --disable-gnutls if you do not need SSL support.
-MSN, Yahoo!, Novell Groupwise and Google Talk will not work without SSL support.
+Novell Groupwise and Google Talk will not work without SSL support.
 ])
 elif test "x$looked_for_nss" = "xyes" -a "x$force_deps" = "xyes" ; then
 	AC_MSG_ERROR([
 NSS SSL development headers not found.
 Use --disable-nss if you do not need SSL support.
-MSN, Yahoo!, Novell Groupwise and Google Talk will not work without SSL support.
+Novell Groupwise and Google Talk will not work without SSL support.
 ])
 fi
 
@@ -2662,9 +2644,6 @@ AC_CONFIG_FILES([Makefile
 		   libpurple/protocols/gg/Makefile
 		   libpurple/protocols/irc/Makefile
 		   libpurple/protocols/jabber/Makefile
-		   libpurple/protocols/msn/Makefile
-		   libpurple/protocols/myspace/Makefile
-		   libpurple/protocols/mxit/Makefile
 		   libpurple/protocols/novell/Makefile
 		   libpurple/protocols/null/Makefile
 		   libpurple/protocols/oscar/Makefile
@@ -2672,7 +2651,6 @@ AC_CONFIG_FILES([Makefile
 		   libpurple/protocols/silc/Makefile
 		   libpurple/protocols/silc10/Makefile
 		   libpurple/protocols/simple/Makefile
-		   libpurple/protocols/yahoo/Makefile
 		   libpurple/protocols/zephyr/Makefile
 		   libpurple/tests/Makefile
 		   libpurple/purple.h
diff --git a/pidgin-2.11.0/debian/changelog b/pidgin-2.12.0/debian/changelog
index 5d2c289..4df24a7 100644
--- a/pidgin-2.11.0/debian/changelog
+++ b/pidgin-2.12.0/debian/changelog
@@ -1,3 +1,11 @@
+pidgin (2.12.0-1) unstable; urgency=high
+
+  * New upstream version 2.12.0
+    - Fixes malformed XML security issue (CVE-2017-2640).
+    - Removes Myspace, MSN, MXit, and Yahoo protocols
+
+ -- Ari Pollak <ari@debian.org>  Thu, 09 Mar 2017 21:07:27 -0500
+
 pidgin (2.11.0-3) unstable; urgency=medium
 
   * Build architecture-independent packages correctly (Closes: #838571)
diff --git a/pidgin-2.11.0/debian/control b/pidgin-2.12.0/debian/control
index e8a419d..97779a3 100644
--- a/pidgin-2.11.0/debian/control
+++ b/pidgin-2.12.0/debian/control
@@ -30,8 +30,8 @@ Description: multi-protocol instant messaging library
  libpurple is a library intended to be used by programmers seeking
  to write an IM client that connects to many IM networks.
  Currently supported are:
- AIM/ICQ, Yahoo!, MSN, IRC, Jabber/XMPP/Google Talk, Napster, Zephyr, Gadu-Gadu,
- Bonjour, Groupwise, Sametime, SIMPLE, MySpaceIM, and MXit.
+ AIM/ICQ, IRC, Jabber/XMPP/Google Talk, Napster, Zephyr, Gadu-Gadu,
+ Bonjour, Groupwise, Sametime, and SIMPLE.
  .
  Some extra packages are suggested to use increased functionality:
   * libtcl8.6, libtk8.6:
@@ -46,8 +46,8 @@ Suggests: ${shlibs:Suggests}
 Description: graphical multi-protocol instant messaging client
  Pidgin is a graphical, modular instant messaging client capable of using
  multiple networks at once. Currently supported are:
- AIM/ICQ, Yahoo!, MSN, IRC, Jabber/XMPP/Google Talk, Napster, Zephyr, Gadu-Gadu,
- Bonjour, Groupwise, Sametime, SIMPLE, MySpaceIM, and MXit.
+ AIM/ICQ, IRC, Jabber/XMPP/Google Talk, Napster, Zephyr, Gadu-Gadu,
+ Bonjour, Groupwise, Sametime, and SIMPLE.
  .
  Some extra packages are suggested to use increased functionality:
   * libsqlite3-0:
@@ -93,8 +93,8 @@ Suggests:  ${shlibs:Suggests}
 Description: text-based multi-protocol instant messaging client
  Finch is a text/console-based, modular instant messaging client capable of
  using multiple networks at once. Currently supported are:
- AIM/ICQ, Yahoo!, MSN, IRC, Jabber/XMPP/Google Talk, Napster, Zephyr, Gadu-Gadu,
- Bonjour, Groupwise, Sametime, SIMPLE, MySpaceIM, and MXit.
+ AIM/ICQ, IRC, Jabber/XMPP/Google Talk, Napster, Zephyr, Gadu-Gadu,
+ Bonjour, Groupwise, Sametime, and SIMPLE.
  .
  Some extra packages are suggested to use increased functionality:
   * libx11-6
diff --git a/pidgin-2.11.0/debian/libpurple0.symbols b/pidgin-2.12.0/debian/libpurple0.symbols
index 3f7eb4a..dc59e1a 100644
--- a/pidgin-2.11.0/debian/libpurple0.symbols
+++ b/pidgin-2.12.0/debian/libpurple0.symbols
@@ -1195,6 +1195,7 @@ libpurple.so.0 libpurple0 #MINVER#
  purple_certificate_check_signature_chain@Base 2.2.0
  purple_certificate_check_signature_chain_with_failing@Base 2.6.0
  purple_certificate_check_subject_name@Base 2.2.0
+ purple_certificate_compare_pubkeys@Base 2.12.0
  purple_certificate_copy@Base 2.2.0
  purple_certificate_copy_list@Base 2.2.0
  purple_certificate_destroy@Base 2.2.0
@@ -1205,6 +1206,7 @@ libpurple.so.0 libpurple0 #MINVER#
  purple_certificate_find_scheme@Base 2.2.0
  purple_certificate_find_verifier@Base 2.2.0
  purple_certificate_get_fingerprint_sha1@Base 2.2.0
+ purple_certificate_get_fingerprint_sha256@Base 2.12.0
  purple_certificate_get_handle@Base 2.2.0
  purple_certificate_get_issuer_unique_id@Base 2.2.0
  purple_certificate_get_pools@Base 2.2.0
diff --git a/pidgin-2.11.0/debian/rules b/pidgin-2.12.0/debian/rules
index daad5e1..86e4d55 100755
--- a/pidgin-2.11.0/debian/rules
+++ b/pidgin-2.12.0/debian/rules
@@ -18,7 +18,7 @@ DEB_CONFIGURE_EXTRA_FLAGS = --disable-gevolution \
 	    --enable-perl --with-zephyr=/usr --enable-dbus --enable-gnutls=no \
 	    --enable-nss=yes --enable-cyrus-sasl --enable-vv \
 	    --enable-tcl --enable-tk \
-	    --with-dynamic-prpls=bonjour,gg,irc,jabber,msn,myspace,mxit,novell,oscar,sametime,simple,yahoo,zephyr # disable silc
+	    --with-dynamic-prpls=bonjour,gg,irc,jabber,novell,oscar,sametime,simple,zephyr # disable silc
 ifeq ($(DEB_BUILD_ARCH_OS),linux)
   DEB_CONFIGURE_EXTRA_FLAGS += --enable-nm
 else
diff --git a/pidgin-2.11.0/doc/TCL-HOWTO.dox b/pidgin-2.12.0/doc/TCL-HOWTO.dox
index 43ea33a..3418817 100644
--- a/pidgin-2.11.0/doc/TCL-HOWTO.dox
+++ b/pidgin-2.12.0/doc/TCL-HOWTO.dox
@@ -124,7 +124,7 @@ purple::account username account
   (default) returns all accounts, while the @c -online option returns
   only those accounts which are online.
 
-  The @c protocol subcommand returns the protocol ID (e.g. "prpl-msn")
+  The @c protocol subcommand returns the protocol ID (e.g. "prpl-aim")
   for the given account.
 
   The @c username subcommand returns the username for the account
diff --git a/pidgin-2.11.0/doc/finch.1.in b/pidgin-2.12.0/doc/finch.1.in
index ad46b46..c79e5e7 100644
--- a/pidgin-2.11.0/doc/finch.1.in
+++ b/pidgin-2.12.0/doc/finch.1.in
@@ -30,11 +30,10 @@ Messaging client.
 .SH DESCRIPTION
 .PP
 \fBfinch\fR is a console-based modular messaging client based on libpurple
-which is capable of connecting to AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC,
+which is capable of connecting to AIM, XMPP, ICQ, IRC, SILC,
 Novell GroupWise, Lotus Sametime, Zephyr, Gadu-Gadu, and QQ all at once. It has
 many common features found in other clients, as well as many unique features.
-Finch is not endorsed by or affiliated with America Online, ICQ, Microsoft, or
-Yahoo.
+Finch is not endorsed by or affiliated with America Online, ICQ, or Microsoft.
 
 .SH OPTIONS
 The following options are provided by \fBfinch\fR using the standard GNU
diff --git a/pidgin-2.11.0/doc/pidgin.1.in b/pidgin-2.12.0/doc/pidgin.1.in
index 5edbc78..c8fbc9e 100644
--- a/pidgin-2.11.0/doc/pidgin.1.in
+++ b/pidgin-2.12.0/doc/pidgin.1.in
@@ -29,11 +29,10 @@ pidgin \- Instant Messaging client
 .SH DESCRIPTION
 .PP
 \fBpidgin\fR is a graphical modular messaging client based on libpurple
-which is capable of connecting to AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC,
+which is capable of connecting to AIM, XMPP, ICQ, IRC, SILC,
 Novell GroupWise, Lotus Sametime, Zephyr, Gadu-Gadu, and QQ all at once. It has
 many common features found in other clients, as well as many unique features.
-Pidgin is not endorsed by or affiliated with America Online, ICQ, Microsoft, or
-Yahoo.
+Pidgin is not endorsed by or affiliated with America Online, ICQ, or Microsoft.
 .PP
 Pidgin can be extended by plugins written in multiple programming languages and
 controlled through DBus or \fBpurple-remote\fR.
@@ -93,7 +92,7 @@ protocols, aliases are saved on the server but not visible to other users.  On
 other protocols, aliases are saved only locally.
 .TP
 .B Protocol
-A messaging service.  AIM, XMPP, MSN, Zephyr, etc. are protocols.  Others may
+A messaging service.  AIM, XMPP, Zephyr, etc. are protocols.  Others may
 call these "service types," "account types," "services," and so on.
 
 .SH BUDDY LIST
diff --git a/pidgin-2.11.0/finch/finch.c b/pidgin-2.12.0/finch/finch.c
index 659b2d4..7c6cd58 100644
--- a/pidgin-2.11.0/finch/finch.c
+++ b/pidgin-2.12.0/finch/finch.c
@@ -70,16 +70,11 @@ static GHashTable *finch_ui_get_info(void)
 		g_hash_table_insert(ui_info, "client_type", "console");
 
 		/*
-		 * This is the client key for "Finch."  It is owned by the AIM
-		 * account "markdoliner."  Please don't use this key for other
-		 * applications.  You can either not specify a client key, in
-		 * which case the default "libpurple" key will be used, or you
-		 * can try to register your own at the AIM or ICQ web sites
-		 * (although this functionality was removed at some point, it's
-		 * possible it has been re-added).  AOL's old key management
-		 * page is http://developer.aim.com/manageKeys.jsp
+		 * This is the client key for "Finch." Please don't use this
+		 * key for other applications.  You can not specify a client
+		 * key, in which case the default "libpurple" key will be used
 		 */
-		g_hash_table_insert(ui_info, "prpl-aim-clientkey", "ma19sqWV9ymU6UYc");
+		g_hash_table_insert(ui_info, "prpl-aim-clientkey", "ma18nmEklXMR7Cj_");
 
 		/*
 		 * This is the client key for "Pidgin."  It is owned by the AIM
@@ -102,7 +97,7 @@ static GHashTable *finch_ui_get_info(void)
 		 * don't use this for other applications.  You can just not
 		 * specify a distid and libpurple will use a default.
 		 */
-		g_hash_table_insert(ui_info, "prpl-aim-distid", GINT_TO_POINTER(1552));
+		g_hash_table_insert(ui_info, "prpl-aim-distid", GINT_TO_POINTER(1718));
 		g_hash_table_insert(ui_info, "prpl-icq-distid", GINT_TO_POINTER(1552));
 	}
 
diff --git a/pidgin-2.11.0/finch/gntpounce.c b/pidgin-2.12.0/finch/gntpounce.c
index c5fc691..ace8d7e 100644
--- a/pidgin-2.11.0/finch/gntpounce.c
+++ b/pidgin-2.12.0/finch/gntpounce.c
@@ -342,7 +342,7 @@ finch_pounce_editor_show(PurpleAccount *account, const char *name,
 	g_signal_connect(G_OBJECT(window), "destroy",
 					 G_CALLBACK(delete_win_cb), dialog);
 
-	gnt_box_add_widget(GNT_BOX(window), gnt_label_new_with_format(_("Pounce Who"), GNT_TEXT_FLAG_BOLD));
+	gnt_box_add_widget(GNT_BOX(window), gnt_label_new_with_format(_("Pounce on Whom"), GNT_TEXT_FLAG_BOLD));
 
 	/* Account: */
 	gnt_box_add_widget(GNT_BOX(window), gnt_label_new(_("Account:")));
diff --git a/pidgin-2.11.0/finch/gntsound.c b/pidgin-2.12.0/finch/gntsound.c
index c34c522..718b240 100644
--- a/pidgin-2.11.0/finch/gntsound.c
+++ b/pidgin-2.12.0/finch/gntsound.c
@@ -750,7 +750,7 @@ choose_cb(GntWidget *button, gpointer null)
 	FinchSoundEvent * event = &sounds[id];
 	char *path = NULL;
 
-	gnt_box_set_title(GNT_BOX(w), _("Select Sound File ..."));
+	gnt_box_set_title(GNT_BOX(w), _("Select Sound File..."));
 	gnt_file_sel_set_current_location(sel,
 			(event && event->file) ? (path = g_path_get_dirname(event->file))
 				: purple_home_dir());
diff --git a/pidgin-2.11.0/finch/gntstatus.c b/pidgin-2.12.0/finch/gntstatus.c
index c49d05d..67a522a 100644
--- a/pidgin-2.11.0/finch/gntstatus.c
+++ b/pidgin-2.12.0/finch/gntstatus.c
@@ -569,7 +569,7 @@ void finch_savedstatus_edit(PurpleSavedStatus *saved)
 	gnt_box_add_widget(GNT_BOX(window), entry);
 
 	gnt_box_add_widget(GNT_BOX(window), gnt_hline_new());
-	gnt_box_add_widget(GNT_BOX(window), gnt_label_new(_("Use different status for following accounts")));
+	gnt_box_add_widget(GNT_BOX(window), gnt_label_new(_("Use a different status for some accounts")));
 
 	edit->hash = g_hash_table_new(g_direct_hash, g_direct_equal);
 	edit->tree = tree = gnt_tree_new_with_columns(3);
@@ -602,8 +602,8 @@ void finch_savedstatus_edit(PurpleSavedStatus *saved)
 	g_object_set_data(G_OBJECT(button), "use", NULL);
 	g_signal_connect(G_OBJECT(button), "activate", G_CALLBACK(save_savedstatus_cb), edit);
 
-	/* Save & Use */
-	button = gnt_button_new(_("Save & Use"));
+	/* Save and Use */
+	button = gnt_button_new(_("Save and Use"));
 	gnt_box_add_widget(GNT_BOX(box), button);
 	g_object_set_data(G_OBJECT(button), "use", GINT_TO_POINTER(TRUE));
 	g_signal_connect(G_OBJECT(button), "activate", G_CALLBACK(save_savedstatus_cb), edit);
diff --git a/pidgin-2.11.0/finch/libgnt/gntkeys.c b/pidgin-2.12.0/finch/libgnt/gntkeys.c
index 01523f8..130ec01 100644
--- a/pidgin-2.11.0/finch/libgnt/gntkeys.c
+++ b/pidgin-2.12.0/finch/libgnt/gntkeys.c
@@ -211,7 +211,7 @@ const char *gnt_key_lookup(const char *key)
  */
 #define SIZE 256
 
-#define IS_END         1 << 0
+#define IS_END         (1 << 0)
 struct _node
 {
 	struct _node *next[SIZE];
diff --git a/pidgin-2.11.0/finch/plugins/gnttinyurl.c b/pidgin-2.12.0/finch/plugins/gnttinyurl.c
index 7e8a5b9..32a2e68 100644
--- a/pidgin-2.11.0/finch/plugins/gnttinyurl.c
+++ b/pidgin-2.12.0/finch/plugins/gnttinyurl.c
@@ -368,7 +368,7 @@ tinyurl_notify_uri(const char *uri)
 	 * may not always happen, e.g. when another plugin sets its own
 	 * notify_message. So tread carefully. */
 	win = purple_notify_message(NULL, PURPLE_NOTIFY_MSG_INFO, _("URI"), uri,
-			_("Please wait while TinyURL fetches a shorter URL ..."), NULL, NULL);
+			_("Please wait while TinyURL fetches a shorter URL..."), NULL, NULL);
 	if (!GNT_IS_WINDOW(win) || !g_object_get_data(G_OBJECT(win), "info-widget"))
 		return win;
 
@@ -471,7 +471,7 @@ static PurplePluginInfo info =
 	N_("TinyURL"),
 	DISPLAY_VERSION,
 	N_("TinyURL plugin"),
-	N_("When receiving a message with URL(s), use TinyURL for easier copying"),
+	N_("Shorten URLs in messages using TinyURL"),
 	"Richard Nelson <wabz@whatsbeef.net>",
 	PURPLE_WEBSITE,
 	plugin_load,
diff --git a/pidgin-2.11.0/install-sh b/pidgin-2.12.0/install-sh
index 377bb86..756420d 100755
--- a/pidgin-2.11.0/install-sh
+++ b/pidgin-2.12.0/install-sh
@@ -345,34 +345,41 @@ do
 	    # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
 	    ;;
 	  *)
+            # $RANDOM is not portable (e.g. dash);  use it when possible to
+            # lower collision chance
 	    tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
-	    trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+	    trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0
 
+	     # As "mkdir -p" follows symlinks and we work in /tmp possibly;  so
+	     # create the $tmpdir first (and fail if unsuccessful) to make sure
+	     # that nobody tries to guess the $tmpdir name.
 	    if (umask $mkdir_umask &&
-		exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+		$mkdirprog $mkdir_mode "$tmpdir" &&
+		exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
 	    then
 	      if test -z "$dir_arg" || {
 		   # Check for POSIX incompatibilities with -m.
 		   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
 		   # other-writable bit of parent directory when it shouldn't.
 		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
-		   ls_ld_tmpdir=`ls -ld "$tmpdir"`
+		   test_tmpdir="$tmpdir/a"
+		   ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
 		   case $ls_ld_tmpdir in
 		     d????-?r-*) different_mode=700;;
 		     d????-?--*) different_mode=755;;
 		     *) false;;
 		   esac &&
-		   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
-		     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+		   $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
+		     ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
 		     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
 		   }
 		 }
 	      then posix_mkdir=:
 	      fi
-	      rmdir "$tmpdir/d" "$tmpdir"
+	      rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
 	    else
 	      # Remove any dirs left behind by ancient mkdir implementations.
-	      rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+	      rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
 	    fi
 	    trap '' 0;;
 	esac;;
diff --git a/pidgin-2.11.0/libpurple/account.c b/pidgin-2.12.0/libpurple/account.c
index 0bd5b12..75f3bac 100644
--- a/pidgin-2.11.0/libpurple/account.c
+++ b/pidgin-2.12.0/libpurple/account.c
@@ -535,35 +535,6 @@ schedule_accounts_save(void)
  * Reading from disk                                                 *
  *********************************************************************/
 static void
-migrate_yahoo_japan(PurpleAccount *account)
-{
-	/* detect a Yahoo! JAPAN account that existed prior to 2.6.0 and convert it
-	 * to use the new prpl-yahoojp.  Also remove the account-specific settings
-	 * we no longer need */
-
-	if(purple_strequal(purple_account_get_protocol_id(account), "prpl-yahoo")) {
-		if(purple_account_get_bool(account, "yahoojp", FALSE)) {
-			const char *serverjp = purple_account_get_string(account, "serverjp", NULL);
-			const char *xferjp_host = purple_account_get_string(account, "xferjp_host", NULL);
-
-			g_return_if_fail(serverjp != NULL);
-			g_return_if_fail(xferjp_host != NULL);
-
-			purple_account_set_string(account, "server", serverjp);
-			purple_account_set_string(account, "xfer_host", xferjp_host);
-
-			purple_account_set_protocol_id(account, "prpl-yahoojp");
-		}
-
-		/* these should always be nuked */
-		purple_account_remove_setting(account, "yahoojp");
-		purple_account_remove_setting(account, "serverjp");
-		purple_account_remove_setting(account, "xferjp_host");
-
-	}
-}
-
-static void
 migrate_icq_server(PurpleAccount *account)
 {
 	/* Migrate the login server setting for ICQ accounts.  See
@@ -668,9 +639,6 @@ parse_settings(xmlnode *node, PurpleAccount *account)
 	}
 
 	/* we do this here because we need access to account settings to determine
-	 * if we can/should migrate an old Yahoo! JAPAN account */
-	migrate_yahoo_japan(account);
-	/* we do this here because we need access to account settings to determine
 	 * if we can/should migrate an ICQ account's server setting */
 	migrate_icq_server(account);
 	/* we do this here because we need to do it before the user views the
diff --git a/pidgin-2.11.0/libpurple/account.h b/pidgin-2.12.0/libpurple/account.h
index 6a239be..67b8e07 100644
--- a/pidgin-2.11.0/libpurple/account.h
+++ b/pidgin-2.12.0/libpurple/account.h
@@ -192,7 +192,7 @@ struct _PurpleAccount
 	/*
 	 * TODO: Supplementing the next two linked lists with hash tables
 	 * should help performance a lot when these lists are long.  This
-	 * matters quite a bit for protocols like MSN, where all your
+	 * matters quite a bit for protocols, where all your
 	 * buddies are added to your permit list.  Currently we have to
 	 * iterate through the entire list if we want to check if someone
 	 * is permitted or denied.  We should do this for 3.0.0.
diff --git a/pidgin-2.11.0/libpurple/blist.h b/pidgin-2.12.0/libpurple/blist.h
index a053d08..d3cae7a 100644
--- a/pidgin-2.11.0/libpurple/blist.h
+++ b/pidgin-2.12.0/libpurple/blist.h
@@ -139,7 +139,7 @@ struct _PurpleBuddy {
 	PurpleBlistNode node;                     /**< The node that this buddy inherits from */
 	char *name;                             /**< The name of the buddy. */
 	char *alias;                            /**< The user-set alias of the buddy */
-	char *server_alias;                     /**< The server-specified alias of the buddy.  (i.e. MSN "Friendly Names") */
+	char *server_alias;                     /**< The server-specified alias of the buddy */
 	void *proto_data;                       /**< This allows the prpl to associate whatever data it wants with a buddy */
 	PurpleBuddyIcon *icon;                    /**< The buddy icon. */
 	PurpleAccount *account;					/**< the account this buddy belongs to */
diff --git a/pidgin-2.11.0/libpurple/buddyicon.c b/pidgin-2.12.0/libpurple/buddyicon.c
index 76388c8..7f5a290 100644
--- a/pidgin-2.11.0/libpurple/buddyicon.c
+++ b/pidgin-2.12.0/libpurple/buddyicon.c
@@ -1095,23 +1095,6 @@ migrate_buddy_icon(PurpleBlistNode *node, const char *setting_name,
 				purple_blist_node_set_string(node, "icon_checksum", hash);
 				purple_blist_node_remove_setting(node, "avatar_hash");
 			}
-			else
-			{
-				PurpleAccount *account = purple_buddy_get_account((PurpleBuddy *)node);
-				const char *prpl_id = purple_account_get_protocol_id(account);
-
-				if (g_str_equal(prpl_id, "prpl-yahoo") || g_str_equal(prpl_id, "prpl-yahoojp"))
-				{
-					int checksum = purple_blist_node_get_int(node, "icon_checksum");
-					if (checksum != 0)
-					{
-						char *checksum_str = g_strdup_printf("%i", checksum);
-						purple_blist_node_remove_setting(node, "icon_checksum");
-						purple_blist_node_set_string(node, "icon_checksum", checksum_str);
-						g_free(checksum_str);
-					}
-				}
-			}
 		}
 	}
 	else
@@ -1281,8 +1264,8 @@ purple_buddy_icons_init()
 	                                        g_free, NULL);
 	pointer_icon_cache = g_hash_table_new(g_direct_hash, g_direct_equal);
 
-    if (!cache_dir)
-    	cache_dir = g_build_filename(purple_user_dir(), "icons", NULL);
+	if (!cache_dir)
+		cache_dir = g_build_filename(purple_user_dir(), "icons", NULL);
 
 	purple_signal_connect(purple_imgstore_get_handle(), "image-deleting",
 	                      purple_buddy_icons_get_handle(),
diff --git a/pidgin-2.11.0/libpurple/certificate.c b/pidgin-2.12.0/libpurple/certificate.c
index ba71314..f240b26 100644
--- a/pidgin-2.11.0/libpurple/certificate.c
+++ b/pidgin-2.12.0/libpurple/certificate.c
@@ -84,6 +84,29 @@ invalidity_reason_to_string(PurpleCertificateInvalidityFlags flag)
 	}
 }
 
+static void
+get_ascii_fingerprints (PurpleCertificate *crt, gchar **sha1, gchar **sha256)
+{
+	GByteArray *sha_bin;
+
+	if (sha1 != NULL) {
+		sha_bin = purple_certificate_get_fingerprint_sha1(crt);
+
+		*sha1 = purple_base16_encode_chunked(sha_bin->data, sha_bin->len);
+
+		g_byte_array_free(sha_bin, TRUE);
+	}
+
+	if (sha256 != NULL) {
+		sha_bin = purple_certificate_get_fingerprint_sha256(crt, FALSE);
+
+		*sha256 = (sha_bin == NULL) ? g_strdup("(null)") :
+			purple_base16_encode_chunked(sha_bin->data, sha_bin->len);
+
+		g_byte_array_free(sha_bin, TRUE);
+	}
+}
+
 void
 purple_certificate_verify (PurpleCertificateVerifier *verifier,
 			   const gchar *subject_name, GList *cert_chain,
@@ -388,6 +411,30 @@ purple_certificate_get_fingerprint_sha1(PurpleCertificate *crt)
 	return fpr;
 }
 
+GByteArray *
+purple_certificate_get_fingerprint_sha256(PurpleCertificate *crt, gboolean sha1_fallback)
+{
+	PurpleCertificateScheme *scheme;
+	GByteArray *fpr = NULL;
+
+	g_return_val_if_fail(crt, NULL);
+	g_return_val_if_fail(crt->scheme, NULL);
+
+	scheme = crt->scheme;
+
+	if (!PURPLE_CERTIFICATE_SCHEME_HAS_FUNC(scheme, get_fingerprint_sha256)) {
+		/* outdated ssl module? fallback to sha1 and print a warning */
+		if (sha1_fallback) {
+			fpr = purple_certificate_get_fingerprint_sha1(crt);
+		}
+		g_return_val_if_reached(fpr);
+	}
+
+	fpr = (scheme->get_fingerprint_sha256)(crt);
+
+	return fpr;
+}
+
 gchar *
 purple_certificate_get_unique_id(PurpleCertificate *crt)
 {
@@ -461,6 +508,24 @@ purple_certificate_get_times(PurpleCertificate *crt, time_t *activation, time_t
 	return (scheme->get_times)(crt, activation, expiration);
 }
 
+gboolean
+purple_certificate_compare_pubkeys(PurpleCertificate *crt1, PurpleCertificate *crt2)
+{
+	PurpleCertificateScheme *scheme;
+
+	g_return_val_if_fail(crt1 && crt2, FALSE);
+	g_return_val_if_fail(crt1->scheme && crt2->scheme, FALSE);
+	g_return_val_if_fail(crt1->scheme == crt2->scheme, FALSE);
+
+	scheme = crt1->scheme;
+
+	if (!(PURPLE_CERTIFICATE_SCHEME_HAS_FUNC(scheme, compare_pubkeys))) {
+		return FALSE;
+	}
+
+	return (scheme->compare_pubkeys)(crt1, crt2);
+}
+
 gchar *
 purple_certificate_pool_mkpath(PurpleCertificatePool *pool, const gchar *id)
 {
@@ -630,18 +695,13 @@ x509_singleuse_verify_cb (PurpleCertificateVerificationRequest *vrq, gint id)
 static void
 x509_singleuse_start_verify (PurpleCertificateVerificationRequest *vrq)
 {
-	gchar *sha_asc;
-	GByteArray *sha_bin;
+	gchar *sha1_asc, *sha256_asc;
 	gchar *cn;
 	const gchar *cn_match;
-	gchar *primary, *secondary;
+	gchar *primary, *secondary, *secondary_extra;
 	PurpleCertificate *crt = (PurpleCertificate *) vrq->cert_chain->data;
 
-	/* Pull out the SHA1 checksum */
-	sha_bin = purple_certificate_get_fingerprint_sha1(crt);
-	/* Now decode it for display */
-	sha_asc = purple_base16_encode_chunked(sha_bin->data,
-					       sha_bin->len);
+	get_ascii_fingerprints(crt, &sha1_asc, &sha256_asc);
 
 	/* Get the cert Common Name */
 	cn = purple_certificate_get_subject_name(crt);
@@ -655,14 +715,17 @@ x509_singleuse_start_verify (PurpleCertificateVerificationRequest *vrq)
 
 	/* Make messages */
 	primary = g_strdup_printf(_("%s has presented the following certificate for just-this-once use:"), vrq->subject_name);
-	secondary = g_strdup_printf(_("Common name: %s %s\nFingerprint (SHA1): %s"), cn, cn_match, sha_asc);
+	secondary = g_strdup_printf(_("Common name: %s %s\nFingerprint (SHA1): %s"), cn, cn_match, sha1_asc);
+
+	/* TODO: make this part of the translatable string above */
+	secondary_extra = g_strdup_printf("%s\nSHA256: %s", secondary, sha256_asc);
 
 	/* Make a semi-pretty display */
 	purple_request_accept_cancel(
 		vrq->cb_data, /* TODO: Find what the handle ought to be */
 		_("Single-use Certificate Verification"),
 		primary,
-		secondary,
+		secondary_extra,
 		0,            /* Accept by default */
 		NULL,         /* No account */
 		NULL,         /* No other user */
@@ -675,8 +738,9 @@ x509_singleuse_start_verify (PurpleCertificateVerificationRequest *vrq)
 	g_free(cn);
 	g_free(primary);
 	g_free(secondary);
-	g_free(sha_asc);
-	g_byte_array_free(sha_bin, TRUE);
+	g_free(secondary_extra);
+	g_free(sha1_asc);
+	g_free(sha256_asc);
 }
 
 static void
@@ -1506,10 +1570,10 @@ x509_tls_cached_cert_in_cache(PurpleCertificateVerificationRequest *vrq,
 		return;
 	}
 
-	/* Now get SHA1 sums for both and compare them */
+	/* Now get SHA256 sums for both and compare them */
 	/* TODO: This is not an elegant way to compare certs */
-	peer_fpr = purple_certificate_get_fingerprint_sha1(peer_crt);
-	cached_fpr = purple_certificate_get_fingerprint_sha1(cached_crt);
+	peer_fpr = purple_certificate_get_fingerprint_sha256(peer_crt, TRUE);
+	cached_fpr = purple_certificate_get_fingerprint_sha256(cached_crt, TRUE);
 	if (!memcmp(peer_fpr->data, cached_fpr->data, peer_fpr->len)) {
 		purple_debug_info("certificate/x509/tls_cached",
 				  "Peer cert matched cached\n");
@@ -1616,8 +1680,8 @@ x509_tls_cached_unknown_peer(PurpleCertificateVerificationRequest *vrq,
 			if (ca_crt != NULL) {
 				GByteArray *failing_fpr;
 				GByteArray *ca_fpr;
-				failing_fpr = purple_certificate_get_fingerprint_sha1(failing_crt);
-				ca_fpr = purple_certificate_get_fingerprint_sha1(ca_crt);
+				failing_fpr = purple_certificate_get_fingerprint_sha256(failing_crt, TRUE);
+				ca_fpr = purple_certificate_get_fingerprint_sha256(ca_crt, TRUE);
 				if (byte_arrays_equal(failing_fpr, ca_fpr)) {
 					purple_debug_info("certificate/x509/tls_cached",
 							"Full chain verification failed (probably a bad "
@@ -1699,12 +1763,18 @@ x509_tls_cached_unknown_peer(PurpleCertificateVerificationRequest *vrq,
 	 * If the fingerprints don't match, we'll fall back to checking the
 	 * signature.
 	 */
-	last_fpr = purple_certificate_get_fingerprint_sha1(end_crt);
+	last_fpr = purple_certificate_get_fingerprint_sha256(end_crt, TRUE);
+
+	ca_id = purple_certificate_get_unique_id(end_crt);
+
 	for (cur = ca_crts; cur; cur = cur->next) {
 		ca_crt = cur->data;
-		ca_fpr = purple_certificate_get_fingerprint_sha1(ca_crt);
+		ca_fpr = purple_certificate_get_fingerprint_sha256(ca_crt, TRUE);
+		ca2_id = purple_certificate_get_unique_id(ca_crt);
 
 		if ( byte_arrays_equal(last_fpr, ca_fpr) ||
+				(purple_strequal(ca_id, ca2_id) &&
+				 purple_certificate_compare_pubkeys(end_crt, ca_crt)) ||
 				purple_certificate_signed_by(end_crt, ca_crt) )
 		{
 			/* TODO: If signed_by ever returns a reason, maybe mention
@@ -1714,11 +1784,14 @@ x509_tls_cached_unknown_peer(PurpleCertificateVerificationRequest *vrq,
 			   user's poor, leaky eyes. */
 			valid = TRUE;
 			g_byte_array_free(ca_fpr, TRUE);
+			g_free(ca2_id);
 			break;
 		}
 
 		g_byte_array_free(ca_fpr, TRUE);
+		g_free(ca2_id);
 	}
+	g_free(ca_id);
 
 	if (valid == FALSE)
 		flags |= PURPLE_CERTIFICATE_INVALID_CHAIN;
@@ -2152,19 +2225,14 @@ static void display_x509_issuer(gchar *issuer_id) {
 void
 purple_certificate_display_x509(PurpleCertificate *crt)
 {
-	gchar *sha_asc;
-	GByteArray *sha_bin;
+	gchar *sha1_asc, *sha256_asc;
 	gchar *cn, *issuer_id;
 	time_t activation, expiration;
 	gchar *activ_str, *expir_str;
-	gchar *secondary;
+	gchar *secondary, *secondary_extra;
 	gboolean self_signed;
 
-	/* Pull out the SHA1 checksum */
-	sha_bin = purple_certificate_get_fingerprint_sha1(crt);
-	/* Now decode it for display */
-	sha_asc = purple_base16_encode_chunked(sha_bin->data,
-					       sha_bin->len);
+	get_ascii_fingerprints(crt, &sha1_asc, &sha256_asc);
 
 	/* Get the cert Common Name */
 	/* TODO: Will break on CA certs */
@@ -2193,20 +2261,23 @@ purple_certificate_display_x509(PurpleCertificate *crt)
 				  "Expiration date: %s\n"),
 				cn ? cn : "(null)",
 				self_signed ? _("(self-signed)") : (issuer_id ? issuer_id : "(null)"),
-				sha_asc ? sha_asc : "(null)",
+				sha1_asc ? sha1_asc : "(null)",
 				activ_str ? activ_str : "(null)",
 				expir_str ? expir_str : "(null)");
 
+	/* TODO: make this part of the translatable string above */
+	secondary_extra = g_strdup_printf("%sSHA256: %s", secondary, sha256_asc);
+
 	/* Make a semi-pretty display */
 	if (self_signed) {
 		purple_notify_info(NULL, /* TODO: Find what the handle ought to be */
 			_("Certificate Information"),
 			"",
-			secondary);
+			secondary_extra);
 	} else {
 		purple_request_action(NULL, /* TODO: Find what the handle ought to be */
 			_("Certificate Information"), _("Certificate Information"),
-			secondary, 2, NULL, NULL, NULL, 
+			secondary_extra, 2, NULL, NULL, NULL,
 			issuer_id, 2,
 			_("View Issuer Certificate"), PURPLE_CALLBACK(display_x509_issuer),
 			_("Close"), PURPLE_CALLBACK(g_free));
@@ -2219,10 +2290,11 @@ purple_certificate_display_x509(PurpleCertificate *crt)
 	g_free(cn);
 	g_free(issuer_id);
 	g_free(secondary);
-	g_free(sha_asc);
+	g_free(secondary_extra);
+	g_free(sha1_asc);
+	g_free(sha256_asc);
 	g_free(activ_str);
 	g_free(expir_str);
-	g_byte_array_free(sha_bin, TRUE);
 }
 
 void purple_certificate_add_ca_search_path(const char *path)
diff --git a/pidgin-2.11.0/libpurple/certificate.h b/pidgin-2.12.0/libpurple/certificate.h
index 727c533..08b4bad 100644
--- a/pidgin-2.11.0/libpurple/certificate.h
+++ b/pidgin-2.12.0/libpurple/certificate.h
@@ -315,9 +315,41 @@ struct _PurpleCertificateScheme
 	 */
 	void (* verify_cert)(PurpleCertificateVerificationRequest *vrq, PurpleCertificateInvalidityFlags *flags);
 
-	void (*_purple_reserved3)(void);
+	/**
+	 * The size of the PurpleCertificateScheme. This should always be sizeof(PurpleCertificateScheme).
+	 * This allows adding more functions to this struct without requiring a major version bump.
+	 *
+	 * PURPLE_CERTIFICATE_SCHEME_HAS_FUNC() should be used for functions after this point.
+	 */
+	unsigned long struct_size;
+
+	/**
+	 * Retrieves the certificate public key fingerprint using SHA256
+	 *
+	 * @param crt   Certificate instance
+	 * @return Binary representation of SHA256 hash - must be freed using
+	 *         g_byte_array_free()
+	 * @since 2.12.0
+	 */
+	GByteArray * (* get_fingerprint_sha256)(PurpleCertificate *crt);
+
+	/**
+	 * Compares the public keys of two certificates
+	 *
+	 * @param crt1  A certificate instance
+	 * @param crt2  Another certificate instance
+	 * @return TRUE if both certificates have the same key, otherwise FALSE
+	 * @since 2.12.0
+	 */
+	gboolean (* compare_pubkeys)(PurpleCertificate *crt1, PurpleCertificate *crt2);
 };
 
+#define PURPLE_CERTIFICATE_SCHEME_HAS_FUNC(obj, member) \
+	(((G_STRUCT_OFFSET(PurpleCertificateScheme, member) < G_STRUCT_OFFSET(PurpleCertificateScheme, struct_size)) \
+	  || (G_STRUCT_OFFSET(PurpleCertificateScheme, member) < obj->struct_size)) && \
+	 obj->member != NULL)
+
+
 /** A set of operations used to provide logic for verifying a Certificate's
  *  authenticity.
  *
@@ -578,14 +610,28 @@ purple_certificate_export(const gchar *filename, PurpleCertificate *crt);
  * Retrieves the certificate public key fingerprint using SHA1.
  *
  * @param crt        Certificate instance
- * @return Binary representation of the hash. You are responsible for free()ing
- *         this.
+ * @return Binary representation of the hash. You are responsible for freeing
+ *         this with g_byte_array_free().
  * @see purple_base16_encode_chunked()
+ * @see purple_certificate_get_fingerprint_sha256()
  */
 GByteArray *
 purple_certificate_get_fingerprint_sha1(PurpleCertificate *crt);
 
 /**
+ * Retrieves the certificate public key fingerprint using SHA256.
+ *
+ * @param crt        Certificate instance
+ * @param sha1_fallback  If true, return SHA1 if the SSL module doesn't
+ *                       implement SHA256. Otherwise, return NULL.
+ * @return Binary representation of the hash. You are responsible for freeing
+ *         this with g_byte_array_free().
+ * @see purple_base16_encode_chunked()
+ */
+GByteArray *
+purple_certificate_get_fingerprint_sha256(PurpleCertificate *crt, gboolean sha1_fallback);
+
+/**
  * Get a unique identifier for the certificate
  *
  * @param crt        Certificate instance
@@ -638,6 +684,20 @@ purple_certificate_check_subject_name(PurpleCertificate *crt, const gchar *name)
 gboolean
 purple_certificate_get_times(PurpleCertificate *crt, time_t *activation, time_t *expiration);
 
+/**
+ * Compares the public keys of two certificates.
+ *
+ * If the SSL backend does not implement this function, it may return FALSE
+ * every time. This is the case with the NSS plugin, which doesn't need it.
+ *
+ * @param crt1  A certificate instance
+ * @param crt2  Another certificate instance
+ * @return TRUE if both certificates have the same key, otherwise FALSE
+ * @since 2.12.0
+ */
+gboolean
+purple_certificate_compare_pubkeys(PurpleCertificate *crt1, PurpleCertificate *crt2);
+
 /*@}*/
 
 /*****************************************************************************/
diff --git a/pidgin-2.11.0/libpurple/cmds.h b/pidgin-2.12.0/libpurple/cmds.h
index c8bba2c..532a917 100644
--- a/pidgin-2.11.0/libpurple/cmds.h
+++ b/pidgin-2.12.0/libpurple/cmds.h
@@ -170,7 +170,7 @@ extern "C" {
  *          order for the command to ever actually be called.
  * @param prpl_id If the #PURPLE_CMD_FLAG_PRPL_ONLY flag is set, this is the id
  *                of the prpl to which the command applies (such as
- *                <tt>"prpl-msn"</tt>). If the flag is not set, this parameter
+ *                <tt>"prpl-aim"</tt>). If the flag is not set, this parameter
  *                is ignored; pass @c NULL (or a humourous string of your
  *                choice!).
  * @param func This is the function to call when someone enters this command.
diff --git a/pidgin-2.11.0/libpurple/conversation.c b/pidgin-2.12.0/libpurple/conversation.c
index 051ab48..8a39b60 100644
--- a/pidgin-2.11.0/libpurple/conversation.c
+++ b/pidgin-2.12.0/libpurple/conversation.c
@@ -351,7 +351,7 @@ purple_conversation_new(PurpleConversationType type, PurpleAccount *account,
 		}
 
 		/*
-		 * This hack is necessary because some prpls (MSN) have unnamed chats
+		 * This hack is necessary because some prpls have unnamed chats
 		 * that all use the same name.  A PurpleConversation for one of those
 		 * is only ever re-used if the user has left, so calls to
 		 * purple_conversation_new need to fall-through to creating a new
diff --git a/pidgin-2.11.0/libpurple/conversation.h b/pidgin-2.12.0/libpurple/conversation.h
index e01dc19..4662251 100644
--- a/pidgin-2.11.0/libpurple/conversation.h
+++ b/pidgin-2.12.0/libpurple/conversation.h
@@ -126,7 +126,10 @@ typedef enum
 	PURPLE_MESSAGE_NOTIFY      = 0x2000, /**< Message is a notification */
 	PURPLE_MESSAGE_NO_LINKIFY  = 0x4000, /**< Message should not be auto-
 										   linkified @since 2.1.0 */
-	PURPLE_MESSAGE_INVISIBLE   = 0x8000  /**< Message should not be displayed */
+	PURPLE_MESSAGE_INVISIBLE   = 0x8000, /**< Message should not be displayed */
+	PURPLE_MESSAGE_REMOTE_SEND = 0x10000 /**< Message sent from another location,
+	                                       not an echo of a local one
+	                                       @since 2.12.0 */
 } PurpleMessageFlags;
 
 /**
@@ -884,9 +887,8 @@ guint purple_conv_im_get_typing_timeout(const PurpleConvIm *im);
 
 /**
  * Sets the quiet-time when no PURPLE_TYPING messages will be sent.
- * Few protocols need this (maybe only MSN).  If the user is still
- * typing after this quiet-period, then another PURPLE_TYPING message
- * will be sent.
+ * Few protocols need this.  If the user is still typing after this
+ * quiet-period, then another PURPLE_TYPING message will be sent.
  *
  * @param im  The IM.
  * @param val The number of seconds to wait before allowing another
diff --git a/pidgin-2.11.0/libpurple/data/gconf/purple.schemas.in b/pidgin-2.12.0/libpurple/data/gconf/purple.schemas.in
index e4fe0e4..3ab7b8d 100644
--- a/pidgin-2.11.0/libpurple/data/gconf/purple.schemas.in
+++ b/pidgin-2.12.0/libpurple/data/gconf/purple.schemas.in
@@ -138,40 +138,6 @@
     </schema>
 
     <schema>
-      <key>/schemas/desktop/gnome/url-handlers/msnim/enabled</key>
-      <applyto>/desktop/gnome/url-handlers/msnim/enabled</applyto>
-      <owner>purple</owner>
-      <type>bool</type>
-      <default>true</default>
-      <locale name="C">
-        <short>Whether the specified command should handle "msnim" URLs</short>
-        <long>True if the command specified in the "command" key should handle "msnim" URLs.</long>
-      </locale>
-    </schema>
-    <schema>
-      <key>/schemas/desktop/gnome/url-handlers/msnim/command</key>
-      <applyto>/desktop/gnome/url-handlers/msnim/command</applyto>
-      <owner>purple</owner>
-      <type>string</type>
-      <default>purple-url-handler "%s"</default>
-      <locale name="C">
-        <short>The handler for "msnim" URLs</short>
-        <long>The command used to handle "msnim" URLs, if enabled.</long>
-      </locale>
-    </schema>
-    <schema>
-      <key>/schemas/desktop/gnome/url-handlers/msnim/needs_terminal</key>
-      <applyto>/desktop/gnome/url-handlers/msnim/needs_terminal</applyto>
-      <owner>purple</owner>
-      <type>bool</type>
-      <default>false</default>
-      <locale name="C">
-        <short>Run the command in a terminal</short>
-        <long>True if the command used to handle this type of URL should be run in a terminal.</long>
-      </locale>
-    </schema>
-
-    <schema>
       <key>/schemas/desktop/gnome/url-handlers/sip/enabled</key>
       <applyto>/desktop/gnome/url-handlers/sip/enabled</applyto>
       <owner>purple</owner>
@@ -238,39 +204,5 @@
         <long>True if the command used to handle this type of URL should be run in a terminal.</long>
       </locale>
     </schema>
-
-    <schema>
-      <key>/schemas/desktop/gnome/url-handlers/ymsgr/enabled</key>
-      <applyto>/desktop/gnome/url-handlers/ymsgr/enabled</applyto>
-      <owner>purple</owner>
-      <type>bool</type>
-      <default>true</default>
-      <locale name="C">
-        <short>Whether the specified command should handle "ymsgr" URLs</short>
-        <long>True if the command specified in the "command" key should handle "ymsgr" URLs.</long>
-      </locale>
-    </schema>
-    <schema>
-      <key>/schemas/desktop/gnome/url-handlers/ymsgr/command</key>
-      <applyto>/desktop/gnome/url-handlers/ymsgr/command</applyto>
-      <owner>purple</owner>
-      <type>string</type>
-      <default>purple-url-handler "%s"</default>
-      <locale name="C">
-        <short>The handler for "ymsgr" URLs</short>
-        <long>The command used to handle "ymsgr" URLs, if enabled.</long>
-      </locale>
-    </schema>
-    <schema>
-      <key>/schemas/desktop/gnome/url-handlers/ymsgr/needs_terminal</key>
-      <applyto>/desktop/gnome/url-handlers/ymsgr/needs_terminal</applyto>
-      <owner>purple</owner>
-      <type>bool</type>
-      <default>false</default>
-      <locale name="C">
-        <short>Run the command in a terminal</short>
-        <long>True if the command used to handle this type of URL should be run in a terminal.</long>
-      </locale>
-    </schema>
   </schemalist>
 </gconfschemafile>
diff --git a/pidgin-2.11.0/libpurple/dbus-server.h b/pidgin-2.12.0/libpurple/dbus-server.h
index 5215dcc..1bb9848 100644
--- a/pidgin-2.11.0/libpurple/dbus-server.h
+++ b/pidgin-2.12.0/libpurple/dbus-server.h
@@ -199,7 +199,9 @@ void purple_dbus_uninit(void);
 
  */
 
+#ifndef DBUS_EXPORT
 #define DBUS_EXPORT
+#endif
 
 /*
    Here we include the list of #PURPLE_DBUS_DECLARE_TYPE statements for
diff --git a/pidgin-2.11.0/libpurple/network.c b/pidgin-2.12.0/libpurple/network.c
index 3b29acf..85f0d6a 100644
--- a/pidgin-2.11.0/libpurple/network.c
+++ b/pidgin-2.12.0/libpurple/network.c
@@ -624,7 +624,7 @@ wpurple_get_connected_network_count(void)
 	qs.dwSize = sizeof(WSAQUERYSET);
 	qs.dwNameSpace = NS_NLA;
 
-	retval = WSALookupServiceBegin(&qs, LUP_RETURN_ALL, &h);
+	retval = WSALookupServiceBeginA(&qs, LUP_RETURN_ALL, &h);
 	if (retval != ERROR_SUCCESS) {
 		gchar *msg;
 		errorid = WSAGetLastError();
@@ -636,17 +636,34 @@ wpurple_get_connected_network_count(void)
 
 		return -1;
 	} else {
-		char buf[4096];
+		gchar *buf = NULL;
 		WSAQUERYSET *res = (LPWSAQUERYSET) buf;
-		DWORD size = sizeof(buf);
-		while ((retval = WSALookupServiceNext(h, 0, &size, res)) == ERROR_SUCCESS) {
-			net_cnt++;
-			purple_debug_info("network", "found network '%s'\n",
-					res->lpszServiceInstanceName ? res->lpszServiceInstanceName : "(NULL)");
-			size = sizeof(buf);
+		DWORD current_size = 0;
+		int iteration_count = 0;
+		while (iteration_count++ < 100) {
+			DWORD size = current_size;
+			retval = WSALookupServiceNextA(h, 0, &size, res);
+			if (retval == ERROR_SUCCESS) {
+				net_cnt++;
+				purple_debug_info("network", "found network '%s'\n",
+						res->lpszServiceInstanceName ? res->lpszServiceInstanceName : "(NULL)");
+			} else {
+				errorid = WSAGetLastError();
+				if (errorid == WSAEFAULT) {
+					if (size == 0 || size > 102400) {
+						purple_debug_warning("network", "Got unexpected NLA buffer size %" G_GUINT32_FORMAT ".\n", (guint32) size);
+						break;
+					}
+					buf = g_realloc(buf, size);
+					res = (LPWSAQUERYSET) buf;
+					current_size = size;
+				} else {
+					break;
+				}
+			}
 		}
+		g_free(buf);
 
-		errorid = WSAGetLastError();
 		if (!(errorid == WSA_E_NO_MORE || errorid == WSAENOMORE)) {
 			gchar *msg = g_win32_error_message(errorid);
 			purple_debug_error("network", "got unexpected NLA response %s (%d)\n", msg, errorid);
@@ -700,9 +717,9 @@ static gpointer wpurple_network_change_thread(gpointer data)
 	WSAQUERYSET qs;
 	WSAEVENT *nla_event;
 	time_t last_trigger = time(NULL) - 31;
-	char buf[4096];
+	gchar *buf = NULL;
 	WSAQUERYSET *res = (LPWSAQUERYSET) buf;
-	DWORD size;
+	DWORD current_size = 0;
 
 	if ((nla_event = WSACreateEvent()) == WSA_INVALID_EVENT) {
 		int errorid = WSAGetLastError();
@@ -717,6 +734,7 @@ static gpointer wpurple_network_change_thread(gpointer data)
 
 	while (TRUE) {
 		int retval;
+		int iteration_count;
 		DWORD retLen = 0;
 		WSACOMPLETION completion;
 		WSAOVERLAPPED overlapped;
@@ -734,7 +752,7 @@ static gpointer wpurple_network_change_thread(gpointer data)
 			memset(&qs, 0, sizeof(WSAQUERYSET));
 			qs.dwSize = sizeof(WSAQUERYSET);
 			qs.dwNameSpace = NS_NLA;
-			if (WSALookupServiceBegin(&qs, 0, &network_change_handle) == SOCKET_ERROR) {
+			if (WSALookupServiceBeginA(&qs, 0, &network_change_handle) == SOCKET_ERROR) {
 				int errorid = WSAGetLastError();
 				gchar *msg = g_win32_error_message(errorid);
 				purple_timeout_add(0, _print_debug_msg,
@@ -794,13 +812,34 @@ static gpointer wpurple_network_change_thread(gpointer data)
 			return NULL;
 		}
 
-		size = sizeof(buf);
-		while ((retval = WSALookupServiceNext(network_change_handle, 0, &size, res)) == ERROR_SUCCESS) {
-			/*purple_timeout_add(0, _print_debug_msg,
+		iteration_count = 0;
+		while (iteration_count++ < 100) {
+			DWORD size = current_size;
+			retval = WSALookupServiceNextA(network_change_handle, 0, &size, res);
+			if (retval == ERROR_SUCCESS) {
+				/*purple_timeout_add(0, _print_debug_msg,
 							   g_strdup_printf("thread found network '%s'\n",
 											   res->lpszServiceInstanceName ? res->lpszServiceInstanceName : "(NULL)"));*/
-			size = sizeof(buf);
+			} else {
+				int errorid = WSAGetLastError();
+				if (errorid == WSAEFAULT) {
+					if (size == 0 || size > 102400) {
+						purple_timeout_add(0, _print_debug_msg,
+							   g_strdup_printf("Thread got unexpected NLA buffer size %" G_GUINT32_FORMAT ".\n", (guint32) size));
+						break;
+					}
+					buf = g_realloc(buf, size);
+					res = (LPWSAQUERYSET) buf;
+					current_size = size;
+				} else {
+					break;
+				}
+			}
+
 		}
+		g_free(buf);
+		buf = NULL;
+		current_size = 0;
 
 		WSAResetEvent(nla_event);
 		g_static_mutex_unlock(&mutex);
diff --git a/pidgin-2.11.0/libpurple/plugins/perl/common/Certificate.xs b/pidgin-2.12.0/libpurple/plugins/perl/common/Certificate.xs
index 9dd50a4..1632c50 100644
--- a/pidgin-2.11.0/libpurple/plugins/perl/common/Certificate.xs
+++ b/pidgin-2.12.0/libpurple/plugins/perl/common/Certificate.xs
@@ -219,6 +219,19 @@ purple_certificate_get_fingerprint_sha1(crt)
 	OUTPUT:
 		RETVAL
 
+SV*
+purple_certificate_get_fingerprint_sha256(crt, sha1_fallback)
+	Purple::Certificate crt
+	gboolean sha1_fallback
+	PREINIT:
+		GByteArray *gba = NULL;
+	CODE:
+		gba = purple_certificate_get_fingerprint_sha256(crt, sha1_fallback);
+		RETVAL = newSVpv((gchar *)gba->data, gba->len);
+		g_byte_array_free(gba, TRUE);
+	OUTPUT:
+		RETVAL
+
 void
 purple_certificate_verify(verifier, subject_name, cert_chain, cb, cb_data)
 	Purple::Certificate::Verifier verifier
diff --git a/pidgin-2.11.0/libpurple/plugins/psychic.c b/pidgin-2.12.0/libpurple/plugins/psychic.c
index 787bfd1..bbc1ddb 100644
--- a/pidgin-2.11.0/libpurple/plugins/psychic.c
+++ b/pidgin-2.12.0/libpurple/plugins/psychic.c
@@ -21,7 +21,7 @@
 #define PLUGIN_SUMMARY  N_("Psychic mode for incoming conversation")
 #define PLUGIN_DESC     N_("Causes conversation windows to appear as other" \
 			   " users begin to message you.  This works for" \
-			   " AIM, ICQ, XMPP, Sametime, and Yahoo!")
+			   " AIM, ICQ, XMPP, and Sametime")
 #define PLUGIN_AUTHOR   "Christopher O'Brien <siege@preoccupied.net>"
 
 
diff --git a/pidgin-2.11.0/libpurple/plugins/ssl/ssl-gnutls.c b/pidgin-2.12.0/libpurple/plugins/ssl/ssl-gnutls.c
index e8306dd..54a6a23 100644
--- a/pidgin-2.11.0/libpurple/plugins/ssl/ssl-gnutls.c
+++ b/pidgin-2.12.0/libpurple/plugins/ssl/ssl-gnutls.c
@@ -69,20 +69,6 @@ ssl_gnutls_init_gnutls(void)
 	const char *debug_level;
 	const char *host_priorities_str;
 
-	/* Configure GnuTLS to use glib memory management */
-	/* I expect that this isn't really necessary, but it may prevent
-	   some bugs */
-	/* TODO: It may be necessary to wrap this allocators for GnuTLS.
-	   If there are strange bugs, perhaps look here (yes, I am a
-	   hypocrite) */
-	gnutls_global_set_mem_functions(
-		(gnutls_alloc_function)   g_malloc, /* malloc */
-		(gnutls_alloc_function)   g_malloc, /* secure malloc */
-		NULL,      /* mem_is_secure */
-		(gnutls_realloc_function) g_realloc, /* realloc */
-		(gnutls_free_function)    g_free     /* free */
-		);
-
 	debug_level = g_getenv("PURPLE_GNUTLS_DEBUG");
 	if (debug_level) {
 		int level = atoi(debug_level);
@@ -1051,9 +1037,9 @@ x509_certificate_signed_by(PurpleCertificate * crt,
 }
 
 static GByteArray *
-x509_sha1sum(PurpleCertificate *crt)
+x509_shasum(PurpleCertificate *crt, gnutls_digest_algorithm_t algo)
 {
-	size_t hashlen = 20; /* SHA1 hashes are 20 bytes */
+	size_t hashlen = (algo == GNUTLS_DIG_SHA1) ? 20 : 32;
 	size_t tmpsz = hashlen; /* Throw-away variable for GnuTLS to stomp on*/
 	gnutls_x509_crt_t crt_dat;
 	GByteArray *hash; /**< Final hash container */
@@ -1065,7 +1051,7 @@ x509_sha1sum(PurpleCertificate *crt)
 
 	/* Extract the fingerprint */
 	g_return_val_if_fail(
-		0 == gnutls_x509_crt_get_fingerprint(crt_dat, GNUTLS_DIG_SHA,
+		0 == gnutls_x509_crt_get_fingerprint(crt_dat, algo,
 						     hashbuf, &tmpsz),
 		NULL);
 
@@ -1079,6 +1065,18 @@ x509_sha1sum(PurpleCertificate *crt)
 	return hash;
 }
 
+static GByteArray *
+x509_sha1sum(PurpleCertificate *crt)
+{
+	return x509_shasum(crt, GNUTLS_DIG_SHA1);
+}
+
+static GByteArray *
+x509_sha256sum(PurpleCertificate *crt)
+{
+	return x509_shasum(crt, GNUTLS_DIG_SHA256);
+}
+
 static gchar *
 x509_cert_dn (PurpleCertificate *crt)
 {
@@ -1234,6 +1232,46 @@ x509_times (PurpleCertificate *crt, time_t *activation, time_t *expiration)
 	return success;
 }
 
+/* GNUTLS_KEYID_USE_BEST_KNOWN was added in gnutls 3.4.1, but can't ifdef it
+ * because it's an enum member. Older versions will ignore it, which means
+ * using SHA1 instead of SHA256 to compare pubkeys. But hey, not my fault. */
+#if GNUTLS_VERSION_NUMBER < 0x030401
+#define KEYID_FLAG (1<<30)
+#else
+#define KEYID_FLAG GNUTLS_KEYID_USE_BEST_KNOWN
+#endif
+
+static gboolean
+x509_compare_pubkeys (PurpleCertificate *crt1, PurpleCertificate *crt2)
+{
+	gnutls_x509_crt_t crt_dat1, crt_dat2;
+	unsigned char buffer1[64], buffer2[64];
+	size_t size1, size2;
+	size1 = size2 = sizeof(buffer1);
+
+	g_return_val_if_fail(crt1 && crt2, FALSE);
+	g_return_val_if_fail(crt1->scheme == &x509_gnutls, FALSE);
+	g_return_val_if_fail(crt2->scheme == &x509_gnutls, FALSE);
+
+	crt_dat1 = X509_GET_GNUTLS_DATA(crt1);
+
+	if (gnutls_x509_crt_get_key_id(crt_dat1, KEYID_FLAG, buffer1, &size1) != 0) {
+		return FALSE;
+	}
+
+	crt_dat2 = X509_GET_GNUTLS_DATA(crt2);
+
+	if (gnutls_x509_crt_get_key_id(crt_dat2, KEYID_FLAG, buffer2, &size2) != 0) {
+		return FALSE;
+	}
+
+	if (size1 != size2) {
+		return FALSE;
+	}
+
+	return memcmp(buffer1, buffer2, size1) == 0;
+}
+
 /* X.509 certificate operations provided by this plugin */
 static PurpleCertificateScheme x509_gnutls = {
 	"x509",                          /* Scheme name */
@@ -1253,8 +1291,9 @@ static PurpleCertificateScheme x509_gnutls = {
 
 	NULL,
 	NULL,
-	NULL
-
+	sizeof(PurpleCertificateScheme), /* struct_size */
+	x509_sha256sum,                  /* SHA256 fingerprint */
+	x509_compare_pubkeys,            /* Compare public keys */
 };
 
 static PurpleSslOps ssl_ops =
diff --git a/pidgin-2.11.0/libpurple/plugins/ssl/ssl-nss.c b/pidgin-2.12.0/libpurple/plugins/ssl/ssl-nss.c
index 382dcf4..9501dbe 100644
--- a/pidgin-2.11.0/libpurple/plugins/ssl/ssl-nss.c
+++ b/pidgin-2.12.0/libpurple/plugins/ssl/ssl-nss.c
@@ -881,11 +881,11 @@ x509_signed_by(PurpleCertificate * crt,
 }
 
 static GByteArray *
-x509_sha1sum(PurpleCertificate *crt)
+x509_shasum(PurpleCertificate *crt, SECOidTag algo)
 {
 	CERTCertificate *crt_dat;
-	size_t hashlen = 20; /* Size of an sha1sum */
-	GByteArray *sha1sum;
+	size_t hashlen = (algo == SEC_OID_SHA1) ? 20 : 32;
+	GByteArray *hash;
 	SECItem *derCert; /* DER representation of the cert */
 	SECStatus st;
 
@@ -899,22 +899,34 @@ x509_sha1sum(PurpleCertificate *crt)
 	derCert = &(crt_dat->derCert);
 
 	/* Make a hash! */
-	sha1sum = g_byte_array_sized_new(hashlen);
+	hash = g_byte_array_sized_new(hashlen);
 	/* glib leaves the size as 0 by default */
-	sha1sum->len = hashlen;
+	hash->len = hashlen;
 
-	st = PK11_HashBuf(SEC_OID_SHA1, sha1sum->data,
+	st = PK11_HashBuf(algo, hash->data,
 			  derCert->data, derCert->len);
 
 	/* Check for errors */
 	if (st != SECSuccess) {
-		g_byte_array_free(sha1sum, TRUE);
+		g_byte_array_free(hash, TRUE);
 		purple_debug_error("nss/x509",
 				   "Error: hashing failed!\n");
 		return NULL;
 	}
 
-	return sha1sum;
+	return hash;
+}
+
+static GByteArray *
+x509_sha1sum(PurpleCertificate *crt)
+{
+	return x509_shasum(crt, SEC_OID_SHA1);
+}
+
+static GByteArray *
+x509_sha256sum(PurpleCertificate *crt)
+{
+	return x509_shasum(crt, SEC_OID_SHA256);
 }
 
 static gchar *
@@ -1010,6 +1022,7 @@ x509_times (PurpleCertificate *crt, time_t *activation, time_t *expiration)
 {
 	CERTCertificate *crt_dat;
 	PRTime nss_activ, nss_expir;
+	SECStatus cert_times_success;
 
 	g_return_val_if_fail(crt, FALSE);
 	g_return_val_if_fail(crt->scheme == &x509_nss, FALSE);
@@ -1019,10 +1032,9 @@ x509_times (PurpleCertificate *crt, time_t *activation, time_t *expiration)
 
 	/* Extract the times into ugly PRTime thingies */
 	/* TODO: Maybe this shouldn't throw an error? */
-	g_return_val_if_fail(
-		SECSuccess == CERT_GetCertTimes(crt_dat,
-						&nss_activ, &nss_expir),
-		FALSE);
+	cert_times_success = CERT_GetCertTimes(crt_dat,
+						&nss_activ, &nss_expir);
+	g_return_val_if_fail(cert_times_success == SECSuccess, FALSE);
 
 	/* NSS's native PRTime type *almost* corresponds to time_t; however,
 	   it measures *microseconds* since the epoch, not seconds. Hence
@@ -1211,7 +1223,9 @@ static PurpleCertificateScheme x509_nss = {
 	x509_importcerts_from_file,      /* Multiple certificate import function */
 	x509_register_trusted_tls_cert,  /* Register a certificate as trusted for TLS */
 	x509_verify_cert,                /* Verify that the specified cert chain is trusted */
-	NULL
+	sizeof(PurpleCertificateScheme), /* struct_size */
+	x509_sha256sum,                  /* SHA256 fingerprint */
+	NULL,
 };
 
 static PurpleSslOps ssl_ops =
diff --git a/pidgin-2.11.0/libpurple/protocols/Makefile.am b/pidgin-2.12.0/libpurple/protocols/Makefile.am
index 7fea4bd..b0f0898 100644
--- a/pidgin-2.11.0/libpurple/protocols/Makefile.am
+++ b/pidgin-2.12.0/libpurple/protocols/Makefile.am
@@ -1,5 +1,5 @@
 EXTRA_DIST = Makefile.mingw
 
-DIST_SUBDIRS = bonjour gg irc jabber msn myspace mxit novell null oscar sametime silc silc10 simple yahoo zephyr
+DIST_SUBDIRS = bonjour gg irc jabber novell null oscar sametime silc silc10 simple zephyr
 
 SUBDIRS = $(DYNAMIC_PRPLS) $(STATIC_PRPLS)
diff --git a/pidgin-2.11.0/libpurple/protocols/Makefile.mingw b/pidgin-2.12.0/libpurple/protocols/Makefile.mingw
index 8b6ca1a..f8f0557 100644
--- a/pidgin-2.11.0/libpurple/protocols/Makefile.mingw
+++ b/pidgin-2.12.0/libpurple/protocols/Makefile.mingw
@@ -8,7 +8,7 @@
 PIDGIN_TREE_TOP := ../..
 include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
 
-SUBDIRS = gg irc jabber msn mxit novell null oscar sametime silc simple yahoo bonjour myspace
+SUBDIRS = gg irc jabber novell null oscar sametime silc simple bonjour
 
 .PHONY: all install clean
 
diff --git a/pidgin-2.11.0/libpurple/protocols/bonjour/bonjour.c b/pidgin-2.12.0/libpurple/protocols/bonjour/bonjour.c
index ac527c0..3b5bdba 100644
--- a/pidgin-2.11.0/libpurple/protocols/bonjour/bonjour.c
+++ b/pidgin-2.12.0/libpurple/protocols/bonjour/bonjour.c
@@ -97,7 +97,7 @@ bonjour_login(PurpleAccount *account)
 		purple_connection_error_reason(gc,
 				PURPLE_CONNECTION_ERROR_OTHER_ERROR,
 				_("Unable to find Apple's \"Bonjour for Windows\" toolkit, see "
-				  "http://d.pidgin.im/BonjourWindows for more information."));
+				  "https://developer.pidgin.im/BonjourWindows for more information."));
 		return;
 	}
 #endif /* _WIN32 */
diff --git a/pidgin-2.11.0/libpurple/protocols/bonjour/jabber.c b/pidgin-2.12.0/libpurple/protocols/bonjour/jabber.c
index 451bdd4..8f0b7f2 100644
--- a/pidgin-2.11.0/libpurple/protocols/bonjour/jabber.c
+++ b/pidgin-2.12.0/libpurple/protocols/bonjour/jabber.c
@@ -1320,8 +1320,8 @@ xep_iq_parse(xmlnode *packet, PurpleBuddy *pb)
 	if(check_if_blocked(pb))
 		return;
 
-		account = purple_buddy_get_account(pb);
-		gc = purple_account_get_connection(account);
+	account = purple_buddy_get_account(pb);
+	gc = purple_account_get_connection(account);
 
 	if (xmlnode_get_child(packet, "si") != NULL || xmlnode_get_child(packet, "error") != NULL)
 		xep_si_parse(gc, packet, pb);
diff --git a/pidgin-2.11.0/libpurple/protocols/irc/cmds.c b/pidgin-2.12.0/libpurple/protocols/irc/cmds.c
index 70f4cf2..9b8de7e 100644
--- a/pidgin-2.11.0/libpurple/protocols/irc/cmds.c
+++ b/pidgin-2.12.0/libpurple/protocols/irc/cmds.c
@@ -424,18 +424,29 @@ int irc_cmd_ping(struct irc_conn *irc, const char *cmd, const char *target, cons
 
 int irc_cmd_privmsg(struct irc_conn *irc, const char *cmd, const char *target, const char **args)
 {
+	int max_privmsg_arg_len;
 	const char *cur, *end;
+	gchar *salvaged;
 	char *msg, *buf;
 
 	if (!args || !args[0] || !args[1])
 		return 0;
 
-	cur = args[1];
-	end = args[1];
+	max_privmsg_arg_len = IRC_MAX_MSG_SIZE - strlen(args[0]) - 64;
+	salvaged = purple_utf8_salvage(args[1]);
+	cur = salvaged;
+	end = salvaged;
 	while (*end && *cur) {
 		end = strchr(cur, '\n');
 		if (!end)
 			end = cur + strlen(cur);
+		if (end - cur > max_privmsg_arg_len) {
+			/* this call is used to find the last valid character position in the first
+			 * max_privmsg_arg_len bytes of the utf-8 message
+			 */
+			g_utf8_validate(cur, max_privmsg_arg_len, &end);
+		}
+
 		msg = g_strndup(cur, end - cur);
 
 		if(!strcmp(cmd, "notice"))
@@ -446,9 +457,14 @@ int irc_cmd_privmsg(struct irc_conn *irc, const char *cmd, const char *target, c
 		irc_send(irc, buf);
 		g_free(msg);
 		g_free(buf);
-		cur = end + 1;
+		cur = end;
+		if(*cur == '\n') {
+			cur++;
+		}
 	}
 
+	g_free(salvaged);
+
 	return 0;
 }
 
diff --git a/pidgin-2.11.0/libpurple/protocols/irc/irc.h b/pidgin-2.12.0/libpurple/protocols/irc/irc.h
index d268ec7..fde35c4 100644
--- a/pidgin-2.11.0/libpurple/protocols/irc/irc.h
+++ b/pidgin-2.12.0/libpurple/protocols/irc/irc.h
@@ -46,6 +46,8 @@
 
 #define IRC_INITIAL_BUFSIZE 1024
 
+#define IRC_MAX_MSG_SIZE 512
+
 #define IRC_NAMES_FLAG "irc-namelist"
 
 
diff --git a/pidgin-2.11.0/libpurple/protocols/irc/msgs.c b/pidgin-2.12.0/libpurple/protocols/irc/msgs.c
index c44ff38..99baf4c 100644
--- a/pidgin-2.11.0/libpurple/protocols/irc/msgs.c
+++ b/pidgin-2.12.0/libpurple/protocols/irc/msgs.c
@@ -1574,6 +1574,8 @@ irc_msg_cap(struct irc_conn *irc, const char *name, const char *from, char **arg
 	int id = 0;
 	PurpleConnection *gc = purple_account_get_connection(irc->account);
 	const char *mech_list = NULL;
+	char *pos;
+	size_t index;
 
 	if (strncmp(args[2], "sasl ", 6))
 		return;
@@ -1637,6 +1639,15 @@ irc_msg_cap(struct irc_conn *irc, const char *name, const char *from, char **arg
 	}
 
 	irc->sasl_mechs = g_string_new(mech_list);
+	/* Drop EXTERNAL mechanism since we don't support it */
+	if ((pos = strstr(irc->sasl_mechs->str, "EXTERNAL"))) {
+		index = pos - irc->sasl_mechs->str;
+		g_string_erase(irc->sasl_mechs, index, strlen("EXTERNAL"));
+		/* Remove space which separated this mech from the next */
+		if ((irc->sasl_mechs->str)[index] == ' ') {
+			g_string_erase(irc->sasl_mechs, index, 1);
+		}
+	}
 
 	irc_auth_start_cyrus(irc);
 }
diff --git a/pidgin-2.11.0/libpurple/protocols/jabber/Makefile.am b/pidgin-2.12.0/libpurple/protocols/jabber/Makefile.am
index 7a53f3b..9fdd3a9 100644
--- a/pidgin-2.11.0/libpurple/protocols/jabber/Makefile.am
+++ b/pidgin-2.12.0/libpurple/protocols/jabber/Makefile.am
@@ -27,8 +27,6 @@ JABBERSOURCES = \
 			  data.h \
 			  disco.c \
 			  disco.h \
-			  facebook_roster.c \
-			  facebook_roster.h \
 			  google/gmail.c \
 			  google/gmail.h \
 			  google/google.c \
diff --git a/pidgin-2.11.0/libpurple/protocols/jabber/Makefile.mingw b/pidgin-2.12.0/libpurple/protocols/jabber/Makefile.mingw
index f186321..9014c92 100644
--- a/pidgin-2.11.0/libpurple/protocols/jabber/Makefile.mingw
+++ b/pidgin-2.12.0/libpurple/protocols/jabber/Makefile.mingw
@@ -55,7 +55,6 @@ C_SRC =	\
 			chat.c \
 			data.c \
 			disco.c \
-			facebook_roster.c \
 			google/gmail.c \
 			google/google.c \
 			google/google_presence.c \
diff --git a/pidgin-2.11.0/libpurple/protocols/jabber/facebook_roster.c b/pidgin-2.11.0/libpurple/protocols/jabber/facebook_roster.c
deleted file mode 100644
index 6a966e0..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/jabber/facebook_roster.h b/pidgin-2.11.0/libpurple/protocols/jabber/facebook_roster.h
diff --git a/pidgin-2.11.0/libpurple/protocols/jabber/facebook_roster.h b/pidgin-2.11.0/libpurple/protocols/jabber/facebook_roster.h
deleted file mode 100644
index 66d2bcf..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/jabber/jabber.c b/pidgin-2.12.0/libpurple/protocols/jabber/jabber.c
diff --git a/pidgin-2.11.0/libpurple/protocols/jabber/jabber.c b/pidgin-2.12.0/libpurple/protocols/jabber/jabber.c
index aacd431..1d37673 100644
--- a/pidgin-2.11.0/libpurple/protocols/jabber/jabber.c
+++ b/pidgin-2.12.0/libpurple/protocols/jabber/jabber.c
@@ -934,12 +934,6 @@ jabber_stream_new(PurpleAccount *account)
 	js->gc = gc;
 	js->fd = -1;
 
-	if (g_strcmp0("prpl-facebook-xmpp",
-		purple_account_get_protocol_id(account)) == 0)
-	{
-		js->server_caps |= JABBER_CAP_FACEBOOK;
-	}
-
 	user = g_strdup(purple_account_get_username(account));
 	/* jabber_id_new doesn't accept "user@domain/" as valid */
 	slash = strchr(user, '/');
diff --git a/pidgin-2.11.0/libpurple/protocols/jabber/jabber.h b/pidgin-2.12.0/libpurple/protocols/jabber/jabber.h
index e90b06b..543d0af 100644
--- a/pidgin-2.11.0/libpurple/protocols/jabber/jabber.h
+++ b/pidgin-2.12.0/libpurple/protocols/jabber/jabber.h
@@ -49,8 +49,6 @@ typedef enum {
 	JABBER_CAP_ITEMS          = 1 << 14,
 	JABBER_CAP_ROSTER_VERSIONING = 1 << 15,
 
-	JABBER_CAP_FACEBOOK       = 1 << 16,
-
 	JABBER_CAP_RETRIEVED      = 1 << 31
 } JabberCapabilities;
 
@@ -284,9 +282,6 @@ struct _JabberStream
 	gchar *google_relay_host;
 	GList *google_relay_requests; /* the HTTP requests to get */
 												/* relay info */
-
-	/* facebook quirks */
-	gboolean facebook_roster_cleanup_performed;
 };
 
 typedef gboolean (JabberFeatureEnabled)(JabberStream *js, const gchar *namespace);
diff --git a/pidgin-2.11.0/libpurple/protocols/jabber/libxmpp.c b/pidgin-2.12.0/libpurple/protocols/jabber/libxmpp.c
index f34052b..3cd86c0 100644
--- a/pidgin-2.11.0/libpurple/protocols/jabber/libxmpp.c
+++ b/pidgin-2.12.0/libpurple/protocols/jabber/libxmpp.c
@@ -315,8 +315,9 @@ init_plugin(PurplePlugin *plugin)
 	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options,
 						  option);
 
-	/* this should probably be part of global smiley theme settings later on,
-	  shared with MSN */
+	/* this should probably be part of global smiley theme settings
+	 * later on
+	 */
 	option = purple_account_option_bool_new(_("Show Custom Smileys"),
 		"custom_smileys", TRUE);
 	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options,
diff --git a/pidgin-2.11.0/libpurple/protocols/jabber/roster.c b/pidgin-2.12.0/libpurple/protocols/jabber/roster.c
index 8c00b0e..35f0e29 100644
--- a/pidgin-2.11.0/libpurple/protocols/jabber/roster.c
+++ b/pidgin-2.12.0/libpurple/protocols/jabber/roster.c
@@ -27,7 +27,6 @@
 
 #include "buddy.h"
 #include "chat.h"
-#include "facebook_roster.h"
 #include "google/google.h"
 #include "google/google_roster.h"
 #include "presence.h"
@@ -212,18 +211,11 @@ void jabber_roster_parse(JabberStream *js, const char *from,
 
 	js->currently_parsing_roster_push = TRUE;
 
-	if (js->server_caps & JABBER_CAP_FACEBOOK)
-		jabber_facebook_roster_cleanup(js, query);
-
 	for(item = xmlnode_get_child(query, "item"); item; item = xmlnode_get_next_twin(item))
 	{
 		const char *jid, *name, *subscription, *ask;
 		JabberBuddy *jb;
 
-		if (js->server_caps & JABBER_CAP_FACEBOOK)
-			if (!jabber_facebook_roster_incoming(js, item))
-				continue;
-
 		subscription = xmlnode_get_attrib(item, "subscription");
 		jid = xmlnode_get_attrib(item, "jid");
 		name = xmlnode_get_attrib(item, "name");
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/Makefile.am b/pidgin-2.11.0/libpurple/protocols/msn/Makefile.am
deleted file mode 100644
index f2edc64..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/Makefile.in b/pidgin-2.11.0/libpurple/protocols/msn/Makefile.in
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/Makefile.in b/pidgin-2.11.0/libpurple/protocols/msn/Makefile.in
deleted file mode 100644
index 5a41b04..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/Makefile.mingw b/pidgin-2.11.0/libpurple/protocols/msn/Makefile.mingw
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/Makefile.mingw b/pidgin-2.11.0/libpurple/protocols/msn/Makefile.mingw
deleted file mode 100644
index 5d3072f..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/cmdproc.c b/pidgin-2.11.0/libpurple/protocols/msn/cmdproc.c
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/cmdproc.c b/pidgin-2.11.0/libpurple/protocols/msn/cmdproc.c
deleted file mode 100644
index 7a27f63..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/cmdproc.h b/pidgin-2.11.0/libpurple/protocols/msn/cmdproc.h
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/cmdproc.h b/pidgin-2.11.0/libpurple/protocols/msn/cmdproc.h
deleted file mode 100644
index 9ec6c49..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/command.c b/pidgin-2.11.0/libpurple/protocols/msn/command.c
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/command.c b/pidgin-2.11.0/libpurple/protocols/msn/command.c
deleted file mode 100644
index 0be77b4..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/command.h b/pidgin-2.11.0/libpurple/protocols/msn/command.h
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/command.h b/pidgin-2.11.0/libpurple/protocols/msn/command.h
deleted file mode 100644
index d5d2d3a..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/contact.c b/pidgin-2.11.0/libpurple/protocols/msn/contact.c
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/contact.c b/pidgin-2.11.0/libpurple/protocols/msn/contact.c
deleted file mode 100644
index 4fba51a..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/contact.h b/pidgin-2.11.0/libpurple/protocols/msn/contact.h
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/contact.h b/pidgin-2.11.0/libpurple/protocols/msn/contact.h
deleted file mode 100644
index fcd60d7..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/directconn.c b/pidgin-2.11.0/libpurple/protocols/msn/directconn.c
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/directconn.c b/pidgin-2.11.0/libpurple/protocols/msn/directconn.c
deleted file mode 100644
index cbffb9f..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/directconn.h b/pidgin-2.11.0/libpurple/protocols/msn/directconn.h
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/directconn.h b/pidgin-2.11.0/libpurple/protocols/msn/directconn.h
deleted file mode 100644
index 41a05d2..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/error.c b/pidgin-2.11.0/libpurple/protocols/msn/error.c
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/error.c b/pidgin-2.11.0/libpurple/protocols/msn/error.c
deleted file mode 100644
index 68690ef..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/error.h b/pidgin-2.11.0/libpurple/protocols/msn/error.h
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/error.h b/pidgin-2.11.0/libpurple/protocols/msn/error.h
deleted file mode 100644
index 5194eaa..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/group.c b/pidgin-2.11.0/libpurple/protocols/msn/group.c
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/group.c b/pidgin-2.11.0/libpurple/protocols/msn/group.c
deleted file mode 100644
index ddb1541..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/group.h b/pidgin-2.11.0/libpurple/protocols/msn/group.h
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/group.h b/pidgin-2.11.0/libpurple/protocols/msn/group.h
deleted file mode 100644
index 620d241..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/history.c b/pidgin-2.11.0/libpurple/protocols/msn/history.c
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/history.c b/pidgin-2.11.0/libpurple/protocols/msn/history.c
deleted file mode 100644
index 2b23af5..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/history.h b/pidgin-2.11.0/libpurple/protocols/msn/history.h
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/history.h b/pidgin-2.11.0/libpurple/protocols/msn/history.h
deleted file mode 100644
index 7ceef1f..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/httpconn.c b/pidgin-2.11.0/libpurple/protocols/msn/httpconn.c
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/httpconn.c b/pidgin-2.11.0/libpurple/protocols/msn/httpconn.c
deleted file mode 100644
index 2f52d1e..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/httpconn.h b/pidgin-2.11.0/libpurple/protocols/msn/httpconn.h
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/httpconn.h b/pidgin-2.11.0/libpurple/protocols/msn/httpconn.h
deleted file mode 100644
index 381a27b..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/msg.c b/pidgin-2.11.0/libpurple/protocols/msn/msg.c
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/msg.c b/pidgin-2.11.0/libpurple/protocols/msn/msg.c
deleted file mode 100644
index 4f97273..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/msg.h b/pidgin-2.11.0/libpurple/protocols/msn/msg.h
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/msg.h b/pidgin-2.11.0/libpurple/protocols/msn/msg.h
deleted file mode 100644
index 845a839..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/msn.c b/pidgin-2.11.0/libpurple/protocols/msn/msn.c
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/msn.c b/pidgin-2.11.0/libpurple/protocols/msn/msn.c
deleted file mode 100644
index 09ead6b..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/msn.h b/pidgin-2.11.0/libpurple/protocols/msn/msn.h
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/msn.h b/pidgin-2.11.0/libpurple/protocols/msn/msn.h
deleted file mode 100644
index 7af87ec..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/msnutils.c b/pidgin-2.11.0/libpurple/protocols/msn/msnutils.c
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/msnutils.c b/pidgin-2.11.0/libpurple/protocols/msn/msnutils.c
deleted file mode 100644
index d2edd36..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/msnutils.h b/pidgin-2.11.0/libpurple/protocols/msn/msnutils.h
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/msnutils.h b/pidgin-2.11.0/libpurple/protocols/msn/msnutils.h
deleted file mode 100644
index c4ed8fc..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/nexus.c b/pidgin-2.11.0/libpurple/protocols/msn/nexus.c
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/nexus.c b/pidgin-2.11.0/libpurple/protocols/msn/nexus.c
deleted file mode 100644
index 34e9f66..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/nexus.h b/pidgin-2.11.0/libpurple/protocols/msn/nexus.h
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/nexus.h b/pidgin-2.11.0/libpurple/protocols/msn/nexus.h
deleted file mode 100644
index f615078..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/notification.c b/pidgin-2.11.0/libpurple/protocols/msn/notification.c
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/notification.c b/pidgin-2.11.0/libpurple/protocols/msn/notification.c
deleted file mode 100644
index 2b3f334..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/notification.h b/pidgin-2.11.0/libpurple/protocols/msn/notification.h
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/notification.h b/pidgin-2.11.0/libpurple/protocols/msn/notification.h
deleted file mode 100644
index 4e9798d..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/object.c b/pidgin-2.11.0/libpurple/protocols/msn/object.c
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/object.c b/pidgin-2.11.0/libpurple/protocols/msn/object.c
deleted file mode 100644
index bee2641..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/object.h b/pidgin-2.11.0/libpurple/protocols/msn/object.h
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/object.h b/pidgin-2.11.0/libpurple/protocols/msn/object.h
deleted file mode 100644
index 81572dc..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/oim.c b/pidgin-2.11.0/libpurple/protocols/msn/oim.c
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/oim.c b/pidgin-2.11.0/libpurple/protocols/msn/oim.c
deleted file mode 100644
index 54b5a66..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/oim.h b/pidgin-2.11.0/libpurple/protocols/msn/oim.h
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/oim.h b/pidgin-2.11.0/libpurple/protocols/msn/oim.h
deleted file mode 100644
index 17751ea..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/p2p.c b/pidgin-2.11.0/libpurple/protocols/msn/p2p.c
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/p2p.c b/pidgin-2.11.0/libpurple/protocols/msn/p2p.c
deleted file mode 100644
index d39979e..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/p2p.h b/pidgin-2.11.0/libpurple/protocols/msn/p2p.h
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/p2p.h b/pidgin-2.11.0/libpurple/protocols/msn/p2p.h
deleted file mode 100644
index 89ac239..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/page.c b/pidgin-2.11.0/libpurple/protocols/msn/page.c
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/page.c b/pidgin-2.11.0/libpurple/protocols/msn/page.c
deleted file mode 100644
index a357af4..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/page.h b/pidgin-2.11.0/libpurple/protocols/msn/page.h
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/page.h b/pidgin-2.11.0/libpurple/protocols/msn/page.h
deleted file mode 100644
index 4fb89f5..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/sbconn.c b/pidgin-2.11.0/libpurple/protocols/msn/sbconn.c
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/sbconn.c b/pidgin-2.11.0/libpurple/protocols/msn/sbconn.c
deleted file mode 100644
index a9a6288..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/sbconn.h b/pidgin-2.11.0/libpurple/protocols/msn/sbconn.h
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/sbconn.h b/pidgin-2.11.0/libpurple/protocols/msn/sbconn.h
deleted file mode 100644
index 3b59172..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/servconn.c b/pidgin-2.11.0/libpurple/protocols/msn/servconn.c
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/servconn.c b/pidgin-2.11.0/libpurple/protocols/msn/servconn.c
deleted file mode 100644
index 2d8ea83..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/servconn.h b/pidgin-2.11.0/libpurple/protocols/msn/servconn.h
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/servconn.h b/pidgin-2.11.0/libpurple/protocols/msn/servconn.h
deleted file mode 100644
index b075fd0..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/session.c b/pidgin-2.11.0/libpurple/protocols/msn/session.c
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/session.c b/pidgin-2.11.0/libpurple/protocols/msn/session.c
deleted file mode 100644
index 371800a..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/session.h b/pidgin-2.11.0/libpurple/protocols/msn/session.h
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/session.h b/pidgin-2.11.0/libpurple/protocols/msn/session.h
deleted file mode 100644
index e94b3b7..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/slp.c b/pidgin-2.11.0/libpurple/protocols/msn/slp.c
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/slp.c b/pidgin-2.11.0/libpurple/protocols/msn/slp.c
deleted file mode 100644
index 85c78b2..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/slp.h b/pidgin-2.11.0/libpurple/protocols/msn/slp.h
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/slp.h b/pidgin-2.11.0/libpurple/protocols/msn/slp.h
deleted file mode 100644
index 0be19f0..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/slpcall.c b/pidgin-2.11.0/libpurple/protocols/msn/slpcall.c
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/slpcall.c b/pidgin-2.11.0/libpurple/protocols/msn/slpcall.c
deleted file mode 100644
index 2f06124..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/slpcall.h b/pidgin-2.11.0/libpurple/protocols/msn/slpcall.h
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/slpcall.h b/pidgin-2.11.0/libpurple/protocols/msn/slpcall.h
deleted file mode 100644
index 3cfacf0..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/slplink.c b/pidgin-2.11.0/libpurple/protocols/msn/slplink.c
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/slplink.c b/pidgin-2.11.0/libpurple/protocols/msn/slplink.c
deleted file mode 100644
index c2b5453..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/slplink.h b/pidgin-2.11.0/libpurple/protocols/msn/slplink.h
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/slplink.h b/pidgin-2.11.0/libpurple/protocols/msn/slplink.h
deleted file mode 100644
index 2ce34e1..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/slpmsg.c b/pidgin-2.11.0/libpurple/protocols/msn/slpmsg.c
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/slpmsg.c b/pidgin-2.11.0/libpurple/protocols/msn/slpmsg.c
deleted file mode 100644
index 4a75e3a..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/slpmsg.h b/pidgin-2.11.0/libpurple/protocols/msn/slpmsg.h
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/slpmsg.h b/pidgin-2.11.0/libpurple/protocols/msn/slpmsg.h
deleted file mode 100644
index 45c755e..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/slpmsg_part.c b/pidgin-2.11.0/libpurple/protocols/msn/slpmsg_part.c
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/slpmsg_part.c b/pidgin-2.11.0/libpurple/protocols/msn/slpmsg_part.c
deleted file mode 100644
index add959a..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/slpmsg_part.h b/pidgin-2.11.0/libpurple/protocols/msn/slpmsg_part.h
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/slpmsg_part.h b/pidgin-2.11.0/libpurple/protocols/msn/slpmsg_part.h
deleted file mode 100644
index 460eaa6..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/soap.c b/pidgin-2.11.0/libpurple/protocols/msn/soap.c
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/soap.c b/pidgin-2.11.0/libpurple/protocols/msn/soap.c
deleted file mode 100644
index 4cb571e..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/soap.h b/pidgin-2.11.0/libpurple/protocols/msn/soap.h
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/soap.h b/pidgin-2.11.0/libpurple/protocols/msn/soap.h
deleted file mode 100644
index de4d50e..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/state.c b/pidgin-2.11.0/libpurple/protocols/msn/state.c
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/state.c b/pidgin-2.11.0/libpurple/protocols/msn/state.c
deleted file mode 100644
index 7157cfc..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/state.h b/pidgin-2.11.0/libpurple/protocols/msn/state.h
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/state.h b/pidgin-2.11.0/libpurple/protocols/msn/state.h
deleted file mode 100644
index eca8777..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/switchboard.c b/pidgin-2.11.0/libpurple/protocols/msn/switchboard.c
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/switchboard.c b/pidgin-2.11.0/libpurple/protocols/msn/switchboard.c
deleted file mode 100644
index cc4ef75..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/switchboard.h b/pidgin-2.11.0/libpurple/protocols/msn/switchboard.h
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/switchboard.h b/pidgin-2.11.0/libpurple/protocols/msn/switchboard.h
deleted file mode 100644
index 5a12538..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/table.c b/pidgin-2.11.0/libpurple/protocols/msn/table.c
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/table.c b/pidgin-2.11.0/libpurple/protocols/msn/table.c
deleted file mode 100644
index c0642c7..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/table.h b/pidgin-2.11.0/libpurple/protocols/msn/table.h
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/table.h b/pidgin-2.11.0/libpurple/protocols/msn/table.h
deleted file mode 100644
index 83d9954..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/tlv.c b/pidgin-2.11.0/libpurple/protocols/msn/tlv.c
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/tlv.c b/pidgin-2.11.0/libpurple/protocols/msn/tlv.c
deleted file mode 100644
index d05cf4b..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/tlv.h b/pidgin-2.11.0/libpurple/protocols/msn/tlv.h
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/tlv.h b/pidgin-2.11.0/libpurple/protocols/msn/tlv.h
deleted file mode 100644
index 065dee3..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/transaction.c b/pidgin-2.11.0/libpurple/protocols/msn/transaction.c
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/transaction.c b/pidgin-2.11.0/libpurple/protocols/msn/transaction.c
deleted file mode 100644
index 57f3464..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/transaction.h b/pidgin-2.11.0/libpurple/protocols/msn/transaction.h
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/transaction.h b/pidgin-2.11.0/libpurple/protocols/msn/transaction.h
deleted file mode 100644
index 10fe8fc..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/user.c b/pidgin-2.11.0/libpurple/protocols/msn/user.c
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/user.c b/pidgin-2.11.0/libpurple/protocols/msn/user.c
deleted file mode 100644
index a9565be..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/user.h b/pidgin-2.11.0/libpurple/protocols/msn/user.h
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/user.h b/pidgin-2.11.0/libpurple/protocols/msn/user.h
deleted file mode 100644
index 727c717..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/userlist.c b/pidgin-2.11.0/libpurple/protocols/msn/userlist.c
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/userlist.c b/pidgin-2.11.0/libpurple/protocols/msn/userlist.c
deleted file mode 100644
index 8ad7381..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/userlist.h b/pidgin-2.11.0/libpurple/protocols/msn/userlist.h
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/userlist.h b/pidgin-2.11.0/libpurple/protocols/msn/userlist.h
deleted file mode 100644
index 4e9582a..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/xfer.c b/pidgin-2.11.0/libpurple/protocols/msn/xfer.c
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/xfer.c b/pidgin-2.11.0/libpurple/protocols/msn/xfer.c
deleted file mode 100644
index 4da276d..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/xfer.h b/pidgin-2.11.0/libpurple/protocols/msn/xfer.h
diff --git a/pidgin-2.11.0/libpurple/protocols/msn/xfer.h b/pidgin-2.11.0/libpurple/protocols/msn/xfer.h
deleted file mode 100644
index 23e19f3..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/Makefile.am b/pidgin-2.11.0/libpurple/protocols/mxit/Makefile.am
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/Makefile.am b/pidgin-2.11.0/libpurple/protocols/mxit/Makefile.am
deleted file mode 100644
index 9d89cc9..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/Makefile.in b/pidgin-2.11.0/libpurple/protocols/mxit/Makefile.in
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/Makefile.in b/pidgin-2.11.0/libpurple/protocols/mxit/Makefile.in
deleted file mode 100644
index a3a1263..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/Makefile.mingw b/pidgin-2.11.0/libpurple/protocols/mxit/Makefile.mingw
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/Makefile.mingw b/pidgin-2.11.0/libpurple/protocols/mxit/Makefile.mingw
deleted file mode 100644
index 00d0b6d..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/actions.c b/pidgin-2.11.0/libpurple/protocols/mxit/actions.c
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/actions.c b/pidgin-2.11.0/libpurple/protocols/mxit/actions.c
deleted file mode 100644
index 4bf77f3..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/actions.h b/pidgin-2.11.0/libpurple/protocols/mxit/actions.h
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/actions.h b/pidgin-2.11.0/libpurple/protocols/mxit/actions.h
deleted file mode 100644
index 0157e17..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/aes.c b/pidgin-2.11.0/libpurple/protocols/mxit/aes.c
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/aes.c b/pidgin-2.11.0/libpurple/protocols/mxit/aes.c
deleted file mode 100644
index 2a2702b..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/aes.h b/pidgin-2.11.0/libpurple/protocols/mxit/aes.h
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/aes.h b/pidgin-2.11.0/libpurple/protocols/mxit/aes.h
deleted file mode 100644
index 831a30d..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/chunk.c b/pidgin-2.11.0/libpurple/protocols/mxit/chunk.c
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/chunk.c b/pidgin-2.11.0/libpurple/protocols/mxit/chunk.c
deleted file mode 100644
index 66dbb3a..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/chunk.h b/pidgin-2.11.0/libpurple/protocols/mxit/chunk.h
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/chunk.h b/pidgin-2.11.0/libpurple/protocols/mxit/chunk.h
deleted file mode 100644
index 841c4e6..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/cipher.c b/pidgin-2.11.0/libpurple/protocols/mxit/cipher.c
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/cipher.c b/pidgin-2.11.0/libpurple/protocols/mxit/cipher.c
deleted file mode 100644
index 856dfe3..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/cipher.h b/pidgin-2.11.0/libpurple/protocols/mxit/cipher.h
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/cipher.h b/pidgin-2.11.0/libpurple/protocols/mxit/cipher.h
deleted file mode 100644
index 1c1c4c0..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/filexfer.c b/pidgin-2.11.0/libpurple/protocols/mxit/filexfer.c
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/filexfer.c b/pidgin-2.11.0/libpurple/protocols/mxit/filexfer.c
deleted file mode 100644
index b96f3f0..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/filexfer.h b/pidgin-2.11.0/libpurple/protocols/mxit/filexfer.h
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/filexfer.h b/pidgin-2.11.0/libpurple/protocols/mxit/filexfer.h
deleted file mode 100644
index cd0a20f..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/formcmds.c b/pidgin-2.11.0/libpurple/protocols/mxit/formcmds.c
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/formcmds.c b/pidgin-2.11.0/libpurple/protocols/mxit/formcmds.c
deleted file mode 100644
index 1edad2d..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/formcmds.h b/pidgin-2.11.0/libpurple/protocols/mxit/formcmds.h
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/formcmds.h b/pidgin-2.11.0/libpurple/protocols/mxit/formcmds.h
deleted file mode 100644
index 1932fd1..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/http.c b/pidgin-2.11.0/libpurple/protocols/mxit/http.c
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/http.c b/pidgin-2.11.0/libpurple/protocols/mxit/http.c
deleted file mode 100644
index 423659a..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/http.h b/pidgin-2.11.0/libpurple/protocols/mxit/http.h
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/http.h b/pidgin-2.11.0/libpurple/protocols/mxit/http.h
deleted file mode 100644
index eef0e4d..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/login.c b/pidgin-2.11.0/libpurple/protocols/mxit/login.c
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/login.c b/pidgin-2.11.0/libpurple/protocols/mxit/login.c
deleted file mode 100644
index 2397154..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/login.h b/pidgin-2.11.0/libpurple/protocols/mxit/login.h
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/login.h b/pidgin-2.11.0/libpurple/protocols/mxit/login.h
deleted file mode 100644
index 14947b0..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/markup.c b/pidgin-2.11.0/libpurple/protocols/mxit/markup.c
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/markup.c b/pidgin-2.11.0/libpurple/protocols/mxit/markup.c
deleted file mode 100644
index 040927f..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/markup.h b/pidgin-2.11.0/libpurple/protocols/mxit/markup.h
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/markup.h b/pidgin-2.11.0/libpurple/protocols/mxit/markup.h
deleted file mode 100644
index 9d19d8c..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/multimx.c b/pidgin-2.11.0/libpurple/protocols/mxit/multimx.c
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/multimx.c b/pidgin-2.11.0/libpurple/protocols/mxit/multimx.c
deleted file mode 100644
index d21c60e..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/multimx.h b/pidgin-2.11.0/libpurple/protocols/mxit/multimx.h
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/multimx.h b/pidgin-2.11.0/libpurple/protocols/mxit/multimx.h
deleted file mode 100644
index e9470b6..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/mxit.c b/pidgin-2.11.0/libpurple/protocols/mxit/mxit.c
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/mxit.c b/pidgin-2.11.0/libpurple/protocols/mxit/mxit.c
deleted file mode 100644
index baf4f4b..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/mxit.h b/pidgin-2.11.0/libpurple/protocols/mxit/mxit.h
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/mxit.h b/pidgin-2.11.0/libpurple/protocols/mxit/mxit.h
deleted file mode 100644
index 3688bd3..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/profile.c b/pidgin-2.11.0/libpurple/protocols/mxit/profile.c
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/profile.c b/pidgin-2.11.0/libpurple/protocols/mxit/profile.c
deleted file mode 100644
index 207a111..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/profile.h b/pidgin-2.11.0/libpurple/protocols/mxit/profile.h
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/profile.h b/pidgin-2.11.0/libpurple/protocols/mxit/profile.h
deleted file mode 100644
index 83e0a8b..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/protocol.c b/pidgin-2.11.0/libpurple/protocols/mxit/protocol.c
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/protocol.c b/pidgin-2.11.0/libpurple/protocols/mxit/protocol.c
deleted file mode 100644
index 1c7f905..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/protocol.h b/pidgin-2.11.0/libpurple/protocols/mxit/protocol.h
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/protocol.h b/pidgin-2.11.0/libpurple/protocols/mxit/protocol.h
deleted file mode 100644
index fad7ae5..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/roster.c b/pidgin-2.11.0/libpurple/protocols/mxit/roster.c
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/roster.c b/pidgin-2.11.0/libpurple/protocols/mxit/roster.c
deleted file mode 100644
index 3c2ab12..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/roster.h b/pidgin-2.11.0/libpurple/protocols/mxit/roster.h
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/roster.h b/pidgin-2.11.0/libpurple/protocols/mxit/roster.h
deleted file mode 100644
index 055bc22..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/splashscreen.c b/pidgin-2.11.0/libpurple/protocols/mxit/splashscreen.c
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/splashscreen.c b/pidgin-2.11.0/libpurple/protocols/mxit/splashscreen.c
deleted file mode 100644
index 2732e23..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/splashscreen.h b/pidgin-2.11.0/libpurple/protocols/mxit/splashscreen.h
diff --git a/pidgin-2.11.0/libpurple/protocols/mxit/splashscreen.h b/pidgin-2.11.0/libpurple/protocols/mxit/splashscreen.h
deleted file mode 100644
index ddc959c..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/myspace/Makefile.am b/pidgin-2.11.0/libpurple/protocols/myspace/Makefile.am
diff --git a/pidgin-2.11.0/libpurple/protocols/myspace/Makefile.am b/pidgin-2.11.0/libpurple/protocols/myspace/Makefile.am
deleted file mode 100644
index 715cabc..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/myspace/Makefile.in b/pidgin-2.11.0/libpurple/protocols/myspace/Makefile.in
diff --git a/pidgin-2.11.0/libpurple/protocols/myspace/Makefile.in b/pidgin-2.11.0/libpurple/protocols/myspace/Makefile.in
deleted file mode 100644
index 7d3b6af..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/myspace/Makefile.mingw b/pidgin-2.11.0/libpurple/protocols/myspace/Makefile.mingw
diff --git a/pidgin-2.11.0/libpurple/protocols/myspace/Makefile.mingw b/pidgin-2.11.0/libpurple/protocols/myspace/Makefile.mingw
deleted file mode 100644
index 0fc7534..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/myspace/README b/pidgin-2.11.0/libpurple/protocols/myspace/README
diff --git a/pidgin-2.11.0/libpurple/protocols/myspace/README b/pidgin-2.11.0/libpurple/protocols/myspace/README
deleted file mode 100644
index f9f062c..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/myspace/markup.c b/pidgin-2.11.0/libpurple/protocols/myspace/markup.c
diff --git a/pidgin-2.11.0/libpurple/protocols/myspace/markup.c b/pidgin-2.11.0/libpurple/protocols/myspace/markup.c
deleted file mode 100644
index 05d473e..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/myspace/markup.h b/pidgin-2.11.0/libpurple/protocols/myspace/markup.h
diff --git a/pidgin-2.11.0/libpurple/protocols/myspace/markup.h b/pidgin-2.11.0/libpurple/protocols/myspace/markup.h
deleted file mode 100644
index dfbbeba..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/myspace/message.c b/pidgin-2.11.0/libpurple/protocols/myspace/message.c
diff --git a/pidgin-2.11.0/libpurple/protocols/myspace/message.c b/pidgin-2.11.0/libpurple/protocols/myspace/message.c
deleted file mode 100644
index 9eb44b3..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/myspace/message.h b/pidgin-2.11.0/libpurple/protocols/myspace/message.h
diff --git a/pidgin-2.11.0/libpurple/protocols/myspace/message.h b/pidgin-2.11.0/libpurple/protocols/myspace/message.h
deleted file mode 100644
index 5f1bcc8..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/myspace/myspace.c b/pidgin-2.11.0/libpurple/protocols/myspace/myspace.c
diff --git a/pidgin-2.11.0/libpurple/protocols/myspace/myspace.c b/pidgin-2.11.0/libpurple/protocols/myspace/myspace.c
deleted file mode 100644
index 4a26119..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/myspace/myspace.h b/pidgin-2.11.0/libpurple/protocols/myspace/myspace.h
diff --git a/pidgin-2.11.0/libpurple/protocols/myspace/myspace.h b/pidgin-2.11.0/libpurple/protocols/myspace/myspace.h
deleted file mode 100644
index eecfc20..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/myspace/persist.h b/pidgin-2.11.0/libpurple/protocols/myspace/persist.h
diff --git a/pidgin-2.11.0/libpurple/protocols/myspace/persist.h b/pidgin-2.11.0/libpurple/protocols/myspace/persist.h
deleted file mode 100644
index 09712c9..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/myspace/session.c b/pidgin-2.11.0/libpurple/protocols/myspace/session.c
diff --git a/pidgin-2.11.0/libpurple/protocols/myspace/session.c b/pidgin-2.11.0/libpurple/protocols/myspace/session.c
deleted file mode 100644
index 2d6e6c9..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/myspace/session.h b/pidgin-2.11.0/libpurple/protocols/myspace/session.h
diff --git a/pidgin-2.11.0/libpurple/protocols/myspace/session.h b/pidgin-2.11.0/libpurple/protocols/myspace/session.h
deleted file mode 100644
index 34e1ba9..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/myspace/user.c b/pidgin-2.11.0/libpurple/protocols/myspace/user.c
diff --git a/pidgin-2.11.0/libpurple/protocols/myspace/user.c b/pidgin-2.11.0/libpurple/protocols/myspace/user.c
deleted file mode 100644
index a2b65fc..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/myspace/user.h b/pidgin-2.11.0/libpurple/protocols/myspace/user.h
diff --git a/pidgin-2.11.0/libpurple/protocols/myspace/user.h b/pidgin-2.11.0/libpurple/protocols/myspace/user.h
deleted file mode 100644
index acc0c26..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/myspace/zap.c b/pidgin-2.11.0/libpurple/protocols/myspace/zap.c
diff --git a/pidgin-2.11.0/libpurple/protocols/myspace/zap.c b/pidgin-2.11.0/libpurple/protocols/myspace/zap.c
deleted file mode 100644
index 509b489..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/myspace/zap.h b/pidgin-2.11.0/libpurple/protocols/myspace/zap.h
diff --git a/pidgin-2.11.0/libpurple/protocols/myspace/zap.h b/pidgin-2.11.0/libpurple/protocols/myspace/zap.h
deleted file mode 100644
index d6bf52c..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/novell/nmrtf.c b/pidgin-2.12.0/libpurple/protocols/novell/nmrtf.c
diff --git a/pidgin-2.11.0/libpurple/protocols/novell/nmrtf.c b/pidgin-2.12.0/libpurple/protocols/novell/nmrtf.c
index 8e53070..e0db15d 100644
--- a/pidgin-2.11.0/libpurple/protocols/novell/nmrtf.c
+++ b/pidgin-2.12.0/libpurple/protocols/novell/nmrtf.c
@@ -474,23 +474,23 @@ rtf_push_state(NMRtfContext *ctx)
 static int
 rtf_pop_state(NMRtfContext *ctx)
 {
-    NMRtfStateSave *save_old;
+	NMRtfStateSave *save_old;
 	GSList *link_old;
 
-    if (ctx->saved == NULL)
-        return NMRTF_STACK_UNDERFLOW;
+	if (ctx->saved == NULL)
+		return NMRTF_STACK_UNDERFLOW;
 
 	save_old = ctx->saved->data;
-    ctx->chp = save_old->chp;
-    ctx->rds = save_old->rds;
-    ctx->ris = save_old->ris;
-    (ctx->depth)--;
+	ctx->chp = save_old->chp;
+	ctx->rds = save_old->rds;
+	ctx->ris = save_old->ris;
+	(ctx->depth)--;
 
-    g_free(save_old);
+	g_free(save_old);
 	link_old = ctx->saved;
 	ctx->saved = g_slist_remove_link(ctx->saved, link_old);
 	g_slist_free_1(link_old);
-    return NMRTF_OK;
+	return NMRTF_OK;
 }
 
 /*
@@ -671,13 +671,13 @@ rtf_flush_data(NMRtfContext *ctx)
 static int
 rtf_apply_property(NMRtfContext *ctx, NMRtfProperty prop, int val)
 {
-    if (ctx->rds == NMRTF_STATE_SKIP)  /* If we're skipping text, */
-        return NMRTF_OK;          /* don't do anything. */
+	if (ctx->rds == NMRTF_STATE_SKIP)  /* If we're skipping text, */
+		return NMRTF_OK;          /* don't do anything. */
 
 	/* Need to flush any temporary data before a property change*/
 	rtf_flush_data(ctx);
 
-    switch (prop) {
+	switch (prop) {
 		case NMRTF_PROP_FONT_IDX:
 			ctx->chp.font_idx = val;
 			break;
@@ -686,9 +686,9 @@ rtf_apply_property(NMRtfContext *ctx, NMRtfProperty prop, int val)
 			break;
 		default:
 			return NMRTF_BAD_TABLE;
-    }
+	}
 
-    return NMRTF_OK;
+	return NMRTF_OK;
 }
 
 /*
diff --git a/pidgin-2.11.0/libpurple/protocols/oscar/clientlogin.c b/pidgin-2.12.0/libpurple/protocols/oscar/clientlogin.c
index a6e37fc..6ebbfec 100644
--- a/pidgin-2.11.0/libpurple/protocols/oscar/clientlogin.c
+++ b/pidgin-2.12.0/libpurple/protocols/oscar/clientlogin.c
@@ -73,21 +73,11 @@ static const gchar *get_start_oscar_session_url(OscarData *od)
 	return start_oscar_session_urls[od->icq ? 1 : 0];
 }
 
-/*
- * Using clientLogin requires a developer ID.  This key is for libpurple.
- * It is the default key for all libpurple-based clients.  AOL encourages
- * UIs (especially ones with lots of users) to override this with their
- * own key.  This key is owned by the AIM account "markdoliner"
- *
- * Keys can be managed at http://developer.aim.com/manageKeys.jsp
- */
-#define DEFAULT_CLIENT_KEY "ma15d7JTxbmVG-RP"
-
 static const char *get_client_key(OscarData *od)
 {
 	return oscar_get_ui_info_string(
 			od->icq ? "prpl-icq-clientkey" : "prpl-aim-clientkey",
-			DEFAULT_CLIENT_KEY);
+			od->icq ? ICQ_DEFAULT_CLIENT_KEY : AIM_DEFAULT_CLIENT_KEY);
 }
 
 static gchar *generate_error_message(xmlnode *resp, const char *url)
@@ -362,8 +352,7 @@ static void send_start_oscar_session(OscarData *od, const char *token, const cha
 	const gchar *encryption_type = purple_account_get_string(account, "encryption", OSCAR_DEFAULT_ENCRYPTION);
 
 	/*
-	 * Construct the GET parameters.  0x00000611 is the distid given to
-	 * us by AOL for use as the default libpurple distid.
+	 * Construct the GET parameters.
 	 */
 	query_string = g_strdup_printf("a=%s"
 			"&distId=%d"
@@ -372,7 +361,8 @@ static void send_start_oscar_session(OscarData *od, const char *token, const cha
 			"&ts=%" PURPLE_TIME_T_MODIFIER
 			"&useTLS=%d",
 			purple_url_encode(token),
-			oscar_get_ui_info_int(od->icq ? "prpl-icq-distid" : "prpl-aim-distid", 0x00000611),
+			oscar_get_ui_info_int(od->icq ? "prpl-icq-distid" : "prpl-aim-distid",
+				od->icq ? ICQ_DEFAULT_DIST_ID : AIM_DEFAULT_DIST_ID),
 			get_client_key(od),
 			hosttime,
 			strcmp(encryption_type, OSCAR_NO_ENCRYPTION) != 0 ? 1 : 0);
diff --git a/pidgin-2.11.0/libpurple/protocols/oscar/kerberos.c b/pidgin-2.12.0/libpurple/protocols/oscar/kerberos.c
index 4373dfa..fb909bf 100644
--- a/pidgin-2.11.0/libpurple/protocols/oscar/kerberos.c
+++ b/pidgin-2.12.0/libpurple/protocols/oscar/kerberos.c
@@ -98,21 +98,11 @@ static gchar *get_kdc_url(OscarData *od)
 	return url;
 }
 
-/*
- * Using kerberos auth requires a developer ID. This key is for libpurple.
- * It is the default key for all libpurple-based clients.  AOL encourages
- * UIs (especially ones with lots of users) to override this with their
- * own key.  This key is owned by the AIM account "markdoliner"
- *
- * Keys can be managed at http://developer.aim.com/manageKeys.jsp
- */
-#define DEFAULT_CLIENT_KEY "ma15d7JTxbmVG-RP"
-
 static const char *get_client_key(OscarData *od)
 {
 	return oscar_get_ui_info_string(
 			od->icq ? "prpl-icq-clientkey" : "prpl-aim-clientkey",
-			DEFAULT_CLIENT_KEY);
+			od->icq ? ICQ_DEFAULT_CLIENT_KEY : AIM_DEFAULT_CLIENT_KEY);
 }
 
 static void
diff --git a/pidgin-2.11.0/libpurple/protocols/oscar/oscarcommon.h b/pidgin-2.12.0/libpurple/protocols/oscar/oscarcommon.h
index 4e9c38b..99a760e 100644
--- a/pidgin-2.11.0/libpurple/protocols/oscar/oscarcommon.h
+++ b/pidgin-2.12.0/libpurple/protocols/oscar/oscarcommon.h
@@ -41,6 +41,17 @@
 #define AIM_DEFAULT_KDC_SERVER "kdc.uas.aol.com"
 #define AIM_DEFAULT_KDC_PORT 443
 
+/*
+ * Using clientLogin requires a developer ID.  This key is for libpurple.
+ * It is the default key for all libpurple-based clients.  AOL encourages
+ * UIs (especially ones with lots of users) to override this with their
+ * own key.
+ */
+#define ICQ_DEFAULT_DIST_ID 1553
+#define ICQ_DEFAULT_CLIENT_KEY "ma15d7JTxbmVG-RP"
+#define AIM_DEFAULT_DIST_ID 1717
+#define AIM_DEFAULT_CLIENT_KEY "ma19CwYN9i9Mw5nY"
+
 #define OSCAR_DEFAULT_LOGIN_PORT 5190
 
 #define OSCAR_OPPORTUNISTIC_ENCRYPTION "opportunistic_encryption"
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/Makefile.am b/pidgin-2.11.0/libpurple/protocols/yahoo/Makefile.am
deleted file mode 100644
index 3a010ea..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/Makefile.in b/pidgin-2.11.0/libpurple/protocols/yahoo/Makefile.in
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/Makefile.in b/pidgin-2.11.0/libpurple/protocols/yahoo/Makefile.in
deleted file mode 100644
index 7a46e0d..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/Makefile.mingw b/pidgin-2.11.0/libpurple/protocols/yahoo/Makefile.mingw
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/Makefile.mingw b/pidgin-2.11.0/libpurple/protocols/yahoo/Makefile.mingw
deleted file mode 100644
index f2aba5b..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/libyahoo.c b/pidgin-2.11.0/libpurple/protocols/yahoo/libyahoo.c
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/libyahoo.c b/pidgin-2.11.0/libpurple/protocols/yahoo/libyahoo.c
deleted file mode 100644
index 4e3d5ce..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/libyahoojp.c b/pidgin-2.11.0/libpurple/protocols/yahoo/libyahoojp.c
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/libyahoojp.c b/pidgin-2.11.0/libpurple/protocols/yahoo/libyahoojp.c
deleted file mode 100644
index 219603c..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/libymsg.c b/pidgin-2.11.0/libpurple/protocols/yahoo/libymsg.c
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/libymsg.c b/pidgin-2.11.0/libpurple/protocols/yahoo/libymsg.c
deleted file mode 100644
index 12693fe..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/libymsg.h b/pidgin-2.11.0/libpurple/protocols/yahoo/libymsg.h
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/libymsg.h b/pidgin-2.11.0/libpurple/protocols/yahoo/libymsg.h
deleted file mode 100644
index 905bedc..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/util.c b/pidgin-2.11.0/libpurple/protocols/yahoo/util.c
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/util.c b/pidgin-2.11.0/libpurple/protocols/yahoo/util.c
deleted file mode 100644
index 5c80639..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_aliases.c b/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_aliases.c
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_aliases.c b/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_aliases.c
deleted file mode 100644
index 2747a34..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_aliases.h b/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_aliases.h
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_aliases.h b/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_aliases.h
deleted file mode 100644
index 0eb7fef..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_doodle.c b/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_doodle.c
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_doodle.c b/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_doodle.c
deleted file mode 100644
index 53f3d95..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_doodle.h b/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_doodle.h
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_doodle.h b/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_doodle.h
deleted file mode 100644
index 91329d4..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_filexfer.c b/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_filexfer.c
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_filexfer.c b/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_filexfer.c
deleted file mode 100644
index 2165b37..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_filexfer.h b/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_filexfer.h
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_filexfer.h b/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_filexfer.h
deleted file mode 100644
index c31b029..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_friend.c b/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_friend.c
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_friend.c b/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_friend.c
deleted file mode 100644
index ff98fcc..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_friend.h b/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_friend.h
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_friend.h b/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_friend.h
deleted file mode 100644
index 2560fc7..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_packet.c b/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_packet.c
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_packet.c b/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_packet.c
deleted file mode 100644
index f7dae44..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_packet.h b/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_packet.h
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_packet.h b/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_packet.h
deleted file mode 100644
index 6fdbd34..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_picture.c b/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_picture.c
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_picture.c b/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_picture.c
deleted file mode 100644
index c041038..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_picture.h b/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_picture.h
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_picture.h b/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_picture.h
deleted file mode 100644
index cf030f1..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_profile.c b/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_profile.c
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_profile.c b/pidgin-2.11.0/libpurple/protocols/yahoo/yahoo_profile.c
deleted file mode 100644
index b81b47d..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/yahoochat.c b/pidgin-2.11.0/libpurple/protocols/yahoo/yahoochat.c
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/yahoochat.c b/pidgin-2.11.0/libpurple/protocols/yahoo/yahoochat.c
deleted file mode 100644
index 3783012..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/yahoochat.h b/pidgin-2.11.0/libpurple/protocols/yahoo/yahoochat.h
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/yahoochat.h b/pidgin-2.11.0/libpurple/protocols/yahoo/yahoochat.h
deleted file mode 100644
index 061be77..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/ycht.c b/pidgin-2.11.0/libpurple/protocols/yahoo/ycht.c
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/ycht.c b/pidgin-2.11.0/libpurple/protocols/yahoo/ycht.c
deleted file mode 100644
index 304c3d6..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/ycht.h b/pidgin-2.11.0/libpurple/protocols/yahoo/ycht.h
diff --git a/pidgin-2.11.0/libpurple/protocols/yahoo/ycht.h b/pidgin-2.11.0/libpurple/protocols/yahoo/ycht.h
deleted file mode 100644
index 325745c..0000000
diff --git a/pidgin-2.11.0/libpurple/protocols/zephyr/Zinternal.c b/pidgin-2.12.0/libpurple/protocols/zephyr/Zinternal.c
diff --git a/pidgin-2.11.0/libpurple/protocols/zephyr/Zinternal.c b/pidgin-2.12.0/libpurple/protocols/zephyr/Zinternal.c
index d4e3e83..9700a2c 100644
--- a/pidgin-2.11.0/libpurple/protocols/zephyr/Zinternal.c
+++ b/pidgin-2.12.0/libpurple/protocols/zephyr/Zinternal.c
@@ -259,7 +259,7 @@ Code_t Z_ReadWait()
     if (!packet_len)
 	return (ZERR_EOF);
 
-	packet[packet_len] = '\0';
+    packet[packet_len] = '\0';
 
     /* Ignore obviously non-Zephyr packets. */
     zvlen = sizeof(ZVERSIONHDR) - 1;
diff --git a/pidgin-2.11.0/libpurple/prpl.c b/pidgin-2.12.0/libpurple/prpl.c
index 901ac08..800a068 100644
--- a/pidgin-2.11.0/libpurple/prpl.c
+++ b/pidgin-2.12.0/libpurple/prpl.c
@@ -634,8 +634,7 @@ purple_find_prpl(const char *id)
 	 * but may be used in the future.
 	 */
 	if (g_strcmp0(id, "prpl-xmpp") == 0 ||
-		g_strcmp0(id, "prpl-gtalk") == 0 ||
-		g_strcmp0(id, "prpl-facebook-xmpp") == 0)
+		g_strcmp0(id, "prpl-gtalk") == 0)
 	{
 		id = "prpl-jabber";
 	}
diff --git a/pidgin-2.11.0/libpurple/prpl.h b/pidgin-2.12.0/libpurple/prpl.h
index 1f8888f..98d0d61 100644
--- a/pidgin-2.11.0/libpurple/prpl.h
+++ b/pidgin-2.12.0/libpurple/prpl.h
@@ -162,7 +162,7 @@ typedef enum
 	/**
 	 * Notify on new mail.
 	 *
-	 * MSN and Yahoo notify you when you have new mail.
+	 * If a protocol notifies you when you have new mail.
 	 */
 	OPT_PROTO_MAIL_CHECK = 0x00000020,
 
@@ -921,8 +921,8 @@ GList *purple_prpl_get_statuses(PurpleAccount *account, PurplePresence *presence
  * @param gc The connection to send the message on.
  * @param who Whose attention to request.
  * @param type_code An index into the prpl's attention_types list determining the type
- *        of the attention request command to send. 0 if prpl only defines one
- *        (for example, Yahoo and MSN), but some protocols define more (MySpaceIM).
+ *        of the attention request command to send. 0 if prpl only defines one,
+ *        but protocols are allowed to define more.
  *
  * Note that you can't send arbitrary PurpleAttentionType's, because there is
  * only a fixed set of attention commands.
diff --git a/pidgin-2.11.0/libpurple/purple-url-handler b/pidgin-2.12.0/libpurple/purple-url-handler
index 05a7048..612172b 100755
--- a/pidgin-2.11.0/libpurple/purple-url-handler
+++ b/pidgin-2.12.0/libpurple/purple-url-handler
@@ -224,34 +224,6 @@ def irc(uri):
                 channel = "#" + channel
             gochat(account, {"server": server, "channel": channel, "password": params.get("key", "")}, params.get("msg"))
 
-def msnim(uri):
-    protocol = "prpl-msn"
-    match = re.match(r"^msnim:([^?]*)(\?(.*))", uri)
-    if not match:
-        print("Invalid msnim URI: %s" % uri)
-        return
-
-    command = unquote_plus(match.group(1))
-    paramstring = match.group(3)
-    params = {}
-    if paramstring:
-        for param in paramstring.split("&"):
-            key, value = extendlist(param.split("=", 1), 2, "")
-            params[key] = unquote_plus(value)
-    screenname = params.get("contact", "")
-
-    account = findaccount(protocol)
-
-    if command.lower() == "chat":
-        goim(account, screenname)
-    elif command.lower() == "add":
-        addbuddy(account, screenname)
-
-def myim(uri):
-        protocol = "prpl-myspace"
-        print "TODO: send uri: ", uri
-        assert False, "Not implemented"
-
 def sip(uri):
     protocol = "prpl-simple"
     match = re.match(r"^sip:(.*)", uri)
@@ -328,31 +300,6 @@ def gtalk(uri):
         # XXX V&V prompt to establish call
         goim(account, jid)
 
-def ymsgr(uri):
-    protocol = "prpl-yahoo"
-    match = re.match(r"^ymsgr:([^?]*)(\?([^&]*)(&(.*))?)", uri)
-    if not match:
-        print("Invalid ymsgr URI: %s" % uri)
-        return
-
-    command = unquote_plus(match.group(1))
-    screenname = unquote_plus(match.group(3))
-    paramstring = match.group(5)
-    params = {}
-    if paramstring:
-        for param in paramstring.split("&"):
-            key, value = extendlist(param.split("=", 1), 2, "")
-            params[key] = unquote_plus(value)
-
-    account = findaccount(protocol)
-
-    if command.lower() == "sendim":
-        goim(account, screenname, params.get("m"))
-    elif command.lower() == "chat":
-        gochat(account, {"room": screenname})
-    elif command.lower() == "addfriend":
-        addbuddy(account, screenname)
-
 
 def main(argv=sys.argv):
     if len(argv) != 2 or argv[1] == "--help" or argv[1] == "-h":
@@ -376,18 +323,12 @@ def main(argv=sys.argv):
             icq(uri)
         elif type == "irc":
             irc(uri)
-        elif type == "msnim":
-            msnim(uri)
-        elif type == "myim":
-            myim(uri)
         elif type == "sip":
             sip(uri)
         elif type == "xmpp":
             xmpp(uri)
         elif type == "gtalk":
             gtalk(uri)
-        elif type == "ymsgr":
-            ymsgr(uri)
         else:
             print("Unknown protocol: %s" % type)
     except dbus.DBusException as e:
diff --git a/pidgin-2.11.0/libpurple/server.h b/pidgin-2.12.0/libpurple/server.h
index 5040115..e2ee743 100644
--- a/pidgin-2.11.0/libpurple/server.h
+++ b/pidgin-2.12.0/libpurple/server.h
@@ -68,8 +68,8 @@ PurpleAttentionType *purple_get_attention_type_from_code(PurpleAccount *account,
  * @param gc The connection to send the message on.
  * @param who Whose attention to request.
  * @param type_code An index into the prpl's attention_types list determining the type
- * 	of the attention request command to send. 0 if prpl only defines one
- * 	(for example, Yahoo and MSN), but some protocols define more (MySpaceIM).
+ * 	of the attention request command to send. 0 if prpl only defines one,
+ * 	but protocols are allowed to define more.
  *
  * Note that you can't send arbitrary PurpleAttentionType's, because there is
  * only a fixed set of attention commands.
diff --git a/pidgin-2.11.0/libpurple/sslconn.c b/pidgin-2.12.0/libpurple/sslconn.c
index e6365d3..1f63f7f 100644
--- a/pidgin-2.11.0/libpurple/sslconn.c
+++ b/pidgin-2.12.0/libpurple/sslconn.c
@@ -190,7 +190,7 @@ purple_ssl_connect_fd(PurpleAccount *account, int fd,
 					PurpleSslErrorFunction error_func,
                     void *data)
 {
-    return purple_ssl_connect_with_host_fd(account, fd, func, error_func, NULL, data);
+	return purple_ssl_connect_with_host_fd(account, fd, func, error_func, NULL, data);
 }
 
 PurpleSslConnection *
@@ -219,8 +219,9 @@ purple_ssl_connect_with_host_fd(PurpleAccount *account, int fd,
 	gsc->connect_cb      = func;
 	gsc->error_cb        = error_func;
 	gsc->fd              = fd;
-    if(host)
-        gsc->host            = g_strdup(host);
+	if (host) {
+		gsc->host = g_strdup(host);
+	}
 
 	/* TODO: Move this elsewhere */
 	gsc->verifier = purple_certificate_find_verifier("x509","tls_cached");
diff --git a/pidgin-2.11.0/libpurple/tests/Makefile.am b/pidgin-2.12.0/libpurple/tests/Makefile.am
index ea91aab..fa49f8a 100644
--- a/pidgin-2.11.0/libpurple/tests/Makefile.am
+++ b/pidgin-2.12.0/libpurple/tests/Makefile.am
@@ -15,7 +15,6 @@ check_libpurple_SOURCES=\
 		test_jabber_jutil.c \
 		test_jabber_scram.c \
 		test_oscar_util.c \
-		test_yahoo_util.c \
 		test_util.c \
 		test_xmlnode.c \
 		$(top_builddir)/libpurple/util.h
@@ -32,7 +31,6 @@ check_libpurple_CFLAGS=\
 check_libpurple_LDADD=\
 		$(top_builddir)/libpurple/protocols/jabber/libjabber.la \
 		$(top_builddir)/libpurple/protocols/oscar/liboscar.la \
-		$(top_builddir)/libpurple/protocols/yahoo/libymsg.la \
 		$(top_builddir)/libpurple/libpurple.la \
         @CHECK_LIBS@ \
 		$(GLIB_LIBS)
diff --git a/pidgin-2.11.0/libpurple/tests/check_libpurple.c b/pidgin-2.12.0/libpurple/tests/check_libpurple.c
index 2eb80bf..ace7d1e 100644
--- a/pidgin-2.11.0/libpurple/tests/check_libpurple.c
+++ b/pidgin-2.12.0/libpurple/tests/check_libpurple.c
@@ -92,7 +92,6 @@ int main(void)
 	srunner_add_suite(sr, jabber_jutil_suite());
 	srunner_add_suite(sr, jabber_scram_suite());
 	srunner_add_suite(sr, oscar_util_suite());
-	srunner_add_suite(sr, yahoo_util_suite());
 	srunner_add_suite(sr, util_suite());
 	srunner_add_suite(sr, xmlnode_suite());
 
diff --git a/pidgin-2.11.0/libpurple/tests/test_yahoo_util.c b/pidgin-2.11.0/libpurple/tests/test_yahoo_util.c
deleted file mode 100644
index 57a573d..0000000
diff --git a/pidgin-2.11.0/libpurple/tests/tests.h b/pidgin-2.12.0/libpurple/tests/tests.h
diff --git a/pidgin-2.11.0/libpurple/tests/tests.h b/pidgin-2.12.0/libpurple/tests/tests.h
index 76f9c34..475e035 100644
--- a/pidgin-2.11.0/libpurple/tests/tests.h
+++ b/pidgin-2.12.0/libpurple/tests/tests.h
@@ -14,7 +14,6 @@ Suite * jabber_digest_md5_suite(void);
 Suite * jabber_jutil_suite(void);
 Suite * jabber_scram_suite(void);
 Suite * oscar_util_suite(void);
-Suite * yahoo_util_suite(void);
 Suite * util_suite(void);
 Suite * xmlnode_suite(void);
 
diff --git a/pidgin-2.11.0/libpurple/util.c b/pidgin-2.12.0/libpurple/util.c
index d60e385..c7b7d1d 100644
--- a/pidgin-2.11.0/libpurple/util.c
+++ b/pidgin-2.12.0/libpurple/util.c
@@ -219,10 +219,6 @@ purple_base16_encode_chunked(const guchar *data, gsize len)
 /**************************************************************************
  * Base64 Functions
  **************************************************************************/
-static const char alphabet[] =
-	"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
-	"0123456789+/";
-
 static const char xdigits[] =
 	"0123456789abcdef";
 
@@ -978,18 +974,29 @@ purple_markup_unescape_entity(const char *text, int *length)
 		pln = "\302\256";      /* or use g_unichar_to_utf8(0xae); */
 	else if(IS_ENTITY("&apos;"))
 		pln = "\'";
-	else if(*(text+1) == '#' &&
-			(sscanf(text, "&#%u%1[;]", &pound, temp) == 2 ||
-			 sscanf(text, "&#x%x%1[;]", &pound, temp) == 2) &&
-			pound != 0) {
+	else if(text[1] == '#' && g_ascii_isxdigit(text[2])) {
 		static char buf[7];
-		int buflen = g_unichar_to_utf8((gunichar)pound, buf);
+		const char *start = text + 2;
+		char *end;
+		guint64 pound;
+		int base = 10;
+		int buflen;
+
+		if (*start == 'x') {
+			base = 16;
+			start++;
+		}
+
+		pound = g_ascii_strtoull(start, &end, base);
+		if (pound == 0 || pound > INT_MAX || *end != ';') {
+			return NULL;
+		}
+
+		len = (end - text) + 1;
+
+		buflen = g_unichar_to_utf8((gunichar)pound, buf);
 		buf[buflen] = '\0';
 		pln = buf;
-
-		len = (*(text+2) == 'x' ? 3 : 2);
-		while(isxdigit((gint) text[len])) len++;
-		if(text[len] == ';') len++;
 	}
 	else
 		return NULL;
@@ -1882,7 +1889,6 @@ purple_markup_html_to_xhtml(const char *html, char **xhtml_out,
  * - \n should be converted to a normal space
  * - in addition to <br>, <p> and <div> etc. should also be converted into \n
  * - We want to turn </td>#whitespace<td> sequences into a single tab
- * - We want to turn <td> into a single tab (for msn profile "parsing")
  * - We want to turn </tr>#whitespace<tr> sequences into a single \n
  * - <script>...</script> and <style>...</style> should be completely removed
  */
@@ -4087,7 +4093,7 @@ url_fetch_send_cb(gpointer data, gint source, PurpleInputCondition cond)
 	}
 
 	if(purple_debug_is_unsafe())
-		purple_debug_misc("util", "Request: '%s'\n", gfud->request);
+		purple_debug_misc("util", "Request: '%.*s'\n", (int) gfud->request_len, gfud->request);
 	else
 		purple_debug_misc("util", "request constructed\n");
 
diff --git a/pidgin-2.11.0/libpurple/util.h b/pidgin-2.12.0/libpurple/util.h
index 62d2893..ede673e 100644
--- a/pidgin-2.11.0/libpurple/util.h
+++ b/pidgin-2.12.0/libpurple/util.h
@@ -456,8 +456,8 @@ gboolean purple_markup_find_tag(const char *needle, const char *haystack,
 /**
  * Extracts a field of data from HTML.
  *
- * This is a scary function. See protocols/msn/msn.c and
- * protocols/yahoo/yahoo_profile.c for example usage.
+ * This is a scary function. It used to be used for MSN and Yahoo prpls,
+ * but since those prpls have been removed, this is now deprecated.
  *
  * @param str            The string to parse.
  * @param len            The size of str.
diff --git a/pidgin-2.11.0/libpurple/version.h b/pidgin-2.12.0/libpurple/version.h
index 8afb04c..4696131 100644
--- a/pidgin-2.11.0/libpurple/version.h
+++ b/pidgin-2.12.0/libpurple/version.h
@@ -27,7 +27,7 @@
 /** The major version of the running libpurple. */
 #define PURPLE_MAJOR_VERSION (2)
 /** The minor version of the running libpurple. */
-#define PURPLE_MINOR_VERSION (11)
+#define PURPLE_MINOR_VERSION (12)
 /** The micro version of the running libpurple. */
 #define PURPLE_MICRO_VERSION (0)
 
diff --git a/pidgin-2.11.0/libpurple/win32/targets.mak b/pidgin-2.12.0/libpurple/win32/targets.mak
index e4f8049..0ef53a7 100644
--- a/pidgin-2.11.0/libpurple/win32/targets.mak
+++ b/pidgin-2.12.0/libpurple/win32/targets.mak
@@ -18,7 +18,7 @@ $(PURPLE_VERSION_H): $(PURPLE_VERSION_H).in $(PIDGIN_TREE_TOP)/configure.ac
 	  /^m4_define..purple_micro_version/ {system("sed -e s/@PURPLE_MICRO_VERSION@/"$$5"/ $@ > $@.tmp && mv $@.tmp $@"); exit}' $(PIDGIN_TREE_TOP)/configure.ac
 
 $(PIDGIN_REVISION_RAW_TXT):
-	(hg --cwd $(PIDGIN_TREE_TOP) id -i --debug) 2>/dev/null >$@ \
+	(hg --cwd $(PIDGIN_TREE_TOP) log -r . -T '{node}') 2>/dev/null >$@ \
 	|| rm -f $@
 
 $(PIDGIN_REVISION_H): $(PIDGIN_REVISION_RAW_TXT)
diff --git a/pidgin-2.11.0/package_revision.h b/pidgin-2.12.0/package_revision.h
index d0fa3a8..b9fff1b 100644
--- a/pidgin-2.11.0/package_revision.h
+++ b/pidgin-2.12.0/package_revision.h
@@ -1 +1 @@
-#define REVISION "f02ebb71b5e32cc4af521e7f89c34dedff8d09ae"
+#define REVISION "unknown"
diff --git a/pidgin-2.11.0/pidgin/data/pidgin.appdata.xml.in b/pidgin-2.12.0/pidgin/data/pidgin.appdata.xml.in
index e05ed36..421d96b 100644
--- a/pidgin-2.11.0/pidgin/data/pidgin.appdata.xml.in
+++ b/pidgin-2.12.0/pidgin/data/pidgin.appdata.xml.in
@@ -13,8 +13,8 @@
       chat networks simultaneously.
     </_p>
     <_p>
-      This means that you can be chatting with friends on MSN, talking to a
-      friend on Google Talk, and sitting in a Yahoo chat room all at the same
+      This means that you can be chatting with friends on AIM, talking to a
+      friend on Google Talk, and sitting in an IRC chat room all at the same
       time.
     </_p>
   </description>
diff --git a/pidgin-2.11.0/pidgin/data/pidgin.desktop.in b/pidgin-2.12.0/pidgin/data/pidgin.desktop.in
index 94cc942..b5d7004 100644
--- a/pidgin-2.11.0/pidgin/data/pidgin.desktop.in
+++ b/pidgin-2.12.0/pidgin/data/pidgin.desktop.in
@@ -1,7 +1,7 @@
 [Desktop Entry]
 _Name=Pidgin Internet Messenger
 _GenericName=Internet Messenger
-_Comment=Chat over IM.  Supports AIM, Google Talk, Jabber/XMPP, MSN, Yahoo and more
+_Comment=Chat over IM.  Supports AIM, Google Talk, Jabber/XMPP, and more
 Exec=pidgin
 Icon=pidgin
 StartupNotify=true
diff --git a/pidgin-2.11.0/pidgin/data/pidgin.desktop.in.in b/pidgin-2.12.0/pidgin/data/pidgin.desktop.in.in
index 1da3912..7662fae 100644
--- a/pidgin-2.11.0/pidgin/data/pidgin.desktop.in.in
+++ b/pidgin-2.12.0/pidgin/data/pidgin.desktop.in.in
@@ -1,7 +1,7 @@
 [Desktop Entry]
 _Name=Pidgin Internet Messenger
 _GenericName=Internet Messenger
-_Comment=Chat over IM.  Supports AIM, Google Talk, Jabber/XMPP, MSN, Yahoo and more
+_Comment=Chat over IM.  Supports AIM, Google Talk, Jabber/XMPP, and more
 Exec=pidgin
 Icon=pidgin
 StartupNotify=true
diff --git a/pidgin-2.11.0/pidgin/gtkaccount.c b/pidgin-2.12.0/pidgin/gtkaccount.c
index 78ed55c..94b9a43 100644
--- a/pidgin-2.11.0/pidgin/gtkaccount.c
+++ b/pidgin-2.12.0/pidgin/gtkaccount.c
@@ -577,10 +577,6 @@ add_login_options(AccountPrefsDialog *dialog, GtkWidget *parent)
 			!strcmp(purple_account_user_split_get_text(split), _("Domain")))
 			value = "gmail.com";
 
-		if (value == NULL && g_object_get_data(G_OBJECT(item), "fakefacebook") &&
-			!strcmp(purple_account_user_split_get_text(split), _("Domain")))
-			value = "chat.facebook.com";
-
 		if (value != NULL)
 			gtk_entry_set_text(GTK_ENTRY(entry), value);
 	}
@@ -776,7 +772,7 @@ add_protocol_options(AccountPrefsDialog *dialog)
 {
 	PurpleAccountOption *option;
 	PurpleAccount *account;
-	GtkWidget *vbox, *check, *entry, *combo, *menu, *item;
+	GtkWidget *vbox, *check, *entry, *combo;
 	GList *list, *node;
 	gint i, idx, int_value;
 	GtkListStore *model;
@@ -815,9 +811,6 @@ add_protocol_options(AccountPrefsDialog *dialog)
 			gtk_label_new_with_mnemonic(_("Ad_vanced")), 1);
 	gtk_widget_show(vbox);
 
-	menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(dialog->protocol_menu));
-	item = gtk_menu_get_active(GTK_MENU(menu));
-
 	for (l = dialog->prpl_info->protocol_options; l != NULL; l = l->next)
 	{
 		option = (PurpleAccountOption *)l->data;
@@ -932,10 +925,6 @@ add_protocol_options(AccountPrefsDialog *dialog)
 				model = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_POINTER);
 				opt_entry->widget = combo = gtk_combo_box_new_with_model(GTK_TREE_MODEL(model));
 
-				if (g_object_get_data(G_OBJECT(item), "fakefacebook") &&
-					!strcmp(opt_entry->setting, "connection_security"))
-					str_value = "opportunistic_tls";
-
 				/* Loop through list of PurpleKeyValuePair items */
 				for (node = list; node != NULL; node = node->next) {
 					if (node->data != NULL) {
diff --git a/pidgin-2.11.0/pidgin/gtkblist.c b/pidgin-2.12.0/pidgin/gtkblist.c
index 149ac37..77922b0 100644
--- a/pidgin-2.11.0/pidgin/gtkblist.c
+++ b/pidgin-2.12.0/pidgin/gtkblist.c
@@ -2130,8 +2130,6 @@ parse_vcard(const char *vcard, PurpleGroup *group)
 	char *alias    = NULL;
 	GList *aims    = NULL;
 	GList *icqs    = NULL;
-	GList *yahoos  = NULL;
-	GList *msns    = NULL;
 	GList *jabbers = NULL;
 
 	s = temp_vcard = g_strdup(vcard);
@@ -2171,7 +2169,6 @@ parse_vcard(const char *vcard, PurpleGroup *group)
 		if (!strcmp(field, "FN"))
 			alias = g_strdup(value);
 		else if (!strcmp(field, "X-AIM") || !strcmp(field, "X-ICQ") ||
-				 !strcmp(field, "X-YAHOO") || !strcmp(field, "X-MSN") ||
 				 !strcmp(field, "X-JABBER"))
 		{
 			char **values = g_strsplit(value, ":", 0);
@@ -2183,10 +2180,6 @@ parse_vcard(const char *vcard, PurpleGroup *group)
 					aims = g_list_append(aims, g_strdup(*im));
 				else if (!strcmp(field, "X-ICQ"))
 					icqs = g_list_append(icqs, g_strdup(*im));
-				else if (!strcmp(field, "X-YAHOO"))
-					yahoos = g_list_append(yahoos, g_strdup(*im));
-				else if (!strcmp(field, "X-MSN"))
-					msns = g_list_append(msns, g_strdup(*im));
 				else if (!strcmp(field, "X-JABBER"))
 					jabbers = g_list_append(jabbers, g_strdup(*im));
 			}
@@ -2197,8 +2190,7 @@ parse_vcard(const char *vcard, PurpleGroup *group)
 
 	g_free(temp_vcard);
 
-	if (aims == NULL && icqs == NULL && yahoos == NULL &&
-		msns == NULL && jabbers == NULL)
+	if (aims == NULL && icqs == NULL && jabbers == NULL)
 	{
 		g_free(alias);
 
@@ -2207,8 +2199,6 @@ parse_vcard(const char *vcard, PurpleGroup *group)
 
 	add_buddies_from_vcard("prpl-aim",    group, aims,    alias);
 	add_buddies_from_vcard("prpl-icq",    group, icqs,    alias);
-	add_buddies_from_vcard("prpl-yahoo",  group, yahoos,  alias);
-	add_buddies_from_vcard("prpl-msn",    group, msns,    alias);
 	add_buddies_from_vcard("prpl-jabber", group, jabbers, alias);
 
 	g_free(alias);
@@ -3796,7 +3786,7 @@ static char *pidgin_get_tooltip_text(PurpleBlistNode *node, gboolean full)
 
 		/* Nickname/Server Alias */
 		/* I'd like to only show this if there's a contact or buddy
-		 * alias, but many people on MSN set long nicknames, which
+		 * alias, but people often set long nicknames, which
 		 * get ellipsized, so the only way to see the whole thing is
 		 * to look at the tooltip. */
 		if (full && b->server_alias != NULL && b->server_alias[0] != '\0')
@@ -4022,14 +4012,12 @@ pidgin_blist_get_emblem(PurpleBlistNode *node)
 
 	tune = purple_presence_get_status(p, "tune");
 	if (tune && purple_status_is_active(tune)) {
-		/* Only in MSN.
-		 * TODO: Replace "Tune" with generalized "Media" in 3.0. */
+		/* TODO: Replace "Tune" with generalized "Media" in 3.0. */
 		if (purple_status_get_attr_string(tune, "game") != NULL) {
 			path = g_build_filename(DATADIR, "pixmaps", "pidgin", "emblems", "16", "game.png", NULL);
 			return _pidgin_blist_get_cached_emblem(path);
 		}
-		/* Only in MSN.
-		 * TODO: Replace "Tune" with generalized "Media" in 3.0. */
+		/* TODO: Replace "Tune" with generalized "Media" in 3.0. */
 		if (purple_status_get_attr_string(tune, "office") != NULL) {
 			path = g_build_filename(DATADIR, "pixmaps", "pidgin", "emblems", "16", "office.png", NULL);
 			return _pidgin_blist_get_cached_emblem(path);
@@ -5102,7 +5090,7 @@ generic_error_destroy_cb(GtkObject *dialog,
 		purple_account_clear_current_error(account);
 }
 
-#define SSL_FAQ_URI "http://d.pidgin.im/wiki/FAQssl";
+#define SSL_FAQ_URI "https://developer.pidgin.im/wiki/FAQssl";
 
 static void
 ssl_faq_clicked_cb(PidginMiniDialog *mini_dialog,
diff --git a/pidgin-2.11.0/pidgin/gtkdialogs.c b/pidgin-2.12.0/pidgin/gtkdialogs.c
index 7beadf7..3d1dc18 100644
--- a/pidgin-2.11.0/pidgin/gtkdialogs.c
+++ b/pidgin-2.12.0/pidgin/gtkdialogs.c
@@ -551,7 +551,7 @@ void pidgin_dialogs_about(void)
 
 	g_string_append(str,
 			_("<font size=\"4\"><b>Help from other Pidgin users</b></font> is "
-			  "available by e-mailing <a "
+			  "available by emailing <a "
 			  "href=\"mailto:support@pidgin.im\";>support@pidgin.im</a><br/>"
 			  "This is a <b>public</b> mailing list! "
 			  "(<a href=\"http://pidgin.im/pipermail/support/\";>archive</a>)<br/>"
diff --git a/pidgin-2.11.0/pidgin/gtkmain.c b/pidgin-2.12.0/pidgin/gtkmain.c
index 3c4d1ad..13aa1de 100644
--- a/pidgin-2.11.0/pidgin/gtkmain.c
+++ b/pidgin-2.12.0/pidgin/gtkmain.c
@@ -377,24 +377,26 @@ static GHashTable *pidgin_ui_get_info(void)
 		g_hash_table_insert(ui_info, "client_type", "pc");
 
 		/*
-		 * This is the client key for "Pidgin."  It is owned by the AIM
-		 * account "markdoliner."  Please don't use this key for other
-		 * applications.  You can either not specify a client key, in
-		 * which case the default "libpurple" key will be used, or you
-		 * can try to register your own at the AIM or ICQ web sites
-		 * (although this functionality was removed at some point, it's
-		 * possible it has been re-added).  AOL's old key management
-		 * page is http://developer.aim.com/manageKeys.jsp
+		 * prpl-aim-clientkey is a DevID (or "client key") for Pidgin, given to
+		 * us by AOL in September 2016.  prpl-icq-clientkey is also a client key
+		 * for Pidgin, owned by the AIM account "markdoliner."  Please don't use 
+		 * either for other applications.  Instead, you can either not specify a 
+		 * client key, in which case the default "libpurple" key will be used,
+		 * or you can try to register your own at the AIM or ICQ web sites
+		 * (although this functionality was removed at some point, it's possible 
+		 * it has been re-added).
 		 */
-		g_hash_table_insert(ui_info, "prpl-aim-clientkey", "ma1cSASNCKFtrdv9");
+		g_hash_table_insert(ui_info, "prpl-aim-clientkey", "do1UCeb5gNqxB1S1");
 		g_hash_table_insert(ui_info, "prpl-icq-clientkey", "ma1cSASNCKFtrdv9");
 
 		/*
-		 * This is the distid for Pidgin, given to us by AOL.  Please
-		 * don't use this for other applications.  You can just not
-		 * specify a distid and libpurple will use a default.
+		 * prpl-aim-distid is a distID for Pidgin, given to us by AOL in
+		 * September 2016.  prpl-icq-distid is also a distID for Pidgin, given
+		 * to us by AOL.  Please don't use either for other applications.
+		 * Instead, you can just not specify a distID and libpurple will use a
+		 * default.
 		 */
-		g_hash_table_insert(ui_info, "prpl-aim-distid", GINT_TO_POINTER(1550));
+		g_hash_table_insert(ui_info, "prpl-aim-distid", GINT_TO_POINTER(1715));
 		g_hash_table_insert(ui_info, "prpl-icq-distid", GINT_TO_POINTER(1550));
 	}
 
diff --git a/pidgin-2.11.0/pidgin/gtksavedstatuses.c b/pidgin-2.12.0/pidgin/gtksavedstatuses.c
index c82c831..923d421 100644
--- a/pidgin-2.11.0/pidgin/gtksavedstatuses.c
+++ b/pidgin-2.12.0/pidgin/gtksavedstatuses.c
@@ -805,7 +805,7 @@ status_editor_ok_cb(GtkButton *button, gpointer user_data)
 	g_free(message);
 	g_free(unformatted);
 
-	/* If they clicked on "Save & Use" or "Use," then activate the status */
+	/* If they clicked on "Save and Use" or "Use," then activate the status */
 	if (button != dialog->save_button)
 		purple_savedstatus_activate(saved_status);
 
@@ -1215,8 +1215,8 @@ pidgin_status_editor_show(gboolean edit, PurpleSavedStatus *saved_status)
 	g_signal_connect(G_OBJECT(button), "clicked",
 					 G_CALLBACK(status_editor_ok_cb), dialog);
 
-	/* Save & Use button */
-	button = pidgin_pixbuf_button_from_stock(_("Sa_ve & Use"), GTK_STOCK_OK,
+	/* Save and Use button */
+	button = pidgin_pixbuf_button_from_stock(_("Sa_ve and Use"), GTK_STOCK_OK,
 										   PIDGIN_BUTTON_HORIZONTAL);
 	dialog->saveanduse_button = GTK_BUTTON(button);
 	gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0);
diff --git a/pidgin-2.11.0/pidgin/gtkutils.c b/pidgin-2.12.0/pidgin/gtkutils.c
index 5289f6e..e5a3565 100644
--- a/pidgin-2.11.0/pidgin/gtkutils.c
+++ b/pidgin-2.12.0/pidgin/gtkutils.c
@@ -677,7 +677,7 @@ create_protocols_menu(const char *default_proto_id)
 	GdkPixbuf *pixbuf = NULL;
 	GtkSizeGroup *sg;
 	GList *p;
-	const char *gtalk_name = NULL, *facebook_name = NULL;
+	const char *gtalk_name = NULL;
 	int i;
 
 	aop_menu = g_malloc0(sizeof(AopMenu));
@@ -688,7 +688,6 @@ create_protocols_menu(const char *default_proto_id)
 
 	if (purple_find_prpl("prpl-jabber")) {
 		gtalk_name = _("Google Talk");
-		facebook_name = _("Facebook (XMPP)");
 	}
 
 	for (p = purple_plugins_get_protocols(), i = 0;
@@ -720,29 +719,6 @@ create_protocols_menu(const char *default_proto_id)
 			i++;
 		}
 
-		if (facebook_name && strcmp(facebook_name, plugin->info->name) < 0) {
-			char *filename = g_build_filename(DATADIR, "pixmaps", "pidgin", "protocols",
-			                                  "16", "facebook.png", NULL);
-			GtkWidget *item;
-
-			pixbuf = pidgin_pixbuf_new_from_file(filename);
-			g_free(filename);
-
-			gtk_menu_shell_append(GTK_MENU_SHELL(aop_menu->menu),
-				item = aop_menu_item_new(sg, pixbuf, facebook_name, "prpl-jabber", "protocol"));
-			g_object_set_data(G_OBJECT(item), "fakefacebook", GINT_TO_POINTER(1));
-
-			if (pixbuf)
-				g_object_unref(pixbuf);
-
-			/* libpurple3 compatibility */
-			if (g_strcmp0(default_proto_id, "prpl-facebook-xmpp") == 0)
-				aop_menu->default_item = i;
-
-			facebook_name = NULL;
-			i++;
-		}
-
 		pixbuf = pidgin_create_prpl_icon_from_prpl(plugin, PIDGIN_PRPL_ICON_SMALL, NULL);
 
 		gtk_menu_shell_append(GTK_MENU_SHELL(aop_menu->menu),
diff --git a/pidgin-2.11.0/pidgin/gtkwhiteboard.h b/pidgin-2.12.0/pidgin/gtkwhiteboard.h
index d5bad34..e2189c0 100644
--- a/pidgin-2.11.0/pidgin/gtkwhiteboard.h
+++ b/pidgin-2.12.0/pidgin/gtkwhiteboard.h
@@ -37,8 +37,6 @@
 #define BRUSH_STATE_DOWN    1
 #define BRUSH_STATE_MOTION  2
 
-/* XXX: This seems duplicated with the Yahoo! Doodle prpl code.
- * XXX: How should they work together? */
 #define PALETTE_NUM_COLORS  7
 
 /**
diff --git a/pidgin-2.11.0/pidgin/pixmaps/Makefile.am b/pidgin-2.12.0/pidgin/pixmaps/Makefile.am
index ce6475d..8c24469 100644
--- a/pidgin-2.11.0/pidgin/pixmaps/Makefile.am
+++ b/pidgin-2.12.0/pidgin/pixmaps/Makefile.am
@@ -166,10 +166,6 @@ EMOTES_DEFAULT_24_SCALABLE = \
 		emotes/default/24/scalable/mobile.svg \
 		emotes/default/24/scalable/monkey.svg \
 		emotes/default/24/scalable/moon.svg \
-		emotes/default/24/scalable/msn-away.svg \
-		emotes/default/24/scalable/msn-busy.svg \
-		emotes/default/24/scalable/msn_online.svg \
-		emotes/default/24/scalable/msn.svg \
 		emotes/default/24/scalable/musical-note.svg \
 		emotes/default/24/scalable/peace.svg \
 		emotes/default/24/scalable/phone.svg \
@@ -213,10 +209,8 @@ PROTOCOLS_16_SCALABLE = \
 		protocols/16/scalable/irc.svg \
 		protocols/16/scalable/jabber.svg \
 		protocols/16/scalable/meanwhile.svg \
-		protocols/16/scalable/msn.svg \
 		protocols/16/scalable/silc.svg \
 		protocols/16/scalable/simple.svg \
-		protocols/16/scalable/yahoo.svg \
 		protocols/16/scalable/zephyr.svg
 
 PROTOCOLS_16 = \
@@ -230,12 +224,8 @@ PROTOCOLS_16 = \
 		protocols/16/irc.png \
 		protocols/16/jabber.png \
 		protocols/16/meanwhile.png \
-		protocols/16/msn.png \
-		protocols/16/mxit.png \
-		protocols/16/myspace.png \
 		protocols/16/silc.png \
 		protocols/16/simple.png \
-		protocols/16/yahoo.png \
 		protocols/16/zephyr.png
 
 ICONS_16_SCALABLE = \
@@ -268,10 +258,8 @@ PROTOCOLS_22_SCALABLE = \
 		protocols/22/scalable/irc.svg \
 		protocols/22/scalable/jabber.svg \
 		protocols/22/scalable/meanwhile.svg \
-		protocols/22/scalable/msn.svg \
 		protocols/22/scalable/silc.svg \
 		protocols/22/scalable/simple.svg \
-		protocols/22/scalable/yahoo.svg \
 		protocols/22/scalable/zephyr.svg
 
 PROTOCOLS_22 = \
@@ -285,12 +273,8 @@ PROTOCOLS_22 = \
 		protocols/22/irc.png \
 		protocols/22/jabber.png \
 		protocols/22/meanwhile.png \
-		protocols/22/msn.png \
-		protocols/22/mxit.png \
-		protocols/22/myspace.png \
 		protocols/22/silc.png \
 		protocols/22/simple.png \
-		protocols/22/yahoo.png \
 		protocols/22/zephyr.png
 
 PROTOCOLS_48 = \
@@ -303,12 +287,8 @@ PROTOCOLS_48 = \
 		protocols/48/irc.png \
 		protocols/48/jabber.png \
 		protocols/48/meanwhile.png \
-		protocols/48/msn.png \
-		protocols/48/mxit.png \
-		protocols/48/myspace.png \
 		protocols/48/silc.png \
 		protocols/48/simple.png \
-		protocols/48/yahoo.png \
 		protocols/48/zephyr.png
 
 PROTOCOLS_SCALABLE = \
@@ -321,11 +301,8 @@ PROTOCOLS_SCALABLE = \
 		protocols/scalable/irc.svg \
 		protocols/scalable/jabber.svg \
 		protocols/scalable/meanwhile.svg \
-		protocols/scalable/msn.svg \
-		protocols/scalable/mxit.svg \
 		protocols/scalable/silc.svg \
 		protocols/scalable/simple.svg \
-		protocols/scalable/yahoo.svg \
 		protocols/scalable/zephyr.svg
 
 STATUS_11 = \
diff --git a/pidgin-2.11.0/pidgin/pixmaps/emotes/default/24/Makefile.am b/pidgin-2.12.0/pidgin/pixmaps/emotes/default/24/Makefile.am
index ffd6edb..5b69dc3 100644
--- a/pidgin-2.11.0/pidgin/pixmaps/emotes/default/24/Makefile.am
+++ b/pidgin-2.12.0/pidgin/pixmaps/emotes/default/24/Makefile.am
@@ -113,10 +113,6 @@ SMILEYS = \
     monkey.png \
     moon.png \
     mrgreen.png \
-    msn-away.png \
-    msn-busy.png \
-    msn_online.png \
-    msn.png \
     musical-note.png \
     music.png \
     nervous.png \
diff --git a/pidgin-2.11.0/pidgin/pixmaps/emotes/default/24/default.theme.in b/pidgin-2.12.0/pidgin/pixmaps/emotes/default/24/default.theme.in
index e7c3714..b37c823 100644
--- a/pidgin-2.11.0/pidgin/pixmaps/emotes/default/24/default.theme.in
+++ b/pidgin-2.12.0/pidgin/pixmaps/emotes/default/24/default.theme.in
@@ -100,95 +100,6 @@ glasses-cool.png    8-)
 ! cyclops.png       O-)     o-)
 
 
-# Following Windows Live Messenger 8.1
-[MSN]
-happy.png           :)      :-)
-excited.png         :D      :d      :-D     :-d
-wink.png            ;)      ;-)
-shocked.png         :-O     :-o     :O      :o
-tongue.png          :-P     :P      :-p     :p
-glasses-cool.png    (H)     (h)
-angry.png           :@      :-@
-embarrassed.png     :$      :-$
-confused.png        :S      :s      :-S     :-s
-sad.png             :(      :-(
-crying.png          :'(
-neutral.png         :|      :-|
-devil.png           (6)
-angel.png           (A)     (a)
-in_love.png         (L)     (l)
-love-over.png       (U)     (u)
-msn.png             (M)     (m)
-cat.png             (@)
-dog.png             (&)
-moon.png            (S)
-star.png            (*)
-film.png            (~)
-musical-note.png    (8)
-mail.png            (E)     (e)
-rose.png            (F)     (f)
-rose-dead.png       (W)     (w)
-clock.png           (O)     (o)
-kiss.png            (K)     (k)
-present.png         (G)     (g)
-cake.png            (^)
-camera.png          (P)     (p)
-lamp.png            (I)     (i)
-coffee.png          (C)     (c)
-phone.png           (T)     (t)
-hug-left.png        ({)
-hug-right.png       (})
-beer.png            (B)     (b)
-drink.png           (D)     (d)
-boy.png             (Z)     (z)
-girl.png            (X)     (x)
-good.png            (Y)     (y)
-bad.png             (N)     (n)
-vampire.png         :[      :-[
-goat.png            (nah)
-sun.png             (#)
-rainbow.png         (R)     (r)
-quiet.png           :-#
-teeth.png           8o|
-glasses-nerdy.png   8-|
-sarcastic.png       ^o)
-secret.png          :-*
-sick.png            +o(
-snail.png           (sn)
-turtle.png          (tu)
-plate.png           (pl)
-bowl.png            (||)
-pizza.png           (pi)
-soccerball.png      (so)
-car.png             (au)
-airplane.png        (ap)
-umbrella.png        (um)
-island.png          (ip)
-computer.png        (co)
-mobile.png          (mp)
-brb.png             (brb)
-rain.png            (st)
-highfive.png        (h5)
-coins.png           (mo)
-sheep.png           (bah)
-dont-know.png       :^)
-thinking.png        *-)
-thunder.png         (li)
-party.png           <:o)
-eyeroll.png         8-)
-sleepy.png          |-) 
-bunny.png           ('.')
-! skywalker.png     C:-)    c:-)    C:)     c:)
-! monkey.png        :-(|)   :(|)    8-|)
-! cyclops.png       O-)     o-)
-
-# Hidden MSN emotes
-cigarette.png      	(ci)    (CI)
-handcuffs.png       (%)
-console.png			(xx)    (XX)
-fingers-crossed.png	(yn)    (YN)
-
-
 # Following QQ 2006
 [QQ]
 shocked.png         /:O      /jy       /surprised
@@ -324,266 +235,3 @@ amorous.png         *IN\ LOVE*
 ! skywalker.png     C:-)    c:-)    C:)     c:)
 ! monkey.png        :-(|)   :(|)    8-|)
 ! cyclops.png       O-)     o-)
-
-
-# Following Yahoo! Messenger 8.1
-[Yahoo]
-happy.png           :)      :-)
-question.png        :-/     :-\\
-shocked.png         :-O     :O      :-o     :o 
-devil.png           >:)
-angel.png           O:-)    o:-)    0:-)
-sick.png            :-&
-sleepy.png          (:|
-hypnotized.png      @-)
-on-the-phone.png    :)]
-sad.png             :(      :-(
-amorous.png         :x      :-x     :X      :-X
-angry.png           X-(     x-(     X(      x(
-crying.png          :((
-glasses-nerdy.png   :-B     :-b
-quiet.png           :-$
-drool.png           =P~     =p~
-lying.png           :^O     :^o
-call-me.png         :-c
-wink.png            ;)      ;-)
-embarrassed.png     :">
-mean.png            :->     :>
-laugh.png           :))     :-))
-bye.png             =;
-arrogant.png        [-(
-thinking.png        :-?
-waiting.png         :-w     :-W
-at-wits-end.png     ~x(     ~X(
-excited.png         :D      :-D     :d      :-d
-tongue.png          :-P     :P      :-p     :p
-glasses-cool.png    B-)     b-)
-neutral.png         :|      :-|
-sleeping.png        I-)     i-)     |-)
-clown.png           :o)     :O)
-doh.png             #-o     #-O
-weep.png            :-<
-go-away.png         :-h
-lashes.png          ;;)
-kiss.png            :-*     :*
-confused.png        :-S     :-s
-sarcastic.png       /:)
-eyeroll.png         8-|
-silly.png           8-}
-clap.png            =D>     =d>
-mad-tongue.png      >:P     >:p
-time-out.png        :-t     :-T
-hug-left.png        >:D<    >:d<
-love-over.png       =((
-hot.png             #:-S    #:-s
-rotfl.png           =)) :-j :-J 
-loser.png           L-)     l-)
-party.png           <:-P    <:-p
-nervous.png         :-SS	:-Ss	:-sS	:-ss
-cowboy.png          <):)
-desire.png          8->
-! skywalker.png     C:-)    c:-)    C:)     c:)
-! monkey.png        :-(|)   :(|)    8-|)
-! cyclops.png       O-)     o-)
-
-# Hidden Yahoo emotes
-alien.png           =:)     >-)
-beat-up.png         b-(     B-(
-chicken.png         ~:>
-coffee.png          ~o)     ~O)
-cow.png             3:-O    3:-o
-dance.png           \\:D/   \\:d/
-rose.png            @};-
-dont-know.png       :-L     :-l
-skeleton.png        8-X     8-x
-lamp.png            *-:)
-monkey.png          :(|)
-coins.png           $-)
-peace.png           :)>-
-pig.png             :@)
-pray.png            [-o<    [-O<
-pumpkin.png         (~~)
-shame.png           [-X     [-x
-flag.png            **==
-clover.png          %%-
-musical-note.png    :-"
-giggle.png          ;))
-worship.png         ^:)^
-star.png            (*)
-waving.png          >:/
-talktohand.png      :-@
-
-# Only available after activating the Yahoo! Fighter IMVironment
-male-fighter1.png   o->     O->
-male-fighter2.png   o=>     O=>
-female-fighter.png  o-+     O-+
-yin-yang.png        (%)
-
-# Following Yahoo! Messenger 8.1
-[Yahoo JAPAN]
-happy.png           :)      :-)
-question.png        :-/     :-\\
-shocked.png         :-O     :O      :-o     :o 
-devil.png           >:)
-angel.png           O:-)    o:-)    0:-)
-sick.png            :-&
-sleepy.png          (:|
-hypnotized.png      @-)
-on-the-phone.png    :)]
-sad.png             :(      :-(
-amorous.png         :x      :-x     :X      :-X
-angry.png           X-(     x-(     X(      x(
-crying.png          :((
-glasses-nerdy.png   :-B     :-b
-quiet.png           :-$
-drool.png           =P~     =p~
-lying.png           :^O     :^o
-call-me.png         :-c
-wink.png            ;)      ;-)
-embarrassed.png     :">
-mean.png            :->     :>
-laugh.png           :))     :-))
-bye.png             =;
-arrogant.png        [-(
-thinking.png        :-?
-waiting.png         :-w     :-W
-at-wits-end.png     ~x(     ~X(
-excited.png         :D      :-D     :d      :-d
-tongue.png          :-P     :P      :-p     :p
-glasses-cool.png    B-)     b-)
-neutral.png         :|      :-|
-sleeping.png        I-)     i-)     |-)
-clown.png           :o)     :O)
-doh.png             #-o     #-O
-weep.png            :-<
-go-away.png         :-h
-lashes.png          ;;)
-kiss.png            :-*     :*
-confused.png        :-S     :-s
-sarcastic.png       /:)
-eyeroll.png         8-|
-silly.png           8-}
-clap.png            =D>     =d>
-mad-tongue.png      >:P     >:p
-time-out.png        :-t     :-T
-hug-left.png        >:D<    >:d<
-love-over.png       =((
-hot.png             #:-S    #:-s
-rotfl.png           =)) :-j :-J 
-loser.png           L-)     l-)
-party.png           <:-P    <:-p
-nervous.png         :-SS       :-Ss    :-sS    :-ss
-cowboy.png          <):)
-desire.png          8->
-! skywalker.png     C:-)    c:-)    C:)     c:)
-! monkey.png        :-(|)  :(|)
-
-# Hidden Yahoo emotes
-alien.png           =:)     >-)
-beat-up.png         b-(     B-(
-chicken.png         ~:>
-coffee.png          ~o)     ~O)
-cow.png             3:-O    3:-o
-dance.png           \\:D/   \\:d/
-rose.png            @};-
-dont-know.png       :-L     :-l
-skeleton.png        8-X     8-x
-lamp.png            *-:)
-monkey.png          :(|)
-coins.png           $-)
-peace.png           :)>-
-pig.png             :@)
-pray.png            [-o<    [-O<
-pumpkin.png         (~~)
-shame.png           [-X     [-x
-flag.png            **==
-clover.png          %%-
-musical-note.png    :-"
-giggle.png          ;))
-worship.png         ^:)^
-star.png            (*)
-waving.png          >:/
-talktohand.png      :-@
-
-# Only available after activating the Yahoo! Fighter IMVironment
-male-fighter1.png   o->     O->
-male-fighter2.png   o=>     O=>
-female-fighter.png  o-+     O-+
-yin-yang.png        (%)
-
-
-# Following MySpaceIM Beta 1.0.697.0
-[MySpaceIM]
-excited.png  	    :D      :-D
-devil.png	    }:)
-confused.png	    :Z
-glasses-nerdy.png   B)
-bulgy-eyes.png	    %)
-freaked-out.png	    :E
-happy.png	    :)      :-)
-amorous.png	    :X
-laugh.png	    :))
-mohawk.png	    -:
-mad-tongue.png	    X(
-messed.png	    X)
-glasses-nerdy.png   Q)
-doh.png		    :G
-pirate.png	    P)
-shocked.png	    :O
-sidefrown.png	    :{
-sinister.png	    :B
-smirk.png	    :,
-neutral.png	    :|
-tongue.png	    :P      :p
-pissed-off.png	    B|
-wink.png	    ;-)     ;)
-sad.png		    :[
-kiss.png            :x
-! skywalker.png     C:-)    c:-)    C:)     c:)
-! monkey.png        :-(|)   :(|)    8-|)
-! cyclops.png       O-)     o-)
-
-
-# MXit standard emoticons
-[MXit]
-happy.png           :-)     :)
-sad.png             :-(     :(
-wink.png            ;-)     ;)
-excited.png         :-D     :D     :->      :>
-neutral.png         :-|     :|
-shocked.png         :-O     :O
-tongue.png          :-P     :P
-embarrassed.png     :-$     :$
-glasses-cool.png    8-)
-in_love.png         (H)
-rose.png            (F)
-### Added in v3.0
-boy.png             (m)
-girl.png            (f)
-star.png            (*)
-chilli.png          (c)
-kiss.png            (x)
-lamp.png            (i)
-pissed-off.png      :e      :-e
-shut-mouth.png      :-x     :x
-thunder.png         (z)
-coffee.png          (U)
-mrgreen.png         (G)
-### Added in v5.0
-sick.png            :o(
-excruciating.png    :-{     :{
-amorous.png         :-}     :}
-eyeroll.png         8-o     8o
-crying.png          :'(
-thinking.png        :-?     :?
-drool.png           :-~     :~
-sleeping.png        :-z     :z
-lying.png           :L)
-glasses-nerdy.png   8-|     8|
-pirate.png          P-)
-### Added in v5.9.7
-bored.png           :-[     :[
-cold.png            :-<     :<
-confused.png        :-,     :,
-hungry.png          :-C     :C
-stressed.png        :-s     :s
diff --git a/pidgin-2.11.0/pidgin/pixmaps/emotes/default/24/msn-away.png b/pidgin-2.11.0/pidgin/pixmaps/emotes/default/24/msn-away.png
deleted file mode 100644
index 0ccff24..0000000
diff --git a/pidgin-2.11.0/pidgin/pixmaps/emotes/default/24/msn-busy.png b/pidgin-2.11.0/pidgin/pixmaps/emotes/default/24/msn-busy.png
diff --git a/pidgin-2.11.0/pidgin/pixmaps/emotes/default/24/msn-busy.png b/pidgin-2.11.0/pidgin/pixmaps/emotes/default/24/msn-busy.png
deleted file mode 100644
index db57fd2..0000000
diff --git a/pidgin-2.11.0/pidgin/pixmaps/emotes/default/24/msn.png b/pidgin-2.11.0/pidgin/pixmaps/emotes/default/24/msn.png
diff --git a/pidgin-2.11.0/pidgin/pixmaps/emotes/default/24/msn.png b/pidgin-2.11.0/pidgin/pixmaps/emotes/default/24/msn.png
deleted file mode 100644
index 3c2adcd..0000000
diff --git a/pidgin-2.11.0/pidgin/pixmaps/emotes/default/24/msn_online.png b/pidgin-2.11.0/pidgin/pixmaps/emotes/default/24/msn_online.png
diff --git a/pidgin-2.11.0/pidgin/pixmaps/emotes/default/24/msn_online.png b/pidgin-2.11.0/pidgin/pixmaps/emotes/default/24/msn_online.png
deleted file mode 100644
index deaca64..0000000
diff --git a/pidgin-2.11.0/pidgin/pixmaps/emotes/default/24/scalable/msn-away.svg b/pidgin-2.11.0/pidgin/pixmaps/emotes/default/24/scalable/msn-away.svg
diff --git a/pidgin-2.11.0/pidgin/pixmaps/emotes/default/24/scalable/msn-away.svg b/pidgin-2.11.0/pidgin/pixmaps/emotes/default/24/scalable/msn-away.svg
deleted file mode 100644
index b5da7ed..0000000
diff --git a/pidgin-2.11.0/pidgin/pixmaps/emotes/default/24/scalable/msn-busy.svg b/pidgin-2.11.0/pidgin/pixmaps/emotes/default/24/scalable/msn-busy.svg
diff --git a/pidgin-2.11.0/pidgin/pixmaps/emotes/default/24/scalable/msn-busy.svg b/pidgin-2.11.0/pidgin/pixmaps/emotes/default/24/scalable/msn-busy.svg
deleted file mode 100644
index 29b94dc..0000000
diff --git a/pidgin-2.11.0/pidgin/pixmaps/emotes/default/24/scalable/msn.svg b/pidgin-2.11.0/pidgin/pixmaps/emotes/default/24/scalable/msn.svg
diff --git a/pidgin-2.11.0/pidgin/pixmaps/emotes/default/24/scalable/msn.svg b/pidgin-2.11.0/pidgin/pixmaps/emotes/default/24/scalable/msn.svg
deleted file mode 100644
index 19669d0..0000000
diff --git a/pidgin-2.11.0/pidgin/pixmaps/emotes/default/24/scalable/msn_online.svg b/pidgin-2.11.0/pidgin/pixmaps/emotes/default/24/scalable/msn_online.svg
diff --git a/pidgin-2.11.0/pidgin/pixmaps/emotes/default/24/scalable/msn_online.svg b/pidgin-2.11.0/pidgin/pixmaps/emotes/default/24/scalable/msn_online.svg
deleted file mode 100644
index 365ffe8..0000000
diff --git a/pidgin-2.11.0/pidgin/pixmaps/emotes/default/24/theme b/pidgin-2.12.0/pidgin/pixmaps/emotes/default/24/theme
diff --git a/pidgin-2.11.0/pidgin/pixmaps/emotes/default/24/theme b/pidgin-2.12.0/pidgin/pixmaps/emotes/default/24/theme
index a21544d..2538052 100644
--- a/pidgin-2.11.0/pidgin/pixmaps/emotes/default/24/theme
+++ b/pidgin-2.12.0/pidgin/pixmaps/emotes/default/24/theme
@@ -100,95 +100,6 @@ glasses-cool.png    8-)
 ! cyclops.png       O-)     o-)
 
 
-# Following Windows Live Messenger 8.1
-[MSN]
-happy.png           :)      :-)
-excited.png         :D      :d      :-D     :-d
-wink.png            ;)      ;-)
-shocked.png         :-O     :-o     :O      :o
-tongue.png          :-P     :P      :-p     :p
-glasses-cool.png    (H)     (h)
-angry.png           :@      :-@
-embarrassed.png     :$      :-$
-confused.png        :S      :s      :-S     :-s
-sad.png             :(      :-(
-crying.png          :'(
-neutral.png         :|      :-|
-devil.png           (6)
-angel.png           (A)     (a)
-in_love.png         (L)     (l)
-love-over.png       (U)     (u)
-msn.png             (M)     (m)
-cat.png             (@)
-dog.png             (&)
-moon.png            (S)
-star.png            (*)
-film.png            (~)
-musical-note.png    (8)
-mail.png            (E)     (e)
-rose.png            (F)     (f)
-rose-dead.png       (W)     (w)
-clock.png           (O)     (o)
-kiss.png            (K)     (k)
-present.png         (G)     (g)
-cake.png            (^)
-camera.png          (P)     (p)
-lamp.png            (I)     (i)
-coffee.png          (C)     (c)
-phone.png           (T)     (t)
-hug-left.png        ({)
-hug-right.png       (})
-beer.png            (B)     (b)
-drink.png           (D)     (d)
-boy.png             (Z)     (z)
-girl.png            (X)     (x)
-good.png            (Y)     (y)
-bad.png             (N)     (n)
-vampire.png         :[      :-[
-goat.png            (nah)
-sun.png             (#)
-rainbow.png         (R)     (r)
-quiet.png           :-#
-teeth.png           8o|
-glasses-nerdy.png   8-|
-sarcastic.png       ^o)
-secret.png          :-*
-sick.png            +o(
-snail.png           (sn)
-turtle.png          (tu)
-plate.png           (pl)
-bowl.png            (||)
-pizza.png           (pi)
-soccerball.png      (so)
-car.png             (au)
-airplane.png        (ap)
-umbrella.png        (um)
-island.png          (ip)
-computer.png        (co)
-mobile.png          (mp)
-brb.png             (brb)
-rain.png            (st)
-highfive.png        (h5)
-coins.png           (mo)
-sheep.png           (bah)
-dont-know.png       :^)
-thinking.png        *-)
-thunder.png         (li)
-party.png           <:o)
-eyeroll.png         8-)
-sleepy.png          |-) 
-bunny.png           ('.')
-! skywalker.png     C:-)    c:-)    C:)     c:)
-! monkey.png        :-(|)   :(|)    8-|)
-! cyclops.png       O-)     o-)
-
-# Hidden MSN emotes
-cigarette.png      	(ci)    (CI)
-handcuffs.png       (%)
-console.png			(xx)    (XX)
-fingers-crossed.png	(yn)    (YN)
-
-
 # Following QQ 2006
 [QQ]
 shocked.png         /:O      /jy       /surprised
@@ -324,266 +235,3 @@ amorous.png         *IN\ LOVE*
 ! skywalker.png     C:-)    c:-)    C:)     c:)
 ! monkey.png        :-(|)   :(|)    8-|)
 ! cyclops.png       O-)     o-)
-
-
-# Following Yahoo! Messenger 8.1
-[Yahoo]
-happy.png           :)      :-)
-question.png        :-/     :-\\
-shocked.png         :-O     :O      :-o     :o 
-devil.png           >:)
-angel.png           O:-)    o:-)    0:-)
-sick.png            :-&
-sleepy.png          (:|
-hypnotized.png      @-)
-on-the-phone.png    :)]
-sad.png             :(      :-(
-amorous.png         :x      :-x     :X      :-X
-angry.png           X-(     x-(     X(      x(
-crying.png          :((
-glasses-nerdy.png   :-B     :-b
-quiet.png           :-$
-drool.png           =P~     =p~
-lying.png           :^O     :^o
-call-me.png         :-c
-wink.png            ;)      ;-)
-embarrassed.png     :">
-mean.png            :->     :>
-laugh.png           :))     :-))
-bye.png             =;
-arrogant.png        [-(
-thinking.png        :-?
-waiting.png         :-w     :-W
-at-wits-end.png     ~x(     ~X(
-excited.png         :D      :-D     :d      :-d
-tongue.png          :-P     :P      :-p     :p
-glasses-cool.png    B-)     b-)
-neutral.png         :|      :-|
-sleeping.png        I-)     i-)     |-)
-clown.png           :o)     :O)
-doh.png             #-o     #-O
-weep.png            :-<
-go-away.png         :-h
-lashes.png          ;;)
-kiss.png            :-*     :*
-confused.png        :-S     :-s
-sarcastic.png       /:)
-eyeroll.png         8-|
-silly.png           8-}
-clap.png            =D>     =d>
-mad-tongue.png      >:P     >:p
-time-out.png        :-t     :-T
-hug-left.png        >:D<    >:d<
-love-over.png       =((
-hot.png             #:-S    #:-s
-rotfl.png           =)) :-j :-J 
-loser.png           L-)     l-)
-party.png           <:-P    <:-p
-nervous.png         :-SS	:-Ss	:-sS	:-ss
-cowboy.png          <):)
-desire.png          8->
-! skywalker.png     C:-)    c:-)    C:)     c:)
-! monkey.png        :-(|)   :(|)    8-|)
-! cyclops.png       O-)     o-)
-
-# Hidden Yahoo emotes
-alien.png           =:)     >-)
-beat-up.png         b-(     B-(
-chicken.png         ~:>
-coffee.png          ~o)     ~O)
-cow.png             3:-O    3:-o
-dance.png           \\:D/   \\:d/
-rose.png            @};-
-dont-know.png       :-L     :-l
-skeleton.png        8-X     8-x
-lamp.png            *-:)
-monkey.png          :(|)
-coins.png           $-)
-peace.png           :)>-
-pig.png             :@)
-pray.png            [-o<    [-O<
-pumpkin.png         (~~)
-shame.png           [-X     [-x
-flag.png            **==
-clover.png          %%-
-musical-note.png    :-"
-giggle.png          ;))
-worship.png         ^:)^
-star.png            (*)
-waving.png          >:/
-talktohand.png      :-@
-
-# Only available after activating the Yahoo! Fighter IMVironment
-male-fighter1.png   o->     O->
-male-fighter2.png   o=>     O=>
-female-fighter.png  o-+     O-+
-yin-yang.png        (%)
-
-# Following Yahoo! Messenger 8.1
-[Yahoo JAPAN]
-happy.png           :)      :-)
-question.png        :-/     :-\\
-shocked.png         :-O     :O      :-o     :o 
-devil.png           >:)
-angel.png           O:-)    o:-)    0:-)
-sick.png            :-&
-sleepy.png          (:|
-hypnotized.png      @-)
-on-the-phone.png    :)]
-sad.png             :(      :-(
-amorous.png         :x      :-x     :X      :-X
-angry.png           X-(     x-(     X(      x(
-crying.png          :((
-glasses-nerdy.png   :-B     :-b
-quiet.png           :-$
-drool.png           =P~     =p~
-lying.png           :^O     :^o
-call-me.png         :-c
-wink.png            ;)      ;-)
-embarrassed.png     :">
-mean.png            :->     :>
-laugh.png           :))     :-))
-bye.png             =;
-arrogant.png        [-(
-thinking.png        :-?
-waiting.png         :-w     :-W
-at-wits-end.png     ~x(     ~X(
-excited.png         :D      :-D     :d      :-d
-tongue.png          :-P     :P      :-p     :p
-glasses-cool.png    B-)     b-)
-neutral.png         :|      :-|
-sleeping.png        I-)     i-)     |-)
-clown.png           :o)     :O)
-doh.png             #-o     #-O
-weep.png            :-<
-go-away.png         :-h
-lashes.png          ;;)
-kiss.png            :-*     :*
-confused.png        :-S     :-s
-sarcastic.png       /:)
-eyeroll.png         8-|
-silly.png           8-}
-clap.png            =D>     =d>
-mad-tongue.png      >:P     >:p
-time-out.png        :-t     :-T
-hug-left.png        >:D<    >:d<
-love-over.png       =((
-hot.png             #:-S    #:-s
-rotfl.png           =)) :-j :-J 
-loser.png           L-)     l-)
-party.png           <:-P    <:-p
-nervous.png         :-SS       :-Ss    :-sS    :-ss
-cowboy.png          <):)
-desire.png          8->
-! skywalker.png     C:-)    c:-)    C:)     c:)
-! monkey.png        :-(|)  :(|)
-
-# Hidden Yahoo emotes
-alien.png           =:)     >-)
-beat-up.png         b-(     B-(
-chicken.png         ~:>
-coffee.png          ~o)     ~O)
-cow.png             3:-O    3:-o
-dance.png           \\:D/   \\:d/
-rose.png            @};-
-dont-know.png       :-L     :-l
-skeleton.png        8-X     8-x
-lamp.png            *-:)
-monkey.png          :(|)
-coins.png           $-)
-peace.png           :)>-
-pig.png             :@)
-pray.png            [-o<    [-O<
-pumpkin.png         (~~)
-shame.png           [-X     [-x
-flag.png            **==
-clover.png          %%-
-musical-note.png    :-"
-giggle.png          ;))
-worship.png         ^:)^
-star.png            (*)
-waving.png          >:/
-talktohand.png      :-@
-
-# Only available after activating the Yahoo! Fighter IMVironment
-male-fighter1.png   o->     O->
-male-fighter2.png   o=>     O=>
-female-fighter.png  o-+     O-+
-yin-yang.png        (%)
-
-
-# Following MySpaceIM Beta 1.0.697.0
-[MySpaceIM]
-excited.png  	    :D      :-D
-devil.png	    }:)
-confused.png	    :Z
-glasses-nerdy.png   B)
-bulgy-eyes.png	    %)
-freaked-out.png	    :E
-happy.png	    :)      :-)
-amorous.png	    :X
-laugh.png	    :))
-mohawk.png	    -:
-mad-tongue.png	    X(
-messed.png	    X)
-glasses-nerdy.png   Q)
-doh.png		    :G
-pirate.png	    P)
-shocked.png	    :O
-sidefrown.png	    :{
-sinister.png	    :B
-smirk.png	    :,
-neutral.png	    :|
-tongue.png	    :P      :p
-pissed-off.png	    B|
-wink.png	    ;-)     ;)
-sad.png		    :[
-kiss.png            :x
-! skywalker.png     C:-)    c:-)    C:)     c:)
-! monkey.png        :-(|)   :(|)    8-|)
-! cyclops.png       O-)     o-)
-
-
-# MXit standard emoticons
-[MXit]
-happy.png           :-)     :)
-sad.png             :-(     :(
-wink.png            ;-)     ;)
-excited.png         :-D     :D     :->      :>
-neutral.png         :-|     :|
-shocked.png         :-O     :O
-tongue.png          :-P     :P
-embarrassed.png     :-$     :$
-glasses-cool.png    8-)
-in_love.png         (H)
-rose.png            (F)
-### Added in v3.0
-boy.png             (m)
-girl.png            (f)
-star.png            (*)
-chilli.png          (c)
-kiss.png            (x)
-lamp.png            (i)
-pissed-off.png      :e      :-e
-shut-mouth.png      :-x     :x
-thunder.png         (z)
-coffee.png          (U)
-mrgreen.png         (G)
-### Added in v5.0
-sick.png            :o(
-excruciating.png    :-{     :{
-amorous.png         :-}     :}
-eyeroll.png         8-o     8o
-crying.png          :'(
-thinking.png        :-?     :?
-drool.png           :-~     :~
-sleeping.png        :-z     :z
-lying.png           :L)
-glasses-nerdy.png   8-|     8|
-pirate.png          P-)
-### Added in v5.9.7
-bored.png           :-[     :[
-cold.png            :-<     :<
-confused.png        :-,     :,
-hungry.png          :-C     :C
-stressed.png        :-s     :s
diff --git a/pidgin-2.11.0/pidgin/pixmaps/emotes/small/16/small.theme.in b/pidgin-2.12.0/pidgin/pixmaps/emotes/small/16/small.theme.in
index cba32b4..fa86e26 100644
--- a/pidgin-2.11.0/pidgin/pixmaps/emotes/small/16/small.theme.in
+++ b/pidgin-2.12.0/pidgin/pixmaps/emotes/small/16/small.theme.in
@@ -72,52 +72,6 @@ shut-mouth.png      :-X
 glasses-cool.png    8-)
 
 
-# Following Windows Live Messenger 8.1
-[MSN]
-happy.png           :)      :-)
-excited.png         :D      :d      :-D     :-d
-wink.png            ;)      ;-)
-shocked.png         :-O     :-o     :O      :o
-tongue.png          :-P     :P      :-p     :p
-glasses-cool.png    (H)     (h)
-angry.png           :@      :-@
-embarrassed.png     :$      :-$
-confused.png        :S      :s      :-S     :-s
-sad.png             :(      :-(
-crying.png          :'(
-neutral.png         :|      :-|
-devil.png           (6)
-angel.png           (A)     (a)
-in_love.png         (L)     (l)
-star.png            (*)
-musical-note.png    (8)
-rose.png            (F)     (f)
-kiss.png            (K)     (k)
-camera.png          (P)     (p)
-lamp.png            (I)     (i)
-coffee.png          (C)     (c)
-phone.png           (T)     (t)
-hug-left.png        ({)
-hug-right.png       (})
-beer.png            (B)     (b)
-boy.png             (Z)     (z)
-girl.png            (X)     (x)
-sarcastic.png       ^o)
-sick.png            +o(
-plate.png           (pl)
-mobile.png          (mp)
-dont-know.png       :^)
-thinking.png        *-)
-thunder.png         (li)
-party.png           <:o)
-eyeroll.png         8-)
-sleepy.png          |-) 
-
-# Hidden MSN emotes
-cigarette.png      	(ci)    (CI)
-console.png			(xx)    (XX)
-
-
 # Following QQ 2006
 [QQ]
 shocked.png         /:O      /jy       /surprised
@@ -179,143 +133,3 @@ beer.png            *DRINK*
 excited.png         :-D     :D
 glasses-cool.png    8-)
 amorous.png         *IN\ LOVE*
-
-
-# Following Yahoo! Messenger 8.1
-[Yahoo]
-happy.png           :)      :-)
-question.png        :-/     :-\\
-shocked.png         :-O     :O      :-o     :o 
-devil.png           >:)
-angel.png           O:-)    o:-)    0:-)
-sick.png            :-&
-sleepy.png          (:|
-sad.png             :(      :-(
-amorous.png         :x      :-x     :X      :-X
-angry.png           X-(     x-(     X(      x(
-crying.png          :((
-drool.png           =P~     =p~
-lying.png           :^O     :^o
-wink.png            ;)      ;-)
-embarrassed.png     :">
-mean.png            :->     :>
-thinking.png        :-?
-excited.png         :D      :-D     :d      :-d
-tongue.png          :-P     :P      :-p     :p
-glasses-cool.png    B-)     b-)
-neutral.png         :|      :-|
-sleeping.png        I-)     i-)     |-)
-kiss.png            :-*     :*
-confused.png        :-S     :-s
-sarcastic.png       /:)
-eyeroll.png         8-|
-hug-left.png        >:D<    >:d<
-hot.png             #:-S    #:-s
-party.png           <:-P    <:-p
-nervous.png         :-SS	:-Ss	:-sS	:-ss
-
-# Hidden Yahoo emotes
-coffee.png          ~o)     ~O)
-rose.png            @};-
-dont-know.png       :-L     :-l
-lamp.png            *-:)
-shame.png           [-X     [-x
-musical-note.png    :-"
-star.png            (*)
-
-# Following Yahoo! Messenger 8.1
-[Yahoo JAPAN]
-happy.png           :)      :-)
-question.png        :-/     :-\\
-shocked.png         :-O     :O      :-o     :o 
-devil.png           >:)
-angel.png           O:-)    o:-)    0:-)
-sick.png            :-&
-sleepy.png          (:|
-sad.png             :(      :-(
-amorous.png         :x      :-x     :X      :-X
-angry.png           X-(     x-(     X(      x(
-crying.png          :((
-wink.png            ;)      ;-)
-thinking.png        :-?
-excited.png         :D      :-D     :d      :-d
-tongue.png          :-P     :P      :-p     :p
-glasses-cool.png    B-)     b-)
-neutral.png         :|      :-|
-sleeping.png        I-)     i-)     |-)
-kiss.png            :-*     :*
-confused.png        :-S     :-s
-sarcastic.png       /:)
-eyeroll.png         8-|
-hug-left.png        >:D<    >:d<
-party.png           <:-P    <:-p
-
-# Hidden Yahoo emotes
-coffee.png          ~o)     ~O)
-rose.png            @};-
-dont-know.png       :-L     :-l
-lamp.png            *-:)
-shame.png           [-X     [-x
-musical-note.png    :-"
-star.png            (*)
-
-
-# Following MySpaceIM Beta 1.0.697.0
-[MySpaceIM]
-excited.png  	    :D      :-D
-devil.png	    }:)
-confused.png	    :Z
-happy.png	    :)      :-)
-amorous.png	    :X
-pirate.png	    P)
-shocked.png	    :O
-neutral.png	    :|
-tongue.png	    :P      :p
-pissed-off.png	    B|
-wink.png	    ;-)     ;)
-sad.png		    :[
-kiss.png            :x
-
-# MXit standard emoticons
-[MXit]
-happy.png           :-)     :)
-sad.png             :-(     :(
-wink.png            ;-)     ;)
-excited.png         :-D     :D     :->      :>
-neutral.png         :-|     :|
-shocked.png         :-O     :O
-tongue.png          :-P     :P
-embarrassed.png     :-$     :$
-glasses-cool.png    8-)
-in_love.png         (H)
-rose.png            (F)
-### Added in v3.0
-boy.png             (m)
-girl.png            (f)
-star.png            (*)
-chilli.png          (c)
-kiss.png            (x)
-lamp.png            (i)
-pissed-off.png      :e      :-e
-shut-mouth.png      :-x     :x
-thunder.png         (z)
-coffee.png          (U)
-mrgreen.png         (G)
-### Added in v5.0
-sick.png            :o(
-excruciating.png    :-{     :{
-amorous.png         :-}     :}
-eyeroll.png         8-o     8o
-crying.png          :'(
-thinking.png        :-?     :?
-drool.png           :-~     :~
-sleeping.png        :-z     :z
-lying.png           :L)
-glasses-nerdy.png   8-|     8|
-pirate.png          P-)
-### Added in v5.9.7
-bored.png           :-[     :[
-cold.png            :-<     :<
-confused.png        :-,     :,
-hungry.png          :-C     :C
-stressed.png        :-s     :s
diff --git a/pidgin-2.11.0/pidgin/pixmaps/emotes/small/16/theme b/pidgin-2.12.0/pidgin/pixmaps/emotes/small/16/theme
index e395b55..590add8 100644
--- a/pidgin-2.11.0/pidgin/pixmaps/emotes/small/16/theme
+++ b/pidgin-2.12.0/pidgin/pixmaps/emotes/small/16/theme
@@ -72,52 +72,6 @@ shut-mouth.png      :-X
 glasses-cool.png    8-)
 
 
-# Following Windows Live Messenger 8.1
-[MSN]
-happy.png           :)      :-)
-excited.png         :D      :d      :-D     :-d
-wink.png            ;)      ;-)
-shocked.png         :-O     :-o     :O      :o
-tongue.png          :-P     :P      :-p     :p
-glasses-cool.png    (H)     (h)
-angry.png           :@      :-@
-embarrassed.png     :$      :-$
-confused.png        :S      :s      :-S     :-s
-sad.png             :(      :-(
-crying.png          :'(
-neutral.png         :|      :-|
-devil.png           (6)
-angel.png           (A)     (a)
-in_love.png         (L)     (l)
-star.png            (*)
-musical-note.png    (8)
-rose.png            (F)     (f)
-kiss.png            (K)     (k)
-camera.png          (P)     (p)
-lamp.png            (I)     (i)
-coffee.png          (C)     (c)
-phone.png           (T)     (t)
-hug-left.png        ({)
-hug-right.png       (})
-beer.png            (B)     (b)
-boy.png             (Z)     (z)
-girl.png            (X)     (x)
-sarcastic.png       ^o)
-sick.png            +o(
-plate.png           (pl)
-mobile.png          (mp)
-dont-know.png       :^)
-thinking.png        *-)
-thunder.png         (li)
-party.png           <:o)
-eyeroll.png         8-)
-sleepy.png          |-) 
-
-# Hidden MSN emotes
-cigarette.png      	(ci)    (CI)
-console.png			(xx)    (XX)
-
-
 # Following QQ 2006
 [QQ]
 shocked.png         /:O      /jy       /surprised
@@ -179,143 +133,3 @@ beer.png            *DRINK*
 excited.png         :-D     :D
 glasses-cool.png    8-)
 amorous.png         *IN\ LOVE*
-
-
-# Following Yahoo! Messenger 8.1
-[Yahoo]
-happy.png           :)      :-)
-question.png        :-/     :-\\
-shocked.png         :-O     :O      :-o     :o 
-devil.png           >:)
-angel.png           O:-)    o:-)    0:-)
-sick.png            :-&
-sleepy.png          (:|
-sad.png             :(      :-(
-amorous.png         :x      :-x     :X      :-X
-angry.png           X-(     x-(     X(      x(
-crying.png          :((
-drool.png           =P~     =p~
-lying.png           :^O     :^o
-wink.png            ;)      ;-)
-embarrassed.png     :">
-mean.png            :->     :>
-thinking.png        :-?
-excited.png         :D      :-D     :d      :-d
-tongue.png          :-P     :P      :-p     :p
-glasses-cool.png    B-)     b-)
-neutral.png         :|      :-|
-sleeping.png        I-)     i-)     |-)
-kiss.png            :-*     :*
-confused.png        :-S     :-s
-sarcastic.png       /:)
-eyeroll.png         8-|
-hug-left.png        >:D<    >:d<
-hot.png             #:-S    #:-s
-party.png           <:-P    <:-p
-nervous.png         :-SS	:-Ss	:-sS	:-ss
-
-# Hidden Yahoo emotes
-coffee.png          ~o)     ~O)
-rose.png            @};-
-dont-know.png       :-L     :-l
-lamp.png            *-:)
-shame.png           [-X     [-x
-musical-note.png    :-"
-star.png            (*)
-
-# Following Yahoo! Messenger 8.1
-[Yahoo JAPAN]
-happy.png           :)      :-)
-question.png        :-/     :-\\
-shocked.png         :-O     :O      :-o     :o 
-devil.png           >:)
-angel.png           O:-)    o:-)    0:-)
-sick.png            :-&
-sleepy.png          (:|
-sad.png             :(      :-(
-amorous.png         :x      :-x     :X      :-X
-angry.png           X-(     x-(     X(      x(
-crying.png          :((
-wink.png            ;)      ;-)
-thinking.png        :-?
-excited.png         :D      :-D     :d      :-d
-tongue.png          :-P     :P      :-p     :p
-glasses-cool.png    B-)     b-)
-neutral.png         :|      :-|
-sleeping.png        I-)     i-)     |-)
-kiss.png            :-*     :*
-confused.png        :-S     :-s
-sarcastic.png       /:)
-eyeroll.png         8-|
-hug-left.png        >:D<    >:d<
-party.png           <:-P    <:-p
-
-# Hidden Yahoo emotes
-coffee.png          ~o)     ~O)
-rose.png            @};-
-dont-know.png       :-L     :-l
-lamp.png            *-:)
-shame.png           [-X     [-x
-musical-note.png    :-"
-star.png            (*)
-
-
-# Following MySpaceIM Beta 1.0.697.0
-[MySpaceIM]
-excited.png  	    :D      :-D
-devil.png	    }:)
-confused.png	    :Z
-happy.png	    :)      :-)
-amorous.png	    :X
-pirate.png	    P)
-shocked.png	    :O
-neutral.png	    :|
-tongue.png	    :P      :p
-pissed-off.png	    B|
-wink.png	    ;-)     ;)
-sad.png		    :[
-kiss.png            :x
-
-# MXit standard emoticons
-[MXit]
-happy.png           :-)     :)
-sad.png             :-(     :(
-wink.png            ;-)     ;)
-excited.png         :-D     :D     :->      :>
-neutral.png         :-|     :|
-shocked.png         :-O     :O
-tongue.png          :-P     :P
-embarrassed.png     :-$     :$
-glasses-cool.png    8-)
-in_love.png         (H)
-rose.png            (F)
-### Added in v3.0
-boy.png             (m)
-girl.png            (f)
-star.png            (*)
-chilli.png          (c)
-kiss.png            (x)
-lamp.png            (i)
-pissed-off.png      :e      :-e
-shut-mouth.png      :-x     :x
-thunder.png         (z)
-coffee.png          (U)
-mrgreen.png         (G)
-### Added in v5.0
-sick.png            :o(
-excruciating.png    :-{     :{
-amorous.png         :-}     :}
-eyeroll.png         8-o     8o
-crying.png          :'(
-thinking.png        :-?     :?
-drool.png           :-~     :~
-sleeping.png        :-z     :z
-lying.png           :L)
-glasses-nerdy.png   8-|     8|
-pirate.png          P-)
-### Added in v5.9.7
-bored.png           :-[     :[
-cold.png            :-<     :<
-confused.png        :-,     :,
-hungry.png          :-C     :C
-stressed.png        :-s     :s
diff --git a/pidgin-2.11.0/pidgin/pixmaps/protocols/16/msn.png b/pidgin-2.11.0/pidgin/pixmaps/protocols/16/msn.png
deleted file mode 100644
index 943ba35..0000000
diff --git a/pidgin-2.11.0/pidgin/pixmaps/protocols/16/mxit.png b/pidgin-2.11.0/pidgin/pixmaps/protocols/16/mxit.png
diff --git a/pidgin-2.11.0/pidgin/pixmaps/protocols/16/mxit.png b/pidgin-2.11.0/pidgin/pixmaps/protocols/16/mxit.png
deleted file mode 100644
index e44c1ea..0000000
diff --git a/pidgin-2.11.0/pidgin/pixmaps/protocols/16/myspace.png b/pidgin-2.11.0/pidgin/pixmaps/protocols/16/myspace.png
diff --git a/pidgin-2.11.0/pidgin/pixmaps/protocols/16/myspace.png b/pidgin-2.11.0/pidgin/pixmaps/protocols/16/myspace.png
deleted file mode 100644
index e7c3034..0000000
diff --git a/pidgin-2.11.0/pidgin/pixmaps/protocols/16/scalable/msn.svg b/pidgin-2.11.0/pidgin/pixmaps/protocols/16/scalable/msn.svg
diff --git a/pidgin-2.11.0/pidgin/pixmaps/protocols/16/scalable/msn.svg b/pidgin-2.11.0/pidgin/pixmaps/protocols/16/scalable/msn.svg
deleted file mode 100644
index 16a9156..0000000
diff --git a/pidgin-2.11.0/pidgin/pixmaps/protocols/16/scalable/yahoo.svg b/pidgin-2.11.0/pidgin/pixmaps/protocols/16/scalable/yahoo.svg
diff --git a/pidgin-2.11.0/pidgin/pixmaps/protocols/16/scalable/yahoo.svg b/pidgin-2.11.0/pidgin/pixmaps/protocols/16/scalable/yahoo.svg
deleted file mode 100644
index 6f5ef03..0000000
diff --git a/pidgin-2.11.0/pidgin/pixmaps/protocols/16/yahoo.png b/pidgin-2.11.0/pidgin/pixmaps/protocols/16/yahoo.png
diff --git a/pidgin-2.11.0/pidgin/pixmaps/protocols/16/yahoo.png b/pidgin-2.11.0/pidgin/pixmaps/protocols/16/yahoo.png
deleted file mode 100644
index b604158..0000000
diff --git a/pidgin-2.11.0/pidgin/pixmaps/protocols/22/msn.png b/pidgin-2.11.0/pidgin/pixmaps/protocols/22/msn.png
diff --git a/pidgin-2.11.0/pidgin/pixmaps/protocols/22/msn.png b/pidgin-2.11.0/pidgin/pixmaps/protocols/22/msn.png
deleted file mode 100644
index 97977f2..0000000
diff --git a/pidgin-2.11.0/pidgin/pixmaps/protocols/22/mxit.png b/pidgin-2.11.0/pidgin/pixmaps/protocols/22/mxit.png
diff --git a/pidgin-2.11.0/pidgin/pixmaps/protocols/22/mxit.png b/pidgin-2.11.0/pidgin/pixmaps/protocols/22/mxit.png
deleted file mode 100644
index 9af995c..0000000
diff --git a/pidgin-2.11.0/pidgin/pixmaps/protocols/22/myspace.png b/pidgin-2.11.0/pidgin/pixmaps/protocols/22/myspace.png
diff --git a/pidgin-2.11.0/pidgin/pixmaps/protocols/22/myspace.png b/pidgin-2.11.0/pidgin/pixmaps/protocols/22/myspace.png
deleted file mode 100644
index 2b6020b..0000000
diff --git a/pidgin-2.11.0/pidgin/pixmaps/protocols/22/scalable/msn.svg b/pidgin-2.11.0/pidgin/pixmaps/protocols/22/scalable/msn.svg
diff --git a/pidgin-2.11.0/pidgin/pixmaps/protocols/22/scalable/msn.svg b/pidgin-2.11.0/pidgin/pixmaps/protocols/22/scalable/msn.svg
deleted file mode 100644
index b7c6adc..0000000
diff --git a/pidgin-2.11.0/pidgin/pixmaps/protocols/22/scalable/yahoo.svg b/pidgin-2.11.0/pidgin/pixmaps/protocols/22/scalable/yahoo.svg
diff --git a/pidgin-2.11.0/pidgin/pixmaps/protocols/22/scalable/yahoo.svg b/pidgin-2.11.0/pidgin/pixmaps/protocols/22/scalable/yahoo.svg
deleted file mode 100644
index 63a7515..0000000
diff --git a/pidgin-2.11.0/pidgin/pixmaps/protocols/22/yahoo.png b/pidgin-2.11.0/pidgin/pixmaps/protocols/22/yahoo.png
diff --git a/pidgin-2.11.0/pidgin/pixmaps/protocols/22/yahoo.png b/pidgin-2.11.0/pidgin/pixmaps/protocols/22/yahoo.png
deleted file mode 100644
index 3b85f88..0000000
diff --git a/pidgin-2.11.0/pidgin/pixmaps/protocols/48/msn.png b/pidgin-2.11.0/pidgin/pixmaps/protocols/48/msn.png
diff --git a/pidgin-2.11.0/pidgin/pixmaps/protocols/48/msn.png b/pidgin-2.11.0/pidgin/pixmaps/protocols/48/msn.png
deleted file mode 100644
index 1b960dd..0000000
diff --git a/pidgin-2.11.0/pidgin/pixmaps/protocols/48/mxit.png b/pidgin-2.11.0/pidgin/pixmaps/protocols/48/mxit.png
diff --git a/pidgin-2.11.0/pidgin/pixmaps/protocols/48/mxit.png b/pidgin-2.11.0/pidgin/pixmaps/protocols/48/mxit.png
deleted file mode 100644
index 9ba05fd..0000000
diff --git a/pidgin-2.11.0/pidgin/pixmaps/protocols/48/myspace.png b/pidgin-2.11.0/pidgin/pixmaps/protocols/48/myspace.png
diff --git a/pidgin-2.11.0/pidgin/pixmaps/protocols/48/myspace.png b/pidgin-2.11.0/pidgin/pixmaps/protocols/48/myspace.png
deleted file mode 100644
index d9740ef..0000000
diff --git a/pidgin-2.11.0/pidgin/pixmaps/protocols/48/yahoo.png b/pidgin-2.11.0/pidgin/pixmaps/protocols/48/yahoo.png
diff --git a/pidgin-2.11.0/pidgin/pixmaps/protocols/48/yahoo.png b/pidgin-2.11.0/pidgin/pixmaps/protocols/48/yahoo.png
deleted file mode 100644
index f454f26..0000000
diff --git a/pidgin-2.11.0/pidgin/pixmaps/protocols/scalable/msn.svg b/pidgin-2.11.0/pidgin/pixmaps/protocols/scalable/msn.svg
diff --git a/pidgin-2.11.0/pidgin/pixmaps/protocols/scalable/msn.svg b/pidgin-2.11.0/pidgin/pixmaps/protocols/scalable/msn.svg
deleted file mode 100644
index 5619694..0000000
diff --git a/pidgin-2.11.0/pidgin/pixmaps/protocols/scalable/mxit.svg b/pidgin-2.11.0/pidgin/pixmaps/protocols/scalable/mxit.svg
diff --git a/pidgin-2.11.0/pidgin/pixmaps/protocols/scalable/mxit.svg b/pidgin-2.11.0/pidgin/pixmaps/protocols/scalable/mxit.svg
deleted file mode 100644
index dc0d7c2..0000000
diff --git a/pidgin-2.11.0/pidgin/pixmaps/protocols/scalable/yahoo.svg b/pidgin-2.11.0/pidgin/pixmaps/protocols/scalable/yahoo.svg
diff --git a/pidgin-2.11.0/pidgin/pixmaps/protocols/scalable/yahoo.svg b/pidgin-2.11.0/pidgin/pixmaps/protocols/scalable/yahoo.svg
deleted file mode 100644
index 674d74d..0000000
diff --git a/pidgin-2.11.0/pidgin/plugins/disco/xmppdisco.c b/pidgin-2.12.0/pidgin/plugins/disco/xmppdisco.c
diff --git a/pidgin-2.11.0/pidgin/plugins/disco/xmppdisco.c b/pidgin-2.12.0/pidgin/plugins/disco/xmppdisco.c
index 07efa34..50bc368 100644
--- a/pidgin-2.11.0/pidgin/plugins/disco/xmppdisco.c
+++ b/pidgin-2.12.0/pidgin/plugins/disco/xmppdisco.c
@@ -252,7 +252,6 @@ static const struct {
 } disco_type_mappings[] = {
 	{ "gadu-gadu", "gadu-gadu" }, /* the prpl is prpl-gg, but list_icon returns "gadu-gadu" */
 	{ "sametime",  "meanwhile" },
-	{ "myspaceim", "myspace" },
 	{ "xmpp",      "jabber" }, /* prpl-jabber (mentioned in case the prpl is renamed so this line will match) */
 	{ NULL,        NULL }
 };
diff --git a/pidgin-2.11.0/pidgin/plugins/gevolution/add_buddy_dialog.c b/pidgin-2.12.0/pidgin/plugins/gevolution/add_buddy_dialog.c
index 4570726..1404f94 100644
--- a/pidgin-2.11.0/pidgin/plugins/gevolution/add_buddy_dialog.c
+++ b/pidgin-2.12.0/pidgin/plugins/gevolution/add_buddy_dialog.c
@@ -288,21 +288,18 @@ populate_treeview(GevoAddBuddyDialog *dialog, const gchar *uri)
 	{
 		EContact *contact = E_CONTACT(c->data);
 		const char *name;
-		GList *aims, *jabbers, *yahoos, *msns, *icqs, *novells, *ggs;
+		GList *aims, *jabbers, *icqs, *novells, *ggs;
 
 		name = e_contact_get_const(contact, E_CONTACT_FULL_NAME);
 
 		aims    = e_contact_get(contact, E_CONTACT_IM_AIM);
 		jabbers = e_contact_get(contact, E_CONTACT_IM_JABBER);
-		yahoos  = e_contact_get(contact, E_CONTACT_IM_YAHOO);
-		msns    = e_contact_get(contact, E_CONTACT_IM_MSN);
 		icqs    = e_contact_get(contact, E_CONTACT_IM_ICQ);
 		novells = e_contact_get(contact, E_CONTACT_IM_GROUPWISE);
 		ggs     = e_contact_get(contact, E_CONTACT_IM_GADUGADU);
 
-		if (aims == NULL && jabbers == NULL && yahoos == NULL &&
-			msns == NULL && icqs == NULL && novells == NULL &&
-			ggs == NULL)
+		if (aims == NULL && jabbers == NULL &&
+			icqs == NULL && novells == NULL && ggs == NULL)
 		{
 			GtkTreeIter iter;
 
@@ -317,8 +314,6 @@ populate_treeview(GevoAddBuddyDialog *dialog, const gchar *uri)
 		{
 			add_ims(dialog, contact, name, aims,    "prpl-aim");
 			add_ims(dialog, contact, name, jabbers, "prpl-jabber");
-			add_ims(dialog, contact, name, yahoos,  "prpl-yahoo");
-			add_ims(dialog, contact, name, msns,    "prpl-msn");
 			add_ims(dialog, contact, name, icqs,    "prpl-icq");
 			add_ims(dialog, contact, name, novells, "prpl-novell");
 			add_ims(dialog, contact, name, ggs,     "prpl-gg");
@@ -367,7 +362,7 @@ search_changed_cb(GtkEntry *entry, GevoAddBuddyDialog *dialog)
 	{
 		EContact *contact = E_CONTACT(l->data);
 		const char *name;
-		GList *aims, *jabbers, *yahoos, *msns, *icqs, *novells, *ggs;
+		GList *aims, *jabbers, *icqs, *novells, *ggs;
 
 		name = e_contact_get_const(contact, E_CONTACT_FULL_NAME);
 
@@ -379,15 +374,12 @@ search_changed_cb(GtkEntry *entry, GevoAddBuddyDialog *dialog)
 
 		aims    = e_contact_get(contact, E_CONTACT_IM_AIM);
 		jabbers = e_contact_get(contact, E_CONTACT_IM_JABBER);
-		yahoos  = e_contact_get(contact, E_CONTACT_IM_YAHOO);
-		msns    = e_contact_get(contact, E_CONTACT_IM_MSN);
 		icqs    = e_contact_get(contact, E_CONTACT_IM_ICQ);
 		novells = e_contact_get(contact, E_CONTACT_IM_GROUPWISE);
 		ggs     = e_contact_get(contact, E_CONTACT_IM_GADUGADU);
 
-		if (aims == NULL && jabbers == NULL && yahoos == NULL &&
-			msns == NULL && icqs == NULL && novells == NULL &&
-			ggs == NULL)
+		if (aims == NULL && jabbers == NULL &&
+			icqs == NULL && novells == NULL && ggs == NULL)
 		{
 			GtkTreeIter iter;
 
@@ -402,8 +394,6 @@ search_changed_cb(GtkEntry *entry, GevoAddBuddyDialog *dialog)
 		{
 			add_ims(dialog, contact, name, aims,    "prpl-aim");
 			add_ims(dialog, contact, name, jabbers, "prpl-jabber");
-			add_ims(dialog, contact, name, yahoos,  "prpl-yahoo");
-			add_ims(dialog, contact, name, msns,    "prpl-msn");
 			add_ims(dialog, contact, name, icqs,    "prpl-icq");
 			add_ims(dialog, contact, name, novells, "prpl-novell");
 			add_ims(dialog, contact, name, ggs,     "prpl-gg");
diff --git a/pidgin-2.11.0/pidgin/plugins/gevolution/gevo-util.c b/pidgin-2.12.0/pidgin/plugins/gevolution/gevo-util.c
index 8f97a7d..914f79e 100644
--- a/pidgin-2.11.0/pidgin/plugins/gevolution/gevo-util.c
+++ b/pidgin-2.12.0/pidgin/plugins/gevolution/gevo-util.c
@@ -103,10 +103,6 @@ gevo_prpl_get_field(PurpleAccount *account, PurpleBuddy *buddy)
 		protocol_field = E_CONTACT_IM_AIM;
 	else if (!strcmp(protocol_id, "prpl-icq"))
 		protocol_field = E_CONTACT_IM_ICQ;
-	else if (!strcmp(protocol_id, "prpl-msn"))
-		protocol_field = E_CONTACT_IM_MSN;
-	else if (!strcmp(protocol_id, "prpl-yahoo"))
-		protocol_field = E_CONTACT_IM_YAHOO;
 	else if (!strcmp(protocol_id, "prpl-jabber"))
 		protocol_field = E_CONTACT_IM_JABBER;
 	else if (!strcmp(protocol_id, "prpl-novell"))
@@ -165,23 +161,5 @@ gevo_get_email_for_buddy(PurpleBuddy *buddy)
 		g_object_unref(contact);
 	}
 
-	if (mail == NULL)
-	{
-		PurpleAccount *account = purple_buddy_get_account(buddy);
-		const char *prpl_id = purple_account_get_protocol_id(account);
-
-		if (!strcmp(prpl_id, "prpl-msn"))
-		{
-			mail = g_strdup(purple_normalize(account,
-										   purple_buddy_get_name(buddy)));
-		}
-		else if (!strcmp(prpl_id, "prpl-yahoo"))
-		{
-			mail = g_strdup_printf("%s@yahoo.com",
-								   purple_normalize(account,
-												  purple_buddy_get_name(buddy)));
-		}
-	}
-
 	return mail;
 }
diff --git a/pidgin-2.11.0/pidgin/plugins/gevolution/gevolution.c b/pidgin-2.12.0/pidgin/plugins/gevolution/gevolution.c
index 9398393..439ef3c 100644
--- a/pidgin-2.11.0/pidgin/plugins/gevolution/gevolution.c
+++ b/pidgin-2.12.0/pidgin/plugins/gevolution/gevolution.c
@@ -121,8 +121,6 @@ update_buddies_from_contact(EContact *contact)
 
 	update_ims_from_contact(contact, name, "prpl-aim",    E_CONTACT_IM_AIM);
 	update_ims_from_contact(contact, name, "prpl-jabber", E_CONTACT_IM_JABBER);
-	update_ims_from_contact(contact, name, "prpl-yahoo",  E_CONTACT_IM_YAHOO);
-	update_ims_from_contact(contact, name, "prpl-msn",    E_CONTACT_IM_MSN);
 	update_ims_from_contact(contact, name, "prpl-icq",    E_CONTACT_IM_ICQ);
 	update_ims_from_contact(contact, name, "prpl-novell", E_CONTACT_IM_GROUPWISE);
 	update_ims_from_contact(contact, name, "prpl-gg",     E_CONTACT_IM_GADUGADU);
diff --git a/pidgin-2.11.0/pidgin/plugins/gevolution/new_person_dialog.c b/pidgin-2.12.0/pidgin/plugins/gevolution/new_person_dialog.c
index 30682f0..9d82771 100644
--- a/pidgin-2.11.0/pidgin/plugins/gevolution/new_person_dialog.c
+++ b/pidgin-2.12.0/pidgin/plugins/gevolution/new_person_dialog.c
@@ -145,12 +145,8 @@ add_cb(GtkWidget *w, GevoNewPersonDialog *dialog)
 			field = E_CONTACT_IM_AIM;
 		else if (!strcmp(im_service, "prpl-icq"))
 			field = E_CONTACT_IM_ICQ;
-		else if (!strcmp(im_service, "prpl-yahoo"))
-			field = E_CONTACT_IM_YAHOO;
 		else if (!strcmp(im_service, "prpl-jabber"))
 			field = E_CONTACT_IM_JABBER;
-		else if (!strcmp(im_service, "prpl-msn"))
-			field = E_CONTACT_IM_MSN;
 		else if (!strcmp(im_service, "prpl-novell"))
 			field = E_CONTACT_IM_GROUPWISE;
 		else if (!strcmp(im_service, "prpl-gg"))
diff --git a/pidgin-2.11.0/pidgin/plugins/notify.c b/pidgin-2.12.0/pidgin/plugins/notify.c
index 88020c8..1556f5a 100644
--- a/pidgin-2.11.0/pidgin/plugins/notify.c
+++ b/pidgin-2.12.0/pidgin/plugins/notify.c
@@ -718,7 +718,7 @@ get_config_frame(PurplePlugin *plugin)
 	                 G_CALLBACK(type_toggle_cb), "type_im");
 
 	ref = toggle;
-	toggle = gtk_check_button_new_with_mnemonic(_("\t_Notify for System messages"));
+	toggle = gtk_check_button_new_with_mnemonic(_("\tS_ystem messages"));
 	gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0);
 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle),
 	                            purple_prefs_get_bool("/plugins/gtk/X11/notify/type_im_sys"));
@@ -746,7 +746,7 @@ get_config_frame(PurplePlugin *plugin)
 	g_signal_connect(G_OBJECT(ref), "toggled",
 	                 G_CALLBACK(pidgin_toggle_sensitive), toggle);
 
-	toggle = gtk_check_button_new_with_mnemonic(_("\tNotify for _System messages"));
+	toggle = gtk_check_button_new_with_mnemonic(_("\tS_ystem messages"));
 	gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0);
 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle),
 	                            purple_prefs_get_bool("/plugins/gtk/X11/notify/type_chat_sys"));
diff --git a/pidgin-2.11.0/pidgin/plugins/raw.c b/pidgin-2.12.0/pidgin/plugins/raw.c
index 2fafa7e..e349921 100644
--- a/pidgin-2.11.0/pidgin/plugins/raw.c
+++ b/pidgin-2.12.0/pidgin/plugins/raw.c
@@ -33,7 +33,6 @@
 #include "gtkutils.h"
 
 #include "protocols/jabber/jabber.h"
-#include "protocols/msn/session.h"
 
 #ifdef MAX
 # undef MAX
@@ -82,13 +81,6 @@ text_sent_cb(GtkEntry *entry)
 		write(*a, txt, ntohs(len));
 		purple_debug(PURPLE_DEBUG_MISC, "raw", "TOC C: %s\n", txt);
 
-	} else if (strcmp(prpl_id, "prpl-msn") == 0) {
-		MsnSession *session = gc->proto_data;
-		char buf[strlen(txt) + 3];
-
-		g_snprintf(buf, sizeof(buf), "%s\r\n", txt);
-		msn_servconn_write(session->notification->servconn, buf, strlen(buf));
-
 	} else if (strcmp(prpl_id, "prpl-irc") == 0) {
 		write(*(int *)gc->proto_data, txt, strlen(txt));
 		write(*(int *)gc->proto_data, "\r\n", 2);
@@ -175,7 +167,7 @@ static PurplePluginInfo info =
 	N_("Raw"),
 	DISPLAY_VERSION,
 	N_("Lets you send raw input to text-based protocols."),
-	N_("Lets you send raw input to text-based protocols (XMPP, MSN, IRC, "
+	N_("Lets you send raw input to text-based protocols (XMPP, IRC, "
 	   "TOC). Hit 'Enter' in the entry box to send. Watch the debug window."),
 	"Eric Warmenhoven <eric@warmenhoven.org>",
 	PURPLE_WEBSITE,
diff --git a/pidgin-2.11.0/pidgin/plugins/win32/transparency/win2ktrans.c b/pidgin-2.12.0/pidgin/plugins/win32/transparency/win2ktrans.c
index 8bd260e..3fc80e7 100644
--- a/pidgin-2.11.0/pidgin/plugins/win32/transparency/win2ktrans.c
+++ b/pidgin-2.12.0/pidgin/plugins/win32/transparency/win2ktrans.c
@@ -682,8 +682,7 @@ static PurplePluginInfo info =
 					/**  summary        */
 	N_("Variable Transparency for the buddy list and conversations."),
 					/**  description    */
-	N_("This plugin enables variable alpha transparency on conversation windows and the buddy list.\n\n"
-	"* Note: This plugin requires Win2000 or greater."),
+	N_("This plugin enables variable alpha transparency on conversation windows and the buddy list."),
 	"Herman Bloggs <hermanator12002@yahoo.com>",	/**< author         */
 	PURPLE_WEBSITE,			/**< homepage       */
 	plugin_load,			/**< load           */
diff --git a/pidgin-2.11.0/pidgin.apspec.in b/pidgin-2.12.0/pidgin.apspec.in
index f647884..f337e56 100644
--- a/pidgin-2.11.0/pidgin.apspec.in
+++ b/pidgin-2.12.0/pidgin.apspec.in
@@ -14,7 +14,7 @@ PackageVersion: 1
 
 [Description]
 Pidgin allows you to talk to anyone using a variety of messaging protocols,
-including AIM (Oscar and TOC), ICQ, IRC, Yahoo!, MSN Messenger, XMPP,
+including AIM (Oscar and TOC), ICQ, IRC, XMPP,
 Gadu-Gadu, and Zephyr. These protocols are implemented using a
 modular, easy to use design. To use a protocol, just add an account using the
 account editor.
@@ -23,7 +23,7 @@ Pidgin supports many common features of other clients, as well as many unique
 features, such as perl scripting, TCL scripting and C plugins.
 
 Pidgin is NOT affiliated with or endorsed by America Online, Inc., Microsoft
-Corporation, Yahoo! Inc., or ICQ Inc.
+Corporation, or ICQ Inc.
 
 [BuildPrepare]
 APBUILD_STATIC="Xss startup-notification-1" prepareBuild --enable-nss --enable-gnutls --enable-binreloc --disable-perl --disable-tcl --disable-gtktest --disable-glibtest --disable-vv  --disable-fortify
diff --git a/pidgin-2.11.0/pidgin.spec.in b/pidgin-2.12.0/pidgin.spec.in
index 9e1e15f..7c29369 100644
--- a/pidgin-2.11.0/pidgin.spec.in
+++ b/pidgin-2.12.0/pidgin.spec.in
@@ -161,7 +161,7 @@ Requires:   pkgconfig
 
 %description
 Pidgin allows you to talk to anyone using a variety of messaging
-protocols including AIM, MSN, Yahoo!, XMPP, Bonjour, Gadu-Gadu,
+protocols including AIM, XMPP, Bonjour, Gadu-Gadu,
 ICQ, IRC, Novell Groupwise, QQ, Lotus Sametime, SILC, Simple and
 Zephyr.  These protocols are implemented using a modular, easy to
 use design.  To use a protocol, just add an account using the
@@ -171,7 +171,7 @@ Pidgin supports many common features of other clients, as well as many
 unique features, such as perl scripting, TCL scripting and C plugins.
 
 Pidgin is not affiliated with or endorsed by America Online, Inc.,
-Microsoft Corporation, Yahoo! Inc., or ICQ Inc.
+Microsoft Corporation, or ICQ Inc.
 
 %description devel
 The pidgin-devel package contains the header files, developer
@@ -182,8 +182,8 @@ and plugins.
 libpurple contains the core IM support for IM clients such as Pidgin
 and Finch.
 
-libpurple supports a variety of messaging protocols including AIM, MSN,
-Yahoo!, XMPP, Bonjour, Gadu-Gadu, ICQ, IRC, Novell Groupwise, QQ,
+libpurple supports a variety of messaging protocols including AIM,
+XMPP, Bonjour, Gadu-Gadu, ICQ, IRC, Novell Groupwise, QQ,
 Lotus Sametime, SILC, Simple and Zephyr.
 
 %description -n libpurple-devel

Reply to: