Mercurial > pidgin
changeset 16848:94d68859f74d
merge of '7e7267707ddd99ff7c8448e07a20e74d728dc553'
and 'c240aa46789822b3e7598ed5142de65e87167aa6'
author | Stu Tomlinson <stu@nosnilmot.com> |
---|---|
date | Thu, 03 May 2007 23:42:41 +0000 |
parents | 9862a82206ba (diff) 9bbae267b314 (current diff) |
children | 32c2a0c57ecc |
files | |
diffstat | 16 files changed, 413 insertions(+), 42 deletions(-) [+] |
line wrap: on
line diff
--- a/AUTHORS Thu May 03 23:41:30 2007 +0000 +++ b/AUTHORS Thu May 03 23:42:41 2007 +0000 @@ -17,14 +17,15 @@ Jabber: seanegn@jabber.org Gadu-Gadu: 1511497 -Daniel 'datallah' Atallah +Daniel 'datallah' Atallah - Developer Ethan 'Paco-Paco' Blanton - Developer Thomas Butter - Developer Sadrul Habib Chowdhury - Developer Mark 'KingAnt' Doliner - Developer Christian 'ChipX86' Hammond - Developer & Webmaster Gary 'grim' Kramlich - Developer -Richard 'rlaager' Laager +Richard 'rlaager' Laager - Developer +Richard 'wabz' Nelson - Developer Christopher 'siege' O'Brien - Developer Bartosz Oler - Developer Etan 'deryni' Reisner - Developer @@ -37,9 +38,11 @@ Crazy Patch Writers: ------------------- +John 'rekkanoryo' Bailey Ka-Hing 'javabsp' Cheung Felipe 'shx' Contreras Decklin Foster +Casey Harkins Peter 'Bleeter' Lawler Robert 'Robot101' McQueen Benjamin Miller
--- a/doc/pidgin.1.in Thu May 03 23:41:30 2007 +0000 +++ b/doc/pidgin.1.in Thu May 03 23:42:41 2007 +0000 @@ -548,6 +548,8 @@ .br Richard 'rlaager' Laager (developer) <\fIrlaager@pidgin.im\fR> .br + Richard 'wabz' Nelson (developer) +.br Christopher 'siege' O'Brien (developer) .br Bartosz Oler (developer) @@ -574,12 +576,12 @@ .br Ka-Hing 'javabsp' Cheung .br -Sadrul Habib Chowdhury -.br Felipe 'shx' Contreras .br Decklin Foster .br +Casey Harkins +.br Peter 'Bleeter' Lawler .br Robert 'Robot101' McQueen
--- a/libpurple/buddyicon.c Thu May 03 23:41:30 2007 +0000 +++ b/libpurple/buddyicon.c Thu May 03 23:42:41 2007 +0000 @@ -314,9 +314,6 @@ if (icon == NULL) icon = purple_buddy_icon_create(account, username); - /* Take a reference for the caller of this function. */ - icon->ref_count = 1; - /* purple_buddy_icon_set_data() sets img, but it * references img first, so we need to initialize it */ icon->img = NULL; @@ -519,19 +516,53 @@ void *icon_data, size_t icon_len, const char *checksum) { - PurpleBuddyIcon *icon; + GHashTable *icon_cache; + PurpleBuddyIcon *icon = NULL; g_return_if_fail(account != NULL); g_return_if_fail(username != NULL); - icon = purple_buddy_icons_find(account, username); + icon_cache = g_hash_table_lookup(account_cache, account); + + if (icon_cache != NULL) + icon = g_hash_table_lookup(icon_cache, username); if (icon != NULL) purple_buddy_icon_set_data(icon, icon_data, icon_len, checksum); else if (icon_data && icon_len > 0) { - PurpleBuddyIcon *icon = purple_buddy_icon_new(account, username, icon_data, icon_len, checksum); - purple_buddy_icon_unref(icon); + if (icon_data != NULL && icon_len > 0) + { + PurpleBuddyIcon *icon = purple_buddy_icon_new(account, username, icon_data, icon_len, checksum); + + /* purple_buddy_icon_new() calls + * purple_buddy_icon_set_data(), which calls + * purple_buddy_icon_update(), which has the buddy list + * and conversations take references as appropriate. + * This function doesn't return icon, so we can't + * leave a reference dangling. */ + purple_buddy_icon_unref(icon); + } + else + { + /* If the buddy list or a conversation was holding a + * reference, we'd have found the icon in the cache. + * Since we know we're deleting the icon, we only + * need a subset of purple_buddy_icon_update(). */ + + GSList *buddies = purple_find_buddies(account, username); + while (buddies != NULL) + { + PurpleBuddy *buddy = (PurpleBuddy *)buddies->data; + + unref_filename(purple_blist_node_get_string((PurpleBlistNode *)buddy, "buddy_icon")); + purple_blist_node_remove_setting((PurpleBlistNode *)buddy, "buddy_icon"); + purple_blist_node_remove_setting((PurpleBlistNode *)buddy, "icon_checksum"); + + buddies = g_slist_delete_link(buddies, buddies); + } + + } } } @@ -633,7 +664,7 @@ purple_buddy_icons_set_caching(caching); } - return icon; + return purple_buddy_icon_ref(icon); } gboolean
--- a/libpurple/buddyicon.h Thu May 03 23:41:30 2007 +0000 +++ b/libpurple/buddyicon.h Thu May 03 23:42:41 2007 +0000 @@ -54,7 +54,7 @@ * @param icon_len The buddy icon length. * @param checksum A protocol checksum from the prpl or @c NULL. * - * @return The buddy icon structure. + * @return The buddy icon structure, with a reference for the caller. */ PurpleBuddyIcon *purple_buddy_icon_new(PurpleAccount *account, const char *username, void *icon_data, size_t icon_len, @@ -209,7 +209,8 @@ * @param account The account the user is on. * @param username The username of the user. * - * @return The icon data if found, or @c NULL if not found. + * @return The icon (with a reference for the caller) if found, or @c NULL if + * not found. */ PurpleBuddyIcon * purple_buddy_icons_find(PurpleAccount *account, const char *username);
--- a/libpurple/conversation.c Thu May 03 23:41:30 2007 +0000 +++ b/libpurple/conversation.c Thu May 03 23:42:41 2007 +0000 @@ -279,7 +279,11 @@ ims = g_list_append(ims, conv); if ((icon = purple_buddy_icons_find(account, name))) + { purple_conv_im_set_icon(conv->u.im, icon); + /* purple_conv_im_set_icon refs the icon. */ + purple_buddy_icon_unref(icon); + } if (purple_prefs_get_bool("/purple/logging/log_ims")) {
--- a/libpurple/gaim-compat.h Thu May 03 23:41:30 2007 +0000 +++ b/libpurple/gaim-compat.h Thu May 03 23:42:41 2007 +0000 @@ -354,7 +354,6 @@ #define gaim_buddy_icons_set_for_user(icon, data, len) \ purple_buddy_icons_set_for_user(icon, g_memdup(data, len), len, NULL) -#define gaim_buddy_icons_find purple_buddy_icons_find #define gaim_buddy_icons_set_caching purple_buddy_icons_set_caching #define gaim_buddy_icons_is_caching purple_buddy_icons_is_caching #define gaim_buddy_icons_set_cache_dir purple_buddy_icons_set_cache_dir
--- a/libpurple/protocols/irc/msgs.c Thu May 03 23:41:30 2007 +0000 +++ b/libpurple/protocols/irc/msgs.c Thu May 03 23:42:41 2007 +0000 @@ -109,7 +109,9 @@ if (!strcmp(name, "251")) { /* 251 is required, so we pluck our nick from here */ purple_connection_set_display_name(gc, args[0]); - } else if (!strcmp(name, "255")) { + /* Some IRC servers seem to not send a 255 numeric, so + * I guess we can't require it; 251 will do. */ + /* } else if (!strcmp(name, "255")) { */ purple_connection_set_state(gc, PURPLE_CONNECTED); /* If we're away then set our away message */
--- a/libpurple/protocols/msn/notification.c Thu May 03 23:41:30 2007 +0000 +++ b/libpurple/protocols/msn/notification.c Thu May 03 23:42:41 2007 +0000 @@ -947,7 +947,7 @@ url = cmd->params[2]; buf = g_strdup_printf("%s%lu%s", - session->passport_info.mspauth, + session->passport_info.mspauth ? session->passport_info.mspauth : "BOGUS", time(NULL) - session->passport_info.sl, purple_connection_get_password(account->gc)); @@ -1142,33 +1142,25 @@ if ((value = msn_message_get_attr(msg, "kv")) != NULL) { - if (session->passport_info.kv != NULL) - g_free(session->passport_info.kv); - + g_free(session->passport_info.kv); session->passport_info.kv = g_strdup(value); } if ((value = msn_message_get_attr(msg, "sid")) != NULL) { - if (session->passport_info.sid != NULL) - g_free(session->passport_info.sid); - + g_free(session->passport_info.sid); session->passport_info.sid = g_strdup(value); } if ((value = msn_message_get_attr(msg, "MSPAuth")) != NULL) { - if (session->passport_info.mspauth != NULL) - g_free(session->passport_info.mspauth); - + g_free(session->passport_info.mspauth); session->passport_info.mspauth = g_strdup(value); } if ((value = msn_message_get_attr(msg, "ClientIP")) != NULL) { - if (session->passport_info.client_ip != NULL) - g_free(session->passport_info.client_ip); - + g_free(session->passport_info.client_ip); session->passport_info.client_ip = g_strdup(value); } @@ -1279,11 +1271,8 @@ msn_user_get_passport(session->user), session->passport_info.file, NULL, NULL); - if (from != NULL) - g_free(from); - - if (subject != NULL) - g_free(subject); + g_free(from); + g_free(subject); g_hash_table_destroy(table); }
--- a/libpurple/protocols/msn/slp.c Thu May 03 23:41:30 2007 +0000 +++ b/libpurple/protocols/msn/slp.c Thu May 03 23:42:41 2007 +0000 @@ -955,7 +955,7 @@ if (obj == NULL) { - /* TODO purple_buddy_icons_set_for_user(account, user->passport, NULL, 0, NULL); */ + purple_buddy_icons_set_for_user(account, user->passport, NULL, 0, NULL); return; }
--- a/libpurple/protocols/qq/buddy_info.c Thu May 03 23:41:30 2007 +0000 +++ b/libpurple/protocols/qq/buddy_info.c Thu May 03 23:42:41 2007 +0000 @@ -601,11 +601,14 @@ static void _qq_update_buddy_icon(PurpleAccount *account, const gchar *name, gint face) { - PurpleBuddyIcon *icon = purple_buddy_icons_find(account, name); + PurpleBuddy *buddy; gchar *icon_num_str = face_to_icon_str(face); - const gchar *old_icon_num = purple_buddy_icon_get_checksum(icon); + const gchar *old_icon_num = NULL; - if (icon == NULL || old_icon_num == NULL || + if ((buddy = purple_find_buddy(account, name))) + old_icon_num = purple_buddy_icons_get_checksum_for_user(buddy); + + if (old_icon_num == NULL || strcmp(icon_num_str, old_icon_num)) { gchar *icon_path;
--- a/pidgin/gtkblist.c Thu May 03 23:41:30 2007 +0000 +++ b/pidgin/gtkblist.c Thu May 03 23:42:41 2007 +0000 @@ -2160,7 +2160,7 @@ { GdkPixbuf *buf, *ret = NULL; GdkPixbufLoader *loader; - PurpleBuddyIcon *icon; + PurpleBuddyIcon *icon = NULL; const guchar *data = NULL; gsize len; PurpleBuddy *buddy = NULL; @@ -2197,9 +2197,9 @@ } if (data == NULL) { - if (!(icon = purple_buddy_get_icon(buddy))) - if (!(icon = purple_buddy_icons_find(buddy->account, buddy->name))) /* Not sure I like this...*/ - return NULL; + /* Not sure I like this...*/ + if (!(icon = purple_buddy_icons_find(buddy->account, buddy->name))) + return NULL; data = purple_buddy_icon_get_data(icon, &len); if(data == NULL) @@ -2211,6 +2211,7 @@ gdk_pixbuf_loader_close(loader, NULL); purple_imgstore_unref(custom_img); + purple_buddy_icon_unref(icon); buf = gdk_pixbuf_loader_get_pixbuf(loader); if (buf)
--- a/pidgin/pixmaps/emotes/default/22/Makefile.am Thu May 03 23:41:30 2007 +0000 +++ b/pidgin/pixmaps/emotes/default/22/Makefile.am Thu May 03 23:42:41 2007 +0000 @@ -67,6 +67,7 @@ glasses-cool.png \ glasses-nerdy.png \ go-away.png \ + goat.png \ good.png \ hammer.png \ handcuffs.png \
--- a/pidgin/pixmaps/emotes/default/22/scalable/Makefile.am Thu May 03 23:41:30 2007 +0000 +++ b/pidgin/pixmaps/emotes/default/22/scalable/Makefile.am Thu May 03 23:42:41 2007 +0000 @@ -62,6 +62,7 @@ girl.svg \ glasses-cool.svg \ glasses-nerdy.svg \ + goat.svg \ go-away.svg \ good.svg \ hammer.svg \
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pidgin/pixmaps/emotes/default/22/scalable/goat.svg Thu May 03 23:42:41 2007 +0000 @@ -0,0 +1,333 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://web.resource.org/cc/" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="24" + height="24" + id="svg2" + sodipodi:version="0.32" + inkscape:version="0.44.1" + version="1.0" + sodipodi:docbase="/home/hbons/Desktop" + sodipodi:docname="goat.svg" + inkscape:export-filename="/home/hbons/Desktop/goat.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90"> + <defs + id="defs4"> + <linearGradient + inkscape:collect="always" + id="linearGradient3164"> + <stop + style="stop-color:#2e3436;stop-opacity:1;" + offset="0" + id="stop3166" /> + <stop + style="stop-color:#2e3436;stop-opacity:0;" + offset="1" + id="stop3168" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient3154"> + <stop + style="stop-color:white;stop-opacity:1;" + offset="0" + id="stop3156" /> + <stop + style="stop-color:white;stop-opacity:0;" + offset="1" + id="stop3158" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient3134"> + <stop + style="stop-color:white;stop-opacity:1;" + offset="0" + id="stop3136" /> + <stop + style="stop-color:white;stop-opacity:0;" + offset="1" + id="stop3138" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient3106"> + <stop + style="stop-color:#babdb6;stop-opacity:1;" + offset="0" + id="stop3108" /> + <stop + style="stop-color:#babdb6;stop-opacity:0;" + offset="1" + id="stop3110" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3106" + id="radialGradient3112" + cx="8.5065088" + cy="9.6461401" + fx="8.5065088" + fy="9.6461401" + r="2.1569445" + gradientTransform="matrix(1.541291,0.465608,-0.481819,2.027283,4.319423e-2,-14.11923)" + gradientUnits="userSpaceOnUse" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3106" + id="radialGradient3116" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.541291,0.465608,-0.481819,2.027283,4.319423e-2,-14.11923)" + cx="8.5065088" + cy="9.6461401" + fx="8.5065088" + fy="9.6461401" + r="2.1569445" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3134" + id="linearGradient3140" + x1="5.437963" + y1="0.23528472" + x2="5.437963" + y2="5.4434042" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3134" + id="linearGradient3148" + gradientUnits="userSpaceOnUse" + x1="5.437963" + y1="0.23528472" + x2="5.437963" + y2="5.4434042" + gradientTransform="matrix(-1,0,0,1,25,3e-7)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3154" + id="linearGradient3160" + x1="12.5" + y1="0.37108496" + x2="12.5" + y2="16.491886" + gradientUnits="userSpaceOnUse" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3164" + id="radialGradient3170" + cx="4.5859361" + cy="13.798236" + fx="4.5859361" + fy="13.798236" + r="3.4977479" + gradientTransform="matrix(1,0,0,0.538889,0,6.36252)" + gradientUnits="userSpaceOnUse" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + gridtolerance="10000" + guidetolerance="10" + objecttolerance="10" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="25.730843" + inkscape:cx="25.851983" + inkscape:cy="11.081674" + inkscape:document-units="px" + inkscape:current-layer="layer1" + width="24px" + height="24px" + showgrid="true" + inkscape:window-width="1440" + inkscape:window-height="849" + inkscape:window-x="0" + inkscape:window-y="0" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1"> + <path + sodipodi:type="arc" + style="opacity:0.80681818;fill:url(#radialGradient3170);fill-opacity:1.0;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path3162" + sodipodi:cx="4.5859361" + sodipodi:cy="13.798236" + sodipodi:rx="3.4977479" + sodipodi:ry="1.8848975" + d="M 8.083684 13.798236 A 3.4977479 1.8848975 0 1 1 1.0881882,13.798236 A 3.4977479 1.8848975 0 1 1 8.083684 13.798236 z" + transform="matrix(1.857695,0,0,1.856865,3.982983,-5.121458)" /> + <path + style="opacity:1;fill:#d3d7cf;fill-opacity:1;stroke:#888a85;stroke-width:0.99999988;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 11.125 3.5 C 7.4630368 3.5 4.5 5.9198669 4.5 8.90625 L 4.5 10.6875 C 4.4999999 12.520757 5.6074368 14.15201 7.3125 15.125 L 7.3125 17.9375 C 7.3124999 19.907141 9.1821933 21.485422 11.5 21.5 L 11.5 22.5 C 11.5 23.053999 11.946001 23.499999 12.5 23.5 C 13.053999 23.5 13.5 23.053998 13.5 22.5 L 13.5 21.5 C 15.817807 21.485423 17.6875 19.907142 17.6875 17.9375 L 17.6875 15.125 C 19.392563 14.15201 20.5 12.520757 20.5 10.6875 L 20.5 8.90625 C 20.5 5.9198668 17.536962 3.5 13.875 3.5 L 11.125 3.5 z " + id="rect1872" /> + <path + sodipodi:type="inkscape:offset" + inkscape:radius="-1.0028498" + inkscape:original="M 11.125 3.5 C 7.4630368 3.5 4.5 5.9198669 4.5 8.90625 L 4.5 10.6875 C 4.4999999 12.520757 5.6074368 14.15201 7.3125 15.125 L 7.3125 17.9375 C 7.3124999 19.907141 9.1821933 21.485422 11.5 21.5 L 13.5 21.5 C 15.817807 21.485423 17.6875 19.907142 17.6875 17.9375 L 17.6875 15.125 C 19.392563 14.15201 20.5 12.520757 20.5 10.6875 L 20.5 8.90625 C 20.5 5.9198668 17.536962 3.5 13.875 3.5 L 11.125 3.5 z " + style="opacity:1;fill:url(#linearGradient3160);fill-opacity:1.0;stroke:white;stroke-width:0.99999988;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path3152" + d="M 11.125,4.5 C 7.9048332,4.5 5.5,6.5832069 5.5,8.90625 L 5.5,10.6875 C 5.4999999,12.116888 6.3641576,13.423507 7.8125,14.25 C 8.1242411,14.430678 8.3151074,14.764694 8.3125,15.125 L 8.3125,17.9375 C 8.3124999,19.2725 9.6340264,20.488264 11.5,20.5 L 13.5,20.5 C 15.365974,20.488265 16.6875,19.272502 16.6875,17.9375 L 16.6875,15.125 C 16.684893,14.764694 16.875759,14.430678 17.1875,14.25 C 18.635842,13.423507 19.5,12.116888 19.5,10.6875 L 19.5,8.90625 C 19.5,6.583207 17.095166,4.5 13.875,4.5 L 11.125,4.5 z " /> + <rect + style="opacity:1;fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect2763" + width="1" + height="5.0000005" + x="12.000009" + y="15.000004" + ry="0.53886384" + rx="0.5" /> + <rect + style="opacity:1;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect2765" + width="3" + height="1.9656405" + x="11.000009" + y="14.000004" + ry="0.98282027" /> + <path + sodipodi:type="arc" + style="opacity:1;fill:none;fill-opacity:1;stroke:#babdb6;stroke-width:0.82246691;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path2771" + sodipodi:cx="12.203254" + sodipodi:cy="18.947697" + sodipodi:rx="2.6816068" + sodipodi:ry="2.0986488" + d="M 14.767561,19.561604 A 2.6816068,2.0986488 0 0 1 9.6776584,19.65308" + transform="matrix(1.118732,0,0,1.321408,-1.152164,-7.764463)" + sodipodi:start="0.29686645" + sodipodi:end="2.7988059" + sodipodi:open="true" /> + <path + sodipodi:type="arc" + style="opacity:1;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path2313" + sodipodi:cx="9.0598059" + sodipodi:cy="8.7845774" + sodipodi:rx="1.1679889" + sodipodi:ry="1.4520943" + d="M 10.227795 8.7845774 A 1.1679889 1.4520943 0 1 1 7.891817,8.7845774 A 1.1679889 1.4520943 0 1 1 10.227795 8.7845774 z" + transform="matrix(0,1.284259,-0.688661,0,2.35522,-2.135131)" /> + <path + sodipodi:type="inkscape:offset" + inkscape:radius="-0.94218826" + inkscape:original="M 4.5625 4.46875 C 2.9579994 7.0296312 3.4314452 8.7503668 4.25 9.5 C 6.0336558 9.5000001 8.9413878 9.500546 11.28125 9.5 C 12.256192 9.4997721 13.455805 9.5 13.9375 9.5 C 16.216702 9.5005481 18.983108 9.5 20.75 9.5 C 21.568557 8.7503669 22.042002 7.0296311 20.4375 4.46875 C 20.428669 5.0928925 20.216276 5.598111 19.875 6 C 18.748078 7.2885168 16.178685 7.564945 14.03125 7.59375 C 14.031262 7.5849058 11.437522 7.5849056 11.4375 7.59375 C 8.4698521 7.5610102 4.6031518 7.1497258 4.5625 4.46875 z " + xlink:href="#path2244" + style="opacity:0.2;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:white;stroke-width:1.00000012;stroke-miterlimit:4;stroke-opacity:1" + id="path2266" + d="M 4.6875,6.8125 C 4.5155414,7.6585464 4.5469059,8.2639318 4.78125,8.5625 C 6.5783776,8.5625677 9.1184812,8.5630047 11.28125,8.5625 C 12.256519,8.562272 13.456102,8.5625 13.9375,8.5625 C 16.038658,8.5630053 18.454079,8.5625696 20.21875,8.5625 C 20.450872,8.2667634 20.475711,7.6759035 20.3125,6.84375 C 19.557648,7.5553907 18.566446,7.9573838 17.53125,8.1875 C 16.376366,8.4442219 15.140345,8.516373 14.03125,8.53125 C 14.010422,8.5319411 13.989578,8.5319411 13.96875,8.53125 C 13.963551,8.5311176 13.949379,8.5314449 13.9375,8.53125 C 13.932632,8.5307271 13.918896,8.5332789 13.90625,8.53125 C 13.891461,8.5310771 13.861711,8.5314138 13.84375,8.53125 C 13.780888,8.5306766 13.718637,8.5316757 13.625,8.53125 C 13.384218,8.5301553 13.073147,8.53125 12.75,8.53125 C 12.426853,8.53125 12.084536,8.5301553 11.84375,8.53125 C 11.736734,8.5317365 11.659399,8.5305759 11.59375,8.53125 C 11.568819,8.5354507 11.540979,8.5302056 11.53125,8.53125 C 11.498821,8.5347315 11.506084,8.5309288 11.5,8.53125 C 11.479172,8.5319411 11.458328,8.5319411 11.4375,8.53125 C 9.9146719,8.5144498 8.1174583,8.4078713 6.59375,7.90625 C 5.8773837,7.6704144 5.2333296,7.3204154 4.6875,6.8125 z " + transform="translate(-20.1876,-3.210909)" /> + <path + sodipodi:type="arc" + style="opacity:1;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path2311" + sodipodi:cx="9.0598059" + sodipodi:cy="8.7845774" + sodipodi:rx="1.1679889" + sodipodi:ry="1.4520943" + d="M 10.227795 8.7845774 A 1.1679889 1.4520943 0 1 1 7.891817,8.7845774 A 1.1679889 1.4520943 0 1 1 10.227795 8.7845774 z" + transform="matrix(0,1.284261,-2.065983,0,8.454425,-7.135153)" /> + <path + sodipodi:type="arc" + style="opacity:1;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path2315" + sodipodi:cx="9.0598059" + sodipodi:cy="8.7845774" + sodipodi:rx="1.1679889" + sodipodi:ry="1.4520943" + d="M 10.227795 8.7845774 A 1.1679889 1.4520943 0 1 1 7.891817,8.7845774 A 1.1679889 1.4520943 0 1 1 10.227795 8.7845774 z" + transform="matrix(0,1.284259,-0.688661,0,-9.64477,-2.135131)" /> + <path + sodipodi:type="arc" + style="opacity:1;fill:url(#radialGradient3116);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path3114" + sodipodi:cx="7.9476604" + sodipodi:cy="10.436511" + sodipodi:rx="2.1569445" + sodipodi:ry="2.8370621" + d="M 10.104605 10.436511 A 2.1569445 2.8370621 0 1 1 5.7907159,10.436511 A 2.1569445 2.8370621 0 1 1 10.104605 10.436511 z" + transform="matrix(-1.390856,0,0,1.23367,28.05405,-2.375209)" /> + <path + style="fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" + d="M 17.00001,13.000004 C 17.00001,11.344004 16.552009,10.000004 16.000009,10.000004 C 15.448009,10.000004 15.000009,11.344004 15.000009,13.000004 C 16.206103,13.000004 16.083985,13.000004 17.00001,13.000004 z " + id="path2193" + sodipodi:nodetypes="cscc" /> + <path + sodipodi:type="arc" + style="opacity:1;fill:url(#radialGradient3112);fill-opacity:1.0;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path3104" + sodipodi:cx="7.9476604" + sodipodi:cy="10.436511" + sodipodi:rx="2.1569445" + sodipodi:ry="2.8370621" + d="M 10.104605 10.436511 A 2.1569445 2.8370621 0 1 1 5.7907159,10.436511 A 2.1569445 2.8370621 0 1 1 10.104605 10.436511 z" + transform="matrix(1.390856,0,0,1.23367,-3.05405,-2.375212)" /> + <path + style="fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" + d="M 10.000009,13.000004 C 10.000009,11.344004 9.5520081,10.000004 9.0000081,10.000004 C 8.4480082,10.000004 8.0000081,11.344004 8.0000081,13.000004 C 9.0145101,13.000004 9.1767691,13.000004 10.000009,13.000004 z " + id="path2219" + sodipodi:nodetypes="cscc" /> + <path + sodipodi:type="arc" + style="opacity:1;fill:#eeeeec;fill-opacity:1;stroke:#888a85;stroke-width:1.03446472;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path3128" + sodipodi:cx="3.3617244" + sodipodi:cy="2.7997618" + sodipodi:rx="0.75784534" + sodipodi:ry="2.1180806" + d="M 4.1195697 2.7997618 A 0.75784534 2.1180806 0 1 1 2.603879,2.7997618 A 0.75784534 2.1180806 0 1 1 4.1195697 2.7997618 z" + transform="matrix(1.319531,0,0,0.708188,4.0641,2.017241)" /> + <path + style="opacity:1;fill:#c17d11;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 7.6875,-0.49750418 C 5.8653114,-0.1200094 4.5,1.499533 4.5,3.4538317 C 4.5,5.6873161 6.2919987,7.4999996 8.5,7.4999997 C 8.5,7.4999997 8.5179429,6.4884577 8.5179429,6.4884577 C 8.5291419,6.5224424 6.9560837,5.5492045 6.5,2.4422897 C 6.329457,1.2805234 7.0215067,0.24186794 7.8125,-0.49750418 C 7.7725639,-0.49050652 7.7270219,-0.50569176 7.6875,-0.49750418 z " + id="path3132" + sodipodi:nodetypes="csccscc" /> + <path + style="opacity:1;fill:url(#linearGradient3140);fill-opacity:1.0;stroke:#8f5902;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 7.6875,-0.49750418 C 5.8653114,-0.1200094 4.5,1.499533 4.5,3.4538317 C 4.5,5.6873161 5.2815382,7.4999996 7.4895395,7.4999997 C 7.4895395,7.4999997 8.5179429,6.4884577 8.5179429,6.4884577 C 8.5291419,6.5224424 6.9560837,5.5492045 6.5,2.4422897 C 6.329457,1.2805234 7.0215067,0.24186794 7.8125,-0.49750418 C 7.7725639,-0.49050652 7.7270219,-0.50569176 7.6875,-0.49750418 z " + id="path3121" + sodipodi:nodetypes="csccscc" /> + <path + sodipodi:type="arc" + style="opacity:1;fill:#eeeeec;fill-opacity:1;stroke:#888a85;stroke-width:1.03446472;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path3142" + sodipodi:cx="3.3617244" + sodipodi:cy="2.7997618" + sodipodi:rx="0.75784534" + sodipodi:ry="2.1180806" + d="M 4.1195697 2.7997618 A 0.75784534 2.1180806 0 1 1 2.603879,2.7997618 A 0.75784534 2.1180806 0 1 1 4.1195697 2.7997618 z" + transform="matrix(-1.319531,0,0,0.708188,20.9359,2.017241)" /> + <path + style="opacity:1;fill:#c17d11;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 17.312499,-0.49750388 C 19.134688,-0.1200091 20.499999,1.4995333 20.499999,3.453832 C 20.499999,5.6873164 18.708001,7.4999999 16.499999,7.5 C 16.499999,7.5 16.482056,6.488458 16.482056,6.488458 C 16.470857,6.5224427 18.043916,5.5492048 18.499999,2.44229 C 18.670542,1.2805237 17.978493,0.24186824 17.187499,-0.49750388 C 17.227435,-0.49050622 17.272977,-0.50569146 17.312499,-0.49750388 z " + id="path3144" + sodipodi:nodetypes="csccscc" /> + <path + style="opacity:1;fill:url(#linearGradient3148);fill-opacity:1;stroke:#8f5902;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 17.312499,-0.49750388 C 19.134688,-0.1200091 20.499999,1.4995333 20.499999,3.453832 C 20.499999,5.6873164 19.524142,7.4999999 17.31614,7.5 C 17.31614,7.5 16.482056,6.488458 16.482056,6.488458 C 16.470857,6.5224427 18.043916,5.5492048 18.499999,2.44229 C 18.670542,1.2805237 17.978493,0.24186824 17.187499,-0.49750388 C 17.227435,-0.49050622 17.272977,-0.50569146 17.312499,-0.49750388 z " + id="path3146" + sodipodi:nodetypes="csccscc" /> + </g> +</svg>