├── .browserslistrc ├── src ├── EventBus.js ├── assets │ └── logo.png ├── views │ ├── About.vue │ ├── Home.vue │ └── generate.vue ├── plugins │ ├── helpers.js │ ├── state.js │ └── vuetify.js ├── router │ ├── routes.js │ └── index.js ├── components │ ├── footer.vue │ ├── nav-bar.vue │ └── nav-drawer.vue ├── App.vue ├── main.js └── styles │ ├── register.scss │ └── index.scss ├── public ├── favicon.ico ├── index.html └── downloads │ ├── deploy-backend.bat │ └── deploy-backend.sh ├── babel.config.js ├── .gitignore ├── .eslintrc.js ├── README.md ├── vue.config.js └── package.json /.browserslistrc: -------------------------------------------------------------------------------- 1 | > 1% 2 | last 2 versions 3 | not dead 4 | -------------------------------------------------------------------------------- /src/EventBus.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | export default new Vue(); 3 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyndex-drive/home/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyndex-drive/home/HEAD/src/assets/logo.png -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | '@vue/cli-plugin-babel/preset' 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /src/views/About.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /src/plugins/helpers.js: -------------------------------------------------------------------------------- 1 | export function mobileChecker() { 2 | var width = window.innerWidth > 0 ? window.innerWidth : screen.width; 3 | if (width > 966) { 4 | return false; 5 | } else { 6 | return true; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | 5 | 6 | # local env files 7 | .env.local 8 | .env.*.local 9 | 10 | # Log files 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | pnpm-debug.log* 15 | 16 | # Editor directories and files 17 | .idea 18 | .vscode 19 | *.suo 20 | *.ntvs* 21 | *.njsproj 22 | *.sln 23 | *.sw? 24 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | env: { 4 | node: true 5 | }, 6 | 'extends': [ 7 | 'plugin:vue/essential', 8 | 'eslint:recommended' 9 | ], 10 | parserOptions: { 11 | parser: 'babel-eslint' 12 | }, 13 | rules: { 14 | 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', 15 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off' 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # the-best-portfolio 2 | 3 | ## Project setup 4 | ``` 5 | yarn install 6 | ``` 7 | 8 | ### Compiles and hot-reloads for development 9 | ``` 10 | yarn serve 11 | ``` 12 | 13 | ### Compiles and minifies for production 14 | ``` 15 | yarn build 16 | ``` 17 | 18 | ### Lints and fixes files 19 | ``` 20 | yarn lint 21 | ``` 22 | 23 | ### Customize configuration 24 | See [Configuration Reference](https://cli.vuejs.org/config/). 25 | -------------------------------------------------------------------------------- /src/router/routes.js: -------------------------------------------------------------------------------- 1 | import Home from '../views/Home.vue'; 2 | import About from '../views/About.vue'; 3 | import Generate from '../views/generate.vue'; 4 | 5 | const routes = [ 6 | { 7 | path: '/', 8 | name: 'Home', 9 | component: Home, 10 | }, 11 | { 12 | path: '/about', 13 | name: 'About', 14 | component: About, 15 | }, 16 | { 17 | path: '/generate', 18 | name: 'Generate', 19 | component: Generate, 20 | }, 21 | ]; 22 | 23 | export default routes; 24 | -------------------------------------------------------------------------------- /src/components/footer.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import Router from 'vue-router'; 3 | import goTo from 'vuetify/es5/services/goto'; 4 | import routes from './routes'; 5 | 6 | Vue.use(Router); 7 | 8 | const router = new Router({ 9 | scrollBehavior: (to, from, savedPosition) => { 10 | let scrollTo = 0; 11 | if (to.hash) { 12 | scrollTo = to.hash; 13 | } else if (savedPosition) { 14 | scrollTo = savedPosition.y; 15 | } 16 | 17 | return goTo(scrollTo); 18 | }, 19 | mode: 'history', 20 | routes, 21 | }); 22 | 23 | export default router; 24 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 13 | 26 | 27 | -------------------------------------------------------------------------------- /vue.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const vueSrc = './src'; 3 | 4 | module.exports = { 5 | runtimeCompiler: true, 6 | publicPath: '/', 7 | css: { 8 | requireModuleExtension: true, 9 | }, 10 | configureWebpack: { 11 | resolve: { 12 | alias: { 13 | '@': path.resolve(__dirname, vueSrc), 14 | }, 15 | }, 16 | }, 17 | chainWebpack: (config) => { 18 | let title = require('./package.json').title; 19 | config.plugin('html').tap((args) => { 20 | args[0].title = title; 21 | return args; 22 | }); 23 | }, 24 | lintOnSave: false, 25 | transpileDependencies: ['vuetify'], 26 | }; 27 | -------------------------------------------------------------------------------- /src/plugins/state.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | 3 | const state = Vue.observable({ 4 | navbar: { 5 | key: 0, 6 | active: false, 7 | }, 8 | botSettings: { 9 | darkmode: false, 10 | navBlur: false, 11 | }, 12 | }); 13 | 14 | export const getters = { 15 | navbar: { 16 | key: () => state.navbar.key, 17 | active: () => state.navbar.active, 18 | }, 19 | botSettings: { 20 | darkmode: () => state.botSettings.darkmode, 21 | navBlur: () => state.botSettings.navBlur, 22 | }, 23 | }; 24 | 25 | export const mutations = { 26 | navbar: { 27 | key: (val) => (state.navbar.key = val), 28 | active: (val) => (state.navbar.active = val), 29 | }, 30 | botSettings: { 31 | darkmode: (val) => (state.botSettings.darkmode = val), 32 | navBlur: (val) => (state.botSettings.navBlur = val), 33 | }, 34 | }; 35 | 36 | export default state; 37 | -------------------------------------------------------------------------------- /src/plugins/vuetify.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import Vuetify from 'vuetify/lib'; 3 | import minifyCssString from 'minify-css-string'; 4 | 5 | Vue.use(Vuetify); 6 | 7 | let options = { 8 | theme: { 9 | themes: { 10 | light: { 11 | primary: '#F44336', 12 | secondary: '#424242', 13 | accent: '#82B1FF', 14 | error: '#FF5252', 15 | info: '#2196F3', 16 | success: '#4CAF50', 17 | warning: '#FFC107', 18 | }, 19 | dark: { 20 | primary: '#F44336', 21 | secondary: '#424242', 22 | accent: '#82B1FF', 23 | error: '#FF5252', 24 | info: '#2196F3', 25 | success: '#4CAF50', 26 | warning: '#FFC107', 27 | }, 28 | }, 29 | options: { 30 | minifyTheme: minifyCssString, 31 | }, 32 | }, 33 | }; 34 | 35 | export default new Vuetify(options); 36 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | <%= htmlWebpackPlugin.options.title %> 9 | 10 | 11 | 12 | 13 | 16 |
17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import App from './App.vue'; 3 | import router from './router'; 4 | import store, { mutations, getters } from './plugins/state'; 5 | import moment from 'vue-moment'; 6 | import lodash from 'lodash'; 7 | import axios from 'axios'; 8 | import VueAwesomeSwiper from 'vue-awesome-swiper'; 9 | import { gsap } from 'gsap'; 10 | import EventBus from './EventBus'; 11 | import vuetify from './plugins/vuetify'; 12 | import '@/styles/register.scss'; 13 | import 'swiper/swiper-bundle.css'; 14 | 15 | Vue.config.productionTip = false; 16 | Vue.use(VueAwesomeSwiper); 17 | Vue.use(moment); 18 | Vue.prototype.$axios = axios; 19 | Vue.prototype.$gsap = gsap; 20 | Vue.prototype.$Eventbus = EventBus; 21 | Vue.prototype.$lodash = lodash; 22 | 23 | Vue.prototype.$state = { 24 | store: store, 25 | mutate: mutations, 26 | get: getters, 27 | }; 28 | 29 | new Vue({ 30 | router, 31 | vuetify, 32 | render: (h) => h(App), 33 | }).$mount('#app'); 34 | -------------------------------------------------------------------------------- /src/styles/register.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | // Import a Google Font for Following Material Guidelines 4 | @import url('https://fonts.googleapis.com/css2?family=Open+Sans&display=swap'); 5 | 6 | // Vuetify Sass Variables 7 | $family-sans-serif: 'open-sans', sans-serif; 8 | $body-font-family: 'Work Sans', serif; 9 | $border-radius-root: 6px; 10 | $font-size-root: 14px; 11 | $btn-letter-spacing: 0; 12 | $btn-font-weight: 400; 13 | $list-item-title-font-size: 0.929rem; 14 | $list-item-dense-title-font-size: 0.929rem; 15 | $list-item-dense-title-font-weight: initial; 16 | $fab-icon-sizes: ( 17 | 'small': 20, 18 | ); 19 | $btn-sizes: ( 20 | 'default': 41, 21 | 'large': 54, 22 | ); 23 | $headings: ( 24 | 'h1': ( 25 | 'size': 3.3125rem, 26 | 'line-height': 1.15em, 27 | ), 28 | 'h2': ( 29 | 'size': 2.25rem, 30 | 'line-height': 1.5em, 31 | ), 32 | ); 33 | 34 | // Vue2-Animate Variables 35 | $animationDuration: 0.5s; 36 | 37 | // Other Imports 38 | @import 'bulma'; 39 | @import 'vue2-animate/src/sass/vue2-animate.scss'; 40 | @import 'index.scss'; 41 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "zyndex", 3 | "title": "ZYNDEX | G-Index Generator", 4 | "version": "0.1.0", 5 | "private": false, 6 | "license": "MIT", 7 | "scripts": { 8 | "serve": "vue-cli-service serve", 9 | "build": "vue-cli-service build", 10 | "lint": "vue-cli-service lint" 11 | }, 12 | "dependencies": { 13 | "axios": "^0.21.0", 14 | "bulma": "^0.9.1", 15 | "core-js": "^3.6.5", 16 | "gsap": "^3.5.1", 17 | "lodash": "^4.17.20", 18 | "minify-css-string": "^1.0.0", 19 | "swiper": "^6.3.5", 20 | "vue": "^2.6.11", 21 | "vue-awesome-swiper": "^4.1.1", 22 | "vue-meta": "^2.4.0", 23 | "vue-moment": "^4.1.0", 24 | "vue-router": "^3.2.0", 25 | "vue2-animate": "^2.1.4", 26 | "vuetify": "^2.2.11" 27 | }, 28 | "devDependencies": { 29 | "@vue/cli-plugin-babel": "~4.5.0", 30 | "@vue/cli-plugin-eslint": "~4.5.0", 31 | "@vue/cli-plugin-router": "~4.5.0", 32 | "@vue/cli-service": "~4.5.0", 33 | "babel-eslint": "^10.1.0", 34 | "eslint": "^6.7.2", 35 | "eslint-plugin-vue": "^6.2.2", 36 | "node-sass": "^4.12.0", 37 | "sass": "^1.19.0", 38 | "sass-loader": "^8.0.2", 39 | "vue-cli-plugin-vuetify": "~2.0.7", 40 | "vue-template-compiler": "^2.6.11", 41 | "vuetify-loader": "^1.3.0" 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/styles/index.scss: -------------------------------------------------------------------------------- 1 | // Every Project's Must 2 | * { 3 | box-sizing: border-box; 4 | } 5 | 6 | // Custom Scroll Bar Design for Following Material Guidelines 7 | 8 | //? Scroll Bar Width 9 | ::-webkit-scrollbar { 10 | width: 4px; 11 | background-color: white; 12 | } 13 | 14 | //? Scroll Bar Track 15 | ::-webkit-scrollbar-track { 16 | box-shadow: inset 0 0 5px grey; 17 | border-radius: none; 18 | } 19 | 20 | //? Scroll Bar Thumb 21 | ::-webkit-scrollbar-thumb { 22 | background: hsl(0%, 0%, 15%); 23 | border-radius: 10px; 24 | } 25 | 26 | // Some Helper CSS 27 | 28 | //? For all Use Cases 29 | .non-touch { 30 | -webkit-user-select: none; 31 | -khtml-user-select: none; 32 | -moz-user-select: none; 33 | -o-user-select: none; 34 | user-select: none; 35 | } 36 | 37 | .point-cursor { 38 | cursor: pointer; 39 | } 40 | 41 | .break-only-word { 42 | word-break: break-word; 43 | } 44 | 45 | .width-min { 46 | min-width: 40%; 47 | } 48 | 49 | .border-max { 50 | border-radius: 50%; 51 | } 52 | 53 | .fit-content { 54 | width: fit-content; 55 | } 56 | 57 | .back-gif { 58 | background-image: url('https://i.pinimg.com/originals/f4/a8/b4/f4a8b449107bfcbc785ebf766c3864b8.gif'); 59 | background-size: cover; 60 | background-repeat: no-repeat; 61 | background-position: center; 62 | } 63 | .gradient-hero { 64 | background-image: linear-gradient( 65 | to top, 66 | #ffffff, 67 | #f2faff, 68 | #d5f9ff, 69 | #b0f9ff, 70 | #94f9f2, 71 | #94f9f2, 72 | #94f9f2, 73 | #94f9f2, 74 | #b0f9ff, 75 | #d5f9ff, 76 | #f2faff, 77 | #ffffff 78 | ); 79 | } 80 | 81 | .is-maximum { 82 | width: 100%; 83 | height: 100%; 84 | } 85 | 86 | .slide-fade-enter-active { 87 | transition: all 0.3s cubic-bezier(1, 0.5, 0.8, 1); 88 | } 89 | .slide-fade-leave-active { 90 | transition: all 0.8s cubic-bezier(1, 0.5, 0.8, 1); 91 | } 92 | .slide-fade-enter, 93 | .slide-fade-leave-to { 94 | transform: translateX(10px); 95 | opacity: 0; 96 | } 97 | -------------------------------------------------------------------------------- /src/components/nav-bar.vue: -------------------------------------------------------------------------------- 1 | 54 | 55 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /public/downloads/deploy-backend.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | echo. 3 | echo U L T I M A T E G ^- I N D E X B A C K E N D D E P L O Y E R 4 | echo. 5 | echo by 6 | echo. ______ __ __ 7 | echo. / __/ / ___ ____ / /_/ /__ 8 | echo. _\ \/ _ \/ _ `/ _ \ / __/ '_/ 9 | echo. /___/_//_/\_,_/_//_/ \__/_/\_\ 10 | echo. 11 | echo. 12 | echo Deploying the Backend Now. 13 | echo. 14 | echo Make Sure You have Nodejs, Git Installed and You are in the Root of the Directory and not any Subfolders 15 | echo. 16 | echo Make Sure You have Every Environment Variables in Hand for Faster Deployment 17 | echo. 18 | echo Starting the Script Now 19 | echo. 20 | CALL npm i ^-g heroku 21 | echo Login in to Your Heroku Account 22 | CALL heroku login 23 | echo. 24 | CALL git clone --quiet --single-branch --branch master https://github.com/tks18/gindex-backend.git __temp__ 25 | echo. 26 | echo Starting Deployment Process 27 | echo. 28 | set /p appname=Enter Unique Backend App Name in Heroku: 29 | CALL heroku create %appname% 30 | echo. 31 | CALL heroku git:remote ^-a %appname% 32 | echo. 33 | echo Pushing G Index Backend to Heroku 34 | CALL git subtree push ^-^-prefix __temp__ heroku master 35 | echo. 36 | echo Now Have Your Environment Variables ready !! 37 | echo. 38 | set /p dburl=Enter the MongoDB url that You Copied from their Website: 39 | set /p site=Enter the Heroku App Website to which it is Deployed: 40 | set /p emailid=Enter the Email ID from which User Messages will be Sent: 41 | set /p emailpass=Enter the Email Password for the Above: 42 | set /p emailport=Enter the Email Port for the Above: 43 | set /p emailservice=Enter the Email Provider Name(Eg: Gmail, Yahoo, etc.): 44 | set /p emailsmtp=Enter the SMTP Address for the Email Provider: 45 | set /p adminemail=Enter the Admin Email ID(Can be Anything or can be Same as the Above Email ID): 46 | set /p replyemail=Confirm the Before Email Again: 47 | set /p maxsessions=Enter the Number of Maximum Active Sessions that Users can Login Simultaneously(Eg: 1, 2, 5, etc.): 48 | set /p emailgif=Enter the Image Link for Displaying in Emails: 49 | set /p sitesec=Enter a Secret Key that you will Remember (Should be Used while Creating a Superadmin Account after this Setup): 50 | set /p tmdbapi=Enter the TMDB API Key for Metadata Info of Media in the Index (If You Don't Need, put NaN): 51 | set /p fronturls=Enter the Frontend Url/Urls (Don't Put trailing / at the end) (Multiple Frontends can be Put Here by putting a ,): 52 | set /p frontname=Enter the Frontend's Website Name (Can be Anything): 53 | set /p tokensec=Enter a Super Long Token Secret that will be Used to Secure the JWT Tokens.(These are Never Required to be Remebered): 54 | echo. 55 | echo Pushing Config Keys to Heroku App. 56 | echo. 57 | CALL heroku config:set ^-a %appname% DBURL=%dburl% SITE=%site% EMAILID=%emailid% EMAILPASS=%emailpass% EMAILPORT=%emailport% EMAILSERVICE=%emailservice% EMAILSMTP=%emailsmtp% ADMINEMAIL=%adminemail% REPLYTOMAIL=%replyemail% MAXSESSIONS=%maxsessions% EMAILGIF=%emailgif% SITESECRET=%sitesec% TMDBAPI=%tmdbapi% FRONTENDURL=%fronturls% FRONTENDSITENAME=%frontname% TOKENSECRET=%tokensec% 58 | pause 59 | exit 60 | -------------------------------------------------------------------------------- /public/downloads/deploy-backend.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | echo -e "\n" 3 | echo 'U L T I M A T E G ^- I N D E X B A C K E N D D E P L O Y E R' 4 | echo -e "\n" 5 | echo 'by' 6 | echo '______ __ __' 7 | echo '/ __/ / ___ ____ / /_/ /__' 8 | echo '_\ \/ _ \/ _ / _ \ / __/ _/' 9 | echo '/___/_//_/\_,_/_//_/ \__/_/\_\' 10 | echo -e "\n" 11 | echo -e "\n" 12 | echo 'Deploying the Backend Now' 13 | echo -e "\n" 14 | echo 'Make Sure You have Nodejs, Git Installed and You are in the Root of the Directory and not any Subfolders' 15 | echo -e "\n" 16 | echo 'Make Sure You have Every Environment Variables in Hand for Faster Deployment' 17 | echo -e "\n" 18 | echo 'Starting the Script Now' 19 | echo -e "\n" 20 | npm i -g heroku 21 | echo 'Login in to Your Heroku Account' 22 | heroku login 23 | echo -e "\n" 24 | CALL git clone --quiet --single-branch --branch master https://github.com/tks18/gindex-backend.git __temp__ 25 | echo -e "\n" 26 | echo 'Starting Deployment Process' 27 | echo -e "\n" 28 | read -p 'Enter Unique Backend App Name in Heroku: ' appname 29 | heroku create $appname 30 | echo -e "\n" 31 | heroku git:remote -a $appname 32 | echo -e "\n" 33 | echo 'Pushing G Index Backend to Heroku' 34 | git subtree push --prefix __temp__ heroku master 35 | echo -e "\n" 36 | echo 'Now Have Your Environment Variables ready !!' 37 | echo -e "\n" 38 | read -p 'Enter the MongoDB url that You Copied from their Website: ' dburl 39 | read -p 'Enter the Heroku App Website to which it is Deployed: ' site 40 | read -p 'Enter the Email ID from which User Messages will be Sent: ' emailid 41 | read -p 'Enter the Email Password for the Above: ' emailpass 42 | read -p 'Enter the Email Port for the Above: ' emailport 43 | read -p 'Enter the Email Provider Name(Eg: Gmail, Yahoo, etc.): ' emailservice 44 | read -p 'Enter the SMTP Address for the Email Provider: ' emailsmtp 45 | read -p 'Enter the Admin Email ID(Can be Anything or can be Same as the Above Email ID): ' adminemail 46 | read -p 'Confirm the Before Email Again: ' replyemail 47 | read -p 'Enter the Number of Maximum Active Sessions that Users can Login Simultaneously(Eg: 1, 2, 5, etc.): ' maxsessions 48 | read -p 'Enter the Image Link for Displaying in Emails: ' emailgif 49 | read -p 'Enter a Secret Key that you will Remember (Should be Used while Creating a Superadmin Account after this Setup): ' sitesec 50 | read -p 'Enter the TMDB API Key for Metadata Info of Media in the Index (If You Don\t Need, put NaN): ' tmdbapi 51 | read -p 'Enter the Frontend Url/Urls (Dont Put trailing / at the end) (Multiple Frontends can be Put Here by putting a ,): ' fronturls 52 | read -p 'Enter the Frontend Website Name (Can be Anything): ' frontname 53 | read -p 'Enter a Super Long Token Secret that will be Used to Secure the JWT Tokens.(These are Never Required to be Remebered): ' tokensec 54 | echo -e "\n" 55 | echo 'Pushing Config Keys to Heroku App' 56 | echo -e "\n" 57 | heroku config:set -a $appname DBURL=$dburl SITE=$site EMAILID=$emailid EMAILPASS=$emailpass EMAILPORT=$emailport EMAILSERVICE=$emailservice EMAILSMTP=$emailsmtp ADMINEMAIL=$adminemail REPLYTOMAIL=$replyemail MAXSESSIONS=$maxsessions EMAILGIF=$emailgif SITESECRET=$sitesec TMDBAPI=$tmdbapi FRONTENDURL=$fronturls FRONTENDSITENAME=$frontname TOKENSECRET=$tokensec 58 | read -p "Press [Enter] key to exit..." 59 | exit 60 | -------------------------------------------------------------------------------- /src/views/Home.vue: -------------------------------------------------------------------------------- 1 | 142 | 212 | -------------------------------------------------------------------------------- /src/components/nav-drawer.vue: -------------------------------------------------------------------------------- 1 | 145 | 146 | 229 | 230 | 231 | -------------------------------------------------------------------------------- /src/views/generate.vue: -------------------------------------------------------------------------------- 1 | 263 | 420 | --------------------------------------------------------------------------------