View | Details | Raw Unified | Return to bug 26051
Collapse All | Expand All

(-)a/inlibro-plugins/Pando.pm (+568 lines)
Line 0 Link Here
1
package Koha::Plugin::Pando;
2
3
# Maryse Simard, 2021 - InLibro
4
#
5
# This plugin allows you to generate a Carrousel of books from available lists
6
# and insert the template into the table system preferences;OpacMainUserBlock
7
#
8
#
9
# This file is part of Koha.
10
#
11
# Koha is free software; you can redistribute it and/or modify it under the
12
# terms of the GNU General Public License as published by the Free Software
13
# Foundation; either version 3 of the License, or (at your option) any later
14
# version.
15
#
16
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
17
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
18
# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
19
#
20
# You should have received a copy of the GNU General Public License along
21
# with Koha; if not, write to the Free Software Foundation, Inc.,
22
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
23
24
use base qw(Koha::Plugins::Base);
25
use Modern::Perl;
26
use CGI;
27
28
use String::Util qw(trim);
29
use REST::Client;
30
use Try::Tiny;
31
use JSON;
32
33
our $VERSION = 1.0;
34
35
# mapping entre et les champs utilisés par l'api et ceux de
36
# la table borrowers
37
our $PANDO_BORROWER_MAPPING = {
38
    card_number           => 'cardnumber',      # can't be modified
39
    lastname              => 'surname',         # can't be modified
40
    firstname             => 'firstname',       # can't be modified
41
    house                 => 'streetnumber',
42
    streetname            => 'address',
43
    city                  => 'city',
44
    state                 => 'state',
45
    zip                   => 'zipcode',
46
    email                 => 'email',
47
    phone                 => 'phone',
48
    cell                  => 'mobile',
49
    birthday              => 'dateofbirth',     # can't be modified
50
    expiration_date       => 'dateexpiry',
51
    password              => 'password',
52
    password_confirmation => 'password',
53
};
54
55
=head1 NAME
56
57
Koha::Plugin::Pando - Plugin pour l'intégration avec Pando
58
59
=head2 METHODS
60
61
=head3 new
62
63
=cut
64
65
sub new {
66
    my ( $class, $params ) = @_;
67
68
    $params->{"metadata"} = {
69
        name   => "Intégration Pando",
70
        author => "Maryse Simard",
71
        description => "Permet l'intégration de la gestion des utilisateurs avec Pando.",
72
        date_authored   => "2021-01-25",
73
        date_updated    => "2021-01-25",
74
        minimum_version => "20.05",
75
        maximum_version => undef,
76
        version         => $VERSION,
77
    };
78
79
    my $self = $class->SUPER::new($params);
80
    return $self;
81
}
82
83
=head3 configure
84
85
Gère la page de configuration du plugin : affiche la page ou
86
enregistre les valeurs.
87
88
=cut
89
90
sub configure {
91
    my ( $self, $params ) = @_;
92
    my $cgi = $self->{'cgi'};
93
94
    if ( $cgi->param("action") && $cgi->param("action") eq "configure" ) {
95
        my $base_url      = $cgi->param('base_url');
96
        my $client_id     = $cgi->param('client_id');
97
        my $client_secret = $cgi->param('client_secret');
98
        my $test_config   = $cgi->param('test_config') || "";
99
        my @categories    = $cgi->multi_param('categories');
100
        my $categories    = encode_json(\@categories);
101
        my $attribute     = $cgi->param('attribute');
102
        my $auto_uid      = $cgi->param('auto_uid') ? 1 : 0;
103
104
        $self->store_data(
105
            {
106
                base_url      => $base_url,
107
                client_id     => $client_id,
108
                client_secret => $client_secret,
109
                test_config   => $test_config,
110
                categories    => $categories,
111
                attribute     => $attribute,
112
                auto_uid      => $auto_uid,
113
            }
114
        );
115
116
        $self->go_home();
117
    } else {
118
        my $template = $self->retrieve_template({ name => "configure" });
119
120
        my $categories = Koha::Patron::Categories->search({}, { order_by => 'description' });
121
        my $selected_categories = decode_json($self->retrieve_data('categories')) if ( defined $self->retrieve_data('categories') );
122
123
        my $attributes = Koha::Patron::Attribute::Types->search({ unique_id => 1 }, { order_by => 'description' });
124
        my $attribute = $self->retrieve_data('attribute');
125
126
        my $auto_uid = $self->retrieve_data('auto_uid') // 1;   # valeur par défaut
127
 
128
        $template->param(
129
            base_url      => $self->retrieve_data('base_url'),
130
            client_id     => $self->retrieve_data('client_id'),
131
            client_secret => $self->retrieve_data('client_secret'),
132
            test_config   => $self->retrieve_data('test_config'),
133
            categories          => $categories,
134
            selected_categories => $selected_categories,
135
            attributes          => $attributes,
136
            selected_attribute  => $attribute,
137
            auto_uid      => $auto_uid,
138
        );
139
140
        print $cgi->header(-type => 'text/html', -charset => 'utf-8');
141
        print $template->output();
142
    }
143
}
144
145
=head3 after_patron_action
146
147
Gère le hook after_patron_action. Appele la bonne routine selon la
148
valeur du paramètre action.
149
150
Seul les utilisateurs faisant partie des catégories configurées
151
dans le plugin seront affectés.
152
153
=cut
154
155
sub after_patron_action {
156
    my ( $self, $params ) = @_;
157
158
    my $action = $params->{action} // '';
159
    my $patron = $params->{patron};
160
    my $borrowernumber = $params->{patron_id};
161
162
    unless ( $patron ) {
163
        $patron = Koha::Patron->find($borrowernumber);
164
    }
165
166
    my $categories = decode_json($self->retrieve_data('categories')) if ( defined $self->retrieve_data('categories') );
167
    my $category = $patron->categorycode if ( $patron );
168
    return unless ( grep(/^$category$/, @{$categories}) );
169
170
    if ( $action eq 'create' ) {
171
        $self->after_patron_create($patron);
172
    } elsif ( $action eq 'modify' ) {
173
        $self->after_patron_modify($patron);
174
    } elsif ( $action eq 'delete' ) {
175
        # TODO
176
    }
177
}
178
179
=head3 after_patron_create
180
181
Appele l'endpoint correspondant de l'api pour la création d'un
182
utilisateur.
183
184
=cut
185
186
sub after_patron_create {
187
    my ( $self, $patron ) = @_;
188
189
    my ($client, undef) = $self->retrieve_token();
190
191
    my $params = $self->prepare_parameters($patron);
192
    my $json = encode_json($params);
193
194
    $client->POST("api/v1/users", $json, { 'Content-Type' => 'application/json', 'Accept' => 'application/json' });
195
    my $response_content = $client->responseContent();
196
197
    my $data;
198
    try {
199
        my $response = decode_json($response_content);
200
        if ( $response->{status} eq "success" ) {
201
            $data = $response->{data};
202
        } else {
203
            warn "[Koha::Plugin::Pando] Creating user error: \"" . $response->{message} . "\".";
204
        }
205
    } catch {
206
        warn "[Koha::Plugin::Pando] Creating user failed for borrowernumber " . $patron->borrowernumber;
207
    };
208
209
    if ( $data ) {
210
        $self->verify_patron_data($patron, $data);
211
    }
212
}
213
214
=head3 after_patron_modify
215
216
Appele l'endpoint correspondant de l'api pour la mise à jour d'un
217
utilisateur.
218
219
TODO réessayer avec get_uid_from_email si le uid existe, mais est invalide.
220
221
=cut
222
223
sub after_patron_modify {
224
    my ( $self, $patron ) = @_;
225
226
    my ($client, undef) = $self->retrieve_token();
227
228
    my $attribute = $self->retrieve_data('attribute');
229
    my $patron_attribute = $patron->extended_attributes->search({ code => $attribute })->single;
230
    my $uid = trim($patron_attribute->attribute) if ( $patron_attribute );
231
232
    unless ( $uid ) {
233
        my $auto_uid = $self->retrieve_data('auto_uid') // 1;
234
        if ( $auto_uid ) {
235
            $uid = $self->get_uid_from_email({ client => $client, email => $patron->email });
236
237
            if ( $uid ) {
238
                $patron_attribute->delete if ( $patron_attribute );
239
                $patron->add_extended_attribute(
240
                    {
241
                        code      => $attribute,
242
                        attribute => $uid,
243
                    }
244
                );
245
            }
246
        }
247
    }
248
249
    return unless ( $uid );
250
251
    my $params = $self->prepare_parameters($patron);
252
    my $json = encode_json($params);
253
254
    $client->PATCH("api/v1/users/$uid", $json, { 'Content-Type' => 'application/json', 'Accept' => 'application/json' });
255
    my $response_content = $client->responseContent();
256
257
    my $data;
258
    try {
259
        my $response = decode_json($response_content);
260
        if ( $response->{status} eq "success" ) {
261
            $data = $response->{data};
262
        } else {
263
            warn "[Koha::Plugin::Pando] Updating user error: \"" . $response->{message} . "\".";
264
        }
265
    } catch {
266
        warn "[Koha::Plugin::Pando] Updating user failed for borrowernumber " . $patron->borrowernumber;
267
    };
268
269
    if ( $data ) {
270
        $self->verify_patron_data($patron, $data);
271
    }
272
}
273
274
=head3 prepare_parameters
275
276
Prépare un objet contenant les valeurs d'un Koha::Patron en utilisant
277
les clés correspondantes pour l'api.
278
Utilise $PANDO_BORROWER_MAPPING.
279
280
=cut
281
282
sub prepare_parameters {
283
    my ( $self, $patron ) = @_;
284
285
    my $params = {};
286
287
    foreach my $key ( keys %{$PANDO_BORROWER_MAPPING} ) {
288
        my $field = $PANDO_BORROWER_MAPPING->{$key};
289
        my $value = $patron->${field} if ( $patron ) ;
290
        $params->{$key} = $value if ( defined $value );
291
    }
292
293
    return $params;
294
}
295
296
=head3 verify_patron_data
297
298
Vérifie que les valeurs retournées par l'api après la sauvegarde
299
correspondent à celles de Koha. Sinon, met à jour le borrower dans Koha
300
pour que les deux systèmes soient correctement synchronisés.
301
302
Note: Cette routine utilise des requêtes sql pour modifier les données
303
directement dans la base de données : On veut éviter d'utiliser
304
Koha::Patron->store qui relancerait le hook after_patron_action.
305
306
=cut
307
308
sub verify_patron_data {
309
    my ($self, $patron, $data) = @_;
310
311
    # uid
312
    my $auto_uid = $self->retrieve_data('auto_uid') // 1;
313
    if ( $auto_uid ) {
314
        my $attribute = $self->retrieve_data('attribute');
315
316
        if ( $attribute && $data->{uid} ) {
317
            $patron->extended_attributes->search({ code => $attribute })->single->delete;
318
            $patron->add_extended_attribute(
319
                {
320
                    code      => $attribute,
321
                    attribute => $data->{uid},
322
                }
323
            );
324
        }
325
    }
326
327
    # Compare les données reçues en réponse et celles de Koha
328
    my @keys;
329
    my @values;
330
    foreach my $key ( keys %{$PANDO_BORROWER_MAPPING} ) {
331
        my $field = $PANDO_BORROWER_MAPPING->{$key};
332
        my $value = $data->{$key};
333
334
        next unless ( $field && $value );
335
336
        unless ( $patron->${field} eq $value ) {
337
            push @keys, $field;
338
            push @values, $value;
339
        }
340
    }
341
342
    if ( scalar @keys ) {
343
        my $dbh = C4::Context->dbh;
344
        my $sth = $dbh->prepare("UPDATE borrowers SET " . (join ", ", map { "$_ = ?" } @keys) . " WHERE borrowernumber = ?");
345
        $sth->execute(@values, $patron->borrowernumber);
346
    }
347
}
348
349
=head3 test_config
350
351
Teste la connexion à l'api pour les valeurs de base_url, client_id
352
et client_secret fournies.
353
354
Imprime un document JSON pour réponse; à appeler par Ajax.
355
356
=cut
357
358
sub test_config {
359
    my ( $self ) = @_;
360
361
    my $cgi = $self->{'cgi'};
362
    my $base_url      = $cgi->param('base_url');
363
    my $client_id     = $cgi->param('client_id');
364
    my $client_secret = $cgi->param('client_secret');
365
366
    my $success = 0;
367
    my $result  = {};
368
369
    my $client = REST::Client->new(host => $base_url);
370
    $client->GET("api/v1/isalive");
371
    my $response_content = $client->responseContent();
372
373
    try {
374
        my $response = decode_json($response_content);
375
        if ( $response->{status} eq "success" ) {
376
            $success = $response->{data}->{isalive}
377
        } else {
378
            $result->{error_base_url} = 1;
379
        }
380
    } catch {
381
        $result->{error_base_url} = 1;
382
    };
383
384
    if ( $success ) {
385
        my (undef, $token) = $self->retrieve_token({ client => $client, client_id => $client_id, client_secret => $client_secret});
386
        unless ( $token ) {
387
            $success = 0;
388
            $result->{error_credentials} = 1;
389
        }
390
    }
391
392
    $result->{success} = $success;
393
394
    print $cgi->header( -type => 'application/json', -charset => 'utf-8' );
395
    print encode_json($result);
396
    exit 0;
397
}
398
399
=head3 retrieve_token
400
401
my ($client, $token) = retrieve_token();
402
403
Récupère et retourne le token de connexion.
404
Retourne aussi un REST::Client ayant le host et le token configurés.
405
406
=cut
407
408
sub retrieve_token () {
409
    my ( $self, $params ) = @_;
410
411
    my $client        = $params->{client};
412
    my $client_id     = $params->{client_id}     // $self->retrieve_data('client_id');
413
    my $client_secret = $params->{client_secret} // $self->retrieve_data('client_secret');
414
415
    my $token = undef;
416
417
    unless ( $client ) {
418
        my $base_url = $params->{base_url} // $self->retrieve_data('base_url');
419
        $client = REST::Client->new(host => $base_url);
420
    }
421
422
    $client->GET("api/v1/auth/access_token", {"Access-Token" => "$client_id|$client_secret"});
423
    my $response_content = $client->responseContent();
424
425
    try {
426
        my $response = decode_json($response_content);
427
        $token = $response->{data}->{token} if ( $response->{status} eq "success" );
428
    };
429
430
    $client->addHeader( "Authorization", "Bearer $token" ) if ( $token );
431
432
    return ( $client, $token );
433
}
434
435
=head3 get_uid_from_email
436
437
Récupère le uid à partir de la liste de tous les utilisateurs.
438
439
=cut
440
441
sub get_uid_from_email {
442
    my ( $self, $params ) = @_;
443
444
    my $email  = $params->{email};
445
    my $client = $params->{client};
446
447
    my $uid = undef;
448
449
    unless ( $client ) {
450
        ($client, undef) = $self->retrieve_token();
451
    }
452
453
    $client->GET("api/v1/users");
454
    my $response_content = $client->responseContent();
455
456
    try {
457
        my $response = decode_json($response_content);
458
        if ( $response->{status} eq "success" ) {
459
            foreach my $user ( @{$response->{data}} ) {
460
                if ( $user->{email} eq $email ) {
461
                    $uid = $user->{uid};
462
                    last;
463
                }
464
            }
465
        }
466
    };
467
468
    return $uid;
469
}
470
471
=head3 patron_attributes_delete_filter
472
473
Filtre les attributs utilisateurs lors de leur suppression.
474
475
On veut ici empêcher de supprimer l'attribut choisi pour contenir le
476
uid. Raison : memberentry.pl met à jour les attributs en les supprimant
477
puis les recréant, APRÈS la mise à jour de l'utilisateur. Ce qui
478
implique que si l'on touche à la valeur du uid dans ce plugin, ça sera
479
écrasé par la valeur contenu dans le formulaire.
480
481
Appelé par Koha::Patron::Attributes->delete.
482
483
Note : l'attribut utilisateur ne pourra donc jamais être supprimé via
484
memberentry.pl (plus précisement, tout appel à Koha::Patron::Attributes->delete)
485
tant que ce plugin est actif/cet attribut est configuré.
486
487
=cut
488
489
sub patron_attributes_delete_filter {
490
    my ( $self, $params ) = @_;
491
492
    my $auto_uid = $self->retrieve_data('auto_uid') // 1;
493
    return unless ( $auto_uid );
494
    
495
    my $attribute = $self->retrieve_data('attribute');
496
    return unless ( $attribute );
497
498
    my $attributes = $params->{attributes};
499
    return $attributes->search({ -not => { "me.code" => $attribute } });
500
}
501
502
=head3 intranet_js
503
504
Ajoute du javascript à l'intranet. Retire le champ pour le uid si
505
auto_uid est à vrai.
506
507
=cut
508
509
sub intranet_js {
510
    my ( $self, $args ) = @_;
511
512
    my $auto_uid = $self->retrieve_data('auto_uid') // 1;
513
    return unless ( $auto_uid );
514
515
    my $attribute = $self->retrieve_data('attribute');
516
    return unless ( $attribute );
517
518
    return "<script>\$(document).ready(function() {\$(\"#memberentry_patron_attributes input[type='hidden'][value='$attribute']\").parent().remove();});</script>";
519
}
520
521
=head3 retrieve_template
522
523
Retourne le template pour le nom fourni selon la langue.
524
525
=cut
526
527
sub retrieve_template {
528
    my ( $self, $params ) = @_;
529
530
    my $name = $params->{name} // "configure";
531
532
    # Le template dépend du cookie, celui par défault est anglais
533
    my $preferedLanguage = $self->{"cgi"}->cookie("KohaOpacLanguage") || "";
534
    my $template = undef;
535
536
    eval {$template = $self->get_template( { file => $name . "_$preferedLanguage.tt" } )};
537
    unless ( $template ) {
538
        $preferedLanguage = substr $preferedLanguage, 0, 2;
539
        eval {$template = $self->get_template( { file => $name . "_$preferedLanguage.tt" } )};
540
    }
541
    $template = $self->get_template( { file => "$name.tt" } ) unless ( $template );
542
543
    return $template;
544
}
545
546
=head3 install
547
548
Installe le plugin.
549
550
=cut
551
552
sub install {
553
    my ( $self, $params ) = @_;
554
    return 1;
555
}
556
557
=head3 uninstall
558
559
Supprime le plugin.
560
561
=cut
562
563
sub uninstall {
564
    my ( $self, $params ) = @_;
565
    return 1;
566
}
567
568
1;
(-)a/inlibro-plugins/Pando/configure.tt (+281 lines)
Line 0 Link Here
1
[% USE raw %]
2
[% USE Asset %]
3
[% SET footerjs = 1 %]
4
[% INCLUDE 'doc-head-open.inc' %]
5
    <title>Koha &rsaquo; Pando Plugin &rsaquo; Configuration</title>
