Initial commit

This commit is contained in:
zhongjin 2020-06-15 10:58:47 +08:00
commit 4f1dfe7564
8590 changed files with 1516878 additions and 0 deletions

29
.eslintignore Normal file
View File

@ -0,0 +1,29 @@
/app
/config
/db
/doc
/lib/assets/javascripts/cartodb
/lib/assets/javascripts/cdb
/lib/assets/javascripts/utils
/lib/assets/javascripts/vendor/jquery-ui.js
/lib/assets/test/lib
/lib/assets/test/spec/cartodb
/lib/assets/test/spec/new-dashboard/coverage
/lib/assets/test/spec/node_modules
/lib/assets/test/spec/SpecHelper.js
/lib/assets/test/spec/SpecHelper3.js
/lib/build/*
!/lib/build/tasks
/lib/carto
/lib/cartodb
/lib/importer
/lib/resque
/lib/sql
/lib/tasks
/lib/varnish
/public
/script
/services
/spec
/vendor
/coverage

24
.eslintrc.json Normal file
View File

@ -0,0 +1,24 @@
{
"extends": [
"semistandard",
"plugin:vue/essential"
],
"env": {
"es6": true,
"browser": true,
"jasmine": true,
"jest": true
},
"globals": {
"_t": true,
"__ENV__": true,
"grunt": true,
"CartoNode": true
},
"rules": {
"camelcase": "off",
"no-mixed-operators": "off",
"no-useless-escape": "off",
"prefer-promise-reject-errors": "off"
}
}

34
.github/ISSUE_TEMPLATE.md vendored Normal file
View File

@ -0,0 +1,34 @@
### Context
*Please explain here below what you were doing when the issue happened*
### Steps to Reproduce
*Please break down here below all the needed steps to reproduce the issue*
1.
2.
3.
### Current Result
*Please describe here below the current result you got*
### Expected result
*Please describe here below what should be the expected behaviour*
### Browser and version
*What internet browser (Chrome, Firefox, etc) and version was you using and version*
### .carto file
*Don't forget to rename .carto file to .zip file to be able to upload to github*
### Additional info
*Please add any information of interest here below*

53
.github/stale.yml vendored Normal file
View File

@ -0,0 +1,53 @@
# Configuration for probot-stale - https://github.com/probot/stale
# Number of days of inactivity before an Issue or Pull Request becomes stale
daysUntilStale: 365
# Number of days of inactivity before a stale Issue or Pull Request is closed.
# Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale.
daysUntilClose: 7
# Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable
# exemptLabels:
# - pinned
# - security
# - "[Status] Maybe Later"
# Set to true to ignore issues in a project (defaults to false)
exemptProjects: true
# Set to true to ignore issues in a milestone (defaults to false)
exemptMilestones: true
# Label to use when marking as stale
staleLabel: stale
# Comment to post when marking as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. Thank you
for your contributions.
# Comment to post when removing the stale label.
unmarkComment: false
# Comment to post when closing a stale Issue or Pull Request.
closeComment: false
# Limit the number of actions per hour, from 1-30. Default is 30
limitPerRun: 30
# Limit to only `issues` or `pulls`
# only: issues
# Optionally, specify configuration settings that are specific to just 'issues' or 'pulls':
# pulls:
# daysUntilStale: 30
# markComment: >
# This pull request has been automatically marked as stale because it has not had
# recent activity. It will be closed if no further activity occurs. Thank you
# for your contributions.
# issues:
# exemptLabels:
# - confirmed

80
.gitignore vendored Normal file
View File

@ -0,0 +1,80 @@
.rvmrc
.DS_Store
.bundle
_SpecRunner*.html
dump.rdb
db/*.sqlite3
log
tmp/*
tmp/**/*
fonts/*
public/assets
public/system
public/uploads
public/javascripts
public/stylesheets
public/images
public/fonts
public/flash
public/static
app/assets/stylesheets/tmp/
app/assets/fonts/icon_font/svgs
db/schema.rb
*.pyc
bin/
config.status
config/database.yml
.idea/*
config/app_config.yml
config/app_config.yml.local
config/redis.conf
config/grunt_production.json
spec/support/data/failed_remote/*
*.swp
*.swo
env
coverage
.spin.rb
.sass-cache
public/js/lib/cdb.js
services/importer/spec/factories/database.json
.ruby-version
cartodb.sublime-workspace
cartodb.sublime-project
.rvmrc
app/assets/images/sprites/*.png
npm-debug.log
.ruby-gemset
lib/build/dist
lib/build/grunt-aws.json
lib/build/app_config.js
lib/build/.grunt/**/*
rubygems
vendor/bundle/*
vendor/cache/*
.vagrant
Vagrantfile
/node_modules
.grunt/*
vendor/assets/javascripts/cartodb.*
vendor/assets/stylesheets/cartodb.*
# cartodb.css is generated by update_cdb make task and is
# used in cartodb/cartodb/app/views/layouts/application.html.erb
!vendor/assets/stylesheets/cartodb.css
# carto-node dist file. This is generated by webpack.
# It will be removed when using carto-node as an external dependency.
vendor/assets/javascripts/carto-node/
public/test_support.csv
public/test_guess_country.csv
doc/manual/build
.gem/
.byebug_history
/tags
/.tags_swap
.vscode/
/private_gears
/dist
yarn.lock
public/static.tar.gz
compilation-stats.json
npm-debug.log.*

3
.gitmodules vendored Normal file
View File

@ -0,0 +1,3 @@
[submodule "lib/sql"]
path = lib/sql
url = https://git.spacen.net/cartodb4/cartodb-postgresql.git

12
.hound.yml Normal file
View File

@ -0,0 +1,12 @@
scss:
enabled: false
jshint:
enabled: false
rubocop:
config_file: .rubocop.yml
version: 0.71.0
eslint:
enabled: true
config_file: .eslintrc.json
ignore_file: .eslintignore
version: 5.16.0

1
.npmrc Normal file
View File

@ -0,0 +1 @@
message = "Bump version to %s"

1
.nvmrc Normal file
View File

@ -0,0 +1 @@
6.9.2

2
.rspec Normal file
View File

@ -0,0 +1,2 @@
--colour
--format documentation

4
.rspec_ci Normal file
View File

@ -0,0 +1,4 @@
--colour
--require ci/reporter/rake/rspec_loader
--format CI::Reporter::RSpec
--format documentation

682
.rubocop.yml Normal file
View File

@ -0,0 +1,682 @@
AllCops:
TargetRubyVersion: 2.4
Include:
- "**/*.gemspec"
- "**/*.podspec"
- "**/*.jbuilder"
- "**/*.rake"
- "**/*.opal"
- "**/Gemfile"
- "**/Rakefile"
- "**/Capfile"
- "**/Guardfile"
- "**/Podfile"
- "**/Thorfile"
- "**/Vagrantfile"
- "**/Berksfile"
- "**/Cheffile"
- "**/Vagabondfile"
Exclude:
- "vendor/**/*"
- "db/schema.rb"
- "bin"
- "coverage"
- "doc"
- "engines"
- "lib/assets"
- "lib/build"
- "log"
- "node_modules"
- "public"
- "script"
- "tmp"
- "vendor"
DisplayCopNames: false
StyleGuideCopsOnly: false
#
# Layout config
#
Layout/AccessModifierIndentation:
Enabled: true
EnforcedStyle: indent
Layout/AlignHash:
Enabled: true
EnforcedHashRocketStyle: key
EnforcedColonStyle: key
EnforcedLastArgumentHashStyle: always_inspect
Layout/AlignParameters:
Enabled: true
EnforcedStyle: with_first_parameter
Layout/CaseIndentation:
Enabled: true
EnforcedStyle: case
IndentOneStep: false
Layout/EmptyLineBetweenDefs:
Enabled: true
AllowAdjacentOneLineDefs: false
Layout/EmptyLinesAroundModuleBody:
Enabled: true
EnforcedStyle: no_empty_lines
Layout/ExtraSpacing:
Enabled: true
Layout/IndentFirstArgument:
Enabled: true
EnforcedStyle: special_for_inner_method_call_in_parentheses
Layout/IndentationWidth:
Enabled: true
Width: 2
Layout/IndentFirstHashElement:
Description: Checks the indentation of the first key in a hash literal.
Enabled: true
EnforcedStyle: special_inside_parentheses
SupportedStyles:
- special_inside_parentheses
- consistent
Layout/MultilineOperationIndentation:
Enabled: true
EnforcedStyle: aligned
Layout/SpaceAroundBlockParameters:
Enabled: true
EnforcedStyleInsidePipes: no_space
Layout/SpaceAroundEqualsInParameterDefault:
Enabled: true
EnforcedStyle: space
Layout/SpaceBeforeBlockBraces:
Enabled: true
EnforcedStyle: space
Layout/SpaceInsideBlockBraces:
Enabled: true
EnforcedStyle: space
EnforcedStyleForEmptyBraces: no_space
SpaceBeforeBlockParameters: true
Layout/SpaceInsideHashLiteralBraces:
Enabled: true
EnforcedStyle: space
EnforcedStyleForEmptyBraces: no_space
Layout/TrailingBlankLines:
Enabled: true
EnforcedStyle: final_newline
Layout/AlignArray:
Enabled: true
Layout/BlockEndNewline:
Enabled: true
Layout/CommentIndentation:
Enabled: true
Layout/ElseAlignment:
Enabled: true
Layout/EmptyLines:
Enabled: true
Layout/EmptyLinesAroundAccessModifier:
Enabled: true
Layout/EmptyLinesAroundMethodBody:
Enabled: true
Layout/EndOfLine:
Enabled: true
Layout/IndentationConsistency:
Enabled: true
Layout/IndentFirstArrayElement:
Enabled: true
Layout/LeadingCommentSpace:
Enabled: true
Layout/MultilineBlockLayout:
Enabled: true
Layout/SpaceBeforeFirstArg:
Enabled: true
Layout/SpaceAfterColon:
Enabled: true
Layout/SpaceAfterComma:
Enabled: true
Layout/SpaceAroundKeyword:
Enabled: true
Layout/SpaceAfterMethodName:
Enabled: true
Layout/SpaceAfterNot:
Enabled: true
Layout/SpaceAfterSemicolon:
Enabled: true
Layout/SpaceBeforeComma:
Enabled: true
Layout/SpaceBeforeComment:
Enabled: true
Layout/SpaceBeforeSemicolon:
Enabled: true
Layout/SpaceAroundOperators:
Enabled: true
Layout/SpaceInsideBrackets:
Enabled: true
Layout/SpaceInsideParens:
Enabled: true
Layout/SpaceInsideRangeLiteral:
Enabled: true
Layout/Tab:
Enabled: true
Layout/TrailingWhitespace:
Enabled: true
Layout/SpaceBeforeFirstArg:
Enabled: true
#
# Style config
#
Style/AndOr:
Enabled: true
EnforcedStyle: always
Style/BarePercentLiterals:
Enabled: true
EnforcedStyle: bare_percent
Style/BracesAroundHashParameters:
Enabled: true
EnforcedStyle: no_braces
Style/ClassCheck:
Enabled: true
EnforcedStyle: is_a?
Style/CollectionMethods:
Enabled: true
PreferredMethods:
collect: map
collect!: map!
inject: reduce
detect: find
find_all: select
Style/For:
Enabled: true
EnforcedStyle: each
Style/HashSyntax:
Enabled: true
EnforcedStyle: ruby19
Style/NonNilCheck:
Enabled: true
IncludeSemanticChanges: false
Style/MethodDefParentheses:
Enabled: true
EnforcedStyle: require_parentheses
Naming/MethodName:
Enabled: true
EnforcedStyle: snake_case
Style/ParenthesesAroundCondition:
Enabled: true
AllowSafeAssignment: true
Style/PercentQLiterals:
Enabled: true
EnforcedStyle: lower_case_q
Naming/PredicateName:
Enabled: true
Style/RedundantReturn:
Enabled: true
AllowMultipleReturnValues: false
Style/Semicolon:
Enabled: true
AllowAsExpressionSeparator: false
Style/StringLiteralsInInterpolation:
Enabled: true
EnforcedStyle: single_quotes
Style/SymbolProc:
Enabled: true
IgnoredMethods:
- respond_to
Style/TrailingCommaInArguments:
Enabled: true
EnforcedStyleForMultiline: no_comma
Style/TrailingCommaInArrayLiteral:
Enabled: true
EnforcedStyleForMultiline: no_comma
Style/TrailingCommaInHashLiteral:
Enabled: true
EnforcedStyleForMultiline: no_comma
Naming/VariableName:
Enabled: true
EnforcedStyle: snake_case
Style/BeginBlock:
Enabled: true
Style/BlockComments:
Enabled: true
Style/BlockDelimiters:
Enabled: true
EnforcedStyle: braces_for_chaining
Naming/ClassAndModuleCamelCase:
Enabled: true
Style/ClassMethods:
Enabled: true
Naming/ConstantName:
Enabled: true
Style/DefWithParentheses:
Enabled: true
Style/EmptyElse:
Enabled: true
Style/EndBlock:
Enabled: true
Style/InfiniteLoop:
Enabled: true
Style/MethodCallWithoutArgsParentheses:
Enabled: true
Style/MultilineBlockChain:
Enabled: true
Style/MultilineIfThen:
Enabled: true
Style/MultilineTernaryOperator:
Enabled: true
Style/NestedTernaryOperator:
Enabled: true
Style/RedundantBegin:
Enabled: true
Style/RedundantException:
Enabled: true
Style/RedundantSelf:
Enabled: true
Style/RescueModifier:
Enabled: true
Style/StructInheritance:
Enabled: true
Style/UnlessElse:
Enabled: true
Style/UnneededCapitalW:
Enabled: true
Style/UnneededPercentQ:
Enabled: true
Style/WhileUntilDo:
Enabled: true
#
# Metrics cops
#
Metrics/AbcSize:
Enabled: true
Max: 35
Metrics/LineLength:
Enabled: true
Max: 120
AllowURI: true
URISchemes:
- http
- https
Metrics/BlockLength:
Enabled: true
Exclude:
- spec/**/*
#
# Lint cops
#
Layout/EndAlignment:
Enabled: true
EnforcedStyleAlignWith: keyword
Layout/DefEndAlignment:
Enabled: true
EnforcedStyleAlignWith: start_of_line
Lint/RescueException:
Enabled: true
Lint/ShadowingOuterLocalVariable:
Enabled: true
Lint/StringConversionInInterpolation:
Enabled: true
Lint/UnusedBlockArgument:
Enabled: true
Lint/UnusedMethodArgument:
Enabled: true
Lint/UnreachableCode:
Enabled: true
Lint/UselessAccessModifier:
Enabled: true
Lint/UselessAssignment:
Enabled: true
Lint/UselessComparison:
Enabled: true
Lint/UselessElseWithoutRescue:
Enabled: true
Lint/UselessSetterCall:
Enabled: true
Layout/BlockAlignment:
Enabled: true
Lint/Debugger:
Enabled: true
Lint/DuplicateMethods:
Enabled: true
Lint/EmptyEnsure:
Enabled: true
Lint/EmptyInterpolation:
Enabled: true
Lint/EndInMethod:
Enabled: true
Lint/EnsureReturn:
Enabled: true
#
# Rails cops
#
Rails/HasAndBelongsToMany:
Enabled: true
Include:
- app/models/**/*.rb
Rails/Output:
Enabled: true
Include:
- app/**/*.rb
- config/**/*.rb
- db/**/*.rb
- lib/**/*.rb
Rails/ReadWriteAttribute:
Enabled: true
Include:
- app/models/**/*.rb
Rails/ScopeArgs:
Enabled: true
Include:
- app/models/**/*.rb
Rails/Validation:
Enabled: true
Include:
- app/models/**/*.rb
#
# Security cops
#
Security/Eval:
Description: The use of eval represents a serious security risk.
Enabled: true
#
# Disabled cops
#
Layout/DotPosition:
Enabled: false
Layout/EmptyLinesAroundBlockBody:
Enabled: false
Layout/EmptyLinesAroundClassBody:
Enabled: false
Style/ClassAndModuleChildren:
Enabled: false
Style/CommentAnnotation:
Enabled: false
Style/Encoding:
Enabled: false
Naming/FileName:
Enabled: false
Style/FormatString:
Enabled: false
Style/GlobalVars:
Enabled: false
Style/GuardClause:
Enabled: false
Style/IfUnlessModifier:
Enabled: false
Style/LambdaCall:
Enabled: false
Style/Next:
Enabled: false
Style/NumericLiterals:
Enabled: false
Style/PercentLiteralDelimiters:
Enabled: false
Style/RaiseArgs:
Enabled: false
Style/RegexpLiteral:
Enabled: false
Style/SignalException:
Enabled: false
Style/SingleLineBlockParams:
Enabled: false
Style/SingleLineMethods:
Enabled: false
Style/StringLiterals:
Enabled: false
Style/TrivialAccessors:
Enabled: false
Style/WhileUntilModifier:
Enabled: false
Style/WordArray:
Enabled: false
Style/InlineComment:
Enabled: false
Style/MethodCalledOnDoEndBlock:
Enabled: false
Style/SymbolArray:
Enabled: false
Naming/AccessorMethodName:
Enabled: false
Style/Alias:
Enabled: false
Style/ArrayJoin:
Enabled: false
Style/AsciiComments:
Enabled: false
Naming/AsciiIdentifiers:
Enabled: false
Style/Attr:
Enabled: false
Style/CaseEquality:
Enabled: false
Style/CharacterLiteral:
Enabled: false
Style/ClassVars:
Enabled: false
Style/ColonMethodCall:
Enabled: false
Style/PreferredHashMethods:
Enabled: false
Style/Documentation:
Enabled: false
Style/DoubleNegation:
Enabled: false
Style/EachWithObject:
Enabled: false
Style/EmptyLiteral:
Enabled: false
Style/EvenOdd:
Enabled: false
Style/FlipFlop:
Enabled: false
Style/IfWithSemicolon:
Enabled: false
Style/Lambda:
Enabled: false
Style/LineEndConcatenation:
Enabled: false
Style/ModuleFunction:
Enabled: false
Style/NegatedIf:
Enabled: false
Style/NegatedWhile:
Enabled: false
Style/NilComparison:
Enabled: false
Style/Not:
Enabled: false
Style/OneLineConditional:
Enabled: false
Naming/BinaryOperatorParameterName:
Enabled: false
Style/PerlBackrefs:
Enabled: false
Style/Proc:
Enabled: false
Style/SelfAssignment:
Enabled: false
Style/SpecialGlobalVars:
Enabled: false
Style/VariableInterpolation:
Enabled: false
Style/WhenThen:
Enabled: false
Style/FrozenStringLiteralComment:
Enabled: false
Metrics/BlockNesting:
Enabled: false
Metrics/ClassLength:
Enabled: false
Metrics/CyclomaticComplexity:
Enabled: false
Metrics/MethodLength:
Enabled: false
Metrics/ModuleLength:
Enabled: false
Metrics/ParameterLists:
Enabled: false
Metrics/PerceivedComplexity:
Enabled: false
Lint/AssignmentInCondition:
Enabled: false
Lint/AmbiguousOperator:
Enabled: false
Lint/AmbiguousRegexpLiteral:
Enabled: false
Layout/ConditionPosition:
Enabled: false
Lint/DeprecatedClassMethods:
Enabled: false
Lint/ElseLayout:
Enabled: false
Lint/HandleExceptions:
Enabled: false
Lint/LiteralInCondition:
Enabled: false
Lint/LiteralInInterpolation:
Enabled: false
Lint/Loop:
Enabled: false
Lint/ParenthesesAsGroupedExpression:
Enabled: false
Lint/RequireParentheses:
Enabled: false
Lint/UnderscorePrefixedVariableName:
Enabled: false
Lint/Void:
Enabled: false
Rails/ActionFilter:
Enabled: false
Rails/Delegate:
Enabled: false

29
.stylelintrc Normal file
View File

@ -0,0 +1,29 @@
{
"extends": [
"stylelint-config-standard",
"stylelint-config-property-sort-order-smacss"
],
"ignoreFiles": [
"app/assets/stylesheets/old_common/**/*.css.scss",
"app/assets/stylesheets/table/table_panel/layer-views-panels/filters_panel.css.scss",
"app/assets/stylesheets/embed/embed_map.css.scss",
"app/assets/stylesheets/editor-3/codemirror.css.scss",
"app/assets/stylesheets/editor-3/_codemirror.scss",
"app/assets/stylesheets/editor-3/form-tags.css.scss"
],
"rules": {
"selector-pseudo-element-colon-notation": "double",
"color-hex-case": "upper",
"at-rule-no-unknown": [true, {
"ignoreAtRules": ["extend", "at-root", "debug", "warn", "error", "if", "else", "for", "each", "while", "mixin", "include", "content", "return", "function"
]}
],
"function-name-case": [ "lower", {
"ignoreFunctions": ["/^DXImageTransform.Microsoft.*$/"]
}],
"declaration-empty-line-before": null,
"block-no-empty": true,
"shorthand-property-no-redundant-values": true,
"declaration-block-no-redundant-longhand-properties": null
}
}

20
.travis.yml Normal file
View File

@ -0,0 +1,20 @@
language: node_js
dist: trusty
addons:
chrome: stable
notifications:
email:
on_success: never
on_failure: change
jobs:
include:
- node_js:
- "10"
before_install:
- git submodule update --init --recursive
- git fetch origin master:refs/remotes/origin/master --depth=1
install:
- npm ci # clean install
script:
- npm run ci # run tests

111
CONTRIBUTING.md Normal file
View File

