mirror of
https://github.com/simple-login/app.git
synced 2024-11-10 21:27:10 +01:00
c18d9f5280
register page redirect user to dashboard if they are logged in enable csrf for login page Set models more strict bootstrap developer page add helper method to ModelMixin, remove CRUDMixin display list of clients on developer index, add copy client-secret to clipboard using clipboardjs add toastr and use jquery non slim display a toast when user copies the client-secret create new client, generate client-id using unidecode client detail page: can edit client add delete client implement /oauth/authorize and /oauth/allow-deny implement /oauth/token add /oauth/user_info endpoint handle scopes: wip take into account scope: display scope, return user data according to scope create virtual-domain, gen email, client_user model WIP create authorize_nonlogin_user page user can choose to generate a new email no need to interfere with root logger log for before and after request if user has already allowed a client: generate a auth-code and redirect user to client get_user_info takes into account gen email display list of clients that have user has authorised use yk-client domain instead of localhost as cookie depends on the domain name use wtforms instead of flask_wtf Dockerfile delete virtual domain EMAIL_DOMAIN can come from env var bind to host 0.0.0.0 fix signup error: use session as default csrf_context rename yourkey to simplelogin add python-dotenv, ipython, sqlalchemy_utils create DB_URI, FLASK_SECRET. Load config from CONFIG file if exist add shortcuts to logging create shell add psycopg2 do not add local data in Dockerfile add drop_db into shell add shell.prepare_db() fix prepare_db setup sentry copy assets from tabler/dist add icon downloaded from https://commons.wikimedia.org/wiki/File:Simpleicons_Interface_key-tool-1.svg integrate tabler - login and register page add favicon template: default, header. Use gravatar for user avatar url use default template for dashboard, developer page use another icon add clipboard and notie prettify dashboard add notie css add fake gen email and client-user prettify list client page, use notie for toast add email, name scope to new client display client scope in client list prettify new-client, client-detail add sentry-sdk and blinker add arrow, add dt jinja filter, prettify logout, dashboard comment "last used" in dashboard for now prettify date display add copy email to clipboard to dashboard use "users" as table name for User as "user" is reserved key in postgres call prepare_db() when creating new db error page 400, 401, 403, 404 prettify authorize_login_user create already_authorize.html for user who has already authorized a client user can generate new email display all other generated emails add ENV variable, only reset DB when ENV=local fix: not return other users gen emails display nb users for each client refactor shell: remove prepare_db() add sendgrid add /favicon.ico route add new config: URL, SUPPORT_EMAIL, SENDGRID_API_KEY user needs to activate their account before login create copy button on dashboard client can have multiple redirect uris, in client detail can add/remove redirect-uri, use redirect_uri passed in /authorize refactor: move get_user_info into ClientUser model dashboard: display all apps, all generated emails add "id" into user_info add trigger email button invalidate the session at each new version by changing the secret centralize Client creation into Client.create_new user can enable/disable email forwarding setup auto dismiss alert: just add .alert-auto-dismiss move name down in register form add shell.add_real_data move blueprint template to its own package prettify authorize page for non-authenticated user update readme, return error if not redirect_uri add flask-wtf, use psycopg2-binary use flask-wtf FlaskForm instead of Form rename email -> email_utils add AWS_REGION, BUCKET, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY to config add s3 module add File model, add Client.icon_id handle client icon update can create client with icon display client icon in client list page add Client.home_url take into account Client.home_url add boto3 register: ask name first only show "trigger test email" if email forwarding is enabled display gen email in alphabetical order, client in client.name alphabetical order better error page the modal does not get close when user clicks outside of modal add Client.published column discover page that displays all published Client add missing bootstrap.bundle.min.js.map developer can publish/unpublish their app in discover use notie for display flash message create hotmail account fix missing jquery add footer, add global jinja2 variable strengthen model: use nullable=False whenever possible, rename client_id to oauth_client_id, client_secret to oauth_client_secret add flask-migrate init migrate 1st migrate version fix rename client_id -> oauth_client_id prettify UI use flask_migrate.upgrade() instead of db.create_all() make sure requirejs.config is called for all page enable sentry for js, use uppercase for global jinja2 variables add flask-admin add User.is_admin column setup flask admin, only accessible to admin user fix migration: add server_default replace session[redirect_after_login] by "next" request args add pyproject.toml: ignore migrations/ in black add register waiting_activation_email page better email wording add pytest add get_host_name_and_scheme and tests example fail test fix test fix client-id display add flask-cors /user_info supports cors, add /me as /user_info synonym return client in /me support implicit flow no need to use with "app.app_context()" add watchtower to requirement add param ENABLE_CLOUDWATCH, CLOUDWATCH_LOG_GROUP, CLOUDWATCH_LOG_STREAM add cloudwatch logger if cloudwatch is enabled add 500 error page add help text for list of used client display list of app/website that an email has been used click on client name brings to client detail page create style.css to add additional style, append its url with the current sha1 to avoid cache POC on how to send email using postfix add sqlalchemy-utils use arrow instead of datetime add new params STRIPE_API, STRIPE_YEARLY_SKU, STRIPE_MONTHLY_PLAN show full error in local add plan, plan_expiration to User, need to create enum directly in migration script, cf https://github.com/sqlalchemy/alembic/issues/67 reformat all html files: use space instead of tab new user will have trial plan for 15 days add new param MAX_NB_EMAIL_FREE_PLAN only user with enough quota can create new email if user cannot create new gen email, pick randomly one from existing gen emails. Use flush instead of commit rename STRIPE_YEARLY_SKU -> STRIPE_YEARLY_PLAN open client page in discover in a new tab add stripe not logging /static call: disable flask logging, replace by after_request add param STRIPE_SECRET_KEY add 3 columns stripe_customer_id, stripe_card_token, stripe_subscription_id user can upgrade their pricing add setting page as coming-soon add GenEmail, ClientUser to admin ignore /admin/static logging add more fake data add ondelete="cascade" whenever possible rename plan_expiration -> trial_expiration reset migration: delete old migrations, create new one rename test_send_email -> poc_send_email to avoid the file being called by pytest add new param LYRA_ANALYTICS_ID, add lyra analytics add how to create new migration into readme add drift to base.html notify admin when new user signs up or pays subscription log exception in case of 500 use sendgrid to notify admin add alias /userinfo to user_info endpoint add change_password to shell add info on how payment is handled invite user to retry if card not working remove drift and add "contact us" link move poc_send_email into poc/ support getting client-id, client-secret from form-data in addition to basic auth client-id, client-secret is passed in form-data by passport-oauth2 for ex add jwtRS256 private and public key add jwk-jws-jwt poc add new param OPENID_PRIVATE_KEY_PATH, OPENID_PRIVATE_KEY_PATH add scope, redirect_url to AuthorizationCode and OauthToken take into scope when creating oauth-token, authorization-code add jwcrypto add jose_utils: make_id_token and verify_id_token add &scope to redirect uri add "email_verified": True into user_info fix user not activated add /oauth2 as alias for /oauth handle case where scope and state are empty remove threaded=False Use Email Alias as wording remove help text user can re-send activation email add "expired" into ActivationCode Handle the case activation code is expired reformat: use form.validate_on_submit instead of request.method == post && form.validate use error text instead of flash() display client oauth-id and oauth-secret on client detail page not display oauth-secret on client listing fix expiration check improve page title, footer add /jwks and /.well-known/openid-configuration init properly tests, fix blueprint conflict bug in flask-admin create oauth_models module rename Scope -> ScopeE to distinguish with Scope DB model set app.url_map.strict_slashes = False use ScopeE instead of SCOPE_NAME, ... support access_token passed as args in /userinfo merge /allow-deny into /authorize improve wording take into account the case response_type=code and openid is in scope take into account response_type=id_token, id_token token, id_token code make sure to use in-memory db in test fix scope can be null allow cross_origin for /.well-known/openid-configuration and /jwks fix footer link center authorize form rename trial_expiration to plan_expiration move stripe init to create_app() use real email to be able to receive email notification add user.profile_picture_id column use user profile picture and fallback to gravatar use nguyenkims+local@gm to distinguish with staging handle plan cancel, reactivation, user profile update fix can_create_new_email create cron.py that set plan to free when expired add crontab.yml add yacron use notify_admin instead of LOG.error add ResetPasswordCode model user can change password in setting increase display time for notie add forgot_password page If login error: redirect to this page upon success login. hide discover tab add column user.is_developer only show developer menu to developer comment out the publish button set local user to developer make sure only developer can access /developer blueprint User is invited to upgrade if they are in free plan or their trial ends soon not sending email when in local mode create Partner model create become partner page use normal error handling on local fix migration add "import sqlalchemy_utils" into migration template small refactoring on setting page handle promo code. TODO: add migration file add migration for user.promo_codes move email alias on top of apps in dashboard add introjs move encode_url to utils create GenEmail.create_new_gen_email create a first alias mail to show user how to use when they login show intro when user visits the website the first time fix register
1 line
22 KiB
XML
Executable File
1 line
22 KiB
XML
Executable File
<svg width="100" height="60" viewBox="0 0 100 60" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><title>Bitcoin-dark</title><desc>Created with Sketch.</desc><g id="Dark-Payment-badges" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" transform="translate(-290.000000, -489.000000)"><g id="Bitcoin-dark" transform="translate(290.000000, 489.000000)"><rect id="Rectangle" fill="#F7931A" x="0" y="0" width="100" height="60" rx="4"/><g id="Bitcoin" transform="translate(27.724619, 18.753571)" fill="#FFF"><path d="M7.3425641,5.20408163 C8.00820513,5.20408163 8.5825641,5.32244898 9.06564103,5.55561224 C9.55076923,5.79081633 9.95179487,6.10765306 10.2728205,6.50612245 C10.5897436,6.90663265 10.825641,7.375 10.9779487,7.91122449 C11.1292308,8.4494898 11.2051282,9.02755102 11.2051282,9.64693878 C11.2051282,10.597449 11.0302564,11.4964286 10.6764103,12.3433673 C10.3230769,13.1913265 9.84307692,13.9270408 9.23282051,14.5545918 C8.62307692,15.1816327 7.90307692,15.6755102 7.07282051,16.0403061 C6.24358974,16.4061224 5.3425641,16.5882653 4.37487179,16.5882653 C4.24974359,16.5882653 4.02974359,16.5852041 3.71897436,16.5780612 C3.40820513,16.5719388 3.05076923,16.5403061 2.65076923,16.4862245 C2.24820513,16.4306122 1.8225641,16.3479592 1.37282051,16.2372449 C0.923589744,16.1285714 0.496923077,15.9760204 0.0948717949,15.7826531 L3.68769231,0.763265306 L6.90564103,0.266836735 L5.61948718,5.59642857 C5.89487179,5.47295918 6.17230769,5.37704082 6.44923077,5.30765306 C6.72769231,5.24030612 7.02461538,5.20408163 7.3425641,5.20408163 L7.3425641,5.20408163 Z M4.64358974,14.0489796 C5.12820513,14.0489796 5.58461538,13.9306122 6.01384615,13.697449 C6.44410256,13.4647959 6.81538462,13.15 7.12615385,12.7576531 C7.43692308,12.3642857 7.68358974,11.9204082 7.86307692,11.4244898 C8.0425641,10.9290816 8.13333333,10.4122449 8.13333333,9.87397959 C8.13333333,9.21326531 8.0225641,8.69744898 7.80102564,8.325 C7.57948718,7.95357143 7.17025641,7.76734694 6.57538462,7.76734694 C6.38051282,7.76734694 6.12923077,7.80408163 5.81794872,7.86989796 C5.50564103,7.94081633 5.22615385,8.08622449 4.97538462,8.30510204 L3.60564103,13.9658163 C3.68820513,13.9795918 3.76153846,13.9938776 3.82358974,14.0066327 C3.88461538,14.0204082 3.95179487,14.0306122 4.01897436,14.0377551 C4.09025641,14.0459184 4.17128205,14.0494898 4.26923077,14.0494898 C4.36717949,14.0494898 4.49128205,14.0489796 4.64358974,14.0489796 L4.64358974,14.0489796 Z" id="path8316"/><path d="M14.5435897,16.3 L11.4697436,16.3 L14.065641,5.43316327 L17.1605128,5.43316327 L14.5435897,16.3 L14.5435897,16.3 Z M16.0389744,4.11020408 C15.6097436,4.11020408 15.2210256,3.98265306 14.8758974,3.72857143 C14.5276923,3.4755102 14.3553846,3.08571429 14.3553846,2.56071429 C14.3553846,2.27193878 14.414359,2.0005102 14.5312821,1.74540816 C14.6497436,1.49030612 14.8051282,1.26989796 14.9994872,1.08367347 C15.1938462,0.898469388 15.4184615,0.750510204 15.6738462,0.63877551 C15.9307692,0.529081633 16.2041026,0.474489796 16.4953846,0.474489796 C16.9241026,0.474489796 17.3112821,0.601530612 17.6574359,0.856122449 C18.0025641,1.11173469 18.1764103,1.50153061 18.1764103,2.02346939 C18.1764103,2.31326531 18.1179487,2.58571429 17.9994872,2.84081633 C17.8820513,3.09591837 17.7271795,3.31530612 17.5328205,3.50255102 C17.3405128,3.6877551 17.1133333,3.83520408 16.8584615,3.94591837 C16.6015385,4.05714286 16.3297436,4.11020408 16.0389744,4.11020408 L16.0389744,4.11020408 Z" id="path8318"/><path d="M19.8533333,2.72704082 L23.0728205,2.23061224 L22.2820513,5.43316327 L25.7297436,5.43316327 L25.1071795,7.95306122 L21.68,7.95306122 L20.7671795,11.7545918 C20.6830769,12.0714286 20.6353846,12.3673469 20.6220513,12.6418367 C20.6071795,12.9183673 20.6420513,13.1556122 20.7251282,13.355102 C20.8076923,13.555102 20.9564103,13.7091837 21.1717949,13.8188776 C21.3861538,13.9295918 21.6933333,13.9852041 22.0953846,13.9852041 C22.4266667,13.9852041 22.7497436,13.9540816 23.0620513,13.8913265 C23.3723077,13.8306122 23.6871795,13.744898 24.005641,13.6331633 L24.2348718,15.9897959 C23.8194872,16.1413265 23.3697436,16.2719388 22.8851282,16.3816327 C22.4,16.4923469 21.8251282,16.5459184 21.1610256,16.5459184 C20.2061538,16.5459184 19.465641,16.4056122 18.9384615,16.1244898 C18.4117949,15.8413265 18.0394872,15.455102 17.8164103,14.9658163 C17.5964103,14.4785714 17.4984615,13.9163265 17.5261538,13.2831633 C17.5548718,12.6484694 17.6507692,11.9811224 17.8164103,11.2785714 L19.8533333,2.72704082 L19.8533333,2.72704082 Z" id="path8320"/><path d="M25.594359,11.9622449 C25.594359,11.0260204 25.7466667,10.1438776 26.0512821,9.31683673 C26.3548718,8.48979592 26.7928205,7.76683673 27.3610256,7.14591837 C27.9271795,6.52806122 28.6164103,6.03877551 29.4276923,5.68010204 C30.2353846,5.32244898 31.1394872,5.14234694 32.1364103,5.14234694 C32.76,5.14234694 33.3174359,5.2005102 33.8076923,5.31836735 C34.3,5.43673469 34.745641,5.59030612 35.1482051,5.78265306 L34.0882051,8.18112245 C33.8112821,8.06938776 33.5235897,7.97091837 33.2266667,7.88112245 C32.9292308,7.79030612 32.5661538,7.74642857 32.1369231,7.74642857 C31.1112821,7.74642857 30.3,8.09795918 29.6964103,8.79897959 C29.0953846,9.50102041 28.7923077,10.4454082 28.7923077,11.6306122 C28.7923077,12.3331633 28.9446154,12.9005102 29.2502564,13.3352041 C29.554359,13.7693878 30.1158974,13.9852041 30.9317949,13.9852041 C31.334359,13.9852041 31.7225641,13.9433673 32.0948718,13.8617347 C32.4697436,13.7790816 32.8005128,13.6755102 33.0923077,13.5520408 L33.3215385,16.0102041 C32.9328205,16.1607143 32.5041026,16.2964286 32.0338462,16.4147959 C31.5625641,16.5295918 31.0015385,16.5882653 30.3507692,16.5882653 C29.4923077,16.5882653 28.7651282,16.4637755 28.1707692,16.2173469 C27.5758974,15.9673469 27.0841026,15.6352041 26.6969231,15.2147959 C26.3076923,14.7933673 26.0282051,14.3010204 25.8553846,13.7362245 C25.6820513,13.1734694 25.594359,12.5806122 25.594359,11.9622449 L25.594359,11.9622449 Z" id="path8322"/><path d="M39.2476923,16.5892857 C38.5138462,16.5892857 37.8769231,16.4785714 37.3364103,16.2586735 C36.7974359,16.0382653 36.3512821,15.7295918 35.9979487,15.3290816 C35.6446154,14.9306122 35.3794872,14.4581633 35.1984615,13.9142857 C35.0169231,13.3709184 34.9302564,12.7683673 34.9302564,12.1086735 C34.9302564,11.2806122 35.0641026,10.4530612 35.3338462,9.62755102 C35.6025641,8.80102041 36.0010256,8.05816327 36.5292308,7.39744898 C37.0528205,6.73571429 37.6984615,6.19489796 38.4594872,5.77295918 C39.2189744,5.35459184 40.0933333,5.14387755 41.0748718,5.14387755 C41.7948718,5.14387755 42.4292308,5.25510204 42.9769231,5.475 C43.5220513,5.69540816 43.9712821,6.00612245 44.3266667,6.40459184 C44.6779487,6.80510204 44.9451282,7.2755102 45.1246154,7.82040816 C45.305641,8.3627551 45.394359,8.96683673 45.394359,9.62704082 C45.394359,10.452551 45.2625641,11.280102 45.0010256,12.1081633 C44.7389744,12.9316327 44.3507692,13.6765306 43.8379487,14.3382653 C43.3261538,14.9989796 42.6861538,15.5392857 41.9174359,15.9596939 C41.1487179,16.3790816 40.2579487,16.5892857 39.2476923,16.5892857 L39.2476923,16.5892857 Z M40.7835897,7.74744898 C40.3276923,7.74744898 39.9251282,7.87908163 39.58,8.13928571 C39.2338462,8.40204082 38.9430769,8.73265306 38.7087179,9.13112245 C38.4717949,9.53112245 38.2958974,9.96887755 38.1774359,10.4428571 C38.06,10.9188776 38.0020513,11.3683673 38.0020513,11.7959184 C38.0020513,12.4852041 38.1138462,13.0219388 38.3333333,13.4086735 C38.5564103,13.7928571 38.9564103,13.9862245 39.5384615,13.9862245 C39.9958974,13.9862245 40.3964103,13.8556122 40.7435897,13.5928571 C41.0876923,13.3321429 41.3784615,13.0015306 41.6148718,12.6020408 C41.8502564,12.2040816 42.0276923,11.7653061 42.1461538,11.2903061 C42.2625641,10.8158163 42.3215385,10.3637755 42.3215385,9.9372449 C42.3215385,9.2494898 42.2102564,8.71173469 41.9887179,8.3255102 C41.7671795,7.94030612 41.3651282,7.74744898 40.7835897,7.74744898 L40.7835897,7.74744898 Z" id="path8324"/><path d="M48.7430769,16.3 L45.6671795,16.3 L48.2630769,5.43316327 L51.3594872,5.43316327 L48.7430769,16.3 L48.7430769,16.3 Z M50.2364103,4.11020408 C49.8076923,4.11020408 49.4189744,3.98265306 49.074359,3.72857143 C48.7276923,3.4755102 48.5538462,3.08571429 48.5538462,2.56071429 C48.5538462,2.27193878 48.6133333,2.0005102 48.7307692,1.74540816 C48.8482051,1.49030612 49.0041026,1.26989796 49.1984615,1.08367347 C49.3917949,0.898469388 49.6184615,0.750510204 49.8733333,0.63877551 C50.1287179,0.529081633 50.4020513,0.474489796 50.6928205,0.474489796 C51.1225641,0.474489796 51.5107692,0.601530612 51.8564103,0.856122449 C52.2025641,1.11173469 52.3769231,1.50153061 52.3769231,2.02346939 C52.3769231,2.31326531 52.3148718,2.58571429 52.1984615,2.84081633 C52.0820513,3.09591837 51.9266667,3.31530612 51.7328205,3.50255102 C51.5379487,3.6877551 51.314359,3.83520408 51.0589744,3.94591837 C50.8015385,4.05714286 50.5287179,4.11020408 50.2364103,4.11020408 L50.2364103,4.11020408 Z" id="path8326"/><path d="M53.5728205,5.92857143 C53.8061538,5.86071429 54.0666667,5.77908163 54.3502564,5.69030612 C54.6348718,5.60153061 54.9523077,5.51887755 55.3071795,5.44438776 C55.6584615,5.36785714 56.054359,5.30612245 56.4902564,5.25714286 C56.9261538,5.20816327 57.4220513,5.18418367 57.974359,5.18418367 C59.5948718,5.18418367 60.7128205,5.65357143 61.3297436,6.59030612 C61.945641,7.52704082 62.0528205,8.80867347 61.6523077,10.4326531 L60.2389744,16.3 L57.1451282,16.3 L58.5153846,10.5561224 C58.5984615,10.197449 58.6646154,9.8505102 58.7128205,9.51173469 C58.7620513,9.17653061 58.7589744,8.88061224 58.7020513,8.6244898 C58.6482051,8.37142857 58.5189744,8.16479592 58.3194872,8.00408163 C58.1164103,7.84540816 57.8097436,7.76683673 57.3938462,7.76683673 C56.9933333,7.76683673 56.585641,7.80969388 56.1692308,7.89234694 L54.154359,16.3 L51.0594872,16.3 L53.5728205,5.92857143 L53.5728205,5.92857143 Z" id="path8328"/></g><g id="Accepted-Here" transform="translate(42.519491, 38.141327)" fill="#FFF"><path d="M1.64102564,3.38877551 L1.03794872,4.47857143 L0.385641026,4.47857143 C0.845128205,3.65408163 1.29333333,2.89489796 1.73025641,2.20102041 C2.16717949,1.50714286 2.59897436,0.852040816 3.02564103,0.235714286 L3.61025641,0.235714286 C3.67179487,0.541836735 3.72820513,0.851530612 3.77948718,1.16326531 C3.83076923,1.4755102 3.88102564,1.80306122 3.93025641,2.14591837 C3.97948718,2.48877551 4.02666667,2.85255102 4.07179487,3.23622449 C4.11692308,3.61989796 4.16410256,4.03367347 4.21333333,4.47908163 L3.61025641,4.47908163 C3.58974359,4.29540816 3.57128205,4.11071429 3.55487179,3.925 C3.53846154,3.73928571 3.52,3.56071429 3.49948718,3.38928571 L1.64102564,3.38928571 L1.64102564,3.38877551 Z M3.44410256,2.91071429 C3.41128205,2.58061224 3.37333333,2.25153061 3.33025641,1.925 C3.28717949,1.59846939 3.23692308,1.26173469 3.17948718,0.914795918 C3.03589744,1.12295918 2.8574359,1.39183673 2.64410256,1.71989796 C2.43076923,2.04897959 2.18871795,2.44540816 1.91794872,2.91071429 L3.44410256,2.91071429 L3.44410256,2.91071429 Z" id="path8332"/><path d="M6.39435897,4.56989796 C6.12769231,4.56989796 5.89282051,4.53112245 5.68974359,4.45357143 C5.48666667,4.37602041 5.3174359,4.26581633 5.18205128,4.12295918 C5.04666667,3.98061224 4.94512821,3.80765306 4.8774359,3.60561224 C4.80974359,3.40357143 4.77589744,3.17602041 4.77589744,2.92295918 C4.77589744,2.55561224 4.83435897,2.20459184 4.95128205,1.86989796 C5.06820513,1.53571429 5.23435897,1.23979592 5.44974359,0.982653061 C5.66512821,0.725510204 5.92461538,0.520408163 6.22820513,0.366836735 C6.53179487,0.21377551 6.86974359,0.137244898 7.24358974,0.137244898 C7.56358974,0.137244898 7.81897436,0.169897959 8.00974359,0.235204082 C8.20051282,0.300510204 8.33692308,0.361734694 8.41897436,0.418877551 L8.17282051,0.908673469 C8.07794872,0.84744898 7.95025641,0.789285714 7.78820513,0.734183673 C7.62615385,0.679591837 7.43435897,0.651530612 7.21282051,0.651530612 C6.92974359,0.651530612 6.67538462,0.717857143 6.44974359,0.851020408 C6.22410256,0.983673469 6.03333333,1.15510204 5.8774359,1.36530612 C5.72153846,1.5755102 5.6025641,1.8122449 5.52051282,2.0755102 C5.43846154,2.33877551 5.3974359,2.59897959 5.3974359,2.85612245 C5.3974359,3.65204082 5.74410256,4.05 6.4374359,4.05 C6.58512821,4.05 6.7174359,4.03928571 6.83435897,4.01887755 C6.95128205,3.99897959 7.05487179,3.975 7.14512821,3.94846939 C7.23538462,3.92193878 7.31538462,3.89285714 7.38512821,3.85969388 C7.45487179,3.82704082 7.51641026,3.79846939 7.56974359,3.77397959 L7.64358974,4.28826531 C7.59435897,4.31683673 7.52974359,4.34744898 7.44974359,4.38010204 C7.36974359,4.4127551 7.27641026,4.44336735 7.16974359,4.47244898 C7.06307692,4.50102041 6.94410256,4.5244898 6.81282051,4.54285714 C6.68153846,4.56122449 6.54205128,4.56989796 6.39435897,4.56989796 L6.39435897,4.56989796 Z" id="path8334"/><path d="M9.85179487,4.56989796 C9.58512821,4.56989796 9.35025641,4.53112245 9.14717949,4.45357143 C8.94410256,4.37602041 8.77487179,4.26581633 8.63948718,4.12295918 C8.50410256,3.98061224 8.4025641,3.80765306 8.33487179,3.60561224 C8.26717949,3.40357143 8.23333333,3.17602041 8.23333333,2.92295918 C8.23333333,2.55561224 8.29179487,2.20459184 8.40871795,1.86989796 C8.52564103,1.53571429 8.69179487,1.23979592 8.90717949,0.982653061 C9.1225641,0.725510204 9.38205128,0.520408163 9.68564103,0.366836735 C9.98923077,0.21377551 10.3271795,0.137244898 10.7010256,0.137244898 C11.0210256,0.137244898 11.2764103,0.169897959 11.4671795,0.235204082 C11.6579487,0.300510204 11.794359,0.361734694 11.8764103,0.418877551 L11.6302564,0.908673469 C11.5353846,0.84744898 11.4076923,0.789285714 11.245641,0.734183673 C11.0835897,0.679591837 10.8917949,0.651530612 10.6702564,0.651530612 C10.3871795,0.651530612 10.1328205,0.717857143 9.90717949,0.851020408 C9.68153846,0.983673469 9.49076923,1.15510204 9.33487179,1.36530612 C9.17897436,1.5755102 9.06,1.8122449 8.97794872,2.0755102 C8.89589744,2.33877551 8.85487179,2.59897959 8.85487179,2.85612245 C8.85487179,3.65204082 9.20153846,4.05 9.89487179,4.05 C10.0425641,4.05 10.1748718,4.03928571 10.2917949,4.01887755 C10.4087179,3.99897959 10.5123077,3.975 10.6025641,3.94846939 C10.6928205,3.92193878 10.7728205,3.89285714 10.8425641,3.85969388 C10.9123077,3.82704082 10.9738462,3.79846939 11.0271795,3.77397959 L11.1010256,4.28826531 C11.0517949,4.31683673 10.9871795,4.34744898 10.9071795,4.38010204 C10.8271795,4.4127551 10.7338462,4.44336735 10.6271795,4.47244898 C10.5205128,4.50102041 10.4015385,4.5244898 10.2702564,4.54285714 C10.1389744,4.56122449 9.99948718,4.56989796 9.85179487,4.56989796 L9.85179487,4.56989796 Z" id="path8336"/><polygon id="path8338" points="11.5041026 4.47806122 12.525641 0.235204082 15.0425641 0.235204082 14.925641 0.731122449 12.9994872 0.731122449 12.6917949 2.01071429 14.4025641 2.01071429 14.285641 2.49438776 12.5810256 2.49438776 12.2179487 3.98214286 14.285641 3.98214286 14.1687179 4.47806122 11.5041026 4.47806122"/><path d="M16.8241026,0.192346939 C17.3205128,0.192346939 17.6948718,0.28622449 17.9471795,0.473979592 C18.1994872,0.661734694 18.325641,0.935204082 18.325641,1.29438776 C18.325641,1.57193878 18.2733333,1.8122449 18.1687179,2.01377551 C18.0641026,2.21581633 17.9153846,2.38214286 17.7225641,2.51326531 C17.5297436,2.64387755 17.2979487,2.74030612 17.0271795,2.80357143 C16.7564103,2.86683673 16.4548718,2.89897959 16.1225641,2.89897959 L15.6979487,2.89897959 L15.3164103,4.47857143 L14.7194872,4.47857143 L15.7287179,0.290816327 C15.9010256,0.25 16.0835897,0.223469388 16.2764103,0.21122449 C16.4692308,0.198469388 16.6517949,0.192346939 16.8241026,0.192346939 L16.8241026,0.192346939 Z M16.7502564,0.694387755 C16.4589744,0.694387755 16.2825641,0.70255102 16.2210256,0.718877551 L15.8148718,2.40255102 L16.2025641,2.40255102 C16.3748718,2.40255102 16.5512821,2.3877551 16.7317949,2.35663265 C16.9123077,2.32602041 17.074359,2.27193878 17.2179487,2.19489796 C17.3615385,2.11734694 17.4794872,2.01020408 17.5717949,1.87295918 C17.6641026,1.73622449 17.7102564,1.56020408 17.7102564,1.34387755 C17.7102564,1.11122449 17.6241026,0.944897959 17.4517949,0.844387755 C17.2794872,0.744387755 17.045641,0.694387755 16.7502564,0.694387755 L16.7502564,0.694387755 Z" id="path8340"/><polygon id="path8342" points="21.9661538 0.235204082 21.8492308 0.731122449 20.5630769 0.731122449 19.6584615 4.47806122 19.0615385 4.47806122 19.9661538 0.731122449 18.68 0.731122449 18.7969231 0.235204082 21.9661538 0.235204082"/><polygon id="path8344" points="21.4123077 4.47806122 22.4338462 0.235204082 24.9507692 0.235204082 24.8338462 0.731122449 22.9076923 0.731122449 22.6 2.01071429 24.3107692 2.01071429 24.1938462 2.49438776 22.4892308 2.49438776 22.1261538 3.98214286 24.1938462 3.98214286 24.0769231 4.47806122 21.4123077 4.47806122"/><path d="M26.7230769,0.192346939 C27.3548718,0.192346939 27.8266667,0.340306122 28.1384615,0.63622449 C28.4502564,0.932142857 28.6061538,1.33112245 28.6061538,1.83316327 C28.6061538,2.18418367 28.5507692,2.52193878 28.44,2.84591837 C28.3292308,3.17091837 28.1569231,3.45714286 27.9230769,3.70663265 C27.6892308,3.95510204 27.3907692,4.15357143 27.0276923,4.3005102 C26.6646154,4.44744898 26.2307692,4.52091837 25.7261538,4.52091837 C25.5538462,4.52091837 25.3671795,4.5127551 25.1661538,4.49642857 C24.9651282,4.48010204 24.7887179,4.45153061 24.6369231,4.41071429 L25.6276923,0.290306122 C25.8,0.249489796 25.9825641,0.222959184 26.1753846,0.210714286 C26.3682051,0.198469388 26.5507692,0.192346939 26.7230769,0.192346939 L26.7230769,0.192346939 Z M26.6738462,0.694387755 C26.3661538,0.694387755 26.1815385,0.70255102 26.12,0.718877551 L25.3323077,3.98826531 C25.3651282,3.99642857 25.4205128,4.00357143 25.4984615,4.00969388 C25.5764103,4.01581633 25.7035897,4.01887755 25.88,4.01887755 C26.2041026,4.01887755 26.4964103,3.96530612 26.7569231,3.85714286 C27.0174359,3.74897959 27.2379487,3.59795918 27.4184615,3.40357143 C27.5989744,3.20969388 27.7384615,2.97959184 27.8369231,2.7122449 C27.9353846,2.44489796 27.9846154,2.15204082 27.9846154,1.83367347 C27.9846154,1.4744898 27.88,1.19489796 27.6707692,0.994387755 C27.4615385,0.794897959 27.1292308,0.694387755 26.6738462,0.694387755 L26.6738462,0.694387755 Z" id="path8346"/><polygon id="path8348" points="33.2030769 4.47806122 32.6061538 4.47806122 33.08 2.50663265 31.1046154 2.50663265 30.6307692 4.47806122 30.0338462 4.47806122 31.0553846 0.235204082 31.6523077 0.235204082 31.2215385 2.01071429 33.1974359 2.01071429 33.6282051 0.235204082 34.2251282 0.235204082 33.2030769 4.47806122"/><polygon id="path8350" points="34.1446154 4.47806122 35.1661538 0.235204082 37.6830769 0.235204082 37.565641 0.731122449 35.6394872 0.731122449 35.3317949 2.01071429 37.0425641 2.01071429 36.9251282 2.49438776 35.2205128 2.49438776 34.8579487 3.98214286 36.9251282 3.98214286 36.8076923 4.47806122 34.1446154 4.47806122"/><path d="M39.4646154,0.192346939 C39.92,0.192346939 40.2810256,0.284183673 40.5476923,0.467857143 C40.814359,0.651530612 40.9471795,0.920918367 40.9471795,1.2755102 C40.9471795,1.63469388 40.8420513,1.93622449 40.6307692,2.17908163 C40.4194872,2.42193878 40.1230769,2.59642857 39.7415385,2.70204082 C39.7907692,2.78826531 39.8482051,2.89744898 39.9138462,3.03010204 C39.9794872,3.1627551 40.0471795,3.30969388 40.1169231,3.47091837 C40.1861538,3.63163265 40.254359,3.7994898 40.32,3.97244898 C40.385641,4.14642857 40.4425641,4.31428571 40.4923077,4.47755102 L39.8830769,4.47755102 C39.8261538,4.32244898 39.7661538,4.16530612 39.7046154,4.00612245 C39.6435897,3.84693878 39.5805128,3.69387755 39.5174359,3.54693878 C39.4533333,3.4 39.3902564,3.2622449 39.3261538,3.13367347 C39.2630769,3.00510204 39.2041026,2.89132653 39.1507692,2.79387755 C39.0974359,2.79795918 39.0441026,2.80102041 38.9907692,2.80306122 C38.9374359,2.80510204 38.8846154,2.80612245 38.8307692,2.80612245 L38.3569231,2.80612245 L37.9569231,4.47755102 L37.36,4.47755102 L38.3697436,0.289795918 C38.5420513,0.248979592 38.7241026,0.22244898 38.9174359,0.210204082 C39.1097436,0.198469388 39.2923077,0.192346939 39.4646154,0.192346939 L39.4646154,0.192346939 Z M39.3907692,0.694387755 C39.0994872,0.694387755 38.9230769,0.70255102 38.8610256,0.718877551 L38.4733333,2.32346939 L38.8369231,2.32346939 C39.0051282,2.32346939 39.1774359,2.31122449 39.3538462,2.28673469 C39.5302564,2.2622449 39.6912821,2.21428571 39.8364103,2.14285714 C39.9820513,2.07142857 40.1010256,1.97142857 40.1933333,1.84285714 C40.285641,1.71428571 40.3323077,1.54387755 40.3323077,1.33163265 C40.3323077,1.10306122 40.2451282,0.939795918 40.0707692,0.841836735 C39.8964103,0.743367347 39.6692308,0.694387755 39.3907692,0.694387755 L39.3907692,0.694387755 Z" id="path8352"/><polygon id="path8354" points="40.9928205 4.47806122 42.014359 0.235204082 44.5312821 0.235204082 44.4138462 0.731122449 42.4876923 0.731122449 42.18 2.01071429 43.8907692 2.01071429 43.7733333 2.49438776 42.0687179 2.49438776 41.7061538 3.98214286 43.7733333 3.98214286 43.6558974 4.47806122 40.9928205 4.47806122"/></g><path d="M19.2276908,35.3418367 C14.6978229,35.3418367 11.0256395,31.6883889 11.0256395,27.1816327 C11.0256395,22.6748764 14.6978229,19.0214286 19.2276908,19.0214286 C23.7575586,19.0214286 27.4297421,22.6748764 27.4297421,27.1816327 C27.4297421,31.6883889 23.7575586,35.3418367 19.2276908,35.3418367 Z M22.8441062,26.0183673 C23.0071831,24.9321429 22.175901,24.3484694 21.0394908,23.9586735 L21.4082087,22.4867347 L20.5082087,22.2632653 L20.1492344,23.6964286 C19.9128241,23.6377551 19.6697472,23.5821429 19.4276959,23.527551 L19.7892344,22.0852041 L18.8897472,21.8617347 L18.5205164,23.3331633 C18.324619,23.2887755 18.1323113,23.244898 17.9456446,23.1984694 L17.9466703,23.1938776 L16.7051318,22.8857143 L16.4656446,23.8423469 C16.4656446,23.8423469 17.1333369,23.9943878 17.1194908,24.0040816 C17.4841062,24.094898 17.55026,24.3346939 17.5389779,24.525 L17.1189779,26.2010204 C17.1441062,26.2071429 17.1764138,26.2158163 17.2128241,26.2311224 C17.1825677,26.2229592 17.1507728,26.2153061 17.1174395,26.2071429 L16.5287215,28.5561224 C16.4841062,28.6658163 16.3707728,28.8311224 16.115901,28.7683673 C16.1251318,28.7811224 15.4615421,28.6061224 15.4615421,28.6061224 L15.0143626,29.6316327 L16.1856446,29.9219388 C16.4035933,29.9760204 16.6174395,30.0331633 16.8271831,30.0867347 L16.4548754,31.575 L17.3538497,31.7984694 L17.7230805,30.3260204 C17.9687215,30.3918367 18.2071831,30.4535714 18.4405164,30.5112245 L18.0728241,31.9765306 L18.9728241,32.2 L19.3456446,30.7147959 C20.8810292,31.0035714 22.0353882,30.8872449 22.5210292,29.5056122 C22.9128241,28.3928571 22.5015421,27.7515306 21.6938497,27.3331633 C22.2825677,27.1984694 22.7256446,26.8137755 22.8441062,26.0183673 Z M20.7871831,28.8882653 C20.5087215,30.0005102 18.6266703,29.3989796 18.0164138,29.2479592 L18.5107728,27.2765306 C19.1210292,27.4280612 21.0779523,27.7280612 20.7871831,28.8882653 L20.7871831,28.8882653 Z M21.0656446,26.002551 C20.8117985,27.0137755 19.2451318,26.5 18.7369267,26.3744898 L19.1851318,24.5857143 C19.6933369,24.7122449 21.3297472,24.947449 21.0656446,26.002551 L21.0656446,26.002551 Z" id="circle8306" fill="#FFF"/></g></g></svg> |