6
    [% INCLUDE 'doc-head-close.inc' %]
7
    [% Asset.css("lib/jquery/plugins/multiple-select/multiple-select.css") | $raw %]
8
9
    <style>
10
        .main {
11
            margin: 25px;
12
        }
13
14
        form > .action {
15
            padding-top: 25px;
16
        }
17
18
        .main select {
19
            min-width: 150px;
20
        }
21
22
        .ms-parent .ms-drop li {
23
            padding: 0;
24
        }
25
26
        .ms-parent .ms-drop label {
27
            text-align: left;
28
        }
29
30
        small span.default {
31
            font-weight: normal;
32
            font-style: italic;
33
        }
34
35
        /* test config */
36
37
        /* reproduire "fieldset.rows label" de staff-global */
38
        fieldset.rows .action .test-state {
39
            padding-top: 4px;
40
            float: left;
41
            width: 9em;
42
            margin-left: 0;
43
        }
44
45
        /* reproduire "fieldset.rows label.error" de staff-global */
46
        fieldset.rows li .test-state {
47
            float: none;
48
            margin-left: 1em;
49
            width: auto;
50
        }
51
52
        .test-state > * {
53
            display: none;
54
            max-width: 12px;
55
        }
56
57
        .test-state.success .success {
58
            display: inline-block;
59
        }
60
61
        .test-state.error .error {
62
            display: inline-block;
63
        }
64
65
        .test-state.warn .warn {
66
            display: inline-block;
67
        }
68
69
        .test-state.wait .wait {
70
            display: inline-block;
71
        }
72
73
        /* inlibro-header */
74
75
        #inlibro-header {
76
            width: 450px;
77
            margin-bottom: 25px;
78
            color: #696969;
79
            font-size: 14px;
80
        }
81
82
        #inlibro-header p:first-child {
83
            text-align: left;
84
        }
85
86
        #inlibro-header p:last-child {
87
            text-align: right;
88
        }
89
    </style>
90
</head>
91
92
<body>
93
[% INCLUDE 'header.inc' %]
94
[% INCLUDE 'cat-search.inc' %]
95
96
<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> &rsaquo; <a href="/cgi-bin/koha/plugins/plugins-home.pl">Plugins</a> &rsaquo; Pando &rsaquo; Configuration</div>
97
98
<div class="main container-fluid">
99
    <div class="row">
100
        <div class="col-md-10">
101
102
            <div id="inlibro-header">
103
                <p>This plugin created by</p>
104
                <img width="450" src="[% PLUGIN_PATH | url %]/images/inLibro_en.svg" alt="inLibro" />
105
                <p>Visit our <a href="https://inlibro.com/en/">website</a> for more Koha plugins</p>
106
            </div>
107
108
            <h3>Configuration of Pando integration</h3>
109
110
            <form method="get">
111
                [%# mandatory parameters %]
112
                <input type="hidden" name="class" value="[% CLASS | html %]" />
113
                <input type="hidden" name="method" value="[% METHOD | html %]" />
114
                [%# end mandatory %]
115
                <input type="hidden" name="action" value="configure" />
116
117
                <fieldset id="api-config" class="rows">
118
                    <legend>API settings</legend>
119
                    <ol>
120
                        <li id="base-url">
121
                            <label for="base_url">Base url</label>
122
                            <input id="base_url" type="text" name="base_url" value="[% base_url | html %]" size="45" />
123
                            <label for="base_url" class="test-state">
124
                                <i class="fa fa-check success" aria-hidden="true" title="Success"></i>
125
                                <i class="fa fa-times error" aria-hidden="true" title="Error"></i>
126
                                <i class="fa fa-exclamation warn" aria-hidden="true" title="Data has changed"></i>
127
                                <img class="wait" src="[% interface | html %]/[% theme | html %]/img/loading.gif" alt="Waiting..." />
128
                            </label>
129
                        </li>
130
                        <li id="client-id">
131
                            <label for="client_id">Client ID</label>
132
                            <input id="client_id" type="text" name="client_id" value="[% client_id | html %]" size="45" />
133
                            <label for="client_id" class="test-state credentials">
134
                                <i class="fa fa-check success" aria-hidden="true" title="Success"></i>
135
                                <i class="fa fa-times error" aria-hidden="true" title="Error"></i>
136
                                <i class="fa fa-exclamation warn" aria-hidden="true" title="Data has changed"></i>
137
                                <img class="wait" src="[% interface | html %]/[% theme | html %]/img/loading.gif" alt="Waiting..." />
138
                            </label>
139
                        </li>
140
                        <li id="client-secret">
141
                            <label for="client_secret">Client Secret</label>
142
                            <input id="client_secret" type="text" name="client_secret" value="[% client_secret | html %]" size="45" />
143
                            <label for="client_secret" class="test-state credentials">
144
                                <i class="fa fa-check success" aria-hidden="true" title="Success"></i>
145
                                <i class="fa fa-times error" aria-hidden="true" title="Error"></i>
146
                                <i class="fa fa-exclamation warn" aria-hidden="true" title="Data has changed"></i>
147
                                <img class="wait" src="[% interface | html %]/[% theme | html %]/img/loading.gif" alt="Waiting..." />
148
                            </label>
149
                        </li>
150
                    </ol>
151
152
                    <div class="action">
153
                        <label for="test-config" class="test-state [% test_config | html %]">
154
                            <i class="fa fa-check success" aria-hidden="true" title="Success"></i>
155
                            <i class="fa fa-times error" aria-hidden="true" title="Error"></i>
156
                            <i class="fa fa-exclamation warn" aria-hidden="true" title="Data has changed"></i>
157
                            <img class="wait" src="[% interface | html %]/[% theme | html %]/img/loading.gif" alt="Waiting..." />
158
                        </label>
159
                        <button id="test-config" type="button">Test configuration </button>
160
                        <input type="hidden" name="test_config" value="[% test_config | html %]" />
161
                    </div>
162
                </fieldset>
163
164
                <fieldset class="rows">
165
                    <legend>Patrons</legend>
166
                    <ol>
167
                        <li>
168
                            <label for="categories">Categories</label>
169
                            <select id="categories" name="categories" multiple="multiple">
170
                                [% FOREACH category IN categories %]
171
                                    [% IF selected_categories.grep("^$category.categorycode\$").size %]
172
                                        <option value="[% category.categorycode | html %]" selected="selected">[% category.description | html %]</option>
173
                                    [% ELSE %]
174
                                        <option value="[% category.categorycode | html %]">[% category.description | html %]</option>
175
                                    [% END %]
176
                                [% END %]
177
                            </select>
178
                            <small>Only these categories' patrons will be synchronised.</small>
179
                        </li>
180
                        <li>
181
                            <label for="attribute">Patron attribute</label>
182
                            <select id="attribute" name="attribute">
183
                                [% FOREACH attribute IN attributes %]
184
                                    [% IF selected_attribute == attribute %]
185
                                        <option value="[% attribute.code | html %]" selected="selected">[% attribute.description | html %]</option>
186
                                    [% ELSE %]
187
                                        <option value="[% attribute.code | html %]">[% attribute.description | html %]</option>
188
                                    [% END %]
189
                                [% END %]
190
                            </select>
191
                            <small>Patron attribute where is stored the unique identifier (uid) used by Pando.</small>
192
                        </li>
193
                        <li>
194
                            <label for="auto_uid">Automatic uid</label>
195
                            [% IF auto_uid == 0 %]
196
                                <input type="checkbox" id="auto_uid" name="auto_uid" />
197
                            [% ELSE %]
198
                                <input type="checkbox" id="auto_uid" name="auto_uid" checked="checked" />
199
                            [% END %]
200
                            <small>When checked, the plugin automatically takes care of getting and updating Pando's uid in Koha. <strong>Note:</strong> The attribute's value can't be manually changed in the interface. <span class="default">Default: true</span></small>
201
                        </li>
202
                    </ol>
203
                </fieldset>
204
205
                <div class="action">
206
                    <input type="submit" value="Save configuration" />
207
                </div>
208
            </form>
209
        </div>
210
    </div>
211
[%# last div closed by intranet-bottom.inc %]
212
213
[% MACRO jsinclude BLOCK %]
214
    [% Asset.js("lib/jquery/plugins/multiple-select/jquery.multiple.select.js") | $raw %]
215
216
    <script>
217
        $(document).ready(function() {
218
            var MS_PLACEHOLDER = _("Please select ...");
219
            var MS_SELECT_ALL = _("Select all");
220
            var MS_ALL_SELECTED = _("All selected");
221
            var MS_COUNT = _("# of % selected");
222
            var MS_NO_MATCHES = _("No matches found");
223
224
            $("select[multiple='multiple']").multipleSelect( {
225
                placeholder: MS_PLACEHOLDER,
226
                selectAllText: MS_SELECT_ALL,
227
                allSelected: MS_ALL_SELECTED,
228
                countSelected: MS_COUNT,
229
                noMatchesFound: MS_NO_MATCHES,
230
                position: "top" // la page est trop courte et la liste des catégories trop longue
231
            } );
232
233
            $("#api-config input[type='text']").on("change", function () {
234
                $("input[name='test_config']").val("");
235
236
                var nodes = $(this).parent().find(".test-state");
237
                if (nodes.hasClass("credentials")) {
238
                    nodes = nodes.add(".test-state.credentials");
239
                }
240
                nodes = nodes.add(".action .test-state");
241
242
                nodes.each(function () {
243
                    var object = $(this);
244
                    if (!object.hasClass("warn")) {
245
                        object.removeClass("success error").addClass("warn");
246
                    }
247
                });
248
            });
249
250
            $("button#test-config").on('click', function () {
251
                $(".test-state").removeClass("success error warn").addClass("wait");
252
253
                var params = {
254
                    class : "Koha::Plugin::Pando",
255
                    method : "test_config",
256
                    base_url : $("input[name='base_url']").val(),
257
                    client_id : $("input[name='client_id']").val(),
258
                    client_secret : $("input[name='client_secret']").val()
259
                };
260
261
                $.getJSON("run.pl", params,
262
                    function(data) {
263
                        $(".test-state").removeClass("wait");
264
                        if (data.success) {
265
                            $("input[name='test_config']").val("success");
266
                            $(".test-state").removeClass("error warn").addClass("success");
267
                        } else {
268
                            $("input[name='test_config']").val('error');
269
                            $(".test-state").removeClass("success warn").addClass("error");
270
                            if (data.error_credentials) {
271
                                $("#base-url .test-state").removeClass("error warn").addClass("success");
272
                            }
273
                        }
274
                    }
275
                );
276
            });
277
        });
278
    </script>
279
[% END %]
280
281
[% INCLUDE 'intranet-bottom.inc' %]
(-)a/inlibro-plugins/Pando/configure_fr-CA.tt (+281 lines)
Line 0 Link Here
1
[% USE raw %]
2
[% USE Asset %]
3
[% SET footerjs = 1 %]
4
[% INCLUDE 'doc-head-open.inc' %]
5
    <title>Koha &rsaquo; Plugin Pando &rsaquo; Configuration</title>
6
    [% INCLUDE 'doc-head-close.inc' %]
7
    [% Asset.css("lib/jquery/plugins/multiple-select/multiple-select.css") | $raw %]
8
9
    <style>
10
        .main {
11
            margin: 25px;
12
        }
13
14
        form > .action {
15
            padding-top: 25px;
16
        }
17
18
        .main select {
19
            min-width: 150px;
20
        }
21
22
        .ms-parent .ms-drop li {
23
            padding: 0;
24
        }
25
26
        .ms-parent .ms-drop label {
27
            text-align: left;
28
        }
29
30
        small span.default {
31
            font-weight: normal;
32
            font-style: italic;
33
        }
34
35
        /* test config */
36
37
        /* reproduire "fieldset.rows label" de staff-global */
38
        fieldset.rows .action .test-state {
39
            padding-top: 4px;
40
            float: left;
41
            width: 9em;
42
            margin-left: 0;
43
        }
44
45
        /* reproduire "fieldset.rows label.error" de staff-global */
46
        fieldset.rows li .test-state {
47
            float: none;
48
            margin-left: 1em;
49
            width: auto;
50
        }
51
52
        .test-state > * {
53
            display: none;
54
            max-width: 12px;
55
        }
56
57
        .test-state.success .success {
58
            display: inline-block;
59
        }
60
61
        .test-state.error .error {
62
            display: inline-block;
63
        }
64
65
        .test-state.warn .warn {
66
            display: inline-block;
67
        }
68
69
        .test-state.wait .wait {
70
            display: inline-block;
71
        }
72
73
        /* inlibro-header */
74
75
        #inlibro-header {
76
            width: 450px;
77
            margin-bottom: 25px;
78
            color: #696969;
79
            font-size: 14px;
80
        }
81
82
        #inlibro-header p:first-child {
83
            text-align: left;
84
        }
85
86
        #inlibro-header p:last-child {
87
            text-align: right;
88
        }
