first copies from portal

This commit is contained in:
fsociety
2024-09-04 19:37:46 +02:00
parent b38f3f8bed
commit a0ef037b2d
741 changed files with 78623 additions and 387 deletions
@@ -0,0 +1,43 @@
<?php
namespace App\Console\Commands\Einundzwanzig;
use App\Models\EinundzwanzigPleb;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Http;
use swentel\nostr\Key\Key;
class SyncPlebs extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'sync:plebs';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Command description';
/**
* Execute the console command.
*/
public function handle()
{
$response = Http::get('https://portal.einundzwanzig.space/api/nostrplebs');
$plebs = $response->json();
foreach ($plebs as $pleb) {
$npub = str($pleb)->trim();
EinundzwanzigPleb::updateOrCreate(
['npub' => $npub],
['pubkey' => (new Key())->convertToHex($npub)]
);
}
}
}
+114
View File
@@ -0,0 +1,114 @@
<?php
namespace App\Console\Commands\Nostr;
use App\Models\Event;
use App\Traits\NostrEventRendererTrait;
use Illuminate\Console\Command;
use swentel\nostr\Filter\Filter;
use swentel\nostr\Message\RequestMessage;
use swentel\nostr\Relay\Relay;
use swentel\nostr\Relay\RelaySet;
use swentel\nostr\Request\Request;
use swentel\nostr\Subscription\Subscription;
class FetchEvents extends Command
{
use NostrEventRendererTrait;
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'fetch:events';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Command description';
/**
* Execute the console command.
*/
public function handle()
{
$plebs = \App\Models\EinundzwanzigPleb::query()
->get();
$subscription = new Subscription();
$subscriptionId = $subscription->setId();
$filter1 = new Filter();
$filter1->setKinds([1]); // You can add multiple kind numbers
$filter1->setAuthors($plebs->pluck('pubkey')->toArray()); // You can add multiple authors
$filter1->setLimit(25); // Limit to fetch only a maximum of 25 events
$filters = [$filter1]; // You can add multiple filters.
$requestMessage = new RequestMessage($subscriptionId, $filters);
$relays = [
new Relay('wss://nostr.einundzwanzig.space'),
new Relay('wss://nostr.wine'),
new Relay('wss://nos.lol'),
];
$relaySet = new RelaySet();
$relaySet->setRelays($relays);
$request = new Request($relaySet, $requestMessage);
$response = $request->send();
$uniqueEvents = [];
foreach ($response as $relay => $events) {
foreach ($events as $event) {
if (!isset($uniqueEvents[$event->event->id])) {
$uniqueEvents[$event->event->id] = $event;
}
}
}
foreach ($uniqueEvents as $id => $uniqueEvent) {
$type = $this->isReplyOrRoot($uniqueEvent->event);
$parentEventId = $this->getParentEventId($uniqueEvent->event);
$event = Event::query()->updateOrCreate(
['event_id' => $id],
[
'pubkey' => $uniqueEvent->event->pubkey,
'parent_event_id' => $parentEventId,
'json' => json_encode($uniqueEvent->event, JSON_THROW_ON_ERROR),
'type' => $type,
]
);
$this->renderContentToHtml($event);
}
}
private function getParentEventId($event)
{
foreach ($event->tags as $tag) {
if ($tag[0] === 'e') {
if ((isset($tag[2]) && $tag[2] === '') || (isset($tag[3]) && $tag[3] === 'reply')) {
return $tag[1];
}
}
}
return null;
}
private function isReplyOrRoot($event)
{
foreach ($event->tags as $tag) {
if ($tag[0] === 'e') {
if ((isset($tag[3]) && $tag[3] === 'reply') || (!isset($tag[3]) && isset($tag[2]) && $tag[2] === '')) {
return 'reply';
}
}
}
return 'root';
}
}
@@ -0,0 +1,46 @@
<?php
namespace App\Console\Commands\Nostr;
use App\Traits\NostrEventRendererTrait;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Broadcast;
class RenderAllEvents extends Command
{
use NostrEventRendererTrait;
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'render';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Command description';
/**
* Execute the console command.
*/
public function handle()
{
$events = \App\Models\Event::query()
->get();
foreach ($events as $event) {
$this->renderContentToHtml($event);
}
Broadcast::on('events')
->as('newEvents')
->with([
'test' => 'test',
])
->sendNow();
}
}
@@ -0,0 +1,38 @@
<?php
namespace App\Console\Commands\Nostr;
use App\Models\EinundzwanzigPleb;
use App\Traits\NostrFetcherTrait;
use Illuminate\Console\Command;
use swentel\nostr\Subscription\Subscription;
class SyncProfiles extends Command
{
use NostrFetcherTrait;
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'sync:profiles';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Command description';
/**
* Execute the console command.
*/
public function handle()
{
$plebs = EinundzwanzigPleb::query()
->whereDoesntHave('profile')
->get();
$this->fetchProfile($plebs->pluck('npub')->toArray());
}
}
+97
View File
@@ -0,0 +1,97 @@
<?php
namespace App\Livewire;
use App\Models\Meetup;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Carbon;
use PowerComponents\LivewirePowerGrid\Button;
use PowerComponents\LivewirePowerGrid\Column;
use PowerComponents\LivewirePowerGrid\Exportable;
use PowerComponents\LivewirePowerGrid\Facades\Filter;
use PowerComponents\LivewirePowerGrid\Facades\Rule;
use PowerComponents\LivewirePowerGrid\Footer;
use PowerComponents\LivewirePowerGrid\Header;
use PowerComponents\LivewirePowerGrid\Lazy;
use PowerComponents\LivewirePowerGrid\PowerGrid;
use PowerComponents\LivewirePowerGrid\PowerGridFields;
use PowerComponents\LivewirePowerGrid\PowerGridComponent;
final class MeetupTable extends PowerGridComponent
{
public function setUp(): array
{
$this->showCheckBox();
return [
Exportable::make('export')
->striped()
->type(Exportable::TYPE_XLS, Exportable::TYPE_CSV),
Footer::make()
->showPerPage(perPage: 25)
->showRecordCount(),
];
}
public function datasource(): Builder
{
return Meetup::query();
}
public function fields(): PowerGridFields
{
return PowerGrid::fields()
->add('name')
->add('name_lower', fn (Meetup $model) => strtolower(e($model->name)))
->add('created_at')
->add('created_at_formatted', fn (Meetup $model) => Carbon::parse($model->created_at)->format('d/m/Y H:i:s'));
}
public function columns(): array
{
return [
Column::make('Name', 'name')
->searchable()
->sortable(),
Column::action('Action')
];
}
public function filters(): array
{
return [
Filter::inputText('name'),
Filter::datepicker('created_at_formatted', 'created_at'),
];
}
#[\Livewire\Attributes\On('edit')]
public function edit($rowId): void
{
$this->js('alert('.$rowId.')');
}
public function actions(Meetup $row): array
{
return [
Button::add('edit')
->slot('Edit: '.$row->id)
->id()
->class('pg-btn-white dark:ring-pg-primary-600 dark:border-pg-primary-600 dark:hover:bg-pg-primary-700 dark:ring-offset-pg-primary-800 dark:text-pg-primary-300 dark:bg-pg-primary-700')
->dispatch('edit', ['rowId' => $row->id])
];
}
/*
public function actionRules(Meetup $row): array
{
return [
// Hide button edit for ID 1
Rule::button('edit')
->when(fn($row) => $row->id === 1)
->hide(),
];
}
*/
}
+32
View File
@@ -0,0 +1,32 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
class Category extends Model
{
protected $connection = 'einundzwanzig';
/**
* The attributes that aren't mass assignable.
*
* @var array
*/
protected $guarded = [];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'id' => 'integer',
];
public function courses(): BelongsToMany
{
return $this->belongsToMany(Course::class);
}
}
+83
View File
@@ -0,0 +1,83 @@
<?php
namespace App\Models;
use Akuechler\Geoly;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Support\Facades\Cookie;
use Spatie\Sluggable\HasSlug;
use Spatie\Sluggable\SlugOptions;
class City extends Model
{
use HasSlug;
use Geoly;
protected $connection = 'einundzwanzig';
/**
* The attributes that aren't mass assignable.
*
* @var array
*/
protected $guarded = [];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'id' => 'integer',
'country_id' => 'integer',
'osm_relation' => 'json',
'simplified_geojson' => 'json',
];
protected static function booted()
{
static::creating(function ($model) {
if (! $model->created_by) {
$model->created_by = auth()->id();
}
});
}
/**
* Get the options for generating the slug.
*/
public function getSlugOptions(): SlugOptions
{
return SlugOptions::create()
->generateSlugsFrom(['country.code', 'name'])
->saveSlugsTo('slug')
->usingLanguage(Cookie::get('lang', config('app.locale')));
}
public function createdBy(): BelongsTo
{
return $this->belongsTo(User::class, 'created_by');
}
public function country(): BelongsTo
{
return $this->belongsTo(Country::class);
}
public function venues(): HasMany
{
return $this->hasMany(Venue::class);
}
public function courseEvents()
{
return $this->hasManyThrough(CourseEvent::class, Venue::class);
}
public function meetups()
{
return $this->hasMany(Meetup::class);
}
}
+33
View File
@@ -0,0 +1,33 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
class Country extends Model
{
protected $connection = 'einundzwanzig';
/**
* The attributes that aren't mass assignable.
*
* @var array
*/
protected $guarded = [];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'id' => 'integer',
'language_codes' => 'array',
];
public function cities(): HasMany
{
return $this->hasMany(City::class);
}
}
+89
View File
@@ -0,0 +1,89 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Spatie\Image\Enums\Fit;
use Spatie\Image\Manipulations;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;
use Spatie\MediaLibrary\MediaCollections\Models\Media;
use Spatie\Tags\HasTags;
class Course extends Model implements HasMedia
{
use InteractsWithMedia;
use HasTags;
protected $connection = 'einundzwanzig';
/**
* The attributes that aren't mass assignable.
*
* @var array
*/
protected $guarded = [];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'id' => 'integer',
'lecturer_id' => 'integer',
];
protected static function booted()
{
static::creating(function ($model) {
if (! $model->created_by) {
$model->created_by = auth()->id();
}
});
}
public function registerMediaConversions(Media $media = null): void
{
$this
->addMediaConversion('preview')
->fit(Fit::Crop, 300, 300)
->nonQueued();
$this->addMediaConversion('thumb')
->fit(Fit::Crop, 130, 130)
->width(130)
->height(130);
}
public function registerMediaCollections(): void
{
$this->addMediaCollection('logo')
->singleFile()
->useFallbackUrl(asset('img/einundzwanzig.png'));
$this->addMediaCollection('images')
->useFallbackUrl(asset('img/einundzwanzig.png'));
}
public function createdBy(): BelongsTo
{
return $this->belongsTo(User::class, 'created_by');
}
public function categories(): BelongsToMany
{
return $this->belongsToMany(Category::class);
}
public function lecturer(): BelongsTo
{
return $this->belongsTo(Lecturer::class);
}
public function courseEvents(): HasMany
{
return $this->hasMany(CourseEvent::class);
}
}
+56
View File
@@ -0,0 +1,56 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
class CourseEvent extends Model
{
protected $connection = 'einundzwanzig';
/**
* The attributes that aren't mass assignable.
*
* @var array
*/
protected $guarded = [];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'id' => 'integer',
'course_id' => 'integer',
'venue_id' => 'integer',
'from' => 'datetime',
'to' => 'datetime',
];
protected static function booted()
{
static::creating(function ($model) {
if (! $model->created_by) {
$model->created_by = auth()->id();
}
});
}
public function createdBy(): BelongsTo
{
return $this->belongsTo(User::class, 'created_by');
}
public function course(): BelongsTo
{
return $this->belongsTo(Course::class);
}
public function venue(): BelongsTo
{
return $this->belongsTo(Venue::class);
}
}
+17
View File
@@ -0,0 +1,17 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class EinundzwanzigPleb extends Model
{
protected $guarded = [];
public function profile()
{
return $this->hasOne(Profile::class, 'pubkey', 'pubkey');
}
}
+17
View File
@@ -0,0 +1,17 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Event extends Model
{
protected $guarded = [];
public function renderedEvent()
{
return $this->hasOne(RenderedEvent::class, 'event_id', 'event_id');
}
}
+99
View File
@@ -0,0 +1,99 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasManyThrough;
use Illuminate\Support\Facades\Cookie;
use Spatie\Image\Enums\Fit;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;
use Spatie\MediaLibrary\MediaCollections\Models\Media;
use Spatie\Sluggable\HasSlug;
use Spatie\Sluggable\SlugOptions;
class Lecturer extends Model implements HasMedia
{
use HasSlug;
use InteractsWithMedia;
protected $connection = 'einundzwanzig';
/**
* The attributes that aren't mass assignable.
* @var array
*/
protected $guarded = [];
/**
* The attributes that should be cast to native types.
* @var array
*/
protected $casts = [
'id' => 'integer',
'active' => 'boolean',
];
protected static function booted()
{
static::creating(function ($model) {
if (!$model->created_by) {
$model->created_by = auth()->id();
}
});
}
public function registerMediaConversions(Media $media = null): void
{
$this
->addMediaConversion('preview')
->fit(Fit::Crop, 300, 300)
->nonQueued();
$this->addMediaConversion('thumb')
->fit(Fit::Crop, 130, 130)
->width(130)
->height(130);
}
public function registerMediaCollections(): void
{
$this->addMediaCollection('avatar')
->singleFile()
->useFallbackUrl(asset('img/einundzwanzig.png'));
$this->addMediaCollection('images')
->useFallbackUrl(asset('img/einundzwanzig.png'));
}
/**
* Get the options for generating the slug.
*/
public function getSlugOptions(): SlugOptions
{
return SlugOptions::create()
->generateSlugsFrom(['name'])
->saveSlugsTo('slug')
->usingLanguage(Cookie::get('lang', config('app.locale')));
}
public function createdBy(): BelongsTo
{
return $this->belongsTo(User::class, 'created_by');
}
public function courses(): HasMany
{
return $this->hasMany(Course::class);
}
public function coursesEvents(): HasManyThrough
{
return $this->hasManyThrough(CourseEvent::class, Course::class);
}
public function libraryItems(): HasMany
{
return $this->hasMany(LibraryItem::class);
}
}
+136
View File
@@ -0,0 +1,136 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Support\Facades\Cookie;
use Spatie\Image\Enums\Fit;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;
use Spatie\MediaLibrary\MediaCollections\Models\Media;
use Spatie\Sluggable\HasSlug;
use Spatie\Sluggable\SlugOptions;
class Meetup extends Model implements HasMedia
{
use InteractsWithMedia;
use HasSlug;
protected $connection = 'einundzwanzig';
/**
* The attributes that aren't mass assignable.
*
* @var array
*/
protected $guarded = [];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'id' => 'integer',
'city_id' => 'integer',
'github_data' => 'json',
'simplified_geojson' => 'array',
];
protected static function booted()
{
static::creating(function ($model) {
if (!$model->created_by) {
$model->created_by = auth()->id();
}
});
}
public function getSlugOptions(): SlugOptions
{
return SlugOptions::create()
->generateSlugsFrom(['name'])
->saveSlugsTo('slug')
->usingLanguage(Cookie::get('lang', config('app.locale')));
}
public function registerMediaConversions(Media $media = null): void
{
$this
->addMediaConversion('preview')
->fit(Fit::Crop, 300, 300)
->nonQueued();
$this->addMediaConversion('thumb')
->fit(Fit::Crop, 130, 130)
->width(130)
->height(130);
}
public function registerMediaCollections(): void
{
$this->addMediaCollection('logo')
->singleFile()
->useFallbackUrl(asset('img/einundzwanzig.png'));
}
public function createdBy(): BelongsTo
{
return $this->belongsTo(User::class, 'created_by');
}
public function users()
{
return $this->belongsToMany(User::class);
}
public function city(): BelongsTo
{
return $this->belongsTo(City::class);
}
protected function logoSquare(): Attribute
{
$media = $this->getFirstMedia('logo');
if ($media) {
$path = str($media->getPath())->after('storage/app/');
} else {
$path = 'img/einundzwanzig.png';
}
return Attribute::make(
get: fn() => url()->route('img',
[
'path' => $path,
'w' => 900,
'h' => 900,
'fit' => 'crop',
'fm' => 'webp',
]),
);
}
protected function nextEvent(): Attribute
{
$nextEvent = $this->meetupEvents()->where('start', '>=', now())->orderBy('start')->first();
return Attribute::make(
get: fn() => $nextEvent ? [
'start' => $nextEvent->start->toDateTimeString(),
'portalLink' => url()->route('meetup.event.landing', ['country' => $this->city->country, 'meetupEvent' => $nextEvent]),
'location' => $nextEvent->location,
'description' => $nextEvent->description,
'link' => $nextEvent->link,
'attendees' => count($nextEvent->attendees ?? []),
'nostr_note' => str($nextEvent->nostr_status)->after('Sent event ')->before(' to '),
] : null,
);
}
public function meetupEvents(): HasMany
{
return $this->hasMany(MeetupEvent::class);
}
}
+50
View File
@@ -0,0 +1,50 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class MeetupEvent extends Model
{
protected $connection = 'einundzwanzig';
/**
* The attributes that aren't mass assignable.
*
* @var array
*/
protected $guarded = [];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'id' => 'integer',
'meetup_id' => 'integer',
'start' => 'datetime',
'attendees' => 'array',
'might_attendees' => 'array',
];
protected static function booted()
{
static::creating(function ($model) {
if (! $model->created_by) {
$model->created_by = auth()->id();
}
});
}
public function createdBy(): BelongsTo
{
return $this->belongsTo(User::class, 'created_by');
}
public function meetup(): BelongsTo
{
return $this->belongsTo(Meetup::class);
}
}
+12
View File
@@ -0,0 +1,12 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Profile extends Model
{
protected $guarded = [];
}
+15
View File
@@ -0,0 +1,15 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class RenderedEvent extends Model
{
protected $guarded = [];
public function event()
{
return $this->belongsTo(Event::class, 'event_id', 'event_id');
}
}
+104
View File
@@ -0,0 +1,104 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Support\Facades\Cookie;
use Spatie\Image\Enums\Fit;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;
use Spatie\MediaLibrary\MediaCollections\Models\Media;
use Spatie\Sluggable\HasSlug;
use Spatie\Sluggable\SlugOptions;
use Staudenmeir\EloquentHasManyDeep\HasRelationships;
class Venue extends Model implements HasMedia
{
use HasSlug;
use HasRelationships;
use InteractsWithMedia;
protected $connection = 'einundzwanzig';
/**
* The attributes that aren't mass assignable.
*
* @var array
*/
protected $guarded = [];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'id' => 'integer',
'city_id' => 'integer',
];
protected static function booted()
{
static::creating(function ($model) {
if (! $model->created_by) {
$model->created_by = auth()->id();
}
});
}
public function registerMediaConversions(Media $media = null): void
{
$this
->addMediaConversion('preview')
->fit(Fit::Crop, 300, 300)
->nonQueued();
$this->addMediaConversion('thumb')
->fit(Fit::Crop, 130, 130)
->width(130)
->height(130);
}
public function registerMediaCollections(): void
{
$this->addMediaCollection('images')
->useFallbackUrl(asset('img/einundzwanzig.png'));
}
/**
* Get the options for generating the slug.
*/
public function getSlugOptions(): SlugOptions
{
return SlugOptions::create()
->generateSlugsFrom(['city.slug', 'name'])
->saveSlugsTo('slug')
->usingLanguage(Cookie::get('lang', config('app.locale')));
}
public function createdBy(): BelongsTo
{
return $this->belongsTo(User::class, 'created_by');
}
public function city(): BelongsTo
{
return $this->belongsTo(City::class);
}
public function lecturers()
{
return $this->hasManyDeepFromRelations($this->courses(), (new Course())->lecturer());
}
public function courses()
{
return $this->hasManyDeepFromRelations($this->events(), (new CourseEvent())->course());
}
public function courseEvents(): HasMany
{
return $this->hasMany(CourseEvent::class);
}
}
+29
View File
@@ -0,0 +1,29 @@
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Laravel\Folio\Folio;
class FolioServiceProvider extends ServiceProvider
{
/**
* Register services.
*/
public function register(): void
{
//
}
/**
* Bootstrap services.
*/
public function boot(): void
{
Folio::path(resource_path('views/pages'))->middleware([
'*' => [
//
],
]);
}
}
+28
View File
@@ -0,0 +1,28 @@
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Livewire\Volt\Volt;
class VoltServiceProvider extends ServiceProvider
{
/**
* Register services.
*/
public function register(): void
{
//
}
/**
* Bootstrap services.
*/
public function boot(): void
{
Volt::mount([
config('livewire.view_path', resource_path('views/livewire')),
resource_path('views/pages'),
]);
}
}
+95
View File
@@ -0,0 +1,95 @@
<?php
namespace App\Traits;
use App\Models\Event;
use App\Models\Profile;
use App\Models\RenderedEvent;
use swentel\nostr\Key\Key;
trait NostrEventRendererTrait
{
public function renderContentToHtml(Event $event): void
{
$content = json_decode($event->json, true, 512, JSON_THROW_ON_ERROR)['content'];
$profile = Profile::query()->where('pubkey', $event->pubkey)->first();
if ($profile && $profile->name) {
$name = $profile->name;
} elseif ($profile && !empty($profile->display_name)) {
$name = $profile->display_name;
} else {
$name = 'Anonymous';
}
$content = $this->nprofile1($content);
$content = $this->images($content);
$content = $this->youtube($content);
$content = $this->npub1($content);
RenderedEvent::query()->updateOrCreate([
'event_id' => $event->event_id,
], [
'html' => $content,
'profile_image' => $profile && $profile->picture !== '' ? $profile->picture : 'https://robohash.org/' . $profile->pubkey,
'profile_name' => $name,
]);
}
protected function images($content): string
{
// we need to find all image urls by looking for the extension
// and replace them with the img tag
$pattern = '/(https?:\/\/.*\.(?:png|jpg|jpeg|gif|webp))/';
$replacement = '<div class="w-96 group aspect-h-7 aspect-w-10"><img class="pointer-events-none object-cover" src="$1" alt="image" /></div>';
return preg_replace($pattern, $replacement, $content);
}
protected function npub1($content): string
{
// Pattern to match nostr:npub1 elements, optionally followed by a non-alphanumeric character
$pattern = '/(nostr:npub1[a-zA-Z0-9]+)(\W?)/';
// find all matches of the pattern
preg_match_all($pattern, $content, $matches);
// loop through all matches
foreach ($matches[1] as $match) {
$pubkey = (new Key)->convertToHex(str($match)->after('nostr:'));
$profile = Profile::query()->where('pubkey', $pubkey)->first();
if ($profile && $profile->name) {
$name = $profile->name;
} elseif ($profile && !empty($profile->display_name)) {
$name = $profile->display_name;
} else {
$name = 'Anonymous';
}
// replace the match with the profile name
$content = str_replace($match, $name, $content);
}
return $content;
}
protected function nprofile1($content): string
{
// todo: implement this
return $content;
}
protected function youtube($content): string
{
// Pattern to match YouTube short URLs like https://youtu.be/ddvHagjmRJY?feature=shared
$pattern1 = '/https:\/\/youtu.be\/([a-zA-Z0-9-_]+)\??.*/';
$replacement1 = '<iframe width="560" height="315" src="https://www.youtube.com/embed/$1" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>';
// Pattern to match YouTube long URLs like https://www.youtube.com/watch?v=tiNZoDBGhdo
$pattern2 = '/https:\/\/www.youtube.com\/watch\?v=([a-zA-Z0-9-_]+)\??.*/';
$replacement2 = '<iframe width="560" height="315" src="https://www.youtube.com/embed/$1" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>';
// Replace both patterns in the content
$content = preg_replace($pattern1, $replacement1, $content);
$content = preg_replace($pattern2, $replacement2, $content);
return $content;
}
}
+68
View File
@@ -0,0 +1,68 @@
<?php
namespace App\Traits;
use App\Models\Profile;
use swentel\nostr\Filter\Filter;
use swentel\nostr\Key\Key;
use swentel\nostr\Message\RequestMessage;
use swentel\nostr\Relay\Relay;
use swentel\nostr\Request\Request;
use swentel\nostr\Subscription\Subscription;
trait NostrFetcherTrait
{
public function fetchProfile($npubs)
{
$hex = collect([]);
foreach ($npubs as $item) {
$hex->push([
'hex' => (new Key)->convertToHex($item),
'npub' => $item,
]);
}
$subscription = new Subscription();
$subscriptionId = $subscription->setId();
$filter1 = new Filter();
$filter1->setKinds([0]); // You can add multiple kind numbers
$filter1->setAuthors($hex->pluck('hex')->toArray()); // You can add multiple author ids
$filters = [$filter1]; // You can add multiple filters.
$requestMessage = new RequestMessage($subscriptionId, $filters);
$relayUrl = 'wss://relay.nostr.band/';
$relay = new Relay($relayUrl);
$relay->setMessage($requestMessage);
$request = new Request($relay, $requestMessage);
$response = $request->send();
foreach ($response['wss://relay.nostr.band/'] as $item) {
try {
$result = json_decode($item->event->content, true, 512, JSON_THROW_ON_ERROR);
} catch (\JsonException $e) {
throw new \RuntimeException('Error decoding JSON: ' . $e->getMessage());
}
Profile::query()->updateOrCreate(
['pubkey' => $item->event->pubkey],
[
'name' => $result['name'] ?? null,
'display_name' => $result['display_name'] ?? null,
'picture' => $result['picture'] ?? null,
'banner' => $result['banner'] ?? null,
'website' => $result['website'] ?? null,
'about' => $result['about'] ?? null,
'nip05' => $result['nip05'] ?? null,
'lud16' => $result['lud16'] ?? null,
'lud06' => $result['lud06'] ?? null,
'deleted' => $result['deleted'] ?? false,
]
);
}
}
}
+1
View File
@@ -8,6 +8,7 @@ return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__.'/../routes/web.php',
commands: __DIR__.'/../routes/console.php',
channels: __DIR__.'/../routes/channels.php',
health: '/up',
)
->withMiddleware(function (Middleware $middleware) {
+2
View File
@@ -2,4 +2,6 @@
return [
App\Providers\AppServiceProvider::class,
App\Providers\FolioServiceProvider::class,
App\Providers\VoltServiceProvider::class,
];
+18 -2
View File
@@ -6,13 +6,29 @@
"license": "MIT",
"require": {
"php": "^8.2",
"akuechler/laravel-geoly": "^1.0",
"calebporzio/sushi": "^2.5",
"laravel/folio": "^1.1",
"laravel/framework": "^11.9",
"laravel/tinker": "^2.9"
"laravel/pulse": "^1.2",
"laravel/reverb": "^1.0",
"laravel/sail": "^1.31",
"laravel/tinker": "^2.9",
"livewire/livewire": "^3.5",
"livewire/volt": "^1.6",
"openspout/openspout": "^4.24",
"power-components/livewire-powergrid": "^5.10",
"spatie/image": "^3.7",
"spatie/laravel-google-fonts": "^1.4",
"spatie/laravel-medialibrary": "^11.9",
"spatie/laravel-sluggable": "^3.6",
"spatie/laravel-tags": "^4.6",
"staudenmeir/eloquent-has-many-deep": "^1.7",
"swentel/nostr-php": "^1.4"
},
"require-dev": {
"fakerphp/faker": "^1.23",
"laravel/pint": "^1.13",
"laravel/sail": "^1.26",
"mockery/mockery": "^1.6",
"nunomaduro/collision": "^8.0",
"pestphp/pest": "^2.35",
Generated
+3544 -204
View File
File diff suppressed because it is too large Load Diff
+82
View File
@@ -0,0 +1,82 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Broadcaster
|--------------------------------------------------------------------------
|
| This option controls the default broadcaster that will be used by the
| framework when an event needs to be broadcast. You may set this to
| any of the connections defined in the "connections" array below.
|
| Supported: "reverb", "pusher", "ably", "redis", "log", "null"
|
*/
'default' => env('BROADCAST_CONNECTION', 'null'),
/*
|--------------------------------------------------------------------------
| Broadcast Connections
|--------------------------------------------------------------------------
|
| Here you may define all of the broadcast connections that will be used
| to broadcast events to other systems or over WebSockets. Samples of
| each available type of connection are provided inside this array.
|
*/
'connections' => [
'reverb' => [
'driver' => 'reverb',
'key' => env('REVERB_APP_KEY'),
'secret' => env('REVERB_APP_SECRET'),
'app_id' => env('REVERB_APP_ID'),
'options' => [
'host' => env('REVERB_HOST'),
'port' => env('REVERB_PORT', 443),
'scheme' => env('REVERB_SCHEME', 'https'),
'useTLS' => env('REVERB_SCHEME', 'https') === 'https',
],
'client_options' => [
// Guzzle client options: https://docs.guzzlephp.org/en/stable/request-options.html
],
],
'pusher' => [
'driver' => 'pusher',
'key' => env('PUSHER_APP_KEY'),
'secret' => env('PUSHER_APP_SECRET'),
'app_id' => env('PUSHER_APP_ID'),
'options' => [
'cluster' => env('PUSHER_APP_CLUSTER'),
'host' => env('PUSHER_HOST') ?: 'api-'.env('PUSHER_APP_CLUSTER', 'mt1').'.pusher.com',
'port' => env('PUSHER_PORT', 443),
'scheme' => env('PUSHER_SCHEME', 'https'),
'encrypted' => true,
'useTLS' => env('PUSHER_SCHEME', 'https') === 'https',
],
'client_options' => [
// Guzzle client options: https://docs.guzzlephp.org/en/stable/request-options.html
],
],
'ably' => [
'driver' => 'ably',
'key' => env('ABLY_KEY'),
],
'log' => [
'driver' => 'log',
],
'null' => [
'driver' => 'null',
],
],
];
+15
View File
@@ -97,6 +97,21 @@ return [
'sslmode' => 'prefer',
],
'einundzwanzig' => [
'driver' => 'pgsql',
'url' => env('DB_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '5432'),
'database' => 'einundzwanzig',
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', ''),
'charset' => env('DB_CHARSET', 'utf8'),
'prefix' => '',
'prefix_indexes' => true,
'search_path' => 'public',
'sslmode' => 'prefer',
],
'sqlsrv' => [
'driver' => 'sqlsrv',
'url' => env('DB_URL'),
+52
View File
@@ -0,0 +1,52 @@
<?php
return [
/*
* Here you can register fonts to call from the @googlefonts Blade directive.
* The google-fonts:fetch command will prefetch these fonts.
*/
'fonts' => [
'default' => 'https://fonts.googleapis.com/css2?family=Inconsolata:ital,wght@0,400;0,700;1,400;1,700',
'article' => 'https://fonts.googleapis.com/css2?family=Karla:ital,wght@0,400;0,700;1,400;1,700',
],
/*
* This disk will be used to store local Google Fonts. The public disk
* is the default because it can be served over HTTP with storage:link.
*/
'disk' => 'public',
/*
* Prepend all files that are written to the selected disk with this path.
* This allows separating the fonts from other data in the public disk.
*/
'path' => 'fonts',
/*
* By default, CSS will be inlined to reduce the amount of round trips
* browsers need to make in order to load the requested font files.
*/
'inline' => true,
/*
* When preload is set to true, preload meta tags will be generated
* in the HTML output to instruct the browser to start fetching the
* font files as early as possible, even before the CSS is fully parsed.
*/
'preload' => false,
/*
* When something goes wrong fonts are loaded directly from Google.
* With fallback disabled, this package will throw an exception.
*/
'fallback' => ! env('APP_DEBUG'),
/*
* This user agent will be used to request the stylesheet from Google Fonts.
* This is the Safari 14 user agent that only targets modern browsers. If
* you want to target older browsers, use different user agent string.
*/
'user_agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Safari/605.1.15',
];
+156
View File
@@ -0,0 +1,156 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Theme
|--------------------------------------------------------------------------
|
| PowerGrid supports Tailwind and Bootstrap 5 themes.
| Configure here the theme of your choice.
*/
'theme' => \PowerComponents\LivewirePowerGrid\Themes\Tailwind::class,
//'theme' => \PowerComponents\LivewirePowerGrid\Themes\Bootstrap5::class,
/*
|--------------------------------------------------------------------------
| Plugins
|--------------------------------------------------------------------------
|
| Plugins used: flatpickr.js to datepicker.
|
*/
'plugins' => [
/*
* https://flatpickr.js.org
*/
'flatpickr' => [
'locales' => [
'de_DE' => [
'locale' => 'de',
'dateFormat' => 'd.m.Y H:i',
'enableTime' => true,
'time_24hr' => true,
],
],
],
'select' => [
'default' => 'tom',
/*
* TomSelect Options
* https://tom-select.js.org
*/
'tom' => [
'plugins' => [
'clear_button' => [
'title' => 'Remove all selected options',
],
],
],
/*
* Slim Select options
* https://slimselectjs.com/
*/
'slim' => [
'settings' => [
'alwaysOpen' => false,
],
],
],
],
/*
|--------------------------------------------------------------------------
| Filters
|--------------------------------------------------------------------------
|
| PowerGrid supports inline and outside filters.
| 'inline': Filters data inside the table.
| 'outside': Filters data outside the table.
| 'null'
|
*/
'filter' => 'outside',
/*
|--------------------------------------------------------------------------
| Persisting
|--------------------------------------------------------------------------
|
| PowerGrid supports persisting of the filters, columns and sorting.
| 'session': persist in the session.
| 'cache': persist with cache.
| 'cookies': persist with cookies (default).
|
*/
'persist_driver' => 'cookies',
/*
|--------------------------------------------------------------------------
| Cache
|--------------------------------------------------------------------------
|
| Cache is enabled by default to improve search performance when using collections.
| When enabled, data is reloaded whenever the page is refreshed or a field is updated.
|
*/
'cached_data' => true,
/*
|--------------------------------------------------------------------------
| New Release Notification
|--------------------------------------------------------------------------
|
| PowerGrid can verify if a new release is available when you create a new PowerGrid Table.
|
| This feature depends on composer/composer.
| To install, run: `composer require composer/composer --dev`
|
*/
'check_version' => false,
/*
|--------------------------------------------------------------------------
| Exportable class
|--------------------------------------------------------------------------
|
|
*/
'exportable' => [
'default' => 'openspout_v4',
'openspout_v4' => [
'xlsx' => \PowerComponents\LivewirePowerGrid\Components\Exports\OpenSpout\v4\ExportToXLS::class,
'csv' => \PowerComponents\LivewirePowerGrid\Components\Exports\OpenSpout\v4\ExportToCsv::class,
],
'openspout_v3' => [
'xlsx' => \PowerComponents\LivewirePowerGrid\Components\Exports\OpenSpout\v3\ExportToXLS::class,
'csv' => \PowerComponents\LivewirePowerGrid\Components\Exports\OpenSpout\v3\ExportToCsv::class,
],
],
/*
|--------------------------------------------------------------------------
| Auto-Discover Models
|--------------------------------------------------------------------------
|
| PowerGrid will search for Models in the directories listed below.
| These Models be listed as options when you run the
| "artisan powergrid:create" command.
|
*/
'auto_discover_models_paths' => [
app_path('Models'),
],
];
+280
View File
@@ -0,0 +1,280 @@
<?php
return [
/*
* The disk on which to store added files and derived images by default. Choose
* one or more of the disks you've configured in config/filesystems.php.
*/
'disk_name' => env('MEDIA_DISK', 'public'),
/*
* The maximum file size of an item in bytes.
* Adding a larger file will result in an exception.
*/
'max_file_size' => 1024 * 1024 * 10, // 10MB
/*
* This queue connection will be used to generate derived and responsive images.
* Leave empty to use the default queue connection.
*/
'queue_connection_name' => env('QUEUE_CONNECTION', 'sync'),
/*
* This queue will be used to generate derived and responsive images.
* Leave empty to use the default queue.
*/
'queue_name' => env('MEDIA_QUEUE', ''),
/*
* By default all conversions will be performed on a queue.
*/
'queue_conversions_by_default' => env('QUEUE_CONVERSIONS_BY_DEFAULT', true),
/*
* Should database transactions be run after database commits?
*/
'queue_conversions_after_database_commit' => env('QUEUE_CONVERSIONS_AFTER_DB_COMMIT', true),
/*
* The fully qualified class name of the media model.
*/
'media_model' => Spatie\MediaLibrary\MediaCollections\Models\Media::class,
/*
* When enabled, media collections will be serialised using the default
* laravel model serialization behaviour.
*
* Keep this option disabled if using Media Library Pro components (https://medialibrary.pro)
*/
'use_default_collection_serialization' => false,
/*
* The fully qualified class name of the model used for temporary uploads.
*
* This model is only used in Media Library Pro (https://medialibrary.pro)
*/
'temporary_upload_model' => Spatie\MediaLibraryPro\Models\TemporaryUpload::class,
/*
* When enabled, Media Library Pro will only process temporary uploads that were uploaded
* in the same session. You can opt to disable this for stateless usage of
* the pro components.
*/
'enable_temporary_uploads_session_affinity' => true,
/*
* When enabled, Media Library pro will generate thumbnails for uploaded file.
*/
'generate_thumbnails_for_temporary_uploads' => true,
/*
* This is the class that is responsible for naming generated files.
*/
'file_namer' => Spatie\MediaLibrary\Support\FileNamer\DefaultFileNamer::class,
/*
* The class that contains the strategy for determining a media file's path.
*/
'path_generator' => Spatie\MediaLibrary\Support\PathGenerator\DefaultPathGenerator::class,
/*
* The class that contains the strategy for determining how to remove files.
*/
'file_remover_class' => Spatie\MediaLibrary\Support\FileRemover\DefaultFileRemover::class,
/*
* Here you can specify which path generator should be used for the given class.
*/
'custom_path_generators' => [
// Model::class => PathGenerator::class
// or
// 'model_morph_alias' => PathGenerator::class
],
/*
* When urls to files get generated, this class will be called. Use the default
* if your files are stored locally above the site root or on s3.
*/
'url_generator' => Spatie\MediaLibrary\Support\UrlGenerator\DefaultUrlGenerator::class,
/*
* Moves media on updating to keep path consistent. Enable it only with a custom
* PathGenerator that uses, for example, the media UUID.
*/
'moves_media_on_update' => false,
/*
* Whether to activate versioning when urls to files get generated.
* When activated, this attaches a ?v=xx query string to the URL.
*/
'version_urls' => false,
/*
* The media library will try to optimize all converted images by removing
* metadata and applying a little bit of compression. These are
* the optimizers that will be used by default.
*/
'image_optimizers' => [
Spatie\ImageOptimizer\Optimizers\Jpegoptim::class => [
'-m85', // set maximum quality to 85%
'--force', // ensure that progressive generation is always done also if a little bigger
'--strip-all', // this strips out all text information such as comments and EXIF data
'--all-progressive', // this will make sure the resulting image is a progressive one
],
Spatie\ImageOptimizer\Optimizers\Pngquant::class => [
'--force', // required parameter for this package
],
Spatie\ImageOptimizer\Optimizers\Optipng::class => [
'-i0', // this will result in a non-interlaced, progressive scanned image
'-o2', // this set the optimization level to two (multiple IDAT compression trials)
'-quiet', // required parameter for this package
],
Spatie\ImageOptimizer\Optimizers\Svgo::class => [
'--disable=cleanupIDs', // disabling because it is known to cause troubles
],
Spatie\ImageOptimizer\Optimizers\Gifsicle::class => [
'-b', // required parameter for this package
'-O3', // this produces the slowest but best results
],
Spatie\ImageOptimizer\Optimizers\Cwebp::class => [
'-m 6', // for the slowest compression method in order to get the best compression.
'-pass 10', // for maximizing the amount of analysis pass.
'-mt', // multithreading for some speed improvements.
'-q 90', //quality factor that brings the least noticeable changes.
],
Spatie\ImageOptimizer\Optimizers\Avifenc::class => [
'-a cq-level=23', // constant quality level, lower values mean better quality and greater file size (0-63).
'-j all', // number of jobs (worker threads, "all" uses all available cores).
'--min 0', // min quantizer for color (0-63).
'--max 63', // max quantizer for color (0-63).
'--minalpha 0', // min quantizer for alpha (0-63).
'--maxalpha 63', // max quantizer for alpha (0-63).
'-a end-usage=q', // rate control mode set to Constant Quality mode.
'-a tune=ssim', // SSIM as tune the encoder for distortion metric.
],
],
/*
* These generators will be used to create an image of media files.
*/
'image_generators' => [
Spatie\MediaLibrary\Conversions\ImageGenerators\Image::class,
Spatie\MediaLibrary\Conversions\ImageGenerators\Webp::class,
Spatie\MediaLibrary\Conversions\ImageGenerators\Avif::class,
Spatie\MediaLibrary\Conversions\ImageGenerators\Pdf::class,
Spatie\MediaLibrary\Conversions\ImageGenerators\Svg::class,
Spatie\MediaLibrary\Conversions\ImageGenerators\Video::class,
],
/*
* The path where to store temporary files while performing image conversions.
* If set to null, storage_path('media-library/temp') will be used.
*/
'temporary_directory_path' => null,
/*
* The engine that should perform the image conversions.
* Should be either `gd` or `imagick`.
*/
'image_driver' => env('IMAGE_DRIVER', 'gd'),
/*
* FFMPEG & FFProbe binaries paths, only used if you try to generate video
* thumbnails and have installed the php-ffmpeg/php-ffmpeg composer
* dependency.
*/
'ffmpeg_path' => env('FFMPEG_PATH', '/usr/bin/ffmpeg'),
'ffprobe_path' => env('FFPROBE_PATH', '/usr/bin/ffprobe'),
/*
* Here you can override the class names of the jobs used by this package. Make sure
* your custom jobs extend the ones provided by the package.
*/
'jobs' => [
'perform_conversions' => Spatie\MediaLibrary\Conversions\Jobs\PerformConversionsJob::class,
'generate_responsive_images' => Spatie\MediaLibrary\ResponsiveImages\Jobs\GenerateResponsiveImagesJob::class,
],
/*
* When using the addMediaFromUrl method you may want to replace the default downloader.
* This is particularly useful when the url of the image is behind a firewall and
* need to add additional flags, possibly using curl.
*/
'media_downloader' => Spatie\MediaLibrary\Downloaders\DefaultDownloader::class,
/*
* When using the addMediaFromUrl method the SSL is verified by default.
* This is option disables SSL verification when downloading remote media.
* Please note that this is a security risk and should only be false in a local environment.
*/
'media_downloader_ssl' => env('MEDIA_DOWNLOADER_SSL', true),
'remote' => [
/*
* Any extra headers that should be included when uploading media to
* a remote disk. Even though supported headers may vary between
* different drivers, a sensible default has been provided.
*
* Supported by S3: CacheControl, Expires, StorageClass,
* ServerSideEncryption, Metadata, ACL, ContentEncoding
*/
'extra_headers' => [
'CacheControl' => 'max-age=604800',
],
],
'responsive_images' => [
/*
* This class is responsible for calculating the target widths of the responsive
* images. By default we optimize for filesize and create variations that each are 30%
* smaller than the previous one. More info in the documentation.
*
* https://docs.spatie.be/laravel-medialibrary/v9/advanced-usage/generating-responsive-images
*/
'width_calculator' => Spatie\MediaLibrary\ResponsiveImages\WidthCalculator\FileSizeOptimizedWidthCalculator::class,
/*
* By default rendering media to a responsive image will add some javascript and a tiny placeholder.
* This ensures that the browser can already determine the correct layout.
* When disabled, no tiny placeholder is generated.
*/
'use_tiny_placeholders' => true,
/*
* This class will generate the tiny placeholder used for progressive image loading. By default
* the media library will use a tiny blurred jpg image.
*/
'tiny_placeholder_generator' => Spatie\MediaLibrary\ResponsiveImages\TinyPlaceholderGenerator\Blurred::class,
],
/*
* When enabling this option, a route will be registered that will enable
* the Media Library Pro Vue and React components to move uploaded files
* in a S3 bucket to their right place.
*/
'enable_vapor_uploads' => env('ENABLE_MEDIA_LIBRARY_VAPOR_UPLOADS', false),
/*
* When converting Media instances to response the media library will add
* a `loading` attribute to the `img` tag. Here you can set the default
* value of that attribute.
*
* Possible values: 'lazy', 'eager', 'auto' or null if you don't want to set any loading instruction.
*
* More info: https://css-tricks.com/native-lazy-loading/
*/
'default_loading_attribute_value' => null,
/*
* You can specify a prefix for that is used for storing all media.
* If you set this to `/my-subdir`, all your media will be stored in a `/my-subdir` directory.
*/
'prefix' => env('MEDIA_PREFIX', ''),
/*
* When forcing lazy loading, media will be loaded even if you don't eager load media and you have
* disabled lazy loading globally in the service provider.
*/
'force_lazy_loading' => env('FORCE_MEDIA_LIBRARY_LAZY_LOADING', true),
];
+242
View File
@@ -0,0 +1,242 @@
<?php
use Laravel\Pulse\Http\Middleware\Authorize;
use Laravel\Pulse\Pulse;
use Laravel\Pulse\Recorders;
use Laravel\Reverb\Pulse\Recorders\ReverbConnections;
use Laravel\Reverb\Pulse\Recorders\ReverbMessages;
return [
/*
|--------------------------------------------------------------------------
| Pulse Domain
|--------------------------------------------------------------------------
|
| This is the subdomain which the Pulse dashboard will be accessible from.
| When set to null, the dashboard will reside under the same domain as
| the application. Remember to configure your DNS entries correctly.
|
*/
'domain' => env('PULSE_DOMAIN'),
/*
|--------------------------------------------------------------------------
| Pulse Path
|--------------------------------------------------------------------------
|
| This is the path which the Pulse dashboard will be accessible from. Feel
| free to change this path to anything you'd like. Note that this won't
| affect the path of the internal API that is never exposed to users.
|
*/
'path' => env('PULSE_PATH', 'pulse'),
/*
|--------------------------------------------------------------------------
| Pulse Master Switch
|--------------------------------------------------------------------------
|
| This configuration option may be used to completely disable all Pulse
| data recorders regardless of their individual configurations. This
| provides a single option to quickly disable all Pulse recording.
|
*/
'enabled' => env('PULSE_ENABLED', true),
/*
|--------------------------------------------------------------------------
| Pulse Storage Driver
|--------------------------------------------------------------------------
|
| This configuration option determines which storage driver will be used
| while storing entries from Pulse's recorders. In addition, you also
| may provide any options to configure the selected storage driver.
|
*/
'storage' => [
'driver' => env('PULSE_STORAGE_DRIVER', 'database'),
'database' => [
'connection' => env('PULSE_DB_CONNECTION', null),
'chunk' => 1000,
],
],
/*
|--------------------------------------------------------------------------
| Pulse Ingest Driver
|--------------------------------------------------------------------------
|
| This configuration options determines the ingest driver that will be used
| to capture entries from Pulse's recorders. Ingest drivers are great to
| free up your request workers quickly by offloading the data storage.
|
*/
'ingest' => [
'driver' => env('PULSE_INGEST_DRIVER', 'storage'),
'buffer' => env('PULSE_INGEST_BUFFER', 5_000),
'trim' => [
'lottery' => [1, 1_000],
'keep' => '7 days',
],
'redis' => [
'connection' => env('PULSE_REDIS_CONNECTION'),
'chunk' => 1000,
],
],
/*
|--------------------------------------------------------------------------
| Pulse Cache Driver
|--------------------------------------------------------------------------
|
| This configuration option determines the cache driver that will be used
| for various tasks, including caching dashboard results, establishing
| locks for events that should only occur on one server and signals.
|
*/
'cache' => env('PULSE_CACHE_DRIVER'),
/*
|--------------------------------------------------------------------------
| Pulse Route Middleware
|--------------------------------------------------------------------------
|
| These middleware will be assigned to every Pulse route, giving you the
| chance to add your own middleware to this list or change any of the
| existing middleware. Of course, reasonable defaults are provided.
|
*/
'middleware' => [
'web',
Authorize::class,
],
/*
|--------------------------------------------------------------------------
| Pulse Recorders
|--------------------------------------------------------------------------
|
| The following array lists the "recorders" that will be registered with
| Pulse, along with their configuration. Recorders gather application
| event data from requests and tasks to pass to your ingest driver.
|
*/
'recorders' => [
ReverbConnections::class => [
'sample_rate' => 1,
],
ReverbMessages::class => [
'sample_rate' => 1,
],
Recorders\CacheInteractions::class => [
'enabled' => env('PULSE_CACHE_INTERACTIONS_ENABLED', true),
'sample_rate' => env('PULSE_CACHE_INTERACTIONS_SAMPLE_RATE', 1),
'ignore' => [
...Pulse::defaultVendorCacheKeys(),
],
'groups' => [
'/^job-exceptions:.*/' => 'job-exceptions:*',
// '/:\d+/' => ':*',
],
],
Recorders\Exceptions::class => [
'enabled' => env('PULSE_EXCEPTIONS_ENABLED', true),
'sample_rate' => env('PULSE_EXCEPTIONS_SAMPLE_RATE', 1),
'location' => env('PULSE_EXCEPTIONS_LOCATION', true),
'ignore' => [
// '/^Package\\\\Exceptions\\\\/',
],
],
Recorders\Queues::class => [
'enabled' => env('PULSE_QUEUES_ENABLED', true),
'sample_rate' => env('PULSE_QUEUES_SAMPLE_RATE', 1),
'ignore' => [
// '/^Package\\\\Jobs\\\\/',
],
],
Recorders\Servers::class => [
'server_name' => env('PULSE_SERVER_NAME', gethostname()),
'directories' => explode(':', env('PULSE_SERVER_DIRECTORIES', '/')),
],
Recorders\SlowJobs::class => [
'enabled' => env('PULSE_SLOW_JOBS_ENABLED', true),
'sample_rate' => env('PULSE_SLOW_JOBS_SAMPLE_RATE', 1),
'threshold' => env('PULSE_SLOW_JOBS_THRESHOLD', 1000),
'ignore' => [
// '/^Package\\\\Jobs\\\\/',
],
],
Recorders\SlowOutgoingRequests::class => [
'enabled' => env('PULSE_SLOW_OUTGOING_REQUESTS_ENABLED', true),
'sample_rate' => env('PULSE_SLOW_OUTGOING_REQUESTS_SAMPLE_RATE', 1),
'threshold' => env('PULSE_SLOW_OUTGOING_REQUESTS_THRESHOLD', 1000),
'ignore' => [
// '#^http://127\.0\.0\.1:13714#', // Inertia SSR...
],
'groups' => [
// '#^https://api\.github\.com/repos/.*$#' => 'api.github.com/repos/*',
// '#^https?://([^/]*).*$#' => '\1',
// '#/\d+#' => '/*',
],
],
Recorders\SlowQueries::class => [
'enabled' => env('PULSE_SLOW_QUERIES_ENABLED', true),
'sample_rate' => env('PULSE_SLOW_QUERIES_SAMPLE_RATE', 1),
'threshold' => env('PULSE_SLOW_QUERIES_THRESHOLD', 1000),
'location' => env('PULSE_SLOW_QUERIES_LOCATION', true),
'max_query_length' => env('PULSE_SLOW_QUERIES_MAX_QUERY_LENGTH', null),
'ignore' => [
'/(["`])pulse_[\w]+?\1/', // Pulse tables...
'/(["`])telescope_[\w]+?\1/', // Telescope tables...
],
],
Recorders\SlowRequests::class => [
'enabled' => env('PULSE_SLOW_REQUESTS_ENABLED', true),
'sample_rate' => env('PULSE_SLOW_REQUESTS_SAMPLE_RATE', 1),
'threshold' => env('PULSE_SLOW_REQUESTS_THRESHOLD', 1000),
'ignore' => [
'#^/'.env('PULSE_PATH', 'pulse').'$#', // Pulse dashboard...
'#^/telescope#', // Telescope dashboard...
],
],
Recorders\UserJobs::class => [
'enabled' => env('PULSE_USER_JOBS_ENABLED', true),
'sample_rate' => env('PULSE_USER_JOBS_SAMPLE_RATE', 1),
'ignore' => [
// '/^Package\\\\Jobs\\\\/',
],
],
Recorders\UserRequests::class => [
'enabled' => env('PULSE_USER_REQUESTS_ENABLED', true),
'sample_rate' => env('PULSE_USER_REQUESTS_SAMPLE_RATE', 1),
'ignore' => [
'#^/'.env('PULSE_PATH', 'pulse').'$#', // Pulse dashboard...
'#^/telescope#', // Telescope dashboard...
],
],
],
];
+91
View File
@@ -0,0 +1,91 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Reverb Server
|--------------------------------------------------------------------------
|
| This option controls the default server used by Reverb to handle
| incoming messages as well as broadcasting message to all your
| connected clients. At this time only "reverb" is supported.
|
*/
'default' => env('REVERB_SERVER', 'reverb'),
/*
|--------------------------------------------------------------------------
| Reverb Servers
|--------------------------------------------------------------------------
|
| Here you may define details for each of the supported Reverb servers.
| Each server has its own configuration options that are defined in
| the array below. You should ensure all the options are present.
|
*/
'servers' => [
'reverb' => [
'host' => env('REVERB_SERVER_HOST', '0.0.0.0'),
'port' => env('REVERB_SERVER_PORT', 8080),
'hostname' => env('REVERB_HOST'),
'options' => [
'tls' => [],
],
'max_request_size' => env('REVERB_MAX_REQUEST_SIZE', 10_000),
'scaling' => [
'enabled' => env('REVERB_SCALING_ENABLED', false),
'channel' => env('REVERB_SCALING_CHANNEL', 'reverb'),
'server' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'port' => env('REDIS_PORT', '6379'),
'username' => env('REDIS_USERNAME'),
'password' => env('REDIS_PASSWORD'),
'database' => env('REDIS_DB', '0'),
],
],
'pulse_ingest_interval' => env('REVERB_PULSE_INGEST_INTERVAL', 15),
'telescope_ingest_interval' => env('REVERB_TELESCOPE_INGEST_INTERVAL', 15),
],
],
/*
|--------------------------------------------------------------------------
| Reverb Applications
|--------------------------------------------------------------------------
|
| Here you may define how Reverb applications are managed. If you choose
| to use the "config" provider, you may define an array of apps which
| your server will support, including their connection credentials.
|
*/
'apps' => [
'provider' => 'config',
'apps' => [
[
'key' => env('REVERB_APP_KEY'),
'secret' => env('REVERB_APP_SECRET'),
'app_id' => env('REVERB_APP_ID'),
'options' => [
'host' => env('REVERB_HOST'),
'port' => env('REVERB_PORT', 443),
'scheme' => env('REVERB_SCHEME', 'https'),
'useTLS' => env('REVERB_SCHEME', 'https') === 'https',
],
'allowed_origins' => ['*'],
'ping_interval' => env('REVERB_APP_PING_INTERVAL', 60),
'max_message_size' => env('REVERB_APP_MAX_MESSAGE_SIZE', 10_000),
],
],
],
];
@@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('einundzwanzig_plebs', function (Blueprint $table) {
$table->id();
$table->string('npub', 63);
$table->string('pubkey', 64)->unique()->index();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('einundzwanzig_plebs');
}
};
@@ -0,0 +1,37 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('profiles', function (Blueprint $table) {
$table->id();
$table->string('pubkey', 64)->unique()->index();
$table->string('name', 255 * 2)->nullable();
$table->string('display_name', 255 * 2)->nullable();
$table->text('picture')->nullable();
$table->text('banner')->nullable();
$table->string('website', 255 * 2)->nullable();
$table->text('about')->nullable();
$table->string('nip05', 255 * 2)->nullable();
$table->string('lud16', 255 * 2)->nullable();
$table->string('lud06', 255 * 2)->nullable();
$table->boolean('deleted')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('profiles');
}
};
@@ -0,0 +1,31 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('events', function (Blueprint $table) {
$table->id();
$table->string('event_id', 64)->unique()->index();
$table->string('parent_event_id', 64)->index()->nullable();
$table->string('pubkey', 64)->index();
$table->json('json');
$table->string('type');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('events');
}
};
@@ -0,0 +1,31 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('rendered_events', function (Blueprint $table) {
$table->id();
$table->string('event_id', 64)->unique()->index();
$table->foreign('event_id')->references('event_id')->on('events')->cascadeOnDelete();
$table->text('html');
$table->string('profile_image');
$table->string('profile_name');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('rendered_events');
}
};
@@ -0,0 +1,84 @@
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Laravel\Pulse\Support\PulseMigration;
return new class extends PulseMigration
{
/**
* Run the migrations.
*/
public function up(): void
{
if (! $this->shouldRun()) {
return;
}
Schema::create('pulse_values', function (Blueprint $table) {
$table->id();
$table->unsignedInteger('timestamp');
$table->string('type');
$table->mediumText('key');
match ($this->driver()) {
'mariadb', 'mysql' => $table->char('key_hash', 16)->charset('binary')->virtualAs('unhex(md5(`key`))'),
'pgsql' => $table->uuid('key_hash')->storedAs('md5("key")::uuid'),
'sqlite' => $table->string('key_hash'),
};
$table->mediumText('value');
$table->index('timestamp'); // For trimming...
$table->index('type'); // For fast lookups and purging...
$table->unique(['type', 'key_hash']); // For data integrity and upserts...
});
Schema::create('pulse_entries', function (Blueprint $table) {
$table->id();
$table->unsignedInteger('timestamp');
$table->string('type');
$table->mediumText('key');
match ($this->driver()) {
'mariadb', 'mysql' => $table->char('key_hash', 16)->charset('binary')->virtualAs('unhex(md5(`key`))'),
'pgsql' => $table->uuid('key_hash')->storedAs('md5("key")::uuid'),
'sqlite' => $table->string('key_hash'),
};
$table->bigInteger('value')->nullable();
$table->index('timestamp'); // For trimming...
$table->index('type'); // For purging...
$table->index('key_hash'); // For mapping...
$table->index(['timestamp', 'type', 'key_hash', 'value']); // For aggregate queries...
});
Schema::create('pulse_aggregates', function (Blueprint $table) {
$table->id();
$table->unsignedInteger('bucket');
$table->unsignedMediumInteger('period');
$table->string('type');
$table->mediumText('key');
match ($this->driver()) {
'mariadb', 'mysql' => $table->char('key_hash', 16)->charset('binary')->virtualAs('unhex(md5(`key`))'),
'pgsql' => $table->uuid('key_hash')->storedAs('md5("key")::uuid'),
'sqlite' => $table->string('key_hash'),
};
$table->string('aggregate');
$table->decimal('value', 20, 2);
$table->unsignedInteger('count')->nullable();
$table->unique(['bucket', 'period', 'type', 'aggregate', 'key_hash']); // Force "on duplicate update"...
$table->index(['period', 'bucket']); // For trimming...
$table->index('type'); // For purging...
$table->index(['period', 'type', 'aggregate', 'bucket']); // For aggregate queries...
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('pulse_values');
Schema::dropIfExists('pulse_entries');
Schema::dropIfExists('pulse_aggregates');
}
};
+75
View File
@@ -0,0 +1,75 @@
services:
laravel.test:
build:
context: ./docker/8.3
dockerfile: Dockerfile
args:
WWWGROUP: '${WWWGROUP}'
image: sail-8.3/app
extra_hosts:
- 'host.docker.internal:host-gateway'
ports:
- '${APP_PORT:-80}:80'
- '${VITE_PORT:-5173}:${VITE_PORT:-5173}'
- '${REVERB_SERVER_PORT:-8080}:8080'
environment:
WWWUSER: '${WWWUSER}'
LARAVEL_SAIL: 1
XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'
XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'
IGNITION_LOCAL_SITES_PATH: '${PWD}'
volumes:
- '.:/var/www/html'
networks:
- sail
depends_on:
- pgsql
- redis
pgsql:
image: 'postgres:15'
ports:
- '${FORWARD_DB_PORT:-5432}:5432'
environment:
PGPASSWORD: '${DB_PASSWORD:-secret}'
POSTGRES_DB: '${DB_DATABASE}'
POSTGRES_USER: '${DB_USERNAME}'
POSTGRES_PASSWORD: '${DB_PASSWORD:-secret}'
volumes:
- 'sail-pgsql:/var/lib/postgresql/data'
- './docker/pgsql/create-testing-database.sql:/docker-entrypoint-initdb.d/10-create-testing-database.sql'
networks:
- sail
healthcheck:
test:
- CMD
- pg_isready
- '-q'
- '-d'
- '${DB_DATABASE}'
- '-U'
- '${DB_USERNAME}'
retries: 3
timeout: 5s
redis:
image: 'redis:alpine'
ports:
- '${FORWARD_REDIS_PORT:-6379}:6379'
volumes:
- 'sail-redis:/data'
networks:
- sail
healthcheck:
test:
- CMD
- redis-cli
- ping
retries: 3
timeout: 5s
networks:
sail:
driver: bridge
volumes:
sail-pgsql:
driver: local
sail-redis:
driver: local
+67
View File
@@ -0,0 +1,67 @@
FROM ubuntu:22.04
LABEL maintainer="Taylor Otwell"
ARG WWWGROUP
ARG NODE_VERSION=20
ARG MYSQL_CLIENT="mysql-client"
ARG POSTGRES_VERSION=15
WORKDIR /var/www/html
ENV DEBIAN_FRONTEND noninteractive
ENV TZ=UTC
ENV SUPERVISOR_PHP_COMMAND="/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80"
ENV SUPERVISOR_PHP_USER="sail"
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt-get update \
&& mkdir -p /etc/apt/keyrings \
&& apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python2 dnsutils librsvg2-bin fswatch ffmpeg nano \
&& curl -sS 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x14aa40ec0831756756d7f66c4f4ea0aae5267a6c' | gpg --dearmor | tee /etc/apt/keyrings/ppa_ondrej_php.gpg > /dev/null \
&& echo "deb [signed-by=/etc/apt/keyrings/ppa_ondrej_php.gpg] https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \
&& apt-get update \
&& apt-get install -y php8.3-cli php8.3-dev \
php8.3-pgsql php8.3-sqlite3 php8.3-gd \
php8.3-curl \
php8.3-imap php8.3-mysql php8.3-mbstring \
php8.3-xml php8.3-zip php8.3-bcmath php8.3-soap \
php8.3-intl php8.3-readline \
php8.3-ldap \
php8.3-gmp \
php8.3-msgpack php8.3-igbinary php8.3-redis php8.3-swoole \
php8.3-memcached php8.3-pcov php8.3-imagick php8.3-xdebug \
&& curl -sLS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer \
&& curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \
&& echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_VERSION.x nodistro main" > /etc/apt/sources.list.d/nodesource.list \
&& apt-get update \
&& apt-get install -y nodejs \
&& npm install -g npm \
&& npm install -g pnpm \
&& npm install -g bun \
&& curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /etc/apt/keyrings/yarn.gpg >/dev/null \
&& echo "deb [signed-by=/etc/apt/keyrings/yarn.gpg] https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \
&& curl -sS https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | tee /etc/apt/keyrings/pgdg.gpg >/dev/null \
&& echo "deb [signed-by=/etc/apt/keyrings/pgdg.gpg] http://apt.postgresql.org/pub/repos/apt jammy-pgdg main" > /etc/apt/sources.list.d/pgdg.list \
&& apt-get update \
&& apt-get install -y yarn \
&& apt-get install -y $MYSQL_CLIENT \
&& apt-get install -y postgresql-client-$POSTGRES_VERSION \
&& apt-get -y autoremove \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.3
RUN groupadd --force -g $WWWGROUP sail
RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail
COPY start-container /usr/local/bin/start-container
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY php.ini /etc/php/8.3/cli/conf.d/99-sail.ini
RUN chmod +x /usr/local/bin/start-container
EXPOSE 80/tcp
ENTRYPOINT ["start-container"]
+5
View File
@@ -0,0 +1,5 @@
[PHP]
post_max_size = 100M
upload_max_filesize = 100M
variables_order = EGPCS
pcov.directory = .
+26
View File
@@ -0,0 +1,26 @@
#!/usr/bin/env bash
if [ "$SUPERVISOR_PHP_USER" != "root" ] && [ "$SUPERVISOR_PHP_USER" != "sail" ]; then
echo "You should set SUPERVISOR_PHP_USER to either 'sail' or 'root'."
exit 1
fi
if [ ! -z "$WWWUSER" ]; then
usermod -u $WWWUSER sail
fi
if [ ! -d /.composer ]; then
mkdir /.composer
fi
chmod -R ugo+rw /.composer
if [ $# -gt 0 ]; then
if [ "$SUPERVISOR_PHP_USER" = "root" ]; then
exec "$@"
else
exec gosu $WWWUSER "$@"
fi
else
exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf
fi
+22
View File
@@ -0,0 +1,22 @@
[supervisord]
nodaemon=true
user=root
logfile=/var/log/supervisor/supervisord.log
pidfile=/var/run/supervisord.pid
[program:php]
command=%(ENV_SUPERVISOR_PHP_COMMAND)s
user=%(ENV_SUPERVISOR_PHP_USER)s
environment=LARAVEL_SAIL="1"
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
[program:reverb]
command=php /var/www/html/artisan reverb:start --host="0.0.0.0" --port=8080
autostart=true
autorestart=true
user=%(ENV_SUPERVISOR_PHP_USER)s
redirect_stderr=true
stdout_logfile=/var/www/html/storage/logs/reverb.log
+2
View File
@@ -0,0 +1,2 @@
SELECT 'CREATE DATABASE testing'
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'testing')\gexec
+2601
View File
File diff suppressed because it is too large Load Diff
+6
View File
@@ -6,8 +6,14 @@
"build": "vite build"
},
"devDependencies": {
"autoprefixer": "^10.4.20",
"axios": "^1.6.4",
"flatpickr": "^4.6.13",
"laravel-echo": "^1.16.1",
"laravel-vite-plugin": "^1.0",
"postcss": "^8.4.41",
"pusher-js": "^8.4.0-rc2",
"tailwindcss": "^3.4.10",
"vite": "^5.0"
}
}
+1 -2
View File
@@ -22,8 +22,7 @@
<env name="APP_MAINTENANCE_DRIVER" value="file"/>
<env name="BCRYPT_ROUNDS" value="4"/>
<env name="CACHE_STORE" value="array"/>
<!-- <env name="DB_CONNECTION" value="sqlite"/> -->
<!-- <env name="DB_DATABASE" value=":memory:"/> -->
<env name="DB_DATABASE" value="testing"/>
<env name="MAIL_MAILER" value="array"/>
<env name="PULSE_ENABLED" value="false"/>
<env name="QUEUE_CONNECTION" value="sync"/>
+6
View File
@@ -0,0 +1,6 @@
export default {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
}
+1568
View File
File diff suppressed because it is too large Load Diff
+14879
View File
File diff suppressed because it is too large Load Diff
+47
View File
@@ -0,0 +1,47 @@
/*!
* FilePondPluginImageEdit 1.6.3
* Licensed under MIT, https://opensource.org/licenses/MIT/
* Please visit https://pqina.nl/filepond/ for details.
*/
/* eslint-disable */
.filepond--action-edit-item.filepond--action-edit-item {
width: 2em;
height: 2em;
padding: 0.1875em;
}
.filepond--action-edit-item.filepond--action-edit-item[data-align*='center'] {
margin-left: -0.1875em;
}
.filepond--action-edit-item.filepond--action-edit-item[data-align*='bottom'] {
margin-bottom: -0.1875em;
}
.filepond--action-edit-item-alt {
border: none;
line-height: inherit;
background: transparent;
font-family: inherit;
color: inherit;
outline: none;
padding: 0;
margin: 0 0 0 0.25em;
pointer-events: all;
position: absolute;
}
.filepond--action-edit-item-alt svg {
width: 1.3125em;
height: 1.3125em;
}
.filepond--action-edit-item-alt span {
font-size: 0;
opacity: 0;
}
.filepond--root[data-style-panel-layout~='circle'] .filepond--action-edit-item {
opacity: 1 !important;
visibility: visible !important;
}
+1047
View File
File diff suppressed because it is too large Load Diff
+9
View File
File diff suppressed because one or more lines are too long
+10993
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+11
View File
@@ -0,0 +1,11 @@
/*
(c) 2014, Vladimir Agafonkin
simpleheat, a tiny JavaScript library for drawing heatmaps with Canvas
https://github.com/mourner/simpleheat
*/
!function(){"use strict";function t(i){return this instanceof t?(this._canvas=i="string"==typeof i?document.getElementById(i):i,this._ctx=i.getContext("2d"),this._width=i.width,this._height=i.height,this._max=1,void this.clear()):new t(i)}t.prototype={defaultRadius:25,defaultGradient:{.4:"blue",.6:"cyan",.7:"lime",.8:"yellow",1:"red"},data:function(t,i){return this._data=t,this},max:function(t){return this._max=t,this},add:function(t){return this._data.push(t),this},clear:function(){return this._data=[],this},radius:function(t,i){i=i||15;var a=this._circle=document.createElement("canvas"),s=a.getContext("2d"),e=this._r=t+i;return a.width=a.height=2*e,s.shadowOffsetX=s.shadowOffsetY=200,s.shadowBlur=i,s.shadowColor="black",s.beginPath(),s.arc(e-200,e-200,t,0,2*Math.PI,!0),s.closePath(),s.fill(),this},gradient:function(t){var i=document.createElement("canvas"),a=i.getContext("2d"),s=a.createLinearGradient(0,0,0,256);i.width=1,i.height=256;for(var e in t)s.addColorStop(e,t[e]);return a.fillStyle=s,a.fillRect(0,0,1,256),this._grad=a.getImageData(0,0,1,256).data,this},draw:function(t){this._circle||this.radius(this.defaultRadius),this._grad||this.gradient(this.defaultGradient);var i=this._ctx;i.clearRect(0,0,this._width,this._height);for(var a,s=0,e=this._data.length;e>s;s++)a=this._data[s],i.globalAlpha=Math.max(a[2]/this._max,t||.05),i.drawImage(this._circle,a[0]-this._r,a[1]-this._r);var n=i.getImageData(0,0,this._width,this._height);return this._colorize(n.data,this._grad),i.putImageData(n,0,0),this},_colorize:function(t,i){for(var a,s=3,e=t.length;e>s;s+=4)a=4*t[s],a&&(t[s-3]=i[a],t[s-2]=i[a+1],t[s-1]=i[a+2])}},window.simpleheat=t}(),/*
(c) 2014, Vladimir Agafonkin
Leaflet.heat, a tiny and fast heatmap plugin for Leaflet.
https://github.com/Leaflet/Leaflet.heat
*/
L.HeatLayer=(L.Layer?L.Layer:L.Class).extend({initialize:function(t,i){this._latlngs=t,L.setOptions(this,i)},setLatLngs:function(t){return this._latlngs=t,this.redraw()},addLatLng:function(t){return this._latlngs.push(t),this.redraw()},setOptions:function(t){return L.setOptions(this,t),this._heat&&this._updateOptions(),this.redraw()},redraw:function(){return!this._heat||this._frame||this._map._animating||(this._frame=L.Util.requestAnimFrame(this._redraw,this)),this},onAdd:function(t){this._map=t,this._canvas||this._initCanvas(),t._panes.overlayPane.appendChild(this._canvas),t.on("moveend",this._reset,this),t.options.zoomAnimation&&L.Browser.any3d&&t.on("zoomanim",this._animateZoom,this),this._reset()},onRemove:function(t){t.getPanes().overlayPane.removeChild(this._canvas),t.off("moveend",this._reset,this),t.options.zoomAnimation&&t.off("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},_initCanvas:function(){var t=this._canvas=L.DomUtil.create("canvas","leaflet-heatmap-layer leaflet-layer"),i=L.DomUtil.testProp(["transformOrigin","WebkitTransformOrigin","msTransformOrigin"]);t.style[i]="50% 50%";var a=this._map.getSize();t.width=a.x,t.height=a.y;var s=this._map.options.zoomAnimation&&L.Browser.any3d;L.DomUtil.addClass(t,"leaflet-zoom-"+(s?"animated":"hide")),this._heat=simpleheat(t),this._updateOptions()},_updateOptions:function(){this._heat.radius(this.options.radius||this._heat.defaultRadius,this.options.blur),this.options.gradient&&this._heat.gradient(this.options.gradient),this.options.max&&this._heat.max(this.options.max)},_reset:function(){var t=this._map.containerPointToLayerPoint([0,0]);L.DomUtil.setPosition(this._canvas,t);var i=this._map.getSize();this._heat._width!==i.x&&(this._canvas.width=this._heat._width=i.x),this._heat._height!==i.y&&(this._canvas.height=this._heat._height=i.y),this._redraw()},_redraw:function(){var t,i,a,s,e,n,h,o,r,d=[],_=this._heat._r,l=this._map.getSize(),m=new L.Bounds(L.point([-_,-_]),l.add([_,_])),c=void 0===this.options.max?1:this.options.max,u=void 0===this.options.maxZoom?this._map.getMaxZoom():this.options.maxZoom,f=1/Math.pow(2,Math.max(0,Math.min(u-this._map.getZoom(),12))),g=_/2,p=[],v=this._map._getMapPanePos(),w=v.x%g,y=v.y%g;for(t=0,i=this._latlngs.length;i>t;t++)if(a=this._map.latLngToContainerPoint(this._latlngs[t]),m.contains(a)){e=Math.floor((a.x-w)/g)+2,n=Math.floor((a.y-y)/g)+2;var x=void 0!==this._latlngs[t].alt?this._latlngs[t].alt:void 0!==this._latlngs[t][2]?+this._latlngs[t][2]:1;r=x*f,p[n]=p[n]||[],s=p[n][e],s?(s[0]=(s[0]*s[2]+a.x*r)/(s[2]+r),s[1]=(s[1]*s[2]+a.y*r)/(s[2]+r),s[2]+=r):p[n][e]=[a.x,a.y,r]}for(t=0,i=p.length;i>t;t++)if(p[t])for(h=0,o=p[t].length;o>h;h++)s=p[t][h],s&&d.push([Math.round(s[0]),Math.round(s[1]),Math.min(s[2],c)]);this._heat.data(d).draw(this.options.minOpacity),this._frame=null},_animateZoom:function(t){var i=this._map.getZoomScale(t.zoom),a=this._map._getCenterOffset(t.center)._multiplyBy(-i).subtract(this._map._getMapPanePos());L.DomUtil.setTransform?L.DomUtil.setTransform(this._canvas,a,i):this._canvas.style[L.DomUtil.TRANSFORM]=L.DomUtil.getTranslateString(a)+" scale("+i+")"}}),L.heatLayer=function(t,i){return new L.HeatLayer(t,i)};
+246
View File
@@ -0,0 +1,246 @@
/*
* Leaflet Heatmap Overlay
*
* Copyright (c) 2008-2016, Patrick Wied (https://www.patrick-wied.at)
* Dual-licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
* and the Beerware (http://en.wikipedia.org/wiki/Beerware) license.
*/
;(function (name, context, factory) {
// Supports UMD. AMD, CommonJS/Node.js and browser context
if (typeof module !== "undefined" && module.exports) {
module.exports = factory(
require('heatmap.js'),
require('leaflet')
);
} else if (typeof define === "function" && define.amd) {
define(['heatmap.js', 'leaflet'], factory);
} else {
// browser globals
if (typeof window.h337 === 'undefined') {
throw new Error('heatmap.js must be loaded before the leaflet heatmap plugin');
}
if (typeof window.L === 'undefined') {
throw new Error('Leaflet must be loaded before the leaflet heatmap plugin');
}
context[name] = factory(window.h337, window.L);
}
})("HeatmapOverlay", this, function (h337, L) {
'use strict';
// Leaflet < 0.8 compatibility
if (typeof L.Layer === 'undefined') {
L.Layer = L.Class;
}
var HeatmapOverlay = L.Layer.extend({
initialize: function (config) {
this.cfg = config;
this._el = L.DomUtil.create('div', 'leaflet-zoom-hide');
this._data = [];
this._max = 1;
this._min = 0;
this.cfg.container = this._el;
},
onAdd: function (map) {
var size = map.getSize();
this._map = map;
this._width = size.x;
this._height = size.y;
this._el.style.width = size.x + 'px';
this._el.style.height = size.y + 'px';
this._el.style.position = 'absolute';
this._origin = this._map.layerPointToLatLng(new L.Point(0, 0));
map.getPanes().overlayPane.appendChild(this._el);
if (!this._heatmap) {
this._heatmap = h337.create(this.cfg);
}
// this resets the origin and redraws whenever
// the zoom changed or the map has been moved
map.on('moveend', this._reset, this);
this._draw();
},
addTo: function (map) {
map.addLayer(this);
return this;
},
onRemove: function (map) {
// remove layer's DOM elements and listeners
map.getPanes().overlayPane.removeChild(this._el);
map.off('moveend', this._reset, this);
},
_draw: function() {
if (!this._map) { return; }
var mapPane = this._map.getPanes().mapPane;
var point = mapPane._leaflet_pos;
// reposition the layer
this._el.style[HeatmapOverlay.CSS_TRANSFORM] = 'translate(' +
-Math.round(point.x) + 'px,' +
-Math.round(point.y) + 'px)';
this._update();
},
_update: function() {
var bounds, zoom, scale;
var generatedData = { max: this._max, min: this._min, data: [] };
bounds = this._map.getBounds();
zoom = this._map.getZoom();
scale = Math.pow(2, zoom);
if (this._data.length == 0) {
if (this._heatmap) {
this._heatmap.setData(generatedData);
}
return;
}
var latLngPoints = [];
var radiusMultiplier = this.cfg.scaleRadius ? scale : 1;
var localMax = 0;
var localMin = 0;
var valueField = this.cfg.valueField;
var len = this._data.length;
while (len--) {
var entry = this._data[len];
var value = entry[valueField];
var latlng = entry.latlng;
// we don't wanna render points that are not even on the map ;-)
if (!bounds.contains(latlng)) {
continue;
}
// local max is the maximum within current bounds
localMax = Math.max(value, localMax);
localMin = Math.min(value, localMin);
var point = this._map.latLngToContainerPoint(latlng);
var latlngPoint = { x: Math.round(point.x), y: Math.round(point.y) };
latlngPoint[valueField] = value;
var radius;
if (entry.radius) {
radius = entry.radius * radiusMultiplier;
} else {
radius = (this.cfg.radius || 2) * radiusMultiplier;
}
latlngPoint.radius = radius;
latLngPoints.push(latlngPoint);
}
if (this.cfg.useLocalExtrema) {
generatedData.max = localMax;
generatedData.min = localMin;
}
generatedData.data = latLngPoints;
this._heatmap.setData(generatedData);
},
setData: function(data) {
this._max = data.max || this._max;
this._min = data.min || this._min;
var latField = this.cfg.latField || 'lat';
var lngField = this.cfg.lngField || 'lng';
var valueField = this.cfg.valueField || 'value';
// transform data to latlngs
var data = data.data;
var len = data.length;
var d = [];
while (len--) {
var entry = data[len];
var latlng = new L.LatLng(entry[latField], entry[lngField]);
var dataObj = { latlng: latlng };
dataObj[valueField] = entry[valueField];
if (entry.radius) {
dataObj.radius = entry.radius;
}
d.push(dataObj);
}
this._data = d;
this._draw();
},
// experimential... not ready.
addData: function(pointOrArray) {
if (pointOrArray.length > 0) {
var len = pointOrArray.length;
while(len--) {
this.addData(pointOrArray[len]);
}
} else {
var latField = this.cfg.latField || 'lat';
var lngField = this.cfg.lngField || 'lng';
var valueField = this.cfg.valueField || 'value';
var entry = pointOrArray;
var latlng = new L.LatLng(entry[latField], entry[lngField]);
var dataObj = { latlng: latlng };
dataObj[valueField] = entry[valueField];
this._max = Math.max(this._max, dataObj[valueField]);
this._min = Math.min(this._min, dataObj[valueField]);
if (entry.radius) {
dataObj.radius = entry.radius;
}
this._data.push(dataObj);
this._draw();
}
},
_reset: function () {
this._origin = this._map.layerPointToLatLng(new L.Point(0, 0));
var size = this._map.getSize();
if (this._width !== size.x || this._height !== size.y) {
this._width = size.x;
this._height = size.y;
this._el.style.width = this._width + 'px';
this._el.style.height = this._height + 'px';
this._heatmap._renderer.setDimensions(this._width, this._height);
}
this._draw();
}
});
HeatmapOverlay.CSS_TRANSFORM = (function() {
var div = document.createElement('div');
var props = [
'transform',
'WebkitTransform',
'MozTransform',
'OTransform',
'msTransform'
];
for (var i = 0; i < props.length; i++) {
var prop = props[i];
if (div.style[prop] !== undefined) {
return prop;
}
}
return props[0];
})();
return HeatmapOverlay;
});
+1136
View File
File diff suppressed because it is too large Load Diff
+17
View File
@@ -0,0 +1,17 @@
/**
* Catalan translation for js-year-calendar
* David Ramirez <david@davidrv.com>
* Based on
* Catalan translation for bootstrap-datepicker
* J. Garcia <jogaco.en@gmail.com>
*/
Calendar.locales['ca'] = {
days: ["Diumenge", "Dilluns", "Dimarts", "Dimecres", "Dijous", "Divendres", "Dissabte"],
daysShort: ["Diu", "Dill", "Dim", "Dmc", "Dij", "Div", "Dis"],
daysMin: ["Dg", "Dl", "Dt", "Dc", "Dj", "Dv", "Ds"],
months: ["Gener", "Febrer", "Març", "Abril", "Maig", "Juny", "Juliol", "Agost", "Setembre", "Octubre", "Novembre", "Desembre"],
monthsShort: ["Gen", "Feb", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Oct", "Nov", "Dec"],
weekShort: 'S',
weekStart: 1
};
+18
View File
@@ -0,0 +1,18 @@
/**
* Czech translation for js-year-calendar
* @ptica
* Based on
* German translation for js-year-calendar
* Paul DAVID-SIVELLE
* and moment.js locale configuration by author : petrbela : https://github.com/petrbela
*/
Calendar.locales['cs'] = {
days: ["Neděle", "Pondělí", "Úterý", "Středa", "Čtvrtek", "Pátek", "Sobota"],
daysShort: ["Ne", "Po", "Út", "St", "Čt", "Pá", "So"],
daysMin: ["Ne", "Po", "Út", "St", "Čt", "Pá", "So"],
months: ["Leden", "Únor", "Březen", "Duben", "Květen", "Červen", "Červenec", "Srpen", "Září", "Říjen", "Listopad", "Prosinec"],
monthsShort: ["Led", "Úno", "Bře", "Dub", "Kvě", "Čvn", "Čvc", "Srp", "Zář", "Říj", "Lis", "Pro"],
weekShort: 'T',
weekStart: 1
};
+17
View File
@@ -0,0 +1,17 @@
/**
* German translation for js-year-calendar
* Paul DAVID-SIVELLE
* Based on
* German translation for bootstrap-datepicker
* Sam Zurcher <sam@orelias.ch>
*/
Calendar.locales['de'] = {
days: ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"],
daysShort: ["Son", "Mon", "Die", "Mit", "Don", "Fre", "Sam"],
daysMin: ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"],
months: ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"],
monthsShort: ["Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"],
weekShort: 'W',
weekStart: 1
};
+17
View File
@@ -0,0 +1,17 @@
/**
* Spanish translation for js-year-calendar
* Paul DAVID-SIVELLE
* Based on
* Spanish translation for bootstrap-datepicker
* Bruno Bonamin <bruno.bonamin@gmail.com>
*/
Calendar.locales['es'] = {
days: ["Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado"],
daysShort: ["Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb"],
daysMin: ["Do", "Lu", "Ma", "Mi", "Ju", "Vi", "Sa"],
months: ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"],
monthsShort: ["Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"],
weekShort: 'S',
weekStart: 1
};
+16
View File
@@ -0,0 +1,16 @@
/**
* Basque translation for js-year-calendar
* Iker Ibarguren Berasaluze
* Based on * Basque translation for bootstrap-datepicker
* by Karrikas ( karrikas@karrikas.com )
*/
Calendar.locales['eu'] = {
days: ["Igandea", "Astelehena", "Asteartea", "Asteazkena", "Osteguna", "Ostirala", "Larunbata"],
daysShort: [ "Ig.", "Al.", "Ar.", "Az.", "Og.", "Ol.", "Lr." ],
daysMin: [ "Ig", "Al", "Ar", "Az", "Og", "Ol", "Lr" ],
months: [ "Urtarrila", "Otsaila", "Martxoa", "Apirila", "Maiatza", "Ekaina", "Uztaila", "Abuztua", "Iraila", "Urria", "Azaroa", "Abendua" ],
monthsShort: [ "Urt", "Ots", "Mar.", "Api", "Mai", "Eka", "Uzt", "Abu", "Ira", "Urr", "Aza", "Abe" ],
weekShort: 'A',
weekStart: 1
};
+14
View File
@@ -0,0 +1,14 @@
/**
* Finnish translation for js-year-calendar
* Tuomas Jaakola (iqqmuT) <tuomas.jaakola@iki.fi>
*/
Calendar.locales['fi'] = {
days: ["sunnuntai", "maanantai", "tiistai", "keskiviikko", "torstai", "perjantai", "lauantai"],
daysShort: ["su", "ma", "ti", "ke", "to", "pe", "la"],
daysMin: ["su", "ma", "ti", "ke", "to", "pe", "la"],
months: ["tammikuu", "helmikuu", "maaliskuu", "huhtikuu", "toukokuu", "kesäkuu", "heinäkuu", "elokuu", "syyskuu", "lokakuu", "marraskuu", "joulukuu"],
monthsShort: ["tammi", "helmi", "maalis", "huhti", "touko", "kesä", "heinä", "elo", "syys", "loka", "marras", "joulu"],
weekShort: 'V',
weekStart: 1
};
+17
View File
@@ -0,0 +1,17 @@
/**
* French translation for js-year-calendar
* Paul DAVID-SIVELLE
* Based on
* French translation for bootstrap-datepicker
* Nico Mollet <nico.mollet@gmail.com>
*/
Calendar.locales['fr'] = {
days: ["Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"],
daysShort: ["Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam"],
daysMin: ["D", "L", "Ma", "Me", "J", "V", "S"],
months: ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"],
monthsShort: ["Jan", "Fév", "Mar", "Avr", "Mai", "Jui", "Jul", "Aou", "Sep", "Oct", "Nov", "Déc"],
weekShort:'S',
weekStart: 1
};
+14
View File
@@ -0,0 +1,14 @@
/**
* Croatian translation for js-year-calendar
* Davor Došlnec <davor.doslinec@gmail.com>
*/
Calendar.locales['hr'] = {
days: ["Nedjelja", "Ponedjeljak", "Utorak", "Srijeda", "Četvrtak", "Petak", "Subota"],
daysShort: ["Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub"],
daysMin: ["Ne", "Po", "Ut", "Sr", "Če", "Pe", "Su"],
months: ["Siječanj", "Veljača", "Ožujak", "Travanj", "Svibanj", "Lipanj", "Srpanj", "Kolovoz", "Rujan", "Listopad", "Studeni", "Prosinac"],
monthsShort: ["Sij", "Vel", "Ožu", "Tra", "Svi", "Lip", "Srp", "Kol", "Ruj", "Lis", "Stu", "Pro"],
weekShort: 'T',
weekStart: 1
};
+17
View File
@@ -0,0 +1,17 @@
/**
* Hungarian translation for js-year-calendar
* Tamas Jozsef Balku
* Based on
* Hungarian translation for bootstrap-datepicker
* Tamas Jozsef Balku <https://github.com/btamas86>
*/
Calendar.locales['hu'] = {
days: [ "Vasárnap","Hétfő", "Kedd", "Szerda", "Csütörtök", "Péntek", "Szombat"],
daysShort: ["Vas", "Hét", "Ked", "Sze", "Csü", "Pén", "Szo"],
daysMin: ["Va", "Hé", "Ke", "Sz", "Cs", "Pé", "Sz"],
months: ["Január", "Február", "Március", "Április", "Május", "Június", "Július", "Augusztus", "Szeptember", "Október", "November", "December"],
monthsShort: ["Jan", "Feb", "Már", "Ápr", "Máj", "Jún", "Júl", "Aug", "Sze", "Okt", "Nov", "Dec"],
weekShort: 'h',
weekStart: 1
};
+17
View File
@@ -0,0 +1,17 @@
/**
* Indonesian translation for js-year-calendar
* Kiki Ldc
* Based on
* Indonesian translation for bootstrap-datepicker
* Kiki Ldc <7x24th@gmail.com>
*/
Calendar.locales ['id'] = {
days: ["Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"],
daysShort: ["Ming", "Sen", "Sel", "Rab", "kam", "Jum", "Sab"],
daysMin: ["Mg", "Sn", "Sl", "Rb", "Km", "Jm", "Sb"],
months: ["Januari", "Februari", "Maret", "April", "Mai", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember" ],
monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Agt", "Sep", "Okt", "Nov", "Des"],
weekShort: 'W',
weekStart: 1
};
+17
View File
@@ -0,0 +1,17 @@
/**
* German translation for js-year-calendar
* Paul DAVID-SIVELLE
* Based on
* German translation for bootstrap-datepicker
* Knútur Óli Magnússon <knutur@knutur.is>
*/
Calendar.locales['is'] = {
days: ["Sunnudagur", "Mánudagur", "Þriðjudagur", "Miðvikudagur", "Fimmtudagur", "Föstudagur", "Laugardagur"],
daysShort: ["Sun", "Mán", "Þri", "Mið", "Fim", "Fös", "Lau"],
daysMin: ["Su", "Má", "Þr", "Mi", "Fi", "Fö", "La"],
months: ["Janúar", "Febrúar", "Mars", "Apríl", "Maí", "Júní", "Júlí", "Ágúst", "September", "Október", "Nóvember", "Desember"],
monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maí", "Jún", "Júl", "Agú", "Sep", "Okt", "Nóv", "Des"],
weekShort: 'W',
weekStart: 1
};
+17
View File
@@ -0,0 +1,17 @@
/**
* Italian translation for js-year-calendar
* Paul DAVID-SIVELLE
* Based on
* Italian translation for bootstrap-datepicker
* Enrico Rubboli <rubboli@gmail.com>
*/
Calendar.locales['it'] = {
days: ["Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato"],
daysShort: ["Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab"],
daysMin: ["Do", "Lu", "Ma", "Me", "Gi", "Ve", "Sa"],
months: ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"],
monthsShort: ["Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic"],
weekShort: 'S',
weekStart: 1,
};
+17
View File
@@ -0,0 +1,17 @@
/**
* Japanese translation for js-year-calendar
* Paul DAVID-SIVELLE
* Based on
* Japanese translation for bootstrap-datepicker
* Norio Suzuki <https://github.com/suzuki/>
*/
Calendar.locales['ja'] = {
days: ["日曜", "月曜", "火曜", "水曜", "木曜", "金曜", "土曜"],
daysShort: ["日", "月", "火", "水", "木", "金", "土"],
daysMin: ["日", "月", "火", "水", "木", "金", "土"],
months: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"],
monthsShort: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"],
weekShort: '週',
weekStart:0
};
+13
View File
@@ -0,0 +1,13 @@
/**
* Korean translation for js-year-calendar
* minho kim <alsghek112@gmail.com>
*/
Calendar.locales['ko'] = {
days: ["일", "월", "화", "수", "목", "금", "토"],
daysShort: ["일", "월", "화", "수", "목", "금", "토"],
daysMin: ["일", "월", "화", "수", "목", "금", "토"],
months: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"],
monthsShort: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"],
weekShort: 'T',
weekStart: 1
};
+16
View File
@@ -0,0 +1,16 @@
/**
* Lithuanian translation for js-year-calendar
* Mantas Urbonas mantas.urbonas@gmail.com
*
* either MIT or BSD or Apache 2 licensed - choose whatever license suits you most.
*/
Calendar.locales['lt'] = {
days: ["Sekmadienis", "Pirmadienis", "Antradienis", "Trečiadienis", "Ketvirtadienis", "Penktadienis", "Šeštadienis"],
daysShort: ["Sek", "Pir", "Ant", "Tre", "Ket", "Pen", "Šeš"],
daysMin: ["Se", "Pr", "An", "Tr", "Kt", "Pn", "Še"],
months: ["Sausis", "Vasaris", "Kovas", "Balandis", "Gegužė", "Birželis", "Liepa", "Rugpjūtis", "Rugsėjis", "Spalis", "Lapkritis", "Gruodis"],
monthsShort: ["Sau", "Vas", "Kov", "Bal", "Geg", "Bir", "Lie", "Rgp", "Rug", "Spa", "Lap", "Gru"],
weekShort: 'S',
weekStart: 1
};
+14
View File
@@ -0,0 +1,14 @@
/**
* Latvian translation for js-year-calendar
* Imants Horsts
*/
Calendar.locales['lv'] = {
days: ["Svētdiena", "Pirmdiena", "Otrdiena", "Trešdiena", "Ceturtdiena", "Piektdiena", "Sestdiena"],
daysShort: ["Svt", "Prm", "Otr", "Tre", "Ctr", "Pkt", "Sst"],
daysMin: ["Sv", "P", "O", "T", "C", "Pk", "S"],
months: ["Janvāris", "Februāris", "Marts", "Aprīlis", "Maijs", "Jūnijs", "Jūlijs", "Augusts", "Septembris", "Oktobris", "Novembris", "Decembris"],
monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jūn", "Jūl", "Aug", "Sep", "Okt", "Nov", "Dec"],
weekShort: 'N',
weekStart: 1
};
+13
View File
@@ -0,0 +1,13 @@
/**
* Malay translation for js-year-calendar
* Chia Wei Lim <acelimcw@hotmail.com>
*/
Calendar.locales['ms'] = {
days: ["Ahad", "Isnin", "Selasa", "Rabu", "Khamis", "Jumaat", "Sabtu"],
daysShort: ["Ahd", "Isn", "Sel", "Rab", "Kha", "Jum", "Sab"],
daysMin: ["Ahd", "Isn", "Sel", "Rab", "Kha", "Jum", "Sab"],
months: ["Januari", "Februari", "Mac", "April", "Mei", "Jun", "Julai", "Ogos", "September", "Oktober", "November", "Disember"],
monthsShort: ["Jan", "Feb", "Mac", "Apr", "Mei", "Jun", "Jul", "Ogos", "Sep", "Okt", "Nov", "Dis"],
weekShort: 'M',
weekStart: 1
};
+17
View File
@@ -0,0 +1,17 @@
/**
* Dutch translation for js-year-calendar
* Paul DAVID-SIVELLE
* Based on
* Dutch translation for bootstrap-datepicker
* Reinier Goltstein <mrgoltstein@gmail.com>
*/
Calendar.locales['nl'] = {
days: ["zondag", "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag"],
daysShort: ["zo", "ma", "di", "wo", "do", "vr", "za"],
daysMin: ["zo", "ma", "di", "wo", "do", "vr", "za"],
months: ["januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december"],
monthsShort: ["jan", "feb", "mrt", "apr", "mei", "jun", "jul", "aug", "sep", "okt", "nov", "dec"],
weekShort: 'w',
weekStart: 1
};
+14
View File
@@ -0,0 +1,14 @@
/**
* Polish translation for js-year-calendar
* Robert 'Wooya' Gaudyn
*/
Calendar.locales['pl'] = {
days: ["Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piatek", "Sobota"],
daysShort: ["Nie", "Pon", "Wto", "Śro", "Czw", "Pią", "Sob"],
daysMin: ["Ni", "Po", "Wt", "Śr", "Cz", "Pi", "So"],
months: ["Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec", "Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"],
monthsShort: ["Sty", "Lut", "Mar", "Kwi", "Maj", "Cze", "Lip", "Sie", "Wrz", "Paź", "Lis", "Gru"],
weekShort: 'W',
weekStart: 1
};
+18
View File
@@ -0,0 +1,18 @@
/**
* Portuguese translation for js-year-calendar
* Paul DAVID-SIVELLE
* Based on
* Portuguese translation for bootstrap-datepicker
* Original code: Cauan Cabral <cauan@radig.com.br>
* Tiago Melo <tiago.blackcode@gmail.com>
*/
Calendar.locales['pt'] = {
days: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado"],
daysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb"],
daysMin: ["Do", "Se", "Te", "Qu", "Qu", "Se", "Sa"],
months: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"],
monthsShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"],
weekShort: 'S',
weekStart:0
};
+17
View File
@@ -0,0 +1,17 @@
/**
* Russian translation for js-year-calendar
* Paul DAVID-SIVELLE
* Based on
* Russian translation for bootstrap-datepicker
* Victor Taranenko <darwin@snowdale.com>
*/
Calendar.locales['ru'] = {
days: ["Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота"],
daysShort: ["Вск", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Суб"],
daysMin: ["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"],
months: ["Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"],
monthsShort: ["Янв", "Фев", "Мар", "Апр", "Май", "Июн", "Июл", "Авг", "Сен", "Окт", "Ноя", "Дек"],
weekShort: 'н',
weekStart: 1
};
+15
View File
@@ -0,0 +1,15 @@
/**
* Slovak translation for js-year-calendar
* Marian Sulgan
* marian@sulgan.sk
*/
Calendar.locales['sk'] = {
days: ["Nedeľa", "Pondelok", "Utorok", "Streda", "Štvrtok", "Piatok", "Sobota"],
daysShort: ["Ned", "Pon", "Uto", "Str", "Štv", "Pia", "Sob"],
daysMin: ["Ne", "Po", "Ut", "St", "Št", "Pia", "So"],
months: ["Január", "Február", "Marec", "Apríl", "Máj", "Jún", "Júl", "August", "September", "Október", "November", "December"],
monthsShort: ["Jan", "Feb", "Mar", "Apr", "Máj", "Jún", "Júl", "Aug", "Sep", "Okt", "Nov", "Dec"],
weekShort: 'W',
weekStart: 1
};
+14
View File
@@ -0,0 +1,14 @@
/**
* Serbian translation for js-year-calendar
* Lazarevic Ivica <lazarevic.ivica@gmail.com>
*/
Calendar.locales['sr'] = {
days: ["Недеља", "Понедељак", "Уторак", "Среда", "Четвртак", "Петак", "Субота"],
daysShort: ["Нед", "Пон", "Уто", "Сре", "Чет", "Пет", "Суб"],
daysMin: ["Не", "По", "Ут", "Ср", "Че", "Пе", "Су"],
months: ["Јануар", "Фебруар", "Март", "Април", "Мај", "Јун", "Јул", "Август", "Септембар", "Октобар", "Новембар", "Децембар"],
monthsShort: ["Јан", "Феб", "Мар", "Апр", "Мај", "Јун", "Јул", "Авг", "Сеп", "Окт", "Нов", "Дец"],
weekShort: 'н',
weekStart: 1
};
+15
View File
@@ -0,0 +1,15 @@
/**
* Thai translation for js-year-calendar
* xypherbo
*
*/
Calendar.locales["th"] = {
days: ["อาทิตย์", "จันทร์", "อังคาร", "พุธ", "พฤหัสบดี", "ศุกร์", "เสาร์"],
daysShort: ["อา.", "จ.", "อ.", "พ.", "พฤ.", "ศ.", "ส."],
daysMin: ["อา.", "จ.", "อ.", "พ.", "พฤ.", "ศ.", "ส."],
months: ["มกราคม", "กุมภาพันธ์", "มีนาคม", "เมษายน", "พฤษภาคม", "มิถุนายน", "กรกฎาคม", "สิงหาคม", "กันยายน", "ตุลาคม", "พฤศจิกายน", "ธันวาคม"],
monthsShort: ["ม.ค.", "ก.พ.", "มี.ค.", "เม.ย.", "พ.ค.", "มิ.ย.", "ก.ค.", "ส.ค.", "ก.ย.", "ต.ค.", "พ.ย.", "ธ.ค."],
weekShort: "ส.",
weekStart: 0
};
+17
View File
@@ -0,0 +1,17 @@
/**
* Turkish translation for js-year-calendar
* Paul DAVID-SIVELLE
* Based on
* Turkish translation for bootstrap-datepicker
* Serkan Algur <kaisercrazy_2@hotmail.com>
*/
Calendar.locales['tr'] = {
days: ["Pazar", "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi"],
daysShort: ["Pz", "Pzt", "Sal", "Çrş", "Prş", "Cu", "Cts"],
daysMin: ["Pz", "Pzt", "Sa", "Çr", "Pr", "Cu", "Ct"],
months: ["Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"],
monthsShort: ["Oca", "Şub", "Mar", "Nis", "May", "Haz", "Tem", "Ağu", "Eyl", "Eki", "Kas", "Ara"],
weekShort: 'H',
weekStart: 1
};
+14
View File
@@ -0,0 +1,14 @@
/**
* Ukrainian translation for js-year-calendar
* Petro Franko
*/
Calendar.locales['ua'] = {
days: ["Неділя", "Понеділок", "Вівторок", "Середа", "Четвер", "П'ятниця", "Субота"],
daysShort: ["Нед", "Пон", "Вт", "Сер", "Чет", "Пт", "Суб"],
daysMin: ["Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"],
months: ["Січень", "Лютий", "Березень", "Квітень", "Травень", "Червень", "Липень", "Серпень", "Вересень", "Жовтень", "Листопад", "Грудень"],
monthsShort: ["Січ", "Лют", "Бер", "Кві", "Тра", "Чер", "Лип", "Сер", "Вер", "Жов", "Лис", "Гру"],
weekShort: 'Т',
weekStart: 1
};
+14
View File
@@ -0,0 +1,14 @@
/**
* Ukrainian translation for js-year-calendar
* by Vadym Korolyuk
*/
Calendar.locales['uk'] = {
days: ["Неділя", "Понеділок", "Вівторок", "Середа", "Четвер", "П'ятниця", "Субота"],
daysShort: ["Нед", "Пон", "Вів", "Сер", "Чет", "Птн", "Суб"],
daysMin: ["Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"],
months: ["Січень", "Лютий", "Березень", "Квітень", "Травень", "Червень", "Липень","Серпень", "Вересень", "Жовтень", "Листопад", "Грудень"],
monthsShort: ["Січ", "Лют", "Бер", "Кві", "Тра", "Чер", "Лип", "Сер", "Вер", "Жов", "Лис","Гру"],
weekShort: 'н',
weekStart: 1
};
+17
View File
@@ -0,0 +1,17 @@
/**
* Uzbek translation for js-year-calendar
* Oqil Karimov
* Based on
* Uzbek translation for moment
*/
Calendar.locales['uz'] = {
days: ["Yakshanba", "Dushanba", "Seshanba", "Chorshanba", "Payshanba", "Juma", "Shanba"],
daysShort: ["Yak","Dush","Sesh","Chor","Pay","Jum","Shan"],
daysMin: ["Ya","Du","Se","Cho","Pa","Ju","Sha"],
months: ["Yanvar", "Fevral", "Mart", "Aprel", "May", "Iyun", "Iyul", "Avgust", "Sentabr", "Oktabr", "Noyabr", "Dekabr"],
monthsShort: ["Yan", "Fev", "Mar", "Apr", "May", "Iyun", "Iyul", "Avg", "Sen", "Okt", "Noy", "Dek"],
weekShort: 'h',
weekStart: 1
};
+17
View File
@@ -0,0 +1,17 @@
/**
* Simplified Chinese translation js-year-calendar
* William Hernández <>
* Based on
* Simplified Chinese translation for bootstrap-datepicker
* Yuan Cheung <advanimal@gmail.com>
*/
Calendar.locales['zh-CN'] = {
days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"],
daysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六"],
daysMin: ["日", "一", "二", "三", "四", "五", "六"],
months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
monthsShort: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"],
weekShort: '周',
weekStart: 1
};
+17
View File
@@ -0,0 +1,17 @@
/**
* Traditional Chinese translation js-year-calendar
* Based on
* Traditional Chinese translation for bootstrap-datepicker
* Rung-Sheng Jang <daniel@i-trend.co.cc>
* FrankWu <frankwu100@gmail.com>
*/
Calendar.locales['zh-TW'] = {
days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"],
daysShort: ["週日", "週一", "週二", "週三", "週四", "週五", "週六"],
daysMin: ["日", "一", "二", "三", "四", "五", "六"],
months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
monthsShort: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"],
weekShort: '週',
weekStart: 1
};
+433
View File
@@ -0,0 +1,433 @@
/* smoothscroll v0.4.4 - 2019 - Dustan Kasten, Jeremias Menichelli - MIT License */
(function () {
'use strict';
// polyfill
function polyfill() {
// aliases
var w = window;
var d = document;
// return if scroll behavior is supported and polyfill is not forced
if (
'scrollBehavior' in d.documentElement.style &&
w.__forceSmoothScrollPolyfill__ !== true
) {
return;
}
// globals
var Element = w.HTMLElement || w.Element;
var SCROLL_TIME = 468;
// object gathering original scroll methods
var original = {
scroll: w.scroll || w.scrollTo,
scrollBy: w.scrollBy,
elementScroll: Element.prototype.scroll || scrollElement,
scrollIntoView: Element.prototype.scrollIntoView
};
// define timing method
var now =
w.performance && w.performance.now
? w.performance.now.bind(w.performance)
: Date.now;
/**
* indicates if a the current browser is made by Microsoft
* @method isMicrosoftBrowser
* @param {String} userAgent
* @returns {Boolean}
*/
function isMicrosoftBrowser(userAgent) {
var userAgentPatterns = ['MSIE ', 'Trident/', 'Edge/'];
return new RegExp(userAgentPatterns.join('|')).test(userAgent);
}
/*
* IE has rounding bug rounding down clientHeight and clientWidth and
* rounding up scrollHeight and scrollWidth causing false positives
* on hasScrollableSpace
*/
var ROUNDING_TOLERANCE = isMicrosoftBrowser(w.navigator.userAgent) ? 1 : 0;
/**
* changes scroll position inside an element
* @method scrollElement
* @param {Number} x
* @param {Number} y
* @returns {undefined}
*/
function scrollElement(x, y) {
this.scrollLeft = x;
this.scrollTop = y;
}
/**
* returns result of applying ease math function to a number
* @method ease
* @param {Number} k
* @returns {Number}
*/
function ease(k) {
return 0.5 * (1 - Math.cos(Math.PI * k));
}
/**
* indicates if a smooth behavior should be applied
* @method shouldBailOut
* @param {Number|Object} firstArg
* @returns {Boolean}
*/
function shouldBailOut(firstArg) {
if (
firstArg === null ||
typeof firstArg !== 'object' ||
firstArg.behavior === undefined ||
firstArg.behavior === 'auto' ||
firstArg.behavior === 'instant'
) {
// first argument is not an object/null
// or behavior is auto, instant or undefined
return true;
}
if (typeof firstArg === 'object' && firstArg.behavior === 'smooth') {
// first argument is an object and behavior is smooth
return false;
}
// throw error when behavior is not supported
throw new TypeError(
'behavior member of ScrollOptions ' +
firstArg.behavior +
' is not a valid value for enumeration ScrollBehavior.'
);
}
/**
* indicates if an element has scrollable space in the provided axis
* @method hasScrollableSpace
* @param {Node} el
* @param {String} axis
* @returns {Boolean}
*/
function hasScrollableSpace(el, axis) {
if (axis === 'Y') {
return el.clientHeight + ROUNDING_TOLERANCE < el.scrollHeight;
}
if (axis === 'X') {
return el.clientWidth + ROUNDING_TOLERANCE < el.scrollWidth;
}
}
/**
* indicates if an element has a scrollable overflow property in the axis
* @method canOverflow
* @param {Node} el
* @param {String} axis
* @returns {Boolean}
*/
function canOverflow(el, axis) {
var overflowValue = w.getComputedStyle(el, null)['overflow' + axis];
return overflowValue === 'auto' || overflowValue === 'scroll';
}
/**
* indicates if an element can be scrolled in either axis
* @method isScrollable
* @param {Node} el
* @param {String} axis
* @returns {Boolean}
*/
function isScrollable(el) {
var isScrollableY = hasScrollableSpace(el, 'Y') && canOverflow(el, 'Y');
var isScrollableX = hasScrollableSpace(el, 'X') && canOverflow(el, 'X');
return isScrollableY || isScrollableX;
}
/**
* finds scrollable parent of an element
* @method findScrollableParent
* @param {Node} el
* @returns {Node} el
*/
function findScrollableParent(el) {
while (el !== d.body && isScrollable(el) === false) {
el = el.parentNode || el.host;
}
return el;
}
/**
* self invoked function that, given a context, steps through scrolling
* @method step
* @param {Object} context
* @returns {undefined}
*/
function step(context) {
var time = now();
var value;
var currentX;
var currentY;
var elapsed = (time - context.startTime) / SCROLL_TIME;
// avoid elapsed times higher than one
elapsed = elapsed > 1 ? 1 : elapsed;
// apply easing to elapsed time
value = ease(elapsed);
currentX = context.startX + (context.x - context.startX) * value;
currentY = context.startY + (context.y - context.startY) * value;
context.method.call(context.scrollable, currentX, currentY);
// scroll more if we have not reached our destination
if (currentX !== context.x || currentY !== context.y) {
w.requestAnimationFrame(step.bind(w, context));
}
}
/**
* scrolls window or element with a smooth behavior
* @method smoothScroll
* @param {Object|Node} el
* @param {Number} x
* @param {Number} y
* @returns {undefined}
*/
function smoothScroll(el, x, y) {
var scrollable;
var startX;
var startY;
var method;
var startTime = now();
// define scroll context
if (el === d.body) {
scrollable = w;
startX = w.scrollX || w.pageXOffset;
startY = w.scrollY || w.pageYOffset;
method = original.scroll;
} else {
scrollable = el;
startX = el.scrollLeft;
startY = el.scrollTop;
method = scrollElement;
}
// scroll looping over a frame
step({
scrollable: scrollable,
method: method,
startTime: startTime,
startX: startX,
startY: startY,
x: x,
y: y
});
}
// ORIGINAL METHODS OVERRIDES
// w.scroll and w.scrollTo
w.scroll = w.scrollTo = function() {
// avoid action when no arguments are passed
if (arguments[0] === undefined) {
return;
}
// avoid smooth behavior if not required
if (shouldBailOut(arguments[0]) === true) {
original.scroll.call(
w,
arguments[0].left !== undefined
? arguments[0].left
: typeof arguments[0] !== 'object'
? arguments[0]
: w.scrollX || w.pageXOffset,
// use top prop, second argument if present or fallback to scrollY
arguments[0].top !== undefined
? arguments[0].top
: arguments[1] !== undefined
? arguments[1]
: w.scrollY || w.pageYOffset
);
return;
}
// LET THE SMOOTHNESS BEGIN!
smoothScroll.call(
w,
d.body,
arguments[0].left !== undefined
? ~~arguments[0].left
: w.scrollX || w.pageXOffset,
arguments[0].top !== undefined
? ~~arguments[0].top
: w.scrollY || w.pageYOffset
);
};
// w.scrollBy
w.scrollBy = function() {
// avoid action when no arguments are passed
if (arguments[0] === undefined) {
return;
}
// avoid smooth behavior if not required
if (shouldBailOut(arguments[0])) {
original.scrollBy.call(
w,
arguments[0].left !== undefined
? arguments[0].left
: typeof arguments[0] !== 'object' ? arguments[0] : 0,
arguments[0].top !== undefined
? arguments[0].top
: arguments[1] !== undefined ? arguments[1] : 0
);
return;
}
// LET THE SMOOTHNESS BEGIN!
smoothScroll.call(
w,
d.body,
~~arguments[0].left + (w.scrollX || w.pageXOffset),
~~arguments[0].top + (w.scrollY || w.pageYOffset)
);
};
// Element.prototype.scroll and Element.prototype.scrollTo
Element.prototype.scroll = Element.prototype.scrollTo = function() {
// avoid action when no arguments are passed
if (arguments[0] === undefined) {
return;
}
// avoid smooth behavior if not required
if (shouldBailOut(arguments[0]) === true) {
// if one number is passed, throw error to match Firefox implementation
if (typeof arguments[0] === 'number' && arguments[1] === undefined) {
throw new SyntaxError('Value could not be converted');
}
original.elementScroll.call(
this,
// use left prop, first number argument or fallback to scrollLeft
arguments[0].left !== undefined
? ~~arguments[0].left
: typeof arguments[0] !== 'object' ? ~~arguments[0] : this.scrollLeft,
// use top prop, second argument or fallback to scrollTop
arguments[0].top !== undefined
? ~~arguments[0].top
: arguments[1] !== undefined ? ~~arguments[1] : this.scrollTop
);
return;
}
var left = arguments[0].left;
var top = arguments[0].top;
// LET THE SMOOTHNESS BEGIN!
smoothScroll.call(
this,
this,
typeof left === 'undefined' ? this.scrollLeft : ~~left,
typeof top === 'undefined' ? this.scrollTop : ~~top
);
};
// Element.prototype.scrollBy
Element.prototype.scrollBy = function() {
// avoid action when no arguments are passed
if (arguments[0] === undefined) {
return;
}
// avoid smooth behavior if not required
if (shouldBailOut(arguments[0]) === true) {
original.elementScroll.call(
this,
arguments[0].left !== undefined
? ~~arguments[0].left + this.scrollLeft
: ~~arguments[0] + this.scrollLeft,
arguments[0].top !== undefined
? ~~arguments[0].top + this.scrollTop
: ~~arguments[1] + this.scrollTop
);
return;
}
this.scroll({
left: ~~arguments[0].left + this.scrollLeft,
top: ~~arguments[0].top + this.scrollTop,
behavior: arguments[0].behavior
});
};
// Element.prototype.scrollIntoView
Element.prototype.scrollIntoView = function() {
// avoid smooth behavior if not required
if (shouldBailOut(arguments[0]) === true) {
original.scrollIntoView.call(
this,
arguments[0] === undefined ? true : arguments[0]
);
return;
}
// LET THE SMOOTHNESS BEGIN!
var scrollableParent = findScrollableParent(this);
var parentRects = scrollableParent.getBoundingClientRect();
var clientRects = this.getBoundingClientRect();
if (scrollableParent !== d.body) {
// reveal element inside parent
smoothScroll.call(
this,
scrollableParent,
scrollableParent.scrollLeft + clientRects.left - parentRects.left,
scrollableParent.scrollTop + clientRects.top - parentRects.top
);
// reveal parent in viewport unless is fixed
if (w.getComputedStyle(scrollableParent).position !== 'fixed') {
w.scrollBy({
left: parentRects.left,
top: parentRects.top,
behavior: 'smooth'
});
}
} else {
// reveal element in viewport
w.scrollBy({
left: clientRects.left,
top: clientRects.top,
behavior: 'smooth'
});
}
};
}
if (typeof exports === 'object' && typeof module !== 'undefined') {
// commonjs
module.exports = { polyfill: polyfill };
} else {
// global
polyfill();
}
}());
Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.9 KiB

+13
View File
@@ -0,0 +1,13 @@
<svg viewBox="0 0 134 12" version="1.1" xmlns="http://www.w3.org/2000/svg">
<g>
<path
d="m133.83629 9.42089615c-.443181 1.77759655-2.24359 2.85941795-4.021394 2.41613355-1.777078-.4431808-2.858899-2.24369331-2.415511-4.02118615.442973-1.77780392 2.243382-2.85972904 4.020668-2.41654828 1.7777.44318074 2.859418 2.24390065 2.416237 4.02160088z"
fill="#f7931a"/>
<path
d="m132.080261 8.14548127c.066052-.44152167-.270118-.67887327-.729786-.83721136l.14911-.598097-.364064-.09073074-.145169.58233577c-.095708-.02384922-.194008-.04635044-.291687-.06864427l.146207-.58617239-.363857-.09073074-.149213.59788961c-.079221-.01804245-.15699-.03587751-.232478-.05464581l.000415-.00186647-.502078-.12536395-.096849.388846s.270119.06190429.264416.0657409c.14745.03681075.174099.13438518.16964.21173961-.408547 1.63844151 0 0-.408547 1.63844151-.018043.04479506-.063771.11198765-.166841.08647935.003629.0052883-.264623-.06605197-.264623-.06605197l-.180735.41673922.47377.11810549c.088138.02208645.174514.04520983.259541.06698521l-.150665.60494066.363649.0907308.149213-.59851181c.099338.02695999.195771.05184613.290131.07528059l-.148694.59571212.364063.0907307.150665-.6038001c.620806.1174834 1.087628.070096 1.284125-.49139764.158338-.45209828-.007881-.71288434-.334511-.88293965.23787-.05485322.41705-.21132484.464852-.53453364zm-.831819 1.16643431c-.112506.45209828-.873711.20769561-1.120499.14641348l.199919-.80143754c.246788.06159322 1.038167.18353532.92058.65502406zm.11261-1.17296693c-.102656.41124353-.736215.20230362-.941733.15107964l.181254-.72688279c.205518.05122398.867385.14682825.760479.57580315z"
fill="#fff"/>
<path
d="m7.63783784 11.9027027v-2.74054053h-4.8972973v-1.88108109h3.97297298v-2.74054054h-3.97297298v-1.8h4.8972973v-2.74054054l-7.63783784.01621621v11.88648649zm4.15135136.0162162v-11.9189189h-2.74054056v11.9189189zm4.3621621-.0162162v-6.94054054l3.8918919 6.94054054h2.9675677v-11.9027027h-2.7405407v6.95675676l-3.8756756-6.92432432h-2.9837838v11.87027026zm12.9405406.0162162c.6162162-.0108108 1.1972973-.1378378 1.7432432-.3810811.545946-.2432432 1.0216217-.5702702 1.4270271-.9810811.4054054-.4108107.7243243-.89189179.9567568-1.44324315.2324323-.55135136.3432431-1.13513518.3324324-1.75135139v-7.36216216h-2.7405406v7.37837838c0 .24864864-.0432432.48108108-.1297297.6972973s-.2108108.4054054-.372973.56756753c-.1621622.16216224-.3513513.29189191-.5675676.38918922-.2162162.0972973-.4432432.14594596-.681081.14594596-.4864866 0-.9081082-.16756761-1.2648649-.50270271-.3567568-.35675676-.5351352-.77297298-.5351352-1.24864865v-7.42702703h-2.7405405v7.44324325c.0108108.61621621.1324324 1.1945946.3648649 1.73513514.2324324.54054054.5648648 1.02702711.9972973 1.45945951.4216216.4108107.9027027.727027 1.4432433.9486486.5405405.2216216 1.1135134.3324324 1.7189189.3324324zm8.8378378-.0162162v-6.94054054l3.8918919 6.94054054h2.9675676v-11.9027027h-2.7405406v6.95675676l-3.8756756-6.92432432h-2.9837838v11.87027026zm10.7351352.0648649c.8108108-.0432433 1.5621621-.2243243 2.254054-.5432433.6918919-.3189189 1.2945946-.7432432 1.8081081-1.272973.5135135-.52972968.9162162-1.1432432 1.2081082-1.84054049.2918919-.69729729.4378377-1.44594595.4378377-2.24594594 0-.81081081-.1486486-1.57297297-.4459459-2.28648649-.2972973-.71351351-.7027027-1.34054054-1.2162162-1.88108108s-1.1189189-.97837838-1.8162162-1.31351351c-.6972973-.33513514-1.4405406-.52432432-2.2297297-.56756757v-.01621622h-2.7405406v11.9675676zm0-2.74978378v-6.4540541c.4216216.04324325.8108108.15945946 1.1675675.34864865.3567568.18918919.6702703.43243244.9405405.72972973.2702703.2972973.4810812.63783784.6324325 1.02162163.1513513.38378378.227027.78648648.227027 1.2081081 0 .41081082-.0756757.8-.227027 1.16756758-.1513513.36756756-.3594594.68918919-.6243243.96486486-.2648648.27567567-.5783784.5027027-.9405406.68108112-.3621621.17837833-.754054.28918914-1.1756756.33243243zm15.2918919 2.78221618v-2.74054053h-4.9135135l4.9783783-9.24324326-8.9189189-.01621621v2.75675676h4.3297297l-4.9783784 9.24324324zm7.0702702-.0162162 1.3621622-5.96756759 1.572973 5.96756759h2.708108l3.518919-11.9837838h-2.8702703l-1.9297297 6.60000001-1.7513513-6.60000001h-2.691892l-1.508108 6.63243243-2.2054055-6.63243243h-2.8864865l3.9567568 11.9837838zm10.5932433-.0810811.4864864-1.4432432h3.745946l.4702703 1.4432432h2.8864865l-3.8432433-11.9027027h-2.5945945l-4.0540541 11.9027027zm3.3567567-4.18970272h-1.9297297l.9891892-2.88648648zm7.7837838 4.18970272v-6.94054054l3.8918917 6.94054054h2.9675678v-11.9027027h-2.7405405v6.95675676l-3.8756757-6.92432432h-2.9837838v11.87027026zm17.3189192.0972973v-2.74054053h-4.913513l4.978377-9.24324326-8.918918-.01621621v2.75675676h4.32973l-4.978379 9.24324324zm3.81081-.0810811v-11.9189189h-2.74054v11.9189189zm7.281081.0324324c.313514 0 .62973-.0243243.948649-.072973.318919-.0486486.62973-.127027.932433-.2351351v.2918919h2.756756v-6.66486483h-5.14054v2.74054054h2.383784v.59999996c-.313514.22702708-.654054.38918923-1.021622.48648653-.367567.0972973-.737838.13243245-1.11081.10540544-.372974-.0270271-.735136-.11891895-1.086488-.27567573-.351351-.15675678-.667566-.37567566-.948648-.65675674-.313513-.31351351-.551351-.67027027-.713513-1.07027027-.162163-.4-.243243-.80540541-.243243-1.21621621 0-.41081082.08108-.81621623.243243-1.21621622.162162-.4.4-.75675676.713513-1.07027028.313513-.31351351.67027-.54864864 1.07027-.7054054.4-.15675675.805405-.23513513 1.216216-.23513513s.816217.07837838 1.216217.23513513c.4.15675676.756756.39189189 1.07027.7054054l1.945946-1.94594594c-.583784-.58378379-1.243243-1.02162162-1.978379-1.31351352-.735134-.29189188-1.486486-.43783783-2.254054-.43783783-.767567 0-1.518919.14594595-2.254054.43783783-.735134.2918919-1.394594.72972973-1.978377 1.31351352-.583784.58378379-1.01892 1.24324324-1.305407 1.97837838-.286486.73513513-.429729 1.48648649-.429729 2.25405406 0 .76756756.143243 1.51621621.429729 2.24594594.286487.72972975.721623 1.38648646 1.305407 1.97027027.583783.5837838 1.243243 1.0216216 1.978377 1.3135135.735135.2918919 1.486487.4378378 2.254054.4378378z"
fill="#000"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.0 KiB

+148
View File
@@ -0,0 +1,148 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 512 512">
<path fill="#d0103a" d="M0 0h512v512H0z"/>
<path fill="#fedf00" d="M0 0h348.2v512H0z"/>
<path fill="#0018a8" d="M0 0h163.8v512H0z"/>
<path fill="#c7b37f" d="M240.3 173.3c6.2 0 8.7 5.3 14.9 5.3 3.8 0 6-1.2 9.3-3.1 2.4-1.3 3.8-2 6.5-2s4.4.8 5.8 3.1a9 9 0 011 5.4 32 32 0 01-2.1 6.7c-.5 1.2-1 2-1 3.3 0 3.3 4.4 4.4 7.4 4.5.7 0 6.3 0 9.7-3.4-1.9 0-4-1.5-4-3.4 0-2 1.5-3.5 3.5-4.1.4-.1 1 .2 1.4 0 .5-.2.2-.8.7-1.1 1-.8 1.6-1.3 2.9-1.3a3 3 0 012 .6c.3.2.5.6.9.6 1 0 1.4-.6 2.3-.6.7 0 1.2 0 1.8.4.6.3.6 1.2 1.2 1.2.3 0 1.9-.6 2.8-.6 1.7 0 2.7.6 3.8 2 .3.3.5 1 .8 1a5 5 0 013.9 2.4c.2.3.5 1.1.9 1.3.4.1.7.1 1.3.5a4.8 4.8 0 012.3 3.9c0 .5-.3 1.2-.4 1.7-1.5 5.2-5.1 7-8.7 11.4-1.6 2-2.8 3.5-2.8 6 0 .6.8 1.7 1 2.2-.1-1.2.4-2.6 1.6-2.7 1.7 0 3 1.2 3.2 2.8 0 .4 0 1.1-.2 1.5.9-.6 2-1 3.2-1.1a9.9 9.9 0 011.5 0 13 13 0 017.4 3 16.9 16.9 0 015.9 13.4c-.7 4.3-.3 11.9-11 15 2 .8 3.3 2.3 3.3 4.1 0 2-1.5 3.8-3.5 3.8a3.5 3.5 0 01-2.8-1.1c-2.2 2.2-2.7 4.5-2.7 7.7 0 1.9.4 3 1.2 4.7a9 9 0 003 4.2c.8-1.2 1.6-2 3-2 1.5 0 2.7.4 3.3 1.7.1.3 0 .7.2 1 .2.5.7.6 1 1.1.3.8 0 1.4.3 2.2.2.5.7.6 1 1 .3.9.4 1.4.4 2.3 0 2.4-2.2 4-4.6 4-.8 0-1.2-.2-1.9-.1 1.4 1.3 2.4 2 3.5 3.6a14.1 14.1 0 012.3 8.2c0 3.6-.6 5.8-2.2 9a16 16 0 01-5.6 6.8 28 28 0 01-12.8 5c-3.4.7-5.3 1-8.8 1.2l-11.3.6c-5.7.4-9.7 1.2-13.8 5.3 2 1.4 3.3 2.8 3.3 5.2 0 2.4-1.5 4.2-3.9 5-.5.1-1 0-1.4.2-.6.3-.6 1-1.2 1.4a5 5 0 01-3 .8c-2.2 0-3.6-.5-5.2-2-1.7 1.4-2.3 2.7-4.3 3.9-.7.3-1 .8-1.7.8-1.2 0-1.8-.7-2.7-1.4a18.4 18.4 0 01-3.6-3.3c-1.8 1.1-2.9 2-5 2a5.2 5.2 0 01-3.1-.9c-.6-.3-.7-.9-1.3-1.2-.6-.4-1-.2-1.7-.5-2.4-1-4-2.8-4-5.5 0-2.3 1.5-3.8 3.6-4.7-4-4-8-4.7-13.6-5-4.4-.4-7-.4-11.3-.7-3.4-.2-5.4-.6-8.8-1.1-2.6-.4-4.1-.6-6.5-1.7-8.2-3.8-13.4-9-14.5-18v-2c0-4.7 1.8-7.5 5-10.8-.8-.2-1.3 0-2.2-.2-2-.8-3.5-2.2-3.5-4.4 0-.8 0-1.4.4-2 .3-.6.8-.7 1-1.2.1-.8 0-1.3.3-2 .2-.5.6-.5.8-1 .7-1.5 1.6-2.7 3.3-2.7 1.4 0 2.3.8 3 2 1.4-.7 1.8-1.7 2.6-3 1.3-2.2 1.8-3.7 1.8-6.2a11 11 0 00-.7-4.4c-.4-1.2-.5-2-1.4-3a3.5 3.5 0 01-2.8 1.2c-2.3 0-4-2-4-4.3 0-1.7.8-3 2.4-3.7-1.3-1-2.4-1.2-3.7-2-2.1-1.4-2.9-2.7-4.2-4.8-1-1.4-1.2-2.3-1.6-3.8a15 15 0 01-.9-5v-1.3c.6-3.9 1.3-6.4 3.8-9.5a11 11 0 014.6-3.9 11.6 11.6 0 016.5-1.3c1 .2 1.5.2 2.3.7.3.2.9.7.9.3l-.2-1c0-1.7 1.2-3.2 2.8-3.2 1.2 0 1.7 1 2.3 2 .4-.6.6-1 .6-1.7 0-2.8-1.5-4.2-3.2-6.3-3.7-4.7-8.4-6.9-8.4-12.8 0-1.8.9-3 2.4-4 .4-.2 1 0 1.5-.2.3-.3.3-.7.5-1.1a4 4 0 011.3-1.3c.8-.8 1.6-.5 2.5-1.2.5-.3.6-.7 1-1.2 1-1.2 2-1.8 3.6-1.8.8 0 1.3 0 2 .3.3 0 .8.5.9.4.1-.2.6-.7 1.1-1 .7-.3 1-.4 1.8-.4.9 0 1.4.5 2.3.5.4 0 .4-.3.7-.5.8-.5 1.2-.8 2.2-.8 1 0 1.4.3 2.2.8.7.4.8 1 1.6 1.5l1.2.3c2 .6 3.6 2 3.6 4.2 0 1.2-.2 2-1.1 2.8-.7.6-1.4.5-2.3.8a13 13 0 009 2.8c3.5 0 7.6-1.3 7.6-4.7 0-1.6-.9-2.4-1.5-3.8a15 15 0 01-1.7-6.9c0-2.2.2-3.5 1.5-5.3 1.3-1.9 3-2.3 5.2-2.3z"/>
<g fill="none" stroke="#703d29">
<path stroke-linejoin="round" stroke-width=".5" d="M217.9 191.2c.2.9.9 1.6 2 2a3 3 0 003-1.1c.8-1 .7-2.3.5-3.3a3.8 3.8 0 00-1.4-1.8l-4.1 4.2z"/>
<path stroke-linecap="round" stroke-width=".5" d="M320.8 252.9c-1-2.3-3.4-1.3-3.6 0-.3 3 2.3 3.8 4.1 3.3.9-.2 1.6-.8 2-1.5.5-.8.6-2 .3-3a4 4 0 00-.7-1.3 4 4 0 00-1-1c-.7-.4-1.5-.5-2.7-.5-4.4 0-8.3 5.3-9.6 10.8a23.6 23.6 0 00-.2 9.6 18 18 0 004.7 9 20 20 0 007.9 4.7c1.1.3 2.2.3 3.1 0 2.7-.5 3.9-3 2.6-5.5-1.1-2-4.3-3.2-5.8-.6a2.6 2.6 0 00-.4 1.3c0 .7.3 1.5.8 1.8 1.2.8 3 .6 3-1.5"/>
<path stroke-width=".7" d="M307 283.2a9 9 0 015.3-3c2.4-.2 4.5.5 6.6 1.6a14.9 14.9 0 018.6 13.6c0 3-.8 6-1.5 7.6-.7 1.3-2.5 7.1-12.3 11.2a67.4 67.4 0 01-20.5 3c-8.4.4-16 .7-20.5 6.2"/>
<g stroke-width=".6">
<path d="M309.1 292.6c-.2-.9 0-1.7.7-2.7 1-1.3 2.9-1.7 4.7-.7.6.3 1.3.8 2 1.7l1 1.2.8 2c2 5.6-1.2 11.7-5.2 14.1-3.2 2-7 2.8-11.5 3.3l-5.3.3h-7.6a56.3 56.3 0 00-5.8 0l-6 .6-4.4.8-1.5.4-1 .3a31.9 31.9 0 00-7.7 3.3c-.7.4-1.5.9-2 1.4l-1.1 1c-1.5 1.4-3.1 3-3.5 5.3v1.3c0 1.4 1.1 3.4 4.3 4m4.4-136.1c.6 1.2 1 2 .6 3.1-.4 1.4-1.4 2.3-2.8 2.3-3.2 0-5-3.8-3.6-6.2 2.5-4.3 7.4-1.9 12 .2-.3-1-.7-1.4-.6-2.8 0-3.3 2.6-4.8 3.6-8 .6-1.8.8-3.4-.6-4.7-1.1-1.2-2.5-1.1-4-.5-3.1 1.2-6.8 4.6-13.3 4.7-6.5 0-10.3-3.5-13.4-4.7-1.5-.6-2.9-.7-4 .5-1.4 1.3-1.2 3-.6 4.8 1 3 3.5 4.6 3.6 8 0 1.3-.3 1.6-.6 2.7 4.6-2 9.7-4.7 12-.2 1.3 2.5-.4 6.2-3.6 6.2-1.4 0-2.4-1-2.8-2.3-.4-1.1 0-2.2.6-3.1"/>
<path stroke-linecap="round" d="M251.7 191.9c1.2 1 2 2.1 1.9 4-.1 2-.7 2.5-2.2 3.6m1.9-3c-.1 1.2-.6 2-1.8 2.5"/>
</g>
<path fill="#c7b37f" stroke="none" d="M221.4 186.6l.5.4.6.7.4.8.2.6v1.5l-.2.7-.4.5-.4.5-.7.3-.9.2-.7.2-.8-.4-.8-.5-.4-.7-.3-.8v-.3l3.9-3.7z"/>
<path stroke-linecap="round" stroke-width=".5" d="M220.2 189.7c-.3-1.3-1.8-1.6-2.4-.8-1 1.2-.3 3.2 1.6 3.8a3 3 0 003-1.1c.8-1 .8-2.3.5-3.2-.2-.7-.7-1.2-1.4-1.7-2.2-1.7-5.7-1.3-6.8 1.5-1.5 3.6 1.7 6.3 4.7 8.3 3.8 2.5 8 3 11.3 3 7.3-.1 12.9-3.6 16.5-5.6.8-.5 1.7-.4 2.1.2.5.6.5 1.5-.2 2.2"/>
<path stroke-width=".5" d="M198.4 289l-1.6.5-1.7 1.3-.7 1-.9 1.6-.4 1.2-.3 1.5-.2 1m15.2-8v1.4l-.3 1-.7 1.7-1.1 1.5-1.2 1-1 .4-1.2.3"/>
<path stroke-width=".6" d="M255.8 327.3c-.3 1.3-1.5 2.8-4.3 3.4h-.5"/>
<path stroke-width=".7" d="M323.4 285a14.6 14.6 0 014.5 10.8c-.1 2.8-.8 6-1.6 7.5-.7 1.3-2.5 7.2-12.3 11.2a67.7 67.7 0 01-20.5 3.1c-8.2.4-15.8.7-20.3 6"/>
<path stroke-width=".5" d="M310 290.3c.6-.9 2.8-1.9 4.6-1a5 5 0 012 1.7"/>
<path stroke-width=".7" d="M321.3 283l1.1.4a5.6 5.6 0 003.2 0c2.2-.6 3.7-2.7 2.5-5.5a4.5 4.5 0 00-1.4-1.7"/>
<path stroke-linecap="round" stroke-width=".5" d="M192.2 223.8c-1.5 1-2.6 1.2-3.8 2.5a22.5 22.5 0 00-2.1 5.5m36.9-41.4c0 1.4-1 2.3-2.4 2.6"/>
<path stroke-width=".5" d="M317.7 217.6c3.8 0 14.8 2.9 14.9 15.8 0 12.8-8 14.9-11.1 15.7"/>
<path stroke-width=".5" d="M318.7 217.6c6.5-.3 13.2 4.5 13.5 16.5.3 9.4-6.4 13.6-9.6 14.5m-7.6 14.1l.2-1.2.4-2 .6-1.7.7-1.3.8-1m6.3-2.7l-.1 1.2-.4.9-.5.8-.7.5-1 .3h-1.5m-11.4-42.3l.3-1.3.6-1.3.7-1.2 1.4-1.7 1-1.2 1.7-1.7 1.5-1.5 1-1.1 1.2-1.5 1-1.7.7-1.3.4-1.8.1-2.1-.2-.7M310 296.7l1.3-.3 1-.5.5-.5.4-.7.2-1v-.6M187 283.3l.9.1h1.2l1.3-.5m4-29.3l-.2 1.2-.2.4-.4.5-.5.4-.6.3-.8.1h-.5m8-12.5l-.3 1.8-.4.7-.7 1-1 .7-.9.5-1.8.4m12.2-31.8l-.3 1-.5.8-.6.9-.8.7-1 .5-.8.2h-.6m.3-5v.8"/>
<g stroke-width=".5">
<path stroke-linecap="round" d="M203.4 243.3a5.5 5.5 0 01-1.6 1M322.2 280l.4.2c1 .7 3.3-.2 2.7-2"/>
<path d="M318.2 255.7c.8 1 2.4 1.3 3.6 1 .9-.2 1.5-.8 2-1.6.4-.8.6-1.9.3-3a4 4 0 00-.7-1.3 5.4 5.4 0 00-1.1-1.1l-.3-.2m5.2 27.2a3.1 3.1 0 000-.6c0-.9-.4-1.7-1-2.3-.2-.2-.4-.5-.7-.6m.4.3c0-1.5-1.3-2.5-2.8-2.8m-3.3 2.3c-.4-.3-.8-.5-1-.9a12.6 12.6 0 01-3.5-8.5c0-3.3 1.3-6.7 2.8-8M273 323.3l1.5-1.3 1-.8 1.8-1.1 1.8-.9 1.2-.3 2.5-.5 2.9-.5M262 333.4a14.1 14.1 0 01-6.1 5 14.1 14.1 0 01-6.1-5"/>
<path stroke-linecap="round" d="M251.5 330.1a8 8 0 01-1.7 3.3"/>
<path d="M251.8 328.4l-.4 1.8m-1.8 3.3l-.8.8-1.4.7-1.5.5m-4.5-142.2c.2-.6.4-1.1.3-2.1 0-3.4-2.5-4.9-3.5-8-.6-1.8-.9-3.4.5-4.8 1.2-1.1 2.5-1 4-.5 3.2 1.2 6.9 4.7 13.4 4.8-6.5-.1-10.2-3.6-13.3-4.8-1.6-.6-3-.8-4.2.4-1.4 1.3-1 3-.4 5 1 3 3.3 4.5 3.4 7.9 0 1-.2 1.5-.4 2m14.9-10.7c6.4-.4 11.9-4.7 13.7-5 1.6-.3 2.4-.2 3.6.9-1.2-1.1-2.5-1-4-.5-3 1.2-6.8 4.7-13.3 4.8m63.7 90.3a12.4 12.4 0 01-5-9.9c0-3.3 1.3-6.7 2.9-8m-56 78a14.1 14.1 0 01-6 5 14 14 0 01-6.2-5"/>
<path stroke-linecap="round" d="M245.3 195l1.9-1c.8-.6 1.9-.5 2.3 0 .5.7.6 1.7-.1 2.3"/>
<path d="M235.8 199.4c4.4-.9 8-2.9 10.6-4.4m25.9 131.4l.6.7.2.7c.2 1.2-.6 2-1.5 2.1a2.7 2.7 0 01-2.8-1.6m-33.3-129.1c4.4-1 8-2.9 10.7-4.4m78 85.5c-.7.3-1.2.3-2.2-.2l-1.5-.8c-2-1.1-4.5-3-6.8-7.2a15 15 0 01-1.3-3.6c-.2-.9-.4-1.8-.4-2.7a20.5 20.5 0 01.5-5 16.2 16.2 0 013.2-7.2c1-1.3 1.7-2 3.5-2m-115-31.5a5.7 5.7 0 012.1 4.6c0 2.5-2 6.5-7.2 8-2 .5-3.8 0-5-.7"/>
<path d="M205 228.5c1 .6 1.3 1.4 1.3 2.6 0 .8-.5 2-1.5 3a9.9 9.9 0 01-7 3.2 8.2 8.2 0 01-4.8-1.4 7.3 7.3 0 01-3-4.3"/>
<path d="M205 233.8c1 1 1.3 2.2 1.3 3.7 0 2.2-.9 3.9-3 5.7a5 5 0 01-1.5 1m103.6-17.6v2.9m-.3-3.6v4m.3-12.6v5.2m-.3-6.3v7m-1.5 65.7c-1 2-1.8 3-3.3 4.5a15.7 15.7 0 01-4.7 3.3 19.7 19.7 0 01-5.2 1.7c-2.1.5-3.4.6-5.5.7-2 0-3.1 0-5.1-.2-2.1 0-3.3-.4-5.4-.6-1.7-.1-2.7-.3-4.5-.3a22.8 22.8 0 00-8.7 1.5c-2.2.9-4.6 2.4-5.1 3-.5-.6-3-2.1-5.1-3a22.8 22.8 0 00-8.8-1.5c-1.7 0-2.7.2-4.4.3-2.1.2-3.3.5-5.4.6a37.3 37.3 0 01-10.6-.5c-2.1-.5-3.3-.8-5.3-1.8a15.7 15.7 0 01-5-3.7m33.6 42.7l1.5-.2m24.2-1.9l1.4-.1 1.4-.6 1-.5 1.3-1.6.3-.6.2-1.3v-.6M314 218.8c.6-2.1-.2-4.3-2.2-4.3m-105.6 37.3a6.5 6.5 0 01-2.9 3.7m3-37.4a5.2 5.2 0 01-3 3.2c-1.4.7-3.2 0-4-.6"/>
<path stroke-linecap="round" d="M195 225.9c1.3.6 2.5-.3 2.3-1.9a2.3 2.3 0 00-2-1.8"/>
<path d="M200.1 293.3c.3.3.4.6.7.6.5.1 1 .3 1.5-.4.7-.9.3-2.2-.4-3.1a4 4 0 00-4.7-.7c-.5.3-1.3.7-2 1.6l-.9 1.3-.9 2c-1.6 4.6.3 9.5 3.4 12.5"/>
<path stroke-linecap="round" d="M272.2 326.3l.5.6.2.7c.2 1.2-.6 2-1.6 2-1.3.2-2.2-.6-2.7-1.6"/>
<path d="M311.6 187.8a6 6 0 015 5.6c0 3.6-1.2 4.9-3.1 7.4-2 2.7-8.5 7.7-8.5 13.4 0 3.4 1 5.6 3.4 6.7 1.6.7 3.5 0 4.3-.8 2-1.9 1.3-5.2-1-5.6-2.5-.4-3 3.7-.5 3.4m14.3 55.3a3 3 0 00-2.9-2.5 3 3 0 00-3 3c0 .8.4 1.5.9 2"/>
<path d="M307.1 220.1a5.7 5.7 0 00-2.1 4.6c0 2.5 2 6.5 7.2 8 1.9.5 3.8.4 5-.3m-124.9-8.2a7.5 7.5 0 00-3.8 2.7 13.5 13.5 0 00-1.9 4.9c-.1.7-.3 3 .1 5.3a12.7 12.7 0 001.9 4.5l.8 1 .9.7m51.2 73.6c3.9 1.8 6.7 3 9.2 6.9a8.2 8.2 0 01-1.7 10 6.6 6.6 0 01-5.4 1.6c-1.5-.2-3-1.3-3.2-2m-37.2-90a6.6 6.6 0 013.1 6c0 3-1.5 4.8-3.2 5.9"/>
<path stroke-linecap="round" d="M201.2 253.1c3.3 4.1 5 6.5 5.1 11.3.1 4.6-1.4 7.7-4 11"/>
<path d="M263.8 199.5a3.3 3.3 0 001.3-1.8c.4-1.2.4-2.2-.3-3.1.8 1 .9 1.9.7 3.1-.2.8-.7 1.2-1.3 1.8m41.2 69v12.8a19.6 19.6 0 01-.3 3.4m0-17.5V283l-.4 2.1m.4-34.3v11.6m.3-10.7v9.4m0-21.5v7.1m-.3-7.9v8.8m.3-15.2v2.8m-.3-3.4v4m-1.4 52.2l-.3.5a15 15 0 01-3.4 4.6 15.7 15.7 0 01-4.6 3.2 19.7 19.7 0 01-5.3 1.8c-2 .5-3.3.6-5.5.7-2 0-3 0-5-.2-2.2-.1-3.3-.4-5.4-.6-1.8-.1-2.8-.3-4.5-.3a22.9 22.9 0 00-8.8 1.5c-2.1.9-4.5 2.4-5 3a17 17 0 00-5.1-3 22.9 22.9 0 00-8.8-1.5c-1.7 0-2.7.2-4.5.3-2 .2-3.2.5-5.4.6a37.3 37.3 0 01-10.5-.5 19.8 19.8 0 01-10-5 17.6 17.6 0 01-1.9-2.3m-1.6-2.5a8 8 0 01-1.8 6.2c-.7.7-2.2 2-4 2-3 .1-4-2-4.1-2.5"/>
<path d="M204.5 287a8.2 8.2 0 011.5 2.1c.7 1.4.5 3.8-.1 5a3.7 3.7 0 01-.3.3m-16.1 14.4c1.8 2 4.5 4 8.7 5.7a67.4 67.4 0 0020.5 3.1c8 .3 15.5.7 20 5.7m13.9-3.3a12 12 0 013.2 4.5m-5.9 9.2a7 7 0 01-.5.5 6.6 6.6 0 01-5.3 1.6 5 5 0 01-3.5-2m-4.3-2.4l.3.3a6 6 0 004 2m21.6 0a14.1 14.1 0 01-6.1 4.9 14.1 14.1 0 01-6.1-5l-.2-.3m12.4.3l.6.6a6.6 6.6 0 005.3 1.6 4.4 4.4 0 003.3-2l.4-.6"/>
<path d="M271.2 333.3l-.6 1-.9.7-1.3.6H267"/>
<path d="M274.4 324.2a6.1 6.1 0 011.9 2.3c.2.6.4 1.3.4 2a4.7 4.7 0 01-1.1 3.2 6 6 0 01-4.4 2 4.4 4.4 0 01-.3 0m.1-.2a5.5 5.5 0 01-4.1-1.7m51-54.3a19 19 0 01-4-5.2 15 15 0 01-1.3-3.6c-.2-.9-.4-1.7-.4-2.6 0-1.6.1-3.2.5-5a16.7 16.7 0 013.3-7.3c.5-.6 1-1.4 1.6-1.8m-1-60.6c2 .2 3.8 2.3 3.8 4.5 0 3.1-1 4.4-3.5 7.4-2.1 2.7-8.5 7.3-8.3 11.7 0 .8.5 1.6 1 2.2M307 220c.4.5 1 .8 1.6 1.1a4 4 0 003.4-.2m-16.9-34.6a4.8 4.8 0 011.8 2.1c1.4 3.6-1.8 6.3-4.8 8.3a17 17 0 01-6.6 2.6"/>
<path d="M291.7 193.2c-.7 0-1.6-.2-2.5-1.2a2.7 2.7 0 01-.6-.7m-11.9 3.9a3.7 3.7 0 01-1-.8c-.7-.8-1.2-1.9-.7-3.5.5-1.5 3-5.8 3-8.7.3-4.5-1.5-7.2-4.2-8.2"/>
<path stroke-linecap="round" d="M277.9 181.2l-.1 1.7-.5 1.7-.9 2.3-.7 1.6-.7 1.5-.3 1-.2.8.1.8m30.5 101c0 .3.4.6.4.6a6.2 6.2 0 004.4 2.5c3 0 3.7-2.1 3.8-2.6.4-2.3-.4-3-1.6-3.6 0 0-.7-.3-1.5-.2"/>
<path d="M189.6 283.5a5.5 5.5 0 01-3 0c-2.3-.7-4-2.9-3.1-5.5m10.7-25.5c.2.2.3.6.3.8.3 3-2.2 3.8-4 3.4a4.5 4.5 0 01-2.5-1.9 3.8 3.8 0 01-.5-1.8m17.7-19c.4.5.8 1 1 1.5m-1-6.8c.5.3.8.6 1 1"/>
<path stroke-linecap="round" d="M206.3 232.4a6.8 6.8 0 01-1.3 2 9.9 9.9 0 01-7 3.1 8.2 8.2 0 01-4.8-1.4 7.6 7.6 0 01-3.3-4.4"/>
<path d="M204.3 220.2a6.2 6.2 0 012 2.7"/>
<path stroke-linecap="round" d="M206.3 226.6a9.4 9.4 0 01-7 6.3 7 7 0 01-5.2-.9"/>
<path d="M192 226c.2 2.1 1.7 3.7 4.3 3.8 3.8 0 6-5.4 2.7-9.3"/>
<path stroke-linecap="round" d="M183.6 244.4c.5.7 1.2 1.3 1.8 1.9a13.4 13.4 0 004.8 2.6m4.2.4c3.4-.4 5.3-2.9 4.9-5.8-.3-2.3-2.4-4-3.8-4"/>
<path d="M199.9 214.5c1.4 0 2.3 1.3 2.2 2.4"/>
<path stroke-linecap="round" d="M199.5 194.5a9.2 9.2 0 004 4.6M319 224a3.7 3.7 0 01-3.3 5.7 4.2 4.2 0 01-3.5-2"/>
<path d="M305.4 199.3v12.6"/>
<path stroke-linecap="round" d="M195 225.9c1.2.8 2.6-.6 2-2.1-.3-1-1.8-2.1-3.8-.8-2.1 1.5-1.5 6.3 2.7 6.3 3.7.1 6-5.4 2.7-9.2-3.2-3.7-9-2.9-13 .2a17.1 17.1 0 00-5.6 9.3 17 17 0 000 7.4 16.7 16.7 0 002.4 6l1 1.3 1.6 1.6a12 12 0 008.3 3c3.8-.1 6-2.8 5.5-5.9-.4-3-3.4-4.5-5.4-3-1.3.9-1.8 3.8.6 4.5 1.3.4 2.5-1.3 1.6-2.3m103.6-57.5c2.2-1.2 3.8-1 5 .7a7.9 7.9 0 011.3 5.8c-.4 2.2-1 3-2.8 4.6"/>
<path stroke-linecap="round" d="M304.4 185.6c2.5-1.6 5.2-1 6.6 1.3a7.3 7.3 0 011.3 4.9 9 9 0 01-4.6 7.3"/>
<path d="M316 191.3c2 .2 3.7 2 3.7 4.2 0 3-.8 4.4-3.3 7.4-2.1 2.6-8.4 7.2-8.3 11.7 0 1.6 1.5 3.2 2.7 3.3"/>
<path stroke-linecap="round" d="M316.3 225.9c-1.2.8-2.6-.5-2-2 .4-1 1.8-2.2 3.7-.9 2.2 1.5 1.6 6.3-2.6 6.3-3.7.1-6.3-5.2-2.7-9.2 3.3-3.7 9.4-3 13.2 0 1.6 1.4 5 5 5.6 9.6.9 5.6.7 12.6-5 16.8a13.8 13.8 0 01-8.5 2.4c-3.8-.1-6-2.8-5.5-5.9.4-3 3.3-4.3 5.4-3 2.2 1.1 1.8 4.3-.6 4.5-1.4.2-2.5-1.3-1.6-2.3"/>
<path d="M314.3 224c.6-2.9 3-3.1 5-3.1 5.2 0 8.9 6.3 9 12.4 0 7.6-3.3 12.1-9 12.3-1.3.1-3.8-.6-3.9-2.3"/>
<path stroke-linecap="square" d="M317.5 222.7c5.6 1.2 7.6 6.2 7.6 11 0 3.9-.4 9.2-8 11"/>
<path d="M326.7 276.3a3.1 3.1 0 10-5 1.8"/>
<path stroke-linecap="round" d="M315.6 271.5a13.3 13.3 0 005 4.8m-1 8.4c-2.7-1.7-7.7-4-12.2-1.8a6.3 6.3 0 00-3.4 3.5 8 8 0 001.5 7.7 6 6 0 004 2.1c3 0 3.7-2 3.8-2.5.3-2.2-1-3.1-1.6-3.3-.6-.2-2.2-.2-2.6 1-.1.4-.1 1.1.2 1.6"/>
<path stroke-linecap="round" d="M272.4 326.7c.8 1.8-.1 2.6-1.3 2.7-1.7.2-2.6-1.1-2.7-2.3-.2-2 1.5-3.9 3.5-3.8a4.4 4.4 0 014 2.8c.2.6.3 1.2.3 1.9a4.7 4.7 0 01-1.1 3.3 6 6 0 01-4.3 2c-3.4.1-6-3-6-6.3 0-6.1 9.1-9.5 12.8-10.4a67 67 0 0114.3-1.8c2.9-.2 5-.1 8.1-.4 2.8-.3 4.3-.5 7.2-1.1a22 22 0 0010-5.2 13.7 13.7 0 003.7-17.7 11.5 11.5 0 00-8.2-5.3c-3-.5-5.6.8-7.2 3.8a6.2 6.2 0 00.1 5c.5.9 2 2.3 3.8 2.3 3 0 3.8-2 3.9-2.5.3-2.2-1-3.1-1.6-3.3-.6-.2-2.2-.2-2.6 1-.1.4-.1 1.1.2 1.6"/>
<path stroke-linecap="round" d="M269.8 317c-4 1.7-6.8 3-9.2 6.7a7.9 7.9 0 00-1 4c0 2.1 1 4.5 2.7 6a6.6 6.6 0 005.4 1.7c1.5-.2 3-1.3 3.2-2"/>
<path d="M308 243.3c-1.7.6-3 3.4-3 6 0 3 1.4 5 3.2 6"/>
<path stroke-linecap="round" d="M310 253.1c-3.2 4.1-5 6.5-5 11.3-.1 4.6 1.3 7.7 4 11"/>
<path d="M292.7 185.6l.3-.4c1.3-2 3.7-2.5 5.5-1.2 2 1.6 2.6 4.3 2 7.2a7 7 0 01-3.2 4.4"/>
<path stroke-linecap="round" d="M212 184.7c-2-1-3.7-.8-5 .7a7.5 7.5 0 00-1.2 5.8c.4 2.1 1 3 2.8 4.6"/>
<path d="M206.9 185.6c-2.5-1.6-5.2-1-6.6 1.3a7.3 7.3 0 00-1.3 4.9 9 9 0 004.6 7.3"/>
<path d="M199.7 187.8a5.5 5.5 0 00-4.8 5.3c0 3.6.9 5 2.9 7.7s8.5 7.7 8.5 13.4c0 3.4-1 5.6-3.4 6.7-1.6.7-3.5 0-4.3-.8-2-1.9-1.2-5.2.9-5.6 2.6-.4 3.1 3.7.6 3.4"/>
<path d="M195.2 191.3c-2 .2-4 2-4 4 0 3.1 1.2 4.5 3.7 7.6 2 2.6 8 7.2 7.9 11.6 0 1.6-1.2 3.7-2.3 3.4"/>
<path stroke-linecap="round" d="M190.5 252.9c1-2.3 3.4-1.3 3.5 0 .4 3-2.2 3.8-4 3.3-1-.2-1.6-.8-2-1.5a3.9 3.9 0 01.4-4.3 4 4 0 011-1c.7-.4 1.5-.5 2.7-.5 4.4 0 8.3 5.3 9.6 10.8a23.6 23.6 0 01.2 9.6 18 18 0 01-4.7 9 20.1 20.1 0 01-7.9 4.7 5.6 5.6 0 01-3.2 0c-2.2-.6-3.7-2.8-2.5-5.5 1-2.1 4.3-3.2 5.8-.6.1.3.3.7.3 1.3 0 .7-.3 1.5-.8 1.8-1.1.8-3 .6-2.9-1.5"/>
<path d="M187 280.3c.8.3 1.3.3 2.3-.2l1.5-.8c2-1.1 4.5-3 6.7-7.2a15.1 15.1 0 001.4-3.6c.2-.9.4-1.8.4-2.7a20.5 20.5 0 00-.5-5 16.2 16.2 0 00-3.2-7.2c-1-1.3-1.7-2-3.5-2m-7.5 24.7a3.1 3.1 0 115 1.8"/>
<path d="M185.8 273.2a3 3 0 012.9-2.5 3 3 0 013 3 3 3 0 01-1 2"/>
<path d="M191.5 273a12.4 12.4 0 005-9.9c0-3.3-1.3-6.7-2.9-8"/>
<path stroke-linecap="round" d="M195.7 271.5a13.2 13.2 0 01-5 4.8"/>
<path d="M203.7 283c-.8-1.8-2.2-2.6-4.6-2.9a11 11 0 00-6.6 1.6 14.8 14.8 0 00-8 9 13.7 13.7 0 00-.6 4.6c0 2.9.8 6 1.6 7.5.6 1.4 2.4 7.2 12.2 11.2a67.7 67.7 0 0020.6 3.2c8.3.3 16 .6 20.4 6.1"/>
<path stroke-linecap="round" d="M191.7 284.7c2.7-1.7 7.6-4 12.1-1.8a7 7 0 013.5 3.5 8 8 0 01-1.5 7.7c-.7.7-2.1 2-4 2.1-3 0-3.7-2-3.8-2.5-.3-2.2 1-3.1 1.6-3.3.5-.2 2.2-.2 2.6 1 .1.4.1 1.1-.2 1.6"/>
<path d="M202.2 292.6a2.7 2.7 0 00-.7-2.7 4.1 4.1 0 00-4.7-.7 5 5 0 00-2 1.7l-1 1.2-.8 2c-2 5.6 1.2 11.6 5.2 14.1a24 24 0 0011.5 3.3l5.3.3h13.4l6 .6 4.4.8 1.5.4 1 .3a31.9 31.9 0 017.7 3.3c.7.4 1.5.8 2 1.4l1.1 1c1.5 1.4 3.1 3 3.5 5.3v1.3c0 1.4-1.1 3.4-4.3 4"/>
<path d="M239 326.7c-1 1.8 0 2.6 1.2 2.7 1.7.2 2.6-1.1 2.7-2.3.2-2-1.5-3.9-3.5-3.8a4.4 4.4 0 00-4 2.8 5.5 5.5 0 00-.3 1.9 4.7 4.7 0 001 3.3 6 6 0 004.4 2c3.4.1 6-3 6-6.3 0-6.1-9.1-9.5-12.8-10.4a67 67 0 00-14.3-1.8c-2.9-.2-5-.1-8.1-.4-2.8-.3-4.3-.5-7.2-1.1a22 22 0 01-10-5.2 13.7 13.7 0 01-3.7-17.7 11.5 11.5 0 018.2-5.3c3-.5 5.6.8 7.1 3.8.8 1.4.6 3.8 0 5a4.8 4.8 0 01-3.9 2.3c-3 0-3.7-2-3.8-2.5-.3-2.2 1-3.1 1.6-3.3.5-.2 2.2-.2 2.6 1 .1.4.1 1.1-.2 1.6"/>
<path stroke-linecap="round" d="M218.6 185.6a97 97 0 00-.3-.4c-1.3-2-3.7-2.5-5.5-1.2-2 1.6-2.6 4.3-2 7.2a7 7 0 003.2 4.4"/>
<path d="M293.4 191.7c-3.2 3.5-6.5 4.6-11.3 4.8-1.5 0-4.4-.5-6-1.7-1-.8-2.3-2-1.5-4.4.5-1.5 3-5.7 3-8.7.2-4.5-1.5-7-4.2-7.9-5-1.8-10.4 3.2-13.6 4.3a11 11 0 01-4.1.6c-1.6 0-2.5 0-4.2-.6-3.2-1.1-8.6-6-13.6-4.3-2.7 1-4.4 3.4-4.2 8 0 2.9 2.5 7.1 3 8.6.8 2.3-.4 3.6-1.5 4.4a11.6 11.6 0 01-6 1.7c-4.9-.2-8-1.3-11.3-4.8"/>
<path stroke-linecap="round" d="M237.9 315.5c.6.3.1-.1 4.2 1.7 3.8 1.7 6.6 3.2 9 7a8.5 8.5 0 01.7 5.9"/>
<path d="M238.1 332.8a6.4 6.4 0 002.6.7c3.4.1 6-3 6-6.3 0-2.2-1.2-4-2.9-5.6"/>
<path stroke-linecap="round" d="M238.9 326.7c-.9 1.9.3 2.8 1.5 3 1.7.2 2.6-1.2 2.8-2.4a3.6 3.6 0 00-1.7-3.3"/>
<path d="M312 187.8c2.6 0 4.9 2.9 4.9 5.8 0 3.4-1.8 5.5-3.1 7-1 1.3-2.2 2.4-3.6 3.8"/>
<path stroke-linecap="round" d="M309 185.1a5 5 0 012.3 2 7.3 7.3 0 011.2 4.9c-.1 3.4-2.5 5.7-4.7 7.1m-3.8-14l.5.6a7 7 0 011.2 5.7 6.5 6.5 0 01-3 4.4m-4-11.6c2 1.6 2.7 4.4 2 7.2-.5 2-1.8 3.3-3.3 4.2m8.9 32.9c.2.7.6 1 1.2 1.5a10.8 10.8 0 004.9 2.9 6.2 6.2 0 005-.7M187 275.4c1 0 2 .6 2.7 1.8a2.6 2.6 0 01.3 1.2c0 .7-.3 1.4-.8 1.8-1.2.7-3.2.4-3.1-1.7"/>
<path d="M193.2 249c4 .8 7.7 5.5 9 10.7a23.6 23.6 0 01.2 9.6 18 18 0 01-4.7 9c-.5.6-1 1-1.7 1.5l-.9.6m-6.3-9.7c1.6 0 3 1.5 3 3.2a3 3 0 01-.8 2"/>
<path d="M187.7 272.6c1.7 0 3.3 1.6 3.3 3.3a3.1 3.1 0 01-1.2 2.5"/>
<path stroke-linecap="round" d="M203.2 255.6c1.5 2 2.6 3.9 3 6.2m0 6.8a13.8 13.8 0 01-1.2 3.2 14.2 14.2 0 01-2.8 3.7"/>
<path d="M203.4 243.5a7.5 7.5 0 012.8 3.8"/>
<path stroke-linecap="round" d="M206.3 239.6a8.7 8.7 0 01-2.7 3.7m-7.3-13.8l1.7-.4 1-.8.7-1 .5-1.4.3-1.2"/>
<path d="M192.8 223.4l-2 .7a7 7 0 00-2.8 2.4 13.5 13.5 0 00-1.8 4.8c-.2.7-.4 3 0 5.3a12.6 12.6 0 002 4.6l.8 1c1 1 2 1.7 3.5 1.4"/>
<path stroke-linecap="round" d="M202.4 215.8c-.2 1-.8 2.3-2.4 2.2"/>
<path d="M196.5 222.8c-1.5-1.5-4.8-1.9-8 .2-.5.2-.9.6-1.3 1a7 7 0 00-1.1 1.2l-1.2 2a10 10 0 00-.7 2c-.6 2.3-.6 4.5-.6 5l.3 2.2a15 15 0 001.8 5 8.2 8.2 0 006.2 4.3c1.4.1 3.9-.6 4-2.4"/>
<path stroke-linecap="round" d="M291 189.7c.2-1.4 1.8-1.6 2.4-.8 1 1.2.4 3.2-1.5 3.8a3 3 0 01-3-1.1c-.9-1-.8-2.2-.5-3.2.2-.7.7-1.2 1.4-1.7 2.1-1.7 5.7-1.3 6.8 1.5 1.5 3.6-1.7 6.3-4.7 8.3-3.8 2.5-8 3-11.3 3-7.3-.1-12.9-3.6-16.5-5.6-.8-.5-1.7-.4-2.1.2-.5.6-.5 1.5.2 2.1"/>
<path stroke-linecap="round" d="M292.5 188.4c.8 0 1 .4 1.2.7 1 1.2.3 3.2-1.6 3.8m14.3 41.2c-2.8 3-.3 8.3 1.8 9.5.7.5 1 .2 1.6.6"/>
<path d="M306.5 228.3c-1 .7-1.2 1.4-1.3 2.6a4.2 4.2 0 001.2 3.2 11.2 11.2 0 007.3 3 8.2 8.2 0 004.9-1.4 7.3 7.3 0 003-4.3M305 281v2c-.4 2.2-.7 3.5-1.7 5.5a15 15 0 01-3.4 4.5 15.7 15.7 0 01-4.7 3.3 19.7 19.7 0 01-5.2 1.8 33 33 0 01-5.5.6h-5l-5.5-.7c-1.7-.2-2.7-.3-4.4-.3a22.8 22.8 0 00-8.8 1.5 17 17 0 00-5 3c-.6-.6-3-2.2-5.2-3a17.6 17.6 0 00-4.1-1.2c-1.8-.3-2.8-.3-4.6-.3-1.8 0-2.7.1-4.5.3-2 .2-3.3.5-5.4.6-2 .1-3 .2-5 .1-2.2 0-3.4-.2-5.6-.6a19.7 19.7 0 01-5.2-1.8c-2-1-3-1.7-4.7-3.3a15 15 0 01-3.3-4.5 15.1 15.1 0 01-1.7-5.5v-83.4H305V281z"/>
</g>
<g fill="#c7b37f" stroke="#c7b37f">
<path stroke-width=".3" d="M198.3 292.5a2 2 0 114 0 2 2 0 01-4 0zm-12.2-14.1c0-1 .6-1.8 1.4-1.8.8 0 1.4.8 1.4 1.8s-.6 1.8-1.4 1.8c-.8 0-1.4-.8-1.4-1.8z"/>
<path stroke="none" d="M193 242.9c0-.8.7-1.5 1.4-1.5.8 0 1.4.7 1.4 1.5s-.6 1.4-1.4 1.4c-.7 0-1.3-.6-1.3-1.4zm24.6-52.5c-.1-.9.4-1.6 1-1.6.7-.1 1.4.5 1.5 1.3 0 .8-.4 1.5-1.1 1.6-.7 0-1.4-.5-1.4-1.3z"/>
</g>
<g stroke="#c7b37f" stroke-linecap="round" stroke-width=".5">
<path d="M191.4 251.2a1.8 1.8 0 00-.6.4l-.5.7-.2 1m3.8 21.3l.7-.8.6-.8.4-.7.5-1m-1 11l-1.2.6-.9.5a14 14 0 00-1 .7l-1 .8m12-30.3l-.6-.7-.7-.7-.8-.5"/>
<path stroke-linecap="butt" d="M203.3 244l-1 .4a4 4 0 01-1.1.2"/>
<path d="M190 230.8c0 .4.1.7.3 1.1l.7 1.4a6.8 6.8 0 002.2 2.1l1.2.7m-.9-4.7l1 .5a6 6 0 002.4.5l1.5-.1m5.7-32.5l-1.6-1a9.6 9.6 0 01-2.4-2.3l-.7-1m6-3.6l.5 1.3 1.2 1.7c.7.8 1.3 1 2.2 1.6m1.1-4.7l.5 1.2.7 1 1 1c.6.5 1 .6 1.6 1"/>
</g>
<path fill="#703d29" stroke-width=".1" d="M266.6 185.3c0-1.4-1.3-1.5-1.9-1.5-1.4 0-1.8 1-3.7 2a9.5 9.5 0 01-5.3 1.4 9 9 0 01-5.4-1.5c-1.9-1-2.2-1.9-3.6-1.9-.8 0-1.9.7-1.8 2v.7s.2 0 .2.2c0-.7.1-1 .4-1.4a1.8 1.8 0 011.3-.7c1.5 0 2 1 3.9 2a9.5 9.5 0 005.3 1.5c2 0 3.1-.3 5.4-1.5 1.9-1 2.4-2 3.9-2 .5 0 .8.3 1 .8v.7h.2c0-.1.2-.2.1-.8z"/>
</g>
<g fill="#703d29">
<path d="M211.5 299.2c.4-.4.8-.3.8-.5l-.2-.2-.7-.2-.7-.3s-.3-.2-.4 0c0 .3.9.3.5 1.1 0 .2-.1.5-.6 1l-2.1 2.3-.2.2V299l.1-1.4c.2-.4.6 0 .7-.3 0-.2 0-.2-.2-.3-.2 0-.4 0-1-.3l-.7-.3c-.1 0-.4-.2-.5 0l.1.2c.3.2.4.3.4.7v6c0 .4.1.6.2.6l.3-.2 4.2-4.6z"/>
<path d="M214 300.1c.3-.8.8-.3.9-.6l-.3-.2-1-.3-1-.4h-.3c0 .4 1 .4.7 1.3l-1.4 4.4c-.3.8-.8.4-.9.7v.1l1 .3 1.2.4h.3c.1-.3-1-.2-.6-1.3l1.4-4.3zm3 1c.1-.6.4-.6.7-.5.8.3 1 1.1.8 2-.2.5-.4 1-1.6.7-.3-.1-.6-.2-.5-.4l.6-1.9zm-2.3 3.9c-.4 1.1-1 .6-1 1l.2.1 1.3.4.7.2h.3c0-.4-.9-.2-.6-1.2l.5-1.6c0-.3 0-.4.5-.3.4.2.5.3.6.7l.3 1.7c0 .6.2 1.3.8 1.4.3.2 1 .1 1-.2v-.1h-.3l-.3-.3-.5-3 .6-.2c.3-.2.6-.4.8-1 .1-.4.3-1.7-1.5-2.3l-1.6-.4-1-.3h-.2c-.1.4.9.3.6 1.3l-1.2 4zm6.7 2c-.2 1-1 .4-1.2.7 0 .2.1.3.3.3l1.2.2 1.1.4.5-.1c0-.3-1.1-.3-.8-1.4l1-4.2c0-.5.2-.5.5-.4l.7.2c1 .2.5 1.1.8 1.2.3 0 .2-.3.3-.5v-1.1l-2.6-.6-2.5-.6c-.2 0-.2 0-.2.2l-.5 1.2v.3c.5.1.5-1.2 1.4-1l.7.2c.4.1.5.2.4.6l-1 4.3zm10.2-2.7c.3-.5.7-.4.7-.6l-.3-.2h-.7l-.7-.2c-.1 0-.4-.1-.4 0 0 .4.9.2.7 1 0 .2-.1.6-.5 1.1l-1.7 2.7-.1.2v-.3l-.6-3.2a4.3 4.3 0 01-.1-1.3c0-.4.5-.2.6-.5l-.3-.2-1-.1-.8-.2c-.1 0-.4-.1-.4 0l.1.2c.4.2.5.3.5.7l1.1 5.9c.1.4.2.5.3.5l.2-.2 3.4-5.3zm.5 5.4l.1.4 1.4.6c1.1.2 2-.5 2.3-1.7.2-1.2-.3-1.7-1.2-2.3-1-.8-1.5-1-1.3-1.6 0-.6.5-1 1-.8 1.5.2 1.4 2 1.6 2 .1 0 .2 0 .2-.3l.1-1.3v-.3h-.5c-.3 0-.5-.4-1.2-.5-1-.2-1.8.5-2 1.6-.2 1 .2 1.4 1 1.9 1.2.9 1.7 1 1.6 1.9-.2.7-.8 1.1-1.4 1-1-.2-1.3-1.1-1.5-2l-.1-.3c-.2 0-.2.3-.2.4v1.3zm12.6-3.5c.3-.6.6-.5.7-.7 0-.2-.2-.2-.3-.2h-.8l-.7-.1-.4.1c0 .4 1 0 .8 1 0 .1 0 .5-.3 1l-1.4 2.9-.2.2v-.2l-1-3.2a4.3 4.3 0 01-.2-1.3c0-.4.6-.3.6-.5s0-.2-.3-.2h-1l-.8-.1c-.1 0-.4-.1-.4 0l.1.2c.4.2.5.3.6.6l1.7 5.8c.1.4.2.5.3.5l.2-.3 2.8-5.5z"/>
<path d="M246 310.8c0 1-.8.8-.8 1.2h1l1 .1.4-.1c0-.5-1.1.2-1.1-1.7v-3.4s.2 0 .3.2l4 5h.3v-.2l.1-5.3c0-1 .8-.8.8-1.1l-.2-.1h-2v.1c0 .3 1 .2 1 1v3.2l-.1.4-.3-.3-3.4-4.2c-.1-.2 0-.3-.3-.3h-1.4l-.1.2c0 .4 1-.2.9 1.7v3.6zm8.4-4.3c0-1 .6-.6.6-.9l-.3-.1h-2.3c0 .4.9.1.9 1v4.6c0 1-.6.7-.6 1v.1h2.3l.3-.1c0-.3-1 .1-1-1v-4.6zm3.6 4.4c0 1.2-1 .7-1 1 0 .3.2.3.3.3h2.4c.3 0 .5 0 .5-.2 0-.3-1.1 0-1.1-1.2v-4.3c0-.5 0-.5.3-.5h.8c1 0 .7 1 1 1 .3 0 .2-.4.2-.5l-.1-.9s0-.2-.2-.2H256c-.2 0-.2.2-.2.3l-.1 1.2.1.4c.4 0 .1-1.3 1.1-1.3h.7c.4 0 .5 0 .5.5v4.4zm5-1.8h-.3v-.4l.6-1.8h.1l1 1.7v.3l-.2.1-1.2.1zm1.5.4c.2 0 .3 0 .6.8l.2.6c0 .6-.6.6-.6.8 0 .2.2.1.3.1h1l1-.1c.3 0 .4 0 .4-.2 0-.3-.5.1-.8-.6l-2.8-5.6-.2-.3-.2.4-1.9 5.9c-.2.5-.6.5-.6.7 0 .2.2.1.3.1h1.5c.2-.1.5 0 .5-.3 0-.2-1 0-1-.7l.1-.7c.2-.7.3-.7.5-.7l1.7-.2zm6.6-4c0-.6 0-.6 1-.7 1.6-.3 1.1 1 1.5.9.2 0 .1-.4.1-.5l-.1-1h-.2l-2 .2-2.2.3c-.2 0-.2 0-.2.2 0 .3 1 0 1 .8l.6 4.4c.2 1.2-.5.7-.5 1.2h.2l1.1-.1 1-.1c.2 0 .4 0 .4-.2 0-.3-1 0-1.1-1l-.2-1.4c0-.5-.1-.6.3-.7h.6c.9-.2.8.9 1 .8.3 0 .2-.3.1-.5l-.2-1.6c0-.3-.2-.3-.2-.3-.2 0-.1 1-.8 1l-.6.1c-.4 0-.4 0-.4-.4l-.2-1.3zm3.2 2.2c.3 2 1.7 3 3.4 2.7 2.7-.5 2.8-3 2.5-4.2-.3-2-1.8-3-3.5-2.7-2 .4-2.8 2.2-2.4 4.2zm.9-.7c-.3-1.4 0-2.7 1.4-3 1-.3 2.3.6 2.7 2.7.3 1.6 0 3-1.4 3.2-1.5.3-2.4-1.5-2.7-2.9zm6.7-3.3c-.2-.6.1-.7.4-.7.8-.2 1.5.3 1.7 1.3.1.5.2 1-1 1.3-.3.1-.6.2-.7 0l-.4-2zm0 4.5c.3 1.2-.5 1-.4 1.3 0 .2.2.2.3.1l1.3-.3.7-.1c.2 0 .2-.2.2-.2 0-.4-.8.2-1-.8l-.4-1.6c-.1-.3-.2-.4.3-.5.4 0 .6 0 .9.3l1 1.3c.4.5.8 1 1.5.9.3-.1.8-.5.7-.7 0-.1 0-.2-.1-.1h-.6l-2-2.3.5-.5c.1-.3.3-.7.2-1.3-.1-.4-.6-1.7-2.5-1.2l-1.6.4-1 .2-.2.2c.1.4 1-.2 1.2.8l1 4.1zm6.9-1.5c.3 1-.8.9-.7 1.2 0 .2.2.2.3.2l1.2-.4 1.2-.3c.2 0 .4 0 .3-.2 0-.3-1 .2-1.3-.9l-1.1-4.2c-.1-.4 0-.5.3-.6l.7-.2c1-.3 1 .8 1.3.8.2 0 0-.4 0-.5l-.4-.9s0-.2-.2-.2l-2.5.7-2.5.7c-.2 0-.1.1-.1.2l.2 1.3c0 .1 0 .3.2.3.3-.1-.2-1.3.7-1.5l.7-.2c.3 0 .4 0 .6.4l1 4.3zm4.4-5.9c-.3-.9.4-.7.3-1h-.3c-.4 0-.7.2-1 .3l-1 .2s-.3 0-.2.2c0 .3 1-.2 1.2.6l1.2 4.4c.2 1-.4.8-.3 1.2l1-.2 1.3-.3c.2-.1.2-.2.2-.3 0-.3-.9.4-1.2-.7l-1.2-4.4zm1.8 2.1c.6 1.9 2.1 2.7 3.8 2.2 2.6-.9 2.3-3.3 1.9-4.5-.6-2-2.3-2.7-3.8-2.2-2 .7-2.6 2.6-1.9 4.5zm.8-.8c-.4-1.3-.4-2.7 1-3.2 1-.4 2.3.3 3 2.4.5 1.5.5 2.8-1 3.3-1.4.5-2.5-1.2-3-2.5zm6.1-4.3c-.2-.6 0-.7.4-.8.8-.3 1.5.2 1.8 1 .2.6.4 1-.8 1.6-.3 0-.6.2-.7 0l-.7-1.8zm.7 4.5c.4 1-.4 1-.2 1.3 0 .2.2.1.3 0 .4 0 .8-.3 1.2-.4l.7-.3c.2 0 .2-.1.2-.2-.1-.3-.8.3-1.2-.6l-.6-1.5c0-.4-.2-.4.3-.6.4-.1.5-.1.9.2l1.2 1.2c.5.4 1 .8 1.6.6.3-.1.7-.5.6-.8 0 0 0-.1-.1 0h-.6l-2.2-2 .3-.5c.1-.3.2-.7 0-1.3-.2-.4-.8-1.6-2.6-.9l-1.6.7-1 .3v.2c.1.3.8-.4 1.2.6l1.6 4z"/>
</g>
<g fill="#fedf00" transform="matrix(.512 0 0 .512 0 76.8)">
<path fill="#d52b1e" d="M412.7 249.3h82.1v82h-82.1z"/>
<path fill="#fff" d="M451.2 313.8s0 3-.8 5.3c-1 2.7-1 2.7-1.9 4a13.2 13.2 0 01-3.8 4c-2 1.2-4 1.8-6 1.6-5.4-.4-8-6.4-9.2-11.2-1.3-5.1-5-8-7.5-6-1.4 1-1.4 2.8-.3 4.6a9 9 0 004.1 2.8l-2.9 3.7s-6.3-.8-7.5-7.4c-.5-2.5.7-7.1 4.9-8.5 5.3-1.8 8.6 2 10.3 5.2 2.2 4.4 3.2 12.4 9.4 11.2 3.4-.7 5-5.6 5-7.9l2.4-2.6 3.7 1.2h.1z"/>
<use width="100%" height="100%" transform="matrix(-1 0 0 1 907.5 0)" xlink:href="#a"/>
<path d="M461.1 279l10.8-11.7s1.6-1.3 1.6-3.4l-2.2.4-.5-1.2-.1-1.1 3-.7V260l.3-1.3-3.2.2.3-1.4.5-1 1.9-.4h1.9c1.8-3.4 9.2-6.4 14.4-1 3.8 4 3 11.2-2 13.2a6.3 6.3 0 01-6.8-1.1l2-4c2.7 1.7 5-.3 4.8-2.4-.2-2.7-2-4.3-4.3-4.5-2.3-.2-4 1-5 3-.6 1.3-.3 2.2-.5 3.6-.2 1.5 0 2.3-.5 3.8a8.8 8.8 0 01-2.4 3.6l-11 12-43 46.4-3.2-3 43.2-46.7z"/>
<path fill="#fff" d="M429.5 283s2.7 13.4 11.9 33.5c4.7-1.7 7.4-2.8 12.4-2.8 4.9 0 7.6 1 12.3 2.8A171 171 0 00478 283l-24.2-31-24.4 31z"/>
<path d="M456.1 262.4l16.8 21.7s-2.2 10.5-9 26.3c-2.7-.6-5-1.1-7.8-1.3v-46.7zm-4.7 0l-16.8 21.7s2.2 10.5 9 26.3c2.7-.6 5-1.1 7.8-1.3v-46.7z"/>
</g>
<g fill="#d52b1e">
<path fill="#fedf00" d="M257.8 204.4H300v42h-42z"/>
<path d="M263.7 204.4h6.3v42h-6.3zm12 0h6.3v42h-6.2zm12 0h6.3v42h-6.2z"/>
</g>
<g fill="#d52b1e" stroke="#d52b1e" stroke-width=".5">
<path fill="#fedf00" stroke="none" d="M211.4 282.8c.2.8.4 2 1.1 3.4.8 1.2.5 1.2 2.2 3a13.8 13.8 0 006.7 3.6c3.4 1 5.7 1 8.5.9 2.2-.1 3.9-.4 5.3-.6 2-.2 3.4-.4 5.7-.5a32.4 32.4 0 013.1 0c1.2 0 2.4.3 3.7.5 2.8.6 5.6 1.7 5.6 1.7v-43.9h-42v30l.1 2z"/>
<path stroke-width=".3" d="M216.3 290.5l2 1.2 2.7 1v-41.8h-4.7zm23.4 2v-41.6H235v42.2l4.7-.5zm9.3-41.6h-4.6v41.7a31 31 0 014.6.8V251zm-18.6 0v42.7h-4.7v-42.7z"/>
</g>
<g transform="matrix(.512 0 0 .512 0 76.8)">
<path fill="#fedf00" d="M585.5 402.4a20.8 20.8 0 01-2.2 6.6c-1.5 2.3-1 2.3-4.3 6a26.3 26.3 0 01-13 7 51.8 51.8 0 01-16.6 1.6c-4.3-.2-7.5-.7-10.3-1-3.8-.6-6.7-.9-11-1a62.9 62.9 0 00-6.2 0 83.3 83.3 0 00-18.3 4.2V340h82.2v58.5l-.3 3.8z"/>
<g>
<path fill="#d52b1e" d="M524.6 347l-.6.2-.8.8c-.4.4-.7.5-1.2.8l-.6.5c-.3.3 0 .6-.3 1-.1.4-.3.6-.6 1-.4.4-.7.5-1 1l-1.2 1-.3.1h-.6c-.4.2-.5.6-.8.8l.3.6.8 1.4c.2.3.2.7.5.8.5.2.9.2 1.3.1.8.2 1.3.2 2 .5l1.5.8c.5.3.8.4 1.3.5h1.8v.3l2 1a1.7 1.7 0 00-.1.4c-.1.3-.2.7-.1.8.6 1.9 1.2 3 1.5 3.2.6.2.8.9 1.1 1.5l-.3.3c-.6.6-1.2 1-1.7 1.8-.7 1.2-1.2 1.2-.3 2.8l1.5 2.4c.4.7.6 1.2.8 2 .2.7.3 1.2.3 2l1 .3.7-.6.6-1.2v-1c-.2-.1-.3-.4-.2-.7 0-.4.5-.3.7-.6.3-.5-.4-.8-.7-1.1-.6-.7-1.4-.9-1.6-1.9 0-.2 0-.4.4-.7l2-1.8c.2.1.6.2 1 .1l1.3.4c.6.2.9 0 1.2 0h.4l.1.6c.1 1-.1 3 .2 3.5l.3.6.2.6v2l-.2 1.7c0 .4-.2.7-.5 1-.2.4-.6.4-1 .7v1l1.1.5 1.3.3.7-.3.1-.6.5-.5c.4-.2.8 0 .9-.1.2-.3 0-.4 0-.8 0-.6-.2-1-.3-1.6a11.8 11.8 0 01-.1-2.8c0-.6 0-1 .2-1.5.1-1 .4-1.4.6-2.2.3-1 .3-1.6.4-2.5a24.4 24.4 0 0010.1-.6c.8.7 1.7 1.2 2.7 1.6v1c0 .3 0 .4.2.7l.3.3c.3 0 .5 0 .7-.2.2-.2.2-.4.2-.7v-.7h1.8v1.1c.1.3.3.4.5.4a.7.7 0 00.6 0c.3-.2.2-.6.3-1v-.7l1-.4a5.1 5.1 0 010 .9l-.3.9c-.2.6-.5.8-.8 1.4-.4.6-.5 1-1 1.5l-.6.7-.6.9-.9 1c-.7.6-1.2.2-2 .9l-.3 1 1.4.6 1.3.2.4-.2c0-.3 0-.6.3-.8.2-.3.4-.3.7-.4.4 0 .8 0 1-.2.4-.3.4-1 .7-1.5a12.7 12.7 0 013-3.9l1.7-1.4c.2-.4.5-.5.5-1l-.2-.6-.2-1c1.5.7 1 .7 1.2 1.4.3.6 0 1 .1 1.7.1.8.5 1.1.5 1.9.1.9-.1 1.4-.3 2.3-.1.8-.1 1.3-.5 2a3.8 3.8 0 01-1.1 1.5l-.6.5-.1 1 1.1.4 1.6.4.4-.3c.2-.7 0-1.7.4-1.7.4-.1.7 0 .8-.3v-.7l.7-4.5.4-1.9.4-1.7c.7-2-.2-2.3-1-3.6-.5-.7-.7-1-.7-1.5V362a42.7 42.7 0 010-2.8l.4-.2c1.2-.7 1.7-.9 2.4-2.5a3.4 3.4 0 00.3-1.5v-1l-.4-1a3.2 3.2 0 00-.6-.8c-.7-1-1.7-1.1-2.7-1.5-1.5-.5-2.5-.4-4-.5-1.8-.2-2.7-.2-4.4 0-2 0-3.1.4-5.1.7l-4.9.4c-2.3 0-4.4-.5-5.8-.4-2.4.2-2.5.8-6.2 1.1a67 67 0 01-3.8.2l-2.2-.7c.9-.3 1.1-.5 1.5-1 .3-.4.2-.7.6-1.1l.7-1a2.2 2.2 0 00-.9-.4h-1a3 3 0 00-1.2.3l-.8.6-2.2-1.2a8.8 8.8 0 00-3-.9zm2 11.8z"/>
<g fill="none" stroke="#fedf00" stroke-linecap="round">
<path d="M568.8 359.5l-.8.3c-.9.4-1.6.4-2.6.5-2.6.2-4.3-1.1-7-.9-1.4.1-2 1.2-3.5 1.6a9.3 9.3 0 01-1.7.2l.5-1s-1.2.3-2 .3a7.5 7.5 0 01-1.6-.2l1-1-1.3-.2a4 4 0 01-1-.7 20.5 20.5 0 001.7-.3c1.5-.4 2-1.2 3.9-1.4 1.1 0 3 0 7.6.8 3 .5 4.4.2 5.5-.3.8-.3 1-1 1.1-1.8.1-.8-.4-1.4-.8-1.8-.1 0-.5-.3-1.1-.4"/>
<path fill="#fcd900" stroke-linecap="butt" stroke-width=".5" d="M524.8 350.6c-.5 0-.9 0-1.3.3-.5.3-.6.7-1 1.1.5.1.8.4 1.2.3.4 0 .5-.2.8-.5.3-.4.4-.7.4-1.2h-.1z"/>
<path d="M536 363.8a13.6 13.6 0 001 2.3c.2.8 0 1.2.2 2v1.6m6.8-7l-.3 1.3-1 3.5v.7m-11-4c.9.2.6 3.3 1.9 4"/>
<path stroke-linecap="butt" d="M560.1 369.8l.4-.3a8.2 8.2 0 002.7-1.8"/>
<path d="M552.4 368c3.5-.9 5.9-2.6 7.6-2.9m-4-1.5h.8c1.5-.3 1.7.6 2.7 1.2 1.9 1 2.1 2.3 4.3 3.4l.4.1.8.4"/>
<path fill="#fcd900" stroke-linecap="butt" stroke-width=".5" d="M517.7 354.5h.7l.8-.2c.3 0 .5 0 .7.2.2 0 .2.1.3.3 0 .2.2.3.1.5 0 .2-.3.4-.6.4-.2 0-.4 0-.5-.3a.5.5 0 010-.4 1 1 0 01-.9 0 1 1 0 01-.6-.5z"/>
</g>
<path fill="#0065bd" d="M525.1 364.2l-2-.9c.4-.2.7-.2 1-.5.3-.4.3-.8.5-1.3s.2-1 .7-1.4c.3-.2.8-.2 1.1-.1.4 0 .8.4.9.7 0 .6-.2 1-.3 1.5 0 .6-.3.9-.2 1.4 0 .4.2.6.4 1l-2-.4zm-1 1a.6.6 0 11.7.5.6.6 0 01-.7-.6zm-1.7-16.6h-.2c-.4-.4-.4-.8-.6-1.2a4 4 0 01-.3-1.2v-2c0-.3 0-.6-.2-.9 0-.2-.4-.3-.3-.4 0-.1.3 0 .4 0 .4 0 .6.1 1 .4.3.3.5.6.6 1l.4 1.5.3.8.5.6-.7.8-.9.6zm3.6 10.6l2.2 1a9.2 9.2 0 003.5-3.8c.9-1.8 1-2.7 1.4-4.4l-1.8-.5h-.4c-.5 1.8-.7 2.7-1.6 4.2-.8 1.3-1.7 2.3-2.6 3l-.7.5zm5 18.2l.8-1.3 1.4-1.1h.4a8.7 8.7 0 01-.5 2.8l-.4 1-.5.5c-.5-.8-1.3-1.3-1.3-2zm33 1.8l1.4.6 1.5.9v.5l-1.5.2a8.4 8.4 0 01-1.3 0h-1l-.6-.4c.5-.7.8-1.6 1.4-1.8zm-9.8-2l1.4.5 1.5 1c0 .1.1.3 0 .4a9 9 0 01-2.7.3l-1-.1-.7-.3c.6-.7.9-1.7 1.5-1.8zm-17.4 2.1l1.5.5 1.5 1v.5a9 9 0 01-2.8.2h-1l-.6-.4c.5-.7.8-1.6 1.4-1.8zm-9-29.8c-.6-.3-1-1-.6-1.6.1-.2.4-.2.6-.4.2-.3.1-.5 0-.8l-.1-1-.2-1c0-.6 0-1 .4-1.6.2-.3.7-.6.8-.6.2.1 0 .5 0 .8 0 .5.1.7.3 1.2l.7 1.3c.2.6.4.8.4 1.4 0 .5 0 .7-.2 1.2a2 2 0 01-.6.8 2 2 0 01-.8.4 1.1 1.1 0 01-.6 0z"/>
</g>
<use width="100%" height="100%" y="36.6" xlink:href="#b"/>
</g>
<path fill="none" stroke="#703d29" stroke-width=".4" d="M211.3 204.4h42v42h-42zm46.5 0H300v42h-42zm-46.4 78.4c.2.8.4 2 1.1 3.4.8 1.2.5 1.2 2.2 3a13.8 13.8 0 006.7 3.6c3.4 1 5.7 1 8.5.9 2.2-.1 3.9-.4 5.3-.6 2-.2 3.4-.4 5.7-.5a32.4 32.4 0 013.1 0c1.2 0 2.4.3 3.7.5 2.8.6 5.6 1.7 5.6 1.7v-43.9h-42v30l.1 2zm88.4 0c-.1.8-.4 2-1.1 3.4-.8 1.2-.5 1.2-2.2 3a13.8 13.8 0 01-6.7 3.6 26.1 26.1 0 01-8.5.9c-2.2-.1-3.9-.4-5.3-.6a55.6 55.6 0 00-5.6-.5 32.4 32.4 0 00-3.2 0c-1.2 0-2.4.3-3.7.5-2.8.6-5.7 1.7-5.7 1.7v-43.9H300v30l-.1 2z"/>
</svg>

After

Width:  |  Height:  |  Size: 32 KiB

+6
View File
@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<path fill="#00732f" d="M0 0h512v170.7H0z"/>
<path fill="#fff" d="M0 170.7h512v170.6H0z"/>
<path d="M0 341.3h512V512H0z"/>
<path fill="red" d="M0 0h180v512H0z"/>
</svg>

After

Width:  |  Height:  |  Size: 240 B

+81
View File
@@ -0,0 +1,81 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 512 512">
<g fill-rule="evenodd" stroke-width="1pt">
<path d="M0 0h512v512H0z"/>
<path fill="#090" d="M341.3 0H512v512H341.3z"/>
<path fill="#bf0000" d="M170.7 0h170.6v512H170.7z"/>
</g>
<g fill="#fff" fill-rule="evenodd" stroke="#bd6b00" stroke-width=".5" transform="translate(2.2 86.8) scale(.84611)">
<path d="M319.5 225.8h8.3c0 3.2 2 6.6 4.5 8.5h-16c2.5-2.2 3.2-5 3.2-8.5z"/>
<path stroke="none" d="M266.7 178.5l4.6 5 57 .2 4.6-5-14.6-.3-7-5h-23l-6.6 5.1h-15z"/>
<path d="M290 172.7h19.7c2.6-1.4 3.5-5.9 3.5-8.4 0-7.4-5.3-11-10.5-11.2-.8 0-1.7-.6-1.9-1.3-.5-1.6-.4-2.7-1-2.6-.4 0-.3 1-.7 2.4-.3.8-1.1 1.5-2 1.6-6.4.3-10.6 5-10.5 11.1.1 4 .6 6.4 3.4 8.4z"/>
<path stroke="none" d="M257.7 242.8H342l-7.5-6.1h-69.4l-7.5 6.1z"/>
<path d="M296.4 219.7l1.5 4.6h3.5l-2.8-4.6h-2.2zm-2 4.6l1 4.6h4l-1.5-4.6h-3.5zm7 0l2.8 4.6h5.9l-4.6-4.6h-4.1zm-34.5 10.4c3.1-2.9 5.1-5.3 5.1-8.8h7.6c0 2 .7 3.1 1.8 3h7.7v-4.5h-5.6v-24.7c-.2-8.8 10.6-13.8 15-13.8h-26.3v-.8h55.3v.8H301c7.9 0 15.5 7.5 15.6 13.8v7h-1l-.1-6.9c0-6.9-8.7-13.3-15.7-13.1-6 .1-15.4 5.9-15.3 13v2.2l14.3.1-.1 2.5 2.2 1.4 4.5 1.4v3.8l3.2.9v3.7l3.8 1.7v3.8l2.5 1.5-.1 3.9 3.3 2.3h-7.8l4.9 5.5h-7.3l-3.6-5.5h-4.7l2.1 5.4h-5l-1.3-5.4h-6.2v5.8H267zm22.2-15v4.6h5.3l-1-4.6H289z"/>
<path fill="none" d="M289.4 211.7h3.3v7.6h-3.3z"/>
<path fill="none" d="M284.7 219.8h3.2v-5.6c0-2.4 2.2-4.9 3.2-5 1.2 0 2.9 2.3 3 4.8v5.8h3.4v-14.4h-12.8v14.4zm25.6 3.3h4v3.2h-4zm-2.4-5.3h4v3.1h-4zm-3.9-5.4h4v3.1h-4zm-3.3-4.5h4v3.1h-4z"/>
<path fill="none" d="M298 219.8l4.2.2 7.3 6.4v-3.8l-2.5-1.8v-3l-3.6-2v-3.3l-3.5-1.2V207l-1.7-1.5-.1 14.4z"/>
<path d="M315.4 210.3h1v7.1h-1z"/>
<g>
<path d="M257.3 186.5c-1.2-2-2.7 2.8-7.8 6.3-2.3 1.6-4 5.9-4 8.7 0 2 .2 3.9 0 5.8-.1 1.1-1.4 3.8-.5 4.5 2.2 1.6 5.1 5.4 6.4 6.7 1.2 1 2.2-5.3 3-8 1-3 .6-6.7 3.2-9.4 1.8-2 6.4-3.8 6-4.6l-6.3-10z"/>
<path fill="#bf0000" d="M257 201.9a10 10 0 00-1.6-2.6 6.1 6.1 0 00-2.4-1.8 5.3 5.3 0 01-2.4-1.5 3.6 3.6 0 01-.8-1.5 5.9 5.9 0 010-2l-.3.3c-2.3 1.6-4 5.9-4 8.7a28.5 28.5 0 000 2.3c.2.5.3 1 .6 1.3l1.1.8 2.7.7a7.1 7.1 0 012.6 2 10.5 10.5 0 011.8 2.6l.2-.8c.8-2.7.7-5.9 2.6-8.5z"/>
<path fill="none" d="M249.8 192.4c-.5 3.3 1.4 4.5 3.2 5.1 1.8.7 3.3 2.6 4 4.4m-11.7 1.5c.8 3 2.8 2.6 4.6 3.2 1.8.7 3.7 3 4.5 4.8"/>
<path d="M255.6 184.5l1-.6 17.7 29.9-1 .6-17.7-30z"/>
<path d="M257.5 183.3a2 2 0 11-4 0 2 2 0 114 0zm15.2-24h7.2v1.6h-7.2zm0 3.1h7.2v13.8h-7.2zm-.4-5h8c.2-2.7-2.5-5.6-4-5.6-1.6.1-4.1 3-4 5.6z"/>
<path fill="#bd6b00" stroke="none" d="M292.6 155.8c-1.5.6-2.7 2.3-3.4 4.3-.7 2-1 4.3-.6 6.1 0 .7.3 1.1.5 1.5.2.3.4.5.6.5.3 0 .6 0 .7-.3l.2-.8c-.1-2-.1-3.8.3-5.4a7.7 7.7 0 013-4.4c.3-.2.4-.5.5-.7a1 1 0 00-.3-.7c-.4-.3-1-.4-1.5-.1zm.2.4c.4-.2.8 0 1 .1l.1.2c0 .1 0 .2-.3.4a8.2 8.2 0 00-3.1 4.6 16.7 16.7 0 00-.3 5.6 1 1 0 01-.2.6s0 .1-.2 0c0 0-.2 0-.4-.3a3.9 3.9 0 01-.4-1.2c-.3-1.8 0-4 .7-6 .7-1.8 1.8-3.4 3-4z"/>
<path fill="#bd6b00" stroke="none" d="M295.2 157.7c-1.5.7-2.5 2.3-3 4.2a13.6 13.6 0 00-.3 5.9c.2 1.3 1 2 1.6 2 .3.1.6 0 .8-.3.2-.3.3-.6.2-1-.4-1.6-.5-3.4-.3-5.1.3-1.7 1-3.2 2.2-4.1.3-.3.5-.5.5-.8a.8.8 0 00-.2-.6c-.4-.3-1-.4-1.5-.2zm.2.5c.4-.2.8-.1 1 0l.1.3-.3.4a6.5 6.5 0 00-2.4 4.4c-.3 1.8-.1 3.7.2 5.2.1.4 0 .6 0 .8l-.5.1c-.3 0-1-.5-1.2-1.7-.3-1.7-.2-3.9.3-5.7.5-1.8 1.5-3.3 2.8-3.8z"/>
<path d="M272.3 187.4h8v11h-8zm.5 17.4h7.7v2.4h-7.7zm-.2 4.1h8v8.7h-8zm-.6 10.5h8.7v4.9H272zm1.1-16.6h7l1.4-2.4h-9.6l1.2 2.4zm9.4-8.6l.1-6h4.8a17.4 17.4 0 00-4.9 6z"/>
<path fill="none" d="M273.6 196.7c0 1.3 1.5.8 1.5.1v-5.6c0-1 2.4-.8 2.4-.1v6c0 1 1.7.9 1.6 0v-7c0-2.2-5.5-2.1-5.5-.1v6.7zm0 13.3h5.7v7h-5.7z"/>
<path d="M277.2 213h2v1h-2zm-3.5 0h2v1h-2zm2-3h1.5v3h-1.5zm0 4h1.5v3.1h-1.5zM244 139c.4 5.5-1.4 8.6-4.3 8.1-.8-3 1-5.1 4.3-8.1zm-6.5 12.3c-2.6-1.3-.7-11.5.3-15.8.7 5.5 2 13.3-.3 15.8z"/>
<path d="M238.4 151.8c4.4 1.5 8-3.2 9.1-8.7-3.6 5-9.5 5-9 8.7zm-3.3 5.1c-3.4-.9-1.4-11.7-.7-16 .7 4.5 3.1 14.5.7 16zm1.2-.3c.2-3.7 3.9-2.7 6.5-4.7-.5 2-2 5.2-6.5 4.7zm-4.2 5c-3.4-1-1.4-12.6-1.6-17.4 1 4.2 4.2 16.3 1.6 17.4zm1.6-.5c2.8.9 6.5-1 6.8-4.3-2.5 1.7-6.3.4-6.8 4.3z"/>
<path d="M229.5 166.7c-3.2.3-1.8-9.6-1.8-18.8 1.2 8.6 4.5 16.5 1.8 18.8z"/>
<path d="M230.7 166.3c2.2 1 6.1-.7 7.2-4.4-4 1.7-6.6 0-7.2 4.4zm25.6-22.2c-.6 4.9-2.6 7.7-5.5 7.2-.8-3 1.6-5 5.5-7.2zm-7.8 12.4c4.9.7 6.6-3 10-7.9-4.7 3.4-10.2 4-10 8z"/>
<path d="M247 156c-2.6-3.2 0-7.3 2-10.7-.4 5.1 1.3 8-2 10.7zm-1 5.3c-.4-3.2 5-3.9 7.4-5.6-.9 1.8-2 6.7-7.5 5.6z"/>
<path d="M244.8 161.3c-3.7-.4-2.2-6.7.5-10.1-1.1 4.8 2 8.1-.5 10.1z"/>
<path d="M242 166.6c-4.2-2-1.5-7.2 0-10.3-.6 4.1 2.8 7.2 0 10.2z"/>
<path d="M242.8 166c2.2 3 6.5-.8 7.4-5.2-3.7 3.1-6.5 2.6-7.4 5.3zm-9.6 20.3c-.4-4.3 2.8-12 .5-16.2-.3-.6.7-2.1 1.4-1.2 1 1.5 2 5.7 2.5 4.1.4-1.7.5-4.6 2-5.2 1-.3 2.3-.6 1.9 1-.4 1.4-1.2 3.4-.3 3.5.5 0 2-2 3.3-3 1-.8 2.6.6 1 1.8-4.8 4-9.5 5.9-12.3 15.2zm-8.7 64.5c-.6 0-1.3-.3-.6.6 5.7 7 7.3 9 15.6 8 8.3-1.1 10.3-3.4 16.2-6.7a14.6 14.6 0 0111.2-1c1.6.5 2.6.5 1.4-.7-1.2-1.1-2.5-2.7-4-3.8a17.5 17.5 0 00-12.7-2.7c-6 1-11.1 4.9-17.2 6.4a25 25 0 01-9.9 0zm47.8 12.5c1 .2 1.7 2.2 2.3.9.8-2.3.2-4-.8-3.9-1.2.3-3.1 3-1.5 3z"/>
<path stroke="none" d="M220.6 183c-1.2-1.4-.9-1.8 1-1.9 1.4 0 4.2 1 5.3.1 1-.7.5-3.7 1-5 .2-.9.7-2 2-.2 3.6 5.8 8 12.8 10 19.6 1 3.8 0 9.8-3.4 13.8 0-3.4-1.2-5.7-2.7-8.6-2-3.7-9.1-14-13.2-17.9z"/>
<path d="M235.5 213.4c4 0 4.7-5.3 4.7-6.8-2 .4-5.4 3.7-4.7 6.8zm34.5 51.9c2.8.6 2.7-6.2-.2-9.1 1.3 4.4-2 8.4.1 9zm-1.2-.1c.2 3.2-8-.4-10-3 4.8 2.1 9.8.4 10 3zm-3.5-4.6c.3 3.1-7 .3-9.3-2.1 4.9 1.6 9-.5 9.3 2zm1.3.4c2.9.7 2.4-6.4-.4-8.8 1.4 4.7-1.8 8.1.4 8.8zm-3-4.3c2.9.7 1.2-5.4-.9-7.8.4 4.4-1 7.5 1 7.8zm-1.5 0c.3 3.2-5.4.8-7.6-2.3 4.8 1.5 7.3-.3 7.6 2.3zm-1.5-2.5c1.8-1.3-.1-4.8-3.7-4.6.4 2.1 1.6 5.9 3.7 4.6zm14 14.7c.1 3.2-8 1.6-10.6-1.8 5.2 1 10.3-.8 10.5 1.8zm-32.4-5.8c.3 3.2-8.6-.4-10.8-3.4 4.7 1.6 10.5.8 10.8 3.4zm5.4 1.3c1.9-1.3-1.9-4.7-5-5.5.4 2.1 3 6.8 5 5.6zm.6 2.3c.2 2.9-9.5 1.3-12-1.4 8.3 1.5 11.7-1.1 12 1.4z"/>
<path d="M252.8 268.6c1 2.7-8.3 2-11.6.5 5.3 0 10.8-2.4 11.6-.5z"/>
<path d="M257.1 270.6c1 2.4-7.6 2.4-11.8 1 5.6 0 10.8-3.4 11.8-1zm6.3 1.3c1.6 2.9-7.6 3.1-10.5 1.7 5.2-.7 9.2-4 10.5-1.7zm-10.7-4.9c-2.9 1.8-2.7-3.6-5-7.3 3.6 3.3 7 5.6 5 7.3z"/>
<path d="M257.9 269c-2.4 2.1-4.4-5.3-6.6-9.5 3.6 4 8.8 7.7 6.6 9.4zm6.8 2c-2 2.4-8-7-10.2-12 3.3 3.9 11.8 10 10.2 12zm-5.8 7.2c-1 3.6-16.2-3.4-18-7.1 8.8 4.6 18.2 3.6 18 7zm-48.7-73.8c-.4-.5-1.4 0-1.2 1.1.3 1.5 2.5 9.2 6.3 11.8 2.7 2 17 5.1 23.4 6.5 3.6.7 6.5 2.5 8.9 5.3a94.4 94.4 0 00-3-9.8c-1.2-3-4.4-6.2-7.8-6.3-6.1-.3-14.1-.8-20-3.3a16 16 0 01-6.7-5.3z"/>
<path d="M245.5 234.9c2 1.4 4.1-3.7 1.7-8.6-.1 4.7-3.8 6.3-1.7 8.6z"/>
<path d="M247.4 239.6c2.7.8 3.5-4 1.8-7.8.3 4.1-4.3 6.6-1.8 7.8z"/>
<path d="M249.5 243.4c2.6 1.3 3.5-3.6 1.7-7.1.2 4.5-3.7 5.9-1.7 7z"/>
<path d="M248.4 243.7c-1 3-7-2.7-8-5.8 3.7 3.7 8.7 3.2 8 5.7z"/>
<path d="M245.7 239c-1.2 3-8.7-5-10.4-8.7 3.7 3.7 11.2 6.5 10.4 8.6z"/>
<path d="M244.2 234.3c-1.2 3.5-9.3-5.8-11.7-9.1 4 3.6 12.6 6.6 11.7 9.1zm-.3-3.4c3-.6-.1-3-3.7-6.9-.1 4.1.5 7 3.7 6.9z"/>
<path d="M239 228.5c1.3-1.3-1.1-1.9-4.1-5.3-.5 2.3 2.8 6.5 4.2 5.3zm14 15.2c1.6 1 2.6-2.3.7-5.2-.5 3.2-2.1 4-.7 5.2zm-34.2-20.3c-3.3 2-8.6-6-10-9.3 2.9 3.8 10.6 7.2 10 9.3z"/>
<path d="M221.7 228c-1.9 2-7.7-3.5-9.7-6.3 3 2.7 10.5 3 9.7 6.3z"/>
<path d="M224.8 232.2c-.6 2.8-9-3.5-11-6.5 3.6 3.5 11.6 3.2 11 6.5z"/>
<path d="M223.5 235.3c-1.3 2.5-8.2-3.8-9.9-7 4.3 3.6 11 4.5 10 7zM220 223c2.1-2.3 1.2-3.4-.4-7-.8 3.7-2.1 5.2.4 7zm2.9 4.3c4 .2 0-4.6-1-8.7.4 4.6-1 8.3 1 8.7z"/>
<path d="M225.4 231.1c2.7-.6 2-4.5-.2-9.2.5 5.1-2.3 8 .2 9.2zm-1 7.7c-1 3-8.8-4-10-6.8 4 3.4 10.7 4.5 10 6.8z"/>
<path d="M229.1 243.6c-1.1 3-9.3-3.2-11.8-6.6 4.9 4 12.4 3.6 11.8 6.6z"/>
<path d="M233.9 248.5c-1.3 4.3-9.9-2.6-12.4-6 5.4 4.2 13 3 12.4 6zm-8-11c2.3 1.1 3.2-5.4 1.9-10.1 0 5-4.7 8.8-2 10z"/>
<path d="M229.8 242.7c2.8.8 2-6.3-.5-11-.3 4.7-2.3 9 .5 11zm5 4.9c3 .1 1-6.1-1.6-9.6.4 4.5-1 9 1.6 9.6zm-5.5 2.6c-1 1.6-3.2-1.3-7-3.5 3.4 1 7.4 2 7 3.5zm-1.8-52.7c3-2.2.7-6.2 0-10-1 3.6-3.4 8.4 0 10zm0 5.3c-4.5-.5-3.8-6.1-4-9.7 1.4 4.9 5 5.7 4 9.8zm.6-.7c3.7-.2 3.5-4.4 3.7-8.6-1.9 3.9-4 4.5-3.7 8.6z"/>
<path d="M228 207.3c-3 .3-4.4-2.6-5-7 2.7 4.1 5.1 2.8 5 7zm1-.3c3.7.5 3-3.8 3-7-1.2 3-4.2 4-3 7z"/>
<path d="M223.2 205.2c.3 2.8 2.1 7.6 5 6.5 1.1-3.4-2.6-4.1-5-6.5z"/>
<path d="M229 212c-1.2-2.4 3-3.7 3.8-6.9.5 4.6.1 7.6-3.8 7zm-11.9-29.2c2.3-2.4.3-6.4-.4-10.2-1 3.6-2.5 8.4.4 10.2zm0 4.6c-4 .5-5-7.7-5.5-11.3 1.4 4.9 6 7 5.5 11.4zm.8 0c2.8-1.5 2.2-4.7 3-7-1.8 2.9-3.6 3.3-3 7z"/>
<path d="M217 192.8c-4.1.3-6.6-8.8-6.8-12.4 1.3 4.9 7.4 7.5 6.9 12.4zm.9-.2c4-.9 3.5-3.5 2.9-7.6-1.3 4.2-3.5 3.3-2.9 7.6z"/>
<path d="M217 198c-4.6.8-4.3-6.6-8-11.9 3.2 4 9 9 8 11.9zm1-.3c3.6.2 4-5.1 3.8-7.3-.9 2.2-5 4.2-3.7 7.4z"/>
<path d="M209.8 192.3c1.7 5.7 4.2 11.4 7.2 11 1.5-3.3-2.9-3.7-7.2-11z"/>
<path d="M218.1 202.4c-1.2-2.5 3-3.7 3.8-6.9.5 4.6.1 7.6-3.8 6.9zm-7.1-3.6c2.5 5.1 3.6 11 7 10.1 1.3-4-3.8-4.8-7-10.1z"/>
<path d="M218.7 208c-1.5-2.8 2.7-3.7 3.8-7.4.5 4.8 0 8.3-3.8 7.3zm7.2-34.5c2.4.6 5-2.1 4.1-6.2-2.8.6-4 3.2-4.1 6.2zm-7.9-2.1c.2 1.2 1.7 1.3 1.2-.4a5.3 5.3 0 010-3.4 7.5 7.5 0 000-4.6c-.4-1-1.8-.4-1.2.4.6.9.7 2.8.2 3.7-.6 1.3-.4 3-.2 4.3zm22.9 16c-1 1.3-2.9.4-1.4-1.5 1.2-1.5 3-2.8 3-4.4.2-2 1.3-5 2.4-6.1 1.1-1.1 2.4.4 1.2 1.2-1.3.8-2.2 4.4-2.1 5.8-.1 2-2 3.5-3.1 5zm-3-2.3c-1 1.4-2.4.5-1.6-1.7.7-1.5.8-3.5 1.6-4.6 1.2-1.7 3-3.1 4.1-4.2 1.2-1 2 0 1 1a27 27 0 00-3.3 4c-1.4 2.2-.8 4-1.8 5.5zm-15.7-7.2c-.1 2 1.5 2.4 1.4-.4 0-3-2.2-5.8-1-10.3.8-2.2.8-6.3.4-8.4-.4-2.2-2-.8-1.3.9.6 2-.1 5.6-.6 7.5-1.5 5.4 1.2 8 1 10.7zm4.3-11c-.2 1.9-1.8 2-1.3-.5.4-2 .4-3.6 0-5.3-.6-2.1-.4-5.7 0-7.2.5-1.6 2-.7 1.4.5a9.9 9.9 0 00-.3 5.9c.6 2 .5 4.8.2 6.7zM210.9 204c.8.9 2 .3 1-1-1-1-.7-1.2-1.3-2.4-.6-1.4-.5-2.1-1.2-3-.7-1-1.6 0-1 .7.8 1 .6 1.6 1 2.5 1 1.5.7 2.3 1.5 3.2zm20.4 24.6a8.6 8.6 0 014.4 6.7 16 16 0 002 7.1c-2-.5-3-3.7-3.3-6.8-.3-3.2-2-4.5-3-7zm5.1 5.9c1.7 3.1 4 4.3 4.2 6.6.2 2.7.4 2.8 1.1 5.4-2-.5-2.5-.7-3-4.7-.3-2.8-2.6-4.7-2.3-7.3z"/>
<path stroke="none" d="M289 263.3c1 1.8 2 4.5 4 4 0-1.3-2.1-2.3-4-4zm3 .6c3.7 1.6 7 1.2 7.5 3.6-3.6.4-5-1-7.6-3.6zm-16.1-12.7a14 14 0 015 7.7 29 29 0 003.6 7.8 13 13 0 01-5.3-7.4c-.7-3-1.6-5.3-3.3-8zm3.1 0c2.8 2.2 5.4 4.8 6.2 7.9.8 2.9 1.3 5.1 3.2 8-3-1.9-4.1-4.7-5-7.8-.7-3-2.5-5.2-4.4-8zm9.2 7.3a1.1 1.1 0 01.7-1.2 33.4 33.4 0 012.6-.8c1-.3 1.6.4 1.6.9v2c0 .7-.2.8-.7.9-.7.1-1.7.2-2.4.7-.6.4-1.2.1-1.5-.5l-.3-2zm10.6 0c0-.6-.2-1.1-.6-1.2a5.4 5.4 0 00-2.4-.4c-1 0-1.1.2-1.1.6v2.1c0 .8 0 .8.4 1 .7 0 1.8 0 2.5.6.5.3 1 0 1.1-.6l.1-2.1z"/>
</g>
<use width="100%" height="100%" x="-600" transform="scale(-1 1)" xlink:href="#a"/>
<g stroke="none">
<path d="M328.5 286.6c0 1.2.2 2.2 1 3.1a19 19 0 00-13.8 1.1c-1.8.8-4-1-1.9-2.7 3-2.3 9.7-1 14.7-1.5zm-57.5 0a7 7 0 01-.4 3c4.4-1.7 9.1-.2 13.6 1.6 3 1.3 3.3-1 2.8-1.7a6.5 6.5 0 00-5-2.9h-11zm3.8-21.7c-1.3-.5-2.7 0-4 1.4-4.3 4.2-9.4 8.3-13.5 11.6-1.5 1.3-3 3.7 3.4 6 .3.2 5 2 8 2 1.3 0 1.3 1.8 1 2.3-.5 1-.1 1.4-1.1 2.3-1.1 1 0 2.1 1 1.3 3.6-3.2 9.6-1.1 15.3.7 1.4.4 3.8.3 3.8-1.6 0-2 1.5-3.4 2.4-3.5 2.4.4 14 .5 17.5.1 2-.3 2.2 2.9 3.3 4 .8.9 3.7 1.1 5.8.2 4-1.8 10-1.8 12.5 0 1 .7 1.9 0 1.3-.7-.8-1-.7-1.6-1.1-2.4-1-2-.2-2.4.8-2.5 11-1.5 14.6-5.2 11.2-8.3-4.4-3.8-9.2-7.7-13.4-12.2-1.2-1.2-2-1.7-4.3-.7a66.5 66.5 0 01-25.3 5.9 76 76 0 01-24.6-5.8z"/>
<path fill="#bd6b00" d="M326.6 265.5l-1.6.4c-9 3.2-17.2 5.4-25.7 5.4-8.3 0-17-2.4-24.9-5.6a2.3 2.3 0 00-1.5 0c-.5.1-1 .4-1.3.7a115.5 115.5 0 01-11.8 10.3c-.7.5-.6 1.8.5 2.2 8.3 3 16.4 8.5 39.6 8.3 23.5-.2 31.8-5.6 39.2-8.1.5-.2 1-.5 1.3-1a1 1 0 00.1-.8 2 2 0 00-.6-.8c-4.3-3.5-8.8-6.3-11.8-10.4-.3-.5-.9-.6-1.5-.5zm0 .5c.5 0 1 0 1.1.3 3 4.3 7.7 7 11.9 10.5l.4.7a.5.5 0 010 .4c-.1.3-.6.6-1 .7-7.6 2.6-15.7 8-39 8.2-23.2.2-31.2-5.3-39.5-8.3-.8-.4-.7-1.2-.4-1.4 4.2-3.2 8.2-6.8 11.8-10.4a2.5 2.5 0 011.1-.6h1.2a68 68 0 0025 5.6c8.7 0 17-2.2 26-5.3a6.7 6.7 0 011.5-.4z"/>
<path d="M269.7 114.6c0-1.4 2-1.5 1.8.4-.3 2.3 4.5 8.3 4.9 12 .3 2.5-1.5 4.6-3.2 6a6.6 6.6 0 01-6.8.5c-.9-.8-1.7-3.3-1-4.3.2-.3 1.3 3.7 3.7 3.7 3.3 0 6-2.5 6-4.7.2-3.8-5.3-9.8-5.4-13.6zm9.5 9.4c.6-.4 1.4 1.3.8 1.7-.5.3-1.5-1.3-.8-1.8zm1.5-3.5c-.3.2-.8 0-.7-.2a12 12 0 013.6-3.3c.4-.2 1 .4.8.7a11 11 0 01-3.7 2.8zm12.6-10c.3-.6 2.1-1.3 2.6-1.7.4-.5.6.4.4.7-.3.7-1.9 1.7-2.6 1.8-.3 0-.6-.4-.4-.7zm4.3.3a8.3 8.3 0 012.5-3.4c.5-.3 1.3 0 1.1.4a9 9 0 01-2.9 3.3c-.3.3-.8 0-.7-.3zm-3.7 2.7c-.3.2-.1.7.1.8.6.2 1.5.2 2 0 .6-.4.3-2.9-.5-1.6-.6.8-1 .6-1.6.8zm-7.3 5.6c-1.3-1 .4-2.4 1.7-1.4 2.7 2-4 9.8-7.6 13.4-.7.7-1.3-1-.4-1.9a33.7 33.7 0 006.7-7.6c.4-.5.7-1.6-.4-2.5zm15.3-6.6c.1-1-1.6 0-1.6-1.3 0-.7 1.9-1.2 2.7-.4 1.3 1.4.3 3.7-2 3.9-1.8 0-5 2.7-4.5 3.2.5.7 5.4 1.1 8.3.7 1.8-.3 1.4 1.3-.4 1.5-1.8.2-3.2 0-4.8.6-2 .5-2.8 3-3.9 4-.2.2-.8-.8-.6-1.2.8-1.2 2-3 3.4-3.6.8-.3-2.4-.4-3.4-.7-.8-.2-.6-1.3-.3-1.9.4-.8 3.4-3.9 4.7-3.8 1.1 0 2.3-.3 2.4-1zm5 .2c.6-.5 1-1.3 1.5-1.8.3-.3.9 0 .8.8-.1.7-1 1.2-1.5 1.7-.5.3-1-.4-.7-.7zm6.5-2.3c.9 0 1 1.6.2 1.8-.6.2-1-1.7-.2-1.8zm-2.1 5c0 1.5.7 1.4 2 1.3 1.3 0 2.4 0 2.4-1.2 0-1.3-.7-2.5-1-1.6-.1.8-.3 2.2-.8 1.6-.4-.5-.2-.6-1 .2-.5.5-.5-.2-.8-.6-.2-.3-.8.2-.8.4zm-9.2 7.2c-.3 1.9 0 4.5.9 4.5 1.2 0 3.6-4 4.8-6.2.7-1.2 1.8-1.4 1.3-.1-.7 1.9-.6 6 0 7.2.4.6 3-.6 3.4-1.5.8-1.7.1-4.8.4-6.7.1-1.2 1.3-1.5 1.2-.3a75.6 75.6 0 00-.1 7.5c0 1 2.9 2.4 3.3-.6.2-1.8 1.2-3.7 0-5.7-.8-1.3 1.1-1.2 2.1.6.7 1.2-.6 3.2-.5 4.7 0 2.4-1.8 3.8-3.1 3.8-1.2 0-2-1.5-3-1.5s-2.2 1.7-3 1.6c-3.6-.2-1.7-5.3-2.8-5.4-1.2 0-2.5 5-4 4.9-1.4-.2-3-4.2-2.3-5.8.5-1.6 1.5-2 1.4-1zm16.9-8c-1.7-1 0-3.7.9-2.8 1.6 2 3.2 6.5 4.4 6.9.7.2.6-3.4 1.1-5 .4-1.3 1.8-.9 1.6.7-.1.5-2 6.4-1.8 6.6a47.1 47.1 0 013.3 7.8c.3 1.2-1.1.4-1.3.2-.9-1.4-2.4-6.5-2.4-6.2l-1.7 7.7c-.2 1-1.7.8-1.3-1 .3-1.4 2.3-8.3 2.2-8.6a17.2 17.2 0 00-5-6.3z"/>
<path d="M322 131.2c-.4 0-1.2 1 1.2 1.5 3.1.6 6.6-.5 7.6-3.6 1.3-3.7 2-7.2 2.7-8.5.8-1.5 1.8-1.4 1-3.6-.5-1.7-1.5-1.2-1.7-.3-.5 2.3-2.6 10-3.3 11.3-1.2 2.6-3.7 3.6-7.5 3.2z"/>
<path d="M328.4 119c-.4-.7-1.2 0-1 .7a1.2 1.2 0 001.2 1c.7 0 2.2.1 2.2-1 0-.8-.7-1.5-1.1-.6-.5.8-1 .7-1.3 0zm.7-3c-.2.2 0 1.1.3 1a7 7 0 003.3-.8c.2-.2.1-.7-.2-.7-1 0-2.6 0-3.4.5zm8.8 2.3c.8-1.2 2.8-1.3 2 .4a614.3 614.3 0 01-6.3 12.3c-.8 1.4-1.4.7-.8-.4.7-1.4 4.9-12 5.1-12.3z"/>
<path d="M330.2 133c-.2-.8-1.5-2-1.3.2.2 3.8 5.5 2.6 7 1.3s.3 4.3 2.2 4.9c1 .3 3-1.1 4-2.4 2.7-3.5 4.5-8.6 7-12 1-1.4-.5-2.4-1-1.3-2.4 3.8-5.2 11.6-8.3 13.6-2.5 1.6-1.7-2-1.8-3.2-.1-.8-1.1-2-2.4-.9a5.5 5.5 0 01-3.7 1.2c-.7 0-1.4 0-1.7-1.4z"/>
<path d="M339.6 126c0-.3-1.1-.4-1 .7 0 .8 1 1 1.1 1 1.5-1.2-.3-.6-.1-1.8zm-2.3 4.4c-.3 0-.6 1 .2 1.1l3.9-.2c.4 0 .6-.9-.4-.8-1.2 0-2.7-.3-3.7 0zm-62-16.6c.5 0 1.6 1.4 1.5 1.9 0 .2-1.2 0-1.5-.3-.3-.3-.2-1.6 0-1.6zm-5.3 10.4c-1 .6.2 1.7 1 1.2 2.8-1.9 7-3.8 8-7.5.3-1.2 1.4-3.1 2.5-3.5 1-.5 2.6 1.9 3.6 0 .6-1 2.7.7 3.2-.4.6-1.3.3-2 .3-3.4 0-.8-.7-1-1.2.3-.2.6 0 1.2-.1 1.6-.2.2-.6.4-1 .2-.2-.2 0-.7-.6-1-.2 0-.6-.1-.8.2-.7 1.3-1 2.5-2.1 1-.9-1-1.4-3.1-2-.3-.2 1-1.7 2.4-2.6 2.4-1.1 0-.8-3-3.2-2.5-1.3.3-1.2 2.7-1 3.5.3 1.3 4 .4 3.7 1.2-.6 2.7-4.4 5.4-7.7 7zm-22.7 13.2c-.1.5.5 1.7 1.1 1.8.6 0 1-1.3.8-1.8-.2-.3-1.8-.3-1.9 0zm3.3 4.9c-.4-.4-1.6.7-.6 1.5.5.5 2.5 1.1 3 .2.8-1.2-.7-5.5 0-6 .5-.5 2.8 2.8 4 3 2.7.4 2-4.6 5-4.2 1.9.2 2.1-2.2 1.8-3.8-.2-1.5-2.6-3.6-3.7-4.6-1.4-1.2-2.1 1-1.2 1.6 1.2 1 3.3 2.9 3.6 4.1.1.6-1.4 1.8-2 1.5-1.4-.8-2.6-4-3.8-4.7-.4-.2-1.4.3-1 1.3.6 1.1 3 2.7 3.1 3.9.1 1-1 3.2-1.8 3.2-.9 0-3-2.7-3.7-4-.4-.5-1.5-.5-1.7.4a22 22 0 00.5 5.5c.2 1.6-.9 1.7-1.5 1.1zm-4-8.6c-.4.4.8 1.2 1 1 .4-.4 2.1-2.3 1.8-3-.3-.6-2.6-2-3-1.3-.7 1.1 2.2 1.7 1.7 2a7 7 0 00-1.5 1.3zm4.1-8.4s.8 2.5 1.4 1.4c.4-.7-1.4-1.4-1.4-1.4zm1.2 4c-.2 0-1 .7-.5 1 .8.4 2.9.8 2.4-.7-.3-.9 3.2 0 2.3-2.4a3.7 3.7 0 00-1.7-1.7c-.4 0-1.5.5-.8.9.5.2 2 1.1 1.5 1.7-.7.6-1.1-.3-1.9-.1-.4 0-.1 1.2-.4 1.5 0 .2-.7-.4-.9-.3zm5.5-9.5a3.5 3.5 0 00-1.2 2c0 .2.3.6.5.5a3.2 3.2 0 001.2-1.9c0-.3-.2-.8-.5-.6zm2.8-.3c-.8-1 1-2.6 1.7-.5.5 1.3 5.5 7.9 6.5 10.1.8 1.5 0 2.1-.9 1-2.5-3.2-4.6-7.2-7.3-10.6zm5.2.1c.9-1 2.7-3 2.2-4-.4-1-1.5-1-1.7-.7-1 1.3.8 1 .5 1.4-.5 1-1 1.6-1.3 2.6-.1.3.1.9.3.7zm77.8 3.2c-.7-.5.6-3 1.5-2 2.3 2.7 3.4 11.6 4.1 18.3 0 0-1 .9-1 .7 0-3.5-1.5-14.4-4.6-17zm-53.1-8.6c-.8-1.8 1.1-2.4 1.4-1.2 1.3 5.8 4.5 10.2 7 14.1.7 1.2 0 2-1.7.8-1.2-.8-2.5-3.9-3-4-1.2-.2-3.8 5-9.1 3.5-1.4-.4-1.3-4.5-1.4-6.3 0-.9 1-1 1 0 0 1.7 0 5.2 2.1 5.4 1.8 0 5.6-2.4 6.4-4.4.8-2-1.9-5.9-2.7-8z"/>
<path d="M344.6 138.4c.4-1.2 6.1-10.8 6.9-12.9.4-1 2 1.8.4 3.3-1.4 1.2-5.5 8-6.3 10.4-.4 1-1.4.5-1-.8z"/>
<path d="M354.3 129.3c1-4 3.6.6 1.3 2.8-3.4 3.4-4.5 9.9-10 10.9-1.4.3-4-.7-4.8-1.3-.3-.2.2-1.6 1.1-.9 1.3 1 4.1 1.3 5.6.1a25.4 25.4 0 006.8-11.6zm-57 12.7c-.3.3-1 .3-1.1.7-.3 1.4 0 2.2-.3 3.6s-1.3 1.4-1.2.3c0-1.4 1.3-3.5.4-3.6-.6-.1-1-.9-.4-1.3 1.1-.7 1.7-.6 2.4-.4.3.1.4.5.2.7z"/>
<path d="M296.5 140c-1.4 1.4-2.8 1.9-4.1 3.5-.6.6-.5 1.5-.9 2.4-.3.9-1.4 1-1.7.9-.5-.4-.4-2-1-1.2-.6.9-.9 2-1.7 2-.7 0-2-1.5-1.3-1.5 2.3-.3 2.2-2 3-2.2 1-.1 1 1.5 1.7 1.2.4-.2.7-2.1 1.2-2.6 1.5-1.6 2.7-2.4 4.3-3.6.7-.6 1.3.5.5 1.2zm5.3 5c-1.2.2-1 1.7-.6 1.8.5.3 1.4.4 1.7-1.3.2-.7.3 3.5 1.8 1.9 1-1 3.1.2 4-1 .7-.9 1-1.5.4-2.7-.2-.3-1-.2-1 .7 0 .8-.5 1.7-1.3 1.6-.4-.1.2-1.9-.2-2.4a.5.5 0 00-.7 0c-.3.4.3 2.2-.6 2.4-1.2.2-.6-1.2-1-1.4-1.7-.8-1.8.2-2.5.3zm9-3c.9-.2.6-.2 2-1.3.5-.4.6.8.5 1.3 0 .7-1 .2-1.3.9-.4.9-.2 3-.4 3.8 0 .4-.8.4-.8 0-.2-1 .1-2 0-3.3 0-.4-.5-1.1 0-1.3zm-5-2.5c-.2.9-.2 1.6-.2 2.3 0 .5 1 .2 1 .1 0-.8.2-2 0-2.3-.2-.1-.7-.3-.8-.1z"/>
<path d="M299.5 130.2l-1.4 5.6-2-3.8v3.9l-4.4-5.2 1.5 5.6-4-3.4 2.2 3.8-7-4.5 4.4 5.2-5.6-2.8 4 3.4-9-3.4 8.7 4.3a29 29 0 0112.6-2.6c4.9 0 9.3 1 12.5 2.6l8.8-4.3-9 3.4 4-3.4-5.5 2.8 4.3-5.2-7 4.5 2.2-3.8-4 3.3 1.5-5.5-4.3 5.2V132l-2 3.8-1.5-5.6z"/>
</g>
</g>
<path fill="#fff" d="M249 299.7l-.1 2.2h-.4v-1.5a7.4 7.4 0 00-.4-1.3 5.8 5.8 0 00-.5-1 11.3 11.3 0 00-.8-1.1l.7-1.8a5.3 5.3 0 011.1 2 7.5 7.5 0 01.5 2.5m5.5-3.4c0 .6-.1 1-.3 1.2-.2.3-.6.5-1 .6l.2 1.1a5.3 5.3 0 010 1.7v1h-.4v-1a4.4 4.4 0 00-.2-.8 28.8 28.8 0 00-.3-.8 8.4 8.4 0 00-.6-1.2l-.8-1.3.5-1.6.8.9.7.2c.7 0 1-.3 1-1h.3a8 8 0 000 .5v.5m5.1 3.9l-.4 1.7-.6-.6a3.5 3.5 0 01-.3-1 9.9 9.9 0 010-1.4 3 3 0 01-.9.1c-.4 0-.7 0-1-.3a1 1 0 01-.4-.8c0-.7.2-1.3.6-1.8.3-.6.7-.9 1.2-.9.3 0 .6.1.7.3l.3.8v1.6c0 .7 0 1.2.2 1.4 0 .3.3.5.6.9m-1.5-2.9c0-.4-.3-.6-.7-.6a.8.8 0 00-.4.1c-.2.1-.2.2-.2.3 0 .2.2.3.8.3a2.2 2.2 0 00.5 0m6.9 2.3l-.2 2.1c-.4-.3-.8-.8-1.1-1.5a20 20 0 01-1.1-3.3 41.3 41.3 0 01-.8 3l-.6 1.3a2 2 0 01-.6.6v-2l.8-1.2a6 6 0 00.6-1.4 16 16 0 00.3-2h.4l.7 2a6.7 6.7 0 001.6 2.4"/>
<path fill="#bf0000" d="M280.5 319.2c.3.3.5.6.6 1l.2 1.2h-.6a6.2 6.2 0 00-.7-1.1 15.2 15.2 0 00-1-1l-1.3-1.2a27.3 27.3 0 00-1.6-1.3l-.5-.4-.2-.6a9 9 0 01-.1-1.3l2.1 1.7a35.3 35.3 0 012 1.8l1.1 1.2m-7.6-4.6l-.1 1.6-2.5-.1.2-1.6h2.4m6.7 7.1l-6 1.9-1.2-1.6 5.2-1.5a6.3 6.3 0 00-.5-.7l-.7-.5a1.1 1.1 0 01-.4.8 2 2 0 01-.8.5 2.7 2.7 0 01-1.4 0c-.5 0-.8-.3-1-.6a3.1 3.1 0 01-.5-1.7c0-.8.2-1.3.6-1.5.6-.2 1.4 0 2.5.5a6.5 6.5 0 012.4 2l1.8 2.4m-4.7-3.2a3.1 3.1 0 00-.6-.2.9.9 0 00-.5 0 .5.5 0 00-.4.3.4.4 0 000 .4l.4.2h.5a.9.9 0 00.3-.3l.3-.4m-6.4-1.2l-.4 1.6-2.5-.3.4-1.5 2.5.2m6 6l-1.4.4a4.2 4.2 0 01-1.4 0 2.8 2.8 0 01-1.2-.3c-.2.4-.6.7-1.1 1a5.9 5.9 0 01-1.3.4l-1 .3-.8-1.6 1-.2 1-.3.6-.4a4.7 4.7 0 00-.7-.4 1 1 0 00-.6-.1.3.3 0 00-.2 0 .5.5 0 000 .3h-.5c-.4-.7-.5-1.2-.3-1.6.3-.4.8-.7 1.6-.9.8-.2 1.5-.2 2.1 0 .6 0 1 .3 1.2.6.1.2.2.4.1.6 0 .2 0 .5-.3 1a1.6 1.6 0 001 0l1.3-.3.8 1.6m-6.4 1.5l-1.3.2c-.7 0-1.3 0-1.8-.4a4.3 4.3 0 01-1.3-2l-.6-1.7a2 2 0 00-.6-1l-.8-.3.5-1.7 1.1.9.8 1.3.4 1.2a5 5 0 001 1.7c.2.3.4.4.7.3l1.3-.2.6 1.7m-5.5-6l-.9 1.5-2.3-.6.8-1.5 2.4.6m1.4 6.7l-6 .5-.3-1.6 5-.5a1.9 1.9 0 00-.6-.7 6 6 0 00-.8-.5l.5-1.5c.5.3 1 .6 1.2 1 .2.4.5 1 .6 1.7l.4 1.6m-4.8.8a13 13 0 01-1.8-.2 8.3 8.3 0 01-1.3-.4 4.5 4.5 0 01-1 .3h-3c-.5 0-.8 0-1-.2l-.6-.8a3.3 3.3 0 01-1.3.7 4 4 0 01-1.3.2h-1.4l.2-1.8 1.3.1c.7 0 1.3 0 1.7-.3.6-.3 1-.8 1-1.4h.6a22.9 22.9 0 00-.1 1c0 .3 0 .5.3.6l.7.2h2.9c.4-.2.6-.5.7-1l.1-.3a2.6 2.6 0 01.4-.2l.4-.1v.6l-.3.8a6.4 6.4 0 001.7.4c0-.1 0-.3-.2-.5 0-.3-.2-.4-.2-.5a.4.4 0 01.1-.2l.3-.2.8-.7.3.7c0 .2.1.5 0 .8l-.1 2.4m-9-7l-1.5 1-1.1-.6-1.1.8-1.5-.9 1.4-1 1.2.7 1.1-.9 1.5 1m-2.4 6.4l-5.8-1 .7-1.6 4.8.8a1.3 1.3 0 000-.8 4 4 0 00-.5-.6l1.3-1.3c.3.4.5.8.5 1.2 0 .4 0 1-.4 1.7l-.6 1.6m-4.9-.8l-1.2-.3c-.7-.1-1.1-.4-1.2-.9-.1-.5.1-1.2.7-2.2l1-1.7.2-.9-.3-.6 1.8-1.2.2 1.1c0 .4-.2.9-.6 1.4l-.6 1.2a4 4 0 00-.7 1.7c0 .3.1.5.4.5l1.2.3-.9 1.6m-3-6.3l-2 .9-1.4-1.4 2-.8 1.5 1.3m-.9 5.3a4 4 0 01-1.2 1.1c-.4.3-.9.4-1.4.5a7 7 0 01-1.9 0 11.8 11.8 0 01-2.2-.6 6 6 0 01-2.7-1.6c-.5-.6-.5-1.2 0-1.8a5.6 5.6 0 011.5-1.3 18.8 18.8 0 013-1.2l.4.4c-1 .4-1.8.7-2.2 1a3.3 3.3 0 00-1 .7c-.3.4-.3.8.1 1.3a8.4 8.4 0 005 1.8c1 0 1.6-.3 1.9-.6l.4-.7.1-1.4 2-1.2-.1 1.2c-.1.4-.4.8-.8 1.3l-.9 1.1"/>
</svg>

After

Width:  |  Height:  |  Size: 20 KiB

+14
View File
@@ -0,0 +1,14 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<defs>
<clipPath>
<path fill="#25ff01" d="M109 47.6h464.8v464.9H109z"/>
</clipPath>
</defs>
<g fill-rule="evenodd" clip-path="url(#a)" transform="translate(-120 -52.4) scale(1.1014)">
<path fill="#fff" d="M0 47.6h693V512H0z"/>
<path d="M1.5 48.2h690.9v196.2H1.5z"/>
<path fill="#0061ff" d="M128.3 232.1h458.5v103.4H128.3z"/>
<path fill="#e20000" d="M692.5 49.2v463.3H347L692.5 49.2zm-691.3 0v463.3h345.7L1.2 49.2z"/>
<path fill="#ffd600" d="M508.8 232.2l-69.3-17.6 59-44.4-72.5 10.3 37.3-63-64.1 37.2 11.3-73.5-43.4 58-17.6-67.3-19.6 69.3-43.4-59 12.4 75.6-64.1-39.3 37.2 63-70.3-11.3 57.9 43.4-72.4 18.6h321.6z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 732 B

+763
View File
@@ -0,0 +1,763 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<defs>
<clipPath>
<path fill-opacity=".7" d="M0 0h640v480H0z"/>
</clipPath>
</defs>
<path fill="#012169" fill-opacity="1" stroke-width="4.1" d="M0 0h512v512H0z"/>
<path fill="#49497d" d="M384 212.7l2 2z"/>
<path fill="#0e0e6e" d="M386 212.7l2 2z"/>
<path fill="#262678" d="M379.9 214.7l2 2z"/>
<path fill="#808067" d="M382 214.7l2 2z"/>
<path fill="#58587b" d="M388 214.7l2 2z"/>
<path fill="#0e0e6e" d="M312.9 216.8l2 2z"/>
<path fill="#1b1b74" d="M375.9 216.8l2 2z"/>
<path fill="#6e6c70" d="M377.9 216.8l2 2z"/>
<path fill="#cc3" d="M316.5 220.4c0 52.5-6 111.6 33 152.7 8 8.4 23.4 27.7 36.5 27 13.7-.8 31.4-21.1 39.2-31 34-44.8 28.7-98.2 29.8-150.2-15.3 6.9-23 9.2-36.4 9-10 1-25.3-5.5-34.5-10-6 4-14.7 8.9-30.4 9.4-18 .8-23.8-2.3-37.2-7z"/>
<path fill="#99994e" d="M390 216.8l2 2z"/>
<path fill="#49497d" d="M392 216.8l2 2z"/>
<path fill="#0e0e6e" d="M455 216.8l2 2z"/>
<path fill="#a4a43d" d="M315 218.8l2 2z"/>
<path fill="#6e6c70" d="M317 218.8l2 2z"/>
<path fill="#3a3a7c" d="M319 218.8l2 2z"/>
<path fill="#1b1b74" d="M371.8 218.8l2 2z"/>
<path fill="#6e6c70" d="M373.8 218.8l2 2z"/>
<path fill="#a4a43d" d="M375.9 218.8l2 2z"/>
<path fill="#d0d045" d="M384 218.8l2 2z"/>
<path fill="#a4a43d" d="M392 218.8l2 2z"/>
<path fill="#8d8d5b" d="M394 218.8l2 2z"/>
<path fill="#3a3a7c" d="M396.2 218.8l2 2z"/>
<path fill="#262678" d="M448.9 218.8l2 2z"/>
<path fill="#53527c" d="M451 218.8l2 2z"/>
<path fill="#8d8d5b" d="M453 218.8l2 2z"/>
<path fill="#737370" d="M323 220.9l2 2z"/>
<path fill="#53527c" d="M325 220.9l2 2z"/>
<path fill="#1b1b74" d="M327 220.9l2 2z"/>
<path fill="#262678" d="M367.7 220.9l2 2z"/>
<path fill="#6e6c70" d="M369.8 220.9l2 2z"/>
<path fill="#a4a43d" d="M371.8 220.9l2 2z"/>
<path fill="#e5e59d" d="M382 220.9l2 2z"/>
<path fill="#fff" d="M320.6 226a509 509 0 004 88.2c4.9 15.4 4.2 23.9 11.3 33l99-.7c6-9.7 10.5-24.4 11-30.3 5.6-29.7 5.7-62.6 5.9-92a62 62 0 01-35.7 7.4 69 69 0 01-30.5-9.2c-9.5 5.6-12.8 8.2-28.4 8.9-12.2.6-22 1.6-36.6-5.2z"/>
<path fill="#f2f1d7" d="M386 220.9l2 2z"/>
<path fill="#d9d868" d="M388 220.9l2 2z"/>
<path fill="#a4a43d" d="M396.2 220.9l2 2z"/>
<path fill="#99994e" d="M398.2 220.9l2 2z"/>
<path fill="#49497d" d="M400.2 220.9l2 2z"/>
<path fill="#0e0e6e" d="M402.2 220.9l2 2z"/>
<path fill="#3a3a7c" d="M442.9 220.9l2 2z"/>
<path fill="#667" d="M444.9 220.9l2 2z"/>
<path fill="#99994e" d="M446.9 220.9l2 2z"/>
<path fill="#a4a43d" d="M448.9 220.9l2 2-2-2m-121.8 2l2 2z"/>
<path fill="#99994e" d="M329.2 222.9l2 2z"/>
<path fill="#6e6c70" d="M331.2 222.9l2 2z"/>
<path fill="#49497d" d="M333.2 222.9l2 2z"/>
<path fill="#1b1b74" d="M335.2 222.9l2 2-2-2m26.4 0l2 2z"/>
<path fill="#53527c" d="M363.6 222.9l2 2-2-2z"/>
<path fill="#8d8d5b" d="M365.7 222.9l2 2z"/>
<path fill="#a4a43d" d="M367.7 222.9l2 2z"/>
<path fill="#e5e59d" d="M377.9 222.9l2 2z"/>
<path fill="#fbfaf2" d="M379.9 222.9l2 2z"/>
<path fill="#f2f1d2" d="M390 222.9l2 2z"/>
<path fill="#d9d868" d="M392 222.9l2 2z"/>
<path fill="#a4a43d" d="M402.2 222.9l2 2z"/>
<path fill="#6e6c70" d="M404.3 222.9l2 2z"/>
<path fill="#3a3a7c" d="M406.3 222.9l2 2z"/>
<path fill="#0e0e6e" d="M432.7 222.9l2 2z"/>
<path fill="#32327b" d="M434.7 222.9l2 2z"/>
<path fill="#58587b" d="M436.8 222.9l2 2z"/>
<path fill="#808067" d="M438.8 222.9l2 2z"/>
<path fill="#a4a43d" d="M442.2 223.5l1.3.7z"/>
<path fill="#dddc7a" d="M319 224.9l2 2z"/>
<path fill="#d0d045" d="M321 224.9l2 2z"/>
<path fill="#a4a43d" d="M336.6 225.5l1.4.7z"/>
<path fill="#808067" d="M339.3 224.9l2 2z"/>
<path fill="#667" d="M341.3 224.9l2 2z"/>
<path fill="#58587b" d="M343.4 224.9l2 2z"/>
<path fill="#49497d" d="M345.4 224.9l2 2z"/>
<path fill="#737370" d="M357.6 224.9l2 2z"/>
<path fill="#99994e" d="M359.6 224.9l2 2z"/>
<path fill="#a4a43d" d="M361.6 224.9l2 2z"/>
<path fill="#e5e59d" d="M373.8 224.9l2 2z"/>
<path fill="#fbfaf2" d="M375.9 224.9l2 2z"/>
<path fill="#f2f1d2" d="M394 224.9l2 2z"/>
<path fill="#d9d868" d="M396.2 224.9l2 2z"/>
<path fill="#a4a43d" d="M407.6 225.5l1.4.7-1.3-.7z"/>
<path fill="#808067" d="M410.4 224.9l2 2z"/>
<path fill="#667" d="M412.4 224.9l2 2z"/>
<path fill="#58587b" d="M414.4 224.9l2 2z"/>
<path fill="#3a3a7c" d="M416.5 224.9l2 2z"/>
<path fill="#58587b" d="M425.9 225.5l1.4.7z"/>
<path fill="#737370" d="M428.6 224.9l2 2z"/>
<path fill="#99994e" d="M430.6 224.9l2 2-2-2z"/>
<path fill="#a4a43d" d="M432.7 224.9l2 2z"/>
<path fill="#dddc7a" d="M448.9 224.9l2 2z"/>
<path fill="#d0d045" d="M451 224.9l2 2z"/>
<path fill="#f2f1d7" d="M323 226.9l2 2z"/>
<path fill="#e0dea1" d="M325 226.9l2 2z"/>
<path fill="#dddc7a" d="M327 226.9l2 2z"/>
<path fill="#d9d868" d="M367.7 226.9l2 2z"/>
<path fill="#e5e3af" d="M369.8 226.9l2 2z"/>
<path fill="#f6f6e4" d="M398.2 226.9l2 2z"/>
<path fill="#e1e18c" d="M400.2 226.9l2 2z"/>
<path fill="#d4d456" d="M440.8 226.9l2 2z"/>
<path fill="#e1e18c" d="M442.9 226.9l2 2z"/>
<path fill="#eeedc1" d="M444.9 226.9l2 2z"/>
<path fill="#f2f1d2" d="M331.2 228.9l2 2z"/>
<path fill="#e0dea1" d="M333.2 228.9l2 2z"/>
<path fill="#dddc7a" d="M335.2 228.9l2 2z"/>
<path fill="#d0d045" d="M337.3 228.9l2 2z"/>
<path fill="#dddc7a" d="M361.6 228.9l2 2z"/>
<path fill="#e5e3af" d="M363.6 228.9l2 2-2-2z"/>
<path fill="#f6f6e4" d="M365.7 228.9l2 2z"/>
<path fill="#eeedc1" d="M404.3 228.9l2 2z"/>
<path fill="#e1e18c" d="M406.3 228.9l2 2z"/>
<path fill="#d4d456" d="M408.3 228.9l2 2z"/>
<path fill="#d9d868" d="M432.7 228.9l2 2z"/>
<path fill="#e1e18c" d="M434.7 228.9l2 2z"/>
<path fill="#eeedc1" d="M436.8 228.9l2 2z"/>
<path fill="#f6f6e4" d="M438.8 228.9l2 2z"/>
<path fill="#f2f1d7" d="M341.3 230.9l2 2-2-2z"/>
<path fill="#f2f1d2" d="M343.4 230.9l2 2-2-2z"/>
<path fill="#eeedc1" d="M345.4 230.9l2 2-2-2z"/>
<path fill="#f2f1d2" d="M354.9 231.6l1.3.7z"/>
<path fill="#fbfaf2" d="M357.6 230.9l2 2-2-2z"/>
<path fill="#fef8f1" d="M367.7 230.9l4 4v-4h-4z"/>
<path fill="#f2f1d7" d="M412.4 230.9l2 2-2-2z"/>
<path fill="#f2f1d2" d="M414.4 230.9l2 2-2-2z"/>
<path fill="#e5e3af" d="M416.5 230.9l2 2-2-2z"/>
<path fill="#e5e59d" d="M419.9 231.6l1.3.7-1.4-.7z"/>
<path fill="#e0dea1" d="M422.6 230.9l2 2-2-2z"/>
<path fill="#f2f1d2" d="M425.9 231.6l1.4.7z"/>
<path fill="#fbfaf2" d="M428.6 230.9l2 2-2-2z"/>
<path fill="#fef8f1" d="M363.6 233l2 2-2-2z"/>
<path fill="#fbbe66" d="M365.7 233l2 2z"/>
<path fill="#fbc477" d="M363.6 235l2 2-2-2z"/>
<path fill="#fcb144" d="M367.7 235l2 2z"/>
<path fill="#fe9f11" d="M363.6 237l2 2-2-2z"/>
<path fill="#fea522" d="M367.7 237l2 2z"/>
<path fill="#fae3c9" d="M361.6 239l2 2-2-2m8.2 0l2 2z"/>
<path fill="#fbead6" d="M379.9 239l2 2z"/>
<path fill="#f9d6aa" d="M382 239l2 2z"/>
<path fill="#fae3c9" d="M390 239l2 2z"/>
<path fill="#fef8f1" d="M392 239l2 2z"/>
<path fill="#f9d099" d="M361.6 241l2 2z"/>
<path fill="#fdab33" d="M369.8 241l2 2z"/>
<path fill="#fcf1e4" d="M373.8 241l2 2z"/>
<path fill="#fbc477" d="M375.9 241l2 2z"/>
<path fill="#fea522" d="M377.9 241l2 2z"/>
<path fill="#fcb755" d="M394 241l2 2z"/>
<path fill="#f9d6aa" d="M396.2 241l2 2z"/>
<path fill="#faca88" d="M361.6 243.2l2 2z"/>
<path fill="#fea522" d="M371.8 243.2l2 2-2-2m26.4 0l2 2z"/>
<path fill="#f8dcbb" d="M400.2 243.2l2 2z"/>
<path fill="#f6f6e4" d="M319 245.2l2 2z"/>
<path fill="#fbc477" d="M361.6 245.2l2 2z"/>
<path fill="#fbbe66" d="M402.2 245.2l2 2z"/>
<path fill="#f8dcbb" d="M404.3 245.2l2 2z"/>
<path fill="#faca88" d="M361.6 247.2l2 2z"/>
<path fill="#fcb755" d="M408.3 247.2l2 2z"/>
<path fill="#f8dcbb" d="M410.4 247.2l2 2z"/>
<path fill="#fef8f1" d="M359.6 249.3l2 2z"/>
<path fill="#fe9f11" d="M361.6 249.3l2 2z"/>
<path fill="#fdab33" d="M418.5 249.3l2 2z"/>
<path fill="#fcb144" d="M420.6 249.3l2 2z"/>
<path fill="#fbc477" d="M422.6 249.3l2 2z"/>
<path fill="#f9d6aa" d="M424.6 249.3l4 4z"/>
<path fill="#fef8f1" d="M426.6 249.3l2 2z"/>
<path fill="#fcb144" d="M359.6 251.3l2 2z"/>
<path fill="#fdab33" d="M388 251.3l2 2z"/>
<path fill="#fbc477" d="M390 251.3l2 2zm8 0l2.2 2-2-2z"/>
<path fill="#fea522" d="M400.2 251.3l2 2z"/>
<path fill="#fae3c9" d="M357.6 253.3l2 2z"/>
<path fill="#fcb144" d="M384 253.3l2 2z"/>
<path fill="#fae3c9" d="M386 253.3l2 2z"/>
<path fill="#f8dcbb" d="M402.2 253.3l2 2z"/>
<path fill="#fdab33" d="M404.3 253.3l2 2z"/>
<path fill="#fe9f11" d="M416.5 253.3l2 2z"/>
<path fill="#fcb755" d="M418.5 253.3l2 2z"/>
<path fill="#f9d099" d="M420.6 253.3l2 2z"/>
<path fill="#fbead6" d="M422.6 253.3l2 2z"/>
<path fill="#fcb144" d="M357.6 255.3l2 2z"/>
<path fill="#fbbe66" d="M382 255.3l2 2z"/>
<path fill="#f9d099" d="M406.3 255.3l2 2z"/>
<path fill="#fbead6" d="M414.4 255.3l2 2z"/>
<path fill="#fcf1e4" d="M355.6 257.4l2 2z"/>
<path fill="#fbbe66" d="M379.9 257.4l2 2z"/>
<path fill="#f9d099" d="M408.3 257.4l2 2z"/>
<path fill="#fae3c9" d="M414.4 257.4l2 2z"/>
<path fill="#fbc477" d="M355.6 259.4l2 2z"/>
<path fill="#fcb144" d="M377.9 259.4l2 2-2-2m32.5 0l2 2z"/>
<path fill="#fbbe66" d="M414.4 259.4l2 2z"/>
<path fill="#f6f6e4" d="M319 261.4l2 2z"/>
<path fill="#fea522" d="M355.6 261.4l2 2z"/>
<path fill="#fbead6" d="M377.9 261.4l2 2z"/>
<path fill="#fcf1e4" d="M410.4 261.4l2 2z"/>
<path fill="#fef8f1" d="M416.5 261.4l2 2z"/>
<path fill="#fcf1e4" d="M353.6 263.5l2 2z"/>
<path fill="#fbbe66" d="M375.9 263.5l2 2z"/>
<path fill="#faca88" d="M412.4 263.5l2 2z"/>
<path fill="#f9d099" d="M416.5 263.5l2 2z"/>
<path fill="#f9d6aa" d="M353.6 265.5l2 2z"/>
<path fill="#fcf1e4" d="M375.9 265.5l2 2z"/>
<path fill="#fae3c9" d="M386 265.5l2 2z"/>
<path fill="#fea522" d="M388 265.5l2 2z"/>
<path fill="#fcb144" d="M390 265.5l2 2z"/>
<path fill="#f9d6aa" d="M392 265.5l2 2z"/>
<path fill="#fef8f1" d="M412.4 265.5l2 2z"/>
<path fill="#fea522" d="M414.4 265.5l2 2z"/>
<path fill="#fdab33" d="M416.5 265.5l2 2z"/>
<path fill="#faca88" d="M353.6 267.5l-2.1 6 2-6z"/>
<path fill="#fea522" d="M373.8 267.5l2 2z"/>
<path fill="#fef8f1" d="M375.9 267.5l2 2z"/>
<path fill="#f9d099" d="M386 267.5l2 2z"/>
<path fill="#fdab33" d="M394 267.5l2 2z"/>
<path fill="#fae3c9" d="M396.2 267.5l2 2z"/>
<path fill="#f8dcbb" d="M414.4 267.5l2 2z"/>
<path fill="#f90" d="M416.5 267.5l2 2z"/>
<path fill="#fbead6" d="M419.2 268.9l.6 1.3z"/>
<path fill="#fea522" d="M377.9 269.5l2 2z"/>
<path fill="#fbbe66" d="M379.9 269.5l2 2z"/>
<path fill="#faca88" d="M382 269.5l2 2z"/>
<path fill="#fcb144" d="M384 269.5l2 2z"/>
<path fill="#fae3c9" d="M386 269.5l2 2z"/>
<path fill="#fe9f11" d="M388 269.5l2 2z"/>
<path fill="#fdab33" d="M398.2 269.5l2 2z"/>
<path fill="#fbc477" d="M400.2 269.5l2 2z"/>
<path fill="#faca88" d="M402.2 269.5l2 2z"/>
<path fill="#f9d6aa" d="M404.3 269.5l2 2z"/>
<path fill="#fae3c9" d="M407.6 270.2l1.4.7-1.3-.7z"/>
<path fill="#fef8f1" d="M410.4 269.5l2 2z"/>
<path fill="#fbc477" d="M416.5 269.5l2 2z"/>
<path fill="#fef8f1" d="M329.2 271.6l2 2z"/>
<path fill="#fcf1e4" d="M331.2 271.6l2 2z"/>
<path fill="#fcb755" d="M384 271.6l2 2z"/>
<path fill="#fbead6" d="M388 271.6l2 2z"/>
<path fill="#fea522" d="M390 271.6l2 2z"/>
<path fill="#fe9f11" d="M406.3 271.6l2 2z"/>
<path fill="#fcb144" d="M408.3 271.6l-2 4z"/>
<path fill="#fe9f11" d="M412.4 271.6l2 2z"/>
<path fill="#fbbe66" d="M414.4 271.6l2 2z"/>
<path fill="#fcf1e4" d="M416.5 271.6l2 2z"/>
<path fill="#fae3c9" d="M329.2 273.6l2 2z"/>
<path fill="#fe9f11" d="M331.2 273.6l4 4z"/>
<path fill="#fbead6" d="M333.2 273.6l2 2zm18.3 0l2 2z"/>
<path fill="#fae3c9" d="M353.6 273.6l2 2z"/>
<path fill="#fe9f11" d="M371.8 273.6l2 2z"/>
<path fill="#fbc477" d="M373.8 273.6l2 2z"/>
<path fill="#fea522" d="M375.9 273.6l2 2z"/>
<path fill="#fbc477" d="M382 273.6l2 2z"/>
<path fill="#fef8f1" d="M384 273.6l2 2z"/>
<path fill="#fbc477" d="M392 273.6l2 2z"/>
<path fill="#fff" d="M408.3 273.6l2 2z"/>
<path fill="#fdab33" d="M410.4 273.6l2 2z"/>
<path fill="#fbc477" d="M418.5 273.6l2 2z"/>
<path fill="#fef8f1" d="M329.2 275.6l2 2z"/>
<path fill="#fbead6" d="M335.2 275.6l2 2z"/>
<path fill="#f9d6aa" d="M345.4 275.6l2 2z"/>
<path fill="#fe9f11" d="M355.6 275.6l2 2z"/>
<path fill="#f9d6aa" d="M358.9 276.3l1.4.7z"/>
<path fill="#f8dcbb" d="M371.8 275.6l2 2z"/>
<path fill="#fcf1e4" d="M377.9 275.6l2 2z"/>
<path fill="#f9d6aa" d="M394 275.6l2 2z"/>
<path fill="#fdab33" d="M408.3 275.6l2 2z"/>
<path fill="#fcb755" d="M420.6 275.6l2 2z"/>
<path fill="#fef8f1" d="M422.6 275.6l2 2z"/>
<path fill="#53527c" d="M312.9 277.7l2 2z"/>
<path fill="#fcb755" d="M331.2 277.7l2 2z"/>
<path fill="#fea522" d="M335.2 277.7l2 2z"/>
<path fill="#fbead6" d="M343.4 277.7l2 2z"/>
<path fill="#fe9f11" d="M347.4 277.7l2 2z"/>
<path fill="#fcf1e4" d="M349.5 277.7l2 2z"/>
<path fill="#fbbe66" d="M355.6 277.7l2 2z"/>
<path fill="#fbc477" d="M357.6 277.7l2 2z"/>
<path fill="#fbbe66" d="M359.6 277.7l2 2z"/>
<path fill="#fea522" d="M369.8 277.7l2 2z"/>
<path fill="#f9d6aa" d="M396.2 277.7l2 2z"/>
<path fill="#fcb144" d="M422.6 277.7l2 2z"/>
<path fill="#8d8d5b" d="M455 277.7l2 2z"/>
<path fill="#e5e3af" d="M319 279.7l2 2z"/>
<path fill="#f8dcbb" d="M331.2 279.7l2 2z"/>
<path fill="#fdab33" d="M337.3 279.7l2 2z"/>
<path fill="#fe9f11" d="M343.4 279.7l2 2z"/>
<path fill="#faca88" d="M347.4 279.7l2 2z"/>
<path fill="#fcf1e4" d="M355.6 279.7l2 2z"/>
<path fill="#f9d099" d="M369.8 279.7l2 2-2-2m28.4 0l2 2z"/>
<path fill="#fbbe66" d="M424.6 279.7l2 2z"/>
<path fill="#fea522" d="M333.2 281.7l2 2z"/>
<path fill="#fdab33" d="M339.3 281.7l2 2z"/>
<path fill="#fea522" d="M341.3 281.7l2 2z"/>
<path fill="#fe9f11" d="M345.4 281.7l2 2z"/>
<path fill="#fef8f1" d="M347.4 281.7l2 2z"/>
<path fill="#fbbe66" d="M357.6 281.7l2 2z"/>
<path fill="#fef8f1" d="M369.8 281.7l2 2z"/>
<path fill="#fbbe66" d="M400.2 281.7l2 2z"/>
<path fill="#f9d099" d="M426.6 281.7l2 2z"/>
<path fill="#f9d6aa" d="M333.2 283.8l2 2z"/>
<path fill="#f9d099" d="M345.4 283.8l2 2z"/>
<path fill="#fcf1e4" d="M357.6 283.8l2 2z"/>
<path fill="#fdab33" d="M367.7 283.8l2 2-2-2m34.5 0l2 2z"/>
<path fill="#fbead6" d="M428.6 283.8l2 2z"/>
<path fill="#fea522" d="M335.2 285.8l2 2z"/>
<path fill="#fe9f11" d="M343.4 285.8l2 2z"/>
<path fill="#fcb144" d="M359.6 285.8l2 2z"/>
<path fill="#faca88" d="M367.7 285.8l2 2z"/>
<path fill="#f8dcbb" d="M402.2 285.8l2 2z"/>
<path fill="#fcb144" d="M428.6 285.8l2 2z"/>
<path fill="#d3d079" d="M319 287.9l2 2z"/>
<path fill="#faca88" d="M335.2 287.9l2 2zm24.4 0l2 2z"/>
<path fill="#fae3c9" d="M367.7 287.9l2 2-2-2m34.5 0l2 2z"/>
<path fill="#f8dcbb" d="M430.6 287.9l2 2-2-2z"/>
<path fill="#f2f1d7" d="M448.9 287.9l2 2z"/>
<path fill="#58587b" d="M455.7 289.2l.7 1.3z"/>
<path fill="#d9d868" d="M319.6 291.2l.8 1.4-.7-1.4z"/>
<path fill="#f8dcbb" d="M335.2 289.9l2 2z"/>
<path fill="#f9d6aa" d="M400.2 289.9l2 2z"/>
<path fill="#fe9f11" d="M402.2 289.9l2 2z"/>
<path fill="#fcb144" d="M430.6 289.9l2 2-2-2z"/>
<path fill="#f2f1d2" d="M449.6 291.2l.7 1.4z"/>
<path fill="#fcf1e4" d="M335.2 291.9l2 2z"/>
<path fill="#fef8f1" d="M398.2 291.9l2 2z"/>
<path fill="#fe9f11" d="M400.2 291.9l2 2z"/>
<path fill="#fdab33" d="M406.3 291.9l-2 4z"/>
<path fill="#fcb755" d="M408.3 291.9l2 2z"/>
<path fill="#fea522" d="M432.7 291.9l2 2z"/>
<path fill="#f9d099" d="M434.7 291.9l2 2z"/>
<path fill="#53527c" d="M455 291.9l2 2z"/>
<path fill="#808067" d="M315.6 295.3l.7 1.3z"/>
<path fill="#fea522" d="M337.3 293.9l2 2-2-2m6 0l2 2-2-2z"/>
<path fill="#fe9f11" d="M365.7 293.9l2 2z"/>
<path fill="#fae3c9" d="M398.2 293.9l2 2z"/>
<path fill="#fef8f1" d="M406.3 293.9l2 2z"/>
<path fill="#fcb144" d="M410.4 293.9l2 2z"/>
<path fill="#fcb755" d="M436.8 293.9l2 2z"/>
<path fill="#fef8f1" d="M438.8 293.9l4 4z"/>
<path fill="#e5e59d" d="M449.6 295.3l.7 1.3z"/>
<path fill="#32327b" d="M455.7 295.3l.7 1.3z"/>
<path fill="#fcb755" d="M338 297.3l.6 1.4z"/>
<path fill="#fef8f1" d="M345.4 295.9l2 2z"/>
<path fill="#fbbe66" d="M365.7 295.9l2 2z"/>
<path fill="#fbead6" d="M398.2 295.9l2 2z"/>
<path fill="#fe9f11" d="M402.2 295.9l2 2z"/>
<path fill="#fcf1e4" d="M404.3 295.9l2 2z"/>
<path fill="#fbead6" d="M410.4 295.9l2 2z"/>
<path fill="#fdab33" d="M438.8 295.9l2 2z"/>
<path fill="#667" d="M315 297.9l2 2-2-2z"/>
<path fill="#f6f6e4" d="M321 297.9l2 2-2-2z"/>
<path fill="#f9d6aa" d="M345.4 297.9l2 2-2-2z"/>
<path fill="#fdab33" d="M361.6 297.9l2 2-2-2z"/>
<path fill="#fe9f11" d="M363.6 297.9l2 2-2-2z"/>
<path fill="#fcf1e4" d="M365.7 297.9l2 2-2-2z"/>
<path fill="#fea522" d="M400.2 297.9l2 2-2-2z"/>
<path fill="#faca88" d="M402.2 297.9l2 2-2-2m10.2 0l2 2z"/>
<path fill="#fcb144" d="M440.8 297.9l2 2-2-2z"/>
<path fill="#dddc7a" d="M448.9 297.9l2 2-2-2z"/>
<path fill="#58587b" d="M315 300l2 2z"/>
<path fill="#f2f1d2" d="M321 300l2 2z"/>
<path fill="#fcb144" d="M338 301.4l.6 1.3z"/>
<path fill="#fea522" d="M345.4 300l2 2z"/>
<path fill="#fef8f1" d="M365.7 300l2 2z"/>
<path fill="#fea522" d="M367.7 300l2 2z"/>
<path fill="#fcb144" d="M371.8 300l2 2z"/>
<path fill="#fbead6" d="M373.8 300l2 2z"/>
<path fill="#f8dcbb" d="M400.2 300l2 2z"/>
<path fill="#fcf1e4" d="M402.2 300l2 2z"/>
<path fill="#fef8f1" d="M412.4 300l2 2z"/>
<path fill="#fe9f11" d="M414.4 300l2 2z"/>
<path fill="#fbead6" d="M442.9 300l2 2z"/>
<path fill="#d9d868" d="M448.9 300l2 2z"/>
<path fill="#3a3a7c" d="M315 302l2 2z"/>
<path fill="#e5e3af" d="M321 302l2 2z"/>
<path fill="#faca88" d="M347.4 302l2 2z"/>
<path fill="#fbead6" d="M367.7 302l2 2z"/>
<path fill="#fe9f11" d="M373.8 302l2 2z"/>
<path fill="#fcf1e4" d="M375.9 302l2 2z"/>
<path fill="#fbead6" d="M398.2 302l2 2z"/>
<path fill="#fae3c9" d="M400.2 302l2 2z"/>
<path fill="#fbead6" d="M402.2 302l2 2z"/>
<path fill="#fbbe66" d="M414.4 302l2 2-2-2m16.3 0l2 2z"/>
<path fill="#fcf1e4" d="M432.7 302l2 2z"/>
<path fill="#fef8f1" d="M434.7 302l2 2z"/>
<path fill="#f8dcbb" d="M436.8 302l2 2z"/>
<path fill="#fcb755" d="M438.8 302l2 2z"/>
<path fill="#fae3c9" d="M442.9 302l2 2z"/>
<path fill="#808067" d="M453 302l2 2z"/>
<path fill="#32327b" d="M315 304l2 2z"/>
<path fill="#a4a43d" d="M317.6 305.4l.7 1.4-.6-1.4z"/>
<path fill="#e5e59d" d="M321 304l2 2z"/>
<path fill="#fbc477" d="M337.3 304l2 2z"/>
<path fill="#f9d6aa" d="M349.5 304l2 2z"/>
<path fill="#fbbe66" d="M369.8 304l2 2z"/>
<path fill="#f9d099" d="M375.9 304l2 2z"/>
<path fill="#fae3c9" d="M394 304l2 2z"/>
<path fill="#fcb144" d="M396.2 304l2 2z"/>
<path fill="#fae3c9" d="M404.3 304l2 2z"/>
<path fill="#f8dcbb" d="M414.4 304l2 2z"/>
<path fill="#f9d099" d="M430.6 304l2 2-2-2z"/>
<path fill="#fbc477" d="M440.8 304l2 2z"/>
<path fill="#fbead6" d="M442.9 304l2 2z"/>
<path fill="#737370" d="M453 304l2 2z"/>
<path fill="#d9d868" d="M321 306l2 2z"/>
<path fill="#f9d099" d="M337.3 306l2 2z"/>
<path fill="#f9d6aa" d="M351.5 306l2 2-2-2m18.3 0l2 2z"/>
<path fill="#fbc477" d="M375.9 306l2 2z"/>
<path fill="#fef8f1" d="M386 306l2 2z"/>
<path fill="#f8dcbb" d="M388 306l2 2z"/>
<path fill="#fbc477" d="M390 306l2 2z"/>
<path fill="#fea522" d="M392 306l2 2z"/>
<path fill="#fbead6" d="M404.3 306l2 2z"/>
<path fill="#f2f1d2" d="M446.9 306l2 2z"/>
<path fill="#58587b" d="M453 306l2 2z"/>
<path fill="#99994e" d="M317 308l2 2z"/>
<path fill="#d0d045" d="M321 308l2 2z"/>
<path fill="#fcb144" d="M353.6 308l2 2z"/>
<path fill="#fae3c9" d="M355.6 308l2 2z"/>
<path fill="#fef8f1" d="M369.8 308l2 2z"/>
<path fill="#fcb755" d="M377.9 308l2 2z"/>
<path fill="#fbc477" d="M379.9 308l2 2z"/>
<path fill="#fcb144" d="M382 308l2 2z"/>
<path fill="#fea522" d="M384 308l2 2z"/>
<path fill="#fe9f11" d="M400.2 308l2 2z"/>
<path fill="#f9d6aa" d="M402.2 308l2 2z"/>
<path fill="#fef8f1" d="M430.6 308l2 2-2-2z"/>
<path fill="#e0dea1" d="M446.9 308l2 2z"/>
<path fill="#3a3a7c" d="M453 308l2 2z"/>
<path fill="#737370" d="M317 310.2l2 2z"/>
<path fill="#fbfaf2" d="M323 310.2l2 2z"/>
<path fill="#fea522" d="M339.3 310.2l2 2z"/>
<path fill="#fe9f11" d="M357.6 310.2l2 2z"/>
<path fill="#fcb144" d="M359.6 310.2l2 2z"/>
<path fill="#fbc477" d="M361.6 310.2l2 2z"/>
<path fill="#faca88" d="M363.6 310.2l2 2-2-2z"/>
<path fill="#fbc477" d="M365.7 310.2l2 2z"/>
<path fill="#fcb144" d="M367.7 310.2l2 2z"/>
<path fill="#fdab33" d="M369.8 310.2l2 2z"/>
<path fill="#fbc477" d="M398.2 310.2l2 2z"/>
<path fill="#fef8f1" d="M400.2 310.2l2 2z"/>
<path fill="#fdab33" d="M428.6 310.2l2 2z"/>
<path fill="#e1e18c" d="M446.9 310.2l2 2z"/>
<path fill="#a4a43d" d="M451.6 311.5l.7 1.4z"/>
<path fill="#262678" d="M453 310.2l2 2z"/>
<path fill="#58587b" d="M317 312.2l2 2z"/>
<path fill="#f2f1d2" d="M323 312.2l2 2z"/>
<path fill="#faca88" d="M339.3 312.2l2 2z"/>
<path fill="#fe9f11" d="M394 312.2l2 2z"/>
<path fill="#fbead6" d="M396.2 312.2l2 2z"/>
<path fill="#fbc477" d="M414.4 312.2l2 2z"/>
<path fill="#faca88" d="M428.6 312.2l2 2z"/>
<path fill="#d4d456" d="M446.9 312.2l2 2z"/>
<path fill="#32327b" d="M317 314.2l2 2z"/>
<path fill="#e5e59d" d="M323 314.2l2 2z"/>
<path fill="#fef8f1" d="M339.3 314.2l2 2z"/>
<path fill="#fe9f11" d="M341.3 314.2l2 2z"/>
<path fill="#fbead6" d="M394 314.2l2 2z"/>
<path fill="#fea522" d="M414.4 314.2l2 2z"/>
<path fill="#fcf1e4" d="M428.6 314.2l2 2z"/>
<path fill="#808067" d="M451 314.2l2 2z"/>
<path fill="#0e0e6e" d="M317 316.2l2 2z"/>
<path fill="#a4a43d" d="M319 316.2l2 2z"/>
<path fill="#d9d868" d="M323 316.2l2 2z"/>
<path fill="#f8dcbb" d="M341.3 316.2l2 2z"/>
<path fill="#f9d6aa" d="M412.4 316.2l2 2z"/>
<path fill="#faca88" d="M426.6 316.2l2 2z"/>
<path fill="#f2f1d2" d="M444.9 316.2l2 2z"/>
<path fill="#58587b" d="M451 316.2l2 2z"/>
<path fill="#8d8d5b" d="M319 318.3l2 2z"/>
<path fill="#f9d6aa" d="M343.4 318.3l2 2z"/>
<path fill="#fdab33" d="M384 318.3l2 2z"/>
<path fill="#fff" d="M386 318.3l2 2z"/>
<path fill="#fcb144" d="M389.4 318.9l1.4.7z"/>
<path fill="#fef8f1" d="M410.4 318.3l-2 4z"/>
<path fill="#fe9f11" d="M412.4 318.3l2 2z"/>
<path fill="#fdab33" d="M424.6 318.3l-2 4z"/>
<path fill="#e5e59d" d="M444.9 318.3l2 2z"/>
<path fill="#3a3a7c" d="M451 318.3l2 2z"/>
<path fill="#667" d="M319 320.3l2 2z"/>
<path fill="#f2f1d2" d="M325 320.3l2 2z"/>
<path fill="#f9d6aa" d="M345.4 320.3l2 2z"/>
<path fill="#fe9f11" d="M384 320.3l2 2z"/>
<path fill="#faca88" d="M386 320.3l2 2z"/>
<path fill="#fea522" d="M388 320.3l2 2z"/>
<path fill="#fcf1e4" d="M390 320.3l2 2z"/>
<path fill="#fdab33" d="M410.4 320.3l2 2z"/>
<path fill="#fef8f1" d="M424.6 320.3l2 2z"/>
<path fill="#d9d868" d="M444.9 320.3l2 2z"/>
<path fill="#a4a43d" d="M448.9 320.3l2 2z"/>
<path fill="#0e0e6e" d="M451 320.3l2 2z"/>
<path fill="#3a3a7c" d="M319 322.3l2 2z"/>
<path fill="#e5e59d" d="M325 322.3l2 2z"/>
<path fill="#fae3c9" d="M347.4 322.3l4 4z"/>
<path fill="#fe9f11" d="M349.5 322.3l2 2z"/>
<path fill="#f8dcbb" d="M388 322.3l2 2z"/>
<path fill="#fcf1e4" d="M406.3 322.3l2 2z"/>
<path fill="#fdab33" d="M408.3 322.3l2 2z"/>
<path fill="#fcb144" d="M420.6 322.3l2 2z"/>
<path fill="#fef8f1" d="M422.6 322.3l2 2z"/>
<path fill="#fbfaf2" d="M442.9 322.3l2 2z"/>
<path fill="#8d8d5b" d="M448.9 322.3l2 2z"/>
<path fill="#0e0e6e" d="M319 324.4l2 2z"/>
<path fill="#a4a43d" d="M321 324.4l2 2z"/>
<path fill="#d4d456" d="M325 324.4l2 2z"/>
<path fill="#f9d6aa" d="M386 324.4l2 2z"/>
<path fill="#f9d099" d="M404.3 324.4l2 2z"/>
<path fill="#fe9f11" d="M406.3 324.4l2 2z"/>
<path fill="#faca88" d="M418.5 324.4l2 2z"/>
<path fill="#eeedc1" d="M442.9 324.4l2 2z"/>
<path fill="#58587b" d="M448.9 324.4l2 2z"/>
<path fill="#737370" d="M321 326.4l2 2z"/>
<path fill="#f6f6e4" d="M327 326.4l2 2z"/>
<path fill="#fbbe66" d="M349.5 326.4l2 2z"/>
<path fill="#fcb144" d="M382 326.4l2 2z"/>
<path fill="#f8dcbb" d="M384.6 327.8l.7 1.3z"/>
<path fill="#fbbe66" d="M400.2 326.4l2 2z"/>
<path fill="#fe9f11" d="M402.2 326.4l2 2z"/>
<path fill="#fbc477" d="M414.4 326.4l2 2z"/>
<path fill="#fcf1e4" d="M416.5 326.4l2 2z"/>
<path fill="#d3d079" d="M442.9 326.4l2 2z"/>
<path fill="#a4a43d" d="M446.9 326.4l2 2z"/>
<path fill="#262678" d="M448.9 326.4l2 2z"/>
<path fill="#49497d" d="M321 328.4l2 2z"/>
<path fill="#e0dea1" d="M327 328.4l2 2z"/>
<path fill="#fae3c9" d="M347.4 328.4l2 2z"/>
<path fill="#fdab33" d="M375.9 328.4l2 2z"/>
<path fill="#fbc477" d="M377.9 328.4l2 2z"/>
<path fill="#fbead6" d="M379.9 328.4l2 2z"/>
<path fill="#fcb144" d="M386 328.4l2 2z"/>
<path fill="#f9d6aa" d="M412.4 328.4l2 2z"/>
<path fill="#99994e" d="M446.9 328.4l2 2z"/>
<path fill="#0e0e6e" d="M321 330.5l2 2z"/>
<path fill="#a4a43d" d="M323 330.5l2 2z"/>
<path fill="#d4d456" d="M327 330.5l2 2z"/>
<path fill="#f9d099" d="M345.4 330.5l2 2z"/>
<path fill="#fe9f11" d="M347.4 330.5l2 2-2-2m10.2 0l2 2z"/>
<path fill="#f9d6aa" d="M359.6 330.5l2 2z"/>
<path fill="#f9d099" d="M361.6 330.5l2 2z"/>
<path fill="#f9d6aa" d="M369.8 330.5l2 2z"/>
<path fill="#fae3c9" d="M371.8 330.5l2 2z"/>
<path fill="#fef8f1" d="M373.8 330.5l2 2z"/>
<path fill="#fbead6" d="M390 330.5l2 2z"/>
<path fill="#fae3c9" d="M392 330.5l2 2z"/>
<path fill="#faca88" d="M394 330.5l2 2z"/>
<path fill="#fbc477" d="M396.2 330.5l2 2z"/>
<path fill="#fdab33" d="M398.2 330.5l2 2z"/>
<path fill="#fe9f11" d="M408.3 330.5l2 2z"/>
<path fill="#f9d6aa" d="M410.4 330.5l2 2z"/>
<path fill="#e5e3af" d="M440.8 330.5l2 2z"/>
<path fill="#667" d="M446.9 330.5l2 2z"/>
<path fill="#737370" d="M323 332.5l2 2z"/>
<path fill="#f2f1d7" d="M329.2 332.5l2 2z"/>
<path fill="#fea522" d="M343.4 332.5l2 2z"/>
<path fill="#fe9f11" d="M353.6 332.5l2 2z"/>
<path fill="#fbbe66" d="M355.6 332.5l2 2z"/>
<path fill="#fcf1e4" d="M357.6 332.5l2 2z"/>
<path fill="#fea522" d="M406.3 332.5l2 2z"/>
<path fill="#fbead6" d="M408.3 332.5l2 2z"/>
<path fill="#dddc7a" d="M440.8 332.5l2 2z"/>
<path fill="#a4a43d" d="M444.9 332.5l2 2z"/>
<path fill="#262678" d="M446.9 332.5l2 2z"/>
<path fill="#49497d" d="M323 334.5l2 2z"/>
<path fill="#a4a43d" d="M325.8 335.9l.7 1.3z"/>
<path fill="#d3d079" d="M329.2 334.5l2 2z"/>
<path fill="#f9d099" d="M345.4 334.5l2 2z"/>
<path fill="#fcb144" d="M347.4 334.5l2 2z"/>
<path fill="#faca88" d="M349.5 334.5l2 2z"/>
<path fill="#f8dcbb" d="M351.5 334.5l2 2z"/>
<path fill="#fef8f1" d="M353.6 334.5l2 2z"/>
<path fill="#f8dcbb" d="M398.2 334.5l2 2z"/>
<path fill="#fcf1e4" d="M406.3 334.5l2 2z"/>
<path fill="#f6f6e4" d="M438.8 334.5l2 2z"/>
<path fill="#8d8d5b" d="M444.9 334.5l2 2z"/>
<path fill="#fbfaf2" d="M331.2 336.5l2 2z"/>
<path fill="#fbbe66" d="M398.2 336.5l2 2z"/>
<path fill="#faca88" d="M404.3 336.5l2 2z"/>
<path fill="#e1e18c" d="M438.8 336.5l2 2z"/>
<path fill="#49497d" d="M444.9 336.5l2 2z"/>
<path fill="#58587b" d="M325 338.6l2 2z"/>
<path fill="#e5e59d" d="M331.2 338.6l2 2z"/>
<path fill="#fe9f11" d="M398.2 338.6l2 2z"/>
<path fill="#fdab33" d="M402.2 338.6l2 2z"/>
<path fill="#fbfaf2" d="M436.8 338.6l2 2z"/>
<path fill="#a4a43d" d="M442.9 338.6l2 2z"/>
<path fill="#0e0e6e" d="M444.9 338.6l2 2z"/>
<path fill="#1b1b74" d="M325 340.6l2 2z"/>
<path fill="#a4a43d" d="M327 340.6l2 2z"/>
<path fill="#d0d045" d="M331.2 340.6l2 2z"/>
<path fill="#fbead6" d="M396.2 340.6l2 2z"/>
<path fill="#fe9f11" d="M400.2 340.6l2 2z"/>
<path fill="#fbead6" d="M402.2 340.6l2 2z"/>
<path fill="#e5e59d" d="M436.8 340.6l2 2z"/>
<path fill="#667" d="M442.9 340.6l2 2z"/>
<path fill="#6e6c70" d="M327 342.6l2 2z"/>
<path fill="#e5e3af" d="M333.2 342.6l2 2z"/>
<path fill="#faca88" d="M396.8 344l.7 1.4z"/>
<path fill="#fae3c9" d="M400.2 342.6l2 2z"/>
<path fill="#fbfaf2" d="M434.7 342.6l2 2z"/>
<path fill="#a4a43d" d="M440.8 342.6l2 2z"/>
<path fill="#1b1b74" d="M442.9 342.6l2 2-2-2m-115.8 2l2 2z"/>
<path fill="#a4a43d" d="M329.2 344.7l2 2z"/>
<path fill="#d0d045" d="M333.2 344.7l2 2z"/>
<path fill="#fbfaf2" d="M335.2 344.7l2 2z"/>
<path fill="#f9d6aa" d="M398.2 344.7l2 2z"/>
<path fill="#e5e59d" d="M434.7 344.7l2 2z"/>
<path fill="#6e6c70" d="M440.8 344.7l2 2-2-2m-111.6 2l2 2z"/>
<path fill="#8cbf84" d="M335.2 346.7l2 2z"/>
<path fill="#0cf" d="M336 346.7c7 14.8 32 49.8 51 49.2 18.7-.7 39.6-35 47.7-49.2z"/>
<path fill="#a4a43d" d="M438.8 346.7l2 2z"/>
<path fill="#1b1b74" d="M440.8 346.7l2 2-2-2m-111.6 2l2 2z"/>
<path fill="#a4a43d" d="M331.2 348.7l2 2z"/>
<path fill="#adb333" d="M335.2 348.7l2 2z"/>
<path fill="#1ac5b5" d="M337.3 348.7l2 2z"/>
<path fill="#68b070" d="M432.7 348.7l2 2z"/>
<path fill="#667" d="M438.8 348.7l2 2z"/>
<path fill="#58587b" d="M331.2 350.8l2 2z"/>
<path fill="#7fb15c" d="M337.3 350.8l2 2z"/>
<path fill="#27c2aa" d="M430.6 350.8l2 2-2-2z"/>
<path fill="#a4a43d" d="M436.8 350.8l-2 4z"/>
<path fill="#0e0e6e" d="M438.8 350.8l2 2-2-2m-107.6 2l2 2z"/>
<path fill="#a4a43d" d="M333.2 352.8l4 4z"/>
<path fill="#34be9e" d="M339.3 352.8l2 2z"/>
<path fill="#96b247" d="M430.6 352.8l2 2-2-2z"/>
<path fill="#53527c" d="M436.8 352.8l2 2z"/>
<path fill="#3a3a7c" d="M333.2 354.9l2 2z"/>
<path fill="#a2b23d" d="M339.3 354.9l2 2z"/>
<path fill="#0dc9c1" d="M341.3 354.9l2 2z"/>
<path fill="#5bb47c" d="M428.6 354.9l2 2z"/>
<path fill="#8d8d5b" d="M434.7 354.9l2 2z"/>
<path fill="#737370" d="M335.2 356.9l2 2z"/>
<path fill="#74b166" d="M341.3 356.9l2 2z"/>
<path fill="#27c2aa" d="M426.6 356.9l2 2z"/>
<path fill="#a4a43d" d="M432.7 356.9l-2 4z"/>
<path fill="#262678" d="M434.7 356.9l2 2z"/>
<path fill="#0e0e6e" d="M335.2 358.9l2 2z"/>
<path fill="#a4a43d" d="M337.3 358.9l4 4z"/>
<path fill="#42bb92" d="M343.4 358.9l2 2z"/>
<path fill="#0dc9c1" d="M424.6 358.9l2 2z"/>
<path fill="#96b247" d="M426.6 358.9l2 2z"/>
<path fill="#58587b" d="M432.7 358.9l2 2z"/>
<path fill="#3a3a7c" d="M337.3 360.9l2 2z"/>
<path fill="#adb333" d="M343.4 360.9l2 2z"/>
<path fill="#27c2aa" d="M345.4 360.9l2 2z"/>
<path fill="#74b166" d="M424.6 360.9l2 2z"/>
<path fill="#8d8d5b" d="M430.6 360.9l2 2-2-2z"/>
<path fill="#6e6c70" d="M339.3 362.9l2 2z"/>
<path fill="#96b247" d="M345.4 362.9l2 2z"/>
<path fill="#0dc9c1" d="M347.4 362.9l2 2z"/>
<path fill="#42bb92" d="M422.6 362.9l2 2z"/>
<path fill="#a4a43d" d="M428.6 362.9l-4 6 4-6z"/>
<path fill="#1b1b74" d="M430.6 362.9l2 2-2-2z"/>
<path fill="#0e0e6e" d="M339.3 364.9l2 2-2-2z"/>
<path fill="#8d8d5b" d="M341.3 364.9l2 2-2-2z"/>
<path fill="#7fb15c" d="M347.4 364.9l2 2-2-2z"/>
<path fill="#34be9e" d="M420.6 364.9l2 2-2-2z"/>
<path fill="#3a3a7c" d="M428.6 364.9l2 2-2-2z"/>
<path fill="#1b1b74" d="M341.3 367l2 2z"/>
<path fill="#a4a43d" d="M343.4 367l22.3 22.3z"/>
<path fill="#74b166" d="M349.5 367l2 2z"/>
<path fill="#27c2aa" d="M418.5 367l2 2z"/>
<path fill="#adb333" d="M420.6 367l2 2z"/>
<path fill="#667" d="M426.6 367l2 2z"/>
<path fill="#32327b" d="M343.4 369l2 2z"/>
<path fill="#42bb92" d="M351.5 369l2 2z"/>
<path fill="#0dc9c1" d="M416.5 369l-8.2 10.2 8.3-10.3z"/>
<path fill="#adb333" d="M418.5 369l2 2z"/>
<path fill="#737370" d="M424.6 369l2 2z"/>
<path fill="#49497d" d="M345.4 371l2 2z"/>
<path fill="#42bb92" d="M353.6 371l2 2z"/>
<path fill="#96b247" d="M416.5 371l2 2z"/>
<path fill="#8d8d5b" d="M422.6 371l-2 4z"/>
<path fill="#0e0e6e" d="M424.6 371l2 2z"/>
<path fill="#53527c" d="M347.4 373l2 2z"/>
<path fill="#42bb92" d="M355.6 373l2 2z"/>
<path fill="#96b247" d="M414.4 373l2 2z"/>
<path fill="#0e0e6e" d="M422.6 373l2 2z"/>
<path fill="#6e6c70" d="M349.5 375l2 2z"/>
<path fill="#42bb92" d="M357.6 375l2 2z"/>
<path fill="#96b247" d="M412.4 375l2 2z"/>
<path fill="#a4a43d" d="M418.5 375l-4 6.2 4-6z"/>
<path fill="#262678" d="M420.6 375l2 2z"/>
<path fill="#6e6c70" d="M351.5 377.2l2 2z"/>
<path fill="#42bb92" d="M359.6 377.2l2 2z"/>
<path fill="#96b247" d="M410.4 377.2l2 2z"/>
<path fill="#262678" d="M418.5 377.2l2 2z"/>
<path fill="#6e6c70" d="M353.6 379.2l2 2z"/>
<path fill="#68b070" d="M361.6 379.2l2 2z"/>
<path fill="#27c2aa" d="M406.3 379.2l2 2z"/>
<path fill="#adb333" d="M408.3 379.2l2 2z"/>
<path fill="#262678" d="M416.5 379.2l2 2z"/>
<path fill="#667" d="M355.6 381.2l2 2z"/>
<path fill="#74b166" d="M363.6 381.2l2 2-2-2z"/>
<path fill="#34be9e" d="M404.3 381.2l2 2z"/>
<path fill="#adb333" d="M406.3 381.2l2 2z"/>
<path fill="#8d8d5b" d="M412.4 381.2l-2 4z"/>
<path fill="#262678" d="M414.4 381.2l2 2z"/>
<path fill="#49497d" d="M357.6 383.2l2 2z"/>
<path fill="#96b247" d="M365.7 383.2l2 2z"/>
<path fill="#0dc9c1" d="M367.7 383.2l2 2z"/>
<path fill="#42bb92" d="M402.2 383.2l2 2z"/>
<path fill="#0e0e6e" d="M412.4 383.2l2 2z"/>
<path fill="#49497d" d="M359.6 385.3l2 2z"/>
<path fill="#a2b23d" d="M367.7 385.3l2 2z"/>
<path fill="#27c2aa" d="M369.8 385.3l2 2z"/>
<path fill="#74b166" d="M400.2 385.3l2 2z"/>
<path fill="#a4a43d" d="M406.3 385.3l-6 8z"/>
<path fill="#808067" d="M408.3 385.3l2 2z"/>
<path fill="#0e0e6e" d="M410.4 385.3l2 2z"/>
<path fill="#262678" d="M361.6 387.3l2 2z"/>
<path fill="#adb333" d="M369.8 387.3l2 2z"/>
<path fill="#42bb92" d="M371.8 387.3l2 2z"/>
<path fill="#0dc9c1" d="M396.2 387.3l2 2z"/>
<path fill="#96b247" d="M398.2 387.3l2 2z"/>
<path fill="#6e6c70" d="M406.3 387.3l2 2z"/>
<path fill="#1b1b74" d="M363.6 389.3l2 2-2-2z"/>
<path fill="#8d8d5b" d="M365.7 389.3l2 2z"/>
<path fill="#74b166" d="M373.8 389.3l2 2z"/>
<path fill="#0dc9c1" d="M375.9 389.3l2 2z"/>
<path fill="#34be9e" d="M394 389.3l2 2z"/>
<path fill="#adb333" d="M396.2 389.3l2 2z"/>
<path fill="#49497d" d="M404.3 389.3l2 2z"/>
<path fill="#0e0e6e" d="M365.7 391.4l2 2z"/>
<path fill="#6e6c70" d="M367.7 391.4l2 2z"/>
<path fill="#a4a43d" d="M369.8 391.4l4 4z"/>
<path fill="#96b247" d="M375.9 391.4l2 2z"/>
<path fill="#27c2aa" d="M377.9 391.4l2 2z"/>
<path fill="#68b070" d="M392 391.4l2 2z"/>
<path fill="#32327b" d="M402.2 391.4l2 2z"/>
<path fill="#49497d" d="M369.8 393.4l2 2z"/>
<path fill="#5bb47c" d="M379.9 393.4l2 2z"/>
<path fill="#27c2aa" d="M388 393.4l2 2z"/>
<path fill="#96b247" d="M390 393.4l2 2z"/>
<path fill="#a4a43d" d="M396.2 393.4l-2 4z"/>
<path fill="#808067" d="M398.2 393.4l2 2z"/>
<path fill="#0e0e6e" d="M400.2 393.4l2 2z"/>
<path fill="#262678" d="M371.8 395.4l2 2z"/>
<path fill="#8d8d5b" d="M373.8 395.4l2 2z"/>
<path fill="#8bb252" d="M382 395.4l2 2z"/>
<path fill="#1ac5b5" d="M384 395.4l2 2z"/>
<path fill="#5bb47c" d="M386 395.4l2 2z"/>
<path fill="#58587b" d="M396.2 395.4l2 2z"/>
<path fill="#0e0e6e" d="M373.8 397.5l2 2z"/>
<path fill="#667" d="M375.9 397.5l2 2z"/>
<path fill="#a4a43d" d="M377.9 397.5l2 2z"/>
<path fill="#99994e" d="M392 397.5l2 2z"/>
<path fill="#32327b" d="M394 397.5l2 2-2-2m-16.1 2l2 2z"/>
<path fill="#99994e" d="M379.9 399.5l2 2z"/>
<path fill="#a4a43d" d="M388 399.5l2 2z"/>
<path fill="#667" d="M390 399.5l2 2z"/>
<path fill="#0e0e6e" d="M392 399.5l2 2-2-2m-12.1 2l2 2z"/>
<path fill="#667" d="M382 401.5l2 2z"/>
<path fill="#a4a43d" d="M384 401.5l2 2z"/>
<path fill="#99994e" d="M386 401.5l2 2z"/>
<path fill="#32327b" d="M388 401.5l2 2z"/>
<path fill="#262678" d="M384 403.5l2 2z"/>
<path fill="#0e0e6e" d="M386 403.5l2 2z"/>
<path fill="#f90" d="M388 267.5c3.2 7.4 13.2 15.5 16 19.5-3.5 4-4.2 3.6-3.8 11 6-6.4 6.2-7 10.2-6.1 8.6 8.6 1.5 27-5.6 31-7.1 4.3-5.8-.1-16.5 5.2 4.9 4.2 10.6-.6 15.2.7 2.5 3-1.2 8.4.7 13.6 4-.4 3.6-8.7 4.6-11.7 3-11 21-18.6 21.9-28.7 3.8-1.7 7.5-.5 12 2-2.2-9.4-9.7-9.3-11.8-12.2-4.8-7.4-9.1-15.8-19.4-18-8-1.7-7.3.5-12.3-3-3.2-2.4-12.7-7-11.2-3.3z"/>
<path fill="#fff" fill-rule="evenodd" d="M410.6 275.9a1.6 1.6 0 11-3.3 0 1.6 1.6 0 013.3 0z"/>
<path fill="#f90" d="M362.9 298.8c5-6.2 7.6-19 9.8-23.2 5.2 1.2 5 2 11.5-1.8-8.5-2.4-9.2-2.2-10.2-6.1 3.6-11.7 23.2-14 30-9.6 7.2 4.3 2.7 5.2 12.4 12 1.4-6.2-5.5-9-6.5-13.6 1.5-3.7 8-3 11.6-7-2.2-3.5-9.3.8-12.4 1.4-11 2.5-26.3-9.8-35.6-6-3.3-2.5-4-6.4-4-11.7-7.1 6.5-3.5 13-5.2 16.3-4.2 7.7-9.7 15.5-6.8 25.6 2.2 7.8 3.8 6.2 3.2 12.3-.7 3.9-.4 14.5 2.2 11.4z"/>
<path fill="#fff" fill-rule="evenodd" d="M359.8 274.9c.8-.4 1.8-.1 2.2.7a1.6 1.6 0 11-2.2-.7z"/>
<path fill="#f90" d="M404 303c-8-1-20.1 3.4-25 3.8-1.5-5.1-.8-5.5-7.4-9 2.3 8.6 2.8 9 0 12-11.8 2.9-24-12.7-23.8-20.8 0-8.3 3.2-5 4-17-6 2-4.8 9.5-8.3 12.8-4 .6-6.6-5.3-12-6.3-1.8 3.7 5.5 7.5 7.6 9.9 7.9 8.2 5.2 27.5 13.3 33.5-.4 4.2-3.4 6.8-8 9.4 9.3 2.9 13-3.7 16.7-4 8.8-.2 18.3.4 25.5-7.3 5.4-6 3.3-6.5 8.8-9 3.7-1.4 12.6-7.2 8.6-8z"/>
<path fill="#fff" fill-rule="evenodd" d="M385.2 318.2a1.6 1.6 0 111.7-2.8 1.6 1.6 0 01-1.7 2.8z"/>
<path fill="#012169" stroke-width=".5" d="M0 0h256v256H0z"/>
<path fill="#fff" stroke-width=".5" d="M256 0v32l-95 96 95 93.5V256h-33.5L127 162l-93 94H0v-34l93-93.5L0 37V0h31l96 94 93-94z"/>
<path fill="#c8102e" stroke-width=".5" d="M92 162l5.5 17L21 256H0v-1.5zm62-6l27 4 75 73.5V256zM256 0l-96 98-2-22 75-76zM0 .5L96.5 95 67 91 0 24.5z"/>
<path fill="#fff" stroke-width=".5" d="M88 0v256h80V0zM0 88v80h256V88z"/>
<path fill="#c8102e" stroke-width=".5" d="M0 104v48h256v-48zM104 0v256h48V0z"/>
</svg>

After

Width:  |  Height:  |  Size: 37 KiB

+5
View File
@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 512 512">
<path fill="#e41e20" d="M0 0h512v512H0z"/>
<path d="M204.9 99.5c-5 0-13.2 1.6-13 5.4-14-2.3-15.4 3.4-14.6 8.5 1.4-2 3-3.1 4.2-3.3 1.9-.3 3.8.3 5.8 1.5a23 23 0 015 4.4c-4.8 1.1-8.6.4-12.4-.3a17.6 17.6 0 01-6.1-2.5c-1.6-1.1-2.1-2.1-4.6-4.7-2.9-3-6-2.1-5 2.5 2.2 4.3 6 6.3 10.7 7 2.2.4 5.6 1.2 9.4 1.2 3.8 0 8.1-.5 10.5 0-1.4.8-3 2.4-6.2 3-3.2.6-8-2-11-2.6.4 2.5 3.5 4.8 9.7 6 10.2 2.2 18.7 4 24.3 7 5.6 3 9.1 6.8 11.6 9.8 5 6 5.3 10.5 5.6 11.5 1 9.5-2.2 14.8-8.4 16.4-3 .8-8.5-.7-10.5-3-2-2.4-4-6.4-3.4-12.7.5-2.5 3.4-9 1-10.3a291.6 291.6 0 00-34.4-16c-2.7-1.1-5 2.5-5.8 4A53.5 53.5 0 01129 107c-4.6-8.1-12.1 0-10.9 7.7 2.1 8.6 8.6 14.8 16.5 19.2 8 4.5 18.1 8.8 28.3 8.6 5.5 1 5.5 8.2-1.1 9.5-13 0-23.2-.2-32.9-9.6-7.4-6.7-11.5 1.3-9.4 5.8 3.6 14 23.6 18 43.8 13.4 7.8-1.3 3.1 7 .9 7.2-8.4 6-23.5 12-36.8-.1-6.1-4.7-10.2-.7-8 6 6 17.5 28.5 13.8 44 5.2 4-2.2 7.6 3 2.7 6.9-19.2 13.4-28.9 13.6-37.6 8.4-10.8-4.3-11.8 7.8-5.3 11.8 7.2 4.4 25.4 1 38.9-7.4 5.7-4.2 6 2.4 2.3 5-15.9 13.8-22.2 17.5-38.8 15.2-8.2-.6-8 9.5-1.6 13.5 8.8 5.4 26.1-3.6 39.5-14.7 5.6-3 6.6 2 3.8 7.8a57.4 57.4 0 01-23.3 19.2 29.1 29.1 0 01-19.5.7c-6.2-2.2-7 4.2-3.6 10 2 3.5 10.6 4.7 19.7 1.4 9.2-3.2 19-10.8 25.7-19.8 6-5.1 5.2 1.8 2.5 6.7-13.5 21.3-25.9 29.2-42.1 27.9-7.3-1.2-8.9 4.4-4.3 9.6 8 6.7 18.2 6.4 27-.2a751 751 0 0030.8-32.6c5.5-4.4 7.3 0 5.7 9-1.5 5.1-5.2 10.5-15.3 14.5-7 4-1.8 9.4 3.4 9.5 2.9 0 8.7-3.3 13-8.3 5.9-6.5 6.2-11 9.5-21.1 3-5 8.4-2.7 8.4 2.5-2.6 10.2-4.8 12-10 16.2-5.1 4.7 3.4 6.3 6.3 4.4 8.3-5.6 11.3-12.8 14.1-19.4 2-4.8 7.8-2.5 5.1 5.3-6.4 18.5-17 25.8-35.5 29.6-1.9.3-3 1.4-2.4 3.6l7.5 7.5c-11.5 3.3-20.8 5.2-32.2 8.5L142 300.6c-1.5-3.4-2.2-8.7-10.4-5-5.7-2.6-8.2-1.6-11.4 1 4.5.1 6.5 1.3 8.3 3.4 2.3 6 7.6 6.6 13 5 3.5 2.9 5.4 5.2 9 8.2l-17.8-.6c-6.3-6.7-11.3-6.3-15.8-1-3.5.5-5 .5-7.3 4.7 3.7-1.5 6-2 7.7-.3 6.6 3.9 11 3 14.3 0l18.7 1.1c-2.3 2-5.6 3.1-8 5.2-9.7-2.8-14.7 1-16.4 8.8a18.2 18.2 0 00-1.4 10c1-3.2 2.5-5.9 5.3-7.6 8.6 2.2 11.8-1.3 12.3-6.5 4.2-3.4 10.5-4.1 14.6-7.6 4.9 1.6 7.2 2.6 12.1 4.1 1.7 5.3 5.7 7.4 12 6 7.7.3 6.3 3.4 7 5.9 2-3.6 2-7-2.8-10.3-1.7-4.6-5.5-6.7-10.4-4-4.7-1.3-5.9-3.2-10.5-4.6 11.7-3.7 20-4.5 31.8-8.3 3 2.8 5.2 4.8 8.2 7.2 1.6 1 3 1.2 4 0 7.3-10.6 10.6-20 17.4-27 2.6-2.9 6-6.8 9.6-7.8 1.8-.4 4-.2 5.5 1.4 1.4 1.6 2.6 4.4 2 8.7-.6 6.2-2 8.2-3.8 11.8-1.7 3.7-3.9 6-6 8.8-4.4 5.7-10.1 9-13.5 11.2-6.8 4.4-9.7 2.5-15 2.2-6.7.8-8.5 4.1-3 8.7a21 21 0 0013.7 2.3c3.3-.6 7-4.8 9.8-7 3-3.6 8.1.6 4.7 4.7-6.3 7.5-12.6 12.4-20.3 12.3-8.2 1-6.7 5.7-1.3 7.9 9.8 4 18.6-3.5 23-8.5 3.5-3.7 6-3.9 5.3 2-3.4 10.5-8.1 14.6-15.7 15.1-6.2-.5-6.3 4.2-1.7 7.5 10.3 7 17.7-5 21.2-12.4 2.5-6.6 6.3-3.5 6.7 2 0 7.3-3.2 13.2-12 20.7 6.7 10.7 14.5 21.7 21.3 32.5l20.5-228.2-20.5-36c-2.1-2-9.3-10.5-11.2-11.7-.7-.7-1.1-1.2-.1-1.6 1-.4 3.2-.8 4.8-1-4.4-4.4-8-5.8-16.3-8.2 2-.8 4-.3 9.9-.6a32.3 32.3 0 00-14.4-11c4.5-3 5.3-3.3 9.8-7-7.7-.6-14.3-2-20.8-4a41 41 0 00-12.8-3.7zm.7 9c4 0 6.6 1.4 6.6 3 0 1.7-2.5 3.1-6.6 3.1-4 0-6.6-1.5-6.6-3.2 0-1.7 2.6-3 6.6-3z"/>
<use width="100%" height="100%" transform="matrix(-1 0 0 1 512 0)" xlink:href="#a"/>
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

+5
View File
@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<path fill="red" d="M0 0h512v170.7H0z"/>
<path fill="#00f" d="M0 170.7h512v170.6H0z"/>
<path fill="orange" d="M0 341.3h512V512H0z"/>
</svg>

After

Width:  |  Height:  |  Size: 209 B

Some files were not shown because too many files have changed in this diff Show More