@ -0,0 +1,111 @@
The development tracker for CartoDB is on GitHub:
http://github.com/cartodb/cartodb
Bug fixes are best reported as pull requests over there.
Features are best discussed on the mailing list:
https://groups.google.com/d/forum/cartodb
---
1. [General](#general)
2. [Documentation](#documentation)
3. [Frontend](#frontend)
4. [Submitting contributions](#submitting-contributions)
---
# General
Every new feature (as well as bugfixes) should come with a test case. Depending on context different guidelines might
apply, see following sections.
Unless you plan to develop frontend code you can serve assets from our CDN instead, make sure the following is set in
the `config/app_config.yml`:
```ruby
app_assets:
asset_host: '//cartodb-libs.global.ssl.fastly.net/cartodbui'
```
Even if you're using CDN assets you still need to run `npm run build:static`.
_Don't forget to restart Rails after you have modified `config/app_config.yml`._
# Documentation
Documentation that don't fit well inline (e.g. high-level stuff) should be placed in the [/doc directory](doc/README.md).
# Frontend
The frontend is really standalone code, but is integrated with/served by the Rails application.
See [doc/frontend/README.md](doc/frontend/README.md) for more in-depth documentation.
# Backend
Backend is a Rails 3 application, there's no specific workflow you must follow to run it.
Every PR should be covered by tests. If you create a new file please add it to `Makefiles`. Useful commands:
- `make check`: prepare the test database and run the full suite (takes a while).
- `make prepare-test-db`: prepare the test database.
- `bundle exec rspec <spec file>`: run a spec.
- `bundle exec rspec <spec file>:<line number>`: run an specific test.
Once a new Pull Request is started,
[Hound](https://houndci.com/) application will check code style and you should fix them as much as possible (with common sense, no need to honor _every_ rule but now most of them are actually useful to make code more readable).
## Submitting contributions
Before opening a pull request (or submitting a contribution) you will need to sign a Contributor License Agreement (CLA) before making a submission, [learn more here](https://carto.com/contributions).
After that, there are several rules you should follow when a new pull request is created:
- Title has to be descriptive. If you are fixing a bug don't use the ticket title or number.
- Explain what you have achieved in the description and choose a reviewer (it has to be a CartoDB team member) of your code. If you have doubts, just ask for one.
- If you change something related with the UI of the application:
- Add an image or an animation ([LiceCap](https://github.com/lepht/licecap) is your friend) about the feature you have just implemented. Or show the change against what it is already done.
- Change UI assets version, present in [package.json](package.json) file. Minor if it is a bugfixing or a small feature, major when it is a big change.
- Our linter machine, [Hound](https://houndci.com/), should not trigger any warnings about your changes.
- All tests should pass, both for JS and Ruby.
## Development environment accessories
The development environment can be quite slow to start up, but we have some workarounds that help speed it up:
- Using Zeus to avoid the load times of the Rails environment by keeping it into memory. It provides a very fast
execution of rails commands.
- Using Stellar (database snapshotting tool) in order to quickly reload the test database. This is also useful
while testing code, in order to quickly rollback to a previous DB state.
### Zeus
1. Install zeus globally with `gem install zeus`. This is recommended but not needed. You can also use `bundle exec zeus`, which is a bit slower.
2. Start the zeus server. `zeus start`. This will start preloading the environments. and display a colorful status.
3. In a different console, run your rails commands prefixed by zeus. For example: `zeus c` for console,
`zeus rspec xxx` for testing. Run `zeus commands` for a full list (or check `zeus.json`).
Notes:
- If you want to pass ENV variables, pass them to the `zeus start` process (master), not to the slaves.
- When testing, you can run `TURBO=1 zeus start` to enable some extra optimizations for the testing environment
(less database cleaning).
- If your console breaks after running zeus, add something like `zeus() { /usr/bin/zeus "$@"; stty sane; }` to `.bashrc`.
- If using Vagrant and getting errors, check out [zeus docs](https://github.com/burke/zeus/wiki/Using-with-vagrant).
Basically, you have to run with `ZEUSSOCK=/tmp/zeus.sock` as an environment variable.
### Stellar
1. Install stellar. Check your distribution packages, or install with pip: `pip install stellar`
2. Create a configuration file by running `stellar init` and following the steps. The connection string is: `postgresql://postgres@localhost/carto_db_test`. The project name doesn't matter.
3. Create a clean testing database `make prepare-test-db`
4. Create a snapshot: `stellar snapshot`
Then to use it for testing, you can pass `STELLAR=stellar` (you can pass the executable path) as an ENV variable and the
testing environment will use it to clean up the database (instead of manually truncating tables).
#### For development
Stellar can also be useful for development, to quickly restore the database to its original configuration. Just create
a different configuration (by going to a different directory, stellar always reads `stellar.yaml` in the current path)
for the development environment.
Then, you can use `stellar snapshot` and `stellar restore` to take and restore snapshot quickly. Also check
`stellar list` to list current db snapshots and `stellar gc` to remove old ones.

138
Gemfile Normal file
View File

@ -0,0 +1,138 @@
source 'http://rubygems.org'
gem 'rails', '4.2.11'
gem 'rake', '0.9.2.2'
# PostgreSQL
gem 'pg', '0.20.0'
gem 'sequel', '~> 4.45.0'
gem 'sequel-rails', '~> 1.0.1'
gem 'sequel_pg', '~> 1.12.0', require: 'sequel'
gem 'activerecord-postgresql-adapter'
gem 'protected_attributes'
gem 'responders', '~> 2.0'
gem 'rails_warden', '0.5.8' # Auth via the Warden Rack framework
gem 'ruby-saml', '1.4.1'
gem 'oauth', '0.4.7'
gem 'oauth-plugin', git: 'https://github.com/CartoDB/oauth-plugin.git', :branch => 'cartodb'
# Redis
gem 'hiredis', '~> 0.6.1'
gem 'redis', '~> 3.3.5'
gem 'nokogiri', '~> 1.8.2'
gem 'statsd-client', '0.0.7', require: 'statsd'
gem 'aws-sdk-s3', '~> 1'
gem 'ruby-prof', '0.15.1'
gem 'request_store', '1.1.0'
# It's used in the dataimport and arcgis.
# It's a replacement for the ruby uri that it's supposed to perform better parsing of a URI
gem 'addressable', '~> 2.5', require: 'addressable/uri'
gem 'ejs', '~> 1.1.1'
gem 'execjs', '~> 0.4' # Required by ejs
gem 'net-ldap', '0.16.0'
gem 'json-schema', '2.1.9'
gem 'mime-types', '3.1'
group :production, :staging do
gem 'unicorn', '4.8.2'
gem 'unicorn-worker-killer'
gem 'raindrops', '0.15.0'
end
group :assets do
gem "compass", "1.0.3"
end
# Importer & sync tables
gem 'roo', '1.13.2'
gem 'state_machines-activerecord', '~> 0.5.0'
gem 'typhoeus', '0.7.2'
gem 'charlock_holmes', '0.7.6'
gem 'dbf', '2.0.6'
gem 'faraday', '0.9.0'
gem 'google-api-client', '0.28.4'
gem 'dropbox_api', '0.1.6'
gem 'instagram', '1.1.6'
gem 'gibbon', '1.1.4'
# Service components (/services)
gem 'virtus', '1.0.5'
gem 'uuidtools', '2.1.5'
gem 'cartodb-common', git: 'https://github.com/cartodb/cartodb-common.git', branch: 'master'
gem 'email_address', '~> 0.1.11'
# Markdown
gem 'redcarpet', '3.3.3'
# TODO Production gems, put them in :production group
gem 'rollbar', '~>2.11.1'
gem 'resque', '1.25.2'
gem 'resque-metrics', '0.1.1'
gem 'net-telnet'
# This is weird. In ruby 2 test-unit is required. We don't know why for sure
gem 'test-unit'
# Multifactor Authentication
gem 'rotp', '~> 3.3', '>= 3.3.1'
gem 'rqrcode', '~> 0.10.1'
group :test do
gem 'simplecov', '0.13.0', require: false
gem 'simplecov-json'
gem 'simplecov-rcov'
gem 'db-query-matchers', '0.4.0'
gem 'rack-test', '0.6.3', require: 'rack/test'
gem 'factory_girl_rails', '~> 4.0.0'
gem 'selenium-webdriver', '>= 2.5.0'
gem 'capybara', '1.1.2'
gem 'delorean'
gem 'webrick', '1.3.1'
gem 'mocha', '1.1.0'
gem 'ci_reporter', '1.8.4'
gem 'poltergeist', '>= 1.0.0'
gem 'activerecord-nulldb-adapter', '0.3.1'
# Need to use specific branch from this fork as original gem is broken and outdated
gem 'fake_net_ldap', git: 'https://github.com/kuldeepaggarwal/fake_net_ldap.git', :branch => 'fix-responder'
gem 'mock_redis'
end
# Profiling
gem 'rbtrace', '0.4.8'
group :test, :development do
gem 'gc_tracer', '1.5.1'
gem 'memory_profiler'
end
group :development, :test do
gem 'rspec-rails', '2.12.0'
gem 'rb-readline'
gem 'byebug'
gem 'rack'
gem 'zeus'
# Server
gem 'thin', require: false
end
# segment metrics
gem 'analytics-ruby', '~> 2.0.0', :require => 'segment/analytics'
# CARTO Gears engines
require File.dirname(__FILE__) + '/lib/carto/carto_gears_support'
Carto::CartoGearsSupport.new.gears.each do |gear|
gear.gemspec.runtime_dependencies.each do |dependency|
gem dependency.name, dependency.requirements_list
end
end

525
Gemfile.lock Normal file
View File

@ -0,0 +1,525 @@
GIT
remote: https://github.com/CartoDB/oauth-plugin.git
revision: f7b7137bb9b502a9ffeb30a562dd070a116b1d86
branch: cartodb
specs:
oauth-plugin (0.4.0.pre4)
oauth (>= 0.4.4)
GIT
remote: https://github.com/cartodb/cartodb-common.git
revision: e445c66023bfe83fcd62878ec0f3f37909156e01
branch: master
specs:
cartodb-common (0.1.0)
argon2 (~> 2.0)
GIT
remote: https://github.com/kuldeepaggarwal/fake_net_ldap.git
revision: d99f2fcf13b9737a150f869fe9b9fbc0d788aa3f
branch: fix-responder
specs:
fake_net_ldap (0.0.1)
net-ldap
GEM
remote: http://rubygems.org/
specs:
actionmailer (4.2.11)
actionpack (= 4.2.11)
actionview (= 4.2.11)
activejob (= 4.2.11)
mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 1.0, >= 1.0.5)
actionpack (4.2.11)
actionview (= 4.2.11)
activesupport (= 4.2.11)
rack (~> 1.6)
rack-test (~> 0.6.2)
rails-dom-testing (~> 1.0, >= 1.0.5)
rails-html-sanitizer (~> 1.0, >= 1.0.2)
actionview (4.2.11)
activesupport (= 4.2.11)
builder (~> 3.1)
erubis (~> 2.7.0)
rails-dom-testing (~> 1.0, >= 1.0.5)
rails-html-sanitizer (~> 1.0, >= 1.0.3)
activejob (4.2.11)
activesupport (= 4.2.11)
globalid (>= 0.3.0)
activemodel (4.2.11)
activesupport (= 4.2.11)
builder (~> 3.1)
activerecord (4.2.11)
activemodel (= 4.2.11)
activesupport (= 4.2.11)
arel (~> 6.0)
activerecord-nulldb-adapter (0.3.1)
activerecord (>= 2.0.0)
activerecord-postgresql-adapter (0.0.1)
pg
activesupport (4.2.11)
i18n (~> 0.7)
minitest (~> 5.1)
thread_safe (~> 0.3, >= 0.3.4)
tzinfo (~> 1.1)
addressable (2.6.0)
public_suffix (>= 2.0.2, < 4.0)
analytics-ruby (2.0.13)
arel (6.0.4)
argon2 (2.0.2)
ffi (~> 1.9)
ffi-compiler (>= 0.1)
aws-partitions (1.77.0)
aws-sdk-core (3.19.0)
aws-partitions (~> 1.0)
aws-sigv4 (~> 1.0)
jmespath (~> 1.0)
aws-sdk-kms (1.5.0)
aws-sdk-core (~> 3)
aws-sigv4 (~> 1.0)
aws-sdk-s3 (1.9.0)
aws-sdk-core (~> 3)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.0)
aws-sigv4 (1.0.2)
axiom-types (0.1.1)
descendants_tracker (~> 0.0.4)
ice_nine (~> 0.11.0)
thread_safe (~> 0.3, >= 0.3.1)
builder (3.2.3)
byebug (8.2.2)
capybara (1.1.2)
mime-types (>= 1.16)
nokogiri (>= 1.3.3)
rack (>= 1.0.0)
rack-test (>= 0.5.4)
selenium-webdriver (~> 2.0)
xpath (~> 0.1.4)
charlock_holmes (0.7.6)
childprocess (0.5.9)
ffi (~> 1.0, >= 1.0.11)
chronic (0.10.2)
chunky_png (1.3.5)
ci_reporter (1.8.4)
builder (>= 2.1.2)
coercible (1.0.0)
descendants_tracker (~> 0.0.1)
compass (1.0.3)
chunky_png (~> 1.2)
compass-core (~> 1.0.2)
compass-import-once (~> 1.0.5)
rb-fsevent (>= 0.9.3)
rb-inotify (>= 0.9)
sass (>= 3.3.13, < 3.5)
compass-core (1.0.3)
multi_json (~> 1.0)
sass (>= 3.3.0, < 3.5)
compass-import-once (1.0.5)
sass (>= 3.2, < 3.5)
concurrent-ruby (1.1.4)
crass (1.0.4)
daemons (1.3.1)
db-query-matchers (0.4.0)
dbf (2.0.6)
fastercsv (~> 1.5.4)
declarative (0.0.10)
declarative-option (0.1.0)
delorean (2.1.0)
chronic
descendants_tracker (0.0.4)
thread_safe (~> 0.3, >= 0.3.1)
diff-lcs (1.1.3)
docile (1.1.5)
dropbox_api (0.1.6)
faraday (~> 0.9, ~> 0.8)
oauth2 (~> 1.1)
ejs (1.1.1)
email_address (0.1.11)
netaddr (~> 2.0)
simpleidn
equalizer (0.0.11)
erubis (2.7.0)
ethon (0.8.1)
ffi (>= 1.3.0)
eventmachine (1.2.7)
execjs (0.4.0)
multi_json (~> 1.0)
factory_girl (4.0.0)
activesupport (>= 3.0.0)
factory_girl_rails (4.0.0)
factory_girl (~> 4.0.0)
railties (>= 3.0.0)
faraday (0.9.0)
multipart-post (>= 1.2, < 3)
faraday_middleware (0.9.2)
faraday (>= 0.7.4, < 0.10)
fastercsv (1.5.5)
faye-websocket (0.4.7)
eventmachine (>= 0.12.0)
ffi (1.9.25)
ffi-compiler (1.0.1)
ffi (>= 1.0.0)
rake
gc_tracer (1.5.1)
get_process_mem (0.2.0)
gibbon (1.1.4)
httparty
multi_json (>= 1.3.4)
globalid (0.4.2)
activesupport (>= 4.2.0)
google-api-client (0.28.4)
addressable (~> 2.5, >= 2.5.1)
googleauth (>= 0.5, < 0.10.0)
httpclient (>= 2.8.1, < 3.0)
mime-types (~> 3.0)
representable (~> 3.0)
retriable (>= 2.0, < 4.0)
signet (~> 0.10)
googleauth (0.5.1)
faraday (~> 0.9)
jwt (~> 1.4)
logging (~> 2.0)
memoist (~> 0.12)
multi_json (~> 1.11)
os (~> 0.9)
signet (~> 0.7)
hashie (3.4.3)
hiredis (0.6.3)
http_parser.rb (0.5.3)
httparty (0.13.7)
json (~> 1.8)
multi_xml (>= 0.5.2)
httpclient (2.8.3)
i18n (0.9.5)
concurrent-ruby (~> 1.0)
ice_nine (0.11.2)
instagram (1.1.6)
faraday (>= 0.7, < 0.10)
faraday_middleware (>= 0.8, < 0.10)
hashie (>= 0.4.0)
multi_json (~> 1.0, >= 1.0.3)
jmespath (1.4.0)
json (1.8.6)
json-schema (2.1.9)
jwt (1.5.4)
kgio (2.10.0)
little-plugger (1.1.4)
logging (2.2.2)
little-plugger (~> 1.1)
multi_json (~> 1.10)
loofah (2.2.3)
crass (~> 1.0.2)
nokogiri (>= 1.5.9)
mail (2.7.1)
mini_mime (>= 0.1.1)
memoist (0.16.0)
memory_profiler (0.9.6)
metaclass (0.0.4)
method_source (0.8.2)
mime-types (3.1)
mime-types-data (~> 3.2015)
mime-types-data (3.2016.0521)
mini_mime (1.0.1)
mini_portile2 (2.3.0)
minitest (5.11.3)
mocha (1.1.0)
metaclass (~> 0.0.1)
mock_redis (0.16.0)
mono_logger (1.1.0)
msgpack (1.0.2)
multi_json (1.12.1)
multi_xml (0.5.5)
multipart-post (2.0.0)
net-ldap (0.16.0)
net-telnet (0.1.1)
netaddr (2.0.3)
nokogiri (1.8.5)
mini_portile2 (~> 2.3.0)
oauth (0.4.7)
oauth2 (1.3.1)
faraday (>= 0.8, < 0.12)
jwt (~> 1.0)
multi_json (~> 1.3)
multi_xml (~> 0.5)
rack (>= 1.2, < 3)
os (0.9.6)
pg (0.20.0)
poltergeist (1.0.3)
capybara (~> 1.1)
childprocess (~> 0.3)
faye-websocket (~> 0.4.4)
http_parser.rb (~> 0.5.3)
multi_json (~> 1.0)
power_assert (0.2.7)
protected_attributes (1.1.3)
activemodel (>= 4.0.1, < 5.0)
public_suffix (3.0.3)
rack (1.6.11)
rack-protection (1.5.5)
rack
rack-test (0.6.3)
rack (>= 1.0)
rails (4.2.11)
actionmailer (= 4.2.11)
actionpack (= 4.2.11)
actionview (= 4.2.11)
activejob (= 4.2.11)
activemodel (= 4.2.11)
activerecord (= 4.2.11)
activesupport (= 4.2.11)
bundler (>= 1.3.0, < 2.0)
railties (= 4.2.11)
sprockets-rails
rails-deprecated_sanitizer (1.0.3)
activesupport (>= 4.2.0.alpha)
rails-dom-testing (1.0.9)
activesupport (>= 4.2.0, < 5.0)
nokogiri (~> 1.6)
rails-deprecated_sanitizer (>= 1.0.1)
rails-html-sanitizer (1.0.4)
loofah (~> 2.2, >= 2.2.2)
rails_warden (0.5.8)
warden (>= 1.0.0)
railties (4.2.11)
actionpack (= 4.2.11)
activesupport (= 4.2.11)
rake (>= 0.8.7)
thor (>= 0.18.1, < 2.0)
raindrops (0.15.0)
rake (0.9.2.2)
rb-fsevent (0.9.7)
rb-inotify (0.9.7)
ffi (>= 0.5.0)
rb-readline (0.5.5)
rbtrace (0.4.8)
ffi (>= 1.0.6)
msgpack (>= 0.4.3)
trollop (>= 1.16.2)
redcarpet (3.3.3)
redis (3.3.5)
redis-namespace (1.5.2)
redis (~> 3.0, >= 3.0.4)
representable (3.0.4)
declarative (< 0.1.0)
declarative-option (< 0.2.0)
uber (< 0.2.0)
request_store (1.1.0)
responders (2.3.0)
railties (>= 4.2.0, < 5.1)
resque (1.25.2)
mono_logger (~> 1.0)
multi_json (~> 1.0)
redis-namespace (~> 1.3)
sinatra (>= 0.9.2)
vegas (~> 0.1.2)
resque-metrics (0.1.1)
resque (~> 1.19)
retriable (3.1.2)
rollbar (2.11.1)
multi_json
roo (1.13.2)
nokogiri
rubyzip
spreadsheet (> 0.6.4)
rotp (3.3.1)
rqrcode (0.10.1)
chunky_png (~> 1.0)
rspec-core (2.12.2)
rspec-expectations (2.12.1)
diff-lcs (~> 1.1.3)
rspec-mocks (2.12.2)
rspec-rails (2.12.0)
actionpack (>= 3.0)
activesupport (>= 3.0)
railties (>= 3.0)
rspec-core (~> 2.12.0)
rspec-expectations (~> 2.12.0)
rspec-mocks (~> 2.12.0)
ruby-ole (1.2.12)
ruby-prof (0.15.1)
ruby-saml (1.4.1)
nokogiri (>= 1.5.10)
rubyzip (1.2.2)
sass (3.4.21)
selenium-webdriver (2.52.0)
childprocess (~> 0.5)
multi_json (~> 1.0)
rubyzip (~> 1.0)
websocket (~> 1.0)
sequel (4.45.0)
sequel-rails (1.0.1)
actionpack (>= 4.0.0)
activemodel (>= 4.0.0)
railties (>= 4.0.0)
sequel (>= 3.28, < 6.0)
sequel_pg (1.12.0)
pg (>= 0.18.0)
sequel (>= 4.38.0)
signet (0.11.0)
addressable (~> 2.3)
faraday (~> 0.9)
jwt (>= 1.5, < 3.0)
multi_json (~> 1.10)
simplecov (0.13.0)
docile (~> 1.1.0)
json (>= 1.8, < 3)
simplecov-html (~> 0.10.0)
simplecov-html (0.10.0)
simplecov-json (0.2)
json
simplecov
simplecov-rcov (0.2.3)
simplecov (>= 0.4.1)
simpleidn (0.1.1)
unf (~> 0.1.4)
sinatra (1.4.6)
rack (~> 1.4)
rack-protection (~> 1.4)
tilt (>= 1.3, < 3)
spreadsheet (1.1.1)
ruby-ole (>= 1.0)
sprockets (3.7.2)
concurrent-ruby (~> 1.0)
rack (> 1, < 3)
sprockets-rails (3.2.1)
actionpack (>= 4.0)
activesupport (>= 4.0)
sprockets (>= 3.0.0)
state_machines (0.5.0)
state_machines-activemodel (0.5.0)
activemodel (>= 4.1, < 5.2)
state_machines (>= 0.5.0)
state_machines-activerecord (0.5.0)
activerecord (>= 4.1, < 5.2)
state_machines-activemodel (>= 0.5.0)
statsd-client (0.0.7)
test-unit (3.1.7)
power_assert
thin (1.7.2)
daemons (~> 1.0, >= 1.0.9)
eventmachine (~> 1.0, >= 1.0.4)
rack (>= 1, < 3)
thor (0.20.3)
thread_safe (0.3.6)
tilt (2.0.6)
trollop (2.1.2)
typhoeus (0.7.2)
ethon (>= 0.7.4)
tzinfo (1.2.5)
thread_safe (~> 0.1)
uber (0.1.0)
unf (0.1.4)
unf_ext
unf_ext (0.0.7.6)
unicorn (4.8.2)
kgio (~> 2.6)
rack
raindrops (~> 0.7)
unicorn-worker-killer (0.4.4)
get_process_mem (~> 0)
unicorn (>= 4, < 6)
uuidtools (2.1.5)
values (1.8.0)
vegas (0.1.11)
rack (>= 1.0.0)
virtus (1.0.5)
axiom-types (~> 0.1)
coercible (~> 1.0)
descendants_tracker (~> 0.0, >= 0.0.3)
equalizer (~> 0.0, >= 0.0.9)
warden (1.2.6)
rack (>= 1.0)
webrick (1.3.1)
websocket (1.2.2)
xpath (0.1.4)
nokogiri (~> 1.3)
zeus (0.15.13)
method_source (>= 0.6.7)
PLATFORMS
ruby
DEPENDENCIES
activerecord-nulldb-adapter (= 0.3.1)
activerecord-postgresql-adapter
addressable (~> 2.5)
analytics-ruby (~> 2.0.0)
aws-sdk-s3 (~> 1)
byebug
capybara (= 1.1.2)
cartodb-common!
charlock_holmes (= 0.7.6)
ci_reporter (= 1.8.4)
compass (= 1.0.3)
db-query-matchers (= 0.4.0)
dbf (= 2.0.6)
delorean
dropbox_api (= 0.1.6)
ejs (~> 1.1.1)
email_address (~> 0.1.11)
execjs (~> 0.4)
factory_girl_rails (~> 4.0.0)
fake_net_ldap!
faraday (= 0.9.0)
gc_tracer (= 1.5.1)
gibbon (= 1.1.4)
google-api-client (= 0.28.4)
hiredis (~> 0.6.1)
instagram (= 1.1.6)
json-schema (= 2.1.9)
memory_profiler
mime-types (= 3.1)
mocha (= 1.1.0)
mock_redis
net-ldap (= 0.16.0)
net-telnet
nokogiri (~> 1.8.2)
oauth (= 0.4.7)
oauth-plugin!
pg (= 0.20.0)
poltergeist (>= 1.0.0)
protected_attributes
rack
rack-test (= 0.6.3)
rails (= 4.2.11)
rails_warden (= 0.5.8)
raindrops (= 0.15.0)
rake (= 0.9.2.2)
rb-readline
rbtrace (= 0.4.8)
redcarpet (= 3.3.3)
redis (~> 3.3.5)
request_store (= 1.1.0)
responders (~> 2.0)
resque (= 1.25.2)
resque-metrics (= 0.1.1)
rollbar (~> 2.11.1)
roo (= 1.13.2)
rotp (~> 3.3, >= 3.3.1)
rqrcode (~> 0.10.1)
rspec-rails (= 2.12.0)
ruby-prof (= 0.15.1)
ruby-saml (= 1.4.1)
selenium-webdriver (>= 2.5.0)
sequel (~> 4.45.0)
sequel-rails (~> 1.0.1)
sequel_pg (~> 1.12.0)
simplecov (= 0.13.0)
simplecov-json
simplecov-rcov
state_machines-activerecord (~> 0.5.0)
statsd-client (= 0.0.7)
test-unit
thin
typhoeus (= 0.7.2)
unicorn (= 4.8.2)
unicorn-worker-killer
uuidtools (= 2.1.5)
values (= 1.8.0)
virtus (= 1.0.5)
webrick (= 1.3.1)
zeus
BUNDLED WITH
1.17.3

529
Gruntfile.js Normal file
View File

@ -0,0 +1,529 @@
var _ = require('underscore');
var timer = require('grunt-timer');
var semver = require('semver');
var jasmineCfg = require('./lib/build/tasks/jasmine.js');
var execSync = require('child_process').execSync;
var lockedDependencies = require('./lib/build/tasks/locked-dependencies.js');
var webpackTask = null;
var EDITOR_ASSETS_VERSION = require('./config/editor_assets_version.json').version;
var REQUIRED_NODE_VERSIONS = ['10.x', '6.9.2'];
var REQUIRED_NPM_VERSIONS = ['6.x', '3.10.9'];
var DEVELOPMENT = 'development';
var LOCKED_MODULES_TO_VALIDATE = [
'backbone',
'camshaft-reference',
'carto',
'internal-carto.js',
'cartocolor',
'd3',
'jquery',
'leaflet',
'perfect-scrollbar',
'torque.js',
'turbo-carto',
];
// Synchronously check if editor assets have changed
var diff = execSync('git diff --numstat $(git rev-list --tags --skip=1 --max-count=1) -- $(git symbolic-ref --short HEAD) config/editor_assets_version.json', {
cwd: __dirname
});
var EDITOR_ASSETS_CHANGED = diff.toString().length > 0;
function requireWebpackTask () {
if (webpackTask === null) {
webpackTask = require('./lib/build/tasks/webpack/webpack.js');
}
return webpackTask;
}
function logVersionsError (err, requiredNodeVersions, requiredNpmVersions) {
if (err) {
grunt.log.fail('############### /!\\ CAUTION /!\\ #################');
grunt.log.fail('PLEASE installed required versions to build CARTO:\n- node: ' + requiredNodeVersions.join(', ') + '\n- npm: ' + requiredNpmVersions.join(', '));
grunt.log.fail('#################################################');
process.exit(1);
}
}
function getTargetDiff () {
var target = require('child_process').execSync('(git diff --name-only --relative || true;' +
'git diff origin/master.. --name-only --relative || true;)' +
'| grep \'\\.js\\?$\' || true').toString();
if (target.length === 0) {
target = ['.'];
} else {
target = target.split('\n');
target.splice(-1, 1);
}
return target;
}
/**
* CartoDB UI assets generation
*/
module.exports = function (grunt) {
if (timer) timer.init(grunt);
var environment = grunt.option('environment') || DEVELOPMENT;
grunt.log.writeln('Environment: ' + environment);
var runningTasks = grunt.cli.tasks;
if (runningTasks.length === 0) {
grunt.log.writeln('Running default task.');
} else {
grunt.log.writeln('Running tasks: ' + runningTasks);
}
function preFlight (requiredNodeVersions, requiredNpmVersions, logFn) {
function checkVersion (cmd, versionRange, name, logFn) {
grunt.log.writeln('Required ' + name + ' version: ' + versionRange.join(', '));
require('child_process').exec(cmd, function (error, stdout, stderr) {
var err = null;
if (error) {
err = 'failed to check version for ' + name;
} else {
var installed = semver.clean(stdout);
if (!semver.satisfies(installed, versionRange.join(' || '))) {
err = 'Installed ' + name + ' version does not match with required [' + versionRange.join(', ') + '] Installed: ' + installed;
}
}
if (err) {
grunt.log.fail(err);
}
logFn && logFn(err ? new Error(err) : null);
});
}
checkVersion('node -v', requiredNodeVersions, 'node', logFn);
checkVersion('npm -v', requiredNpmVersions, 'npm', logFn);
}
var mustCheckNodeVersion = grunt.option('no-node-checker');
if (!mustCheckNodeVersion) {
preFlight(REQUIRED_NODE_VERSIONS, REQUIRED_NPM_VERSIONS, logVersionsError);
grunt.log.writeln('');
}
var duplicatedModules = lockedDependencies.checkDuplicatedDependencies(require('./package-lock.json'), LOCKED_MODULES_TO_VALIDATE);
if (duplicatedModules.length > 0) {
grunt.log.fail('############### /!\\ CAUTION /!\\ #################');
grunt.log.fail('Duplicated dependencies found in package-lock.json file.');
grunt.log.fail(JSON.stringify(duplicatedModules, null, 4));
grunt.log.fail('#################################################');
process.exit(1);
}
var PUBLIC_DIR = './public/';
var ROOT_ASSETS_DIR = './public/assets/';
var ASSETS_DIR = './public/assets/<%= pkg.version %>';
var EDITOR_ASSETS_DIR = `./public/assets/editor/${EDITOR_ASSETS_VERSION}`;
/**
* this is being used by `grunt --environment=production release`
*/
var env = './config/grunt_' + environment + '.json';
grunt.log.writeln('env: ' + env);
if (grunt.file.exists(env)) {
env = grunt.file.readJSON(env);
} else {
throw grunt.util.error(env + ' file is missing! See ' + env + '.sample for how it should look like');
}
var aws = {};
if (grunt.file.exists('./lib/build/grunt-aws.json')) {
aws = grunt.file.readJSON('./lib/build/grunt-aws.json');
}
var targetDiff = getTargetDiff();
// Project configuration.
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
aws: aws,
env: env,
public_dir: PUBLIC_DIR,
assets_dir: ASSETS_DIR,
editor_assets_dir: EDITOR_ASSETS_DIR,
editor_assets_version: EDITOR_ASSETS_VERSION,
root_assets_dir: ROOT_ASSETS_DIR,
// Concat task
concat: require('./lib/build/tasks/concat').task(),
// JST generation task
jst: require('./lib/build/tasks/jst').task(),
// Compass files generation
compass: require('./lib/build/tasks/compass').task(),
// Copy assets (stylesheets, javascripts, images...)
copy: require('./lib/build/tasks/copy').task(grunt),
// Watch actions
watch: require('./lib/build/tasks/watch.js').task(),
// Clean folders before other tasks
clean: require('./lib/build/tasks/clean').task(),
jasmine: jasmineCfg,
// Create a tarball of the static pages for production release
compress: require('./lib/build/tasks/compress.js').task(),
s3: require('./lib/build/tasks/s3.js').task(),
exorcise: require('./lib/build/tasks/exorcise.js').task(),
uglify: require('./lib/build/tasks/uglify.js').task(),
browserify: require('./lib/build/tasks/browserify.js').task(),
connect: require('./lib/build/tasks/connect.js').task(),
availabletasks: require('./lib/build/tasks/availabletasks.js').task(),
sass: require('./lib/build/tasks/sass.js').task(),
eslint: {
target: targetDiff
}
});
/**
* `grunt availabletasks`
*/
grunt.loadNpmTasks('grunt-available-tasks');
// Load Grunt tasks
require('load-grunt-tasks')(grunt, {
pattern: ['grunt-*', '@*/grunt-*', '!grunt-timer']
});
require('./lib/build/tasks/manifest').register(grunt, ASSETS_DIR);
grunt.registerTask('invalidate', 'invalidate cache', function () {
var done = this.async();
var url = require('url');
var https = require('https');
var options = url.parse(grunt.template.process('https://api.fastly.com/service/<%= aws.FASTLY_CARTODB_SERVICE %>/purge_all'));
options['method'] = 'POST';
options['headers'] = {
'Fastly-Key': aws.FASTLY_API_KEY,
'Content-Length': '0' // Disables chunked encoding
};
console.log(options);
https.request(options, function (response) {
if (response.statusCode === 200) {
grunt.log.ok('CDN invalidated (fastly)');
} else {
grunt.log.error('CDN not invalidated (fastly), code: ' + response.statusCode);
}
done();
}).on('error', function () {
grunt.log.error('CDN not invalidated (fastly)');
done();
}).end();
});
grunt.registerTask('config', 'generates assets config for current configuration', function () {
// Set assets url for static assets in our app
var config = grunt.template.process('cdb.config.set(\'assets_url\', \'<%= env.http_path_prefix %>/assets/<%= pkg.version %>\');');
config += grunt.template.process('\nconsole.log(\'cartodbui v<%= pkg.version %>\');');
grunt.file.write('lib/build/app_config.js', config);
});
grunt.registerTask('check_release', 'checks release can be done', function () {
if (environment === DEVELOPMENT) {
grunt.log.error('you can\'t release running development environment');
return false;
}
grunt.log.ok('************************************************');
grunt.log.ok(' you are going to deploy to ' + env);
grunt.log.ok('************************************************');
});
grunt.event.on('watch', function (action, filepath, subtask) {
// Configure copy vendor to only run on changed file
var vendorFile = 'copy.vendor';
var vendorFileCfg = grunt.config.get(vendorFile);
if (filepath.indexOf(vendorFileCfg.cwd) !== -1) {
grunt.config(vendorFile + '.src', filepath.replace(vendorFileCfg.cwd, ''));
} else {
grunt.config(vendorFile + 'src', []);
}
// Configure copy app to only run on changed files
var files = 'copy.app.files';
var filesCfg = grunt.config.get(files);
for (var i = 0, l = filesCfg.length; i < l; ++i) {
var file = files + '.' + i;
var fileCfg = grunt.config.get(file);
if (filepath.indexOf(fileCfg.cwd) !== -1) {
grunt.config(file + '.src', filepath.replace(fileCfg.cwd, ''));
} else {
grunt.config(file + '.src', []);
}
}
});
grunt.registerTask('css', [
'copy:vendor',
'copy:app',
'copy:css_cartodb',
'compass',
'sass',
'concat:css'
]);
grunt.registerTask('run_browserify', 'Browserify task with options', function (option) {
var skipAllSpecs = false;
if (environment !== DEVELOPMENT) {
grunt.log.writeln('Skipping all specs generation by browserify because not in development environment.');
skipAllSpecs = true;
}
if (skipAllSpecs) {
delete grunt.config.data.browserify['test_specs_for_browserify_modules'];
}
grunt.task.run('browserify');
});
grunt.registerTask('cdb', 'build cartodb.js', function () {
var done = this.async();
require('child_process').exec('make update_cdb', function (error, stdout, stderr) {
if (error) {
grunt.log.fail('cartodb.js not updated (due to ' + stdout + ', ' + stderr + ')');
} else {
grunt.log.ok('cartodb.js updated');
}
done();
});
});
grunt.registerTask('js_editor', [
'cdb',
'setConfig:env.browserify_watch:true',
'npm-carto-node',
'run_browserify',
'concat:js',
'jst'
]);
grunt.registerTask('beforeDefault', [
'config'
]);
grunt.registerTask('dev-editor', [
'beforeDefault',
'js_editor',
'css',
'manifest'
]);
registerCmdTask('npm-start', {cmd: 'npm', args: ['run', 'start']});
registerCmdTask('npm-build', {cmd: 'npm', args: ['run', 'build']});
registerCmdTask('npm-build-static', {cmd: 'npm', args: ['run', 'build:static']});
registerCmdTask('npm-carto-node', {cmd: 'npm', args: ['run', 'carto-node']});
registerCmdTask('npm-build-dev', {cmd: 'npm', args: ['run', 'build:dev']});
/**
* `grunt dev`
*/
grunt.registerTask('editor', [
'build-static',
'npm-build-dev',
'dev-editor',
'watch:css'
]);
grunt.registerTask('default', [
'build-static',
'npm-build-dev',
'dev-editor'
]);
grunt.registerTask('lint', [
'eslint'
]);
grunt.registerTask('sourcemaps', 'generate sourcemaps, to be used w/ trackjs.com for bughunting', [
'setConfig:assets_dir:./tmp/sourcemaps',
'config',
'js',
'copy:js',
'exorcise',
'uglify'
]);
// -- BUILD TASKS
grunt.registerTask('build', 'build editor, builder, dashboard and static pages', [
'build-editor',
'build-static',
'npm-build'
]);
grunt.registerTask('build-editor', 'generate editor css and javasript files', [
'dev-editor',
'copy:js',
'exorcise',
'uglify'
]);
grunt.registerTask('build-static', 'generate static files and needed vendor scripts', [
'npm-carto-node',
'npm-build-static'
]);
/**
* `grunt release`
* `grunt release --environment=production`
*/
grunt.registerTask('release', [
'check_release',
'build-static',
'npm-build',
'compress',
's3:js',
's3:css',
's3:images',
's3:fonts',
's3:flash',
's3:favicons',
's3:unversioned',
's3:unversioned_onboarding',
's3:static_pages',
'invalidate'
]);
grunt.registerTask('release_editor_assets', 'builds & uploads editor assets', [
'build-editor',
's3:frozen',
'invalidate'
]);
grunt.registerTask('generate_builder_specs', 'Generate only builder specs', function (option) {
requireWebpackTask().affected.call(this, option, grunt);
});
grunt.registerTask('generate_dashboard_specs', 'Generate only dashboard specs', function (option) {
requireWebpackTask().dashboard.call(this, option, grunt);
});
grunt.registerTask('bootstrap_webpack_builder_specs', 'Create the webpack compiler', function () {
requireWebpackTask().bootstrap.call(this, 'builder_specs', grunt);
});
grunt.registerTask('bootstrap_webpack_dashboard_specs', 'Create the webpack compiler', function () {
requireWebpackTask().bootstrap.call(this, 'dashboard_specs', grunt);
});
grunt.registerTask('webpack:builder_specs', 'Webpack compilation task for builder specs', function () {
requireWebpackTask().compile.call(this, 'builder_specs');
});
grunt.registerTask('webpack:dashboard_specs', 'Webpack compilation task for dashboard specs', function () {
requireWebpackTask().compile.call(this, 'dashboard_specs');
});
var testTasks = [
'connect:test',
'beforeDefault',
'generate_builder_specs',
'bootstrap_webpack_builder_specs',
'webpack:builder_specs',
'jasmine:builder',
'generate_dashboard_specs',
'bootstrap_webpack_dashboard_specs',
'webpack:dashboard_specs',
'jasmine:dashboard',
'lint'
];
// If the editor assets version has changed, add the editor tests
if (EDITOR_ASSETS_CHANGED) {
testTasks.splice(testTasks.indexOf('generate_builder_specs'), 0, 'js_editor', 'jasmine:cartodbui');
}
/**
* `grunt test`
*/
grunt.registerTask('test', '(CI env) Re-build JS files and run all tests. For manual testing use `grunt jasmine` directly', testTasks);
/**
* `grunt test:browser` compile all Builder specs and launch a webpage in the browser.
*/
grunt.registerTask('test:browser:builder', 'Build all Builder specs', [
'generate_builder_specs',
'bootstrap_webpack_builder_specs',
'webpack:builder_specs',
'jasmine:builder:build',
'connect:specs_builder',
'watch:js_affected'
]);
/**
* `grunt dashboard_specs` compile dashboard specs
*/
grunt.registerTask('test:browser:dashboard', 'Build only dashboard specs', [
'generate_dashboard_specs',
'bootstrap_webpack_dashboard_specs',
'webpack:dashboard_specs',
'jasmine:dashboard:build',
'connect:specs_dashboard',
'watch:dashboard_specs'
]);
grunt.registerTask('setConfig', 'Set a config property', function (name, val) {
grunt.config.set(name, val);
});
/**
* `grunt affected_editor_specs` compile all Editor specs and launch a webpage in the browser.
*/
grunt.registerTask('affected_editor_specs', 'Build Editor specs', [
'jasmine:cartodbui:build',
'connect:server',
'watch:js_affected_editor'
]);
/**
* Delegate task to command line.
* @param {String} name - If taskname starts with npm it's run a npm script (i.e. `npm run foobar`
* @param {Object} d - d as in data
* @param {Array} d.args - arguments to pass to the d.cmd
* @param {String} [d.cmd = process.execPath]
* @param {String} [d.desc = ''] - description
* @param {...string} args space-separated arguments passed to the cmd
*/
function registerCmdTask (name, opts) {
opts = _.extend({
cmd: process.execPath,
desc: '',
args: []
}, opts);
grunt.registerTask(name, opts.desc, function () {
// adapted from http://stackoverflow.com/a/24796749
var done = this.async();
grunt.util.spawn({
cmd: opts.cmd,
args: opts.args,
opts: { stdio: 'inherit' }
}, done);
});
}
};

25
Guardfile Normal file
View File

@ -0,0 +1,25 @@
# A sample Guardfile
# More info at https://github.com/guard/guard#readme
guard 'minitest', test_folders: 'services' do
# with Minitest::Spec
watch(%r|^services/.*/spec/(.*)_spec\.rb|)
watch(%r|^services/(.*)([^/]+)\.rb|) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
# watch(%r|^spec/spec_helper\.rb|) { "spec" }
# with Minitest::Unit
# watch(%r|^test/(.*)\/?test_(.*)\.rb|)
# watch(%r|^lib/(.*)([^/]+)\.rb|) { |m| "test/#{m[1]}test_#{m[2]}.rb" }
# watch(%r|^test/test_helper\.rb|) { "test" }
# Rails 3.2
# watch(%r|^app/controllers/(.*)\.rb|) { |m| "test/controllers/#{m[1]}_test.rb" }
# watch(%r|^app/helpers/(.*)\.rb|) { |m| "test/helpers/#{m[1]}_test.rb" }
# watch(%r|^app/models/(.*)\.rb|) { |m| "test/unit/#{m[1]}_test.rb" }
# Rails
# watch(%r|^app/controllers/(.*)\.rb|) { |m| "test/functional/#{m[1]}_test.rb" }
# watch(%r|^app/helpers/(.*)\.rb|) { |m| "test/helpers/#{m[1]}_test.rb" }
# watch(%r|^app/models/(.*)\.rb|) { |m| "test/unit/#{m[1]}_test.rb" }
end

27
LICENSE Normal file
View File

@ -0,0 +1,27 @@
Copyright (c) 2015, CartoDB
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

426
Makefile Normal file
View File

@ -0,0 +1,426 @@
REV=$(shell git rev-parse HEAD)
RUBY_MAJOR=$(shell ruby -e "puts RUBY_VERSION" | cut -d. -f1)
all:
RAILS_ENV=test bundle install
# I cannot remmeber why gdal is being skipped from this list...
cat python_requirements.txt | grep -v gdal | sudo pip install -r /dev/stdin
npm install
WORKING_SPECS_1 = \
spec/models/table_spec.rb \
spec/models/table_privacy_manager_spec.rb \
spec/models/table/column_typecaster_spec.rb \
spec/models/user_spec.rb \
spec/models/user_presenter_spec.rb \
spec/models/user_table_spec.rb \
spec/models/layer_spec.rb \
spec/models/layer/presenter_spec.rb \
spec/requests/application_controller_spec.rb \
spec/requests/sessions_spec.rb \
spec/requests/api/json/layer_presenter_spec.rb \
spec/requests/carto/api/layer_presenter_spec.rb \
spec/requests/carto/api/data_import_presenter_spec.rb \
spec/requests/carto/api/database_groups_controller_spec.rb \
spec/requests/carto/api/groups_controller_spec.rb \
spec/requests/carto/api/grantables_controller_spec.rb \
spec/requests/carto/api/infowindow_migrator_spec.rb \
spec/requests/carto/api/layer_presenter_spec.rb \
spec/requests/carto/api/overlay_presenter_spec.rb \
spec/requests/carto/api/presenter_cache_spec.rb \
spec/requests/carto/api/templates_controller_spec.rb \
spec/requests/carto/api/user_creations_controller_spec.rb \
spec/requests/carto/api/widgets_controller_spec.rb \
spec/requests/carto/api/custom_visualizations_controller_spec.rb \
spec/requests/carto/builder/public/embeds_controller_spec.rb \
spec/requests/carto/builder/visualizations_controller_spec.rb \
spec/requests/carto/kuviz/visualizations_controller_spec.rb \
spec/requests/visualizations_controller_helper_spec.rb \
spec/requests/warden_spec.rb \
spec/models/map_spec.rb \
spec/models/map/copier_spec.rb \
spec/models/visualization/collection_spec.rb \
spec/models/visualization/locator_spec.rb \
spec/models/visualization/member_spec.rb \
spec/models/visualization/name_checker_spec.rb \
spec/models/visualization/name_generator_spec.rb \
spec/models/visualization/organization_visualization_spec.rb \
spec/models/visualization/overlays_spec.rb \
spec/models/visualization/presenter_spec.rb \
spec/models/visualization/relator_spec.rb \
spec/models/visualization/table_blender_spec.rb \
spec/models/visualization/tags_spec.rb \
spec/models/data_import_spec.rb \
spec/models/geocoding_spec.rb \
spec/models/common_data_spec.rb \
spec/lib/api_calls_spec.rb \
spec/lib/errors_spec.rb \
spec/lib/url_signer_spec.rb \
spec/lib/string_spec.rb \
spec/lib/image_metadata_spec.rb \
spec/lib/central_spec.rb \
spec/lib/trending_maps_spec.rb \
spec/lib/user_account_creator_spec.rb \
spec/lib/carto/filename_generator_spec.rb \
spec/lib/carto/http_header_authentication_spec.rb \
spec/lib/carto/saml_service_spec.rb \
spec/lib/carto/users_metadata_redis_cache_spec.rb \
spec/lib/carto/visualization_migrator_spec.rb \
spec/lib/carto/http/client_spec.rb \
spec/lib/carto/table_utils_spec.rb \
spec/helpers/uuidhelper_spec.rb \
spec/helpers/url_validator_spec.rb \
spec/models/carto/data_import_spec.rb \
spec/models/carto/visualization_spec.rb \
spec/models/carto/visualization/watcher_spec.rb \
spec/models/carto/map_spec.rb \
spec/models/carto/template_spec.rb \
spec/models/carto/group_spec.rb \
spec/models/carto/widget_spec.rb \
spec/models/carto/ldap/configuration_spec.rb \
spec/services/carto/data_library_service_spec.rb \
spec/services/carto/user_authenticator_spec.rb \
spec/requests/sessions_controller_spec.rb \
spec/services/carto/visualizations_export_service_2_spec.rb \
spec/services/carto/visualization_backup_service_spec.rb \
$(NULL)
WORKING_SPECS_2 = \
spec/lib/cartodb/stats/importer_spec.rb \
spec/lib/cartodb/stats/platform_spec.rb \
spec/lib/cartodb/connection_pool_spec.rb \
services/importer/spec/acceptance/geojson_spec.rb \
services/importer/spec/acceptance/gpx_spec.rb \
services/importer/spec/acceptance/kml_spec.rb \
services/importer/spec/acceptance/mapinfo_spec.rb \
services/importer/spec/acceptance/osm_spec.rb \
services/importer/spec/acceptance/sql_spec.rb \
services/importer/spec/acceptance/raster2pgsql_spec.rb \
services/importer/spec/acceptance/csv_spec.rb \
services/importer/spec/acceptance/gz_tgz_spec.rb \
services/importer/spec/acceptance/zip_spec.rb \
services/importer/spec/acceptance/shp_spec.rb \
services/importer/spec/acceptance/rar_spec.rb \
services/importer/spec/unit/column_spec.rb \
services/importer/spec/unit/csv_normalizer_spec.rb \
services/importer/spec/unit/shp_normalizer_spec.rb \
services/importer/spec/unit/shp_helper_spec.rb \
services/importer/spec/unit/excel2csv_spec.rb \
services/importer/spec/unit/downloader_spec.rb \
services/importer/spec/unit/georeferencer_spec.rb \
services/importer/spec/unit/json2csv_spec.rb \
services/importer/spec/unit/kml_splitter_spec.rb \
services/importer/spec/unit/gpx_splitter_spec.rb \
services/importer/spec/unit/loader_spec.rb \
services/importer/spec/unit/mail_notifier_spec.rb \
services/importer/spec/unit/sql_loader_spec.rb \
services/importer/spec/unit/table_sampler_spec.rb \
services/importer/spec/unit/ogr2ogr_spec.rb \
services/importer/spec/unit/post_import_handler_spec.rb \
services/importer/spec/unit/runner_spec.rb \
services/importer/spec/unit/unp_spec.rb \
services/importer/spec/unit/url_translator/fusion_tables_spec.rb \
services/importer/spec/unit/url_translator/github_spec.rb \
services/importer/spec/unit/url_translator/google_docs_spec.rb \
services/importer/spec/unit/url_translator/google_maps_spec.rb \
services/importer/spec/unit/url_translator/osm_spec.rb \
services/importer/spec/unit/url_translator/osm2_spec.rb \
services/importer/spec/unit/source_file_spec.rb \
services/importer/spec/unit/content_guesser_spec.rb \
services/importer/spec/unit/namedplaces_guesser_spec.rb \
services/importer/spec/unit/connector_spec.rb \
services/importer/spec/unit/connector_runner_spec.rb \
$(NULL)
WORKING_SPECS_4 = \
services/wms/spec/unit/wms_spec.rb \
services/sql-api/spec/sql_api_spec.rb \
spec/requests/admin/organizations_controller_spec.rb \
spec/requests/admin/visualizations_spec.rb \
spec/requests/carto/api/visualizations_controller_spec.rb \
spec/requests/carto/api/tables_controller_spec.rb \
spec/queries/carto/visualization_query_builder_spec.rb \
spec/requests/admin/tables_spec.rb \
spec/requests/admin/pages_controller_spec.rb \
spec/requests/carto/api/organizations_controller_spec.rb \
spec/requests/carto/api/organization_users_controller_spec.rb \
spec/requests/carto/api/multifactor_authentication_controller_spec.rb \
spec/requests/api/imports_spec.rb \
spec/requests/api/json/imports_controller_spec.rb \
spec/requests/carto/api/imports_controller_spec.rb \
spec/connectors/importer_spec.rb \
spec/connectors/importer_overviews_spec.rb \
spec/requests/carto/api/connectors_controller_spec.rb \
spec/requests/api/geocodings_spec.rb \
$(NULL)
WORKING_SPECS_5 = \
spec/requests/api/assets_spec.rb \
spec/requests/carto/api/assets_controller_spec.rb \
spec/requests/carto/api/layers_controller_spec.rb \
spec/requests/carto/api/records_controller_spec.rb \
spec/requests/carto/api/columns_controller_spec.rb \
spec/requests/api/synchronizations_spec.rb \
spec/requests/api/json/synchronizations_controller_spec.rb \
spec/requests/carto/api/synchronizations_controller_spec.rb \
services/geocoder/spec/geocoder_spec.rb \
services/table-geocoder/spec/table_geocoder_spec.rb \
services/table-geocoder/spec/internal-geocoder/input_type_resolver_spec.rb \
services/table-geocoder/spec/internal-geocoder/query_generator_factory_spec.rb \
services/table-geocoder/spec/lib/gme/table_geocoder_spec.rb \
spec/models/synchronization/member_spec.rb \
spec/models/synchronization/member_overviews_spec.rb \
spec/models/synchronization/collection_spec.rb \
spec/models/organization_spec.rb \
spec/models/user_organization_spec.rb \
spec/models/synchronization/synchronization_oauth_spec.rb \
spec/models/permission_spec.rb \
spec/models/carto/permission_spec.rb \
spec/lib/carto/ghost_tables_manager_spec.rb \
spec/lib/carto/bolt_spec.rb \
spec/lib/carto/valid_table_name_proposer_spec.rb \
spec/lib/carto/db/sanitize_spec.rb \
spec/lib/carto/db/user_schema_spec.rb \
spec/lib/carto/db/sql_interface_spec.rb \
spec/lib/carto/file_system/sanitize_spec.rb \
$(NULL)
# TODO: This block also breaks if run alongside other specs, needs checking why
WORKING_SPECS_7 = \
spec/requests/api/json/geocodings_controller_spec.rb \
spec/requests/carto/api/geocodings_controller_spec.rb \
$(NULL)
WORKING_SPECS_9 = \
services/twitter-search/spec/unit/json_to_csv_converter_spec.rb \
services/twitter-search/spec/unit/search_api_spec.rb \
services/datasources/spec/acceptance/datasources_factory_spec.rb \
services/datasources/spec/acceptance/dropbox_spec.rb \
services/datasources/spec/acceptance/gdrive_spec.rb \
services/datasources/spec/acceptance/public_url_spec.rb \
services/datasources/spec/integration/csv_file_dumper_spec.rb \
services/datasources/spec/integration/twitter_spec.rb \
services/datasources/spec/unit/arcgis_spec.rb \
services/datasources/spec/unit/dropbox_spec.rb \
services/datasources/spec/unit/box_spec.rb \
services/datasources/spec/unit/gdrive_spec.rb \
services/datasources/spec/unit/twitter_spec.rb \
services/importer/spec/regression/query_batcher_spec.rb \
services/platform-limits/spec/unit/input_file_size_spec.rb \
spec/models/platform-limits/user_concurrent_imports_amount_spec.rb \
spec/models/platform-limits/user_concurrent_syncs_amount_spec.rb \
spec/lib/initializers/carto_db_spec.rb \
spec/requests/carto/api/oembed_controller_spec.rb \
spec/models/asset_spec.rb \
spec/models/access_token_spec.rb \
spec/requests/carto/api/permissions_controller_spec.rb \
spec/models/shared_entity_spec.rb \
spec/models/carto/shared_entity_spec.rb \
spec/requests/signup_controller_spec.rb \
spec/requests/account_tokens_controller_spec.rb \
spec/requests/password_change_controller_spec.rb \
spec/requests/superadmin/users_spec.rb \
spec/requests/superadmin/organizations_spec.rb \
spec/requests/superadmin/feature_flag_spec.rb \
spec/requests/superadmin/oauth_apps_spec.rb \
spec/requests/superadmin/platform_controller_spec.rb \
spec/requests/superadmin/account_types_spec.rb \
spec/requests/api/visualizations_spec.rb \
spec/requests/carto/api/overlays_controller_spec.rb \
spec/models/carto/user_creation_spec.rb \
spec/requests/carto/api/invitations_controller_spec.rb \
spec/requests/user_state_spec.rb \
spec/models/carto/invitation_spec.rb \
spec/models/carto/user_service_spec.rb \
spec/models/carto/user_spec.rb \
spec/models/carto/helpers/billing_cycle_spec.rb \
spec/models/carto/user_table_spec.rb \
spec/models/carto/organization_spec.rb \
spec/models/carto/visualization_export_spec.rb \
services/table-geocoder/spec/lib/abstract_table_geocoder_spec.rb \
services/geocoder/spec/hires_batch_geocoder_spec.rb \
services/geocoder/spec/hires_geocoder_spec.rb \
services/geocoder/spec/hires_geocoder_factory_spec.rb \
services/table-geocoder/spec/geocoder_cache_spec.rb \
services/user-mover/spec/user_mover_spec.rb \
$(NULL)
# Tests using spec_helper_min instead of spec_helper
SPEC_HELPER_MIN_SPECS = \
spec/models/carto/account_type_spec.rb \
spec/models/carto/analysis_spec.rb \
spec/models/carto/analysis_node_spec.rb \
spec/models/carto/api_key_spec.rb \
spec/models/carto/layer_spec.rb \
spec/models/carto/mobile_app_presenter_spec.rb \
spec/models/carto/notification_spec.rb \
spec/models/carto/oauth_access_token_spec.rb \
spec/models/carto/oauth_app_spec.rb \
spec/models/carto/oauth_app_user_spec.rb \
spec/models/carto/oauth_app_organization_spec.rb \
spec/models/carto/oauth_authorization_code_spec.rb \
spec/models/carto/oauth_refresh_token_spec.rb \
spec/models/carto/overlay_spec.rb \
spec/models/carto/rate_limit_spec.rb \
spec/models/carto/received_notification_spec.rb \
spec/models/carto/user_db_service_spec.rb \
spec/models/carto/user_multifactor_auth_spec.rb \
spec/models/table_registrar_spec.rb \
spec/models/carto/user_migration_import_spec.rb \
spec/requests/admin/organization_users_controller_spec.rb \
spec/requests/carto/admin/mobile_apps_controller_spec.rb \
spec/requests/carto/builder/datasets_controller_spec.rb \
spec/requests/carto/api/analyses_controller_spec.rb \
spec/requests/carto/api/maps_controller_spec.rb \
spec/requests/carto/api/static_notifications_controller_spec.rb \
spec/requests/carto/api/visualization_exports_controller_spec.rb \
spec/requests/carto/api/users_controller_spec.rb \
spec/requests/carto/api/table_presenter_spec.rb \
spec/requests/carto/api/vizjson3_presenter_spec.rb \
spec/requests/carto/api/public/users_controller_spec.rb \
spec/requests/carto/oauth_provider_controller_spec.rb \
spec/requests/carto/superadmin/organizations_controller_spec.rb \
spec/requests/carto/superadmin/users_controller_spec.rb \
spec/requests/carto/superadmin/user_migration_imports_spec.rb \
spec/requests/carto/superadmin/user_migration_exports_spec.rb \
spec/requests/carto/saml_controller_spec.rb \
spec/services/carto/user_table_index_service_spec.rb \
spec/services/carto/user_metadata_export_service_spec.rb \
spec/services/carto/organization_metadata_export_service_spec.rb \
spec/services/carto/redis_export_service_spec.rb \
spec/lib/carto/password_validator_spec.rb \
spec/lib/initializers/zz_patch_reconnect_spec.rb \
spec/lib/cartodb/redis_vizjson_cache_spec.rb \
spec/lib/carto/named_maps/template_spec.rb \
services/dataservices-metrics/spec/unit/service_usage_metrics_spec.rb \
spec/models/carto/mapcap_spec.rb \
spec/requests/carto/api/api_keys_controller_spec.rb \
spec/requests/carto/api/mapcaps_controller_spec.rb \
spec/requests/carto/api/states_controller_spec.rb \
spec/requests/carto/api/metrics_controller_spec.rb \
spec/requests/carto/api/organization_notifications_controller_spec.rb \
spec/requests/carto/api/received_notifications_controller_spec.rb \
spec/requests/carto/api/multifactor_auths_controller_spec.rb \
spec/lib/carto/tracking/events_spec.rb \
spec/lib/carto/definition_spec.rb \
spec/lib/carto/styles/cartography_spec.rb \
spec/lib/carto/styles/point_spec.rb \
spec/lib/carto/styles/polygon_spec.rb \
spec/lib/carto/styles/line_spec.rb \
spec/lib/carto/styles/geometry_spec.rb \
spec/lib/carto/styles/presenters/cartocss_spec.rb \
spec/lib/carto/forms_definition_spec.rb \
spec/lib/carto/form_spec.rb \
spec/lib/carto/oauth_provider/scopes/scopes_spec.rb \
spec/models/carto/legend_spec.rb \
spec/requests/carto/api/legends_controller_spec.rb \
spec/lib/carto/legend_definition_validator_spec.rb \
spec/lib/carto/legend_migrator_spec.rb \
spec/lib/carto/mapcapped_visualization_updater_spec.rb \
spec/requests/carto/api/snapshots_controller_specs.rb \
spec/models/carto/snapshot_spec.rb \
spec/helpers/application_helper_spec.rb \
spec/lib/cartodb/common_data_redis_cache_spec.rb \
spec/helpers/carto/html_safe_spec.rb \
spec/models/carto/asset_spec.rb \
spec/requests/carto/api/organization_assets_controller_spec.rb \
spec/lib/carto/assets/image_assets_service_spec.rb \
spec/lib/carto/assets/organization_image_assets_service_spec.rb \
spec/lib/carto/assets/kuviz_assets_service_spec.rb \
spec/lib/carto/storage_options/local_spec.rb \
spec/lib/carto/visualization_invalidation_service_spec.rb \
spec/lib/tasks/layers_rake_spec.rb \
spec/lib/tasks/fix_unique_legends_spec.rb \
spec/lib/tasks/oauth_rake_spec.rb \
spec/lib/tasks/user_rake_spec.rb \
spec/lib/tasks/user_database_host_update_rake_spec.rb \
spec/models/carto/username_proposer_spec.rb \
spec/services/carto/overquota_users_service_spec.rb \
spec/services/visualization/common_data_service_spec.rb \
spec/lib/carto/google_maps_api_spec.rb \
spec/lib/tasks/fix_unique_overlays_spec.rb \
spec/requests/password_resets_spec.rb \
spec/requests/password_resets_controller_spec.rb \
spec/models/carto/feature_flag_spec.rb \
spec/mailers/user_mailer_spec.rb \
spec/services/carto/user_multifactor_auth_update_service_spec.rb \
spec/gears/carto_gears_api/users_service_spec.rb \
spec/queries/carto/visualization_query_searcher_spec.rb \
spec/queries/carto/visualization_query_orderer_spec.rb \
spec/queries/carto/tag_query_builder_spec.rb \
spec/requests/carto/api/tags_controller_spec.rb \
spec/lib/carto/oauth/google/api_spec.rb \
spec/queries/carto/dashboard_preview_searcher_spec.rb \
spec/requests/carto/api/search_preview_controller_spec.rb \
spec/requests/carto/api/public/oauth_apps_controller_spec.rb \
spec/requests/carto/api/public/datasets_controller_spec.rb \
spec/models/carto/user_migration_spec.rb \
spec/requests/carto/api/public/data_observatory_controller_spec.rb \
spec/lib/tasks/data_observatory_rake_spec.rb \
spec/services/carto/do_licensing_service_spec.rb \
$(NULL)
# This class must be tested isolated as pollutes namespace
WORKING_SPECS_carto_db_class = \
spec/helpers/carto_db_spec.rb \
$(NULL)
CDB_PATH=lib/assets/javascripts/cdb
prepare-test-db:
# Else coverage reports add up and hits/line metric is invalid
rm -rf coverage
ifdef JENKINS_URL
cp .rspec_ci .rspec
endif
# TODO skip this if db already exists ?
# Clean DB connections before drop test DB
psql -U postgres -c "select pg_terminate_backend(pid) from pg_stat_activity where datname='carto_db_test'"
MOCHA_OPTIONS=skip_integration RAILS_ENV=test bundle exec rake cartodb:test:prepare --trace
# TODO: Ongoing removal of groups, that's the reason of holes in numbering
check-1:
CHECK_SPEC=1 RAILS_ENV=test bundle exec rspec --require ./spec/rspec_configuration.rb $(WORKING_SPECS_1)
check-2:
CHECK_SPEC=2 RAILS_ENV=test bundle exec rspec --require ./spec/rspec_configuration.rb $(WORKING_SPECS_2)
check-4:
CHECK_SPEC=4 RAILS_ENV=test bundle exec rspec --require ./spec/rspec_configuration.rb $(WORKING_SPECS_4)
check-5:
CHECK_SPEC=5 RAILS_ENV=test bundle exec rspec --require ./spec/rspec_configuration.rb $(WORKING_SPECS_5)
check-7:
CHECK_SPEC=7 RAILS_ENV=test bundle exec rspec --require ./spec/rspec_configuration.rb $(WORKING_SPECS_7)
check-9:
CHECK_SPEC=9 RAILS_ENV=test bundle exec rspec --require ./spec/rspec_configuration.rb $(WORKING_SPECS_9)
check-spec-helper-min:
CHECK_SPEC=50 RAILS_ENV=test bundle exec rspec $(SPEC_HELPER_MIN_SPECS)
check-carto-db-class:
CHECK_SPEC=51 RAILS_ENV=test bundle exec rspec $(WORKING_SPECS_carto_db_class)
check-gear/%: %
cd $< && bundle install && RAILS_ENV=test bundle exec rspec
check-gears: $(addprefix check-gear/, $(wildcard gears/*))
check-external: prepare-test-db
check-prepared: check-1 check-2 check-4 check-5 check-7 check-9 check-spec-helper-min check-carto-db-class
check: prepare-test-db check-prepared check-gears
check-frontend:
npm run test
# update cartodb.js submodule files
update_cdb:
cd $(CDB_PATH); npm install
cd $(CDB_PATH); make cartodb dist/cartodb.css
cp $(CDB_PATH)/dist/cartodb.full.uncompressed.js vendor/assets/javascripts/cartodb.uncompressed.js
cp $(CDB_PATH)/dist/cartodb.mod.torque.uncompressed.js vendor/assets/javascripts
cp $(CDB_PATH)/dist/cartodb.css vendor/assets/stylesheets/cartodb.css
cartodbui:
curl http://libs.cartocdn.com/cartodbui/manifest_$(REV).yml > public/assets/manifest.yml
.PHONY: develop_cdb cartodbui

3935
NEWS.md Normal file

File diff suppressed because it is too large Load Diff

5
Procfile Normal file
View File

@ -0,0 +1,5 @@
web: bundle exec rails server -p $PORT
sql: node ../CartoDB-SQL-API/app.js development
tiler: node ../Windshaft-cartodb/app.js development
redis: redis-server
resque: script/resque

63
README.md Normal file
View File

@ -0,0 +1,63 @@
# What is CARTO?
[![Code Climate](https://codeclimate.com/github/CartoDB/cartodb20.png)](https://codeclimate.com/github/CartoDB/cartodb20)
[![Build Status](http://travis-ci.org/CartoDB/cartodb.png?branch=master)](http://travis-ci.org/CartoDB/cartodb)
CARTO is an open, powerful, and intuitive platform for discovering and predicting the key insights underlying the location data in our world.
Empower organizations to optimize operational performance, strategic investments, and everyday decisions with CARTO Engine—our embeddable platform for web and mobile apps—and the new CARTO Builder, a drag and drop analysis tool.
It was built to make it easier for people to tell their stories by
providing them with flexible and intuitive ways to create maps and design
geospatial applications. CARTO can be installed on your own server
and we also offer a hosted service at [carto.com](https://carto.com).
If you would like to see some live demos, check out our
[videos](http://www.vimeo.com/channels/carto) on Vimeo.
We hope you like it!
![Map view](http://cartodb.s3.amazonaws.com/github/map.png)
![Data View](http://cartodb.s3.amazonaws.com/github/dataset.png)
## What can I do with CARTO?
With CARTO, you can upload your geospatial data (Shapefiles, GeoJSON,
etc) using a web form and then make it public or private.
After it is uploaded, you can visualize it in a dataset or on a map, search
it using SQL, and apply map styles using CartoCSS. You can even access it
using the CARTO [APIs](https://docs.carto.com/#cartodb-platform), or export it
to a file.
In other words, with CARTO you can make awesome maps and build
powerful geospatial applications! Definitely check out the [CARTO
Platform](https://carto.com/platform) for interactive examples
and code.
## Installing
Read the [installation guide in CARTO developers documentation](http://cartodb.readthedocs.org/en/latest/install.html)
## How do I upgrade CARTO?
See [UPGRADE](UPGRADE) for instructions about upgrading CARTO.
For upgrade of Windshaft-CartoDB and CartoDB-SQL-API see the relative
documentation.
## Developing & Contributing to CARTO
See [our contributing doc](CONTRIBUTING.md) for how you can improve CARTO, but you will need to sign a Contributor License Agreement (CLA) before making a submission, [learn more here](https://carto.com/contributions).
## Testing
Check the [testing doc](TESTING.md) section.
## Requirements
CARTO works in any modern browser, but if you want more info:
![Chrome](https://cdnjs.cloudflare.com/ajax/libs/browser-logos/39.3.0/archive/chrome_12-48/chrome_12-48_48x48.png) | ![Firefox](https://cdnjs.cloudflare.com/ajax/libs/browser-logos/39.3.0/archive/firefox_1.5-3/firefox_1.5-3_48x48.png) | ![IE](https://cdnjs.cloudflare.com/ajax/libs/browser-logos/39.3.0/edge-tile/edge-tile_48x48.png) | ![Opera](https://cdnjs.cloudflare.com/ajax/libs/browser-logos/39.3.0/opera/opera_48x48.png) | ![Safari](https://cdnjs.cloudflare.com/ajax/libs/browser-logos/39.3.0/safari/safari_48x48.png)
--- | --- | --- | --- | --- |
31+ ✔ | 38+ ✔ | 11+ ✔ | 31+ ✔ | 8+ ✔ |

40
Rakefile Normal file
View File

@ -0,0 +1,40 @@
# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
require File.expand_path('../config/application', __FILE__)
require 'rake/dsl_definition'
require 'rake'
require 'resque/tasks'
require 'active_support/dependencies'
# Do not load rake tasks when running resque: https://github.com/CartoDB/cartodb/issues/11046
if Rake.application.top_level_tasks.reject { |t| ['environment', 'resque:work'].include?(t) }.empty?
CartoDB::Application.paths['lib/tasks'] = []
load 'lib/tasks/resque.rake'
end
CartoDB::Application.load_tasks
rake_tasks = Rake.application.instance_variable_get('@tasks')
rake_tasks.delete('default')
# Remove ActiveRecord tasks and replace with Sequel versions
rake_tasks.select { |k, _| k.starts_with?('sequel') }.each { |k, v| rake_tasks[k.sub('sequel:', 'db:')] = v }
rake_tasks.select { |k, _| k.starts_with?('cartodb:db') }.each { |k, v| rake_tasks[k.sub('cartodb:db:', 'db:')] = v }
if Rails.env.test?
namespace :spec do
desc "Run the code examples in spec/lib"
RSpec::Core::RakeTask.new(:cartodb_lib) do |t|
t.pattern = "spec/lib/**/*_spec.rb"
end
desc "Run the code examples in spec/acceptance/api"
RSpec::Core::RakeTask.new(:cartodb_api) do |t|
t.pattern = "spec/acceptance/api/*_spec.rb"
end
end
end
task :default => ["spec:models", "spec:cartodb_lib", "spec:acceptance"]
task "resque:setup" => :environment

54
TESTING.md Normal file
View File

@ -0,0 +1,54 @@
Testing CartoDB
===============
Easy way
--------
Just run "make check".
Detailed way
------------
CartoDB tests are based on [Ruby Spec](http://rspec.info/).
The procedure to run them is as follows:
# Prepare test database
bundle exec rake cartodb:test:prepare
# Run all specs
bundle exec rspec
If you want to run specific tests, rather than all of them, you
can specify them on the `rspec` command line, like:
bundle exec rspec spec/lib/sql_test_spec.rb
To avoid wasting time and resources creating once and again test users,
if you require 'spec_helper' you have two "global test users" for the whole suite to use,
$user_1 and $user_2. Just take care to not destroy or leave them in inconsistent state between test batteries.
You can also use the following `runParallelTests.sh` script to run the tests in a multithreaded way.
Run `script/ci/runParallelTests.sh X` where X is a number of threads to use.
Troubleshooting
---------------
Common system configuration issues are reported in this section.
- "No such user: test_cartodb_user_###"
Make sure test.port in config/database.yml is not pointing to
pg_bouncer, as dynamically created database roles aren't easily
supported by it (you'd need to explicitly list allowed usernames,
and over 70 new users are created during a full testsuite run).
Speeding up test runs (NOTE: Untested since a long time, might not work)
------------------------------------------------------------------------
CartoDB is a large app.
We recommend you use the [spin gem](https://github.com/jstorimer/spin/)
to load the main application into memory while you are testing.
TODO: document how

61
UPGRADE Normal file
View File

@ -0,0 +1,61 @@
Standard migration (default)
----------------------------
Unless stated otherwise, assume any new CARTO release requires calling these commands:
$ bundle exec rake db:migrate
NOTES:
- Redis server must be listening on the configured port (see config/app_config.yml) for some of the steps below to work
- Rails must be restarted after an upgrade
Extension migration
-------------------
Most CARTO releases need an updated cartodb-postgresql extension. After installing it, it must be upgraded in all existing databases:
$ bundle exec rake cartodb:db:upgrade_postgres_extension
Specific version notes
======================
3.1.0 onwards
-------------
Upgrade notes are now kept in NEWS.md. Check the NOTICE section of the release you are upgrading to.
3.0.0 -> 3.1.0
--------------
* Run rake task:
bundle exec rake cartodb:overlays:create_overlays
if the task is run more than one time (because something happened) a flag to remove previous overlays should be pass
bundle exec rake cartodb:overlays:create_overlays[true]
this will remove all the overlays for visualizations so it MUST NOT be called after visualization overlays has been customized
2.x -> 3.0.0
------------
* Install CartoDB extension version 0.3.x
* Run rake tasks:
- bundle exec rake cartodb:db:create_default_vis_permissions
- bundle exec rake cartodb:db:populate_permission_entity_id
Mandatory migration
-------------------
Versions marked at the NEWS.md as requiring this migration must:
- ensure the required version of cartodb-postgresql extension
(see README.md) is installed on the user database hosts
- run all this commands:
$ bundle exec rake db:migrate
$ bundle exec rake cartodb:db:reset_trigger_check_quota
$ bundle exec rake cartodb:db:load_functions
$ bundle exec rake cartodb:db:create_schemas

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,346 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata></metadata>
<defs>
<font id="helveticabold" horiz-adv-x="1139" >
<font-face units-per-em="2048" ascent="1638" descent="-410" />
<missing-glyph horiz-adv-x="569" />
<glyph unicode="&#xfb01;" horiz-adv-x="1251" d="M28 879v201h156v70q0 174 77 259q69 80 281 80q26 0 53 -2t56 -4v-232q-20 1 -39 1.5t-46 0.5q-67 0 -82 -37t-13 -116v-20h187v-201h-187v-879h-284v879h-159zM827 0v1085h284v-1085h-284zM827 1223v260h279v-260h-279z" />
<glyph unicode="&#xfb02;" horiz-adv-x="1251" d="M28 879v201h156v70q0 174 77 259q69 80 281 80q26 0 53 -2t56 -4v-232q-20 1 -39 1.5t-46 0.5q-67 0 -82 -37t-13 -116v-20h187v-201h-187v-879h-284v879h-159zM827 0v1474h284v-1474h-284z" />
<glyph horiz-adv-x="0" />
<glyph horiz-adv-x="0" />
<glyph horiz-adv-x="0" />
<glyph unicode="&#x9;" horiz-adv-x="569" />
<glyph unicode="&#xd;" horiz-adv-x="569" />
<glyph unicode="&#xa;" horiz-adv-x="569" />
<glyph unicode=" " horiz-adv-x="569" />
<glyph unicode="&#x09;" horiz-adv-x="569" />
<glyph unicode="&#xa0;" horiz-adv-x="569" />
<glyph unicode="!" horiz-adv-x="682" d="M225 1095v374h313v-374l-81 -688h-149zM232 0v289h298v-289h-298z" />
<glyph unicode="&#x22;" horiz-adv-x="971" d="M167 1474h273l-48 -609h-180zM546 1474h273l-47 -609h-180z" />
<glyph unicode="#" d="M0 400l45 168h203l79 292h-204l45 168h204l109 403h199l-109 -403h166l106 403h199l-106 -403h201l-45 -168h-201l-81 -292h204l-45 -168h-204l-107 -400h-199l107 400h-164l-109 -400h-199l109 400h-203zM448 568h163l81 292h-166z" />
<glyph unicode="$" d="M59 440h270q14 -126 39 -169q39 -67 153 -87v427l-81 24q-191 56 -269.5 156t-78.5 241q0 93 30.5 169t85.5 131q71 71 158 98q53 17 155 25v133h95v-135q163 -13 256 -80q169 -107 175 -347h-263q-8 89 -30 130q-38 71 -138 78v-381q238 -82 320 -145q135 -105 135 -296 q0 -252 -185 -366q-113 -70 -268 -82v-201h-97v199q-197 22 -294 86q-171 115 -168 392zM350 1064q0 -84 63 -133q35 -27 108 -50v351q-87 -2 -129 -46.5t-42 -121.5zM616 187q79 10 115 36q63 46 63 159q0 86 -59 136q-35 29 -119 60v-391z" />
<glyph unicode="%" horiz-adv-x="1821" d="M47 1071q0 154 109 263t263 109t263 -109t109 -263t-108.5 -263t-263.5 -109q-154 0 -263 109t-109 263zM260 1071q0 -66 46.5 -112.5t112.5 -46.5t112.5 46.5t46.5 112.5t-46.5 112.5t-112.5 46.5t-112.5 -46.5t-46.5 -112.5zM421 -38l811 1488h152l-808 -1488h-155z M1019 343q0 155 109 263.5t263 108.5t263 -109t109 -263t-109 -263t-263 -109t-263 109t-109 263zM1232 343q0 -66 46.5 -112.5t112.5 -46.5t112.5 46.5t46.5 112.5t-46.5 112.5t-112.5 46.5t-112.5 -46.5t-46.5 -112.5z" />
<glyph unicode="&#x26;" horiz-adv-x="1479" d="M111 389q0 133 66 228t216 188l31 19q-64 72 -99 147t-35 156q0 161 108 251.5t280 90.5q157 0 259.5 -92.5t102.5 -236.5q0 -130 -61.5 -211t-180.5 -150l209 -258q36 52 55.5 113t20.5 129h253q-6 -134 -64 -271q-32 -77 -104 -170l268 -322h-346l-102 125 q-74 -69 -138 -102q-114 -59 -263 -59q-224 0 -350 132t-126 293zM395 398q0 -73 59.5 -134t152.5 -61q70 0 132.5 32.5t101.5 72.5l-270 334q-107 -71 -141.5 -125t-34.5 -119zM552 1137q0 -40 28 -84q18 -29 78 -103q60 42 86 71q50 54 50 117q0 46 -30 82t-91 36 q-38 0 -71 -21q-50 -31 -50 -98z" />
<glyph unicode="'" horiz-adv-x="487" d="M99 1474h273l-50 -609h-173z" />
<glyph unicode="(" horiz-adv-x="682" d="M89 558q0 274 117 544q79 184 231 396h215l-61 -112q-126 -231 -175 -484q-32 -166 -32 -362q0 -306 89 -563q52 -152 184 -390h-211l-71 97q-69 88 -147 262q-139 311 -139 612z" />
<glyph unicode=")" horiz-adv-x="682" d="M21 -413q132 238 184 390q89 257 89 563q0 196 -32 362q-49 253 -175 484l-61 112h215q152 -212 231 -396q117 -270 117 -544q0 -301 -139 -612q-78 -174 -147 -262l-71 -97h-211z" />
<glyph unicode="*" horiz-adv-x="797" d="M47 1161l47 149l209 -68v241h173v-241l209 68l47 -149l-213 -66l139 -199l-128 -91l-139 188l-143 -188l-128 91l140 199z" />
<glyph unicode="+" horiz-adv-x="1196" d="M73 412v261h410v410h263v-410h410v-261h-410v-412h-263v412h-410z" />
<glyph unicode="," horiz-adv-x="569" d="M118 0v298h308v-258q0 -68 -18 -142t-67 -128q-53 -58 -124.5 -87.5t-98.5 -29.5v110q86 24 126.5 80t46.5 157h-173z" />
<glyph unicode="-" horiz-adv-x="682" d="M47 436v270h574v-270h-574z" />
<glyph unicode="." horiz-adv-x="569" d="M128 0v298h303v-298h-303z" />
<glyph unicode="/" horiz-adv-x="569" d="M-112 0l571 1519h237l-573 -1519h-235z" />
<glyph unicode="0" d="M64 711q0 359 111.5 554t388.5 195t388.5 -195t111.5 -554t-111.5 -553t-388.5 -194t-388.5 194t-111.5 553zM355 711q0 -250 41 -382.5t168 -132.5t166.5 132.5t39.5 382.5q0 262 -39.5 388t-166.5 126t-168 -126t-41 -388z" />
<glyph unicode="1" d="M142 1000v194q135 6 189 18q86 19 140 76q37 39 56 104q11 39 11 58h237v-1450h-292v1000h-341z" />
<glyph unicode="2" d="M64 0q4 156 67 285q61 145 288 307q197 141 255 202q89 95 89 208q0 92 -51 153t-146 61q-130 0 -177 -97q-27 -56 -32 -178h-277q7 185 67 299q114 217 405 217q230 0 366 -127.5t136 -337.5q0 -161 -96 -286q-63 -83 -207 -185l-114 -81q-107 -76 -146.5 -110 t-66.5 -79h633v-251h-993z" />
<glyph unicode="3" d="M54 445h280q0 -87 28 -144q52 -105 189 -105q84 0 146.5 57.5t62.5 165.5q0 143 -116 191q-66 27 -208 27v204q139 2 194 27q95 42 95 170q0 83 -48.5 135t-136.5 52q-101 0 -148.5 -64t-45.5 -171h-266q4 108 37 205q35 85 110 157q56 51 133 78t189 27 q208 0 335.5 -107.5t127.5 -288.5q0 -128 -76 -216q-48 -55 -100 -75q39 0 112 -67q109 -101 109 -276q0 -184 -127.5 -323.5t-377.5 -139.5q-308 0 -428 201q-63 107 -70 280z" />
<glyph unicode="4" d="M54 312v249l533 880h320v-906h164v-223h-164v-312h-279v312h-574zM265 535h363v626z" />
<glyph unicode="5" d="M54 388h284q17 -93 65 -143.5t140 -50.5q106 0 161.5 74.5t55.5 187.5q0 111 -52 187.5t-162 76.5q-52 0 -90 -13q-67 -24 -101 -89l-256 12l102 801h799v-242h-593l-52 -317q66 43 103 57q62 23 151 23q180 0 314 -121t134 -352q0 -201 -129 -359t-386 -158 q-207 0 -340 111t-148 315z" />
<glyph unicode="6" d="M64 653q0 166 14 270q25 185 97 308q62 105 162.5 169t240.5 64q202 0 322 -103.5t135 -275.5h-284q0 35 -27 77q-46 68 -139 68q-139 0 -198 -156q-32 -86 -44 -254q53 63 123 92t160 29q193 0 316.5 -131t123.5 -335q0 -203 -121 -358t-376 -155q-274 0 -404 229 q-101 179 -101 462zM350 459q0 -117 63 -191t160 -74q95 0 149.5 71.5t54.5 185.5q0 127 -62 194.5t-152 67.5q-73 0 -129 -44q-84 -65 -84 -210z" />
<glyph unicode="7" d="M52 1175l4 256h1024v-223q-64 -63 -178 -224.5t-191 -333.5q-61 -135 -110 -330t-49 -320h-296q13 390 256 811q157 261 263 364h-723z" />
<glyph unicode="8" d="M54 402q0 122 55.5 221t162.5 149q-105 70 -136.5 151.5t-31.5 152.5q0 158 119 269.5t336 111.5t336 -111.5t119 -269.5q0 -71 -31.5 -152.5t-136.5 -141.5q107 -60 161 -159t54 -221q0 -183 -135.5 -311.5t-378.5 -128.5t-368 128.5t-125 311.5zM350 421 q0 -107 55.5 -166t153.5 -59t153.5 59t55.5 166q0 111 -56.5 168.5t-152.5 57.5t-152.5 -57.5t-56.5 -168.5zM376 1044q0 -79 48.5 -129t134.5 -50q87 0 134.5 50t47.5 129q0 86 -47.5 134.5t-134.5 48.5q-86 0 -134.5 -48.5t-48.5 -134.5z" />
<glyph unicode="9" d="M61 940q0 233 134.5 377.5t349.5 144.5q331 0 454 -293q70 -166 70 -437q0 -263 -67 -439q-128 -335 -470 -335q-163 0 -293 96.5t-149 281.5h284q10 -64 54 -104t117 -40q141 0 198 156q31 86 39 251q-39 -49 -83 -75q-80 -48 -197 -48q-173 0 -307 119.5t-134 344.5z M350 966q0 -129 52.5 -193.5t161.5 -64.5q59 0 111 34q97 62 97 215q0 123 -57.5 195t-157.5 72q-73 0 -125 -41q-82 -64 -82 -217z" />
<glyph unicode=":" horiz-adv-x="682" d="M232 0v298h303v-298h-303zM232 749v298h303v-298h-303z" />
<glyph unicode=";" horiz-adv-x="682" d="M232 0v298h308v-258q0 -69 -18 -142.5t-67 -127.5q-51 -57 -123 -87t-100 -30v110q101 29 141 103q25 46 32 134h-173zM232 749v298h303v-298h-303z" />
<glyph unicode="&#x3c;" horiz-adv-x="1196" d="M23 414v256l1178 448v-279l-841 -297l841 -298v-278z" />
<glyph unicode="=" horiz-adv-x="1196" d="M73 177v263h1083v-263h-1083zM73 644v263h1083v-263h-1083z" />
<glyph unicode="&#x3e;" horiz-adv-x="1196" d="M23 -34v278l842 298l-842 297v279l1178 -450v-254z" />
<glyph unicode="?" horiz-adv-x="1251" d="M123 1009q12 285 199 404q118 76 290 76q226 0 375.5 -108t149.5 -320q0 -130 -65 -219q-38 -54 -146 -138l-71 -55q-58 -45 -77 -105q-12 -38 -13 -118h-270q6 169 32 233.5t134 148.5l73 57q36 27 58 59q40 55 40 121q0 76 -44.5 138.5t-162.5 62.5q-116 0 -164.5 -77 t-48.5 -160h-289zM488 0v289h298v-289h-298z" />
<glyph unicode="@" horiz-adv-x="1997" d="M199 724q0 328 236 556q248 241 635 241q315 0 522 -165q218 -174 218 -462q0 -227 -138 -389.5t-315 -162.5q-92 0 -141.5 52t-49.5 107q0 7 0.5 15.5t1.5 18.5q-38 -72 -85 -115q-85 -77 -204 -77q-121 0 -201.5 87t-80.5 243q0 181 123 339t302 158q105 0 163 -58 q44 -45 59 -103l36 126h189l-128 -434q-15 -53 -21.5 -78.5t-6.5 -44.5q0 -30 20 -56.5t64 -26.5q86 0 172.5 112.5t86.5 298.5q0 275 -236 395q-148 76 -333 76q-340 0 -546 -208q-186 -188 -186 -451q0 -292 218 -463q193 -151 471 -151q190 0 355 70q90 37 186 105l24 17 l73 -112q-142 -110 -307.5 -167.5t-343.5 -57.5q-415 0 -643 258q-189 214 -189 507zM815 653q0 -73 33.5 -118t94.5 -45q107 0 175.5 162.5t68.5 255.5q0 53 -32 89t-86 36q-104 0 -179 -129.5t-75 -250.5z" />
<glyph unicode="A" horiz-adv-x="1479" d="M52 0l526 1474h348l522 -1474h-334l-95 303h-543l-102 -303h-322zM559 557h374l-184 580zM750 1474z" />
<glyph unicode="B" horiz-adv-x="1479" d="M161 0v1474h716q271 -4 384 -157q68 -94 68 -225q0 -135 -68 -217q-38 -46 -112 -84q113 -41 170.5 -130t57.5 -216q0 -131 -66 -235q-42 -69 -105 -116q-71 -54 -167.5 -74t-209.5 -20h-668zM455 256h362q97 0 151 26q98 48 98 184q0 115 -95 158q-53 24 -149 25h-367 v-393zM455 893h362q97 0 157.5 36.5t60.5 129.5q0 103 -80 136q-69 23 -176 23h-324v-325z" />
<glyph unicode="C" horiz-adv-x="1479" d="M92 725q0 386 207 595q180 182 458 182q372 0 544 -244q95 -137 102 -275h-308q-30 106 -77 160q-84 96 -249 96q-168 0 -265 -135.5t-97 -383.5t102.5 -371.5t260.5 -123.5q162 0 247 106q47 57 78 171h305q-40 -241 -204.5 -392t-421.5 -151q-318 0 -500 204 q-182 205 -182 562zM748 1519z" />
<glyph unicode="D" horiz-adv-x="1479" d="M156 0v1474h635q137 -2 228 -32q155 -51 251 -187q77 -110 105 -238t28 -244q0 -294 -118 -498q-160 -275 -494 -275h-635zM455 256h284q218 0 304 215q47 118 47 281q0 225 -70.5 345.5t-280.5 120.5h-284v-962z" />
<glyph unicode="E" horiz-adv-x="1366" d="M165 0v1474h1081v-261h-780v-313h716v-256h-716v-379h816v-265h-1117z" />
<glyph unicode="F" horiz-adv-x="1251" d="M156 0v1472h1045v-259h-739v-339h647v-256h-647v-618h-306z" />
<glyph unicode="G" horiz-adv-x="1593" d="M85 722q0 358 197 574t521 216q281 0 451.5 -142.5t195.5 -355.5h-303q-35 151 -171 211q-76 33 -169 33q-178 0 -292.5 -134.5t-114.5 -404.5q0 -272 124 -385t282 -113q155 0 254 89.5t122 234.5h-341v246h614v-791h-204l-31 184q-89 -105 -160 -148q-122 -75 -300 -75 q-293 0 -480 203q-195 204 -195 558zM802 1512z" />
<glyph unicode="H" horiz-adv-x="1479" d="M154 0v1474h305v-562h576v562h306v-1474h-306v658h-576v-658h-305z" />
<glyph unicode="I" horiz-adv-x="569" d="M132 0v1474h306v-1474h-306zM285 1503z" />
<glyph unicode="J" d="M45 525v34h291v-34q4 -171 37.5 -240.5t143.5 -69.5q109 0 144 76q21 45 21 152v1031h308v-1026q0 -188 -65 -298q-110 -186 -397 -186t-385 150.5t-98 410.5z" />
<glyph unicode="K" horiz-adv-x="1479" d="M161 0v1474h303v-607l569 607h398l-604 -607l635 -867h-396l-455 644l-147 -151v-493h-303z" />
<glyph unicode="L" horiz-adv-x="1251" d="M156 0v1474h308v-1209h730v-265h-1038z" />
<glyph unicode="M" horiz-adv-x="1706" d="M151 0v1474h448l268 -1159l266 1159h443v-1474h-287v997q0 43 1 120.5t1 119.5l-279 -1237h-299l-277 1237q0 -42 1 -119.5t1 -120.5v-997h-287z" />
<glyph unicode="N" horiz-adv-x="1479" d="M151 0v1474h323l587 -1029v1029h287v-1474h-308l-602 1047v-1047h-287zM761 1477z" />
<glyph unicode="O" horiz-adv-x="1593" d="M101 739q0 405 224 608q167 172 483 172t483 -172q223 -203 223 -608q0 -397 -223 -608q-167 -172 -483 -172t-483 172q-224 211 -224 608zM407 739q0 -249 109 -384t292 -135t290.5 135t107.5 384q0 248 -107.5 383.5t-290.5 135.5t-292 -135t-109 -384zM808 1519z" />
<glyph unicode="P" horiz-adv-x="1366" d="M163 0v1474h642q222 0 354 -114t132 -353q0 -261 -132 -369t-377 -108h-313v-530h-306zM469 784h287q109 0 169.5 53t60.5 168t-60.5 164t-169.5 49h-287v-434z" />
<glyph unicode="Q" horiz-adv-x="1593" d="M101 739q0 404 234 611q191 169 475 169q286 0 480 -179q224 -207 224 -579q0 -197 -48 -330q-39 -127 -115 -211l170 -159l-161 -168l-178 168q-81 -49 -140 -69q-99 -33 -237 -33q-288 0 -476 172q-228 207 -228 608zM407 739q0 -303 156 -434q101 -85 242 -85 q53 0 102 13q27 7 69 25l-149 142l159 166l149 -142q35 72 49 126q22 81 22 189q0 248 -101.5 383.5t-296.5 135.5q-183 0 -292 -130t-109 -389z" />
<glyph unicode="R" horiz-adv-x="1479" d="M163 0v1474h723q155 -3 238.5 -38t141.5 -103q48 -56 76 -124t28 -155q0 -105 -53 -206.5t-175 -143.5q102 -41 144.5 -116.5t42.5 -230.5v-99q0 -101 8 -137q12 -57 56 -84v-37h-339q-14 49 -20 79q-12 62 -13 127l-2 137q-2 141 -51.5 188t-185.5 47h-318v-578h-301z M464 822h349q104 0 156 24q92 42 92 166q0 134 -89 180q-50 26 -150 26h-358v-396z" />
<glyph unicode="S" horiz-adv-x="1366" d="M85 455h294q14 -101 55 -151q75 -91 257 -91q109 0 177 24q129 46 129 171q0 73 -64 113q-64 39 -201 69l-156 35q-230 52 -318 113q-149 102 -149 319q0 198 144 329t423 131q233 0 397.5 -123.5t172.5 -358.5h-296q-8 133 -116 189q-72 37 -179 37q-119 0 -190 -48 t-71 -134q0 -79 70 -118q45 -26 192 -61l254 -61q167 -40 252 -107q132 -104 132 -301q0 -202 -154.5 -335.5t-436.5 -133.5q-288 0 -453 131.5t-165 361.5zM678 1519z" />
<glyph unicode="T" horiz-adv-x="1251" d="M33 1213v261h1194v-261h-441v-1213h-310v1213h-443z" />
<glyph unicode="U" horiz-adv-x="1479" d="M156 568v906h313v-906q0 -152 36 -222q56 -124 244 -124q187 0 243 124q36 70 36 222v906h313v-906q0 -235 -73 -366q-136 -240 -519 -240t-520 240q-73 131 -73 366zM749 1474z" />
<glyph unicode="V" horiz-adv-x="1366" d="M47 1474h329l320 -1119l323 1119h320l-503 -1474h-291z" />
<glyph unicode="W" horiz-adv-x="1933" d="M30 1474h327l195 -844l42 -235l43 230l166 849h325l175 -844l45 -235l45 226l197 853h313l-415 -1474h-294l-178 862l-52 285l-52 -285l-178 -862h-286z" />
<glyph unicode="X" horiz-adv-x="1366" d="M33 0l474 751l-451 723h368l263 -479l270 479h356l-451 -711l479 -763h-374l-280 502l-296 -502h-358z" />
<glyph unicode="Y" horiz-adv-x="1366" d="M35 1474h363l306 -642l293 642h349l-493 -920v-554h-308v554zM691 1474z" />
<glyph unicode="Z" horiz-adv-x="1251" d="M52 0v260l761 953h-742v261h1126v-247l-771 -967h773v-260h-1147zM634 1474z" />
<glyph unicode="[" horiz-adv-x="682" d="M128 -394v1882h502v-208h-232v-1465h232v-209h-502z" />
<glyph unicode="\" horiz-adv-x="569" d="M-112 1519h235l573 -1519h-237z" />
<glyph unicode="]" horiz-adv-x="682" d="M47 -185h232v1469h-232v204h502v-1882h-502v209z" />
<glyph unicode="^" horiz-adv-x="1196" d="M139 590l368 884h225l367 -884h-251l-227 566l-230 -566h-252z" />
<glyph unicode="_" d="M0 -155h1139v-101h-1139v101z" />
<glyph unicode="`" horiz-adv-x="682" d="M-50 1536h317l192 -299h-206zM290 1119z" />
<glyph unicode="a" d="M59 290q0 201 155 291q85 49 250 70l97 12q79 10 113 25q61 26 61 81q0 67 -46.5 92.5t-136.5 25.5q-101 0 -143 -50q-30 -37 -40 -100h-275q9 143 80 235q113 144 388 144q179 0 318 -71t139 -268v-500q0 -52 2 -126q3 -56 17 -76t42 -33v-42h-310q-13 33 -18 62t-8 66 q-59 -64 -136 -109q-92 -53 -208 -53q-148 0 -244.5 84.5t-96.5 239.5zM345 311q0 -73 40.5 -105.5t98.5 -32.5q92 0 169.5 54t80.5 197v106q-27 -17 -54.5 -27.5t-75.5 -19.5l-64 -12q-90 -16 -129 -39q-66 -39 -66 -121zM576 1119z" />
<glyph unicode="b" horiz-adv-x="1251" d="M123 0v1472h284v-524q54 76 119 116q77 50 196 50q215 0 336.5 -155t121.5 -400q0 -254 -120 -421t-335 -167q-135 0 -217 54q-49 32 -106 112v-137h-279zM398 530q0 -140 62 -232t189 -92q110 0 171 89t61 234q0 116 -30 192q-57 144 -210 144q-155 0 -213 -141 q-30 -75 -30 -194z" />
<glyph unicode="c" d="M71 523q0 281 137 437t378 156q205 0 335.5 -92t154.5 -325h-292q-8 61 -41 110q-48 66 -149 66q-144 0 -197 -143q-28 -76 -28 -202q0 -120 28 -193q51 -136 192 -136q100 0 142 54t51 140h291q-10 -130 -94 -246q-134 -187 -397 -187t-387 156t-124 405zM591 1119z" />
<glyph unicode="d" horiz-adv-x="1251" d="M63 517q0 279 128.5 439t343.5 160q99 0 176 -43.5t125 -120.5v520h289v-1472h-277v151q-61 -97 -139 -141t-194 -44q-191 0 -321.5 154.5t-130.5 396.5zM357 538q0 -151 59.5 -241.5t180.5 -90.5t184 90t63 233q0 200 -101 286q-62 52 -144 52q-125 0 -183.5 -94.5 t-58.5 -234.5z" />
<glyph unicode="e" d="M47 534q0 283 143.5 434t372.5 151q136 0 245 -51t180 -161q64 -97 83 -225q9 -63 9 -174v-42h-746q6 -164 103 -230q59 -41 142 -41q88 0 143 50q30 27 53 75h291q-11 -97 -101 -197q-140 -159 -392 -159q-208 0 -367 134t-159 436zM341 654h443q-7 113 -68.5 171.5 t-152.5 58.5q-99 0 -153.5 -62t-68.5 -168zM583 1119z" />
<glyph unicode="f" horiz-adv-x="682" d="M21 879v201h156v70q0 175 59 241q62 98 299 98q27 0 49 -1.5t60 -4.5v-232q-24 3 -80 5h-6q-52 0 -72 -26q-22 -26 -22 -58v-92h187v-201h-187v-879h-284v879h-159z" />
<glyph unicode="g" horiz-adv-x="1251" d="M66 542q0 243 121 408.5t343 165.5q82 0 143 -25q104 -43 168 -158v157h277v-1034q0 -211 -71 -318q-122 -184 -468 -184q-209 0 -341 82t-146 245h310q12 -50 39 -72q46 -39 155 -39q154 0 206 103q34 66 34 222v70q-41 -70 -88 -105q-85 -65 -221 -65 q-210 0 -335.5 147.5t-125.5 399.5zM361 541q0 -95 32 -169q58 -138 208 -138q100 0 169 75.5t69 240.5q0 155 -65.5 236t-175.5 81q-150 0 -207 -141q-30 -75 -30 -185zM621 1119z" />
<glyph unicode="h" horiz-adv-x="1251" d="M135 0v1469h284v-521q62 95 143.5 132.5t171.5 37.5q101 0 183.5 -35t135.5 -107q45 -61 55 -125.5t10 -210.5v-640h-291v663q0 88 -30 142q-39 76 -148 76q-113 0 -171.5 -75.5t-58.5 -215.5v-590h-284z" />
<glyph unicode="i" horiz-adv-x="569" d="M137 0v1090h289v-1090h-289zM137 1220v263h289v-263h-289z" />
<glyph unicode="j" horiz-adv-x="569" d="M9 -209q24 -2 34 -2.5t18 -0.5q42 0 63.5 20.5t21.5 79.5v1197h285v-1202q0 -165 -65 -244t-255 -79q-13 0 -38.5 1t-63.5 2v228zM146 1220v263h285v-263h-285z" />
<glyph unicode="k" d="M130 0v1469h280v-794l355 410h353l-381 -417l396 -668h-344l-261 466l-118 -123v-343h-280z" />
<glyph unicode="l" horiz-adv-x="569" d="M139 0v1474h285v-1474h-285z" />
<glyph unicode="m" horiz-adv-x="1821" d="M128 0v1088h277v-159q53 85 100 121q83 64 215 64q125 0 202 -55q62 -51 94 -131q56 96 139 141q88 45 196 45q72 0 142 -28t127 -98q46 -57 62 -140q10 -55 10 -161l-2 -687h-292v694q0 62 -20 102q-38 76 -140 76q-118 0 -163 -98q-23 -52 -23 -125v-649h-287v649 q0 97 -20 141q-36 79 -141 79q-122 0 -164 -79q-23 -45 -23 -134v-656h-289z" />
<glyph unicode="n" horiz-adv-x="1251" d="M135 0v1088h275v-159q55 84 104 121q88 66 223 66q169 0 276.5 -88.5t107.5 -293.5v-734h-292v663q0 86 -23 132q-42 84 -160 84q-145 0 -199 -123q-28 -65 -28 -166v-590h-284zM632 1119z" />
<glyph unicode="o" horiz-adv-x="1251" d="M66 543q0 236 138 409t419 173t419 -173t138 -409q0 -240 -138 -410.5t-419 -170.5t-419 170.5t-138 410.5zM362 543q0 -164 67.5 -253t192.5 -89t192 89t67 253t-67 252.5t-192 88.5t-192.5 -88.5t-67.5 -252.5zM623 1119z" />
<glyph unicode="p" horiz-adv-x="1251" d="M125 -429v1519h273v-161q46 71 98 112q95 73 226 73q191 0 323.5 -141t132.5 -414q0 -288 -129.5 -439t-333.5 -151q-130 0 -216 65q-47 36 -92 105v-568h-282zM397 520q0 -190 101 -267q60 -45 142 -45q119 0 181.5 92t62.5 245q0 126 -57.5 223t-186.5 97 q-155 0 -213 -147q-30 -78 -30 -198z" />
<glyph unicode="q" horiz-adv-x="1251" d="M60 520q0 272 133.5 435t329.5 163q136 0 220 -67q49 -38 100 -125v162h275v-1520h-282v567q-32 -66 -109.5 -117.5t-211.5 -51.5q-189 0 -322 151t-133 403zM357 532q0 -113 30 -185q56 -137 208 -137q147 0 209 126q40 83 40 210q0 100 -34 179q-61 142 -214 142 q-108 0 -173.5 -83t-65.5 -252z" />
<glyph unicode="r" horiz-adv-x="797" d="M130 0v1090h272v-190q66 109 115 149q80 67 208 67q8 0 13.5 -0.5t24.5 -1.5v-292q-27 3 -48 4t-34 1q-172 0 -231 -112q-33 -63 -33 -194v-521h-287z" />
<glyph unicode="s" d="M66 348h289q9 -76 39 -108q53 -57 196 -57q84 0 133.5 25t49.5 75q0 48 -40 73t-297 86q-185 46 -261 115q-76 68 -76 196q0 151 118.5 259.5t333.5 108.5q204 0 332.5 -81.5t147.5 -281.5h-285q-6 55 -31 87q-47 58 -160 58q-93 0 -132.5 -29t-39.5 -68q0 -49 42 -71 q42 -23 297 -79q170 -40 255 -121q84 -82 84 -205q0 -162 -120.5 -264.5t-372.5 -102.5q-257 0 -379.5 108.5t-122.5 276.5zM573 1119z" />
<glyph unicode="t" horiz-adv-x="682" d="M21 877v203h152v304h282v-304h177v-203h-177v-576q0 -67 17 -83.5t104 -16.5q13 0 27.5 0.5t28.5 1.5v-213l-135 -5q-17 -1 -33 -1q-175 0 -243 71q-48 49 -48 151v671h-152z" />
<glyph unicode="u" horiz-adv-x="1251" d="M125 433v657h292v-657q0 -93 22 -140q39 -83 153 -83q146 0 200 118q28 64 28 169v593h289v-1090h-277v154q-4 -5 -20 -30t-38 -44q-67 -60 -129.5 -82t-146.5 -22q-242 0 -326 174q-47 96 -47 283zM617 1119z" />
<glyph unicode="v" d="M26 1090h320l227 -804l232 804h306l-393 -1090h-301z" />
<glyph unicode="w" horiz-adv-x="1593" d="M14 1090h306l170 -782l157 782h289l166 -785l170 785h297l-316 -1090h-293l-171 794l-173 -794h-296z" />
<glyph unicode="x" d="M26 0l372 552l-356 536h349l182 -316l178 316h339l-358 -531l372 -557h-355l-188 327l-189 -327h-346z" />
<glyph unicode="y" d="M21 1090h317l238 -804l225 804h303l-374 -1072q-108 -310 -171 -384.5t-252 -74.5q-38 0 -61 0.5t-69 3.5v228l36 -2q12 -1 24 -1q29 0 56 4q38 5 64 23q25 17 47 71q18 46 18 61q0 3 -1 5zM563 1119z" />
<glyph unicode="z" horiz-adv-x="1024" d="M33 0v222l559 636h-521v232h884v-237l-553 -619h572v-234h-941zM513 1119z" />
<glyph unicode="{" horiz-adv-x="797" d="M0 483v121q97 33 137 73q71 69 71 211v268q0 51 17 107q30 97 102 154q66 52 155 69q54 11 155 12v-159q-83 -18 -113 -48q-46 -46 -46 -161v-232q0 -112 -30 -178q-51 -111 -200 -180q135 -55 181.5 -128t48.5 -202v-253q0 -111 54 -160q30 -29 105 -51v-159l-71 2 q-143 4 -250.5 85.5t-107.5 237.5v313q0 126 -76 193q-46 41 -132 65z" />
<glyph unicode="|" horiz-adv-x="573" d="M106 0v1488h263v-1488h-263z" />
<glyph unicode="}" horiz-adv-x="797" d="M45 -254q75 22 105 52q51 50 53 159v253q0 142 55 210.5t175 119.5q-131 64 -180.5 145.5t-49.5 212.5v232q0 111 -35.5 151t-122.5 58v159q100 -1 154 -12q89 -17 156 -69t93 -128t26 -133v-268q0 -143 65 -210q40 -40 143 -74v-121q-85 -24 -129 -62q-79 -68 -79 -196 v-313q0 -152 -105 -235.5t-253 -87.5l-71 -2v159z" />
<glyph unicode="~" horiz-adv-x="1196" d="M4 305q17 119 48.5 205t77.5 141q49 58 101 81.5t107 23.5q24 0 63 -6q62 -10 115 -30l233 -90q41 -16 79.5 -22.5t59.5 -6.5q66 0 105 51.5t57 124.5h170q-27 -186 -110.5 -319t-225.5 -133q-28 0 -59 5q-60 9 -142 43l-209 79q-29 11 -71 20t-62 9q-57 0 -101 -43.5 t-63 -132.5h-173z" />
<glyph unicode="&#xa1;" horiz-adv-x="682" d="M225 -10l80 687h150l83 -687v-374h-313v374zM232 796v289h298v-289h-298z" />
<glyph unicode="&#xa2;" d="M69 528q0 269 140 428.5t358 159.5q46 0 64.5 -2t48.5 -8l50 181h106l-59 -202q108 -37 175 -104q104 -102 124 -282h-292q-11 60 -36 99q-15 26 -40 43l-175 -635q16 -3 28 -5t26 -2q68 0 124 47t71 149h291q-17 -187 -133.5 -311.5t-378.5 -124.5q-30 0 -49 2t-48 5 l-59 -211h-112l74 242q-126 48 -212 184.5t-86 346.5zM367 533q0 -117 24.5 -183.5t51.5 -91.5l170 614q-17 2 -35 2q-100 0 -155.5 -102t-55.5 -239z" />
<glyph unicode="&#xa3;" d="M66 175q72 39 149 125.5t77 169.5q0 44 -16 100q-9 32 -30 86h-178v112h114q-46 90 -68 158.5t-22 147.5q0 154 127.5 276t363.5 122q196 0 340 -108.5t153 -366.5h-271q-10 99 -46 160q-53 85 -179 85q-93 0 -147 -57.5t-54 -132.5q0 -45 19 -94.5t85 -189.5h287v-112 h-244q4 -39 6.5 -65t2.5 -52q0 -96 -58 -178q-37 -51 -150 -155q80 29 118 38q61 16 119 16q36 0 70.5 -6t73.5 -17l41 -13q27 -9 45.5 -11.5t31.5 -2.5q46 0 108 26q36 15 90 46l82 -223q-50 -33 -140 -64t-173 -31q-44 0 -92 11t-104 29l-57 19q-37 12 -61 18q-40 8 -82 8 q-45 0 -97 -18q-34 -13 -125 -55z" />
<glyph unicode="&#xa4;" d="M54 342l140 140q-71 115 -71 235t71 235l-140 140l140 140l140 -140q115 71 235 71t235 -71l140 140l140 -140l-140 -140q71 -115 71 -235t-71 -235l140 -140l-140 -140l-140 140q-115 -71 -235 -71t-235 71l-140 -140zM335 717q0 -98 68 -166t166 -68t166 68t68 166 t-68 166t-166 68t-166 -68t-68 -166z" />
<glyph unicode="&#xa5;" d="M-22 1431h339l266 -623l253 623h325l-228 -471h143v-136h-209l-107 -218h282v-135h-320v-471h-291v471h-318v135h280l-109 218h-213v136h147z" />
<glyph unicode="&#xa6;" horiz-adv-x="573" d="M106 0v587h263v-587h-263zM106 903v585h263v-585h-263z" />
<glyph unicode="&#xa7;" d="M65 573q0 125 72 207q42 49 119 89q-32 22 -69 80q-38 72 -38 160q0 149 106.5 257t310.5 108q244 0 346 -160q55 -86 64 -215h-258q-7 60 -30 95q-41 62 -135 62q-63 0 -103 -30.5t-40 -89.5q0 -68 70 -102t257 -120q326 -154 326 -357q0 -127 -74 -210 q-41 -46 -120 -87q56 -48 82 -90q46 -73 46 -172q0 -191 -132 -291.5t-296 -100.5q-178 0 -302.5 89t-141.5 295h270q14 -74 40 -107q43 -56 141 -56q60 0 103 37t43 96q0 53 -45 93t-255 146q-183 90 -250 148q-107 93 -107 226zM307 645q0 -49 43 -87q25 -23 88 -56 l284 -149q33 14 56 41q36 39 36 93q0 45 -48 86q-26 21 -72 45l-299 152q-52 -22 -74 -65q-14 -28 -14 -60z" />
<glyph unicode="&#xa8;" horiz-adv-x="682" d="M-43 1256v237h261v-237h-261zM288 1119zM357 1256v237h261v-237h-261z" />
<glyph unicode="&#xa9;" horiz-adv-x="1509" d="M26 737q0 323 230 537q216 200 507 200q305 0 521 -216t216 -521q0 -314 -221 -529q-215 -208 -516 -208q-311 0 -524 213t-213 524zM154 737q0 -256 179 -435q178 -179 430 -179q251 0 429 180q178 181 178 434q0 246 -177 427q-179 184 -430 184q-254 0 -433 -184 q-176 -180 -176 -427zM368 735q0 182 105.5 310t289.5 128q117 0 203 -48q140 -78 174 -273l-188 3q-17 90 -72 121q-46 29 -101 29q-83 0 -136 -68.5t-53 -206.5q0 -137 58.5 -199t140.5 -62q75 0 113.5 41t49.5 103h183q-30 -174 -135.5 -243.5t-218.5 -69.5 q-168 0 -290.5 120t-122.5 315z" />
<glyph unicode="&#xaa;" horiz-adv-x="758" d="M40 1021q0 108 82 166q54 38 167 52l128 17q28 3 46 16.5t18 37.5q0 47 -47 64q-27 10 -74 10q-53 0 -79 -22.5t-37 -67.5h-180q12 91 54 142q70 83 237 83q123 0 188 -24q120 -45 120 -195v-322q0 -39 8 -65.5t33 -35.5v-36h-200q-7 17 -11.5 34.5t-4.5 41.5 q-52 -45 -87 -64q-62 -33 -136 -33q-137 0 -192 85q-33 49 -33 116zM226 1036q0 -40 27 -60.5t69 -20.5q35 0 75 16q26 12 41 26q19 14 29.5 34t13.5 75v64q-18 -12 -32.5 -17.5t-46.5 -10.5l-47 -7q-72 -11 -100.5 -36t-28.5 -63z" />
<glyph unicode="&#xab;" d="M175 444v238l342 294v-238l-204 -175l204 -174v-238zM618 444v238l342 294v-238l-204 -175l204 -174v-238z" />
<glyph unicode="&#xac;" horiz-adv-x="1196" d="M73 644v263h1083v-730h-263v467h-820z" />
<glyph unicode="&#xad;" horiz-adv-x="682" d="M47 436v270h574v-270h-574z" />
<glyph unicode="&#xae;" horiz-adv-x="1509" d="M26 737q0 323 230 537q216 200 507 200q305 0 521 -216t216 -521q0 -314 -221 -529q-215 -208 -516 -208q-311 0 -524 213t-213 524zM154 737q0 -256 179 -435q178 -179 430 -179q251 0 429 180q178 181 178 434q0 246 -177 427q-179 184 -430 184q-254 0 -433 -184 q-176 -180 -176 -427zM440 327v817q76 0 227.5 -0.5t168.5 -1.5q97 -7 161 -42q109 -60 109 -195q0 -103 -57.5 -149t-141.5 -55q77 -16 116 -47q72 -58 72 -183v-73q0 -12 1.5 -24t5.5 -24l7 -23h-204q-10 39 -13 113t-13 100q-16 43 -60 60q-24 10 -73 13l-47 3h-45v-289 h-214zM654 763h83q75 0 117 30t42 97t-66 93q-44 17 -124 17h-52v-237z" />
<glyph unicode="&#xaf;" horiz-adv-x="682" d="M-67 1301v152h711v-152h-711z" />
<glyph unicode="&#xb0;" horiz-adv-x="819" d="M94 1137q0 132 95.5 227.5t227.5 95.5t227.5 -95.5t95.5 -227.5t-95.5 -227.5t-227.5 -95.5t-227.5 95.5t-95.5 227.5zM256 1137q0 -67 47 -114t114 -47t114 47t47 114t-47 114t-114 47t-114 -47t-47 -114z" />
<glyph unicode="&#xb1;" horiz-adv-x="1124" d="M73 0v246h1083v-246h-1083zM73 566v244h410v273h263v-273h410v-244h-410v-256h-263v256h-410z" />
<glyph unicode="&#xb2;" horiz-adv-x="682" d="M26 580q0 205 228 359q142 96 184.5 143.5t42.5 105.5q0 62 -35 94.5t-93 32.5q-86 0 -115 -53q-18 -32 -20 -110h-181q3 156 85 232t228 76q135 0 227.5 -74t92.5 -204q0 -83 -46 -150.5t-153 -136.5l-73 -45q-44 -28 -70 -48q-55 -40 -68 -65h410v-157h-644z" />
<glyph unicode="&#xb3;" horiz-adv-x="682" d="M18 853h183q4 -64 22 -94q33 -55 120 -55q37 0 71 18q64 34 64 117q0 82 -64 109q-39 17 -147 21v121q89 2 125 17q63 27 63 104q0 54 -35 82.5t-87 28.5q-60 0 -92.5 -39.5t-32.5 -102.5h-171q-5 135 94 220q75 60 210 60q138 0 219.5 -65.5t81.5 -171.5 q0 -65 -31 -107.5t-83 -68.5q55 -8 98.5 -55t43.5 -145q0 -134 -92.5 -207.5t-221.5 -73.5q-153 0 -245.5 67.5t-92.5 219.5z" />
<glyph unicode="&#xb4;" horiz-adv-x="682" d="M118 1237l192 299h318l-304 -299h-206zM287 1119z" />
<glyph unicode="&#xb5;" horiz-adv-x="1180" d="M-53 -475l285 1565h289l-130 -728q-1 -7 -2 -15t-1 -16q0 -68 48.5 -94.5t97.5 -26.5q72 0 134 41.5t97 98.5q24 39 41 105t44 211l79 424h284l-194 -1088h-263l28 182q-45 -72 -136.5 -144t-198.5 -72q-42 0 -75 12t-50 27l-87 -482h-290z" />
<glyph unicode="&#xb6;" d="M-61 971q0 214 123 358.5t362 144.5h651v-171h-125v-1673h-202v1673h-196v-1673h-202v865q-188 0 -299.5 129t-111.5 347z" />
<glyph unicode="&#xb7;" horiz-adv-x="569" d="M113 718q0 68 49 117t117 49q69 0 119 -48.5t50 -117.5t-49 -117.5t-118 -48.5t-118.5 48.5t-49.5 117.5z" />
<glyph unicode="&#xb8;" horiz-adv-x="682" d="M18 -418l38 86q57 -17 78 -22q48 -12 78 -12q60 0 86 25.5t26 53.5q0 42 -29 59t-62 17q-19 0 -39 -4.5t-45 -12.5l-129 117l207 111h109l-88 -131q33 7 47 9.5t30 2.5q81 0 129 -39.5t48 -113.5q0 -92 -75 -145.5t-193 -53.5q-51 0 -123 21q-33 10 -93 32z" />
<glyph unicode="&#xb9;" horiz-adv-x="682" d="M80 1180v116q110 5 141 14t53 26q29 21 46.5 50.5t17.5 63.5h164v-870h-199v600h-223z" />
<glyph unicode="&#xba;" horiz-adv-x="748" d="M14 1170q0 158 96 254t266 96t266 -96t96 -254t-96 -254t-266 -96t-266 96t-96 254zM206 1170q0 -93 42.5 -149t127.5 -56t125.5 56t40.5 149t-40.5 149t-125.5 56t-127.5 -56t-42.5 -149z" />
<glyph unicode="&#xbb;" d="M0 151v238l204 174l-204 175v238l342 -294v-238zM443 151v238l204 174l-204 175v238l342 -294v-238z" />
<glyph unicode="&#xbc;" horiz-adv-x="1708" d="M90 1180v116q113 6 165 26q93 36 93 128h164v-870h-200v600h-222zM369 -38l875 1483h161l-875 -1483h-161zM969 187v149l348 526h216v-542h97v-133h-97v-187h-189v187h-375zM1106 320h238v372z" />
<glyph unicode="&#xbd;" horiz-adv-x="1708" d="M47 1180v116q111 5 145.5 16t56.5 29q32 24 44 57t12 52h164v-870h-199v600h-223zM279 -38l875 1483h161l-875 -1483h-161zM976 0q3 209 230 360q154 107 189.5 148.5t35.5 98.5q0 56 -33 91.5t-96 35.5q-86 0 -115 -56q-17 -31 -19 -107h-180q0 144 88 231q84 77 225 77 q145 0 232.5 -78.5t87.5 -198.5q0 -88 -50.5 -157t-146.5 -128l-76 -47q-24 -15 -38 -25t-38 -27q-18 -14 -35.5 -30.5t-25.5 -31.5h410v-156h-645z" />
<glyph unicode="&#xbe;" horiz-adv-x="1708" d="M78 853h182q3 -58 22 -90q33 -59 120 -59q40 0 74 19q62 34 62 118q0 80 -66 108q-39 16 -145 20v121q90 2 126 18q62 27 62 107q0 40 -31 73.5t-92 33.5q-76 0 -106 -54q-16 -31 -19 -88h-170q-5 146 103 228q75 52 200 52q140 0 220.5 -66t80.5 -167q0 -66 -28 -108.5 t-86 -71.5q31 2 87 -51.5t56 -152.5q0 -125 -90.5 -201t-224.5 -76q-207 0 -287 111q-43 61 -50 176zM440 -38l870 1483h162l-870 -1483h-162zM1016 187v149l349 526h216v-542h97v-133h-97v-187h-190v187h-375zM1154 320h237v372z" />
<glyph unicode="&#xbf;" horiz-adv-x="1251" d="M109 23q0 130 64 220q39 55 147 138l71 55q58 45 77 105q12 38 13 117h270q-6 -166 -32.5 -231.5t-133.5 -149.5l-73 -57q-62 -49 -84 -104q-14 -34 -14 -79q0 -91 53.5 -145t145.5 -54q136 0 192 110q29 59 29 127h289q-12 -280 -162 -379.5t-326 -99.5 q-229 0 -377.5 109t-148.5 318zM459 796v289h299v-289h-299z" />
<glyph unicode="&#xc0;" horiz-adv-x="1479" d="M52 0l526 1474h348l522 -1474h-334l-95 303h-543l-102 -303h-322zM410 1891h317l192 -299h-206zM559 557h374l-184 580zM750 1474zM750 1474z" />
<glyph unicode="&#xc1;" horiz-adv-x="1479" d="M52 0l526 1474h348l522 -1474h-334l-95 303h-543l-102 -303h-322zM559 557h374l-184 580zM581 1592l192 299h318l-304 -299h-206zM750 1474zM750 1474z" />
<glyph unicode="&#xc2;" horiz-adv-x="1479" d="M52 0l526 1474h348l522 -1474h-334l-95 303h-543l-102 -303h-322zM387 1592l235 299h256l234 -299h-232l-130 168l-131 -168h-232zM559 557h374l-184 580zM750 1474zM750 1474z" />
<glyph unicode="&#xc3;" horiz-adv-x="1479" d="M52 0l526 1474h348l522 -1474h-334l-95 303h-543l-102 -303h-322zM374 1606q22 103 57 156q64 95 190 95q27 0 53 -6t44 -13l94 -35q42 -14 55 -18t29 -4q48 0 67.5 25.5t28.5 60.5h133q-18 -105 -71.5 -176t-156.5 -71q-31 0 -88 15q-33 8 -63 18l-81 27q-17 6 -33 8.5 t-32 2.5q-38 0 -62 -22q-24 -23 -34 -63h-130zM559 557h374l-184 580zM750 1474zM750 1474z" />
<glyph unicode="&#xc4;" horiz-adv-x="1479" d="M52 0l526 1474h348l522 -1474h-334l-95 303h-543l-102 -303h-322zM419 1611v237h261v-237h-261zM559 557h374l-184 580zM750 1474zM750 1474zM819 1611v237h261v-237h-261z" />
<glyph unicode="&#xc5;" horiz-adv-x="1479" d="M52 0l526 1474h348l522 -1474h-334l-95 303h-543l-102 -303h-322zM544 1748q0 90 64 154t154 64t154 -64t64 -154t-64 -154t-154 -64t-154 64t-64 154zM559 557h374l-184 580zM643 1748q0 -49 35 -83.5t84 -34.5t83.5 34.5t34.5 83.5t-34.5 84t-83.5 35t-84 -35t-35 -84z M750 1474zM762 1424z" />
<glyph unicode="&#xc6;" horiz-adv-x="2048" d="M18 0l536 1469h1394v-256h-759v-317h683v-252h-683v-384h773v-260h-1076v312h-441l-107 -312h-320zM526 554h360v664h-133z" />
<glyph unicode="&#xc7;" horiz-adv-x="1479" d="M92 725q0 386 207 595q180 182 458 182q372 0 544 -244q95 -137 102 -275h-308q-30 106 -77 160q-84 96 -249 96q-168 0 -265 -135.5t-97 -383.5t102.5 -371.5t260.5 -123.5q162 0 247 106q47 57 78 171h305q-40 -241 -204.5 -392t-393.5 -151l-61 -90q33 7 47 9.5 t30 2.5q81 0 129 -39.5t48 -113.5q0 -92 -75 -145.5t-193 -53.5q-51 0 -123 21q-33 10 -93 32l38 86q57 -17 78 -22q48 -12 78 -12q60 0 86 25.5t26 53.5q0 42 -29 59t-62 17q-19 0 -39 -4.5t-45 -12.5l-43 40l94 147q-237 0 -419 204q-182 205 -182 562z" />
<glyph unicode="&#xc8;" horiz-adv-x="1366" d="M165 0v1474h1081v-261h-780v-313h716v-256h-716v-379h816v-265h-1117zM373 1891h317l192 -299h-206zM713 1474z" />
<glyph unicode="&#xc9;" horiz-adv-x="1366" d="M165 0v1474h1081v-261h-780v-313h716v-256h-716v-379h816v-265h-1117zM544 1592l192 299h318l-304 -299h-206zM713 1474z" />
<glyph unicode="&#xca;" horiz-adv-x="1366" d="M165 0v1474h1081v-261h-780v-313h716v-256h-716v-379h816v-265h-1117zM350 1592l235 299h256l234 -299h-232l-130 168l-131 -168h-232zM713 1474z" />
<glyph unicode="&#xcb;" horiz-adv-x="1366" d="M165 0v1474h1081v-261h-780v-313h716v-256h-716v-379h816v-265h-1117zM382 1611v237h261v-237h-261zM713 1474zM782 1611v237h261v-237h-261z" />
<glyph unicode="&#xcc;" horiz-adv-x="569" d="M-50 1920h317l192 -299h-206zM132 0v1474h306v-1474h-306zM285 1503zM290 1503z" />
<glyph unicode="&#xcd;" horiz-adv-x="569" d="M118 1621l192 299h318l-304 -299h-206zM132 0v1474h306v-1474h-306zM285 1503zM287 1503z" />
<glyph unicode="&#xce;" horiz-adv-x="569" d="M-74 1621l235 299h256l234 -299h-232l-130 168l-131 -168h-232zM132 0v1474h306v-1474h-306zM285 1503zM289 1503z" />
<glyph unicode="&#xcf;" horiz-adv-x="569" d="M-43 1640v237h261v-237h-261zM132 0v1474h306v-1474h-306zM285 1503zM288 1503zM357 1640v237h261v-237h-261z" />
<glyph unicode="&#xd0;" horiz-adv-x="1479" d="M18 658v256h138v558h616q171 0 291.5 -51.5t208.5 -173.5q67 -93 99 -212t32 -263q0 -266 -99 -460q-159 -312 -534 -312h-614v658h-138zM455 256h213q125 0 179 16q89 25 148 109q54 77 74.5 182.5t20.5 187.5q0 304 -150 409q-84 58 -258 58h-227v-304h310v-256h-310 v-402z" />
<glyph unicode="&#xd1;" horiz-adv-x="1479" d="M151 0v1474h323l587 -1029v1029h287v-1474h-308l-602 1047v-1047h-287zM385 1609q22 103 57 156q64 95 190 95q27 0 53 -6t44 -13l94 -35q42 -14 55 -18t29 -4q48 0 67.5 25.5t28.5 60.5h133q-18 -105 -71.5 -176t-156.5 -71q-31 0 -88 15q-33 8 -63 18l-81 27 q-17 6 -33 8.5t-32 2.5q-38 0 -62 -22q-24 -23 -34 -63h-130zM761 1477zM761 1477z" />
<glyph unicode="&#xd2;" horiz-adv-x="1593" d="M101 739q0 405 224 608q167 172 483 172t483 -172q223 -203 223 -608q0 -397 -223 -608q-167 -172 -483 -172t-483 172q-224 211 -224 608zM407 739q0 -249 109 -384t292 -135t290.5 135t107.5 384q0 248 -107.5 383.5t-290.5 135.5t-292 -135t-109 -384zM468 1936h317 l192 -299h-206zM808 1519zM808 1519z" />
<glyph unicode="&#xd3;" horiz-adv-x="1593" d="M101 739q0 405 224 608q167 172 483 172t483 -172q223 -203 223 -608q0 -397 -223 -608q-167 -172 -483 -172t-483 172q-224 211 -224 608zM407 739q0 -249 109 -384t292 -135t290.5 135t107.5 384q0 248 -107.5 383.5t-290.5 135.5t-292 -135t-109 -384zM639 1637 l192 299h318l-304 -299h-206zM808 1519zM808 1519z" />
<glyph unicode="&#xd4;" horiz-adv-x="1593" d="M101 739q0 405 224 608q167 172 483 172t483 -172q223 -203 223 -608q0 -397 -223 -608q-167 -172 -483 -172t-483 172q-224 211 -224 608zM407 739q0 -249 109 -384t292 -135t290.5 135t107.5 384q0 248 -107.5 383.5t-290.5 135.5t-292 -135t-109 -384zM445 1637 l235 299h256l234 -299h-232l-130 168l-131 -168h-232zM808 1519zM808 1519z" />
<glyph unicode="&#xd5;" horiz-adv-x="1593" d="M101 739q0 405 224 608q167 172 483 172t483 -172q223 -203 223 -608q0 -397 -223 -608q-167 -172 -483 -172t-483 172q-224 211 -224 608zM407 739q0 -249 109 -384t292 -135t290.5 135t107.5 384q0 248 -107.5 383.5t-290.5 135.5t-292 -135t-109 -384zM432 1651 q22 103 57 156q64 95 190 95q27 0 53 -6t44 -13l94 -35q42 -14 55 -18t29 -4q48 0 67.5 25.5t28.5 60.5h133q-18 -105 -71.5 -176t-156.5 -71q-31 0 -88 15q-33 8 -63 18l-81 27q-17 6 -33 8.5t-32 2.5q-38 0 -62 -22q-24 -23 -34 -63h-130zM808 1519zM808 1519z" />
<glyph unicode="&#xd6;" horiz-adv-x="1593" d="M101 739q0 405 224 608q167 172 483 172t483 -172q223 -203 223 -608q0 -397 -223 -608q-167 -172 -483 -172t-483 172q-224 211 -224 608zM407 739q0 -249 109 -384t292 -135t290.5 135t107.5 384q0 248 -107.5 383.5t-290.5 135.5t-292 -135t-109 -384zM477 1656v237 h261v-237h-261zM808 1519zM808 1519zM877 1656v237h261v-237h-261z" />
<glyph unicode="&#xd7;" horiz-adv-x="1196" d="M85 199l344 343l-344 344l185 185l343 -344l347 344l184 -185l-346 -344l346 -343l-184 -188l-347 346l-343 -346z" />
<glyph unicode="&#xd8;" horiz-adv-x="1593" d="M71 23l182 190q-58 78 -102 197q-52 142 -52 329q0 346 218 594q188 186 488 186q131 0 256.5 -44t222.5 -127l164 178l85 -81l-168 -187q56 -69 102 -192q45 -128 45 -327q0 -346 -197 -565q-194 -215 -510 -215q-122 0 -243.5 37.5t-230.5 131.5l-175 -185zM405 739 q0 -98 18 -180q10 -48 36 -119l633 697q-39 47 -108 81q-72 40 -179 40q-214 0 -307 -141.5t-93 -377.5zM528 341q59 -66 130 -93.5t147 -27.5q214 0 307.5 161t93.5 358q0 66 -8 128q-13 95 -42 164z" />
<glyph unicode="&#xd9;" horiz-adv-x="1479" d="M156 568v906h313v-906q0 -152 36 -222q56 -124 244 -124q187 0 243 124q36 70 36 222v906h313v-906q0 -235 -73 -366q-136 -240 -519 -240t-520 240q-73 131 -73 366zM409 1891h317l192 -299h-206zM749 1474zM749 1474z" />
<glyph unicode="&#xda;" horiz-adv-x="1479" d="M156 568v906h313v-906q0 -152 36 -222q56 -124 244 -124q187 0 243 124q36 70 36 222v906h313v-906q0 -235 -73 -366q-136 -240 -519 -240t-520 240q-73 131 -73 366zM580 1592l192 299h318l-304 -299h-206zM749 1474zM749 1474z" />
<glyph unicode="&#xdb;" horiz-adv-x="1479" d="M156 568v906h313v-906q0 -152 36 -222q56 -124 244 -124q187 0 243 124q36 70 36 222v906h313v-906q0 -235 -73 -366q-136 -240 -519 -240t-520 240q-73 131 -73 366zM386 1592l235 299h256l234 -299h-232l-130 168l-131 -168h-232zM749 1474zM749 1474z" />
<glyph unicode="&#xdc;" horiz-adv-x="1479" d="M156 568v906h313v-906q0 -152 36 -222q56 -124 244 -124q187 0 243 124q36 70 36 222v906h313v-906q0 -235 -73 -366q-136 -240 -519 -240t-520 240q-73 131 -73 366zM418 1611v237h261v-237h-261zM749 1474zM749 1474zM818 1611v237h261v-237h-261z" />
<glyph unicode="&#xdd;" horiz-adv-x="1366" d="M35 1474h363l306 -642l293 642h349l-493 -920v-554h-308v554zM522 1592l192 299h318l-304 -299h-206zM691 1474zM691 1474z" />
<glyph unicode="&#xde;" horiz-adv-x="1366" d="M128 0v1472h299v-221h282q256 0 386.5 -114t130.5 -307q0 -292 -226 -399q-121 -57 -322 -57h-251v-374h-299zM427 611h216q124 0 183 26q106 47 106 183q0 126 -95 168q-54 24 -178 24h-232v-401z" />
<glyph unicode="&#xdf;" horiz-adv-x="1251" d="M137 0v1035q0 188 60 286q108 177 418 177q216 0 348 -104t132 -282q0 -67 -19 -118q-36 -95 -133 -153q125 -53 180 -147.5t55 -223.5q0 -184 -113.5 -340.5t-393.5 -156.5q-14 0 -43.5 2.5t-63.5 9.5v228q22 -2 37 -2.5t27 -0.5q158 0 221 92q40 60 40 160 q0 148 -103 204q-61 33 -208 45v199q107 1 151 23q72 38 72 152q0 96 -56.5 139.5t-136.5 43.5q-126 0 -165 -85q-24 -50 -24 -181v-1002h-282z" />
<glyph unicode="&#xe0;" d="M59 290q0 201 155 291q85 49 250 70l97 12q79 10 113 25q61 26 61 81q0 67 -46.5 92.5t-136.5 25.5q-101 0 -143 -50q-30 -37 -40 -100h-275q9 143 80 235q113 144 388 144q179 0 318 -71t139 -268v-500q0 -52 2 -126q3 -56 17 -76t42 -33v-42h-310q-13 33 -18 62t-8 66 q-59 -64 -136 -109q-92 -53 -208 -53q-148 0 -244.5 84.5t-96.5 239.5zM236 1536h317l192 -299h-206zM345 311q0 -73 40.5 -105.5t98.5 -32.5q92 0 169.5 54t80.5 197v106q-27 -17 -54.5 -27.5t-75.5 -19.5l-64 -12q-90 -16 -129 -39q-66 -39 -66 -121zM576 1119zM576 1119z " />
<glyph unicode="&#xe1;" d="M59 290q0 201 155 291q85 49 250 70l97 12q79 10 113 25q61 26 61 81q0 67 -46.5 92.5t-136.5 25.5q-101 0 -143 -50q-30 -37 -40 -100h-275q9 143 80 235q113 144 388 144q179 0 318 -71t139 -268v-500q0 -52 2 -126q3 -56 17 -76t42 -33v-42h-310q-13 33 -18 62t-8 66 q-59 -64 -136 -109q-92 -53 -208 -53q-148 0 -244.5 84.5t-96.5 239.5zM345 311q0 -73 40.5 -105.5t98.5 -32.5q92 0 169.5 54t80.5 197v106q-27 -17 -54.5 -27.5t-75.5 -19.5l-64 -12q-90 -16 -129 -39q-66 -39 -66 -121zM407 1237l192 299h318l-304 -299h-206zM576 1119z M576 1119z" />
<glyph unicode="&#xe2;" d="M59 290q0 201 155 291q85 49 250 70l97 12q79 10 113 25q61 26 61 81q0 67 -46.5 92.5t-136.5 25.5q-101 0 -143 -50q-30 -37 -40 -100h-275q9 143 80 235q113 144 388 144q179 0 318 -71t139 -268v-500q0 -52 2 -126q3 -56 17 -76t42 -33v-42h-310q-13 33 -18 62t-8 66 q-59 -64 -136 -109q-92 -53 -208 -53q-148 0 -244.5 84.5t-96.5 239.5zM213 1237l235 299h256l234 -299h-232l-130 168l-131 -168h-232zM345 311q0 -73 40.5 -105.5t98.5 -32.5q92 0 169.5 54t80.5 197v106q-27 -17 -54.5 -27.5t-75.5 -19.5l-64 -12q-90 -16 -129 -39 q-66 -39 -66 -121zM576 1119zM576 1119z" />
<glyph unicode="&#xe3;" d="M59 290q0 201 155 291q85 49 250 70l97 12q79 10 113 25q61 26 61 81q0 67 -46.5 92.5t-136.5 25.5q-101 0 -143 -50q-30 -37 -40 -100h-275q9 143 80 235q113 144 388 144q179 0 318 -71t139 -268v-500q0 -52 2 -126q3 -56 17 -76t42 -33v-42h-310q-13 33 -18 62t-8 66 q-59 -64 -136 -109q-92 -53 -208 -53q-148 0 -244.5 84.5t-96.5 239.5zM200 1251q22 103 57 156q64 95 190 95q27 0 53 -6t44 -13l94 -35q42 -14 55 -18t29 -4q48 0 67.5 25.5t28.5 60.5h133q-18 -105 -71.5 -176t-156.5 -71q-31 0 -88 15q-33 8 -63 18l-81 27 q-17 6 -33 8.5t-32 2.5q-38 0 -62 -22q-24 -23 -34 -63h-130zM345 311q0 -73 40.5 -105.5t98.5 -32.5q92 0 169.5 54t80.5 197v106q-27 -17 -54.5 -27.5t-75.5 -19.5l-64 -12q-90 -16 -129 -39q-66 -39 -66 -121zM576 1119zM576 1119z" />
<glyph unicode="&#xe4;" d="M59 290q0 201 155 291q85 49 250 70l97 12q79 10 113 25q61 26 61 81q0 67 -46.5 92.5t-136.5 25.5q-101 0 -143 -50q-30 -37 -40 -100h-275q9 143 80 235q113 144 388 144q179 0 318 -71t139 -268v-500q0 -52 2 -126q3 -56 17 -76t42 -33v-42h-310q-13 33 -18 62t-8 66 q-59 -64 -136 -109q-92 -53 -208 -53q-148 0 -244.5 84.5t-96.5 239.5zM245 1256v237h261v-237h-261zM345 311q0 -73 40.5 -105.5t98.5 -32.5q92 0 169.5 54t80.5 197v106q-27 -17 -54.5 -27.5t-75.5 -19.5l-64 -12q-90 -16 -129 -39q-66 -39 -66 -121zM576 1119zM576 1119z M645 1256v237h261v-237h-261z" />
<glyph unicode="&#xe5;" d="M59 290q0 201 155 291q85 49 250 70l97 12q79 10 113 25q61 26 61 81q0 67 -46.5 92.5t-136.5 25.5q-101 0 -143 -50q-30 -37 -40 -100h-275q9 143 80 235q113 144 388 144q179 0 318 -71t139 -268v-500q0 -52 2 -126q3 -56 17 -76t42 -33v-42h-310q-13 33 -18 62t-8 66 q-59 -64 -136 -109q-92 -53 -208 -53q-148 0 -244.5 84.5t-96.5 239.5zM345 311q0 -73 40.5 -105.5t98.5 -32.5q92 0 169.5 54t80.5 197v106q-27 -17 -54.5 -27.5t-75.5 -19.5l-64 -12q-90 -16 -129 -39q-66 -39 -66 -121zM358 1443q0 90 64 154t154 64t154 -64t64 -154 t-64 -154t-154 -64t-154 64t-64 154zM457 1443q0 -49 35 -83.5t84 -34.5t83.5 34.5t34.5 83.5t-34.5 84t-83.5 35t-84 -35t-35 -84zM576 1119zM576 1119z" />
<glyph unicode="&#xe6;" horiz-adv-x="1821" d="M56 295q0 185 137 270q76 46 231 70l175 26q68 10 99 27q48 26 48 78q0 79 -80 108q-43 15 -115 15q-110 0 -153 -62q-23 -33 -26 -93h-278q11 225 187 318q117 62 298 62q129 0 228 -44q55 -24 115 -73q61 52 140 84.5t183 32.5q332 0 449 -273q62 -145 57 -367h-746 q0 -113 27 -173q50 -110 192 -110q80 0 139 27.5t87 108.5h289q-12 -100 -99 -200q-143 -163 -406 -163q-135 0 -231.5 51t-149.5 131q-74 -95 -177.5 -139t-237.5 -44q-202 0 -292 98t-90 234zM341 299q0 -47 35 -88t119 -41q87 0 145 32q104 58 104 210v109 q-21 -15 -38 -21.5t-76 -18.5l-109 -22q-94 -19 -126 -41q-54 -36 -54 -119zM1009 658h446q-7 105 -60 167.5t-160 62.5q-108 0 -164 -56.5t-62 -173.5z" />
<glyph unicode="&#xe7;" d="M71 523q0 281 137 437t378 156q205 0 335.5 -92t154.5 -325h-292q-8 61 -41 110q-48 66 -149 66q-144 0 -197 -143q-28 -76 -28 -202q0 -120 28 -193q51 -136 192 -136q100 0 142 54t51 140h291q-10 -130 -94 -246q-134 -187 -366 -187l-63 -93q33 7 47 9.5t30 2.5 q81 0 129 -39.5t48 -113.5q0 -92 -75 -145.5t-193 -53.5q-51 0 -123 21q-33 10 -93 32l38 86q57 -17 78 -22q48 -12 78 -12q60 0 86 25.5t26 53.5q0 42 -29 59t-62 17q-19 0 -39 -4.5t-45 -12.5l-43 40l99 150q-188 0 -312 156t-124 405z" />
<glyph unicode="&#xe8;" d="M47 534q0 283 143.5 434t372.5 151q136 0 245 -51t180 -161q64 -97 83 -225q11 -75 9 -216h-746q6 -164 103 -230q59 -41 142 -41q88 0 143 50q30 27 53 75h291q-11 -97 -101 -197q-140 -159 -392 -159q-208 0 -367 134t-159 436zM243 1536h317l192 -299h-206zM341 654 h443q-7 113 -68.5 171.5t-152.5 58.5q-99 0 -153.5 -62t-68.5 -168zM583 1119zM583 1119z" />
<glyph unicode="&#xe9;" d="M47 534q0 283 143.5 434t372.5 151q136 0 245 -51t180 -161q64 -97 83 -225q11 -75 9 -216h-746q6 -164 103 -230q59 -41 142 -41q88 0 143 50q30 27 53 75h291q-11 -97 -101 -197q-140 -159 -392 -159q-208 0 -367 134t-159 436zM341 654h443q-7 113 -68.5 171.5 t-152.5 58.5q-99 0 -153.5 -62t-68.5 -168zM414 1237l192 299h318l-304 -299h-206zM583 1119zM583 1119z" />
<glyph unicode="&#xea;" d="M47 534q0 283 143.5 434t372.5 151q136 0 245 -51t180 -161q64 -97 83 -225q11 -75 9 -216h-746q6 -164 103 -230q59 -41 142 -41q88 0 143 50q30 27 53 75h291q-11 -97 -101 -197q-140 -159 -392 -159q-208 0 -367 134t-159 436zM220 1237l235 299h256l234 -299h-232 l-130 168l-131 -168h-232zM341 654h443q-7 113 -68.5 171.5t-152.5 58.5q-99 0 -153.5 -62t-68.5 -168zM583 1119zM583 1119z" />
<glyph unicode="&#xeb;" d="M47 534q0 283 143.5 434t372.5 151q136 0 245 -51t180 -161q64 -97 83 -225q11 -75 9 -216h-746q6 -164 103 -230q59 -41 142 -41q88 0 143 50q30 27 53 75h291q-11 -97 -101 -197q-140 -159 -392 -159q-208 0 -367 134t-159 436zM252 1256v237h261v-237h-261zM341 654 h443q-7 113 -68.5 171.5t-152.5 58.5q-99 0 -153.5 -62t-68.5 -168zM583 1119zM583 1119zM652 1256v237h261v-237h-261z" />
<glyph unicode="&#xec;" horiz-adv-x="569" d="M-50 1536h317l192 -299h-206zM137 0v1090h289v-1090h-289zM282 1119zM290 1119z" />
<glyph unicode="&#xed;" horiz-adv-x="569" d="M118 1237l192 299h318l-304 -299h-206zM137 0v1090h289v-1090h-289zM282 1119zM287 1119z" />
<glyph unicode="&#xee;" horiz-adv-x="569" d="M-74 1237l235 299h256l234 -299h-232l-130 168l-131 -168h-232zM137 0v1090h289v-1090h-289zM282 1119zM289 1119z" />
<glyph unicode="&#xef;" horiz-adv-x="569" d="M-43 1256v237h261v-237h-261zM137 0v1090h289v-1090h-289zM282 1119zM288 1119zM357 1256v237h261v-237h-261z" />
<glyph unicode="&#xf0;" horiz-adv-x="1251" d="M109 499q0 222 132.5 365t323.5 143q38 0 64.5 -3t76.5 -16q-77 84 -107.5 113.5t-84.5 76.5l-221 -100l-102 103l226 99q-55 39 -70.5 53t-55.5 46l235 104q33 -22 56.5 -39.5t69.5 -52.5l182 79l102 -103l-178 -73q113 -118 156 -169q68 -79 109 -148 q83 -141 111.5 -250.5t28.5 -225.5q0 -225 -136.5 -377.5t-382.5 -152.5q-255 0 -395 149t-140 379zM395 493q0 -152 69.5 -226t172.5 -74q117 0 180.5 83t63.5 233q0 115 -56 204t-184 89q-111 0 -178.5 -76.5t-67.5 -232.5z" />
<glyph unicode="&#xf1;" horiz-adv-x="1251" d="M135 0v1088h275v-159q55 84 104 121q88 66 223 66q169 0 276.5 -88.5t107.5 -293.5v-734h-292v663q0 86 -23 132q-42 84 -160 84q-145 0 -199 -123q-28 -65 -28 -166v-590h-284zM256 1251q22 103 57 156q64 95 190 95q27 0 53 -6t44 -13l94 -35q42 -14 55 -18t29 -4 q48 0 67.5 25.5t28.5 60.5h133q-18 -105 -71.5 -176t-156.5 -71q-31 0 -88 15q-33 8 -63 18l-81 27q-17 6 -33 8.5t-32 2.5q-38 0 -62 -22q-24 -23 -34 -63h-130zM632 1119zM632 1119z" />
<glyph unicode="&#xf2;" horiz-adv-x="1251" d="M66 543q0 236 138 409t419 173t419 -173t138 -409q0 -240 -138 -410.5t-419 -170.5t-419 170.5t-138 410.5zM283 1536h317l192 -299h-206zM362 543q0 -164 67.5 -253t192.5 -89t192 89t67 253t-67 252.5t-192 88.5t-192.5 -88.5t-67.5 -252.5zM623 1119zM623 1119z" />
<glyph unicode="&#xf3;" horiz-adv-x="1251" d="M66 543q0 236 138 409t419 173t419 -173t138 -409q0 -240 -138 -410.5t-419 -170.5t-419 170.5t-138 410.5zM362 543q0 -164 67.5 -253t192.5 -89t192 89t67 253t-67 252.5t-192 88.5t-192.5 -88.5t-67.5 -252.5zM454 1237l192 299h318l-304 -299h-206zM623 1119z M623 1119z" />
<glyph unicode="&#xf4;" horiz-adv-x="1251" d="M66 543q0 236 138 409t419 173t419 -173t138 -409q0 -240 -138 -410.5t-419 -170.5t-419 170.5t-138 410.5zM260 1237l235 299h256l234 -299h-232l-130 168l-131 -168h-232zM362 543q0 -164 67.5 -253t192.5 -89t192 89t67 253t-67 252.5t-192 88.5t-192.5 -88.5 t-67.5 -252.5zM623 1119zM623 1119z" />
<glyph unicode="&#xf5;" horiz-adv-x="1251" d="M66 543q0 236 138 409t419 173t419 -173t138 -409q0 -240 -138 -410.5t-419 -170.5t-419 170.5t-138 410.5zM247 1251q22 103 57 156q64 95 190 95q27 0 53 -6t44 -13l94 -35q42 -14 55 -18t29 -4q48 0 67.5 25.5t28.5 60.5h133q-18 -105 -71.5 -176t-156.5 -71 q-31 0 -88 15q-33 8 -63 18l-81 27q-17 6 -33 8.5t-32 2.5q-38 0 -62 -22q-24 -23 -34 -63h-130zM362 543q0 -164 67.5 -253t192.5 -89t192 89t67 253t-67 252.5t-192 88.5t-192.5 -88.5t-67.5 -252.5zM623 1119zM623 1119z" />
<glyph unicode="&#xf6;" horiz-adv-x="1251" d="M66 543q0 236 138 409t419 173t419 -173t138 -409q0 -240 -138 -410.5t-419 -170.5t-419 170.5t-138 410.5zM292 1256v237h261v-237h-261zM362 543q0 -164 67.5 -253t192.5 -89t192 89t67 253t-67 252.5t-192 88.5t-192.5 -88.5t-67.5 -252.5zM623 1119zM623 1119z M692 1256v237h261v-237h-261z" />
<glyph unicode="&#xf7;" horiz-adv-x="1124" d="M73 412v261h1083v-261h-1083zM462 0v298h306v-298h-306zM462 786v297h306v-297h-306z" />
<glyph unicode="&#xf8;" horiz-adv-x="1251" d="M42 0l142 144q-69 93 -93.5 200.5t-24.5 197.5q0 250 146 416.5t390 166.5q142 0 230 -30.5t163 -92.5l138 145l71 -67l-143 -149q66 -87 92.5 -185.5t26.5 -193.5q0 -264 -151.5 -428.5t-417.5 -164.5q-132 0 -235 44q-58 25 -125 77l-135 -142zM362 549q0 -49 7 -98 t24 -84l415 441q-36 44 -106 64q-43 12 -84 12q-119 0 -187.5 -89.5t-68.5 -245.5zM445 279q42 -41 70 -56q46 -24 116 -24q123 0 186.5 96t63.5 244q0 50 -4.5 81.5t-18.5 97.5z" />
<glyph unicode="&#xf9;" horiz-adv-x="1251" d="M125 433v657h292v-657q0 -93 22 -140q39 -83 153 -83q146 0 200 118q28 64 28 169v593h289v-1090h-277v154q-4 -5 -20 -30t-38 -44q-67 -60 -129.5 -82t-146.5 -22q-242 0 -326 174q-47 96 -47 283zM277 1536h317l192 -299h-206zM617 1119zM617 1119z" />
<glyph unicode="&#xfa;" horiz-adv-x="1251" d="M125 433v657h292v-657q0 -93 22 -140q39 -83 153 -83q146 0 200 118q28 64 28 169v593h289v-1090h-277v154q-4 -5 -20 -30t-38 -44q-67 -60 -129.5 -82t-146.5 -22q-242 0 -326 174q-47 96 -47 283zM448 1237l192 299h318l-304 -299h-206zM617 1119zM617 1119z" />
<glyph unicode="&#xfb;" horiz-adv-x="1251" d="M125 433v657h292v-657q0 -93 22 -140q39 -83 153 -83q146 0 200 118q28 64 28 169v593h289v-1090h-277v154q-4 -5 -20 -30t-38 -44q-67 -60 -129.5 -82t-146.5 -22q-242 0 -326 174q-47 96 -47 283zM254 1237l235 299h256l234 -299h-232l-130 168l-131 -168h-232z M617 1119zM617 1119z" />
<glyph unicode="&#xfc;" horiz-adv-x="1251" d="M125 433v657h292v-657q0 -93 22 -140q39 -83 153 -83q146 0 200 118q28 64 28 169v593h289v-1090h-277v154q-4 -5 -20 -30t-38 -44q-67 -60 -129.5 -82t-146.5 -22q-242 0 -326 174q-47 96 -47 283zM286 1256v237h261v-237h-261zM617 1119zM617 1119zM686 1256v237h261 v-237h-261z" />
<glyph unicode="&#xfd;" d="M21 1090h317l238 -804l225 804h303l-374 -1072q-108 -310 -171 -384.5t-252 -74.5q-38 0 -61 0.5t-69 3.5v228l36 -2q42 -2 80 3t64 23q25 17 46.5 71t17.5 66zM394 1237l192 299h318l-304 -299h-206zM563 1119zM563 1119z" />
<glyph unicode="&#xfe;" horiz-adv-x="1251" d="M128 -427v1899h284v-529q51 89 128.5 132.5t179.5 43.5q210 0 335 -141.5t125 -425.5q0 -245 -117.5 -413t-338.5 -168q-87 0 -146 23q-102 39 -166 150v-571h-284zM405 543q0 -156 61 -245t182 -89q154 0 211 150q30 78 30 194q0 146 -65 230t-181 84q-97 0 -167.5 -77 t-70.5 -247z" />
<glyph unicode="&#xff;" d="M21 1090h317l238 -804l225 804h303l-374 -1072q-108 -310 -171 -384.5t-252 -74.5q-38 0 -61 0.5t-69 3.5v228l36 -2q42 -2 80 3t64 23q25 17 46.5 71t17.5 66zM232 1256v237h261v-237h-261zM563 1119zM563 1119zM632 1256v237h261v-237h-261z" />
<glyph unicode="&#x152;" horiz-adv-x="2048" d="M75 734q0 343 185 588q163 183 413 183q127 0 220 -48q51 -26 112 -85v97h962v-256h-683v-322h636v-247h-636v-384h683v-260h-962v101q-52 -78 -138 -108.5t-192 -30.5q-252 0 -415 184q-185 245 -185 588zM376 720q0 -209 87 -359.5t262 -150.5q112 0 186.5 60.5 t74.5 129.5v654q0 78 -68 135t-196 57q-178 0 -262 -155t-84 -371z" />
<glyph unicode="&#x153;" horiz-adv-x="1933" d="M63 536q0 273 149 425.5t392 152.5q144 0 237 -44t154 -115q80 78 138 109q95 50 233 50q127 0 229 -51t174 -147q58 -77 78 -200q16 -80 16 -242h-745q6 -127 63.5 -203.5t163.5 -76.5q89 0 144 28.5t75 99.5h284q-19 -141 -146.5 -248.5t-363.5 -107.5q-135 0 -235 55 q-58 32 -127 102q-55 -64 -116 -98q-108 -61 -268 -61q-244 0 -386.5 159t-142.5 413zM357 542q0 -172 61 -261t180 -89q144 0 203 98t59 247q0 162 -57 254.5t-200 92.5q-157 0 -215 -145q-31 -76 -31 -197zM1121 658h452q-2 83 -32 136q-56 99 -201 99q-66 0 -117 -29 q-96 -57 -102 -206z" />
<glyph unicode="&#x178;" horiz-adv-x="1366" d="M35 1474h363l306 -642l293 642h349l-493 -920v-554h-308v554zM360 1611v237h261v-237h-261zM691 1474zM691 1474zM760 1611v237h261v-237h-261z" />
<glyph unicode="&#x2c6;" horiz-adv-x="682" d="M-74 1237l235 299h256l234 -299h-232l-130 168l-131 -168h-232zM289 1119z" />
<glyph unicode="&#x2dc;" horiz-adv-x="682" d="M-88 1251q22 103 57 156q64 95 190 95q27 0 53 -6t44 -13l94 -35q42 -14 55 -18t29 -4q48 0 67.5 25.5t28.5 60.5h133q-18 -105 -71.5 -176t-156.5 -71q-31 0 -88 15q-33 8 -63 18l-81 27q-17 6 -33 8.5t-32 2.5q-38 0 -62 -22q-24 -23 -34 -63h-130zM288 1119z" />
<glyph unicode="&#x2000;" horiz-adv-x="983" />
<glyph unicode="&#x2001;" horiz-adv-x="1966" />
<glyph unicode="&#x2002;" horiz-adv-x="983" />
<glyph unicode="&#x2003;" horiz-adv-x="1966" />
<glyph unicode="&#x2004;" horiz-adv-x="655" />
<glyph unicode="&#x2005;" horiz-adv-x="491" />
<glyph unicode="&#x2006;" horiz-adv-x="327" />
<glyph unicode="&#x2007;" horiz-adv-x="327" />
<glyph unicode="&#x2008;" horiz-adv-x="245" />
<glyph unicode="&#x2009;" horiz-adv-x="393" />
<glyph unicode="&#x200a;" horiz-adv-x="109" />
<glyph unicode="&#x2010;" horiz-adv-x="682" d="M47 436v270h574v-270h-574z" />
<glyph unicode="&#x2011;" horiz-adv-x="682" d="M47 436v270h574v-270h-574z" />
<glyph unicode="&#x2012;" horiz-adv-x="682" d="M47 436v270h574v-270h-574z" />
<glyph unicode="&#x2013;" d="M-5 464v218h1147v-218h-1147z" />
<glyph unicode="&#x2014;" horiz-adv-x="2048" d="M241 464v218h1565v-218h-1565z" />
<glyph unicode="&#x2018;" horiz-adv-x="569" d="M137 926v211q0 153 72.5 238.5t207.5 112.5v-104q-103 -30 -137 -112q-19 -44 -15 -83h156v-263h-284z" />
<glyph unicode="&#x2019;" horiz-adv-x="569" d="M132 1206v263h285v-211q0 -151 -73.5 -238t-206.5 -113v105q98 31 135 105q20 44 17 89h-157z" />
<glyph unicode="&#x201a;" horiz-adv-x="569" d="M146 0v289h290v-237q-1 -116 -24 -180q-38 -99 -118 -151q-47 -30 -143 -58v109q84 28 118 75t34 153h-157z" />
<glyph unicode="&#x201c;" horiz-adv-x="1024" d="M139 926v211q0 150 71.5 237t208.5 114v-104q-102 -32 -137 -110q-18 -41 -15 -85h157v-263h-285zM613 926v211q0 152 73.5 238t206.5 113v-104q-101 -31 -136 -112q-20 -43 -16 -83h157v-263h-285z" />
<glyph unicode="&#x201d;" horiz-adv-x="1024" d="M151 1206v263h285v-211q0 -147 -71.5 -236t-208.5 -115v105q101 32 136 110q19 41 16 84h-157zM623 1206v263h284v-211q0 -143 -69.5 -233.5t-209.5 -117.5v105q103 31 137 114q14 33 14 80h-156z" />
<glyph unicode="&#x201e;" horiz-adv-x="1024" d="M146 0v289h290v-237q-1 -116 -24 -180q-38 -99 -118 -151q-47 -30 -143 -58v109q84 28 118 75t34 153h-157zM594 0v289h290v-237q-4 -124 -24 -185q-24 -70 -93.5 -126.5t-167.5 -77.5v109q99 28 133 105q19 44 19 123h-157z" />
<glyph unicode="&#x2022;" horiz-adv-x="717" d="M145 734q0 96 62.5 158t158.5 62t158.5 -62t62.5 -158t-62.5 -159t-158.5 -63t-158.5 63t-62.5 159z" />
<glyph unicode="&#x2026;" horiz-adv-x="2048" d="M189 0v298h306v-298h-306zM872 0v298h306v-298h-306zM1554 0v298h306v-298h-306z" />
<glyph unicode="&#x202f;" horiz-adv-x="393" />
<glyph unicode="&#x2039;" horiz-adv-x="682" d="M170 444v238l342 294v-238l-204 -175l204 -174v-238z" />
<glyph unicode="&#x203a;" horiz-adv-x="682" d="M170 151v238l204 174l-204 175v238l342 -294v-238z" />
<glyph unicode="&#x205f;" horiz-adv-x="491" />
<glyph unicode="&#x20ac;" horiz-adv-x="1524" d="M68 419l42 201h247q-4 50 -4 105q0 48 3 94h-288l42 201h274q42 179 143 300q151 182 385 182q312 0 457 -244q80 -137 86 -275h-259q-25 106 -65 160q-70 96 -209 96q-141 0 -223 -136q-22 -37 -38 -83h397l-42 -201h-395q-3 -47 -3 -99q0 -53 3 -100h370l-42 -201h-283 q16 -39 38 -71q86 -123 219 -123q136 0 207 106q40 57 66 171h256q-34 -241 -172 -392t-354 -151q-267 0 -420 204q-80 107 -118 256h-320z" />
<glyph unicode="&#x2122;" horiz-adv-x="2048" d="M203 1296v178h655v-178h-221v-564h-216v564h-218zM924 732v742h308l135 -427l133 427h308v-742h-197v538l-161 -538h-168l-161 538v-538h-197z" />
<hkern u1="&#x20;" u2="Y" k="36" />
<hkern u1="&#x20;" u2="A" k="75" />
<hkern u1="&#x31;" u2="&#x31;" k="112" />
<hkern u1="A" u2="&#x2019;" k="112" />
<hkern u1="A" u2="y" k="75" />
<hkern u1="A" u2="w" k="36" />
<hkern u1="A" u2="v" k="75" />
<hkern u1="A" u2="Y" k="188" />
<hkern u1="A" u2="W" k="112" />
<hkern u1="A" u2="V" k="151" />
<hkern u1="A" u2="T" k="151" />
<hkern u1="A" u2="&#x20;" k="75" />
<hkern u1="F" u2="A" k="112" />
<hkern u1="F" u2="&#x2e;" k="227" />
<hkern u1="F" u2="&#x2c;" k="227" />
<hkern u1="L" u2="&#x2019;" k="112" />
<hkern u1="L" u2="y" k="75" />
<hkern u1="L" u2="Y" k="188" />
<hkern u1="L" u2="W" k="112" />
<hkern u1="L" u2="V" k="151" />
<hkern u1="L" u2="T" k="151" />
<hkern u1="L" u2="&#x20;" k="36" />
<hkern u1="P" u2="A" k="151" />
<hkern u1="P" u2="&#x2e;" k="264" />
<hkern u1="P" u2="&#x2c;" k="264" />
<hkern u1="P" u2="&#x20;" k="36" />
<hkern u1="R" u2="Y" k="75" />
<hkern u1="R" u2="W" k="36" />
<hkern u1="R" u2="V" k="36" />
<hkern u1="T" u2="y" k="151" />
<hkern u1="T" u2="w" k="151" />
<hkern u1="T" u2="u" k="151" />
<hkern u1="T" u2="s" k="151" />
<hkern u1="T" u2="r" k="112" />
<hkern u1="T" u2="o" k="151" />
<hkern u1="T" u2="i" k="36" />
<hkern u1="T" u2="e" k="151" />
<hkern u1="T" u2="c" k="151" />
<hkern u1="T" u2="a" k="151" />
<hkern u1="T" u2="O" k="36" />
<hkern u1="T" u2="A" k="151" />
<hkern u1="T" u2="&#x3b;" k="227" />
<hkern u1="T" u2="&#x3a;" k="227" />
<hkern u1="T" u2="&#x2e;" k="227" />
<hkern u1="T" u2="&#x2d;" k="112" />
<hkern u1="T" u2="&#x2c;" k="227" />
<hkern u1="V" u2="y" k="75" />
<hkern u1="V" u2="u" k="75" />
<hkern u1="V" u2="r" k="112" />
<hkern u1="V" u2="o" k="151" />
<hkern u1="V" u2="i" k="36" />
<hkern u1="V" u2="e" k="112" />
<hkern u1="V" u2="a" k="112" />
<hkern u1="V" u2="A" k="151" />
<hkern u1="V" u2="&#x3b;" k="112" />
<hkern u1="V" u2="&#x3a;" k="112" />
<hkern u1="V" u2="&#x2e;" k="188" />
<hkern u1="V" u2="&#x2d;" k="112" />
<hkern u1="V" u2="&#x2c;" k="188" />
<hkern u1="W" u2="y" k="36" />
<hkern u1="W" u2="u" k="36" />
<hkern u1="W" u2="r" k="36" />
<hkern u1="W" u2="o" k="36" />
<hkern u1="W" u2="i" k="18" />
<hkern u1="W" u2="e" k="36" />
<hkern u1="W" u2="a" k="75" />
<hkern u1="W" u2="A" k="112" />
<hkern u1="W" u2="&#x3b;" k="36" />
<hkern u1="W" u2="&#x3a;" k="36" />
<hkern u1="W" u2="&#x2e;" k="112" />
<hkern u1="W" u2="&#x2d;" k="40" />
<hkern u1="W" u2="&#x2c;" k="112" />
<hkern u1="Y" u2="v" k="112" />
<hkern u1="Y" u2="u" k="112" />
<hkern u1="Y" u2="q" k="151" />
<hkern u1="Y" u2="p" k="112" />
<hkern u1="Y" u2="o" k="151" />
<hkern u1="Y" u2="i" k="75" />
<hkern u1="Y" u2="e" k="112" />
<hkern u1="Y" u2="a" k="112" />
<hkern u1="Y" u2="A" k="188" />
<hkern u1="Y" u2="&#x3b;" k="151" />
<hkern u1="Y" u2="&#x3a;" k="151" />
<hkern u1="Y" u2="&#x2e;" k="227" />
<hkern u1="Y" u2="&#x2d;" k="112" />
<hkern u1="Y" u2="&#x2c;" k="227" />
<hkern u1="Y" u2="&#x20;" k="36" />
<hkern u1="f" u2="&#x2019;" k="-37" />
<hkern u1="r" u2="&#x2019;" k="-76" />
<hkern u1="r" u2="&#x2e;" k="112" />
<hkern u1="r" u2="&#x2c;" k="112" />
<hkern u1="v" u2="&#x2e;" k="151" />
<hkern u1="v" u2="&#x2c;" k="151" />
<hkern u1="w" u2="&#x2e;" k="75" />
<hkern u1="w" u2="&#x2c;" k="75" />
<hkern u1="y" u2="&#x2e;" k="151" />
<hkern u1="y" u2="&#x2c;" k="151" />
<hkern u1="&#x2018;" u2="&#x2018;" k="75" />
<hkern u1="&#x2019;" u2="&#x2019;" k="75" />
<hkern u1="&#x2019;" u2="s" k="75" />
<hkern u1="&#x2019;" u2="&#x20;" k="112" />
</font>
</defs></svg>

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Binary file not shown.

BIN
app/assets/fonts/helvetica.eot Executable file

Binary file not shown.

349
app/assets/fonts/helvetica.svg Executable file
View File

@ -0,0 +1,349 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata></metadata>
<defs>
<font id="helveticaregular" horiz-adv-x="1139" >
<font-face units-per-em="2048" ascent="1638" descent="-410" />
<missing-glyph horiz-adv-x="569" />
<glyph unicode="&#xfb01;" horiz-adv-x="1024" d="M28 924v142h149v168q4 112 39 164q63 92 243 92q17 0 35 -1t41 -3v-164q-28 2 -40.5 2.5t-23.5 0.5q-82 0 -98 -42.5t-16 -216.5h178v-142h-180v-924h-178v924h-149zM708 0v1066h180v-1066h-180zM708 1265v204h180v-204h-180z" />
<glyph unicode="&#xfb02;" horiz-adv-x="1024" d="M28 924v142h149v190q0 119 73.5 176.5t196.5 57.5q24 0 43.5 -1.5t44.5 -5.5v-161q-28 2 -40.5 2.5t-23.5 0.5q-76 0 -101 -44q-15 -25 -15 -82v-133h180v-142h-180v-924h-178v924h-149zM704 0v1469h180v-1469h-180z" />
<glyph horiz-adv-x="0" />
<glyph horiz-adv-x="0" />
<glyph horiz-adv-x="0" />
<glyph unicode="&#x9;" horiz-adv-x="569" />
<glyph unicode="&#xd;" horiz-adv-x="569" />
<glyph unicode="&#xa;" horiz-adv-x="569" />
<glyph unicode=" " horiz-adv-x="569" />
<glyph unicode="&#x09;" horiz-adv-x="569" />
<glyph unicode="&#xa0;" horiz-adv-x="569" />
<glyph unicode="!" horiz-adv-x="569" d="M237 0v208h199v-208h-199zM237 986v483h203v-483l-49 -636h-102z" />
<glyph unicode="&#x22;" horiz-adv-x="727" d="M82 1469h181l-29 -588h-121zM424 1469h182l-30 -588h-121z" />
<glyph unicode="#" d="M0 445l30 116h233l94 344h-232l31 116h232l119 448h149l-121 -448h221l123 448h147l-121 -448h232l-31 -116h-232l-95 -344h233l-31 -116h-230l-123 -445h-147l121 445h-223l-119 -445h-149l121 445h-232zM412 561h218l95 344h-221z" />
<glyph unicode="$" d="M64 436h177q8 -137 43 -200q62 -113 230 -127v545q-216 41 -319 137t-103 266q0 152 111.5 274t312.5 124v133h95v-131q199 -14 305.5 -117.5t111.5 -273.5h-175q-7 76 -41 131q-63 101 -201 106v-486q232 -65 315 -122q135 -94 135 -278q0 -266 -173 -378 q-96 -62 -277 -82v-194h-95v194q-291 19 -395 206q-57 101 -57 273zM272 1069q0 -99 65.5 -155t176.5 -78v470q-131 -5 -186.5 -80t-55.5 -157zM611 104q171 8 236 125q34 60 34 139q0 125 -92 190q-53 38 -178 72v-526z" />
<glyph unicode="%" horiz-adv-x="1821" d="M66 1040q0 144 102 246.5t246 102.5q145 0 247 -102.5t102 -246.5t-102 -246t-247 -102q-144 0 -246 102t-102 246zM208 1040q0 -85 60.5 -145.5t145.5 -60.5q86 0 146.5 60.5t60.5 145.5t-60.5 145.5t-146.5 60.5q-85 0 -145.5 -60t-60.5 -146zM450 -38l801 1464h111 l-801 -1464h-111zM1047 348q0 144 102 246t247 102q144 0 246 -102t102 -246t-102 -246t-246 -102q-145 0 -247 102t-102 246zM1189 348q0 -85 60.5 -145.5t146.5 -60.5q85 0 145.5 60.5t60.5 145.5t-60.5 145.5t-145.5 60.5q-86 0 -146.5 -60.5t-60.5 -145.5z" />
<glyph unicode="&#x26;" horiz-adv-x="1366" d="M89 368q0 167 101 279q62 68 231 170q-93 107 -124.5 180t-31.5 141q0 142 96 235.5t257 93.5q153 0 239 -87t86 -208q0 -141 -89 -247q-52 -62 -174 -143l268 -320q27 80 37.5 119.5t21.5 110.5h171q-17 -141 -68 -270.5t-51 -104.5l261 -317h-232l-138 168 q-82 -89 -150 -130q-119 -72 -274 -72q-229 0 -333 123.5t-104 278.5zM271 367q0 -117 85.5 -180t182.5 -63q111 0 191 51t123 114l-332 405q-141 -94 -184 -144q-66 -75 -66 -183zM440 1160q0 -61 33.5 -117t111.5 -145q95 67 131 109q59 68 59 151q0 65 -43 112t-116 47 q-111 0 -154 -74q-22 -38 -22 -83z" />
<glyph unicode="'" horiz-adv-x="391" d="M156 1469h182l-33 -588h-116z" />
<glyph unicode="(" horiz-adv-x="682" d="M142 526q0 296 93 527q59 147 246 440h125q-157 -305 -204 -449q-71 -219 -71 -506q0 -290 81 -530q50 -148 197 -426h-121q-146 228 -181 291t-76 171q-56 148 -78 316q-11 87 -11 166z" />
<glyph unicode=")" horiz-adv-x="682" d="M68 1493h121q154 -246 186.5 -303.5t70.5 -158.5q48 -125 68.5 -247t20.5 -235q0 -296 -94 -528q-59 -149 -245 -439h-125q159 310 205 452q70 215 70 504t-81 529q-50 148 -197 426z" />
<glyph unicode="*" horiz-adv-x="797" d="M78 1211l40 111l216 -78v225h116v-223l218 76l40 -111l-218 -71l135 -188l-99 -71l-131 195l-132 -195l-102 71l137 188z" />
<glyph unicode="+" horiz-adv-x="1196" d="M92 438v168h436v439h171v-439h436v-168h-436v-438h-171v438h-436z" />
<glyph unicode="," horiz-adv-x="569" d="M170 0v218h214v-202q0 -119 -48 -209t-166 -111v95q69 12 97 97q15 45 15 87q0 7 -0.5 12.5t-2.5 12.5h-109z" />
<glyph unicode="-" horiz-adv-x="682" d="M85 478v185h502v-185h-502z" />
<glyph unicode="." horiz-adv-x="569" d="M175 0v218h209v-218h-209z" />
<glyph unicode="/" horiz-adv-x="569" d="M0 0l466 1469h152l-466 -1469h-152z" />
<glyph unicode="0" d="M64 687q0 244 63 419q118 326 427 326q278 0 402 -229q96 -177 96 -485q0 -292 -87 -483q-126 -274 -412 -274q-258 0 -384 224q-105 187 -105 502zM259 680q0 -219 47 -352q72 -203 246 -203q140 0 223 124t83 462q0 244 -60 401.5t-233 157.5q-159 0 -232.5 -149.5 t-73.5 -440.5z" />
<glyph unicode="1" d="M196 1014v138q195 19 272 63.5t115 210.5h142v-1426h-192v1014h-337z" />
<glyph unicode="2" d="M64 0q10 185 76.5 322t259.5 249l192 111q129 75 181 128q82 83 82 190q0 125 -75 198.5t-200 73.5q-185 0 -256 -140q-38 -75 -42 -208h-183q3 187 69 305q117 208 413 208q246 0 359.5 -133t113.5 -296q0 -172 -121 -294q-70 -71 -251 -172l-137 -76q-98 -54 -154 -103 q-100 -87 -126 -193h782v-170h-983z" />
<glyph unicode="3" d="M49 440h188q12 -139 52 -202q70 -113 253 -113q142 0 228 76t86 196q0 148 -90.5 207t-251.5 59q-18 0 -36.5 -0.5t-37.5 -1.5v159q28 -3 47 -4t41 -1q101 0 166 32q114 56 114 200q0 107 -76 165t-177 58q-180 0 -249 -120q-38 -66 -43 -188h-178q0 160 64 272 q110 200 387 200q219 0 339 -97.5t120 -282.5q0 -132 -71 -214q-44 -51 -114 -80q113 -31 176.5 -119.5t63.5 -216.5q0 -205 -135 -334t-383 -129q-254 0 -368.5 139.5t-114.5 339.5z" />
<glyph unicode="4" d="M52 350v176l656 910h152v-929h211v-157h-211v-350h-180v350h-628zM218 507h459v649z" />
<glyph unicode="5" d="M66 365h187q18 -154 143 -213q64 -30 148 -30q160 0 237 102t77 226q0 150 -91.5 232t-219.5 82q-93 0 -159.5 -36t-113.5 -100l-156 9l109 771h744v-174h-609l-61 -398q50 38 95 57q80 33 185 33q197 0 334 -127t137 -322q0 -203 -125.5 -358t-400.5 -155 q-175 0 -309.5 98.5t-150.5 302.5z" />
<glyph unicode="6" d="M77 629q0 267 65 453q125 356 457 356q240 0 334.5 -124.5t94.5 -256.5h-178q-16 85 -51 133q-65 90 -197 90q-151 0 -240 -139.5t-99 -399.5q62 91 156 136q86 40 192 40q180 0 314 -115t134 -343q0 -195 -127 -345.5t-362 -150.5q-201 0 -347 152.5t-146 513.5z M286 444q0 -136 79.5 -228.5t220.5 -92.5q142 0 212.5 95.5t70.5 225.5q0 110 -63 209.5t-229 99.5q-116 0 -203.5 -77t-87.5 -232z" />
<glyph unicode="7" d="M75 1227v181h996v-157q-69 -67 -183.5 -233t-202.5 -358q-87 -187 -132 -341q-29 -99 -75 -319h-199q68 410 300 816q137 238 288 411h-792z" />
<glyph unicode="8" d="M66 402q0 127 62 219.5t184 141.5q-75 32 -117 75q-79 80 -79 208q0 160 116 275t329 115q206 0 323 -108.5t117 -253.5q0 -134 -68 -217q-38 -47 -118 -92q89 -41 140 -94q95 -100 95 -260q0 -189 -127 -320.5t-359 -131.5q-209 0 -353.5 113.5t-144.5 329.5zM263 398 q0 -112 74.5 -193.5t230.5 -81.5q125 0 207.5 67.5t82.5 201.5q0 139 -85 211t-218 72q-129 0 -210.5 -73.5t-81.5 -203.5zM305 1047q0 -101 75 -158t177 -57q119 0 186 66.5t67 158.5q0 80 -64 147t-195 67q-130 0 -188 -67t-58 -157z" />
<glyph unicode="9" d="M73 943q0 195 119 343t351 148q313 0 432 -282q66 -155 66 -388q0 -263 -79 -466q-131 -338 -444 -338q-210 0 -319 110t-109 276h182q8 -149 115 -206q55 -30 124 -30q129 0 220 107.5t129 436.5q-60 -95 -148.5 -133.5t-190.5 -38.5q-207 0 -327.5 129t-120.5 332z M260 945q0 -140 68 -222.5t217 -82.5q107 0 195.5 70.5t88.5 246.5q0 158 -79.5 235.5t-202.5 77.5q-132 0 -209.5 -88.5t-77.5 -236.5z" />
<glyph unicode=":" horiz-adv-x="569" d="M227 0v218h209v-218h-209zM227 839v218h209v-218h-209z" />
<glyph unicode=";" horiz-adv-x="569" d="M227 0v218h213v-202q0 -107 -31 -179q-52 -118 -182 -141v95q70 13 97 93q14 42 14 92q0 5 -0.5 8.5t-1.5 15.5h-109zM227 839v218h213v-218h-213z" />
<glyph unicode="&#x3c;" horiz-adv-x="1196" d="M28 440v166l1169 458v-180l-956 -361l956 -362v-180z" />
<glyph unicode="=" horiz-adv-x="1196" d="M92 222v171h1043v-171h-1043zM92 654v168h1043v-168h-1043z" />
<glyph unicode="&#x3e;" horiz-adv-x="1196" d="M28 -19v180l955 362l-955 361v180l1169 -458v-168z" />
<glyph unicode="?" d="M156 1009q0 216 122 347.5t335 131.5q197 0 315.5 -112.5t118.5 -287.5q0 -106 -43.5 -172t-175.5 -194q-96 -93 -124.5 -157.5t-28.5 -190.5h-178q0 143 34 230.5t149 200.5l80 79q36 34 58 71q40 65 40 135q0 98 -58.5 170t-193.5 72q-167 0 -231 -124 q-36 -69 -41 -199h-178zM493 0v208h199v-208h-199z" />
<glyph unicode="@" horiz-adv-x="2079" d="M225 701q0 326 220 554q244 254 655 254q356 0 560 -180q191 -170 191 -441q0 -228 -136.5 -389.5t-305.5 -161.5q-99 0 -146 47.5t-47 114.5q0 11 2 23t5 25q-53 -115 -134 -162.5t-167 -47.5q-123 0 -199.5 89t-76.5 229q0 199 130.5 351t280.5 152q102 0 168.5 -59 t70.5 -142l50 168h147l-133 -438q-15 -51 -22 -82t-7 -55q0 -45 27.5 -65.5t62.5 -20.5q114 0 204.5 119t90.5 311q0 232 -162 364.5t-436 132.5q-380 0 -581 -222q-172 -189 -172 -475q0 -250 164 -420q192 -201 547 -201q166 0 309 52.5t262 141.5l66 -90 q-90 -80 -269 -150t-394 -70q-418 0 -644 261q-181 209 -181 483zM812 652q0 -98 43 -149.5t108 -51.5q135 0 210.5 157.5t75.5 284.5q0 62 -41.5 111.5t-114.5 49.5q-114 0 -197.5 -134.5t-83.5 -267.5z" />
<glyph unicode="A" horiz-adv-x="1366" d="M30 0l553 1469h225l533 -1469h-218l-149 440h-581l-159 -440h-204zM450 602h460l-223 649zM686 1469z" />
<glyph unicode="B" horiz-adv-x="1366" d="M151 0v1469h631q258 0 367 -154q64 -91 64 -210q0 -139 -79 -228q-41 -47 -118 -86q113 -43 169 -97q99 -96 99 -265q0 -142 -89 -257q-133 -172 -423 -172h-621zM346 170h429q183 0 261 106q49 67 49 162q0 160 -143 218q-76 31 -201 31h-395v-517zM346 848h362 q126 0 196 35q110 55 110 198q0 144 -117 194q-66 28 -196 28h-355v-455z" />
<glyph unicode="C" horiz-adv-x="1479" d="M90 750q0 325 172 533q186 226 513 226q279 0 433 -147t171 -334h-194q-33 142 -131.5 225t-276.5 83q-217 0 -350.5 -152.5t-133.5 -467.5q0 -258 120.5 -418.5t359.5 -160.5q220 0 335 169q61 89 91 234h194q-26 -232 -172 -389q-175 -189 -472 -189q-256 0 -430 155 q-229 205 -229 633zM735 1509z" />
<glyph unicode="D" horiz-adv-x="1479" d="M165 0v1469h595q303 0 470 -215q149 -194 149 -497q0 -234 -88 -423q-155 -334 -533 -334h-593zM365 170h355q101 0 166 21q116 39 190 150q59 89 85 228q15 83 15 154q0 273 -108.5 424t-349.5 151h-353v-1128z" />
<glyph unicode="E" horiz-adv-x="1366" d="M175 0v1469h1071v-180h-877v-446h811v-170h-811v-498h892v-175h-1086zM718 1469z" />
<glyph unicode="F" horiz-adv-x="1251" d="M175 0v1469h1019v-180h-820v-446h721v-175h-721v-668h-199z" />
<glyph unicode="G" horiz-adv-x="1593" d="M99 712q0 369 200 587q190 208 492 208q207 0 358 -80q219 -115 268 -403h-197q-36 161 -149 234.5t-285 73.5q-204 0 -343.5 -153t-139.5 -456q0 -262 115 -426.5t375 -164.5q199 0 329.5 115.5t133.5 373.5h-460v165h645v-786h-128l-48 189q-101 -111 -179 -154 q-131 -74 -333 -74q-261 0 -449 169q-205 212 -205 582zM758 1509z" />
<glyph unicode="H" horiz-adv-x="1479" d="M161 0v1469h201v-607h764v607h201v-1469h-201v687h-764v-687h-201z" />
<glyph unicode="I" horiz-adv-x="569" d="M201 0v1469h201v-1469h-201z" />
<glyph unicode="J" horiz-adv-x="1024" d="M35 369v105h187v-105q0 -120 53.5 -180.5t166.5 -60.5q159 0 208 109q30 67 30 253v979h197v-1031q0 -186 -55 -289q-102 -188 -388 -188q-165 0 -282 89.5t-117 318.5z" />
<glyph unicode="K" horiz-adv-x="1366" d="M156 0v1469h194v-716l716 716h275l-611 -592l628 -877h-259l-514 737l-235 -225v-512h-194z" />
<glyph unicode="L" d="M156 0v1469h199v-1294h744v-175h-943z" />
<glyph unicode="M" horiz-adv-x="1706" d="M151 0v1469h285l422 -1242l419 1242h282v-1469h-189v867q0 45 2 149t2 223l-419 -1239h-197l-422 1239v-45q0 -54 2.5 -164.5t2.5 -162.5v-867h-190z" />
<glyph unicode="N" horiz-adv-x="1479" d="M156 0v1469h235l742 -1190v1190h189v-1469h-223l-753 1189v-1189h-190zM726 1469z" />
<glyph unicode="O" horiz-adv-x="1593" d="M80 727q0 298 148 510q190 272 562 272q389 0 576 -250q146 -195 146 -499q0 -329 -167 -547q-196 -256 -559 -256q-339 0 -533 224q-173 216 -173 546zM286 714q0 -244 123.5 -411.5t400.5 -167.5q263 0 380.5 188.5t117.5 433.5q0 259 -135.5 417t-370.5 158 q-228 0 -372 -156.5t-144 -461.5zM796 1509z" />
<glyph unicode="P" horiz-adv-x="1366" d="M175 0v1469h661q196 0 316 -110.5t120 -310.5q0 -172 -107 -299.5t-329 -127.5h-462v-621h-199zM374 789h396q134 0 217.5 57t83.5 201q0 162 -120 220q-66 31 -181 31h-396v-509z" />
<glyph unicode="Q" horiz-adv-x="1593" d="M80 727q0 298 148 510q190 272 562 272q389 0 576 -250q146 -195 146 -499q0 -142 -35 -273q-53 -200 -179 -326l202 -157l-100 -121l-227 173q-82 -45 -177.5 -72t-208.5 -27q-342 0 -536 224q-171 218 -171 546zM286 714q0 -265 133.5 -422t391.5 -157q62 0 116 8.5 t94 33.5l-161 126l100 123l192 -149q91 104 123.5 233t32.5 247q0 259 -135.5 417t-370.5 158q-238 0 -377 -151.5t-139 -466.5z" />
<glyph unicode="R" horiz-adv-x="1479" d="M180 0v1469h680q168 0 277 -49q207 -94 207 -347q0 -132 -54.5 -216t-152.5 -135q86 -35 129.5 -92t48.5 -185l7 -197q3 -84 14 -125q18 -70 64 -90v-33h-244q-10 19 -16 49t-10 116l-12 245q-7 144 -107 193q-57 27 -179 27h-453v-630h-199zM379 796h460q140 0 221.5 56 t81.5 202q0 157 -114 214q-61 30 -163 30h-486v-502z" />
<glyph unicode="S" horiz-adv-x="1366" d="M99 474h187q7 -125 59 -203q99 -146 349 -146q112 0 204 32q178 62 178 222q0 120 -75 171q-76 50 -238 87l-199 45q-195 44 -276 97q-140 92 -140 275q0 198 137 325t388 127q231 0 392.5 -111.5t161.5 -356.5h-187q-15 118 -64 181q-91 115 -309 115q-176 0 -253 -74 t-77 -172q0 -108 90 -158q59 -32 267 -80l206 -47q149 -34 230 -93q140 -103 140 -299q0 -244 -177.5 -349t-412.5 -105q-274 0 -429 140q-152 136 -152 368v9zM688 1509z" />
<glyph unicode="T" horiz-adv-x="1251" d="M33 1294v175h1192v-175h-495v-1294h-202v1294h-495z" />
<glyph unicode="U" horiz-adv-x="1479" d="M170 644v825h202v-908q0 -160 60 -266q89 -160 300 -160q253 0 344 173q49 94 49 253v908h202v-825q0 -271 -73 -417q-134 -266 -506 -266t-505 266q-73 146 -73 417zM749 1469z" />
<glyph unicode="V" horiz-adv-x="1366" d="M52 1469h220l422 -1251l417 1251h223l-536 -1469h-211z" />
<glyph unicode="W" horiz-adv-x="1933" d="M37 1469h216l277 -1195l332 1195h216l332 -1195l277 1195h218l-386 -1469h-209l-339 1218l-341 -1218h-209z" />
<glyph unicode="X" horiz-adv-x="1366" d="M42 0l526 753l-493 716h249l375 -562l372 562h237l-493 -716l517 -753h-247l-396 604l-407 -604h-240z" />
<glyph unicode="Y" horiz-adv-x="1366" d="M42 1469h232l422 -706l422 706h233l-555 -877v-592h-199v592zM699 1469z" />
<glyph unicode="Z" horiz-adv-x="1251" d="M47 0v165l901 1129h-835v175h1091v-171l-906 -1123h906v-175h-1157zM659 1469z" />
<glyph unicode="[" horiz-adv-x="569" d="M128 -403v1882h384v-147h-214v-1588h214v-147h-384z" />
<glyph unicode="\" horiz-adv-x="569" d="M-69 1469h156l571 -1469h-156z" />
<glyph unicode="]" horiz-adv-x="569" d="M47 -256h213v1588h-213v147h384v-1882h-384v147z" />
<glyph unicode="^" horiz-adv-x="961" d="M120 606l351 863h154l353 -863h-163l-266 662l-265 -662h-164z" />
<glyph unicode="_" d="M0 -155h1139v-101h-1139v101z" />
<glyph unicode="`" horiz-adv-x="682" d="M38 1502h223l182 -289h-137z" />
<glyph unicode="a" d="M82 281q0 149 93 231t244 101l287 36q62 8 83 52q12 24 12 69q0 92 -65.5 133.5t-187.5 41.5q-141 0 -200 -76q-33 -42 -43 -125h-168q5 198 128.5 275.5t286.5 77.5q189 0 307 -72q117 -72 117 -224v-617q0 -28 11.5 -45t48.5 -17q12 0 27 1.5t32 4.5v-133 q-42 -12 -64 -15t-60 -3q-93 0 -135 66q-22 35 -31 99q-55 -72 -158 -125t-227 -53q-149 0 -243.5 90.5t-94.5 226.5zM270 285q0 -78 57 -123t135 -45q95 0 184 44q150 73 150 239v145q-33 -21 -85 -35t-102 -20l-109 -14q-98 -13 -147 -41q-83 -47 -83 -150zM557 1097z" />
<glyph unicode="b" d="M118 0v1474h175v-533q59 77 141 117.5t178 40.5q200 0 324.5 -137.5t124.5 -405.5q0 -254 -123 -422t-341 -168q-122 0 -206 59q-50 35 -107 112v-137h-166zM283 547q0 -151 38 -245q71 -177 265 -177q146 0 218.5 116t72.5 306q0 169 -72.5 280t-213.5 111 q-123 0 -215.5 -91t-92.5 -300z" />
<glyph unicode="c" horiz-adv-x="1024" d="M59 506q0 282 137 439t349 157q181 0 294.5 -88t136.5 -303h-175q-16 99 -73 164.5t-183 65.5q-172 0 -246 -168q-48 -109 -48 -269q0 -161 68 -271t214 -110q112 0 177.5 68.5t90.5 187.5h175q-30 -213 -150 -311.5t-307 -98.5q-210 0 -335 153.5t-125 383.5zM517 1097z " />
<glyph unicode="d" d="M56 513q0 234 119.5 405.5t341.5 171.5q123 0 206 -52q48 -30 109 -105v541h173v-1474h-162v149q-63 -99 -149 -143t-197 -44q-179 0 -310 150.5t-131 400.5zM246 523q0 -172 73 -288t234 -116q125 0 205.5 107.5t80.5 308.5q0 203 -83 300.5t-205 97.5 q-136 0 -220.5 -104t-84.5 -306z" />
<glyph unicode="e" d="M72 515q0 258 140 419t366 161q114 0 221 -53.5t163 -138.5q54 -81 72 -189q16 -74 16 -236h-785q5 -163 77 -261.5t223 -98.5q141 0 225 93q48 54 68 125h177q-7 -59 -46.5 -131.5t-88.5 -118.5q-82 -80 -203 -108q-65 -16 -147 -16q-200 0 -339 145.5t-139 407.5z M270 621h595q-11 117 -51 187q-74 130 -247 130q-124 0 -208 -89.5t-89 -227.5zM561 1097z" />
<glyph unicode="f" horiz-adv-x="569" d="M28 924v142h149v168q4 112 39 164q63 92 243 92q17 0 35 -1t41 -3v-164q-28 2 -40.5 2.5t-23.5 0.5q-82 0 -98 -42.5t-16 -216.5h178v-142h-180v-924h-178v924h-149z" />
<glyph unicode="g" d="M61 519q0 269 131.5 420t317.5 151q126 0 220 -62q51 -35 104 -102v135h166v-974q0 -204 -60 -322q-112 -218 -423 -218q-173 0 -291 77.5t-132 242.5h183q13 -72 52 -111q61 -60 192 -60q207 0 271 146q35 80 35 275v32q-54 -82 -130 -122t-201 -40q-174 0 -304.5 123.5 t-130.5 408.5zM246 504q0 -181 73.5 -275.5t197.5 -94.5q194 0 273 175q44 99 44 231q0 199 -82 295t-209 96q-190 0 -260 -178q-37 -95 -37 -249zM531 1097z" />
<glyph unicode="h" d="M132 0v1474h180v-548q64 81 115 114q87 57 217 57q233 0 316 -163q45 -89 45 -247v-687h-185v675q0 118 -30 173q-49 88 -184 88q-112 0 -203 -77t-91 -291v-568h-180z" />
<glyph unicode="i" horiz-adv-x="455" d="M132 0v1066h183v-1066h-183zM132 1265v204h183v-204h-183z" />
<glyph unicode="j" horiz-adv-x="455" d="M-38 -271q121 4 145.5 21.5t24.5 109.5v1206h180v-1225q0 -117 -38 -175q-63 -98 -239 -98q-13 0 -27.5 1t-45.5 4v156zM132 1261v208h180v-208h-180z" />
<glyph unicode="k" horiz-adv-x="1024" d="M128 0v1469h173v-853l462 455h230l-410 -401l433 -670h-230l-334 540l-151 -138v-402h-173z" />
<glyph unicode="l" horiz-adv-x="455" d="M137 0v1469h180v-1469h-180z" />
<glyph unicode="m" horiz-adv-x="1706" d="M132 0v1071h178v-152q64 79 116 115q89 61 202 61q128 0 206 -63q44 -36 80 -106q60 86 141 127.5t182 41.5q216 0 294 -156q42 -84 42 -226v-713h-187v744q0 107 -53.5 147t-130.5 40q-106 0 -182.5 -71t-76.5 -237v-623h-183v699q0 109 -26 159q-41 75 -153 75 q-102 0 -185.5 -79t-83.5 -286v-568h-180z" />
<glyph unicode="n" d="M132 0v1071h171v-152q76 94 161 135t189 41q228 0 308 -159q44 -87 44 -249v-687h-183v675q0 98 -29 158q-48 100 -174 100q-64 0 -105 -13q-74 -22 -130 -88q-45 -53 -58.5 -109.5t-13.5 -161.5v-561h-180zM555 1097z" />
<glyph unicode="o" d="M59 512q0 270 137 430t368 160q207 0 350 -138t143 -406q0 -259 -126 -428t-391 -169q-221 0 -351 149.5t-130 401.5zM244 515q0 -171 75 -285t238 -114q179 0 245.5 135.5t66.5 301.5q0 150 -48 244q-76 148 -262 148q-165 0 -240 -126t-75 -304zM558 1097z" />
<glyph unicode="p" d="M118 -427v1493h175v-142q54 73 118 113q91 60 214 60q182 0 309 -139.5t127 -398.5q0 -350 -183 -500q-116 -95 -270 -95q-121 0 -203 53q-48 30 -107 103v-547h-180zM291 498q0 -124 37 -211q70 -166 256 -166q126 0 209.5 105.5t83.5 315.5q0 128 -37 220 q-70 177 -256 177q-187 0 -256 -187q-37 -100 -37 -254z" />
<glyph unicode="q" d="M60 508q0 257 126.5 422t327.5 165q133 0 224 -67q50 -36 96 -106v149h171v-1498h-181v550q-45 -72 -124.5 -114.5t-198.5 -42.5q-171 0 -306 134t-135 408zM248 521q0 -139 39 -233q69 -167 247 -167q188 0 259 176q39 97 39 248q0 139 -43 232q-73 159 -257 159 q-117 0 -200.5 -101.5t-83.5 -313.5z" />
<glyph unicode="r" horiz-adv-x="682" d="M137 0v1071h171v-185q21 54 103 131.5t189 77.5q5 0 17 -1t41 -4v-190q-16 3 -29.5 4t-29.5 1q-136 0 -209 -87.5t-73 -201.5v-616h-180z" />
<glyph unicode="s" horiz-adv-x="1024" d="M66 336h173q8 -90 45 -138q68 -87 236 -87q100 0 176 43.5t76 134.5q0 69 -61 105q-39 22 -154 51l-143 36q-137 34 -202 76q-116 73 -116 202q0 152 109.5 246t294.5 94q242 0 349 -142q65 -87 65 -188v-6h-170q-5 61 -43 111q-62 71 -215 71q-102 0 -154.5 -39 t-52.5 -103q0 -70 69 -112q40 -25 118 -44l119 -29q194 -47 260 -91q105 -69 105 -217q0 -143 -108.5 -247t-330.5 -104q-239 0 -338.5 108.5t-106.5 268.5zM505 1097z" />
<glyph unicode="t" horiz-adv-x="569" d="M23 924v147h145v299h182v-299h171v-147h-171v-699q0 -56 38 -75q21 -11 70 -11q13 0 28 0.5t35 2.5v-142q-31 -9 -64.5 -13t-72.5 -4q-126 0 -171 64.5t-45 167.5v709h-145z" />
<glyph unicode="u" d="M128 343v728h184v-711q0 -82 26 -134q48 -96 179 -96q188 0 256 168q37 90 37 247v526h180v-1071h-170l2 158q-35 -61 -87 -103q-103 -84 -250 -84q-229 0 -312 153q-45 82 -45 219zM559 1097z" />
<glyph unicode="v" horiz-adv-x="1024" d="M11 1071h209l286 -872l299 872h197l-404 -1071h-192z" />
<glyph unicode="w" horiz-adv-x="1479" d="M18 1071h197l206 -844l209 844h202l210 -839l219 839h180l-311 -1071h-187l-218 829l-211 -829h-187z" />
<glyph unicode="x" horiz-adv-x="1024" d="M11 0l377 549l-358 522h233l246 -377l249 377l219 -5l-361 -517l377 -549h-230l-266 402l-258 -402h-228z" />
<glyph unicode="y" horiz-adv-x="1024" d="M21 1071h204l287 -872l289 872h199q-38 -103 -169 -470q-98 -276 -164 -450q-156 -410 -220 -500t-220 -90q-38 0 -58.5 3t-50.5 11v164q47 -13 68 -16t37 -3q50 0 73.5 16.5t39.5 40.5q5 8 36 82t45 110zM511 1097z" />
<glyph unicode="z" horiz-adv-x="1024" d="M52 0v142l635 768h-588v161h830v-147l-631 -763h650v-161h-896zM515 1097z" />
<glyph unicode="{" horiz-adv-x="684" d="M-43 483v114q177 21 238 131q34 61 34 175v163q0 188 81.5 298t329.5 131v-114q-161 -14 -218 -142q-31 -70 -31 -194v-112q0 -150 -37 -230q-67 -145 -260 -163q192 -17 260 -168q37 -83 37 -226v-151q0 -154 78 -219.5t171 -76.5v-117q-178 18 -294.5 104.5 t-116.5 284.5v206q0 109 -34 172q-62 115 -238 134z" />
<glyph unicode="|" horiz-adv-x="532" d="M144 0v1490h171v-1490h-171z" />
<glyph unicode="}" horiz-adv-x="684" d="M42 -301q107 14 178 85.5t71 210.5v151q0 144 37 226q68 151 259 168q-192 18 -259 162q-37 80 -37 231v112q0 132 -31 200q-56 122 -218 136v114q258 -21 350 -160q60 -89 60 -269v-163q0 -112 34 -174q62 -113 239 -132v-114q-176 -18 -239 -135q-34 -64 -34 -171v-206 q0 -202 -116.5 -286t-293.5 -103v117z" />
<glyph unicode="~" horiz-adv-x="1196" d="M18 320q17 83 37 141.5t70 132.5q42 50 90.5 74t113.5 24q29 0 61 -5q57 -8 110 -29l222 -87q51 -20 84 -30q53 -15 93 -15q73 0 124 57.5t69 141.5h116q-25 -142 -98.5 -259t-222.5 -117q-45 0 -107 18q-36 11 -107 38l-204 78q-38 15 -78.5 23t-66.5 8q-84 0 -132 -65 q-28 -38 -57 -129h-117z" />
<glyph unicode="&#xa1;" horiz-adv-x="682" d="M232 85l52 635h101l51 -635v-484h-204v484zM232 862v209h204v-209h-204z" />
<glyph unicode="&#xa2;" d="M104 521q0 256 132.5 418.5t369.5 162.5q21 0 44 -2.5t46 -7.5l53 183h83l-55 -202q119 -49 186 -141.5t79 -225.5h-168q-10 59 -40 117q-35 62 -102 87l-223 -785q19 -6 35 -9t46 -3q136 0 211 94q44 55 76 167h173q-31 -149 -104 -247q-129 -170 -372 -170 q-37 0 -60 3.5t-50 10.5l-62 -208h-85l69 232q-154 71 -218 211.5t-64 314.5zM286 523q0 -156 53 -254q32 -66 94 -111l221 775q-12 4 -28 7t-41 3q-126 0 -212.5 -115t-86.5 -305z" />
<glyph unicode="&#xa3;" d="M56 649v104h157q0 -5 -33.5 62.5t-44.5 98.5q-10 29 -17 67.5t-7 82.5q0 156 127 279.5t364 123.5q223 0 337.5 -122t117.5 -345h-185q0 151 -70.5 229.5t-214.5 78.5q-140 0 -212 -73.5t-72 -178.5q0 -52 22.5 -107t95.5 -196h328v-104h-283q10 -46 14.5 -72t4.5 -54 q0 -100 -60 -197.5t-188 -193.5q69 35 136 55.5t131 20.5q72 0 190.5 -35.5t155.5 -35.5q47 0 86 18q24 11 73 46l83 -135q-56 -45 -100 -67q-73 -35 -155 -35q-60 0 -201.5 46t-223.5 46q-76 0 -144 -26q-40 -16 -103 -54l-99 142q113 79 182 174.5t69 207.5q0 32 -13 75 q-8 27 -27 74h-221z" />
<glyph unicode="&#xa4;" d="M75 315l140 137q-42 54 -63.5 116t-21.5 130q0 85 24 147t61 115l-140 135l95 94l138 -137q56 42 115.5 63.5t128.5 21.5q83 0 145 -22.5t116 -64.5l137 139l95 -94l-140 -140q46 -58 68.5 -121t22.5 -137q0 -58 -19.5 -121.5t-71.5 -123.5l140 -137l-95 -95l-137 135 q-57 -43 -119 -64.5t-130 -21.5q-62 0 -123.5 18t-132.5 70l-138 -139zM267 704q0 -120 85.5 -206t208.5 -86q119 0 205.5 83.5t86.5 208.5t-86.5 209t-205.5 84q-122 0 -208 -85t-86 -208z" />
<glyph unicode="&#xa5;" d="M-31 1405h223l365 -675l367 675h223l-265 -445h175v-136h-253l-129 -218h349v-135h-373v-471h-189v471h-363v135h339l-128 218h-258v136h180z" />
<glyph unicode="&#xa6;" horiz-adv-x="532" d="M144 0v578h171v-578h-171zM144 912v578h171v-578h-171z" />
<glyph unicode="&#xa7;" d="M75 607q0 96 59 173.5t155 136.5q-44 40 -68 86q-27 58 -27 123q0 145 99.5 244.5t262.5 99.5q240 0 331 -159q48 -83 51 -216h-175q-7 95 -33 140q-47 82 -165 82q-94 0 -143.5 -44.5t-49.5 -118.5q0 -43 18.5 -77.5t55.5 -60.5q74 -51 263 -157q336 -188 336 -398 q0 -119 -72 -208q-41 -51 -139 -121q53 -49 82 -107t29 -125q0 -135 -105 -233.5t-283 -98.5q-235 0 -329 152q-52 82 -63 232h178q8 -98 35 -144q48 -83 167 -83q78 0 125 21q88 39 88 147q0 46 -27 86q-16 22 -45 46q-16 13 -104 73q-52 35 -99 67l-178 119 q-106 71 -151 123q-79 89 -79 200zM251 638q0 -43 13 -76q25 -61 93 -105l375 -242q59 34 87 68q50 59 50 146q0 78 -53 133q-33 34 -134 96l-291 178q-59 -32 -87 -62q-53 -56 -53 -136z" />
<glyph unicode="&#xa8;" horiz-adv-x="682" d="M82 1237v208h187v-208h-187zM412 1237v208h187v-208h-187z" />
<glyph unicode="&#xa9;" horiz-adv-x="1509" d="M18 737q0 304 215 518t520 214t520 -214t215 -518q0 -305 -215 -521t-520 -216t-520 216t-215 521zM125 737q0 -264 182 -450q184 -186 446 -186t446 186q182 186 182 450q0 262 -183 447q-183 186 -445 186q-261 0 -445 -186q-183 -185 -183 -447zM373 742 q0 183 105.5 306t275.5 123q107 0 193 -43q149 -77 162 -256h-121q-9 75 -63 130t-157 55q-145 0 -210 -130q-42 -83 -42 -179q0 -137 67.5 -230.5t195.5 -93.5q82 0 137 43.5t77 126.5h121q-23 -135 -117 -209.5t-225 -74.5q-165 0 -282 118t-117 314z" />
<glyph unicode="&#xaa;" horiz-adv-x="758" d="M59 1021q0 106 89 158q49 30 131 41l159 22q25 4 42 14.5t17 43.5q0 53 -31 78t-104 25q-72 0 -103.5 -28.5t-36.5 -76.5h-128q8 101 71 156t219 55q155 0 216 -72q40 -48 40 -134v-315q0 -21 7.5 -33t36.5 -12q6 0 34 2v-106q-22 -6 -42 -9t-42 -3q-52 0 -77.5 28.5 t-30.5 73.5q-50 -59 -119 -80.5t-127 -21.5q-111 0 -166 59t-55 135zM210 1023q0 -41 25.5 -64.5t76.5 -23.5q82 0 132.5 37t50.5 120v76q-46 -21 -159 -36q-126 -26 -126 -109z" />
<glyph unicode="&#xab;" d="M194 464v190l322 251v-180l-215 -166l215 -166v-180zM613 464v190l323 251v-180l-216 -166l216 -166v-180z" />
<glyph unicode="&#xac;" horiz-adv-x="1196" d="M92 654v168h1043v-600h-168v432h-875z" />
<glyph unicode="&#xad;" horiz-adv-x="682" d="M85 478v185h502v-185h-502z" />
<glyph unicode="&#xae;" horiz-adv-x="1509" d="M21 737q0 303 215 518q214 214 517 214q305 0 520 -214t215 -518q0 -305 -215 -521t-520 -216t-519 216q-213 215 -213 521zM123 737q0 -264 183 -450q184 -186 447 -186t447 186t184 450q0 262 -184 447q-185 186 -447 186q-261 0 -446 -186q-184 -185 -184 -447z M457 336v806h282q150 0 220 -29q125 -52 125 -204q0 -108 -79 -159q-42 -27 -117 -39q95 -15 139 -79t44 -125v-59q0 -28 2 -60t7 -42l5 -10h-133l-2 8t-2 9l-3 26v64q0 140 -76 185q-45 26 -158 26h-112v-318h-142zM599 753h128q90 0 135 18q83 33 83 126q0 88 -53.5 118 t-171.5 30h-121v-292z" />
<glyph unicode="&#xaf;" horiz-adv-x="682" d="M21 1282v118h640v-118h-640z" />
<glyph unicode="&#xb0;" horiz-adv-x="819" d="M111 1127q0 128 89.5 216t213.5 88q127 0 214 -87.5t87 -213.5q0 -130 -90.5 -216.5t-210.5 -86.5q-133 0 -218 90t-85 210zM220 1128q0 -78 57 -135t137 -57q77 0 134.5 56.5t57.5 137.5q0 78 -56.5 135t-135.5 57t-136.5 -56.5t-57.5 -137.5z" />
<glyph unicode="&#xb1;" horiz-adv-x="1124" d="M92 0v161h1043v-161h-1043zM92 557v158h436v330h171v-330h436v-158h-436v-318h-171v318h-436z" />
<glyph unicode="&#xb2;" horiz-adv-x="682" d="M11 571q0 145 70 234t174 141q149 74 193.5 110t44.5 96q0 66 -37 106t-118 40t-113 -51t-33 -124h-157q0 150 85.5 229.5t222.5 79.5q139 0 223.5 -67t84.5 -196q0 -119 -61.5 -180t-194.5 -125q-171 -77 -201 -153h457v-140h-640z" />
<glyph unicode="&#xb3;" horiz-adv-x="682" d="M7 832h147q7 -82 29 -114q37 -55 138 -55q97 0 138.5 42t41.5 103q0 96 -102 128q-55 17 -141 14v121q96 -1 137 13q74 25 74 105q0 48 -33.5 83.5t-105.5 35.5q-69 0 -112.5 -37.5t-44.5 -126.5h-145q0 136 82 211.5t219 75.5q132 0 212 -67t80 -165q0 -69 -31.5 -114 t-89.5 -61q84 -21 119 -75.5t35 -141.5q0 -127 -98.5 -196t-233.5 -69q-129 0 -220 65t-95 225z" />
<glyph unicode="&#xb4;" horiz-adv-x="682" d="M138 1213l183 289h222l-267 -289h-138z" />
<glyph unicode="&#xb5;" horiz-adv-x="1180" d="M-76 -422l324 1491h185l-163 -757q-4 -17 -5.5 -29.5t-1.5 -27.5q0 -48 19 -76q35 -51 132 -51q145 0 245.5 106.5t131.5 248.5l128 586h183l-230 -1069h-173l42 180q-22 -44 -94 -105q-123 -103 -273 -103q-47 0 -96 17t-72 39l-97 -450h-185z" />
<glyph unicode="&#xb6;" horiz-adv-x="1100" d="M-11 995q0 148 72 264q130 210 428 210h576v-116h-125v-1716h-147v1716h-231v-1716h-147v889q-213 3 -319.5 148.5t-106.5 320.5z" />
<glyph unicode="&#xb7;" horiz-adv-x="569" d="M151 701q0 53 37 90.5t91 37.5t91 -37.5t37 -90.5t-37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5z" />
<glyph unicode="&#xb8;" horiz-adv-x="682" d="M121 -418l35 81q38 -14 59 -20q41 -11 74 -11q37 0 64 11q52 21 52 76q0 32 -26.5 55.5t-70.5 23.5q-22 0 -39.5 -4t-41.5 -13l-35 41l130 178h97l-94 -128q29 9 75 9q70 0 115.5 -40.5t45.5 -115.5q0 -76 -60 -131t-184 -55q-53 0 -110 15q-32 8 -86 28z" />
<glyph unicode="&#xb9;" horiz-adv-x="682" d="M87 1154v107q126 11 166 32q62 32 85 133h131v-855h-161v583h-221z" />
<glyph unicode="&#xba;" horiz-adv-x="748" d="M49 1163q0 113 56 205q87 141 277 141q143 0 231 -85t88 -253q0 -149 -83.5 -246.5t-245.5 -97.5q-185 0 -268 134q-55 88 -55 202zM194 1158q0 -89 41.5 -152t131.5 -63q112 0 159 95q28 57 28 134q0 110 -50.5 165.5t-122.5 55.5q-88 0 -137.5 -60.5t-49.5 -174.5z" />
<glyph unicode="&#xbb;" d="M194 213v180l211 166l-211 166v180l322 -251v-190zM613 213v180l211 166l-211 166v180l323 -251v-190z" />
<glyph unicode="&#xbc;" horiz-adv-x="1708" d="M163 1154v107q125 11 166 32q62 32 85 133h131v-855h-161v583h-221zM384 -38l877 1469h135l-877 -1469h-135zM950 194v135l427 531h135v-543h114v-123h-114v-194h-154v194h-408zM1085 317h270v344z" />
<glyph unicode="&#xbd;" horiz-adv-x="1708" d="M90 1154v107q124 11 165 32q64 33 86 133h130v-855h-161v583h-220zM272 -38l849 1469h135l-849 -1469h-135zM950 0q11 134 61.5 221t182.5 153q149 74 193.5 111t44.5 96q0 70 -38.5 108t-116.5 38q-90 0 -124 -65q-19 -37 -23 -110h-156q0 125 74 216.5t240 91.5 q138 0 220 -69.5t82 -186.5q0 -103 -49.5 -168t-183.5 -132q-193 -89 -224 -165h457v-139h-640z" />
<glyph unicode="&#xbe;" horiz-adv-x="1708" d="M75 832h147q0 -72 34 -118q37 -51 133 -51t138 41t42 101q0 98 -101 131q-55 17 -141 14v121q97 -1 138 13q73 26 73 107q0 43 -32 80t-108 37q-69 0 -111.5 -37t-45.5 -127h-144q0 144 85.5 215.5t215.5 71.5q131 0 211 -67t80 -165q0 -60 -30.5 -108.5t-90.5 -66.5 q100 -32 135 -105q19 -41 19 -105q0 -133 -97.5 -202.5t-233.5 -69.5q-192 0 -269 119q-47 77 -47 171zM421 -38l896 1469h136l-896 -1469h-136zM969 194v135l427 531h135v-543h114v-123h-114v-194h-154v194h-408zM1104 317h270v344z" />
<glyph unicode="&#xbf;" horiz-adv-x="1251" d="M186 -25q0 101 47 177t146 175l47 47q91 91 113 152t22 175h178q0 -152 -30 -224t-167 -217l-78 -83q-52 -54 -70 -101t-18 -90q0 -102 64.5 -172t201.5 -70q151 0 215 111q36 64 46 211h173q4 -247 -127.5 -363t-316.5 -116t-315.5 103t-130.5 285zM545 867v209h199 v-209h-199z" />
<glyph unicode="&#xc0;" horiz-adv-x="1366" d="M30 0l553 1469h225l533 -1469h-218l-149 440h-581l-159 -440h-204zM401 1874h223l182 -289h-137zM450 602h460l-223 649zM686 1469z" />
<glyph unicode="&#xc1;" horiz-adv-x="1366" d="M30 0l553 1469h225l533 -1469h-218l-149 440h-581l-159 -440h-204zM450 602h460l-223 649zM496 1585l183 289h222l-267 -289h-138zM686 1469z" />
<glyph unicode="&#xc2;" horiz-adv-x="1366" d="M30 0l553 1469h225l533 -1469h-218l-149 440h-581l-159 -440h-204zM403 1585l203 289h190l204 -289h-164l-135 192l-135 -192h-163zM450 602h460l-223 649zM686 1469z" />
<glyph unicode="&#xc3;" horiz-adv-x="1366" d="M30 0l553 1469h225l533 -1469h-218l-149 440h-581l-159 -440h-204zM353 1604q13 79 43 129q57 92 169 92q34 0 75.5 -10t111.5 -40q28 -12 51 -19t47 -7q56 0 80 35q13 19 18 57h105q-21 -127 -80.5 -175t-130.5 -48q-22 0 -56 8t-60 18l-53 19q-47 17 -76.5 25.5 t-57.5 8.5q-35 0 -57.5 -23t-30.5 -70h-98zM450 602h460l-223 649zM686 1469z" />
<glyph unicode="&#xc4;" horiz-adv-x="1366" d="M30 0l553 1469h225l533 -1469h-218l-149 440h-581l-159 -440h-204zM427 1609v208h187v-208h-187zM450 602h460l-223 649zM686 1469zM757 1609v208h187v-208h-187z" />
<glyph unicode="&#xc5;" horiz-adv-x="1366" d="M30 0l553 1469h225l533 -1469h-218l-149 440h-581l-159 -440h-204zM450 602h460l-223 649zM493 1737q0 86 61 147.5t147 61.5t147.5 -61.5t61.5 -147.5t-61.5 -147.5t-147.5 -61.5t-147 61.5t-61 147.5zM576 1737q0 -52 37 -89t88 -37q52 0 89 37t37 89t-37 89t-89 37 q-51 0 -88 -37t-37 -89zM686 1469z" />
<glyph unicode="&#xc6;" horiz-adv-x="2048" d="M16 0l597 1469h1316v-175h-796v-451h730v-166h-730v-502h815v-175h-1012v436h-541l-163 -436h-216zM464 604h472v694h-199z" />
<glyph unicode="&#xc7;" horiz-adv-x="1479" d="M90 750q0 325 172 533q186 226 513 226q279 0 433 -147t171 -334h-194q-33 142 -131.5 225t-276.5 83q-217 0 -350.5 -152.5t-133.5 -467.5q0 -258 120.5 -418.5t359.5 -160.5q220 0 335 169q61 89 91 234h194q-26 -232 -172 -389q-175 -189 -451 -189l-66 -90q29 9 75 9 q70 0 115.5 -40.5t45.5 -115.5q0 -76 -60 -131t-184 -55q-53 0 -110 15q-32 8 -86 28l35 81q38 -14 59 -20q41 -11 74 -11q37 0 64 11q52 21 52 76q0 32 -26.5 55.5t-70.5 23.5q-22 0 -39.5 -4t-41.5 -13l-35 41l102 140q-175 0 -350 139q-233 221 -233 649z" />
<glyph unicode="&#xc8;" horiz-adv-x="1366" d="M175 0v1469h1071v-180h-877v-446h811v-170h-811v-498h892v-175h-1086zM433 1874h223l182 -289h-137zM718 1469z" />
<glyph unicode="&#xc9;" horiz-adv-x="1366" d="M175 0v1469h1071v-180h-877v-446h811v-170h-811v-498h892v-175h-1086zM538 1585l183 289h222l-267 -289h-138zM718 1469z" />
<glyph unicode="&#xca;" horiz-adv-x="1366" d="M175 0v1469h1071v-180h-877v-446h811v-170h-811v-498h892v-175h-1086zM435 1585l203 289h190l204 -289h-164l-135 192l-135 -192h-163zM718 1469z" />
<glyph unicode="&#xcb;" horiz-adv-x="1366" d="M175 0v1469h1071v-180h-877v-446h811v-170h-811v-498h892v-175h-1086zM472 1609v208h187v-208h-187zM718 1469zM802 1609v208h187v-208h-187z" />
<glyph unicode="&#xcc;" horiz-adv-x="569" d="M2 1873h223l182 -289h-137zM184 0v1469h201v-1469h-201z" />
<glyph unicode="&#xcd;" horiz-adv-x="569" d="M107 1581l183 289h222l-267 -289h-138zM201 0v1469h201v-1469h-201z" />
<glyph unicode="&#xce;" horiz-adv-x="569" d="M-7 1589l203 289h190l204 -289h-164l-135 192l-135 -192h-163zM201 0v1469h201v-1469h-201z" />
<glyph unicode="&#xcf;" horiz-adv-x="569" d="M32 1605v208h187v-208h-187zM201 0v1469h201v-1469h-201zM362 1605v208h187v-208h-187z" />
<glyph unicode="&#xd0;" horiz-adv-x="1479" d="M33 687v178h132v604h562q365 0 531 -251q121 -183 121 -459q0 -244 -93 -436q-156 -323 -528 -323h-593v687h-132zM365 170h355q101 0 166 21q116 39 190 150q59 89 85 228q15 83 15 154q0 273 -108.5 424t-349.5 151h-353v-433h419v-178h-419v-517z" />
<glyph unicode="&#xd1;" horiz-adv-x="1479" d="M156 0v1469h235l742 -1190v1190h189v-1469h-223l-753 1189v-1189h-190zM403 1604q13 79 43 129q57 92 169 92q34 0 75.5 -10t111.5 -40q28 -12 51 -19t47 -7q56 0 80 35q13 19 18 57h105q-21 -127 -80.5 -175t-130.5 -48q-22 0 -56 8t-60 18l-53 19q-47 17 -76.5 25.5 t-57.5 8.5q-35 0 -57.5 -23t-30.5 -70h-98zM726 1469z" />
<glyph unicode="&#xd2;" horiz-adv-x="1593" d="M80 727q0 298 148 510q190 272 562 272q389 0 576 -250q146 -195 146 -499q0 -329 -167 -547q-196 -256 -559 -256q-339 0 -533 224q-173 216 -173 546zM286 714q0 -244 123.5 -411.5t400.5 -167.5q263 0 380.5 188.5t117.5 433.5q0 259 -135.5 417t-370.5 158 q-228 0 -372 -156.5t-144 -461.5zM521 1914h223l182 -289h-137zM796 1509z" />
<glyph unicode="&#xd3;" horiz-adv-x="1593" d="M80 727q0 298 148 510q190 272 562 272q389 0 576 -250q146 -195 146 -499q0 -329 -167 -547q-196 -256 -559 -256q-339 0 -533 224q-173 216 -173 546zM286 714q0 -244 123.5 -411.5t400.5 -167.5q263 0 380.5 188.5t117.5 433.5q0 259 -135.5 417t-370.5 158 q-228 0 -372 -156.5t-144 -461.5zM606 1625l183 289h222l-267 -289h-138zM796 1509z" />
<glyph unicode="&#xd4;" horiz-adv-x="1593" d="M80 727q0 298 148 510q190 272 562 272q389 0 576 -250q146 -195 146 -499q0 -329 -167 -547q-196 -256 -559 -256q-339 0 -533 224q-173 216 -173 546zM286 714q0 -244 123.5 -411.5t400.5 -167.5q263 0 380.5 188.5t117.5 433.5q0 259 -135.5 417t-370.5 158 q-228 0 -372 -156.5t-144 -461.5zM513 1625l203 289h190l204 -289h-164l-135 192l-135 -192h-163zM796 1509z" />
<glyph unicode="&#xd5;" horiz-adv-x="1593" d="M80 727q0 298 148 510q190 272 562 272q389 0 576 -250q146 -195 146 -499q0 -329 -167 -547q-196 -256 -559 -256q-339 0 -533 224q-173 216 -173 546zM286 714q0 -244 123.5 -411.5t400.5 -167.5q263 0 380.5 188.5t117.5 433.5q0 259 -135.5 417t-370.5 158 q-228 0 -372 -156.5t-144 -461.5zM463 1644q13 79 43 129q57 92 169 92q34 0 75.5 -10t111.5 -40q28 -12 51 -19t47 -7q56 0 80 35q13 19 18 57h105q-21 -127 -80.5 -175t-130.5 -48q-22 0 -56 8t-60 18l-53 19q-47 17 -76.5 25.5t-57.5 8.5q-35 0 -57.5 -23t-30.5 -70h-98z M796 1509z" />
<glyph unicode="&#xd6;" horiz-adv-x="1593" d="M80 727q0 298 148 510q190 272 562 272q389 0 576 -250q146 -195 146 -499q0 -329 -167 -547q-196 -256 -559 -256q-339 0 -533 224q-173 216 -173 546zM286 714q0 -244 123.5 -411.5t400.5 -167.5q263 0 380.5 188.5t117.5 433.5q0 259 -135.5 417t-370.5 158 q-228 0 -372 -156.5t-144 -461.5zM560 1649v208h187v-208h-187zM796 1509zM890 1649v208h187v-208h-187z" />
<glyph unicode="&#xd7;" horiz-adv-x="1196" d="M116 144l379 379l-379 380l118 118l379 -379l380 379l121 -118l-380 -380l380 -379l-121 -121l-380 379l-379 -379z" />
<glyph unicode="&#xd8;" horiz-adv-x="1593" d="M66 26l175 180q-82 107 -121.5 240.5t-39.5 280.5q0 304 156 520q190 263 545 263q177 0 300.5 -44.5t205.5 -121.5l154 165l64 -61l-157 -173q57 -70 104 -177q60 -147 60 -338q0 -364 -205 -586q-200 -217 -513 -217q-187 0 -324 63q-87 40 -169 117l-169 -173z M286 714q0 -95 20 -191t73 -175l775 846q-67 59 -124 87q-103 51 -235 51q-225 0 -367 -157.5t-142 -460.5zM438 279q67 -70 149 -107t225 -37q268 0 399 224q97 166 97 398q0 130 -38 239q-21 59 -62 129z" />
<glyph unicode="&#xd9;" horiz-adv-x="1479" d="M170 644v825h202v-908q0 -160 60 -266q89 -160 300 -160q253 0 344 173q49 94 49 253v908h202v-825q0 -271 -73 -417q-134 -266 -506 -266t-505 266q-73 146 -73 417zM474 1874h223l182 -289h-137zM749 1469z" />
<glyph unicode="&#xda;" horiz-adv-x="1479" d="M170 644v825h202v-908q0 -160 60 -266q89 -160 300 -160q253 0 344 173q49 94 49 253v908h202v-825q0 -271 -73 -417q-134 -266 -506 -266t-505 266q-73 146 -73 417zM569 1585l183 289h222l-267 -289h-138zM749 1469z" />
<glyph unicode="&#xdb;" horiz-adv-x="1479" d="M170 644v825h202v-908q0 -160 60 -266q89 -160 300 -160q253 0 344 173q49 94 49 253v908h202v-825q0 -271 -73 -417q-134 -266 -506 -266t-505 266q-73 146 -73 417zM466 1585l203 289h190l204 -289h-164l-135 192l-135 -192h-163zM749 1469z" />
<glyph unicode="&#xdc;" horiz-adv-x="1479" d="M170 644v825h202v-908q0 -160 60 -266q89 -160 300 -160q253 0 344 173q49 94 49 253v908h202v-825q0 -271 -73 -417q-134 -266 -506 -266t-505 266q-73 146 -73 417zM513 1609v208h187v-208h-187zM749 1469zM843 1609v208h187v-208h-187z" />
<glyph unicode="&#xdd;" horiz-adv-x="1366" d="M42 1469h232l422 -706l422 706h233l-555 -877v-592h-199v592zM509 1585l183 289h222l-267 -289h-138zM699 1469z" />
<glyph unicode="&#xde;" horiz-adv-x="1366" d="M128 0v1467h194v-234h456q227 0 337.5 -116.5t110.5 -307.5q0 -168 -118.5 -294t-336.5 -126h-449v-389h-194zM322 564h390q128 1 192 34q117 58 117 222q0 69 -33 129q-62 111 -212 111h-454v-496z" />
<glyph unicode="&#xdf;" horiz-adv-x="1251" d="M199 0v1024q0 286 153 397q102 70 254 70q207 0 318 -100.5t111 -265.5q0 -116 -46 -192t-120 -113q91 -23 153 -99q84 -96 84 -270q0 -198 -112.5 -339t-318.5 -141q-48 0 -71.5 2t-58.5 8v156q24 -3 44 -5t45 -2q108 0 196.5 68t88.5 242q0 169 -114 241 q-71 44 -166 44q-17 0 -39.5 -2t-45.5 -5v161q18 -3 27.5 -4t20.5 -1q145 0 200.5 73.5t55.5 154.5q0 102 -60.5 167t-180.5 65q-155 0 -208 -112q-30 -63 -30 -198v-1024h-180z" />
<glyph unicode="&#xe0;" d="M82 281q0 149 93 231t244 101l287 36q62 8 83 52q12 24 12 69q0 92 -65.5 133.5t-187.5 41.5q-141 0 -200 -76q-33 -42 -43 -125h-168q5 198 128.5 275.5t286.5 77.5q189 0 307 -72q117 -72 117 -224v-617q0 -28 11.5 -45t48.5 -17q12 0 27 1.5t32 4.5v-133 q-42 -12 -64 -15t-60 -3q-93 0 -135 66q-22 35 -31 99q-55 -72 -158 -125t-227 -53q-149 0 -243.5 90.5t-94.5 226.5zM270 285q0 -78 57 -123t135 -45q95 0 184 44q150 73 150 239v145q-33 -21 -85 -35t-102 -20l-109 -14q-98 -13 -147 -41q-83 -47 -83 -150zM282 1502h223 l182 -289h-137zM557 1097z" />
<glyph unicode="&#xe1;" d="M82 281q0 149 93 231t244 101l287 36q62 8 83 52q12 24 12 69q0 92 -65.5 133.5t-187.5 41.5q-141 0 -200 -76q-33 -42 -43 -125h-168q5 198 128.5 275.5t286.5 77.5q189 0 307 -72q117 -72 117 -224v-617q0 -28 11.5 -45t48.5 -17q12 0 27 1.5t32 4.5v-133 q-42 -12 -64 -15t-60 -3q-93 0 -135 66q-22 35 -31 99q-55 -72 -158 -125t-227 -53q-149 0 -243.5 90.5t-94.5 226.5zM270 285q0 -78 57 -123t135 -45q95 0 184 44q150 73 150 239v145q-33 -21 -85 -35t-102 -20l-109 -14q-98 -13 -147 -41q-83 -47 -83 -150zM377 1213 l183 289h222l-267 -289h-138zM557 1097z" />
<glyph unicode="&#xe2;" d="M82 281q0 149 93 231t244 101l287 36q62 8 83 52q12 24 12 69q0 92 -65.5 133.5t-187.5 41.5q-141 0 -200 -76q-33 -42 -43 -125h-168q5 198 128.5 275.5t286.5 77.5q189 0 307 -72q117 -72 117 -224v-617q0 -28 11.5 -45t48.5 -17q12 0 27 1.5t32 4.5v-133 q-42 -12 -64 -15t-60 -3q-93 0 -135 66q-22 35 -31 99q-55 -72 -158 -125t-227 -53q-149 0 -243.5 90.5t-94.5 226.5zM270 285q0 -78 57 -123t135 -45q95 0 184 44q150 73 150 239v145q-33 -21 -85 -35t-102 -20l-109 -14q-98 -13 -147 -41q-83 -47 -83 -150zM284 1213 l203 289h190l204 -289h-164l-135 192l-135 -192h-163zM557 1097z" />
<glyph unicode="&#xe3;" d="M82 281q0 149 93 231t244 101l287 36q62 8 83 52q12 24 12 69q0 92 -65.5 133.5t-187.5 41.5q-141 0 -200 -76q-33 -42 -43 -125h-168q5 198 128.5 275.5t286.5 77.5q189 0 307 -72q117 -72 117 -224v-617q0 -28 11.5 -45t48.5 -17q12 0 27 1.5t32 4.5v-133 q-42 -12 -64 -15t-60 -3q-93 0 -135 66q-22 35 -31 99q-55 -72 -158 -125t-227 -53q-149 0 -243.5 90.5t-94.5 226.5zM234 1232q13 79 43 129q57 92 169 92q34 0 75.5 -10t111.5 -40q28 -12 51 -19t47 -7q56 0 80 35q13 19 18 57h105q-21 -127 -80.5 -175t-130.5 -48 q-22 0 -56 8t-60 18l-53 19q-47 17 -76.5 25.5t-57.5 8.5q-35 0 -57.5 -23t-30.5 -70h-98zM270 285q0 -78 57 -123t135 -45q95 0 184 44q150 73 150 239v145q-33 -21 -85 -35t-102 -20l-109 -14q-98 -13 -147 -41q-83 -47 -83 -150zM557 1097z" />
<glyph unicode="&#xe4;" d="M82 281q0 149 93 231t244 101l287 36q62 8 83 52q12 24 12 69q0 92 -65.5 133.5t-187.5 41.5q-141 0 -200 -76q-33 -42 -43 -125h-168q5 198 128.5 275.5t286.5 77.5q189 0 307 -72q117 -72 117 -224v-617q0 -28 11.5 -45t48.5 -17q12 0 27 1.5t32 4.5v-133 q-42 -12 -64 -15t-60 -3q-93 0 -135 66q-22 35 -31 99q-55 -72 -158 -125t-227 -53q-149 0 -243.5 90.5t-94.5 226.5zM270 285q0 -78 57 -123t135 -45q95 0 184 44q150 73 150 239v145q-33 -21 -85 -35t-102 -20l-109 -14q-98 -13 -147 -41q-83 -47 -83 -150zM321 1237v208 h187v-208h-187zM557 1097zM651 1237v208h187v-208h-187z" />
<glyph unicode="&#xe5;" d="M82 281q0 149 93 231t244 101l287 36q62 8 83 52q12 24 12 69q0 92 -65.5 133.5t-187.5 41.5q-141 0 -200 -76q-33 -42 -43 -125h-168q5 198 128.5 275.5t286.5 77.5q189 0 307 -72q117 -72 117 -224v-617q0 -28 11.5 -45t48.5 -17q12 0 27 1.5t32 4.5v-133 q-42 -12 -64 -15t-60 -3q-93 0 -135 66q-22 35 -31 99q-55 -72 -158 -125t-227 -53q-149 0 -243.5 90.5t-94.5 226.5zM270 285q0 -78 57 -123t135 -45q95 0 184 44q150 73 150 239v145q-33 -21 -85 -35t-102 -20l-109 -14q-98 -13 -147 -41q-83 -47 -83 -150zM373 1417 q0 86 61 147.5t147 61.5t147.5 -61.5t61.5 -147.5t-61.5 -147.5t-147.5 -61.5t-147 61.5t-61 147.5zM456 1417q0 -52 37 -89t88 -37q52 0 89 37t37 89t-37 89t-89 37q-51 0 -88 -37t-37 -89zM557 1097z" />
<glyph unicode="&#xe6;" horiz-adv-x="1821" d="M73 272q0 178 121 266q77 56 206 73l285 38q51 7 76 36t25 82q0 86 -56 131t-179 45q-100 0 -160 -32q-100 -59 -100 -170h-173q10 226 177 309q96 47 264 47q133 0 228 -49q80 -43 122 -112q59 77 147.5 119t199.5 42q117 0 216 -41.5t165 -138.5q59 -80 78.5 -184.5 t19.5 -254.5h-787q5 -166 82 -263t216 -97q130 0 198 57t94 161h182q-9 -80 -67 -164.5t-122 -126.5q-70 -46 -142.5 -63.5t-149.5 -17.5q-147 0 -260 76q-104 77 -133 152q-82 -121 -186.5 -174.5t-226.5 -53.5q-172 0 -266 86t-94 222zM257 287q0 -84 63.5 -129t149.5 -45 q49 0 114 25t120 77q49 46 64 94q9 30 14 101v135q-25 -17 -49 -26.5t-85 -19.5l-153 -23q-111 -18 -159 -45q-79 -46 -79 -144zM950 621h593q-3 157 -86.5 237.5t-203.5 80.5t-207 -80.5t-96 -237.5z" />
<glyph unicode="&#xe7;" horiz-adv-x="1024" d="M59 506q0 282 137 439t349 157q181 0 294.5 -88t136.5 -303h-175q-16 99 -73 164.5t-183 65.5q-172 0 -246 -168q-48 -109 -48 -269q0 -161 68 -271t214 -110q112 0 177.5 68.5t90.5 187.5h175q-30 -213 -150 -311.5t-279 -98.5l-71 -97q29 9 75 9q70 0 115.5 -40.5 t45.5 -115.5q0 -76 -60 -131t-184 -55q-53 0 -110 15q-32 8 -86 28l35 81q38 -14 59 -20q41 -11 74 -11q37 0 64 11q52 21 52 76q0 32 -26.5 55.5t-70.5 23.5q-22 0 -39.5 -4t-41.5 -13l-35 41l108 147q-142 0 -248 114q-144 163 -144 423z" />
<glyph unicode="&#xe8;" d="M72 515q0 258 140 419t366 161q114 0 221 -53.5t163 -138.5q54 -81 72 -189q16 -74 16 -236h-785q5 -163 77 -261.5t223 -98.5q141 0 225 93q48 54 68 125h177q-7 -59 -46.5 -131.5t-88.5 -118.5q-82 -80 -203 -108q-65 -16 -147 -16q-200 0 -339 145.5t-139 407.5z M270 621h595q-11 117 -51 187q-74 130 -247 130q-124 0 -208 -89.5t-89 -227.5zM286 1502h223l182 -289h-137zM561 1097z" />
<glyph unicode="&#xe9;" d="M72 515q0 258 140 419t366 161q114 0 221 -53.5t163 -138.5q54 -81 72 -189q16 -74 16 -236h-785q5 -163 77 -261.5t223 -98.5q141 0 225 93q48 54 68 125h177q-7 -59 -46.5 -131.5t-88.5 -118.5q-82 -80 -203 -108q-65 -16 -147 -16q-200 0 -339 145.5t-139 407.5z M270 621h595q-11 117 -51 187q-74 130 -247 130q-124 0 -208 -89.5t-89 -227.5zM381 1213l183 289h222l-267 -289h-138zM561 1097z" />
<glyph unicode="&#xea;" d="M72 515q0 258 140 419t366 161q114 0 221 -53.5t163 -138.5q54 -81 72 -189q16 -74 16 -236h-785q5 -163 77 -261.5t223 -98.5q141 0 225 93q48 54 68 125h177q-7 -59 -46.5 -131.5t-88.5 -118.5q-82 -80 -203 -108q-65 -16 -147 -16q-200 0 -339 145.5t-139 407.5z M270 621h595q-11 117 -51 187q-74 130 -247 130q-124 0 -208 -89.5t-89 -227.5zM288 1213l203 289h190l204 -289h-164l-135 192l-135 -192h-163zM561 1097z" />
<glyph unicode="&#xeb;" d="M72 515q0 258 140 419t366 161q114 0 221 -53.5t163 -138.5q54 -81 72 -189q16 -74 16 -236h-785q5 -163 77 -261.5t223 -98.5q141 0 225 93q48 54 68 125h177q-7 -59 -46.5 -131.5t-88.5 -118.5q-82 -80 -203 -108q-65 -16 -147 -16q-200 0 -339 145.5t-139 407.5z M270 621h595q-11 117 -51 187q-74 130 -247 130q-124 0 -208 -89.5t-89 -227.5zM325 1237v208h187v-208h-187zM561 1097zM655 1237v208h187v-208h-187z" />
<glyph unicode="&#xec;" horiz-adv-x="569" d="M8 1502h223l182 -289h-137zM189 0v1066h183v-1066h-183zM281 1097z" />
<glyph unicode="&#xed;" horiz-adv-x="569" d="M103 1213l183 289h222l-267 -289h-138zM189 0v1066h183v-1066h-183zM281 1097z" />
<glyph unicode="&#xee;" horiz-adv-x="569" d="M0 1213l203 289h190l204 -289h-164l-135 192l-135 -192h-163zM189 0v1066h183v-1066h-183zM281 1097z" />
<glyph unicode="&#xef;" horiz-adv-x="569" d="M37 1237v208h187v-208h-187zM189 0v1066h183v-1066h-183zM281 1097zM367 1237v208h187v-208h-187z" />
<glyph unicode="&#xf0;" d="M61 525q0 263 133 407t330 144q73 0 120 -13q44 -12 83 -37q-58 89 -112 146t-165 160l-161 -112l-79 67l164 116l-149 123l132 97q43 -33 75 -58.5t84 -69.5l150 105l75 -67l-151 -107q230 -217 339 -400q132 -224 132 -470q0 -248 -133 -420.5t-383 -172.5 q-237 0 -360.5 158t-123.5 404zM253 540q0 -153 40 -246q74 -174 278 -174q123 0 210.5 111t87.5 319q0 177 -76 286.5t-237 109.5q-130 0 -216.5 -107t-86.5 -299z" />
<glyph unicode="&#xf1;" d="M132 0v1071h171v-152q76 94 161 135t189 41q228 0 308 -159q44 -87 44 -249v-687h-183v675q0 98 -29 158q-48 100 -174 100q-64 0 -105 -13q-74 -22 -130 -88q-45 -53 -58.5 -109.5t-13.5 -161.5v-561h-180zM262 1232q13 79 43 129q57 92 169 92q34 0 75.5 -10t111.5 -40 q28 -12 51 -19t47 -7q56 0 80 35q13 19 18 57h105q-21 -127 -80.5 -175t-130.5 -48q-22 0 -56 8t-60 18l-53 19q-47 17 -76.5 25.5t-57.5 8.5q-35 0 -57.5 -23t-30.5 -70h-98zM555 1097z" />
<glyph unicode="&#xf2;" d="M59 512q0 270 137 430t368 160q207 0 350 -138t143 -406q0 -259 -126 -428t-391 -169q-221 0 -351 149.5t-130 401.5zM244 515q0 -171 75 -285t238 -114q179 0 245.5 135.5t66.5 301.5q0 150 -48 244q-76 148 -262 148q-165 0 -240 -126t-75 -304zM273 1502h223l182 -289 h-137zM558 1097z" />
<glyph unicode="&#xf3;" d="M59 512q0 270 137 430t368 160q207 0 350 -138t143 -406q0 -259 -126 -428t-391 -169q-221 0 -351 149.5t-130 401.5zM244 515q0 -171 75 -285t238 -114q179 0 245.5 135.5t66.5 301.5q0 150 -48 244q-76 148 -262 148q-165 0 -240 -126t-75 -304zM368 1213l183 289h222 l-267 -289h-138zM558 1097z" />
<glyph unicode="&#xf4;" d="M59 512q0 270 137 430t368 160q207 0 350 -138t143 -406q0 -259 -126 -428t-391 -169q-221 0 -351 149.5t-130 401.5zM244 515q0 -171 75 -285t238 -114q179 0 245.5 135.5t66.5 301.5q0 150 -48 244q-76 148 -262 148q-165 0 -240 -126t-75 -304zM275 1213l203 289h190 l204 -289h-164l-135 192l-135 -192h-163zM558 1097z" />
<glyph unicode="&#xf5;" d="M59 512q0 270 137 430t368 160q207 0 350 -138t143 -406q0 -259 -126 -428t-391 -169q-221 0 -351 149.5t-130 401.5zM225 1232q13 79 43 129q57 92 169 92q34 0 75.5 -10t111.5 -40q28 -12 51 -19t47 -7q56 0 80 35q13 19 18 57h105q-21 -127 -80.5 -175t-130.5 -48 q-22 0 -56 8t-60 18l-53 19q-47 17 -76.5 25.5t-57.5 8.5q-35 0 -57.5 -23t-30.5 -70h-98zM244 515q0 -171 75 -285t238 -114q179 0 245.5 135.5t66.5 301.5q0 150 -48 244q-76 148 -262 148q-165 0 -240 -126t-75 -304zM558 1097z" />
<glyph unicode="&#xf6;" d="M59 512q0 270 137 430t368 160q207 0 350 -138t143 -406q0 -259 -126 -428t-391 -169q-221 0 -351 149.5t-130 401.5zM244 515q0 -171 75 -285t238 -114q179 0 245.5 135.5t66.5 301.5q0 150 -48 244q-76 148 -262 148q-165 0 -240 -126t-75 -304zM312 1237v208h187v-208 h-187zM558 1097zM642 1237v208h187v-208h-187z" />
<glyph unicode="&#xf7;" horiz-adv-x="1124" d="M92 438v168h1043v-168h-1043zM509 21v220h211v-220h-211zM509 803v221h211v-221h-211z" />
<glyph unicode="&#xf8;" horiz-adv-x="1251" d="M92 4l128 135q-50 74 -77 166t-27 218q0 227 126.5 403.5t368.5 176.5q126 0 221 -46q56 -27 128 -88l125 142l52 -50l-128 -144q63 -92 90 -211q17 -77 17 -154q0 -258 -139 -425.5t-370 -167.5q-110 0 -196 32.5t-139 88.5l-121 -128zM298 511q0 -72 15 -138 q9 -37 30 -94l503 564q-28 43 -90 72.5t-138 29.5q-145 0 -232.5 -121.5t-87.5 -312.5zM388 213q49 -57 106 -77t116 -20q189 0 268 178q48 107 48 246q0 90 -15 155q-8 35 -27 82z" />
<glyph unicode="&#xf9;" d="M128 343v728h184v-711q0 -82 26 -134q48 -96 179 -96q188 0 256 168q37 90 37 247v526h180v-1071h-170l2 158q-35 -61 -87 -103q-103 -84 -250 -84q-229 0 -312 153q-45 82 -45 219zM284 1502h223l182 -289h-137zM559 1097z" />
<glyph unicode="&#xfa;" d="M128 343v728h184v-711q0 -82 26 -134q48 -96 179 -96q188 0 256 168q37 90 37 247v526h180v-1071h-170l2 158q-35 -61 -87 -103q-103 -84 -250 -84q-229 0 -312 153q-45 82 -45 219zM369 1213l183 289h222l-267 -289h-138zM559 1097z" />
<glyph unicode="&#xfb;" d="M128 343v728h184v-711q0 -82 26 -134q48 -96 179 -96q188 0 256 168q37 90 37 247v526h180v-1071h-170l2 158q-35 -61 -87 -103q-103 -84 -250 -84q-229 0 -312 153q-45 82 -45 219zM276 1213l203 289h190l204 -289h-164l-135 192l-135 -192h-163zM559 1097z" />
<glyph unicode="&#xfc;" d="M128 343v728h184v-711q0 -82 26 -134q48 -96 179 -96q188 0 256 168q37 90 37 247v526h180v-1071h-170l2 158q-35 -61 -87 -103q-103 -84 -250 -84q-229 0 -312 153q-45 82 -45 219zM313 1237v208h187v-208h-187zM559 1097zM643 1237v208h187v-208h-187z" />
<glyph unicode="&#xfd;" horiz-adv-x="1024" d="M21 1071h204l287 -872l289 872h199q-38 -103 -169 -470q-98 -276 -164 -450q-156 -410 -220 -500t-220 -90q-38 0 -58.5 3t-50.5 11v164q47 -13 68 -16t37 -3q50 0 73.5 16.5t39.5 40.5q5 8 36 82t45 110zM360 1209l183 289h222l-267 -289h-138zM511 1097z" />
<glyph unicode="&#xfe;" d="M128 -437v1892h170v-545q57 76 107 111q90 62 217 62q209 0 326 -150.5t117 -391.5q0 -302 -138 -444.5t-327 -142.5q-131 0 -215 62q-46 34 -82 93v-546h-175zM298 540q0 -171 37 -262q66 -167 255 -167q133 0 211 108.5t78 302.5q0 134 -36 225q-69 175 -254 175 q-113 0 -202 -92.5t-89 -289.5z" />
<glyph unicode="&#xff;" horiz-adv-x="1024" d="M21 1071h204l287 -872l289 872h199q-38 -103 -169 -470q-98 -276 -164 -450q-156 -410 -220 -500t-220 -90q-38 0 -58.5 3t-50.5 11v164q47 -13 68 -16t37 -3q50 0 73.5 16.5t39.5 40.5q5 8 36 82t45 110zM265 1237v208h187v-208h-187zM511 1097zM595 1237v208h187v-208 h-187z" />
<glyph unicode="&#x152;" horiz-adv-x="2048" d="M73 720q0 295 125 505q164 277 502 277q128 0 222.5 -48.5t148.5 -133.5v149h901v-175h-711v-451h677v-170h-677v-498h715v-175h-907v154q-45 -79 -146 -133.5t-266 -54.5q-222 0 -404 189q-180 208 -180 565zM274 713q0 -255 106 -420t336 -165q126 0 234.5 83 t108.5 279v517q0 154 -101 243t-250 89q-255 0 -364 -242q-70 -157 -70 -384z" />
<glyph unicode="&#x153;" horiz-adv-x="1933" d="M71 523q0 247 133 411.5t374 164.5q169 0 280 -81q62 -45 116 -130q64 99 167 154t232 55q119 0 215.5 -48.5t162.5 -143.5q61 -87 81 -203q12 -71 14 -224h-794q5 -132 46 -213q76 -154 269 -154q135 0 214 91q44 49 73 134h180q-42 -177 -169.5 -278t-301.5 -101 q-118 0 -221.5 47t-186.5 171q-70 -122 -174 -169t-217 -47q-208 0 -350.5 142.5t-142.5 421.5zM256 512q0 -184 89.5 -291.5t230.5 -107.5q113 0 210.5 95t97.5 341q0 197 -88 295.5t-224 98.5q-134 0 -225 -106t-91 -325zM1054 616h605q-8 116 -49 188q-75 134 -253 134 q-89 0 -165 -53q-118 -83 -138 -269z" />
<glyph unicode="&#x178;" horiz-adv-x="1366" d="M42 1469h232l422 -706l422 706h233l-555 -877v-592h-199v592zM453 1609v208h187v-208h-187zM699 1469zM783 1609v208h187v-208h-187z" />
<glyph unicode="&#x2c6;" horiz-adv-x="682" d="M42 1213l203 289h190l204 -289h-164l-135 192l-135 -192h-163z" />
<glyph unicode="&#x2dc;" horiz-adv-x="682" d="M-9 1232q13 79 43 129q57 92 169 92q34 0 75.5 -10t111.5 -40q28 -12 51 -19t47 -7q56 0 80 35q13 19 18 57h105q-21 -127 -80.5 -175t-130.5 -48q-22 0 -56 8t-60 18l-53 19q-47 17 -76.5 25.5t-57.5 8.5q-35 0 -57.5 -23t-30.5 -70h-98z" />
<glyph unicode="&#x2000;" horiz-adv-x="973" />
<glyph unicode="&#x2001;" horiz-adv-x="1946" />
<glyph unicode="&#x2002;" horiz-adv-x="973" />
<glyph unicode="&#x2003;" horiz-adv-x="1946" />
<glyph unicode="&#x2004;" horiz-adv-x="648" />
<glyph unicode="&#x2005;" horiz-adv-x="486" />
<glyph unicode="&#x2006;" horiz-adv-x="324" />
<glyph unicode="&#x2007;" horiz-adv-x="324" />
<glyph unicode="&#x2008;" horiz-adv-x="243" />
<glyph unicode="&#x2009;" horiz-adv-x="389" />
<glyph unicode="&#x200a;" horiz-adv-x="108" />
<glyph unicode="&#x2010;" horiz-adv-x="682" d="M85 478v185h502v-185h-502z" />
<glyph unicode="&#x2011;" horiz-adv-x="682" d="M85 478v185h502v-185h-502z" />
<glyph unicode="&#x2012;" horiz-adv-x="682" d="M85 478v185h502v-185h-502z" />
<glyph unicode="&#x2013;" d="M-5 493v147h1147v-147h-1147z" />
<glyph unicode="&#x2014;" horiz-adv-x="2048" d="M241 493v147h1565v-147h-1565z" />
<glyph unicode="&#x2018;" horiz-adv-x="455" d="M132 962v201q0 119 50 212.5t164 107.5v-94q-55 -9 -83.5 -62t-28.5 -123q0 -6 0.5 -11.5t2.5 -12.5h109v-218h-214z" />
<glyph unicode="&#x2019;" horiz-adv-x="455" d="M170 948v94q55 9 83.5 62t28.5 122q0 7 -0.5 12.5t-2.5 12.5h-109v218h214v-201q0 -128 -53 -217.5t-161 -102.5z" />
<glyph unicode="&#x201a;" horiz-adv-x="455" d="M170 0v218h214v-202q0 -119 -48 -209t-166 -111v95q69 12 97 97q15 45 15 87q0 7 -0.5 12.5t-2.5 12.5h-109z" />
<glyph unicode="&#x201c;" horiz-adv-x="682" d="M78 962v201q0 148 59 228t154 92v-94q-69 -13 -97 -100q-14 -43 -14 -85q0 -5 0.5 -8.5t1.5 -15.5h109v-218h-213zM414 962v201q0 119 50 212.5t164 107.5v-94q-55 -9 -83.5 -62t-28.5 -122q0 -6 0.5 -12t2.5 -13h109v-218h-214z" />
<glyph unicode="&#x201d;" horiz-adv-x="682" d="M78 948v94q75 14 100 110q14 57 9 99h-109v218h213v-201q0 -119 -49 -211.5t-164 -108.5zM414 948v94q75 14 99 110q14 57 10 99h-109v218h214v-201q0 -119 -49 -212.5t-165 -107.5z" />
<glyph unicode="&#x201e;" horiz-adv-x="682" d="M78 0v218h213v-202q0 -115 -44.5 -206t-168.5 -114v95q61 12 89 72.5t20 136.5h-109zM414 0v218h214v-202q0 -116 -46.5 -207t-167.5 -113v95q69 12 97 97q15 45 15 87q0 7 -0.5 12.5t-2.5 12.5h-109z" />
<glyph unicode="&#x2022;" horiz-adv-x="717" d="M149 734q0 96 62.5 158t158.5 62t158.5 -62t62.5 -158t-62.5 -159t-158.5 -63t-158.5 63t-62.5 159z" />
<glyph unicode="&#x2026;" horiz-adv-x="2048" d="M237 0v220h208v-220h-208zM919 0v220h209v-220h-209zM1602 0v220h208v-220h-208z" />
<glyph unicode="&#x202f;" horiz-adv-x="389" />
<glyph unicode="&#x2039;" horiz-adv-x="682" d="M180 464v190l322 251v-180l-216 -166l216 -166v-180z" />
<glyph unicode="&#x203a;" horiz-adv-x="682" d="M170 213v180l216 166l-216 166v180l323 -251v-190z" />
<glyph unicode="&#x205f;" horiz-adv-x="486" />
<glyph unicode="&#x20ac;" horiz-adv-x="1524" d="M96 524l42 142h196q-2 41 -2 84q0 37 2 74h-238l42 142h212q34 183 127 317q156 226 431 226q234 0 363.5 -147t143.5 -334h-163q-27 142 -110 225t-232 83q-183 0 -295 -153q-62 -84 -89 -217h558l-42 -142h-536q-3 -51 -3 -108q0 -26 1 -50h580l-42 -142h-523 q24 -131 85 -227q101 -160 302 -160q185 0 282 169q51 89 76 234h163q-22 -232 -145 -389q-147 -189 -396 -189q-215 0 -361 155q-138 146 -177 407h-252z" />
<glyph unicode="&#x2122;" horiz-adv-x="2048" d="M237 1348v121h618v-121h-237v-604h-144v604h-237zM978 744v725h207l185 -519l187 519h206v-725h-133v585l-201 -585h-116l-202 585v-585h-133z" />
<hkern u1="&#x20;" u2="Y" k="36" />
<hkern u1="&#x20;" u2="T" k="36" />
<hkern u1="&#x20;" u2="A" k="112" />
<hkern u1="&#x31;" u2="&#x31;" k="151" />
<hkern u1="A" u2="&#x2019;" k="151" />
<hkern u1="A" u2="y" k="36" />
<hkern u1="A" u2="w" k="36" />
<hkern u1="A" u2="v" k="36" />
<hkern u1="A" u2="Y" k="151" />
<hkern u1="A" u2="W" k="75" />
<hkern u1="A" u2="V" k="151" />
<hkern u1="A" u2="T" k="151" />
<hkern u1="A" u2="&#x20;" k="112" />
<hkern u1="F" u2="A" k="112" />
<hkern u1="F" u2="&#x2e;" k="227" />
<hkern u1="F" u2="&#x2c;" k="227" />
<hkern u1="L" u2="&#x2019;" k="112" />
<hkern u1="L" u2="y" k="75" />
<hkern u1="L" u2="Y" k="151" />
<hkern u1="L" u2="W" k="151" />
<hkern u1="L" u2="V" k="151" />
<hkern u1="L" u2="T" k="151" />
<hkern u1="L" u2="&#x20;" k="75" />
<hkern u1="P" u2="A" k="151" />
<hkern u1="P" u2="&#x2e;" k="264" />
<hkern u1="P" u2="&#x2c;" k="264" />
<hkern u1="P" u2="&#x20;" k="36" />
<hkern u1="R" u2="Y" k="36" />
<hkern u1="R" u2="W" k="36" />
<hkern u1="R" u2="V" k="36" />
<hkern u1="R" u2="T" k="36" />
<hkern u1="T" u2="y" k="112" />
<hkern u1="T" u2="w" k="112" />
<hkern u1="T" u2="u" k="75" />
<hkern u1="T" u2="s" k="227" />
<hkern u1="T" u2="r" k="75" />
<hkern u1="T" u2="o" k="227" />
<hkern u1="T" u2="i" k="75" />
<hkern u1="T" u2="e" k="227" />
<hkern u1="T" u2="c" k="227" />
<hkern u1="T" u2="a" k="227" />
<hkern u1="T" u2="O" k="36" />
<hkern u1="T" u2="A" k="151" />
<hkern u1="T" u2="&#x3b;" k="227" />
<hkern u1="T" u2="&#x3a;" k="227" />
<hkern u1="T" u2="&#x2e;" k="227" />
<hkern u1="T" u2="&#x2d;" k="112" />
<hkern u1="T" u2="&#x2c;" k="227" />
<hkern u1="T" u2="&#x20;" k="36" />
<hkern u1="V" u2="y" k="75" />
<hkern u1="V" u2="u" k="75" />
<hkern u1="V" u2="r" k="75" />
<hkern u1="V" u2="o" k="112" />
<hkern u1="V" u2="i" k="36" />
<hkern u1="V" u2="e" k="112" />
<hkern u1="V" u2="a" k="151" />
<hkern u1="V" u2="A" k="151" />
<hkern u1="V" u2="&#x3b;" k="75" />
<hkern u1="V" u2="&#x3a;" k="75" />
<hkern u1="V" u2="&#x2e;" k="188" />
<hkern u1="V" u2="&#x2d;" k="112" />
<hkern u1="V" u2="&#x2c;" k="188" />
<hkern u1="W" u2="y" k="18" />
<hkern u1="W" u2="u" k="36" />
<hkern u1="W" u2="r" k="36" />
<hkern u1="W" u2="o" k="36" />
<hkern u1="W" u2="e" k="36" />
<hkern u1="W" u2="a" k="75" />
<hkern u1="W" u2="A" k="75" />
<hkern u1="W" u2="&#x3b;" k="36" />
<hkern u1="W" u2="&#x3a;" k="36" />
<hkern u1="W" u2="&#x2e;" k="112" />
<hkern u1="W" u2="&#x2d;" k="36" />
<hkern u1="W" u2="&#x2c;" k="112" />
<hkern u1="Y" u2="v" k="112" />
<hkern u1="Y" u2="u" k="112" />
<hkern u1="Y" u2="q" k="188" />
<hkern u1="Y" u2="p" k="151" />
<hkern u1="Y" u2="o" k="188" />
<hkern u1="Y" u2="i" k="75" />
<hkern u1="Y" u2="e" k="188" />
<hkern u1="Y" u2="a" k="151" />
<hkern u1="Y" u2="A" k="151" />
<hkern u1="Y" u2="&#x3b;" k="133" />
<hkern u1="Y" u2="&#x3a;" k="112" />
<hkern u1="Y" u2="&#x2e;" k="264" />
<hkern u1="Y" u2="&#x2d;" k="188" />
<hkern u1="Y" u2="&#x2c;" k="264" />
<hkern u1="Y" u2="&#x20;" k="36" />
<hkern u1="f" u2="&#x2019;" k="-37" />
<hkern u1="f" u2="f" k="36" />
<hkern u1="r" u2="&#x2019;" k="-76" />
<hkern u1="r" u2="&#x2e;" k="112" />
<hkern u1="r" u2="&#x2c;" k="112" />
<hkern u1="v" u2="&#x2e;" k="151" />
<hkern u1="v" u2="&#x2c;" k="151" />
<hkern u1="w" u2="&#x2e;" k="112" />
<hkern u1="w" u2="&#x2c;" k="112" />
<hkern u1="y" u2="&#x2e;" k="151" />
<hkern u1="y" u2="&#x2c;" k="151" />
<hkern u1="&#x2018;" u2="&#x2018;" k="36" />
<hkern u1="&#x2019;" u2="&#x2019;" k="36" />
<hkern u1="&#x2019;" u2="s" k="36" />
<hkern u1="&#x2019;" u2="&#x20;" k="75" />
</font>
</defs></svg>

After

Width:  |  Height:  |  Size: 58 KiB

BIN
app/assets/fonts/helvetica.ttf Executable file

Binary file not shown.

BIN
app/assets/fonts/helvetica.woff Executable file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 643 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 KiB

BIN
app/assets/images/carto.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 985 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 348 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 234 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 790 B

View File

@ -0,0 +1,11 @@
<svg width="92px" height="36px" viewBox="0 0 92 36" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="Carto-Framework" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g transform="translate(-162.000000, -282.000000)" >
<g transform="translate(162.000000, 282.000000)">
<path d="M74,36 C83.9411255,36 92,27.9411255 92,18 C92,8.0588745 83.9411255,0 74,0 C64.0588745,0 56,8.0588745 56,18 C56,27.9411255 64.0588745,36 74,36 Z" id="halo" fill-opacity="0.200000018" fill="#162945"></path>
<path d="m2.18002,12.66472l8.62353,0l0,2.38605l-5.12022,0l0,1.93914l4.37337,0l0,2.24214l-4.37337,0l0,4.53729l-3.50331,0l0,-11.10463l0,0.00001zm22.70606,9.27153l-3.97299,0l-0.54667,1.8331l-3.5649,0l4.24248,-11.10464l3.80359,0l4.24246,11.10464l-3.6496,0l-0.55437,-1.8331zm-0.73147,-2.4012l-1.24734,-3.99192l-1.23963,3.99192l2.48697,0zm10.70241,0.56054l3.3185,-0.20453c0.07188,0.53024 0.21817,0.93422 0.4389,1.21197c0.35933,0.44944 0.8726,0.67416 1.53991,0.67416c0.4979,0 0.88161,-0.11487 1.1511,-0.34465c0.26947,-0.22977 0.40423,-0.49614 0.40423,-0.79914c0,-0.28785 -0.12831,-0.54539 -0.38498,-0.77263c-0.25667,-0.22723 -0.85208,-0.44187 -1.7863,-0.64386c-1.52965,-0.33833 -2.62042,-0.78778 -3.27232,-1.34831c-0.65703,-0.56054 -0.98555,-1.27507 -0.98555,-2.14367c0,-0.57064 0.16809,-1.10971 0.50432,-1.61722c0.3362,-0.50751 0.84183,-0.90645 1.51682,-1.19681c0.675,-0.29038 1.60021,-0.43556 2.7757,-0.43556c1.44239,0 2.54213,0.26385 3.29927,0.79153c0.75713,0.5277 1.20753,1.36727 1.35125,2.51861l-3.2877,0.18937c-0.08727,-0.49993 -0.27078,-0.86353 -0.55052,-1.09077c-0.27975,-0.22724 -0.66602,-0.34086 -1.15879,-0.34086c-0.40552,0 -0.71094,0.08457 -0.91625,0.25376c-0.20534,0.16918 -0.30798,0.37497 -0.30798,0.61737c0,0.17676 0.08467,0.33581 0.25408,0.47722c0.16425,0.14645 0.55437,0.28277 1.17034,0.40904c1.52453,0.32318 2.61657,0.65017 3.27617,0.98093c0.65959,0.33075 1.13954,0.74107 1.43981,1.23091c0.30029,0.48982 0.45043,1.03772 0.45043,1.64372c0,0.71203 -0.20019,1.3685 -0.60056,1.96944c-0.40038,0.60094 -0.95988,1.05667 -1.67851,1.36726c-0.71863,0.31057 -1.62463,0.46585 -2.71796,0.46585c-1.91978,0 -3.24922,-0.3636 -3.98838,-1.09077c-0.73917,-0.72719 -1.1575,-1.6513 -1.25502,-2.77237l0,0.00002l-0.00001,-0.00001zm16.46169,-7.43087l10.60232,0l0,2.74207l-3.55719,0l0,8.36256l-3.4879,0l0,-8.36256l-3.55722,0l0,-2.74207l0,0l-0.00002,0l0.00001,0z" id="logotype" fill="#162945"></path>
<ellipse id="svg_3" ry="5.8843" rx="5.98124" cy="17.88506" cx="74.14399" stroke="null" fill="#162945"></ellipse>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@ -0,0 +1,11 @@
<svg width="92px" height="36px" viewBox="0 0 92 36" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g transform="translate(-162.000000, -282.000000)" fill="#B1B8C1">
<g transform="translate(162.000000, 282.000000)">
<path d="M74,36 C83.9411255,36 92,27.9411255 92,18 C92,8.0588745 83.9411255,0 74,0 C64.0588745,0 56,8.0588745 56,18 C56,27.9411255 64.0588745,36 74,36 Z" id="halo" fill-opacity="0.200000018"></path>
<path d="m2.18002,12.66472l8.62353,0l0,2.38605l-5.12022,0l0,1.93914l4.37337,0l0,2.24214l-4.37337,0l0,4.53729l-3.50331,0l0,-11.10463l0,0.00001zm22.70606,9.27153l-3.97299,0l-0.54667,1.8331l-3.5649,0l4.24248,-11.10464l3.80359,0l4.24246,11.10464l-3.6496,0l-0.55437,-1.8331zm-0.73147,-2.4012l-1.24734,-3.99192l-1.23963,3.99192l2.48697,0zm10.70241,0.56054l3.3185,-0.20453c0.07188,0.53024 0.21817,0.93422 0.4389,1.21197c0.35933,0.44944 0.8726,0.67416 1.53991,0.67416c0.4979,0 0.88161,-0.11487 1.1511,-0.34465c0.26947,-0.22977 0.40423,-0.49614 0.40423,-0.79914c0,-0.28785 -0.12831,-0.54539 -0.38498,-0.77263c-0.25667,-0.22723 -0.85208,-0.44187 -1.7863,-0.64386c-1.52965,-0.33833 -2.62042,-0.78778 -3.27232,-1.34831c-0.65703,-0.56054 -0.98555,-1.27507 -0.98555,-2.14367c0,-0.57064 0.16809,-1.10971 0.50432,-1.61722c0.3362,-0.50751 0.84183,-0.90645 1.51682,-1.19681c0.675,-0.29038 1.60021,-0.43556 2.7757,-0.43556c1.44239,0 2.54213,0.26385 3.29927,0.79153c0.75713,0.5277 1.20753,1.36727 1.35125,2.51861l-3.2877,0.18937c-0.08727,-0.49993 -0.27078,-0.86353 -0.55052,-1.09077c-0.27975,-0.22724 -0.66602,-0.34086 -1.15879,-0.34086c-0.40552,0 -0.71094,0.08457 -0.91625,0.25376c-0.20534,0.16918 -0.30798,0.37497 -0.30798,0.61737c0,0.17676 0.08467,0.33581 0.25408,0.47722c0.16425,0.14645 0.55437,0.28277 1.17034,0.40904c1.52453,0.32318 2.61657,0.65017 3.27617,0.98093c0.65959,0.33075 1.13954,0.74107 1.43981,1.23091c0.30029,0.48982 0.45043,1.03772 0.45043,1.64372c0,0.71203 -0.20019,1.3685 -0.60056,1.96944c-0.40038,0.60094 -0.95988,1.05667 -1.67851,1.36726c-0.71863,0.31057 -1.62463,0.46585 -2.71796,0.46585c-1.91978,0 -3.24922,-0.3636 -3.98838,-1.09077c-0.73917,-0.72719 -1.1575,-1.6513 -1.25502,-2.77237l0,0.00002l-0.00001,-0.00001zm16.46169,-7.43087l10.60232,0l0,2.74207l-3.55719,0l0,8.36256l-3.4879,0l0,-8.36256l-3.55722,0l0,-2.74207l0,0l-0.00002,0l0.00001,0z" id="logotype"></path>
<ellipse id="svg_3" ry="5.8843" rx="5.98124" cy="17.88506" cx="74.14399" stroke="null"></ellipse>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -0,0 +1,11 @@
<svg width="92px" height="36px" viewBox="0 0 92 36" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g transform="translate(-162.000000, -282.000000)" fill="#FFFFFF">
<g transform="translate(162.000000, 282.000000)">
<path d="M74,36 C83.9411255,36 92,27.9411255 92,18 C92,8.0588745 83.9411255,0 74,0 C64.0588745,0 56,8.0588745 56,18 C56,27.9411255 64.0588745,36 74,36 Z" id="halo" fill-opacity="0.200000018"></path>
<path d="m2.18002,12.66472l8.62353,0l0,2.38605l-5.12022,0l0,1.93914l4.37337,0l0,2.24214l-4.37337,0l0,4.53729l-3.50331,0l0,-11.10463l0,0.00001zm22.70606,9.27153l-3.97299,0l-0.54667,1.8331l-3.5649,0l4.24248,-11.10464l3.80359,0l4.24246,11.10464l-3.6496,0l-0.55437,-1.8331zm-0.73147,-2.4012l-1.24734,-3.99192l-1.23963,3.99192l2.48697,0zm10.70241,0.56054l3.3185,-0.20453c0.07188,0.53024 0.21817,0.93422 0.4389,1.21197c0.35933,0.44944 0.8726,0.67416 1.53991,0.67416c0.4979,0 0.88161,-0.11487 1.1511,-0.34465c0.26947,-0.22977 0.40423,-0.49614 0.40423,-0.79914c0,-0.28785 -0.12831,-0.54539 -0.38498,-0.77263c-0.25667,-0.22723 -0.85208,-0.44187 -1.7863,-0.64386c-1.52965,-0.33833 -2.62042,-0.78778 -3.27232,-1.34831c-0.65703,-0.56054 -0.98555,-1.27507 -0.98555,-2.14367c0,-0.57064 0.16809,-1.10971 0.50432,-1.61722c0.3362,-0.50751 0.84183,-0.90645 1.51682,-1.19681c0.675,-0.29038 1.60021,-0.43556 2.7757,-0.43556c1.44239,0 2.54213,0.26385 3.29927,0.79153c0.75713,0.5277 1.20753,1.36727 1.35125,2.51861l-3.2877,0.18937c-0.08727,-0.49993 -0.27078,-0.86353 -0.55052,-1.09077c-0.27975,-0.22724 -0.66602,-0.34086 -1.15879,-0.34086c-0.40552,0 -0.71094,0.08457 -0.91625,0.25376c-0.20534,0.16918 -0.30798,0.37497 -0.30798,0.61737c0,0.17676 0.08467,0.33581 0.25408,0.47722c0.16425,0.14645 0.55437,0.28277 1.17034,0.40904c1.52453,0.32318 2.61657,0.65017 3.27617,0.98093c0.65959,0.33075 1.13954,0.74107 1.43981,1.23091c0.30029,0.48982 0.45043,1.03772 0.45043,1.64372c0,0.71203 -0.20019,1.3685 -0.60056,1.96944c-0.40038,0.60094 -0.95988,1.05667 -1.67851,1.36726c-0.71863,0.31057 -1.62463,0.46585 -2.71796,0.46585c-1.91978,0 -3.24922,-0.3636 -3.98838,-1.09077c-0.73917,-0.72719 -1.1575,-1.6513 -1.25502,-2.77237l0,0.00002l-0.00001,-0.00001zm16.46169,-7.43087l10.60232,0l0,2.74207l-3.55719,0l0,8.36256l-3.4879,0l0,-8.36256l-3.55722,0l0,-2.74207l0,0l-0.00002,0l0.00001,0z" id="logotype"></path>
<ellipse id="svg_3" ry="5.8843" rx="5.98124" cy="17.88506" cx="74.14399" stroke="null"></ellipse>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -0,0 +1,32 @@
<svg width="92px" height="36px" viewBox="0 0 92 36" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<style>
/* <![CDATA[ */
#Halo {
animation: pound 2s infinite;
transform-origin: center;
}
@keyframes pound {
from {
transform: none;
opacity: 0.20
}
50% {
transform: scale(0.7);
opacity: 0.05
}
to {
transform: none;
opacity: 0.20
}
}
/* ]]> */
</style>
<g id="New" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="00---01-Sign-Up" transform="translate(-674.000000, -352.000000)" fill="#FFFFFF">
<g id="Logo" transform="translate(674.000000, 352.000000)">
<path d="M74,36 C83.9411255,36 92,27.9411255 92,18 C92,8.0588745 83.9411255,0 74,0 C64.0588745,0 56,8.0588745 56,18 C56,27.9411255 64.0588745,36 74,36 Z" id="Halo" opacity="0.199999988"></path>
<path d="M6.25280899,23.981602 C8.76747566,23.981602 10.220757,22.882802 11.2984713,21.390402 L8.9144367,19.684802 C8.22861851,20.521202 7.52647133,21.078802 6.33445401,21.078802 C4.73421159,21.078802 3.60751029,19.734002 3.60751029,18.012002 L3.60751029,17.979202 C3.60751029,16.306402 4.73421159,14.928802 6.33445401,14.928802 C7.4284973,14.928802 8.1796315,15.470002 8.83279168,16.273602 L11.2168263,14.420402 C10.204428,13.026402 8.70215964,12.042402 6.36711202,12.042402 C2.9053631,12.042402 0.358038428,14.666402 0.358038428,18.012002 L0.358038428,18.044802 C0.358038428,21.472402 2.98700813,23.981602 6.25280899,23.981602 L6.25280899,23.981602 Z M16.732047,23.752002 L20.0468349,23.752002 L20.8632851,21.685602 L25.2884453,21.685602 L26.1048955,23.752002 L29.5013284,23.752002 L24.6352851,12.190002 L21.5817613,12.190002 L16.732047,23.752002 Z M21.7940384,19.209202 L23.0840297,15.962002 L24.357692,19.209202 L21.7940384,19.209202 Z M35.6697093,23.752002 L38.8375361,23.752002 L38.8375361,20.275202 L40.2418305,20.275202 L42.5442201,23.752002 L46.1855881,23.752002 L43.4586443,19.750402 C44.8792677,19.143602 45.810021,17.979202 45.810021,16.208002 L45.810021,16.175202 C45.810021,15.043602 45.4671119,14.174402 44.7976227,13.502002 C44.0301595,12.731202 42.8218132,12.272002 41.0746097,12.272002 L35.6697093,12.272002 L35.6697093,23.752002 Z M38.8375361,17.782402 L38.8375361,15.010802 L40.9276487,15.010802 C41.9727049,15.010802 42.6421941,15.470002 42.6421941,16.388402 L42.6421941,16.421202 C42.6421941,17.257602 42.005363,17.782402 40.9439777,17.782402 L38.8375361,17.782402 Z M55.2605317,23.752002 L58.4283585,23.752002 L58.4283585,15.060002 L61.8574495,15.060002 L61.8574495,12.272002 L51.8477698,12.272002 L51.8477698,15.060002 L55.2605317,15.060002 L55.2605317,23.752002 Z M74,24 C77.3137085,24 80,21.3137085 80,18 C80,14.6862915 77.3137085,12 74,12 C70.6862915,12 68,14.6862915 68,18 C68,21.3137085 70.6862915,24 74,24 Z"></path>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

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