89
    </style>
90
</head>
91
92
<body>
93
[% INCLUDE 'header.inc' %]
94
[% INCLUDE 'cat-search.inc' %]
95
96
<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Accueil</a> &rsaquo; <a href="/cgi-bin/koha/plugins/plugins-home.pl">Plugins</a> &rsaquo; Pando &rsaquo; Configuration</div>
97
98
<div class="main container-fluid">
99
    <div class="row">
100
        <div class="col-md-10">
101
102
            <div id="inlibro-header">
103
                <p>Cette extension a été créée par</p>
104
                <img width="450" src="[% PLUGIN_PATH | url %]/images/inLibro_fr.svg" alt="inLibro" />
105
                <p>Visitez notre <a href="https://inlibro.com">site web</a> pour d'autres extension Koha</p>
106
            </div>
107
108
            <h3>Configuration de l'intégration Pando</h3>
109
110
            <form method="get">
111
                [%# mandatory parameters %]
112
                <input type="hidden" name="class" value="[% CLASS | html %]" />
113
                <input type="hidden" name="method" value="[% METHOD | html %]" />
114
                [%# end mandatory %]
115
                <input type="hidden" name="action" value="configure" />
116
117
                <fieldset id="api-config" class="rows">
118
                    <legend>Paramètres de l'API</legend>
119
                    <ol>
120
                        <li id="base-url">
121
                            <label for="base_url">Url de base</label>
122
                            <input id="base_url" type="text" name="base_url" value="[% base_url | html %]" size="45" />
123
                            <label for="base_url" class="test-state">
124
                                <i class="fa fa-check success" aria-hidden="true" title="Succès"></i>
125
                                <i class="fa fa-times error" aria-hidden="true" title="Erreur"></i>
126
                                <i class="fa fa-exclamation warn" aria-hidden="true" title="Les données ont changées"></i>
127
                                <img class="wait" src="[% interface | html %]/[% theme | html %]/img/loading.gif" alt="En attente..." />
128
                            </label>
129
                        </li>
130
                        <li id="client-id">
131
                            <label for="client_id">Client ID</label>
132
                            <input id="client_id" type="text" name="client_id" value="[% client_id | html %]" size="45" />
133
                            <label for="client_id" class="test-state credentials">
134
                                <i class="fa fa-check success" aria-hidden="true" title="Succès"></i>
135
                                <i class="fa fa-times error" aria-hidden="true" title="Erreur"></i>
136
                                <i class="fa fa-exclamation warn" aria-hidden="true" title="Les données ont changées"></i>
137
                                <img class="wait" src="[% interface | html %]/[% theme | html %]/img/loading.gif" alt="En attente..." />
138
                            </label>
139
                        </li>
140
                        <li id="client-secret">
141
                            <label for="client_secret">Client Secret</label>
142
                            <input id="client_secret" type="text" name="client_secret" value="[% client_secret | html %]" size="45" />
143
                            <label for="client_secret" class="test-state credentials">
144
                                <i class="fa fa-check success" aria-hidden="true" title="Succès"></i>
145
                                <i class="fa fa-times error" aria-hidden="true" title="Erreur"></i>
146
                                <i class="fa fa-exclamation warn" aria-hidden="true" title="Les données ont changées"></i>
147
                                <img class="wait" src="[% interface | html %]/[% theme | html %]/img/loading.gif" alt="En attente..." />
148
                            </label>
149
                        </li>
150
                    </ol>
151
152
                    <div class="action">
153
                        <label for="test-config" class="test-state [% test_config | html %]">
154
                            <i class="fa fa-check success" aria-hidden="true" title="Succès"></i>
155
                            <i class="fa fa-times error" aria-hidden="true" title="Erreur"></i>
156
                            <i class="fa fa-exclamation warn" aria-hidden="true" title="Les données ont changées"></i>
157
                            <img class="wait" src="[% interface | html %]/[% theme | html %]/img/loading.gif" alt="En attente..." />
158
                        </label>
159
                        <button id="test-config" type="button">Tester la configuration </button>
160
                        <input type="hidden" name="test_config" value="[% test_config | html %]" />
161
                    </div>
162
                </fieldset>
163
164
                <fieldset class="rows">
165
                    <legend>Utilisateurs</legend>
166
                    <ol>
167
                        <li>
168
                            <label for="categories">Catégories</label>
169
                            <select id="categories" name="categories" multiple="multiple">
170
                                [% FOREACH category IN categories %]
171
                                    [% IF selected_categories.grep("^$category.categorycode\$").size %]
172
                                        <option value="[% category.categorycode | html %]" selected="selected">[% category.description | html %]</option>
173
                                    [% ELSE %]
174
                                        <option value="[% category.categorycode | html %]">[% category.description | html %]</option>
175
                                    [% END %]
176
                                [% END %]
177
                            </select>
178
                            <small>Seulement les utilisateurs de ces catégories seront synchronisés.</small>
179
                        </li>
180
                        <li>
181
                            <label for="attribute">Attribut utilisateur</label>
182
                            <select id="attribute" name="attribute">
183
                                [% FOREACH attribute IN attributes %]
184
                                    [% IF selected_attribute == attribute %]
185
                                        <option value="[% attribute.code | html %]" selected="selected">[% attribute.description | html %]</option>
186
                                    [% ELSE %]
187
                                        <option value="[% attribute.code | html %]">[% attribute.description | html %]</option>
188
                                    [% END %]
189
                                [% END %]
190
                            </select>
191
                            <small>L'attribut utilisateur contenant l'identifiant unique (uid) utilisé par Pando.</small>
192
                        </li>
193
                        <li>
194
                            <label for="auto_uid">uid automatique</label>
195
                            [% IF auto_uid == 0 %]
196
                                <input type="checkbox" id="auto_uid" name="auto_uid" />
197
                            [% ELSE %]
198
                                <input type="checkbox" id="auto_uid" name="auto_uid" checked="checked" />
199
                            [% END %]
200
                            <small>Lorsque coché, l'extension se chargera automatiquement de récupérer et mettre à jour l'uid de Pando dans Koha. <strong>Note :</strong> La valeur de l'attribut utilisateur ne pourra pas être changé manuellement dans l'interface. <span class="default">Valeur par défaut : vrai</span></small>
201
                        </li>
202
                    </ol>
203
                </fieldset>
204
205
                <div class="action">
206
                    <input type="submit" value="Enregistrer la configuration" />
207
                </div>
208
            </form>
209
        </div>
210
    </div>
211
[%# last div closed by intranet-bottom.inc %]
212
213
[% MACRO jsinclude BLOCK %]
214
    [% Asset.js("lib/jquery/plugins/multiple-select/jquery.multiple.select.js") | $raw %]
215
216
    <script>
217
        $(document).ready(function() {
218
            var MS_PLACEHOLDER = _("Merci de sélectionner ...");
219
            var MS_SELECT_ALL = _("Tout sélectionner");
220
            var MS_ALL_SELECTED = _("Tous");
221
            var MS_COUNT = _("# de % selectionné(e)s");
222
            var MS_NO_MATCHES = _("Aucune correspondances trouvées");
223
224
            $("select[multiple='multiple']").multipleSelect( {
225
                placeholder: MS_PLACEHOLDER,
226
                selectAllText: MS_SELECT_ALL,
227
                allSelected: MS_ALL_SELECTED,
228
                countSelected: MS_COUNT,
229
                noMatchesFound: MS_NO_MATCHES,
230
                position: "top" // la page est trop courte et la liste des catégories trop longue
231
            } );
232
233
            $("#api-config input[type='text']").on("change", function () {
234
                $("input[name='test_config']").val("");
235
236
                var nodes = $(this).parent().find(".test-state");
237
                if (nodes.hasClass("credentials")) {
238
                    nodes = nodes.add(".test-state.credentials");
239
                }
240
                nodes = nodes.add(".action .test-state");
241
242
                nodes.each(function () {
243
                    var object = $(this);
244
                    if (!object.hasClass("warn")) {
245
                        object.removeClass("success error").addClass("warn");
246
                    }
247
                });
248
            });
249
250
            $("button#test-config").on('click', function () {
251
                $(".test-state").removeClass("success error warn").addClass("wait");
252
253
                var params = {
254
                    class : "Koha::Plugin::Pando",
255
                    method : "test_config",
256
                    base_url : $("input[name='base_url']").val(),
257
                    client_id : $("input[name='client_id']").val(),
258
                    client_secret : $("input[name='client_secret']").val()
259
                };
260
261
                $.getJSON("run.pl", params,
262
                    function(data) {
263
                        $(".test-state").removeClass("wait");
264
                        if (data.success) {
265
                            $("input[name='test_config']").val("success");
266
                            $(".test-state").removeClass("error warn").addClass("success");
267
                        } else {
268
                            $("input[name='test_config']").val('error');
269
                            $(".test-state").removeClass("success warn").addClass("error");
270
                            if (data.error_credentials) {
271
                                $("#base-url .test-state").removeClass("error warn").addClass("success");
272
                            }
273
                        }
274
                    }
275
                );
276
            });
277
        });
278
    </script>
279
[% END %]
280
281
[% INCLUDE 'intranet-bottom.inc' %]
(-)a/inlibro-plugins/Pando/images/inLibro_en.svg (+202 lines)
Line 0 Link Here
1
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
<!-- Created with Inkscape (http://www.inkscape.org/) -->
3
4
<svg
5
   xmlns:dc="http://purl.org/dc/elements/1.1/"
6
   xmlns:cc="http://creativecommons.org/ns#"
7
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
   xmlns:svg="http://www.w3.org/2000/svg"
9
   xmlns="http://www.w3.org/2000/svg"
10
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
   width="332.76749"
13
   height="69.510628"
14
   id="svg4252"
15
   version="1.1"
16
   inkscape:version="0.91 r13725"
17
   sodipodi:docname="inLibro_en.svg">
18
  <defs
19
     id="defs4254">
20
    <clipPath
21
       clipPathUnits="userSpaceOnUse"
22
       id="clipPath30">
23
      <path
24
         inkscape:connector-curvature="0"
25
         d="M 0,792 612,792 612,0 0,0 0,792 z"
26
         id="path32" />
27
    </clipPath>
28
  </defs>
29
  <sodipodi:namedview
30
     id="base"
31
     pagecolor="#ffffff"
32
     bordercolor="#666666"
33
     borderopacity="1.0"
34
     inkscape:pageopacity="0.0"
35
     inkscape:pageshadow="2"
36
     inkscape:zoom="2"
37
     inkscape:cx="297.83017"
38
     inkscape:cy="44.728359"
39
     inkscape:document-units="px"
40
     inkscape:current-layer="g28"
41
     showgrid="false"
42
     fit-margin-top="1"
43
     fit-margin-right="1"
44
     fit-margin-bottom="1"
45
     fit-margin-left="1"
46
     inkscape:window-width="1867"
47
     inkscape:window-height="1056"
48
     inkscape:window-x="53"
49
     inkscape:window-y="24"
50
     inkscape:window-maximized="1"
51
     showguides="true"
52
     inkscape:guide-bbox="true">
53
    <sodipodi:guide
54
       position="331.5,-24.5"
55
       orientation="1,0"
56
       id="guide3436" />
57
  </sodipodi:namedview>
58
  <metadata
59
     id="metadata4257">
60
    <rdf:RDF>
61
      <cc:Work
62
         rdf:about="">
63
        <dc:format>image/svg+xml</dc:format>
64
        <dc:type
65
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
66
        <dc:title></dc:title>
67
      </cc:Work>
68
    </rdf:RDF>
69
  </metadata>
70
  <g
71
     inkscape:label="Layer 1"
72
     inkscape:groupmode="layer"
73
     id="layer1"
74
     transform="translate(-208.61625,-497.60688)">
75
    <path
76
       inkscape:connector-curvature="0"
77
       d="m 252.76875,520.9465 -43.1525,0 0,-4.17875 43.1525,0 0,4.17875 z"
78
       style="fill:#028cb5;fill-opacity:1;fill-rule:nonzero;stroke:none"
79
       id="path12" />
80
    <path
81
       inkscape:connector-curvature="0"
82
       d="m 252.76875,503.549 -43.1525,0 0,-4.18 43.1525,0 0,4.18 z"
83
       style="fill:#028cb5;fill-opacity:1;fill-rule:nonzero;stroke:none"
84
       id="path14" />
85
    <g
86
       id="g16"
87
       transform="matrix(1.25,0,0,-1.25,252.76875,529.28062)">
88
      <path
89
         inkscape:connector-curvature="0"
90
         d="M 0,0 -34.522,0 -34.521,3.342 0,3.342 0,0 z"
91
         style="fill:#59c134;fill-opacity:1;fill-rule:nonzero;stroke:none"
92
         id="path18" />
93
    </g>
94
    <path
95
       inkscape:connector-curvature="0"
96
       d="m 258.3175,512.199 -43.15125,0 0,-4.17875 43.15125,0 0,4.17875 z"
97
       style="fill:#59c134;fill-opacity:1;fill-rule:nonzero;stroke:none"
98
       id="path20" />
99
    <g
100
       id="g22"
101
       transform="matrix(1.25,0,0,-1.25,252.76875,537.79325)">
102
      <path
103
         inkscape:connector-curvature="0"
104
         d="M 0,0 -34.522,0 -34.521,3.344 0,3.344 0,0 z"
105
         style="fill:#028cb5;fill-opacity:1;fill-rule:nonzero;stroke:none"
106
         id="path24" />
107
    </g>
108
    <g
109
       transform="matrix(1.25,0,0,-1.25,164.645,1373.074)"
110
       id="g26">
111
      <g
112
         id="g28"
113
         clip-path="url(#clipPath30)">
114
        <g
115
           id="g34"
116
           transform="translate(92.8828,699.4722)">
117
          <path
118
             inkscape:connector-curvature="0"
119
             d="m 0,0 c 0.666,0 1,-0.334 1,-1 l 0,-29.87 c 0,-0.67 -0.334,-1.004 -1,-1.004 l -4.92,0 c -0.697,0 -1.046,0.334 -1.046,1.004 l 0,29.87 c 0,0.666 0.349,1 1.046,1 L 0,0 z"
120
             style="fill:#59c134;fill-opacity:1;fill-rule:nonzero;stroke:none"
121
             id="path36" />
122
        </g>
123
        <g
124
           id="g38"
125
           transform="translate(108.0449,699.4722)">
126
          <path
127
             inkscape:connector-curvature="0"
128
             d="M 0,0 C 0.73,0 1.337,-0.029 1.822,-0.09 2.306,-0.151 2.73,-0.281 3.096,-0.478 3.463,-0.675 3.811,-0.948 4.144,-1.298 4.478,-1.646 4.855,-2.11 5.28,-2.685 l 16.943,-22.221 c 0.12,-0.215 0.318,-0.319 0.589,-0.319 l 0.412,0 c 0.241,0 0.363,0.15 0.363,0.454 l 0,23.771 c 0,0.666 0.334,1 1.003,1 l 4.778,0 c 0.67,0 1.004,-0.334 1.004,-1 l 0,-26.138 c 0,-1.851 -0.334,-3.106 -1.004,-3.757 -0.666,-0.653 -1.698,-0.979 -3.093,-0.979 l -3.919,0 c -0.697,0 -1.28,0.029 -1.752,0.091 -0.469,0.06 -0.885,0.181 -1.252,0.364 -0.365,0.18 -0.72,0.447 -1.07,0.798 -0.349,0.348 -0.753,0.826 -1.207,1.433 L 0.089,-6.967 c -0.181,0.212 -0.378,0.32 -0.59,0.32 l -0.41,0 c -0.243,0 -0.365,-0.154 -0.365,-0.456 l 0,-23.767 c 0,-0.67 -0.334,-1.004 -1.001,-1.004 l -4.781,0 c -0.698,0 -1.047,0.334 -1.047,1.004 l 0,26.136 c 0,1.851 0.334,3.104 1.001,3.755 C -6.437,-0.327 -5.405,0 -4.007,0 L 0,0 z"
129
             style="fill:#59c134;fill-opacity:1;fill-rule:nonzero;stroke:none"
130
             id="path40" />
131
        </g>
132
        <g
133
           id="g42"
134
           transform="translate(150.3467,699.4722)">
135
          <path
136
             inkscape:connector-curvature="0"
137
             d="m 0,0 c 0.667,0 1.004,-0.334 1.004,-1 l 0,-18.169 c 0,-1.217 0.095,-2.225 0.294,-3.027 0.197,-0.807 0.525,-1.445 0.98,-1.914 0.452,-0.472 1.068,-0.806 1.843,-1.003 0.775,-0.198 1.753,-0.295 2.94,-0.295 l 12.413,0 c 0.668,0 1.004,-0.335 1.004,-1.004 l 0,-4.458 c 0,-0.67 -0.336,-1.004 -1.004,-1.004 l -12.689,0 c -2.308,0 -4.264,0.212 -5.873,0.635 -1.612,0.427 -2.923,1.118 -3.939,2.073 -1.019,0.958 -1.762,2.201 -2.231,3.734 -0.472,1.532 -0.708,3.393 -0.708,5.579 l 0,18.853 c 0,0.666 0.35,1 1.049,1 L 0,0 z"
138
             style="fill:#028cb5;fill-opacity:1;fill-rule:nonzero;stroke:none"
139
             id="path44" />
140
        </g>
141
        <g
142
           id="g46"
143
           transform="translate(180.8867,688.8726)">
144
          <path
145
             inkscape:connector-curvature="0"
146
             d="m 0,0 c 0.667,0 1,-0.335 1,-1.002 l 0,-19.269 c 0,-0.669 -0.333,-1.003 -1,-1.003 l -4.92,0 c -0.698,0 -1.046,0.334 -1.046,1.003 l 0,19.269 C -5.966,-0.335 -5.618,0 -4.92,0 L 0,0 z"
147
             style="fill:#028cb5;fill-opacity:1;fill-rule:nonzero;stroke:none"
148
             id="path48" />
149
        </g>
150
        <g
151
           id="g50"
152
           transform="translate(180.8867,699.4722)">
153
          <path
154
             inkscape:connector-curvature="0"
155
             d="M 0,0 C 0.667,0 1,-0.334 1,-1 L 1,-6.426 C 1,-7.094 0.667,-7.429 0,-7.429 l -4.92,0 c -0.698,0 -1.046,0.335 -1.046,1.003 l 0,5.426 c 0,0.666 0.348,1 1.046,1 L 0,0 z"
156
             style="fill:#028cb5;fill-opacity:1;fill-rule:nonzero;stroke:none"
157
             id="path52" />
158
        </g>
159
        <g
160
           id="g54"
161
           transform="translate(195.4004,680.7705)">
162
          <path
163
             inkscape:connector-curvature="0"
164
             d="m 0,0 0,-5.808 c 0,-0.393 0.195,-0.591 0.593,-0.591 l 16.714,0 c 1.214,0 2.077,0.22 2.594,0.659 0.517,0.44 0.776,1.145 0.776,2.117 l 0,0.753 c 0,0.94 -0.281,1.655 -0.846,2.141 C 19.272,-0.243 18.232,0 16.714,0 L 0,0 z m 0,4.962 16.714,0 c 1.518,0 2.55,0.227 3.097,0.683 0.543,0.457 0.82,1.124 0.82,2.004 l 0,2.037 c 0,0.942 -0.268,1.632 -0.8,2.072 -0.528,0.439 -1.385,0.661 -2.571,0.661 l -16.667,0 C 0.195,12.419 0,12.221 0,11.827 L 0,4.962 z m 18.672,13.74 c 3.125,0 5.35,-0.623 6.671,-1.867 1.321,-1.243 1.98,-3.125 1.98,-5.646 l 0,-2.672 c 0,-2.553 -0.972,-4.481 -2.913,-5.786 2.095,-1.213 3.144,-3.171 3.144,-5.874 l 0,-1.662 c 0,-1.217 -0.14,-2.308 -0.413,-3.279 -0.274,-0.973 -0.721,-1.8 -1.342,-2.48 -0.625,-0.685 -1.452,-1.208 -2.483,-1.574 -1.034,-0.364 -2.308,-0.547 -3.823,-0.547 l -25.093,0 c -0.911,0 -1.372,0.456 -1.372,1.367 l 0,28.653 c 0,0.911 0.461,1.367 1.372,1.367 l 24.272,0 z"
165
             style="fill:#028cb5;fill-opacity:1;fill-rule:nonzero;stroke:none"
166
             id="path56" />
167
        </g>
168
        <g
169
           id="g58"
170
           transform="translate(235.2939,685.6587)">
171
          <path
172
             inkscape:connector-curvature="0"
173
             d="m 0,0 14.507,0 c 1.548,0 2.637,0.334 3.277,1.004 0.635,0.667 0.956,1.194 0.956,2.561 l 0,-0.041 c 0,1.366 -0.321,2.382 -0.956,3.05 -0.64,0.668 -1.729,1.003 -3.277,1.003 l -13.918,0 C 0.195,7.577 0,7.395 0,7.029 L 0,0 z m 15.916,13.813 c 3.489,0 5.993,-0.791 7.515,-2.368 1.517,-1.576 2.274,-3.914 2.274,-7.011 l 0,-1.129 c 0,-2.613 -0.53,-3.7 -1.594,-5.217 -1.062,-1.517 -2.792,-2.489 -5.189,-2.914 l 7.784,-11.608 c 0.153,-0.152 0.2,-0.379 0.141,-0.683 -0.064,-0.302 -0.307,-0.456 -0.73,-0.456 l -5.875,0 c -0.392,0 -0.667,0.046 -0.821,0.137 -0.151,0.093 -0.303,0.243 -0.452,0.457 L 11.773,-5.555 0,-5.555 0,-16.568 c 0,-0.67 -0.338,-1.005 -1.006,-1.005 l -4.918,0 c -0.696,0 -1.046,0.335 -1.046,2.469 l 0,29.019 c 0,-0.558 0.456,-0.102 1.367,-0.102 l 21.519,0 z"
174
             style="fill:#028cb5;fill-opacity:1;fill-rule:nonzero;stroke:none"
175
             id="path60" />
176
        </g>
177
        <g
178
           id="g62"
179
           transform="translate(272.874,680.1206)">
180
          <path
181
             inkscape:connector-curvature="0"
182
             d="m 0,0 c 0,-1.184 0.098,-2.18 0.295,-2.982 0.197,-0.806 0.524,-1.443 0.981,-1.914 0.457,-0.469 1.069,-0.802 1.843,-1.001 0.774,-0.199 1.752,-0.297 2.938,-0.297 l 8.636,0 c 1.182,0 2.163,0.098 2.939,0.297 0.773,0.199 1.388,0.532 1.844,1.001 0.454,0.471 0.779,1.108 0.977,1.914 0.196,0.802 0.294,1.798 0.294,2.982 l 0,6.828 c 0,1.186 -0.098,2.18 -0.294,2.984 -0.198,0.806 -0.523,1.442 -0.977,1.914 -0.456,0.468 -1.071,0.804 -1.844,1.002 -0.776,0.195 -1.757,0.295 -2.939,0.295 l -8.636,0 c -1.186,0 -2.164,-0.1 -2.938,-0.295 C 2.345,12.53 1.733,12.194 1.276,11.726 0.819,11.254 0.492,10.618 0.295,9.812 0.098,9.008 0,8.014 0,6.828 L 0,0 z m 14.969,19.352 c 2.303,0 4.268,-0.222 5.894,-0.66 1.622,-0.44 2.945,-1.137 3.962,-2.096 1.017,-0.955 1.753,-2.192 2.21,-3.71 0.454,-1.519 0.682,-3.37 0.682,-5.555 l 0,-7.832 c 0,-2.186 -0.228,-4.047 -0.682,-5.579 -0.457,-1.533 -1.193,-2.777 -2.21,-3.734 -1.017,-0.956 -2.34,-1.647 -3.962,-2.073 -1.626,-0.423 -3.591,-0.635 -5.894,-0.635 l -9.186,0 c -2.308,0 -4.265,0.212 -5.875,0.635 -1.608,0.426 -2.922,1.117 -3.938,2.073 -1.018,0.957 -1.762,2.201 -2.233,3.734 -0.47,1.532 -0.707,3.393 -0.707,5.579 l 0,7.832 c 0,2.185 0.237,4.036 0.707,5.555 0.471,1.518 1.215,2.755 2.233,3.71 1.016,0.959 2.33,1.656 3.938,2.096 1.61,0.438 3.567,0.66 5.875,0.66 l 9.186,0 z"
183
             style="fill:#028cb5;fill-opacity:1;fill-rule:nonzero;stroke:none"
184
             id="path64" />
185
        </g>
186
        <text
187
           xml:space="preserve"
188
           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.4839735px;line-height:125%;font-family:FontAwesome;-inkscape-font-specification:FontAwesome;letter-spacing:0px;word-spacing:0px;fill:#656769;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
189
           x="83.007271"
190
           y="-667.33594"
191
           id="text3432"
192
           sodipodi:linespacing="125%"
193
           transform="scale(1.0304989,-0.97040376)"><tspan
194
             sodipodi:role="line"
195
             id="tspan3434"
196
             x="83.007271"
197
             y="-667.33594"
198
             style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:14.35496616px;font-family:'Titillium Web';-inkscape-font-specification:'Titillium Web';fill:#656769">Document technologies specialists</tspan></text>
199
      </g>
200
    </g>
201
  </g>
202
</svg>
(-)a/inlibro-plugins/Pando/images/inLibro_fr.svg (-1 / +509 lines)
Line 0 Link Here
0
- 
1
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
<!-- Created with Inkscape (http://www.inkscape.org/) -->
3
4
<svg
5
   xmlns:dc="http://purl.org/dc/elements/1.1/"
6
   xmlns:cc="http://creativecommons.org/ns#"
7
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
   xmlns:svg="http://www.w3.org/2000/svg"
9
   xmlns="http://www.w3.org/2000/svg"
10
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
   width="332.76749"
13
   height="69.510628"
14
   id="svg4252"
15
   version="1.1"
16
   inkscape:version="0.48.4 r9939"
17
   sodipodi:docname="inLibro_fr">
18
  <defs
19
     id="defs4254">
20
    <clipPath
21
       clipPathUnits="userSpaceOnUse"
22
       id="clipPath30">
23
      <path
24
         inkscape:connector-curvature="0"
25
         d="M 0,792 612,792 612,0 0,0 0,792 z"
26
         id="path32" />
27
    </clipPath>
28
  </defs>
29
  <sodipodi:namedview
30
     id="base"
31
     pagecolor="#ffffff"
32
     bordercolor="#666666"
33
     borderopacity="1.0"
34
     inkscape:pageopacity="0.0"
35
     inkscape:pageshadow="2"
36
     inkscape:zoom="1"
37
     inkscape:cx="209.6155"
38
     inkscape:cy="9.3913126"
39
     inkscape:document-units="px"
40
     inkscape:current-layer="layer1"
41
     showgrid="false"
42
     fit-margin-top="1"
43
     fit-margin-right="1"
44
     fit-margin-bottom="1"
45
     fit-margin-left="1"
46
     inkscape:window-width="472"
47
     inkscape:window-height="363"
48
     inkscape:window-x="745"
49
     inkscape:window-y="257"
50
     inkscape:window-maximized="0" />
51
  <metadata
52
     id="metadata4257">
53
    <rdf:RDF>
54
      <cc:Work
55
         rdf:about="">
56
        <dc:format>image/svg+xml</dc:format>
57
        <dc:type
58
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
59
        <dc:title></dc:title>
60
      </cc:Work>
61
    </rdf:RDF>
62
  </metadata>
63
  <g
64
     inkscape:label="Layer 1"
65
     inkscape:groupmode="layer"
66
     id="layer1"
67
     transform="translate(-208.61625,-497.60688)">
68
    <path
69
       inkscape:connector-curvature="0"
70
       d="m 252.76875,520.9465 -43.1525,0 0,-4.17875 43.1525,0 0,4.17875 z"
71
       style="fill:#028cb5;fill-opacity:1;fill-rule:nonzero;stroke:none"
72
       id="path12" />
73
    <path
74
       inkscape:connector-curvature="0"
75
       d="m 252.76875,503.549 -43.1525,0 0,-4.18 43.1525,0 0,4.18 z"
76
       style="fill:#028cb5;fill-opacity:1;fill-rule:nonzero;stroke:none"
77
       id="path14" />
78
    <g
79
       id="g16"
80
       transform="matrix(1.25,0,0,-1.25,252.76875,529.28062)">
81
      <path
82
         inkscape:connector-curvature="0"
83
         d="M 0,0 -34.522,0 -34.521,3.342 0,3.342 0,0 z"
84
         style="fill:#59c134;fill-opacity:1;fill-rule:nonzero;stroke:none"
85
         id="path18" />
86
    </g>
87
    <path
88
       inkscape:connector-curvature="0"
89
       d="m 258.3175,512.199 -43.15125,0 0,-4.17875 43.15125,0 0,4.17875 z"
90
       style="fill:#59c134;fill-opacity:1;fill-rule:nonzero;stroke:none"
91
       id="path20" />
92
    <g
93
       id="g22"
94
       transform="matrix(1.25,0,0,-1.25,252.76875,537.79325)">
95
      <path
96
         inkscape:connector-curvature="0"
97
         d="M 0,0 -34.522,0 -34.521,3.344 0,3.344 0,0 z"
98
         style="fill:#028cb5;fill-opacity:1;fill-rule:nonzero;stroke:none"
99
         id="path24" />
100
    </g>
101
    <g
102
       transform="matrix(1.25,0,0,-1.25,164.645,1373.074)"
103
       id="g26">
104
      <g
105
         id="g28"
106
         clip-path="url(#clipPath30)">
107
        <g
108
           id="g34"
109
           transform="translate(92.8828,699.4722)">
110
          <path
111
             inkscape:connector-curvature="0"
112
             d="m 0,0 c 0.666,0 1,-0.334 1,-1 l 0,-29.87 c 0,-0.67 -0.334,-1.004 -1,-1.004 l -4.92,0 c -0.697,0 -1.046,0.334 -1.046,1.004 l 0,29.87 c 0,0.666 0.349,1 1.046,1 L 0,0 z"
113
             style="fill:#59c134;fill-opacity:1;fill-rule:nonzero;stroke:none"
114
             id="path36" />
115
        </g>
116
        <g
117
           id="g38"
118
           transform="translate(108.0449,699.4722)">
119
          <path
120
             inkscape:connector-curvature="0"
121
             d="M 0,0 C 0.73,0 1.337,-0.029 1.822,-0.09 2.306,-0.151 2.73,-0.281 3.096,-0.478 3.463,-0.675 3.811,-0.948 4.144,-1.298 4.478,-1.646 4.855,-2.11 5.28,-2.685 l 16.943,-22.221 c 0.12,-0.215 0.318,-0.319 0.589,-0.319 l 0.412,0 c 0.241,0 0.363,0.15 0.363,0.454 l 0,23.771 c 0,0.666 0.334,1 1.003,1 l 4.778,0 c 0.67,0 1.004,-0.334 1.004,-1 l 0,-26.138 c 0,-1.851 -0.334,-3.106 -1.004,-3.757 -0.666,-0.653 -1.698,-0.979 -3.093,-0.979 l -3.919,0 c -0.697,0 -1.28,0.029 -1.752,0.091 -0.469,0.06 -0.885,0.181 -1.252,0.364 -0.365,0.18 -0.72,0.447 -1.07,0.798 -0.349,0.348 -0.753,0.826 -1.207,1.433 L 0.089,-6.967 c -0.181,0.212 -0.378,0.32 -0.59,0.32 l -0.41,0 c -0.243,0 -0.365,-0.154 -0.365,-0.456 l 0,-23.767 c 0,-0.67 -0.334,-1.004 -1.001,-1.004 l -4.781,0 c -0.698,0 -1.047,0.334 -1.047,1.004 l 0,26.136 c 0,1.851 0.334,3.104 1.001,3.755 C -6.437,-0.327 -5.405,0 -4.007,0 L 0,0 z"
122
             style="fill:#59c134;fill-opacity:1;fill-rule:nonzero;stroke:none"
123
             id="path40" />
124
        </g>
125
        <g
126
           id="g42"
127
           transform="translate(150.3467,699.4722)">
128
          <path
129
             inkscape:connector-curvature="0"
130
             d="m 0,0 c 0.667,0 1.004,-0.334 1.004,-1 l 0,-18.169 c 0,-1.217 0.095,-2.225 0.294,-3.027 0.197,-0.807 0.525,-1.445 0.98,-1.914 0.452,-0.472 1.068,-0.806 1.843,-1.003 0.775,-0.198 1.753,-0.295 2.94,-0.295 l 12.413,0 c 0.668,0 1.004,-0.335 1.004,-1.004 l 0,-4.458 c 0,-0.67 -0.336,-1.004 -1.004,-1.004 l -12.689,0 c -2.308,0 -4.264,0.212 -5.873,0.635 -1.612,0.427 -2.923,1.118 -3.939,2.073 -1.019,0.958 -1.762,2.201 -2.231,3.734 -0.472,1.532 -0.708,3.393 -0.708,5.579 l 0,18.853 c 0,0.666 0.35,1 1.049,1 L 0,0 z"
131
             style="fill:#028cb5;fill-opacity:1;fill-rule:nonzero;stroke:none"
132
             id="path44" />
133
        </g>
134
        <g
135
           id="g46"
136
           transform="translate(180.8867,688.8726)">
137
          <path
138
             inkscape:connector-curvature="0"
139
             d="m 0,0 c 0.667,0 1,-0.335 1,-1.002 l 0,-19.269 c 0,-0.669 -0.333,-1.003 -1,-1.003 l -4.92,0 c -0.698,0 -1.046,0.334 -1.046,1.003 l 0,19.269 C -5.966,-0.335 -5.618,0 -4.92,0 L 0,0 z"
140
             style="fill:#028cb5;fill-opacity:1;fill-rule:nonzero;stroke:none"
141
             id="path48" />
142
        </g>
143
        <g
144
           id="g50"
145
           transform="translate(180.8867,699.4722)">
146
          <path
147
             inkscape:connector-curvature="0"
148
             d="M 0,0 C 0.667,0 1,-0.334 1,-1 L 1,-6.426 C 1,-7.094 0.667,-7.429 0,-7.429 l -4.92,0 c -0.698,0 -1.046,0.335 -1.046,1.003 l 0,5.426 c 0,0.666 0.348,1 1.046,1 L 0,0 z"
149
             style="fill:#028cb5;fill-opacity:1;fill-rule:nonzero;stroke:none"
150
             id="path52" />
151
        </g>
152
        <g
153
           id="g54"
154
           transform="translate(195.4004,680.7705)">
155
          <path
156
             inkscape:connector-curvature="0"
157
             d="m 0,0 0,-5.808 c 0,-0.393 0.195,-0.591 0.593,-0.591 l 16.714,0 c 1.214,0 2.077,0.22 2.594,0.659 0.517,0.44 0.776,1.145 0.776,2.117 l 0,0.753 c 0,0.94 -0.281,1.655 -0.846,2.141 C 19.272,-0.243 18.232,0 16.714,0 L 0,0 z m 0,4.962 16.714,0 c 1.518,0 2.55,0.227 3.097,0.683 0.543,0.457 0.82,1.124 0.82,2.004 l 0,2.037 c 0,0.942 -0.268,1.632 -0.8,2.072 -0.528,0.439 -1.385,0.661 -2.571,0.661 l -16.667,0 C 0.195,12.419 0,12.221 0,11.827 L 0,4.962 z m 18.672,13.74 c 3.125,0 5.35,-0.623 6.671,-1.867 1.321,-1.243 1.98,-3.125 1.98,-5.646 l 0,-2.672 c 0,-2.553 -0.972,-4.481 -2.913,-5.786 2.095,-1.213 3.144,-3.171 3.144,-5.874 l 0,-1.662 c 0,-1.217 -0.14,-2.308 -0.413,-3.279 -0.274,-0.973 -0.721,-1.8 -1.342,-2.48 -0.625,-0.685 -1.452,-1.208 -2.483,-1.574 -1.034,-0.364 -2.308,-0.547 -3.823,-0.547 l -25.093,0 c -0.911,0 -1.372,0.456 -1.372,1.367 l 0,28.653 c 0,0.911 0.461,1.367 1.372,1.367 l 24.272,0 z"
158
             style="fill:#028cb5;fill-opacity:1;fill-rule:nonzero;stroke:none"
159
             id="path56" />
160
        </g>
161
        <g
162
           id="g58"
163
           transform="translate(235.2939,685.6587)">
164
          <path
165
             inkscape:connector-curvature="0"
166
             d="m 0,0 14.507,0 c 1.548,0 2.637,0.334 3.277,1.004 0.635,0.667 0.956,1.194 0.956,2.561 l 0,-0.041 c 0,1.366 -0.321,2.382 -0.956,3.05 -0.64,0.668 -1.729,1.003 -3.277,1.003 l -13.918,0 C 0.195,7.577 0,7.395 0,7.029 L 0,0 z m 15.916,13.813 c 3.489,0 5.993,-0.791 7.515,-2.368 1.517,-1.576 2.274,-3.914 2.274,-7.011 l 0,-1.129 c 0,-2.613 -0.53,-3.7 -1.594,-5.217 -1.062,-1.517 -2.792,-2.489 -5.189,-2.914 l 7.784,-11.608 c 0.153,-0.152 0.2,-0.379 0.141,-0.683 -0.064,-0.302 -0.307,-0.456 -0.73,-0.456 l -5.875,0 c -0.392,0 -0.667,0.046 -0.821,0.137 -0.151,0.093 -0.303,0.243 -0.452,0.457 L 11.773,-5.555 0,-5.555 0,-16.568 c 0,-0.67 -0.338,-1.005 -1.006,-1.005 l -4.918,0 c -0.696,0 -1.046,0.335 -1.046,2.469 l 0,29.019 c 0,-0.558 0.456,-0.102 1.367,-0.102 l 21.519,0 z"
167
             style="fill:#028cb5;fill-opacity:1;fill-rule:nonzero;stroke:none"
168
             id="path60" />
169
        </g>
170
        <g
171
           id="g62"
172
           transform="translate(272.874,680.1206)">
173
          <path
174
             inkscape:connector-curvature="0"
175
             d="m 0,0 c 0,-1.184 0.098,-2.18 0.295,-2.982 0.197,-0.806 0.524,-1.443 0.981,-1.914 0.457,-0.469 1.069,-0.802 1.843,-1.001 0.774,-0.199 1.752,-0.297 2.938,-0.297 l 8.636,0 c 1.182,0 2.163,0.098 2.939,0.297 0.773,0.199 1.388,0.532 1.844,1.001 0.454,0.471 0.779,1.108 0.977,1.914 0.196,0.802 0.294,1.798 0.294,2.982 l 0,6.828 c 0,1.186 -0.098,2.18 -0.294,2.984 -0.198,0.806 -0.523,1.442 -0.977,1.914 -0.456,0.468 -1.071,0.804 -1.844,1.002 -0.776,0.195 -1.757,0.295 -2.939,0.295 l -8.636,0 c -1.186,0 -2.164,-0.1 -2.938,-0.295 C 2.345,12.53 1.733,12.194 1.276,11.726 0.819,11.254 0.492,10.618 0.295,9.812 0.098,9.008 0,8.014 0,6.828 L 0,0 z m 14.969,19.352 c 2.303,0 4.268,-0.222 5.894,-0.66 1.622,-0.44 2.945,-1.137 3.962,-2.096 1.017,-0.955 1.753,-2.192 2.21,-3.71 0.454,-1.519 0.682,-3.37 0.682,-5.555 l 0,-7.832 c 0,-2.186 -0.228,-4.047 -0.682,-5.579 -0.457,-1.533 -1.193,-2.777 -2.21,-3.734 -1.017,-0.956 -2.34,-1.647 -3.962,-2.073 -1.626,-0.423 -3.591,-0.635 -5.894,-0.635 l -9.186,0 c -2.308,0 -4.265,0.212 -5.875,0.635 -1.608,0.426 -2.922,1.117 -3.938,2.073 -1.018,0.957 -1.762,2.201 -2.233,3.734 -0.47,1.532 -0.707,3.393 -0.707,5.579 l 0,7.832 c 0,2.185 0.237,4.036 0.707,5.555 0.471,1.518 1.215,2.755 2.233,3.71 1.016,0.959 2.33,1.656 3.938,2.096 1.61,0.438 3.567,0.66 5.875,0.66 l 9.186,0 z"
176
             style="fill:#028cb5;fill-opacity:1;fill-rule:nonzero;stroke:none"
177
             id="path64" />
178
        </g>
179
        <g
180
           id="g66"
181
           transform="translate(90.1279,655.0894)">
182
          <path
183
             inkscape:connector-curvature="0"
184
             d="m 0,0 c -0.971,0 -1.456,-0.341 -1.456,-1.02 0,-0.353 0.116,-0.603 0.344,-0.751 0.23,-0.149 0.735,-0.331 1.519,-0.55 0.783,-0.218 1.334,-0.478 1.656,-0.779 0.318,-0.302 0.482,-0.776 0.482,-1.427 0,-0.826 -0.236,-1.441 -0.707,-1.85 -0.468,-0.41 -1.11,-0.614 -1.917,-0.614 -0.65,0 -1.371,0.074 -2.157,0.228 l -0.412,0.08 0.128,1.021 c 1.031,-0.14 1.815,-0.207 2.358,-0.207 0.948,0 1.423,0.42 1.423,1.261 0,0.327 -0.108,0.57 -0.321,0.73 -0.214,0.153 -0.695,0.325 -1.445,0.515 -0.75,0.187 -1.307,0.444 -1.673,0.772 -0.366,0.331 -0.553,0.849 -0.553,1.559 0,0.712 0.234,1.249 0.696,1.611 0.461,0.364 1.102,0.544 1.919,0.544 0.59,0 1.283,-0.069 2.087,-0.206 L 2.372,0.849 2.269,-0.185 C 1.2,-0.062 0.44,0 0,0"
185
             style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none"
186
             id="path68" />
187
        </g>
188
        <g
189
           id="g70"
190
           transform="translate(96.3955,652.9687)">
191
          <path
192
             inkscape:connector-curvature="0"
193
             d="m 0,0 c -0.358,0 -0.718,-0.08 -1.076,-0.24 l -0.174,-0.08 0,-3.381 c 0.308,-0.062 0.645,-0.092 1.013,-0.092 0.516,0 0.875,0.148 1.072,0.445 0.202,0.301 0.301,0.806 0.301,1.525 C 1.136,-0.608 0.758,0 0,0 m -2.497,-7.208 0,8.193 1.238,0 0,-0.355 c 0.526,0.322 1.022,0.482 1.48,0.482 0.754,0 1.308,-0.23 1.659,-0.691 0.351,-0.464 0.527,-1.239 0.527,-2.329 0,-1.089 -0.199,-1.855 -0.603,-2.298 -0.399,-0.445 -1.052,-0.665 -1.963,-0.665 -0.313,0 -0.677,0.035 -1.091,0.103 l 0,-2.44 -1.247,0 z"
194
             style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none"
195
             id="path72" />
196
        </g>
197
        <g
198
           id="g74"
199
           transform="translate(103.4453,651.5259)">
200
          <path
201
             inkscape:connector-curvature="0"
202
             d="M 0,0 C 0,0.563 -0.088,0.959 -0.268,1.186 -0.447,1.41 -0.752,1.524 -1.181,1.524 -1.609,1.524 -1.922,1.405 -2.113,1.168 -2.309,0.93 -2.411,0.541 -2.418,0 L 0,0 z m -2.753,4.114 2.707,1.157 0.392,-1.076 -2.8,-0.896 -0.299,0.815 z m 3.44,-6.385 0.321,0.033 0.024,-0.927 c -0.874,-0.176 -1.642,-0.263 -2.314,-0.263 -0.85,0 -1.46,0.232 -1.829,0.698 -0.37,0.465 -0.558,1.213 -0.558,2.236 0,2.031 0.831,3.049 2.488,3.049 1.606,0 2.41,-0.875 2.41,-2.626 l -0.083,-0.893 -3.552,0 c 0.007,-0.472 0.11,-0.822 0.307,-1.042 0.203,-0.223 0.571,-0.333 1.113,-0.333 0.546,0 1.099,0.021 1.673,0.068"
203
             style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none"
204
             id="path76" />
205
        </g>
206
        <g
207
           id="g78"
208
           transform="translate(108.0205,654.0806)">
209
          <path
210
             inkscape:connector-curvature="0"
211
             d="M 0,0 C 0.401,0 0.881,-0.053 1.433,-0.16 L 1.717,-0.219 1.671,-1.203 c -0.602,0.061 -1.051,0.091 -1.342,0.091 -0.579,0 -0.968,-0.13 -1.17,-0.39 -0.197,-0.258 -0.295,-0.75 -0.295,-1.467 0,-0.717 0.097,-1.214 0.284,-1.49 0.193,-0.274 0.591,-0.414 1.195,-0.414 l 1.341,0.095 0.033,-0.998 c -0.771,-0.137 -1.352,-0.206 -1.74,-0.206 -0.873,0 -1.486,0.233 -1.839,0.702 -0.359,0.473 -0.534,1.242 -0.534,2.311 0,1.07 0.185,1.832 0.56,2.286 C -1.461,-0.229 -0.852,0 0,0"
212
             style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none"
213
             id="path80" />
214
        </g>
215
        <path
216
           inkscape:connector-curvature="0"
217
           d="m 110.94,653.954 1.251,0 0,-5.732 -1.251,0 0,5.732 z m 0,2.294 1.251,0 0,-1.32 -1.251,0 0,1.32 z"
218
           style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none"
219
           id="path82" />
220
        <g
221
           id="g84"
222
           transform="translate(115.376,650.7686)">
223
          <path
224
             inkscape:connector-curvature="0"
225
             d="m 0,0 c -0.526,-0.047 -0.788,-0.333 -0.788,-0.86 0,-0.528 0.231,-0.793 0.696,-0.793 0.384,0 0.79,0.062 1.216,0.187 l 0.206,0.067 0,1.524 L 0,0 z m 2.568,1.421 0,-2.615 c 0.008,-0.167 0.053,-0.292 0.135,-0.372 0.079,-0.078 0.2,-0.13 0.37,-0.154 L 3.04,-2.67 c -0.656,0 -1.169,0.141 -1.524,0.423 -0.611,-0.282 -1.229,-0.423 -1.845,-0.423 -1.139,0 -1.708,0.607 -1.708,1.823 0,0.578 0.151,1 0.463,1.26 0.309,0.257 0.786,0.417 1.428,0.469 l 1.476,0.125 0,0.414 c 0,0.307 -0.067,0.52 -0.2,0.642 C 0.995,2.186 0.8,2.246 0.539,2.246 0.051,2.246 -0.56,2.215 -1.292,2.153 l -0.37,-0.019 -0.045,0.881 c 0.834,0.197 1.6,0.297 2.299,0.297 0.701,0 1.203,-0.15 1.512,-0.452 0.31,-0.303 0.464,-0.783 0.464,-1.439"
226
             style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none"
227
             id="path86" />
228
        </g>
229
        <path
230
           inkscape:connector-curvature="0"
231
           d="m 119.582,656.34 1.25,0 0,-8.119 -1.25,0 0,8.119 z"
232
           style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none"
233
           id="path88" />
234
        <path
235
           inkscape:connector-curvature="0"
236
           d="m 122.415,653.954 1.247,0 0,-5.732 -1.247,0 0,5.732 z m 0,2.294 1.247,0 0,-1.32 -1.247,0 0,1.32 z"
237
           style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none"
238
           id="path90" />
239
        <g
240
           id="g92"
241
           transform="translate(129.1533,652.7715)">
242
          <path
243
             inkscape:connector-curvature="0"
244
             d="m 0,0 c -0.9,0.125 -1.556,0.187 -1.96,0.187 -0.406,0 -0.685,-0.049 -0.843,-0.144 -0.154,-0.098 -0.235,-0.248 -0.235,-0.454 0,-0.205 0.088,-0.351 0.26,-0.435 0.171,-0.082 0.575,-0.18 1.213,-0.293 0.641,-0.109 1.09,-0.282 1.358,-0.521 0.269,-0.238 0.4,-0.656 0.4,-1.26 0,-0.603 -0.191,-1.045 -0.577,-1.33 -0.386,-0.282 -0.95,-0.423 -1.689,-0.423 -0.468,0 -1.054,0.063 -1.769,0.194 l -0.351,0.058 0.046,1.043 c 0.918,-0.123 1.577,-0.185 1.983,-0.185 0.403,0 0.69,0.051 0.865,0.15 0.17,0.101 0.256,0.263 0.256,0.493 0,0.227 -0.082,0.387 -0.246,0.476 -0.164,0.087 -0.557,0.182 -1.182,0.286 -0.621,0.101 -1.079,0.266 -1.371,0.487 -0.285,0.22 -0.434,0.626 -0.434,1.214 0,0.589 0.201,1.027 0.601,1.318 0.404,0.29 0.918,0.437 1.542,0.437 0.488,0 1.09,-0.061 1.801,-0.185 L 0.023,1.045 0,0 z"
245
             style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none"
246
             id="path94" />
247
        </g>
248
        <g
249
           id="g96"
250
           transform="translate(133.6357,652.8892)">
251
          <path
252
             inkscape:connector-curvature="0"
253
             d="m 0,0 -1.582,0 0,-2.522 c 0,-0.466 0.036,-0.776 0.103,-0.927 0.07,-0.154 0.246,-0.232 0.528,-0.232 l 0.937,0.036 0.058,-1 c -0.511,-0.097 -0.901,-0.146 -1.17,-0.146 -0.647,0 -1.092,0.146 -1.334,0.447 -0.24,0.297 -0.359,0.859 -0.359,1.684 l 0,2.66 -0.735,0 0,1.064 0.735,0 0,1.663 1.237,0 0,-1.663 L 0,1.064 0,0 z"
254
             style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none"
255
             id="path98" />
256
        </g>
257
        <g
258
           id="g100"
259
           transform="translate(138.0498,651.5259)">
260
          <path
261
             inkscape:connector-curvature="0"
262
             d="M 0,0 C 0,0.563 -0.091,0.959 -0.27,1.186 -0.452,1.41 -0.755,1.524 -1.182,1.524 -1.609,1.524 -1.919,1.405 -2.114,1.168 -2.311,0.93 -2.409,0.541 -2.42,0 L 0,0 z m 0.687,-2.271 0.32,0.033 0.023,-0.927 c -0.872,-0.176 -1.642,-0.263 -2.317,-0.263 -0.848,0 -1.455,0.232 -1.826,0.698 -0.371,0.465 -0.556,1.213 -0.556,2.236 0,2.031 0.828,3.049 2.487,3.049 1.607,0 2.408,-0.875 2.408,-2.626 l -0.082,-0.893 -3.552,0 c 0.007,-0.472 0.11,-0.822 0.307,-1.042 0.202,-0.223 0.572,-0.333 1.114,-0.333 0.542,0 1.101,0.021 1.674,0.068"
263
             style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none"
264
             id="path102" />
265
        </g>
266
        <g
267
           id="g104"
268
           transform="translate(144.457,652.7715)">
269
          <path
270
             inkscape:connector-curvature="0"
271
             d="m 0,0 c -0.905,0.125 -1.561,0.187 -1.961,0.187 -0.405,0 -0.685,-0.049 -0.843,-0.144 -0.158,-0.098 -0.234,-0.248 -0.234,-0.454 0,-0.205 0.086,-0.351 0.259,-0.435 0.17,-0.082 0.574,-0.18 1.213,-0.293 0.637,-0.109 1.091,-0.282 1.357,-0.521 0.27,-0.238 0.4,-0.656 0.4,-1.26 0,-0.603 -0.191,-1.045 -0.577,-1.33 -0.384,-0.282 -0.95,-0.423 -1.691,-0.423 -0.465,0 -1.055,0.063 -1.766,0.194 l -0.355,0.058 0.048,1.043 c 0.916,-0.123 1.575,-0.185 1.981,-0.185 0.405,0 0.693,0.051 0.868,0.15 0.171,0.101 0.255,0.263 0.255,0.493 0,0.227 -0.083,0.387 -0.245,0.476 -0.167,0.087 -0.559,0.182 -1.182,0.286 -0.621,0.101 -1.078,0.266 -1.37,0.487 -0.289,0.22 -0.433,0.626 -0.433,1.214 0,0.589 0.199,1.027 0.6,1.318 0.401,0.29 0.917,0.437 1.539,0.437 0.491,0 1.091,-0.061 1.803,-0.185 L 0.021,1.045 0,0 z"
272
             style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none"
273
             id="path106" />
274
        </g>
275
        <g
276
           id="g108"
277
           transform="translate(151.7656,651.5259)">
278
          <path
279
             inkscape:connector-curvature="0"
280
             d="M 0,0 C 0,0.563 -0.088,0.959 -0.27,1.186 -0.446,1.41 -0.752,1.524 -1.178,1.524 -1.605,1.524 -1.917,1.405 -2.113,1.168 -2.309,0.93 -2.408,0.541 -2.418,0 L 0,0 z m 0.69,-2.271 0.322,0.033 0.023,-0.927 c -0.873,-0.176 -1.644,-0.263 -2.316,-0.263 -0.851,0 -1.46,0.232 -1.828,0.698 -0.37,0.465 -0.557,1.213 -0.557,2.236 0,2.031 0.827,3.049 2.488,3.049 1.604,0 2.407,-0.875 2.407,-2.626 l -0.081,-0.893 -3.551,0 c 0.005,-0.472 0.11,-0.822 0.307,-1.042 0.199,-0.223 0.571,-0.333 1.11,-0.333 0.546,0 1.102,0.021 1.676,0.068"
281
             style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none"
282
             id="path110" />
283
        </g>
284
        <g
285
           id="g112"
286
           transform="translate(155.4453,648.2212)">
287
          <path
288
             inkscape:connector-curvature="0"
289
             d="m 0,0 -1.248,0 0,5.732 1.236,0 0,-0.354 C 0.55,5.7 1.073,5.859 1.571,5.859 2.334,5.859 2.858,5.643 3.135,5.213 3.415,4.78 3.557,4.069 3.557,3.075 l 0,-3.075 -1.242,0 0,3.038 C 2.315,3.658 2.251,4.1 2.114,4.357 1.983,4.617 1.709,4.748 1.298,4.748 0.908,4.748 0.532,4.669 0.172,4.518 L 0,4.449 0,0 z"
290
             style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none"
291
             id="path114" />
292
        </g>
293
        <g
294
           id="g116"
295
           transform="translate(166.0605,652.8892)">
296
          <path
297
             inkscape:connector-curvature="0"
298
             d="m 0,0 -1.582,0 0,-2.522 c 0,-0.466 0.032,-0.776 0.102,-0.927 0.07,-0.154 0.244,-0.232 0.529,-0.232 l 0.938,0.036 0.058,-1 c -0.511,-0.097 -0.901,-0.146 -1.166,-0.146 -0.652,0 -1.097,0.146 -1.337,0.447 -0.243,0.297 -0.362,0.859 -0.362,1.684 l 0,2.66 -0.732,0 0,1.064 0.732,0 0,1.663 1.238,0 0,-1.663 L 0,1.064 0,0 z"
299
             style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none"
300
             id="path118" />
301
        </g>
302
        <g
303
           id="g120"
304
           transform="translate(170.4727,651.5259)">
305
          <path
306
             inkscape:connector-curvature="0"
307
             d="M 0,0 C 0,0.563 -0.09,0.959 -0.271,1.186 -0.448,1.41 -0.755,1.524 -1.18,1.524 -1.608,1.524 -1.92,1.405 -2.113,1.168 -2.309,0.93 -2.411,0.541 -2.42,0 L 0,0 z m 0.687,-2.271 0.321,0.033 0.023,-0.927 c -0.871,-0.176 -1.642,-0.263 -2.316,-0.263 -0.847,0 -1.457,0.232 -1.827,0.698 -0.371,0.465 -0.556,1.213 -0.556,2.236 0,2.031 0.828,3.049 2.488,3.049 1.606,0 2.407,-0.875 2.407,-2.626 l -0.081,-0.893 -3.553,0 c 0.008,-0.472 0.112,-0.822 0.309,-1.042 0.198,-0.223 0.569,-0.333 1.112,-0.333 0.542,0 1.1,0.021 1.673,0.068"
308
             style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none"
309
             id="path122" />
310
        </g>
311
        <g
312
           id="g124"
313
           transform="translate(175.0459,654.0806)">
314
          <path
315
             inkscape:connector-curvature="0"
316
             d="M 0,0 C 0.405,0 0.884,-0.053 1.432,-0.16 L 1.717,-0.219 1.674,-1.203 c -0.607,0.061 -1.051,0.091 -1.342,0.091 -0.581,0 -0.971,-0.13 -1.167,-0.39 -0.201,-0.258 -0.301,-0.75 -0.301,-1.467 0,-0.717 0.095,-1.214 0.286,-1.49 0.192,-0.274 0.589,-0.414 1.193,-0.414 l 1.344,0.095 0.03,-0.998 c -0.77,-0.137 -1.35,-0.206 -1.738,-0.206 -0.873,0 -1.486,0.233 -1.843,0.702 -0.353,0.473 -0.532,1.242 -0.532,2.311 0,1.07 0.187,1.832 0.564,2.286 C -1.46,-0.229 -0.85,0 0,0"
317
             style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none"
318
             id="path126" />
319
        </g>
320
        <g
321
           id="g128"
322
           transform="translate(179.2178,648.2212)">
323
          <path
324
             inkscape:connector-curvature="0"
325
             d="m 0,0 -1.249,0 0,8.119 1.249,0 0,-2.685 C 0.565,5.716 1.087,5.859 1.57,5.859 2.335,5.859 2.857,5.643 3.135,5.213 3.413,4.78 3.554,4.069 3.554,3.075 l 0,-3.075 -1.249,0 0,3.038 C 2.305,3.658 2.238,4.1 2.108,4.357 1.978,4.617 1.706,4.748 1.282,4.748 0.916,4.748 0.55,4.688 0.185,4.564 L 0,4.496 0,0 z"
326
             style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none"
327
             id="path130" />
328
        </g>
329
        <g
330
           id="g132"
331
           transform="translate(185.4766,648.2212)">
332
          <path
333
             inkscape:connector-curvature="0"
334
             d="m 0,0 -1.249,0 0,5.732 1.236,0 0,-0.354 C 0.545,5.7 1.073,5.859 1.569,5.859 2.334,5.859 2.854,5.643 3.134,5.213 3.413,4.78 3.553,4.069 3.553,3.075 l 0,-3.075 -1.24,0 0,3.038 C 2.313,3.658 2.246,4.1 2.114,4.357 1.98,4.617 1.707,4.748 1.295,4.748 0.904,4.748 0.53,4.669 0.172,4.518 L 0,4.449 0,0 z"
335
             style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none"
336
             id="path134" />
337
        </g>
338
        <g
339
           id="g136"
340
           transform="translate(191.7344,649.6118)">
341
          <path
342
             inkscape:connector-curvature="0"
343
             d="m 0,0 c 0.175,-0.308 0.518,-0.458 1.029,-0.458 0.516,0 0.857,0.15 1.033,0.458 0.175,0.305 0.264,0.804 0.264,1.5 0,0.695 -0.094,1.189 -0.283,1.479 C 1.858,3.27 1.521,3.413 1.029,3.413 0.54,3.413 0.205,3.27 0.016,2.979 -0.171,2.689 -0.266,2.195 -0.266,1.5 -0.266,0.804 -0.176,0.305 0,0 M -0.935,3.723 C -0.54,4.22 0.114,4.469 1.029,4.469 1.946,4.469 2.601,4.22 2.997,3.723 3.391,3.227 3.586,2.482 3.586,1.489 3.586,0.496 3.396,-0.253 3.012,-0.76 2.63,-1.262 1.971,-1.514 1.029,-1.514 c -0.935,0 -1.6,0.252 -1.98,0.754 -0.385,0.507 -0.574,1.256 -0.574,2.249 0,0.993 0.197,1.738 0.59,2.234"
344
             style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none"
345
             id="path138" />
346
        </g>
347
        <path
348
           inkscape:connector-curvature="0"
349
           d="m 196.63,656.34 1.247,0 0,-8.119 -1.247,0 0,8.119 z"
350
           style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none"
351
           id="path140" />
352
        <g
353
           id="g142"
354
           transform="translate(200.708,649.6118)">
355
          <path
356
             inkscape:connector-curvature="0"
357
             d="m 0,0 c 0.178,-0.308 0.52,-0.458 1.033,-0.458 0.513,0 0.854,0.15 1.031,0.458 0.176,0.305 0.263,0.804 0.263,1.5 0,0.695 -0.096,1.189 -0.28,1.479 C 1.858,3.27 1.52,3.413 1.033,3.413 0.544,3.413 0.205,3.27 0.017,2.979 -0.169,2.689 -0.265,2.195 -0.265,1.5 -0.265,0.804 -0.175,0.305 0,0 M -0.934,3.723 C -0.541,4.22 0.114,4.469 1.033,4.469 1.949,4.469 2.604,4.22 2.997,3.723 3.39,3.227 3.587,2.482 3.587,1.489 3.587,0.496 3.396,-0.253 3.014,-0.76 2.633,-1.262 1.972,-1.514 1.033,-1.514 c -0.939,0 -1.602,0.252 -1.985,0.754 -0.385,0.507 -0.574,1.256 -0.574,2.249 0,0.993 0.198,1.738 0.592,2.234"
358
             style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none"
359
             id="path144" />
360
        </g>
361
        <g
362
           id="g146"
363
           transform="translate(206.8281,651.3032)">
364
          <path
365
             inkscape:connector-curvature="0"
366
             d="m 0,0 c 0.168,-0.165 0.44,-0.25 0.815,-0.25 0.373,0 0.642,0.085 0.808,0.25 0.164,0.161 0.244,0.42 0.244,0.771 0,0.352 -0.085,0.61 -0.25,0.773 C 1.449,1.708 1.177,1.792 0.803,1.792 0.099,1.792 -0.25,1.452 -0.25,0.771 -0.25,0.42 -0.167,0.161 0,0 m -0.342,-3.973 c 0,-0.268 0.106,-0.458 0.319,-0.574 0.215,-0.115 0.582,-0.17 1.099,-0.17 0.927,0 1.391,0.263 1.391,0.787 0,0.301 -0.085,0.49 -0.246,0.57 -0.164,0.079 -0.495,0.124 -0.984,0.131 l -1.121,0.067 c -0.167,-0.133 -0.288,-0.262 -0.357,-0.382 -0.069,-0.119 -0.101,-0.26 -0.101,-0.429 m 4.055,0.113 c 0,-1.251 -0.904,-1.878 -2.715,-1.878 -0.872,0 -1.519,0.117 -1.936,0.353 -0.42,0.238 -0.631,0.67 -0.631,1.299 0,0.282 0.069,0.525 0.206,0.726 0.136,0.202 0.357,0.422 0.662,0.659 -0.249,0.167 -0.374,0.447 -0.374,0.838 0,0.151 0.103,0.4 0.307,0.742 l 0.103,0.173 c -0.549,0.328 -0.823,0.903 -0.823,1.719 0,0.688 0.204,1.193 0.617,1.513 0.414,0.321 0.97,0.483 1.674,0.483 0.337,0 0.671,-0.04 0.998,-0.117 L 1.973,2.618 3.75,2.663 3.75,1.655 2.796,1.711 c 0.207,-0.266 0.309,-0.582 0.309,-0.94 0,-0.748 -0.187,-1.267 -0.564,-1.554 -0.38,-0.283 -0.97,-0.428 -1.772,-0.428 -0.2,0 -0.367,0.016 -0.504,0.047 -0.11,-0.261 -0.161,-0.46 -0.161,-0.603 0,-0.142 0.069,-0.239 0.212,-0.292 C 0.456,-2.115 0.8,-2.146 1.343,-2.15 2.252,-2.158 2.875,-2.282 3.209,-2.517 3.546,-2.756 3.713,-3.204 3.713,-3.86"
367
             style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none"
368
             id="path148" />
369
        </g>
370
        <path
371
           inkscape:connector-curvature="0"
372
           d="m 211.553,653.954 1.248,0 0,-5.732 -1.248,0 0,5.732 z m 0,2.294 1.248,0 0,-1.32 -1.248,0 0,1.32 z"
373
           style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none"
374
           id="path150" />
375
        <g
376
           id="g152"
377
           transform="translate(217.7041,651.5259)">
378
          <path
379
             inkscape:connector-curvature="0"
380
             d="M 0,0 C 0,0.563 -0.088,0.959 -0.267,1.186 -0.448,1.41 -0.75,1.524 -1.179,1.524 -1.607,1.524 -1.917,1.405 -2.113,1.168 -2.308,0.93 -2.411,0.541 -2.416,0 L 0,0 z m 0.689,-2.271 0.321,0.033 0.025,-0.927 c -0.874,-0.176 -1.645,-0.263 -2.317,-0.263 -0.848,0 -1.456,0.232 -1.829,0.698 -0.37,0.465 -0.555,1.213 -0.555,2.236 0,2.031 0.83,3.049 2.487,3.049 1.606,0 2.406,-0.875 2.406,-2.626 l -0.08,-0.893 -3.552,0 c 0.009,-0.472 0.111,-0.822 0.309,-1.042 0.201,-0.223 0.571,-0.333 1.112,-0.333 0.544,0 1.1,0.021 1.673,0.068"
381
             style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none"
382
             id="path154" />
383
        </g>
384
        <g
385
           id="g156"
386
           transform="translate(224.1123,652.7715)">
387
          <path
388
             inkscape:connector-curvature="0"
389
             d="m 0,0 c -0.903,0.125 -1.557,0.187 -1.958,0.187 -0.406,0 -0.688,-0.049 -0.844,-0.144 -0.156,-0.098 -0.236,-0.248 -0.236,-0.454 0,-0.205 0.087,-0.351 0.258,-0.435 0.174,-0.082 0.58,-0.18 1.216,-0.293 0.638,-0.109 1.09,-0.282 1.359,-0.521 0.267,-0.238 0.399,-0.656 0.399,-1.26 0,-0.603 -0.189,-1.045 -0.577,-1.33 -0.384,-0.282 -0.948,-0.423 -1.69,-0.423 -0.468,0 -1.055,0.063 -1.768,0.194 l -0.354,0.058 0.047,1.043 c 0.916,-0.123 1.577,-0.185 1.983,-0.185 0.405,0 0.691,0.051 0.864,0.15 0.173,0.101 0.259,0.263 0.259,0.493 0,0.227 -0.083,0.387 -0.247,0.476 -0.164,0.087 -0.557,0.182 -1.183,0.286 -0.621,0.101 -1.076,0.266 -1.369,0.487 -0.289,0.22 -0.433,0.626 -0.433,1.214 0,0.589 0.199,1.027 0.603,1.318 0.4,0.29 0.911,0.437 1.54,0.437 0.487,0 1.089,-0.061 1.801,-0.185 L 0.022,1.045 0,0 z"
390
             style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none"
391
             id="path158" />
392
        </g>
393
        <g
394
           id="g160"
395
           transform="translate(231.2656,649.4165)">
396
          <path
397
             inkscape:connector-curvature="0"
398
             d="m 0,0 0.194,0.079 0,3.394 c -0.458,0.073 -0.882,0.114 -1.272,0.114 -0.773,0 -1.158,-0.643 -1.158,-1.927 0,-0.702 0.09,-1.189 0.273,-1.459 0.177,-0.272 0.459,-0.409 0.851,-0.409 0.388,0 0.759,0.071 1.112,0.208 m 1.443,6.923 0,-8.118 -1.239,0 0,0.3 c -0.557,-0.282 -1.069,-0.423 -1.534,-0.423 -0.748,0 -1.298,0.226 -1.645,0.675 -0.347,0.453 -0.522,1.206 -0.522,2.27 0,1.061 0.194,1.834 0.579,2.314 0.387,0.48 0.988,0.723 1.806,0.723 0.274,0 0.709,-0.051 1.306,-0.148 l 0,2.407 1.249,0 z"
399
             style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none"
400
             id="path162" />
401
        </g>
402
        <g
403
           id="g164"
404
           transform="translate(235.4707,649.6118)">
405
          <path
406
             inkscape:connector-curvature="0"
407
             d="m 0,0 c 0.176,-0.308 0.519,-0.458 1.032,-0.458 0.513,0 0.857,0.15 1.031,0.458 0.179,0.305 0.264,0.804 0.264,1.5 0,0.695 -0.095,1.189 -0.283,1.479 C 1.859,3.27 1.521,3.413 1.032,3.413 0.541,3.413 0.206,3.27 0.019,2.979 -0.17,2.689 -0.265,2.195 -0.265,1.5 -0.265,0.804 -0.176,0.305 0,0 M -0.934,3.723 C -0.541,4.22 0.116,4.469 1.032,4.469 1.95,4.469 2.605,4.22 2.998,3.723 3.391,3.227 3.587,2.482 3.587,1.489 3.587,0.496 3.396,-0.253 3.016,-0.76 2.633,-1.262 1.974,-1.514 1.032,-1.514 c -0.939,0 -1.6,0.252 -1.985,0.754 -0.381,0.507 -0.571,1.256 -0.571,2.249 0,0.993 0.197,1.738 0.59,2.234"
408
             style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none"
409
             id="path166" />
410
        </g>
411
        <g
412
           id="g168"
413
           transform="translate(242.4395,654.0806)">
414
          <path
415
             inkscape:connector-curvature="0"
416
             d="M 0,0 C 0.406,0 0.881,-0.053 1.434,-0.16 L 1.72,-0.219 1.676,-1.203 c -0.607,0.061 -1.053,0.091 -1.343,0.091 -0.583,0 -0.971,-0.13 -1.172,-0.39 -0.197,-0.258 -0.295,-0.75 -0.295,-1.467 0,-0.717 0.095,-1.214 0.286,-1.49 0.192,-0.274 0.589,-0.414 1.192,-0.414 l 1.34,0.095 0.036,-0.998 c -0.77,-0.137 -1.352,-0.206 -1.741,-0.206 -0.872,0 -1.486,0.233 -1.841,0.702 -0.357,0.473 -0.534,1.242 -0.534,2.311 0,1.07 0.189,1.832 0.56,2.286 C -1.459,-0.229 -0.848,0 0,0"
417
             style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none"
418
             id="path170" />
419
        </g>
420
        <g
421
           id="g172"
422
           transform="translate(248.834,653.9536)">
423
          <path
424
             inkscape:connector-curvature="0"
425
             d="m 0,0 1.239,0 0,-5.732 -1.239,0 0,0.356 c -0.556,-0.32 -1.07,-0.479 -1.546,-0.479 -0.785,0 -1.313,0.21 -1.58,0.635 -0.269,0.424 -0.401,1.168 -0.401,2.231 l 0,2.989 1.249,0 0,-3.002 c 0,-0.688 0.054,-1.151 0.171,-1.387 0.117,-0.236 0.384,-0.357 0.804,-0.357 0.41,0 0.789,0.079 1.133,0.233 L 0,-4.445 0,0 z"
426
             style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none"
427
             id="path174" />
428
        </g>
429
        <g
430
           id="g176"
431
           transform="translate(252.8359,648.2212)">
432
          <path
433
             inkscape:connector-curvature="0"
434
             d="m 0,0 -1.25,0 0,5.732 1.237,0 0,-0.354 C 0.53,5.7 1.026,5.859 1.479,5.859 c 0.664,0 1.148,-0.186 1.455,-0.561 0.695,0.375 1.384,0.561 2.075,0.561 0.686,0 1.172,-0.21 1.456,-0.635 C 6.747,4.798 6.887,4.083 6.887,3.075 L 6.887,0 5.65,0 l 0,3.038 C 5.65,3.658 5.589,4.1 5.461,4.357 5.336,4.617 5.073,4.748 4.675,4.748 4.334,4.748 3.961,4.669 3.565,4.518 L 3.369,4.438 C 3.43,4.284 3.462,3.797 3.462,2.971 l 0,-2.971 -1.239,0 0,2.948 C 2.223,3.627 2.162,4.1 2.04,4.357 1.917,4.617 1.651,4.748 1.236,4.748 0.855,4.748 0.502,4.669 0.172,4.518 L 0,4.449 0,0 z"
435
             style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none"
436
             id="path178" />
437
        </g>
438
        <g
439
           id="g180"
440
           transform="translate(264.583,651.5259)">
441
          <path
442
             inkscape:connector-curvature="0"
443
             d="M 0,0 C 0,0.563 -0.088,0.959 -0.269,1.186 -0.447,1.41 -0.751,1.524 -1.18,1.524 -1.61,1.524 -1.917,1.405 -2.114,1.168 -2.31,0.93 -2.41,0.541 -2.416,0 L 0,0 z m 0.687,-2.271 0.321,0.033 0.024,-0.927 c -0.872,-0.176 -1.643,-0.263 -2.315,-0.263 -0.849,0 -1.455,0.232 -1.829,0.698 -0.369,0.465 -0.552,1.213 -0.552,2.236 0,2.031 0.826,3.049 2.484,3.049 1.604,0 2.408,-0.875 2.408,-2.626 l -0.081,-0.893 -3.55,0 c 0.006,-0.472 0.109,-0.822 0.305,-1.042 0.199,-0.223 0.571,-0.333 1.114,-0.333 0.543,0 1.1,0.021 1.671,0.068"
444
             style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none"
445
             id="path182" />
446
        </g>
447
        <g
448
           id="g184"
449
           transform="translate(268.2637,648.2212)">
450
          <path
451
             inkscape:connector-curvature="0"
452
             d="m 0,0 -1.251,0 0,5.732 1.239,0 0,-0.354 C 0.547,5.7 1.073,5.859 1.567,5.859 2.334,5.859 2.856,5.643 3.134,5.213 3.413,4.78 3.552,4.069 3.552,3.075 l 0,-3.075 -1.238,0 0,3.038 C 2.314,3.658 2.248,4.1 2.113,4.357 1.979,4.617 1.706,4.748 1.293,4.748 0.903,4.748 0.53,4.669 0.172,4.518 L 0,4.449 0,0 z"
453
             style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none"
454
             id="path186" />
455
        </g>
456
        <g
457
           id="g188"
458
           transform="translate(276.3555,652.8892)">
459
          <path
460
             inkscape:connector-curvature="0"
461
             d="m 0,0 -1.584,0 0,-2.522 c 0,-0.466 0.037,-0.776 0.105,-0.927 0.068,-0.154 0.245,-0.232 0.527,-0.232 l 0.939,0.036 0.057,-1 c -0.511,-0.097 -0.902,-0.146 -1.169,-0.146 -0.649,0 -1.094,0.146 -1.336,0.447 -0.24,0.297 -0.359,0.859 -0.359,1.684 l 0,2.66 -0.736,0 0,1.064 0.736,0 0,1.663 1.236,0 0,-1.663 L 0,1.064 0,0 z"
462
             style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none"
463
             id="path190" />
464
        </g>
465
        <g
466
           id="g192"
467
           transform="translate(279.0488,650.7686)">
468
          <path
469
             inkscape:connector-curvature="0"
470
             d="m 0,0 c -0.528,-0.047 -0.792,-0.333 -0.792,-0.86 0,-0.528 0.233,-0.793 0.699,-0.793 0.382,0 0.785,0.062 1.215,0.187 l 0.206,0.067 0,1.524 L 0,0 z m 2.567,1.421 0,-2.615 c 0.007,-0.167 0.049,-0.292 0.13,-0.372 0.082,-0.078 0.206,-0.13 0.375,-0.154 L 3.035,-2.67 c -0.656,0 -1.164,0.141 -1.521,0.423 -0.612,-0.282 -1.226,-0.423 -1.848,-0.423 -1.139,0 -1.706,0.607 -1.706,1.823 0,0.578 0.154,1 0.464,1.26 0.31,0.257 0.784,0.417 1.427,0.469 l 1.477,0.125 0,0.414 c 0,0.307 -0.066,0.52 -0.2,0.642 -0.135,0.123 -0.33,0.183 -0.59,0.183 -0.49,0 -1.1,-0.031 -1.835,-0.093 L -1.662,2.134 -1.71,3.015 c 0.833,0.197 1.599,0.297 2.299,0.297 0.699,0 1.204,-0.15 1.515,-0.452 C 2.41,2.557 2.567,2.077 2.567,1.421"
471
             style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none"
472
             id="path194" />
473
        </g>
474
        <path
475
           inkscape:connector-curvature="0"
476
           d="m 283.187,653.954 1.25,0 0,-5.732 -1.25,0 0,5.732 z m 0,2.294 1.25,0 0,-1.32 -1.25,0 0,1.32 z"
477
           style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none"
478
           id="path196" />
479
        <g
480
           id="g198"
481
           transform="translate(285.9482,648.2212)">
482
          <path
483
             inkscape:connector-curvature="0"
484
             d="m 0,0 0,5.732 1.236,0 0,-0.686 c 0.651,0.418 1.3,0.69 1.951,0.813 l 0,-1.249 C 2.528,4.479 1.968,4.312 1.503,4.107 L 1.249,4.004 1.249,0 0,0 z"
485
             style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none"
486
             id="path200" />
487
        </g>
488
        <g
489
           id="g202"
490
           transform="translate(293.4336,651.5259)">
491
          <path
492
             inkscape:connector-curvature="0"
493
             d="M 0,0 C 0,0.563 -0.091,0.959 -0.272,1.186 -0.449,1.41 -0.754,1.524 -1.181,1.524 -1.609,1.524 -1.921,1.405 -2.117,1.168 -2.313,0.93 -2.412,0.541 -2.421,0 L 0,0 z m 0.686,-2.271 0.32,0.033 0.024,-0.927 c -0.872,-0.176 -1.643,-0.263 -2.315,-0.263 -0.849,0 -1.458,0.232 -1.829,0.698 -0.37,0.465 -0.554,1.213 -0.554,2.236 0,2.031 0.827,3.049 2.487,3.049 1.604,0 2.408,-0.875 2.408,-2.626 l -0.082,-0.893 -3.554,0 c 0.006,-0.472 0.11,-0.822 0.31,-1.042 0.2,-0.223 0.571,-0.333 1.11,-0.333 0.543,0 1.101,0.021 1.675,0.068"
494
             style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none"
495
             id="path204" />
496
        </g>
497
        <g
498
           id="g206"
499
           transform="translate(299.8398,652.7715)">
500
          <path
501
             inkscape:connector-curvature="0"
502
             d="m 0,0 c -0.899,0.125 -1.557,0.187 -1.962,0.187 -0.404,0 -0.684,-0.049 -0.844,-0.144 -0.155,-0.098 -0.229,-0.248 -0.229,-0.454 0,-0.205 0.083,-0.351 0.256,-0.435 0.17,-0.082 0.577,-0.18 1.213,-0.293 0.64,-0.109 1.092,-0.282 1.359,-0.521 0.269,-0.238 0.402,-0.656 0.402,-1.26 0,-0.603 -0.194,-1.045 -0.58,-1.33 -0.386,-0.282 -0.95,-0.423 -1.69,-0.423 -0.465,0 -1.054,0.063 -1.764,0.194 l -0.356,0.058 0.047,1.043 c 0.917,-0.123 1.576,-0.185 1.982,-0.185 0.401,0 0.692,0.051 0.864,0.15 0.175,0.101 0.261,0.263 0.261,0.493 0,0.227 -0.086,0.387 -0.249,0.476 -0.164,0.087 -0.56,0.182 -1.182,0.286 -0.623,0.101 -1.076,0.266 -1.367,0.487 -0.294,0.22 -0.434,0.626 -0.434,1.214 0,0.589 0.199,1.027 0.598,1.318 0.404,0.29 0.914,0.437 1.543,0.437 0.489,0 1.091,-0.061 1.798,-0.185 L 0.023,1.045 0,0 z"
503
             style="fill:#656769;fill-opacity:1;fill-rule:nonzero;stroke:none"
504
             id="path208" />
505
        </g>
506
      </g>
507
    </g>
508
  </g>
509
</svg>

Return to bug 26051