윤혜원

최종 소스코드 및 README.md 수정

Showing 251 changed files with 2245 additions and 1 deletions
No preview for this file type
1 -머신러닝 기반 최적 기지국 선택기법과 엣지 콘텐츠 캐싱을 활용한 LMS 1 +# LMS using Machine Learning Base Station Selection and Edge Contents Caching
2 +
3 +머신러닝 기반 최적 기지국 선택기법과 엣지 콘텐츠 캐싱을 활용한 LMS </br>
4 +2020-1 Capstone Design2 Project </br>
5 +https://github.com/yhye97/lms <br/>
6 +
7 +### Motivation:
8 +LMS that provides effective mobile traffic distribution and increase contents delivery speed
9 +
10 +### Assumptions:
11 +* Students access LMS according to their School's Timetable
12 +* Students access LMS near their school
13 +* Base Stations have MEC(Mobile Edge Computing) Server
14 +
15 +### Requirement:
16 +* Dataset: </br>
17 +Telecom Italia Big Data Challenge set (https://dandelion.eu/datamine/open-big-data/) </br>
18 +(Grid 1,2,3 == BS 1,2,3) </br>
19 +
20 +
21 +### Background:
22 +* Mobile Traffic Prediction & BS Selection Algorithm: </br>
23 +Python 3.5 </br>
24 +Jupyter Notebook </br>
25 +Keras </br>
26 +
27 +* WEB:
28 +Express Framework </br>
29 +Back-end : Node JS </br>
30 +Front-end: HTML/CSS/JS </br>
31 +
32 +* AWS: </br>
33 +![image](https://user-images.githubusercontent.com/17666783/82525977-b1814100-9b6d-11ea-81c6-36e0321daaa7.png)
34 +
35 +EC2 instance: LMS Web Server, Controller </br>
36 +S3: Contents Storage </br>
37 +RDS : Database </br>
38 +CloudFront: CDN Service </br>
39 +Edge Location: Base Station </br>
...\ No newline at end of file ...\ No newline at end of file
......
1 +/mobile_traffic_prediction/venv/
2 +/lms_web/node_modules/
1 +-- MySQL dump 10.13 Distrib 8.0.20, for macos10.15 (x86_64)
2 +--
3 +-- Host: localhost Database: lms
4 +-- ------------------------------------------------------
5 +-- Server version 5.7.30
6 +
7 +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
8 +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
9 +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
10 +/*!50503 SET NAMES utf8 */;
11 +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
12 +/*!40103 SET TIME_ZONE='+00:00' */;
13 +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
14 +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
15 +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
16 +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
17 +
18 +--
19 +-- Table structure for table `cache_info`
20 +--
21 +
22 +DROP TABLE IF EXISTS `cache_info`;
23 +/*!40101 SET @saved_cs_client = @@character_set_client */;
24 +/*!50503 SET character_set_client = utf8mb4 */;
25 +CREATE TABLE `cache_info` (
26 + `grid_id` int(11) NOT NULL,
27 + `cache_size` double NOT NULL,
28 + `cache_left` double NOT NULL,
29 + PRIMARY KEY (`grid_id`)
30 +) ENGINE=InnoDB DEFAULT CHARSET=latin1;
31 +/*!40101 SET character_set_client = @saved_cs_client */;
32 +
33 +--
34 +-- Dumping data for table `cache_info`
35 +--
36 +
37 +LOCK TABLES `cache_info` WRITE;
38 +/*!40000 ALTER TABLE `cache_info` DISABLE KEYS */;
39 +INSERT INTO `cache_info` VALUES (1,137,137),(2,600,582),(3,3.1,867);
40 +/*!40000 ALTER TABLE `cache_info` ENABLE KEYS */;
41 +UNLOCK TABLES;
42 +
43 +--
44 +-- Table structure for table `cache_location`
45 +--
46 +
47 +DROP TABLE IF EXISTS `cache_location`;
48 +/*!40101 SET @saved_cs_client = @@character_set_client */;
49 +/*!50503 SET character_set_client = utf8mb4 */;
50 +CREATE TABLE `cache_location` (
51 + `cache_id` int(11) NOT NULL AUTO_INCREMENT,
52 + `grid_id` int(11) NOT NULL,
53 + `contents_id` int(11) NOT NULL,
54 + `s3_key` varchar(400) NOT NULL,
55 + PRIMARY KEY (`cache_id`)
56 +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
57 +/*!40101 SET character_set_client = @saved_cs_client */;
58 +
59 +--
60 +-- Dumping data for table `cache_location`
61 +--
62 +
63 +LOCK TABLES `cache_location` WRITE;
64 +/*!40000 ALTER TABLE `cache_location` DISABLE KEYS */;
65 +INSERT INTO `cache_location` VALUES (1,1,0,'\"\"');
66 +/*!40000 ALTER TABLE `cache_location` ENABLE KEYS */;
67 +UNLOCK TABLES;
68 +
69 +--
70 +-- Table structure for table `contents`
71 +--
72 +
73 +DROP TABLE IF EXISTS `contents`;
74 +/*!40101 SET @saved_cs_client = @@character_set_client */;
75 +/*!50503 SET character_set_client = utf8mb4 */;
76 +CREATE TABLE `contents` (
77 + `contents_id` int(11) NOT NULL AUTO_INCREMENT,
78 + `contents_name` varchar(45) NOT NULL,
79 + `contents_description` varchar(400) DEFAULT NULL,
80 + `school_id` int(11) NOT NULL,
81 + `grade` int(11) NOT NULL,
82 + PRIMARY KEY (`contents_id`)
83 +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
84 +/*!40101 SET character_set_client = @saved_cs_client */;
85 +
86 +--
87 +-- Dumping data for table `contents`
88 +--
89 +
90 +LOCK TABLES `contents` WRITE;
91 +/*!40000 ALTER TABLE `contents` DISABLE KEYS */;
92 +INSERT INTO `contents` VALUES (1,'elementary content','video for elementary students',1,3),(2,'korean','video for korean language',1,3),(3,'math','video for mathematics',1,3);
93 +/*!40000 ALTER TABLE `contents` ENABLE KEYS */;
94 +UNLOCK TABLES;
95 +
96 +--
97 +-- Table structure for table `ele`
98 +--
99 +
100 +DROP TABLE IF EXISTS `ele`;
101 +/*!40101 SET @saved_cs_client = @@character_set_client */;
102 +/*!50503 SET character_set_client = utf8mb4 */;
103 +CREATE TABLE `ele` (
104 + `school_id` int(11) NOT NULL,
105 + `1st_stu_num` int(11) NOT NULL,
106 + `2nd_stu_num` int(11) NOT NULL,
107 + `3rd_stu_num` int(11) NOT NULL,
108 + `4th_stu_num` int(11) NOT NULL,
109 + `5th_stu_num` int(11) NOT NULL,
110 + `6th_stu_num` int(11) NOT NULL,
111 + PRIMARY KEY (`school_id`)
112 +) ENGINE=InnoDB DEFAULT CHARSET=latin1;
113 +/*!40101 SET character_set_client = @saved_cs_client */;
114 +
115 +--
116 +-- Dumping data for table `ele`
117 +--
118 +
119 +LOCK TABLES `ele` WRITE;
120 +/*!40000 ALTER TABLE `ele` DISABLE KEYS */;
121 +INSERT INTO `ele` VALUES (1,121,100,111,105,99,143);
122 +/*!40000 ALTER TABLE `ele` ENABLE KEYS */;
123 +UNLOCK TABLES;
124 +
125 +--
126 +-- Table structure for table `grid`
127 +--
128 +
129 +DROP TABLE IF EXISTS `grid`;
130 +/*!40101 SET @saved_cs_client = @@character_set_client */;
131 +/*!50503 SET character_set_client = utf8mb4 */;
132 +CREATE TABLE `grid` (
133 + `grid_id` int(11) NOT NULL,
134 + `lat` double NOT NULL,
135 + `lon` double NOT NULL,
136 + PRIMARY KEY (`grid_id`),
137 + UNIQUE KEY `grid_id_UNIQUE` (`grid_id`)
138 +) ENGINE=InnoDB DEFAULT CHARSET=latin1;
139 +/*!40101 SET character_set_client = @saved_cs_client */;
140 +
141 +--
142 +-- Dumping data for table `grid`
143 +--
144 +
145 +LOCK TABLES `grid` WRITE;
146 +/*!40000 ALTER TABLE `grid` DISABLE KEYS */;
147 +INSERT INTO `grid` VALUES (1,9.18594536053351,45.47304470082458),(2,9.193139700323409,45.46987577194055),(3,9.195377006955539,45.46770952221271);
148 +/*!40000 ALTER TABLE `grid` ENABLE KEYS */;
149 +UNLOCK TABLES;
150 +
151 +--
152 +-- Table structure for table `high`
153 +--
154 +
155 +DROP TABLE IF EXISTS `high`;
156 +/*!40101 SET @saved_cs_client = @@character_set_client */;
157 +/*!50503 SET character_set_client = utf8mb4 */;
158 +CREATE TABLE `high` (
159 + `school_id` int(11) NOT NULL,
160 + `1st_stu_num` int(11) NOT NULL,
161 + `2nd_stu_num` int(11) NOT NULL,
162 + `3rd_stu_num` int(11) NOT NULL,
163 + PRIMARY KEY (`school_id`)
164 +) ENGINE=InnoDB DEFAULT CHARSET=latin1;
165 +/*!40101 SET character_set_client = @saved_cs_client */;
166 +
167 +--
168 +-- Dumping data for table `high`
169 +--
170 +
171 +LOCK TABLES `high` WRITE;
172 +/*!40000 ALTER TABLE `high` DISABLE KEYS */;
173 +/*!40000 ALTER TABLE `high` ENABLE KEYS */;
174 +UNLOCK TABLES;
175 +
176 +--
177 +-- Table structure for table `middle`
178 +--
179 +
180 +DROP TABLE IF EXISTS `middle`;
181 +/*!40101 SET @saved_cs_client = @@character_set_client */;
182 +/*!50503 SET character_set_client = utf8mb4 */;
183 +CREATE TABLE `middle` (
184 + `school_id` int(11) NOT NULL,
185 + `1st_stu_num` int(11) NOT NULL,
186 + `2nd_stu_num` int(11) NOT NULL,
187 + `3rd_stu_num` int(11) NOT NULL,
188 + PRIMARY KEY (`school_id`)
189 +) ENGINE=InnoDB DEFAULT CHARSET=latin1;
190 +/*!40101 SET character_set_client = @saved_cs_client */;
191 +
192 +--
193 +-- Dumping data for table `middle`
194 +--
195 +
196 +LOCK TABLES `middle` WRITE;
197 +/*!40000 ALTER TABLE `middle` DISABLE KEYS */;
198 +/*!40000 ALTER TABLE `middle` ENABLE KEYS */;
199 +UNLOCK TABLES;
200 +
201 +--
202 +-- Table structure for table `school_info`
203 +--
204 +
205 +DROP TABLE IF EXISTS `school_info`;
206 +/*!40101 SET @saved_cs_client = @@character_set_client */;
207 +/*!50503 SET character_set_client = utf8mb4 */;
208 +CREATE TABLE `school_info` (
209 + `school_id` int(11) NOT NULL AUTO_INCREMENT,
210 + `school_name` varchar(100) NOT NULL,
211 + `school_type` int(11) NOT NULL,
212 + PRIMARY KEY (`school_id`)
213 +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
214 +/*!40101 SET character_set_client = @saved_cs_client */;
215 +
216 +--
217 +-- Dumping data for table `school_info`
218 +--
219 +
220 +LOCK TABLES `school_info` WRITE;
221 +/*!40000 ALTER TABLE `school_info` DISABLE KEYS */;
222 +INSERT INTO `school_info` VALUES (1,'Kyunghee Elementary',1);
223 +/*!40000 ALTER TABLE `school_info` ENABLE KEYS */;
224 +UNLOCK TABLES;
225 +
226 +--
227 +-- Table structure for table `users`
228 +--
229 +
230 +DROP TABLE IF EXISTS `users`;
231 +/*!40101 SET @saved_cs_client = @@character_set_client */;
232 +/*!50503 SET character_set_client = utf8mb4 */;
233 +CREATE TABLE `users` (
234 + `user_id` varchar(100) NOT NULL,
235 + `user_pw` varchar(400) NOT NULL,
236 + `user_name` varchar(100) NOT NULL,
237 + `school_id` int(11) NOT NULL,
238 + `grade` int(11) NOT NULL,
239 + PRIMARY KEY (`user_id`)
240 +) ENGINE=InnoDB DEFAULT CHARSET=latin1;
241 +/*!40101 SET character_set_client = @saved_cs_client */;
242 +
243 +--
244 +-- Dumping data for table `users`
245 +--
246 +
247 +LOCK TABLES `users` WRITE;
248 +/*!40000 ALTER TABLE `users` DISABLE KEYS */;
249 +INSERT INTO `users` VALUES ('1','2','fds',1,2),('u','pw','Hazel',1,3),('u1','2d6aa48bb2c481c28357ffdb48166424','Hazel',1,3);
250 +/*!40000 ALTER TABLE `users` ENABLE KEYS */;
251 +UNLOCK TABLES;
252 +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
253 +
254 +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
255 +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
256 +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
257 +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
258 +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
259 +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
260 +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
261 +
262 +-- Dump completed on 2020-05-27 11:05:28
1 +{
2 + "cells": [
3 + {
4 + "cell_type": "code",
5 + "execution_count": 3,
6 + "metadata": {},
7 + "outputs": [
8 + {
9 + "data": {
10 + "text/plain": [
11 + "0 37.585736\n",
12 + "1 37.571817\n",
13 + "2 37.569003\n",
14 + "3 37.573001\n",
15 + "4 37.575743\n",
16 + " ... \n",
17 + "11868 37.024922\n",
18 + "11869 37.246497\n",
19 + "11870 37.494695\n",
20 + "11871 37.498222\n",
21 + "11872 37.497612\n",
22 + "Name: 위도, Length: 11873, dtype: float64"
23 + ]
24 + },
25 + "execution_count": 3,
26 + "metadata": {},
27 + "output_type": "execute_result"
28 + }
29 + ],
30 + "source": [
31 + "import pandas as pd\n",
32 + "import numpy as np\n",
33 + "import pyspark\n",
34 + "\n",
35 + "basic_folder = ''\n",
36 + "file_name = basic_folder + 'elementary_middle_schools_location.csv'\n",
37 + "df =pd.read_csv(file_name)\n",
38 + "\n",
39 + "latitude=df['위도']\n",
40 + "longitude=df['경도']\n"
41 + ]
42 + },
43 + {
44 + "cell_type": "code",
45 + "execution_count": null,
46 + "metadata": {},
47 + "outputs": [],
48 + "source": []
49 + }
50 + ],
51 + "metadata": {
52 + "kernelspec": {
53 + "display_name": "Python 3",
54 + "language": "python",
55 + "name": "python3"
56 + },
57 + "language_info": {
58 + "codemirror_mode": {
59 + "name": "ipython",
60 + "version": 3
61 + },
62 + "file_extension": ".py",
63 + "mimetype": "text/x-python",
64 + "name": "python",
65 + "nbconvert_exporter": "python",
66 + "pygments_lexer": "ipython3",
67 + "version": "3.7.7"
68 + }
69 + },
70 + "nbformat": 4,
71 + "nbformat_minor": 4
72 +}
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
1 +,시작,끝,총 시간
2 +1교시,9:00,9:40,40
3 +2교시,9:50,10:30,40
4 +3교시,10:40,11:20,40
5 +4교시,11:30,12:10,40
6 +5교시,13:00,13:40,40
7 +6교시,13:50,14:30,40
...\ No newline at end of file ...\ No newline at end of file
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
1 +{
2 + "cells": [
3 + {
4 + "cell_type": "code",
5 + "execution_count": 27,
6 + "metadata": {},
7 + "outputs": [
8 + {
9 + "name": "stderr",
10 + "output_type": "stream",
11 + "text": [
12 + "100%|██████████| 2374/2374 [1:28:59<00:00, 2.25s/it]\n"
13 + ]
14 + },
15 + {
16 + "data": {
17 + "text/html": [
18 + "<div>\n",
19 + "<style scoped>\n",
20 + " .dataframe tbody tr th:only-of-type {\n",
21 + " vertical-align: middle;\n",
22 + " }\n",
23 + "\n",
24 + " .dataframe tbody tr th {\n",
25 + " vertical-align: top;\n",
26 + " }\n",
27 + "\n",
28 + " .dataframe thead th {\n",
29 + " text-align: right;\n",
30 + " }\n",
31 + "</style>\n",
32 + "<table border=\"1\" class=\"dataframe\">\n",
33 + " <thead>\n",
34 + " <tr style=\"text-align: right;\">\n",
35 + " <th></th>\n",
36 + " <th>school_name</th>\n",
37 + " <th>address</th>\n",
38 + " <th>latitude</th>\n",
39 + " <th>longitude</th>\n",
40 + " </tr>\n",
41 + " </thead>\n",
42 + " <tbody>\n",
43 + " <tr>\n",
44 + " <th>0</th>\n",
45 + " <td>가락고등학교</td>\n",
46 + " <td>서울특별시 송파구 송이로 42</td>\n",
47 + " <td>37.493</td>\n",
48 + " <td>127.125</td>\n",
49 + " </tr>\n",
50 + " <tr>\n",
51 + " <th>1</th>\n",
52 + " <td>가재울고등학교</td>\n",
53 + " <td>서울특별시 서대문구 수색로 100-35</td>\n",
54 + " <td>37.5773</td>\n",
55 + " <td>126.903</td>\n",
56 + " </tr>\n",
57 + " <tr>\n",
58 + " <th>2</th>\n",
59 + " <td>강동고등학교</td>\n",
60 + " <td>서울특별시 강동구 구천면로 572</td>\n",
61 + " <td>37.5501</td>\n",
62 + " <td>127.147</td>\n",
63 + " </tr>\n",
64 + " <tr>\n",
65 + " <th>3</th>\n",
66 + " <td>강서고등학교</td>\n",
67 + " <td>서울특별시 양천구 목동중앙남로 27</td>\n",
68 + " <td>37.5368</td>\n",
69 + " <td>126.867</td>\n",
70 + " </tr>\n",
71 + " <tr>\n",
72 + " <th>4</th>\n",
73 + " <td>강서공업고등학교</td>\n",
74 + " <td>서울특별시 강서구 방화대로47길 9</td>\n",
75 + " <td>37.5762</td>\n",
76 + " <td>126.815</td>\n",
77 + " </tr>\n",
78 + " <tr>\n",
79 + " <th>...</th>\n",
80 + " <td>...</td>\n",
81 + " <td>...</td>\n",
82 + " <td>...</td>\n",
83 + " <td>...</td>\n",
84 + " </tr>\n",
85 + " <tr>\n",
86 + " <th>2369</th>\n",
87 + " <td>표선고등학교</td>\n",
88 + " <td>제주특별자치도 서귀포시 표선면 표선중앙로 22-15</td>\n",
89 + " <td></td>\n",
90 + " <td></td>\n",
91 + " </tr>\n",
92 + " <tr>\n",
93 + " <th>2370</th>\n",
94 + " <td>한국뷰티고등학교</td>\n",
95 + " <td>제주특별자치도 제주시 한경면 용고로 70</td>\n",
96 + " <td></td>\n",
97 + " <td></td>\n",
98 + " </tr>\n",
99 + " <tr>\n",
100 + " <th>2371</th>\n",
101 + " <td>한림고등학교</td>\n",
102 + " <td>제주특별자치도 제주시 한림읍 월계로 74</td>\n",
103 + " <td></td>\n",
104 + " <td></td>\n",
105 + " </tr>\n",
106 + " <tr>\n",
107 + " <th>2372</th>\n",
108 + " <td>한림공업고등학교</td>\n",
109 + " <td>제주특별자치도 제주시 한림읍 한림중앙로 87</td>\n",
110 + " <td></td>\n",
111 + " <td></td>\n",
112 + " </tr>\n",
113 + " <tr>\n",
114 + " <th>2373</th>\n",
115 + " <td>함덕고등학교</td>\n",
116 + " <td>제주특별자치도 제주시 조천읍 신흥로 9</td>\n",
117 + " <td></td>\n",
118 + " <td></td>\n",
119 + " </tr>\n",
120 + " </tbody>\n",
121 + "</table>\n",
122 + "<p>2374 rows × 4 columns</p>\n",
123 + "</div>"
124 + ],
125 + "text/plain": [
126 + " school_name address latitude longitude\n",
127 + "0 가락고등학교 서울특별시 송파구 송이로 42 37.493 127.125\n",
128 + "1 가재울고등학교 서울특별시 서대문구 수색로 100-35 37.5773 126.903\n",
129 + "2 강동고등학교 서울특별시 강동구 구천면로 572 37.5501 127.147\n",
130 + "3 강서고등학교 서울특별시 양천구 목동중앙남로 27 37.5368 126.867\n",
131 + "4 강서공업고등학교 서울특별시 강서구 방화대로47길 9 37.5762 126.815\n",
132 + "... ... ... ... ...\n",
133 + "2369 표선고등학교 제주특별자치도 서귀포시 표선면 표선중앙로 22-15 \n",
134 + "2370 한국뷰티고등학교 제주특별자치도 제주시 한경면 용고로 70 \n",
135 + "2371 한림고등학교 제주특별자치도 제주시 한림읍 월계로 74 \n",
136 + "2372 한림공업고등학교 제주특별자치도 제주시 한림읍 한림중앙로 87 \n",
137 + "2373 함덕고등학교 제주특별자치도 제주시 조천읍 신흥로 9 \n",
138 + "\n",
139 + "[2374 rows x 4 columns]"
140 + ]
141 + },
142 + "execution_count": 27,
143 + "metadata": {},
144 + "output_type": "execute_result"
145 + }
146 + ],
147 + "source": [
148 + "import pandas as pd\n",
149 + "import numpy as np\n",
150 + "import pyspark\n",
151 + "from geopy.geocoders import Nominatim\n",
152 + "from geopy.extra.rate_limiter import RateLimiter\n",
153 + "from tqdm import tqdm\n",
154 + "\n",
155 + "basic_folder = ''\n",
156 + "file_name = basic_folder + 'elementary_middle_schools_location.csv'\n",
157 + "file_name2 = basic_folder + 'school_info.csv'\n",
158 + "df =pd.read_csv(file_name)\n",
159 + "df2 =pd.read_csv(file_name2)\n",
160 + "\n",
161 + "latitude=df['위도']\n",
162 + "longitude=df['경도']\n",
163 + "\n",
164 + "elementary=[]\n",
165 + "middle=[]\n",
166 + "high=[]\n",
167 + "\n",
168 + "count_row=df2.shape[0] #number of rows\n",
169 + "geolocator = Nominatim(user_agent=\"lms\", timeout=10)\n",
170 + "geocode = RateLimiter(geolocator.geocode, min_delay_seconds=1)\n",
171 + "\n",
172 + "def type_of_school():\n",
173 + " for x in range(count_row):\n",
174 + " type=df2.loc[x]['학교종류명']\n",
175 + " if(type=='고등학교'):\n",
176 + " if(df2.loc[x]['도로명주소']):\n",
177 + " row=[df2.loc[x]['학교명'],df2.loc[x]['도로명주소'],\"\",\"\"]\n",
178 + " high.append(row)\n",
179 + "\n",
180 + "\n",
181 + "type_of_school()\n",
182 + "columns=['school_name','address','latitude','longitude']\n",
183 + "high_df=pd.DataFrame(high,columns=columns)\n",
184 + "\n",
185 + "def find_lat_lon():\n",
186 + " count_rw=high_df.shape[0]\n",
187 + " for x in tqdm(range(count_rw)):\n",
188 + " addr=high_df.loc[x]['address']\n",
189 + " if geolocator.geocode(addr) is not None:\n",
190 + " location=geolocator.geocode(addr)\n",
191 + " high_df.loc[x]['latitude']=location.latitude\n",
192 + " high_df.loc[x]['longitude']=location.longitude\n",
193 + "\n",
194 + "find_lat_lon()\n",
195 + "high_df.to_csv(r'high_school.csv')\n",
196 + "high_df"
197 + ]
198 + },
199 + {
200 + "cell_type": "code",
201 + "execution_count": null,
202 + "metadata": {},
203 + "outputs": [],
204 + "source": [
205 + "import pandas as pd\n",
206 + "import numpy as np\n",
207 + "import pyspark\n",
208 + "from geopy.geocoders import Nominatim\n",
209 + "from geopy.extra.rate_limiter import RateLimiter\n",
210 + "from tqdm import tqdm\n",
211 + "\n",
212 + "basic_folder = ''\n",
213 + "file_name = basic_folder + 'high_school.csv'\n",
214 + "\n",
215 + "df =pd.read_csv(file_name)\n",
216 + "count_row=df.shape[0]\n",
217 + "print(count_row)\n",
218 + "df"
219 + ]
220 + }
221 + ],
222 + "metadata": {
223 + "kernelspec": {
224 + "display_name": "Python 3",
225 + "language": "python",
226 + "name": "python3"
227 + },
228 + "language_info": {
229 + "codemirror_mode": {
230 + "name": "ipython",
231 + "version": 3
232 + },
233 + "file_extension": ".py",
234 + "mimetype": "text/x-python",
235 + "name": "python",
236 + "nbconvert_exporter": "python",
237 + "pygments_lexer": "ipython3",
238 + "version": "3.7.7"
239 + }
240 + },
241 + "nbformat": 4,
242 + "nbformat_minor": 4
243 +}
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
1 +,시작,끝,총 시간
2 +1교시,9:00,9:50,50
3 +2교시,10:00,10:50,50
4 +3교시,11:00,11:50,50
5 +4교시,12:00,12:50,50
6 +5교시,14:00,14:50,50
7 +6교시,15:00,15:50,50
8 +7교시,16:00,16:50,50
...\ No newline at end of file ...\ No newline at end of file
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
1 +,시작,끝,총 시간
2 +1교시,9:00,9:45,45
3 +2교시,9:55,10:40,45
4 +3교시,10:50,11:35,45
5 +4교시,11:45,12:30,45
6 +5교시,13:15,14:00,45
7 +6교시,14:10,14:55,45
8 +7교시,15:05,15:50,45
...\ No newline at end of file ...\ No newline at end of file
This diff could not be displayed because it is too large.
1 +{
2 + "cells": [
3 + {
4 + "cell_type": "code",
5 + "execution_count": 4,
6 + "metadata": {},
7 + "outputs": [
8 + {
9 + "name": "stderr",
10 + "output_type": "stream",
11 + "text": [
12 + "100%|██████████| 21398/21398 [00:16<00:00, 1308.22it/s]\n"
13 + ]
14 + }
15 + ],
16 + "source": [
17 + "import pandas as pd\n",
18 + "import numpy as np\n",
19 + "import pyspark\n",
20 + "from tqdm import tqdm\n",
21 + "\n",
22 + "basic_folder = ''\n",
23 + "file_name2 = basic_folder + '2019_students_num.csv'\n",
24 + "df2 =pd.read_csv(file_name2)\n",
25 + "\n",
26 + "count_row=df2.shape[0] #number of rows\n",
27 + "elementary=[]\n",
28 + "middle=[]\n",
29 + "high=[]\n",
30 + "\n",
31 + "def type_of_school():\n",
32 + " for x in tqdm(range(count_row)):\n",
33 + " type=df2.loc[x]['학교급']\n",
34 + " if(type=='고등학교'):\n",
35 + " row=[df2.loc[x]['학교명'],df2.loc[x]['1학년_학생수_계'],df2.loc[x]['2학년_학생수_계'],df2.loc[x]['3학년_학생수_계']]\n",
36 + " high.append(row)\n",
37 + " elif(type=='중학교'):\n",
38 + " row=[df2.loc[x]['학교명'],df2.loc[x]['1학년_학생수_계'],df2.loc[x]['2학년_학생수_계'],df2.loc[x]['3학년_학생수_계']]\n",
39 + " middle.append(row)\n",
40 + " elif(type=='초등학교'):\n",
41 + " row=[df2.loc[x]['학교명'],df2.loc[x]['1학년_학생수_계'],df2.loc[x]['2학년_학생수_계'],df2.loc[x]['3학년_학생수_계'],df2.loc[x]['4학년_학생수_계'],df2.loc[x]['5학년_학생수_계'],df2.loc[x]['6학년_학생수_계']]\n",
42 + " elementary.append(row)\n",
43 + "\n",
44 + "type_of_school()\n",
45 + " \n",
46 + "columns=['school_name','1_stu_num','2_stu_num','3_stu_num']\n",
47 + "high_df=pd.DataFrame(high,columns=columns)\n",
48 + "high_df.to_csv(r'high_school_stu_num.csv')\n",
49 + "\n",
50 + "middle_df=pd.DataFrame(middle,columns=columns)\n",
51 + "middle_df.to_csv(r'middle_school_stu_num.csv')\n",
52 + "\n",
53 + "columns1=['school_name','1_stu_num','2_stu_num','3_stu_num','4_stu_num','5_stu_num','6_stu_num']\n",
54 + "ele_df=pd.DataFrame(elementary,columns=columns1)\n",
55 + "ele_df.to_csv(r'elementary_school_stu_num.csv')"
56 + ]
57 + },
58 + {
59 + "cell_type": "code",
60 + "execution_count": 10,
61 + "metadata": {},
62 + "outputs": [
63 + {
64 + "name": "stderr",
65 + "output_type": "stream",
66 + "text": [
67 + "100%|██████████| 11873/11873 [00:08<00:00, 1379.25it/s]\n"
68 + ]
69 + }
70 + ],
71 + "source": [
72 + "import pandas as pd\n",
73 + "import numpy as np\n",
74 + "import pyspark\n",
75 + "from tqdm import tqdm\n",
76 + "\n",
77 + "basic_folder = ''\n",
78 + "file_name = basic_folder + 'elementary_middle_schools_location.csv'\n",
79 + "\n",
80 + "df2 =pd.read_csv(file_name)\n",
81 + "count_row=df2.shape[0]\n",
82 + "\n",
83 + "elementary=[]\n",
84 + "middle=[]\n",
85 + "\n",
86 + "def type_of_school():\n",
87 + " for x in tqdm(range(count_row)):\n",
88 + " type=df2.loc[x]['학교급구분']\n",
89 + " if(type=='중학교'):\n",
90 + " row=[df2.loc[x]['학교명'],df2.loc[x]['소재지도로명주소'],df2.loc[x]['위도'],df2.loc[x]['경도']]\n",
91 + " middle.append(row)\n",
92 + " elif(type=='초등학교'):\n",
93 + " row=[df2.loc[x]['학교명'],df2.loc[x]['소재지도로명주소'],df2.loc[x]['위도'],df2.loc[x]['경도']]\n",
94 + " elementary.append(row)\n",
95 + "\n",
96 + "type_of_school()\n",
97 + "columns=['school_name','school_addr','latitude','longitude']\n",
98 + "middle_df=pd.DataFrame(middle,columns=columns)\n",
99 + "middle_df.to_csv(r'middle_school.csv')\n",
100 + "\n",
101 + "elem_df=pd.DataFrame(elementary,columns=columns)\n",
102 + "elem_df.to_csv(r'elementary_school.csv')"
103 + ]
104 + },
105 + {
106 + "cell_type": "code",
107 + "execution_count": 11,
108 + "metadata": {},
109 + "outputs": [
110 + {
111 + "name": "stderr",
112 + "output_type": "stream",
113 + "text": [
114 + "100%|██████████| 3240/3240 [26:47<00:00, 2.02it/s]\n"
115 + ]
116 + }
117 + ],
118 + "source": [
119 + "import pandas as pd\n",
120 + "import numpy as np\n",
121 + "import pyspark\n",
122 + "from tqdm import tqdm\n",
123 + "\n",
124 + "basic_folder = ''\n",
125 + "file_name = basic_folder + 'middle_school.csv'\n",
126 + "file_name2 = basic_folder + 'middle_school_stu_num.csv'\n",
127 + "\n",
128 + "middle_df =pd.read_csv(file_name)\n",
129 + "middle_stu_num_df=pd.read_csv(file_name2)\n",
130 + "\n",
131 + "count_row=middle_df.shape[0]\n",
132 + "count_row2=middle_stu_num_df.shape[0]\n",
133 + "\n",
134 + "middle_arr=[]\n",
135 + "\n",
136 + "def find_middle_student_num():\n",
137 + " for x in tqdm(range(count_row)):\n",
138 + " name=middle_df.loc[x]['school_name']\n",
139 + " for y in range(count_row2):\n",
140 + " if name == middle_stu_num_df.loc[y]['school_name']:\n",
141 + " row=[middle_df.loc[x]['school_name'],middle_df.loc[x]['school_addr'],middle_df.loc[x]['latitude'],middle_df.loc[x]['longitude'],\n",
142 + " middle_stu_num_df.loc[y]['1_stu_num'],middle_stu_num_df.loc[y]['2_stu_num'],middle_stu_num_df.loc[y]['3_stu_num']]\n",
143 + " middle_arr.append(row)\n",
144 + " \n",
145 + "\n",
146 + "find_middle_student_num()\n",
147 + "columns=['school_name','school_addr','latitude','longitude','1_stu_num','2_stu_num','3_stu_num']\n",
148 + "final_middle_df=pd.DataFrame(middle_arr,columns=columns)\n",
149 + "final_middle_df.to_csv(r'final_middle_school.csv')"
150 + ]
151 + },
152 + {
153 + "cell_type": "code",
154 + "execution_count": 12,
155 + "metadata": {},
156 + "outputs": [
157 + {
158 + "name": "stderr",
159 + "output_type": "stream",
160 + "text": [
161 + "100%|██████████| 6278/6278 [1:38:36<00:00, 1.06it/s]\n"
162 + ]
163 + }
164 + ],
165 + "source": [
166 + "import pandas as pd\n",
167 + "import numpy as np\n",
168 + "import pyspark\n",
169 + "from tqdm import tqdm\n",
170 + "\n",
171 + "basic_folder = ''\n",
172 + "file_name = basic_folder + 'elementary_school.csv'\n",
173 + "file_name2 = basic_folder + 'elementary_school_stu_num.csv'\n",
174 + "\n",
175 + "ele_df =pd.read_csv(file_name)\n",
176 + "ele_stu_num_df=pd.read_csv(file_name2)\n",
177 + "\n",
178 + "count_row=ele_df.shape[0]\n",
179 + "count_row2=ele_stu_num_df.shape[0]\n",
180 + "\n",
181 + "ele_arr=[]\n",
182 + "\n",
183 + "def find_ele_student_num():\n",
184 + " for x in tqdm(range(count_row)):\n",
185 + " name=ele_df.loc[x]['school_name']\n",
186 + " for y in range(count_row2):\n",
187 + " if name == ele_stu_num_df.loc[y]['school_name']:\n",
188 + " row=[ele_df.loc[x]['school_name'],ele_df.loc[x]['school_addr'],ele_df.loc[x]['latitude'],ele_df.loc[x]['longitude'],\n",
189 + " ele_stu_num_df.loc[y]['1_stu_num'],ele_stu_num_df.loc[y]['2_stu_num'],ele_stu_num_df.loc[y]['3_stu_num'],\n",
190 + " ele_stu_num_df.loc[y]['4_stu_num'],ele_stu_num_df.loc[y]['5_stu_num'],ele_stu_num_df.loc[y]['6_stu_num']]\n",
191 + " ele_arr.append(row)\n",
192 + " \n",
193 + "find_ele_student_num()\n",
194 + "columns=['school_name','school_addr','latitude','longitude','1_stu_num','2_stu_num','3_stu_num','4_stu_num','5_stu_num','6_stu_num']\n",
195 + "final_ele_df=pd.DataFrame(ele_arr,columns=columns)\n",
196 + "final_ele_df.to_csv(r'final_ele_school.csv')"
197 + ]
198 + },
199 + {
200 + "cell_type": "code",
201 + "execution_count": null,
202 + "metadata": {},
203 + "outputs": [],
204 + "source": [
205 + "import pandas as pd\n",
206 + "import numpy as np\n",
207 + "import pyspark\n",
208 + "from tqdm import tqdm\n",
209 + "\n",
210 + "basic_folder = ''\n",
211 + "file_name = basic_folder + 'high_school.csv'\n",
212 + "file_name2 = basic_folder + 'high_school_stu_num.csv'\n",
213 + "\n",
214 + "middle_df =pd.read_csv(file_name)\n",
215 + "middle_stu_num_df=pd.read_csv(file_name2)\n",
216 + "\n",
217 + "count_row=middle_df.shape[0]\n",
218 + "count_row2=middle_stu_num_df.shape[0]\n",
219 + "\n",
220 + "high_arr=[]\n",
221 + "\n",
222 + "def find_high_student_num():\n",
223 + " for x in tqdm(range(count_row)):\n",
224 + " name=middle_df.loc[x]['school_name']\n",
225 + " for y in range(count_row2):\n",
226 + " if name == middle_stu_num_df.loc[y]['school_name']:\n",
227 + " row=[middle_df.loc[x]['school_name'],middle_df.loc[x]['school_addr'],middle_df.loc[x]['latitude'],middle_df.loc[x]['longitude'],\n",
228 + " middle_stu_num_df.loc[y]['1_stu_num'],middle_stu_num_df.loc[y]['2_stu_num'],middle_stu_num_df.loc[y]['3_stu_num']]\n",
229 + " high_arr.append(row)\n",
230 + " \n",
231 + "find_high_student_num()\n",
232 + "columns=['school_name','school_addr','latitude','longitude','1_stu_num','2_stu_num','3_stu_num']\n",
233 + "final_high_df=pd.DataFrame(middle_arr,columns=columns)\n",
234 + "final_high_df.to_csv(r'final_high_school.csv')"
235 + ]
236 + }
237 + ],
238 + "metadata": {
239 + "kernelspec": {
240 + "display_name": "Python 3",
241 + "language": "python",
242 + "name": "python3"
243 + },
244 + "language_info": {
245 + "codemirror_mode": {
246 + "name": "ipython",
247 + "version": 3
248 + },
249 + "file_extension": ".py",
250 + "mimetype": "text/x-python",
251 + "name": "python",
252 + "nbconvert_exporter": "python",
253 + "pygments_lexer": "ipython3",
254 + "version": "3.7.7"
255 + }
256 + },
257 + "nbformat": 4,
258 + "nbformat_minor": 4
259 +}
1 +# Default ignored files
2 +/workspace.xml
1 +lms_web
...\ No newline at end of file ...\ No newline at end of file
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<project version="4">
3 + <component name="JavaScriptLibraryMappings">
4 + <includedPredefinedLibrary name="Node.js Core" />
5 + </component>
6 +</project>
...\ No newline at end of file ...\ No newline at end of file
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<module type="WEB_MODULE" version="4">
3 + <component name="NewModuleRootManager">
4 + <content url="file://$MODULE_DIR$/../lms_web" />
5 + <orderEntry type="inheritedJdk" />
6 + <orderEntry type="sourceFolder" forTests="false" />
7 + </component>
8 +</module>
...\ No newline at end of file ...\ No newline at end of file
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<project version="4">
3 + <component name="JavaScriptSettings">
4 + <option name="languageLevel" value="ES6" />
5 + </component>
6 +</project>
...\ No newline at end of file ...\ No newline at end of file
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<project version="4">
3 + <component name="ProjectModuleManager">
4 + <modules>
5 + <module fileurl="file://$PROJECT_DIR$/../lms_web/.idea/lms_web.iml" filepath="$PROJECT_DIR$/../lms_web/.idea/lms_web.iml" />
6 + </modules>
7 + </component>
8 +</project>
...\ No newline at end of file ...\ No newline at end of file
1 +<component name="ProjectRunConfigurationManager">
2 + <configuration default="false" name="bin/www" type="NodeJSConfigurationType" path-to-js-file="$PROJECT_DIR$/../lms_web/bin/www" working-dir="$PROJECT_DIR$/../lms_web">
3 + <envs>
4 + <env name="DEBUG" value="untitled:*" />
5 + </envs>
6 + <EXTENSION ID="com.jetbrains.nodejs.run.NodeJSStartBrowserRunConfigurationExtension">
7 + <browser url="http://localhost:3000/" />
8 + </EXTENSION>
9 + <method v="2" />
10 + </configuration>
11 +</component>
...\ No newline at end of file ...\ No newline at end of file
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<project version="4">
3 + <component name="VcsDirectoryMappings">
4 + <mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
5 + <mapping directory="$PROJECT_DIR$/.." vcs="Git" />
6 + </component>
7 +</project>
...\ No newline at end of file ...\ No newline at end of file
1 +// module
2 +var createError = require("http-errors");
3 +var express = require("express");
4 +var path = require("path");
5 +var session = require("express-session");
6 +var cookieParser = require("cookie-parser");
7 +var logger = require("morgan");
8 +var favicon = require("serve-favicon");
9 +var bodyParser = require("body-parser");
10 +var mysql = require("mysql");
11 +var request = require("request");
12 +const SequelizeAuto = require("sequelize-auto");
13 +var async = require("async");
14 +
15 +// routing
16 +var index = require("./routes/index");
17 +var lms = require("./routes/lms");
18 +var content = require("./routes/contents");
19 +
20 +var app = express();
21 +
22 +// view engine setup
23 +app.set("views", path.join(__dirname, "views"));
24 +app.set("view engine", "ejs");
25 +
26 +
27 +app.use(logger("dev"));
28 +app.use(bodyParser.json());
29 +app.use(express.urlencoded({extended: false}));
30 +app.use(cookieParser());
31 +app.use(
32 + session({
33 + key: "sid", // 세션키
34 + secret: "secret", // 비밀키
35 + cookie: {
36 + maxAge: 1000 * 60 * 60 // 쿠키 유효기간 1시간
37 + }
38 + })
39 +);
40 +
41 +app.use(express.static(path.join(__dirname, "public")));
42 +
43 +app.use("/", index);
44 +app.use("/lms", lms);
45 +app.use("/content", content);
46 +
47 +connection = mysql.createConnection({
48 + host: "localhost",
49 + user: "root",
50 + password: "root",
51 + port: 3306,
52 + database: "lms"
53 +});
54 +
55 +// catch 404 and forward to error handler
56 +app.use(function(req, res, next) {
57 + next(createError(404));
58 +});
59 +
60 +// error handler
61 +app.use(function(err, req, res, next) {
62 + // set locals, only providing error in development
63 + res.locals.message = err.message;
64 + res.locals.error = req.app.get("env") === "development" ? err : {};
65 +
66 + // render the error page
67 + res.status(err.status || 500);
68 + res.render("error");
69 +});
70 +
71 +
72 +console.log("app");
73 +var server = app.listen(3000);
74 +module.exports = app;
1 +#!/usr/bin/env node
2 +
3 +/**
4 + * Module dependencies.
5 + */
6 +
7 +var app = require('../app');
8 +var debug = require('debug')('lms_web:server');
9 +var http = require('http');
10 +
11 +/**
12 + * Get port from environment and store in Express.
13 + */
14 +
15 +var port = normalizePort(process.env.PORT || '3000');
16 +app.set('port', port);
17 +
18 +/**
19 + * Create HTTP server.
20 + */
21 +
22 +var server = http.createServer(app);
23 +
24 +/**
25 + * Listen on provided port, on all network interfaces.
26 + */
27 +
28 +server.listen(port);
29 +server.on('error', onError);
30 +server.on('listening', onListening);
31 +
32 +/**
33 + * Normalize a port into a number, string, or false.
34 + */
35 +
36 +function normalizePort(val) {
37 + var port = parseInt(val, 10);
38 +
39 + if (isNaN(port)) {
40 + // named pipe
41 + return val;
42 + }
43 +
44 + if (port >= 0) {
45 + // port number
46 + return port;
47 + }
48 +
49 + return false;
50 +}
51 +
52 +/**
53 + * Event listener for HTTP server "error" event.
54 + */
55 +
56 +function onError(error) {
57 + if (error.syscall !== 'listen') {
58 + throw error;
59 + }
60 +
61 + var bind = typeof port === 'string'
62 + ? 'Pipe ' + port
63 + : 'Port ' + port;
64 +
65 + // handle specific listen errors with friendly messages
66 + switch (error.code) {
67 + case 'EACCES':
68 + console.error(bind + ' requires elevated privileges');
69 + process.exit(1);
70 + break;
71 + case 'EADDRINUSE':
72 + console.error(bind + ' is already in use');
73 + process.exit(1);
74 + break;
75 + default:
76 + throw error;
77 + }
78 +}
79 +
80 +/**
81 + * Event listener for HTTP server "listening" event.
82 + */
83 +
84 +function onListening() {
85 + var addr = server.address();
86 + var bind = typeof addr === 'string'
87 + ? 'pipe ' + addr
88 + : 'port ' + addr.port;
89 + debug('Listening on ' + bind);
90 +}
This diff is collapsed. Click to expand it.
1 +{
2 + "name": "untitled",
3 + "version": "0.0.0",
4 + "private": true,
5 + "scripts": {
6 + "start": "node ./bin/www"
7 + },
8 + "dependencies": {
9 + "async": "^3.2.0",
10 + "aws-sdk": "^2.680.0",
11 + "cookie-parser": "~1.4.4",
12 + "debug": "~2.6.9",
13 + "ejs": "~2.6.1",
14 + "express": "~4.16.1",
15 + "express-session": "^1.17.1",
16 + "http-errors": "~1.6.3",
17 + "morgan": "~1.9.1",
18 + "mysql": "^2.18.1",
19 + "request": "^2.88.2",
20 + "sequelize-auto": "^0.4.29",
21 + "serve-favicon": "^2.5.0"
22 + }
23 +}
This diff is collapsed. Click to expand it.
1 +/**
2 + * Owl Carousel v2.2.1
3 + * Copyright 2013-2017 David Deutsch
4 + * Licensed under ()
5 + */
6 +/*
7 + * Owl Carousel - Core
8 + */
9 +.owl-carousel
10 +{
11 + display: none;
12 + width: 100%;
13 + height: 100%;
14 + -webkit-tap-highlight-color: transparent;
15 + /* position relative and z-index fix webkit rendering fonts issue */
16 + position: relative;
17 + z-index: 1;
18 +}
19 +.owl-carousel .owl-stage
20 +{
21 + position: relative;
22 + -ms-touch-action: pan-Y;
23 + width: 100%;
24 + height: 100%;
25 + -moz-backface-visibility: hidden;
26 + /* fix firefox animation glitch */
27 +}
28 +.owl-carousel .owl-stage:after
29 +{
30 + content: ".";
31 + display: block;
32 + clear: both;
33 + visibility: hidden;
34 + line-height: 0;
35 + height: 0;
36 +}
37 +.owl-carousel .owl-stage-outer
38 +{
39 + position: relative;
40 + overflow: hidden;
41 + width: 100%;
42 + height: 100%;
43 + /* fix for flashing background */
44 + -webkit-transform: translate3d(0px, 0px, 0px);
45 +}
46 +.owl-carousel .owl-wrapper,
47 +.owl-carousel .owl-item
48 +{
49 + -webkit-backface-visibility: hidden;
50 + -moz-backface-visibility: hidden;
51 + -ms-backface-visibility: hidden;
52 + -webkit-transform: translate3d(0, 0, 0);
53 + -moz-transform: translate3d(0, 0, 0);
54 + -ms-transform: translate3d(0, 0, 0);
55 +}
56 +.owl-carousel .owl-item
57 +{
58 + position: relative;
59 + min-height: 1px;
60 + width: 100%;
61 + height: 100%;
62 + float: left;
63 + -webkit-backface-visibility: hidden;
64 + -webkit-tap-highlight-color: transparent;
65 + -webkit-touch-callout: none;
66 +}
67 +.owl-carousel .owl-item img
68 +{
69 + display: block;
70 + width: 100%;
71 +}
72 +.owl-carousel .owl-nav.disabled,
73 +.owl-carousel .owl-dots.disabled
74 +{
75 + display: none;
76 +}
77 +.owl-carousel .owl-nav .owl-prev,
78 +.owl-carousel .owl-nav .owl-next,
79 +.owl-carousel .owl-dot
80 +{
81 + cursor: pointer;
82 + cursor: hand;
83 + -webkit-user-select: none;
84 + -khtml-user-select: none;
85 + -moz-user-select: none;
86 + -ms-user-select: none;
87 + user-select: none;
88 +}
89 +.owl-carousel.owl-loaded
90 +{
91 + display: block;
92 +}
93 +.owl-carousel.owl-loading
94 +{
95 + opacity: 0;
96 + display: block;
97 +}
98 +.owl-carousel.owl-hidden
99 +{
100 + opacity: 0;
101 +}
102 +.owl-carousel.owl-refresh .owl-item
103 +{
104 + visibility: hidden;
105 +}
106 +.owl-carousel.owl-drag .owl-item
107 +{
108 + -webkit-user-select: none;
109 + -moz-user-select: none;
110 + -ms-user-select: none;
111 + user-select: none;
112 +}
113 +.owl-carousel.owl-grab
114 +{
115 + cursor: move;
116 + cursor: grab;
117 +}
118 +.owl-carousel.owl-rtl
119 +{
120 + direction: rtl;
121 +}
122 +.owl-carousel.owl-rtl .owl-item
123 +{
124 + float: right;
125 +}
126 +
127 +/* No Js */
128 +.no-js .owl-carousel
129 +{
130 + display: block;
131 +}
132 +
133 +/*
134 + * Owl Carousel - Animate Plugin
135 + */
136 +.owl-carousel .animated
137 +{
138 + animation-duration: 1000ms;
139 + animation-fill-mode: both;
140 +}
141 +
142 +.owl-carousel .owl-animated-in
143 +{
144 + z-index: 0;
145 +}
146 +
147 +.owl-carousel .owl-animated-out
148 +{
149 + z-index: 1;
150 +}
151 +
152 +.owl-carousel .fadeOut
153 +{
154 + animation-name: fadeOut;
155 +}
156 +
157 +@keyframes fadeOut
158 +{
159 + 0%
160 + {
161 + opacity: 1;
162 + }
163 + 100%
164 + {
165 + opacity: 0;
166 + }
167 +}
168 +
169 +/*
170 + * Owl Carousel - Auto Height Plugin
171 + */
172 +.owl-height
173 +{
174 + transition: height 500ms ease-in-out;
175 +}
176 +
177 +/*
178 + * Owl Carousel - Lazy Load Plugin
179 + */
180 +.owl-carousel .owl-item .owl-lazy
181 +{
182 + opacity: 0;
183 + transition: opacity 400ms ease;
184 +}
185 +
186 +.owl-carousel .owl-item img.owl-lazy
187 +{
188 + transform-style: preserve-3d;
189 +}
190 +
191 +/*
192 + * Owl Carousel - Video Plugin
193 + */
194 +.owl-carousel .owl-video-wrapper
195 +{
196 + position: relative;
197 + height: 100%;
198 + background: #000;
199 +}
200 +
201 +.owl-carousel .owl-video-play-icon
202 +{
203 + position: absolute;
204 + height: 80px;
205 + width: 80px;
206 + left: 50%;
207 + top: 50%;
208 + margin-left: -40px;
209 + margin-top: -40px;
210 + background: url("owl.video.play.png") no-repeat;
211 + cursor: pointer;
212 + z-index: 1;
213 + -webkit-backface-visibility: hidden;
214 + transition: transform 100ms ease;
215 +}
216 +
217 +.owl-carousel .owl-video-play-icon:hover
218 +{
219 + -ms-transform: scale(1.3, 1.3);
220 + transform: scale(1.3, 1.3);
221 +}
222 +
223 +.owl-carousel .owl-video-playing .owl-video-tn,
224 +.owl-carousel .owl-video-playing .owl-video-play-icon
225 +{
226 + display: none;
227 +}
228 +
229 +.owl-carousel .owl-video-tn
230 +{
231 + opacity: 0;
232 + height: 100%;
233 + background-position: center center;
234 + background-repeat: no-repeat;
235 + background-size: contain;
236 + transition: opacity 400ms ease;
237 +}
238 +
239 +.owl-carousel .owl-video-frame
240 +{
241 + position: relative;
242 + z-index: 1;
243 + height: 100%;
244 + width: 100%;
245 +}
This diff is collapsed. Click to expand it.
1 +/**
2 + * Owl Carousel v2.2.1
3 + * Copyright 2013-2017 David Deutsch
4 + * Licensed under ()
5 + */
6 +/*
7 + * Default theme - Owl Carousel CSS File
8 + */
9 +.owl-theme .owl-nav
10 +{
11 + margin-top: 10px;
12 + text-align: center;
13 + -webkit-tap-highlight-color: transparent;
14 + z-index: 10000;
15 + background: red;
16 +}
17 +.owl-theme .owl-nav [class*='owl-']
18 +{
19 + color: #FFF;
20 + font-size: 14px;
21 + margin: 5px;
22 + padding: 4px 7px;
23 + background: #D6D6D6;
24 + display: inline-block;
25 + cursor: pointer;
26 + border-radius: 3px;
27 +}
28 +.owl-theme .owl-nav [class*='owl-']:hover
29 +{
30 + background: #869791;
31 + color: #FFF;
32 + text-decoration: none;
33 +}
34 +.owl-theme .owl-nav .disabled
35 +{
36 + opacity: 0.5;
37 + cursor: default;
38 +}
39 +
40 +.owl-theme .owl-nav.disabled + .owl-dots
41 +{
42 + margin-top: 10px;
43 +}
44 +
45 +.owl-theme .owl-dots
46 +{
47 + text-align: center;
48 + -webkit-tap-highlight-color: transparent;
49 +}
50 +.owl-theme .owl-dots .owl-dot
51 +{
52 + display: inline-block;
53 + zoom: 1;
54 + *display: inline;
55 +}
56 +.owl-theme .owl-dots .owl-dot span
57 +{
58 + width: 10px;
59 + height: 10px;
60 + margin: 5px 7px;
61 + background: #CFCFD0;
62 + display: block;
63 + -webkit-backface-visibility: visible;
64 + transition: opacity 200ms ease;
65 + border-radius: 30px;
66 +}
67 +.owl-theme .owl-dots .owl-dot.active span, .owl-theme .owl-dots .owl-dot:hover span
68 +{
69 + background: #A19799;
70 +}
71 +
1 +/*
2 + Colorbox Core Style:
3 + The following CSS is consistent between example themes and should not be altered.
4 +*/
5 +#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden; -webkit-transform: translate3d(0,0,0);}
6 +#cboxWrapper {max-width:none;}
7 +#cboxOverlay{position:fixed; width:100%; height:100%;}
8 +#cboxMiddleLeft, #cboxBottomLeft{clear:left;}
9 +#cboxContent{position:relative;}
10 +#cboxLoadedContent{overflow:auto; -webkit-overflow-scrolling: touch;}
11 +#cboxTitle{margin:0;}
12 +#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;}
13 +#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
14 +.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none; -ms-interpolation-mode:bicubic;}
15 +.cboxIframe{width:100%; height:100%; display:block; border:0; padding:0; margin:0;}
16 +#colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box; -moz-box-sizing:content-box; -webkit-box-sizing:content-box;}
17 +
18 +/*
19 + User Style:
20 + Change the following styles to modify the appearance of Colorbox. They are
21 + ordered & tabbed in a way that represents the nesting of the generated HTML.
22 +*/
23 +#cboxOverlay
24 +{
25 + /*background:url(images/overlay.png) repeat 0 0;*/
26 + background: rgba(0,0,0,0.95);
27 + opacity: 0.9; filter: alpha(opacity = 90);
28 +}
29 +#colorbox{outline:0;}
30 + #cboxTopLeft{width:21px; height:21px; background:url(images/controls.png) no-repeat -101px 0;}
31 + #cboxTopRight{width:21px; height:21px; background:url(images/controls.png) no-repeat -130px 0;}
32 + #cboxBottomLeft{width:21px; height:21px; background:url(images/controls.png) no-repeat -101px -29px;}
33 + #cboxBottomRight{width:21px; height:21px; background:url(images/controls.png) no-repeat -130px -29px;}
34 + #cboxMiddleLeft{width:21px; background:url(images/controls.png) left top repeat-y;}
35 + #cboxMiddleRight{width:21px; background:url(images/controls.png) right top repeat-y;}
36 + #cboxTopCenter{height:21px; background:url(images/border.png) 0 0 repeat-x;}
37 + #cboxBottomCenter{height:21px; background:url(images/border.png) 0 -29px repeat-x;}
38 + #cboxContent{background:#fff; overflow:hidden;}
39 + .cboxIframe{background:#fff;}
40 + #cboxError{padding:50px; border:1px solid #ccc;}
41 + #cboxLoadedContent{margin-bottom:28px;}
42 + #cboxTitle{position:absolute; bottom:4px; left:0; text-align:center; width:100%; color:#949494;}
43 + #cboxCurrent{position:absolute; bottom:4px; left:58px; color:#949494;}
44 + #cboxLoadingOverlay{background:url(images/loading_background.png) no-repeat center center;}
45 + #cboxLoadingGraphic{background:url(images/loading.gif) no-repeat center center;}
46 +
47 + /* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */
48 + #cboxPrevious, #cboxNext, #cboxSlideshow, #cboxClose {border:0; padding:0; margin:0; overflow:visible; width:auto; background:none; }
49 +
50 + /* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */
51 + #cboxPrevious:active, #cboxNext:active, #cboxSlideshow:active, #cboxClose:active {outline:0;}
52 +
53 + #cboxSlideshow{position:absolute; bottom:4px; right:30px; color:#0092ef;}
54 + #cboxPrevious{position:absolute; bottom:0; left:0; background:url(images/controls.png) no-repeat -75px 0; width:25px; height:25px; text-indent:-9999px;}
55 + #cboxPrevious:hover{background-position:-75px -25px;}
56 + #cboxNext{position:absolute; bottom:0; left:27px; background:url(images/controls.png) no-repeat -50px 0; width:25px; height:25px; text-indent:-9999px;}
57 + #cboxNext:hover{background-position:-50px -25px;}
58 + #cboxClose{position:absolute; bottom:0; right:0; background:url(images/controls.png) no-repeat -25px 0; width:25px; height:25px; text-indent:-9999px;}
59 + #cboxClose:hover{background-position:-25px -25px;}
60 +
61 +/*
62 + The following fixes a problem where IE7 and IE8 replace a PNG's alpha transparency with a black fill
63 + when an alpha filter (opacity change) is set on the element or ancestor element. This style is not applied to or needed in IE9.
64 + See: http://jacklmoore.com/notes/ie-transparency-problems/
65 +*/
66 +.cboxIE #cboxTopLeft,
67 +.cboxIE #cboxTopCenter,
68 +.cboxIE #cboxTopRight,
69 +.cboxIE #cboxBottomLeft,
70 +.cboxIE #cboxBottomCenter,
71 +.cboxIE #cboxBottomRight,
72 +.cboxIE #cboxMiddleLeft,
73 +.cboxIE #cboxMiddleRight {
74 + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF);
75 +}
...\ No newline at end of file ...\ No newline at end of file
This diff is collapsed. Click to expand it.
1 +/*
2 + * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
3 + *
4 + * Uses the built in easing capabilities added In jQuery 1.1
5 + * to offer multiple easing options
6 + *
7 + * TERMS OF USE - jQuery Easing
8 + *
9 + * Open source under the BSD License.
10 + *
11 + * Copyright © 2008 George McGinley Smith
12 + * All rights reserved.
13 + *
14 + * Redistribution and use in source and binary forms, with or without modification,
15 + * are permitted provided that the following conditions are met:
16 + *
17 + * Redistributions of source code must retain the above copyright notice, this list of
18 + * conditions and the following disclaimer.
19 + * Redistributions in binary form must reproduce the above copyright notice, this list
20 + * of conditions and the following disclaimer in the documentation and/or other materials
21 + * provided with the distribution.
22 + *
23 + * Neither the name of the author nor the names of contributors may be used to endorse
24 + * or promote products derived from this software without specific prior written permission.
25 + *
26 + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
27 + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
28 + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
29 + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30 + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
31 + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
32 + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
33 + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
34 + * OF THE POSSIBILITY OF SUCH DAMAGE.
35 + *
36 +*/
37 +
38 +// t: current time, b: begInnIng value, c: change In value, d: duration
39 +jQuery.easing['jswing'] = jQuery.easing['swing'];
40 +
41 +jQuery.extend( jQuery.easing,
42 +{
43 + def: 'easeOutQuad',
44 + swing: function (x, t, b, c, d) {
45 + //alert(jQuery.easing.default);
46 + return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
47 + },
48 + easeInQuad: function (x, t, b, c, d) {
49 + return c*(t/=d)*t + b;
50 + },
51 + easeOutQuad: function (x, t, b, c, d) {
52 + return -c *(t/=d)*(t-2) + b;
53 + },
54 + easeInOutQuad: function (x, t, b, c, d) {
55 + if ((t/=d/2) < 1) return c/2*t*t + b;
56 + return -c/2 * ((--t)*(t-2) - 1) + b;
57 + },
58 + easeInCubic: function (x, t, b, c, d) {
59 + return c*(t/=d)*t*t + b;
60 + },
61 + easeOutCubic: function (x, t, b, c, d) {
62 + return c*((t=t/d-1)*t*t + 1) + b;
63 + },
64 + easeInOutCubic: function (x, t, b, c, d) {
65 + if ((t/=d/2) < 1) return c/2*t*t*t + b;
66 + return c/2*((t-=2)*t*t + 2) + b;
67 + },
68 + easeInQuart: function (x, t, b, c, d) {
69 + return c*(t/=d)*t*t*t + b;
70 + },
71 + easeOutQuart: function (x, t, b, c, d) {
72 + return -c * ((t=t/d-1)*t*t*t - 1) + b;
73 + },
74 + easeInOutQuart: function (x, t, b, c, d) {
75 + if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
76 + return -c/2 * ((t-=2)*t*t*t - 2) + b;
77 + },
78 + easeInQuint: function (x, t, b, c, d) {
79 + return c*(t/=d)*t*t*t*t + b;
80 + },
81 + easeOutQuint: function (x, t, b, c, d) {
82 + return c*((t=t/d-1)*t*t*t*t + 1) + b;
83 + },
84 + easeInOutQuint: function (x, t, b, c, d) {
85 + if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
86 + return c/2*((t-=2)*t*t*t*t + 2) + b;
87 + },
88 + easeInSine: function (x, t, b, c, d) {
89 + return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
90 + },
91 + easeOutSine: function (x, t, b, c, d) {
92 + return c * Math.sin(t/d * (Math.PI/2)) + b;
93 + },
94 + easeInOutSine: function (x, t, b, c, d) {
95 + return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
96 + },
97 + easeInExpo: function (x, t, b, c, d) {
98 + return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
99 + },
100 + easeOutExpo: function (x, t, b, c, d) {
101 + return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
102 + },
103 + easeInOutExpo: function (x, t, b, c, d) {
104 + if (t==0) return b;
105 + if (t==d) return b+c;
106 + if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
107 + return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
108 + },
109 + easeInCirc: function (x, t, b, c, d) {
110 + return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
111 + },
112 + easeOutCirc: function (x, t, b, c, d) {
113 + return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
114 + },
115 + easeInOutCirc: function (x, t, b, c, d) {
116 + if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
117 + return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
118 + },
119 + easeInElastic: function (x, t, b, c, d) {
120 + var s=1.70158;var p=0;var a=c;
121 + if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
122 + if (a < Math.abs(c)) { a=c; var s=p/4; }
123 + else var s = p/(2*Math.PI) * Math.asin (c/a);
124 + return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
125 + },
126 + easeOutElastic: function (x, t, b, c, d) {
127 + var s=1.70158;var p=0;var a=c;
128 + if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
129 + if (a < Math.abs(c)) { a=c; var s=p/4; }
130 + else var s = p/(2*Math.PI) * Math.asin (c/a);
131 + return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
132 + },
133 + easeInOutElastic: function (x, t, b, c, d) {
134 + var s=1.70158;var p=0;var a=c;
135 + if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5);
136 + if (a < Math.abs(c)) { a=c; var s=p/4; }
137 + else var s = p/(2*Math.PI) * Math.asin (c/a);
138 + if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
139 + return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
140 + },
141 + easeInBack: function (x, t, b, c, d, s) {
142 + if (s == undefined) s = 1.70158;
143 + return c*(t/=d)*t*((s+1)*t - s) + b;
144 + },
145 + easeOutBack: function (x, t, b, c, d, s) {
146 + if (s == undefined) s = 1.70158;
147 + return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
148 + },
149 + easeInOutBack: function (x, t, b, c, d, s) {
150 + if (s == undefined) s = 1.70158;
151 + if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
152 + return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
153 + },
154 + easeInBounce: function (x, t, b, c, d) {
155 + return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;
156 + },
157 + easeOutBounce: function (x, t, b, c, d) {
158 + if ((t/=d) < (1/2.75)) {
159 + return c*(7.5625*t*t) + b;
160 + } else if (t < (2/2.75)) {
161 + return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
162 + } else if (t < (2.5/2.75)) {
163 + return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
164 + } else {
165 + return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
166 + }
167 + },
168 + easeInOutBounce: function (x, t, b, c, d) {
169 + if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
170 + return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
171 + }
172 +});
173 +
174 +/*
175 + *
176 + * TERMS OF USE - EASING EQUATIONS
177 + *
178 + * Open source under the BSD License.
179 + *
180 + * Copyright © 2001 Robert Penner
181 + * All rights reserved.
182 + *
183 + * Redistribution and use in source and binary forms, with or without modification,
184 + * are permitted provided that the following conditions are met:
185 + *
186 + * Redistributions of source code must retain the above copyright notice, this list of
187 + * conditions and the following disclaimer.
188 + * Redistributions in binary form must reproduce the above copyright notice, this list
189 + * of conditions and the following disclaimer in the documentation and/or other materials
190 + * provided with the distribution.
191 + *
192 + * Neither the name of the author nor the names of contributors may be used to endorse
193 + * or promote products derived from this software without specific prior written permission.
194 + *
195 + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
196 + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
197 + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
198 + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
199 + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
200 + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
201 + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
202 + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
203 + * OF THE POSSIBILITY OF SUCH DAMAGE.
204 + *
205 + */
...\ No newline at end of file ...\ No newline at end of file
1 +I hope you love Font Awesome. If you've found it useful, please do me a favor and check out my latest project,
2 +Fort Awesome (https://fortawesome.com). It makes it easy to put the perfect icons on your website. Choose from our awesome,
3 +comprehensive icon sets or copy and paste your own.
4 +
5 +Please. Check it out.
6 +
7 +-Dave Gandy
This diff could not be displayed because it is too large.
1 +// Animated Icons
2 +// --------------------------
3 +
4 +.@{fa-css-prefix}-spin {
5 + -webkit-animation: fa-spin 2s infinite linear;
6 + animation: fa-spin 2s infinite linear;
7 +}
8 +
9 +.@{fa-css-prefix}-pulse {
10 + -webkit-animation: fa-spin 1s infinite steps(8);
11 + animation: fa-spin 1s infinite steps(8);
12 +}
13 +
14 +@-webkit-keyframes fa-spin {
15 + 0% {
16 + -webkit-transform: rotate(0deg);
17 + transform: rotate(0deg);
18 + }
19 + 100% {
20 + -webkit-transform: rotate(359deg);
21 + transform: rotate(359deg);
22 + }
23 +}
24 +
25 +@keyframes fa-spin {
26 + 0% {
27 + -webkit-transform: rotate(0deg);
28 + transform: rotate(0deg);
29 + }
30 + 100% {
31 + -webkit-transform: rotate(359deg);
32 + transform: rotate(359deg);
33 + }
34 +}
1 +// Bordered & Pulled
2 +// -------------------------
3 +
4 +.@{fa-css-prefix}-border {
5 + padding: .2em .25em .15em;
6 + border: solid .08em @fa-border-color;
7 + border-radius: .1em;
8 +}
9 +
10 +.@{fa-css-prefix}-pull-left { float: left; }
11 +.@{fa-css-prefix}-pull-right { float: right; }
12 +
13 +.@{fa-css-prefix} {
14 + &.@{fa-css-prefix}-pull-left { margin-right: .3em; }
15 + &.@{fa-css-prefix}-pull-right { margin-left: .3em; }
16 +}
17 +
18 +/* Deprecated as of 4.4.0 */
19 +.pull-right { float: right; }
20 +.pull-left { float: left; }
21 +
22 +.@{fa-css-prefix} {
23 + &.pull-left { margin-right: .3em; }
24 + &.pull-right { margin-left: .3em; }
25 +}
1 +// Base Class Definition
2 +// -------------------------
3 +
4 +.@{fa-css-prefix} {
5 + display: inline-block;
6 + font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration
7 + font-size: inherit; // can't have font-size inherit on line above, so need to override
8 + text-rendering: auto; // optimizelegibility throws things off #1094
9 + -webkit-font-smoothing: antialiased;
10 + -moz-osx-font-smoothing: grayscale;
11 +
12 +}
1 +// Fixed Width Icons
2 +// -------------------------
3 +.@{fa-css-prefix}-fw {
4 + width: (18em / 14);
5 + text-align: center;
6 +}
1 +/*!
2 + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
3 + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
4 + */
5 +
6 +@import "variables.less";
7 +@import "mixins.less";
8 +@import "path.less";
9 +@import "core.less";
10 +@import "larger.less";
11 +@import "fixed-width.less";
12 +@import "list.less";
13 +@import "bordered-pulled.less";
14 +@import "animated.less";
15 +@import "rotated-flipped.less";
16 +@import "stacked.less";
17 +@import "icons.less";
18 +@import "screen-reader.less";
This diff is collapsed. Click to expand it.
1 +// Icon Sizes
2 +// -------------------------
3 +
4 +/* makes the font 33% larger relative to the icon container */
5 +.@{fa-css-prefix}-lg {
6 + font-size: (4em / 3);
7 + line-height: (3em / 4);
8 + vertical-align: -15%;
9 +}
10 +.@{fa-css-prefix}-2x { font-size: 2em; }
11 +.@{fa-css-prefix}-3x { font-size: 3em; }
12 +.@{fa-css-prefix}-4x { font-size: 4em; }
13 +.@{fa-css-prefix}-5x { font-size: 5em; }
1 +// List Icons
2 +// -------------------------
3 +
4 +.@{fa-css-prefix}-ul {
5 + padding-left: 0;
6 + margin-left: @fa-li-width;
7 + list-style-type: none;
8 + > li { position: relative; }
9 +}
10 +.@{fa-css-prefix}-li {
11 + position: absolute;
12 + left: -@fa-li-width;
13 + width: @fa-li-width;
14 + top: (2em / 14);
15 + text-align: center;
16 + &.@{fa-css-prefix}-lg {
17 + left: (-@fa-li-width + (4em / 14));
18 + }
19 +}
1 +// Mixins
2 +// --------------------------
3 +
4 +.fa-icon() {
5 + display: inline-block;
6 + font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration
7 + font-size: inherit; // can't have font-size inherit on line above, so need to override
8 + text-rendering: auto; // optimizelegibility throws things off #1094
9 + -webkit-font-smoothing: antialiased;
10 + -moz-osx-font-smoothing: grayscale;
11 +
12 +}
13 +
14 +.fa-icon-rotate(@degrees, @rotation) {
15 + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation})";
16 + -webkit-transform: rotate(@degrees);
17 + -ms-transform: rotate(@degrees);
18 + transform: rotate(@degrees);
19 +}
20 +
21 +.fa-icon-flip(@horiz, @vert, @rotation) {
22 + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation}, mirror=1)";
23 + -webkit-transform: scale(@horiz, @vert);
24 + -ms-transform: scale(@horiz, @vert);
25 + transform: scale(@horiz, @vert);
26 +}
27 +
28 +
29 +// Only display content to screen readers. A la Bootstrap 4.
30 +//
31 +// See: http://a11yproject.com/posts/how-to-hide-content/
32 +
33 +.sr-only() {
34 + position: absolute;
35 + width: 1px;
36 + height: 1px;
37 + padding: 0;
38 + margin: -1px;
39 + overflow: hidden;
40 + clip: rect(0,0,0,0);
41 + border: 0;
42 +}
43 +
44 +// Use in conjunction with .sr-only to only display content when it's focused.
45 +//
46 +// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
47 +//
48 +// Credit: HTML5 Boilerplate
49 +
50 +.sr-only-focusable() {
51 + &:active,
52 + &:focus {
53 + position: static;
54 + width: auto;
55 + height: auto;
56 + margin: 0;
57 + overflow: visible;
58 + clip: auto;
59 + }
60 +}
1 +/* FONT PATH
2 + * -------------------------- */
3 +
4 +@font-face {
5 + font-family: 'FontAwesome';
6 + src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}');
7 + src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'),
8 + url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'),
9 + url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'),
10 + url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'),
11 + url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg');
12 + // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts
13 + font-weight: normal;
14 + font-style: normal;
15 +}
1 +// Rotated & Flipped Icons
2 +// -------------------------
3 +
4 +.@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); }
5 +.@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); }
6 +.@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); }
7 +
8 +.@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); }
9 +.@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); }
10 +
11 +// Hook for IE8-9
12 +// -------------------------
13 +
14 +:root .@{fa-css-prefix}-rotate-90,
15 +:root .@{fa-css-prefix}-rotate-180,
16 +:root .@{fa-css-prefix}-rotate-270,
17 +:root .@{fa-css-prefix}-flip-horizontal,
18 +:root .@{fa-css-prefix}-flip-vertical {
19 + filter: none;
20 +}
1 +// Screen Readers
2 +// -------------------------
3 +
4 +.sr-only { .sr-only(); }
5 +.sr-only-focusable { .sr-only-focusable(); }
1 +// Stacked Icons
2 +// -------------------------
3 +
4 +.@{fa-css-prefix}-stack {
5 + position: relative;
6 + display: inline-block;
7 + width: 2em;
8 + height: 2em;
9 + line-height: 2em;
10 + vertical-align: middle;
11 +}
12 +.@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x {
13 + position: absolute;
14 + left: 0;
15 + width: 100%;
16 + text-align: center;
17 +}
18 +.@{fa-css-prefix}-stack-1x { line-height: inherit; }
19 +.@{fa-css-prefix}-stack-2x { font-size: 2em; }
20 +.@{fa-css-prefix}-inverse { color: @fa-inverse; }
1 +// Spinning Icons
2 +// --------------------------
3 +
4 +.#{$fa-css-prefix}-spin {
5 + -webkit-animation: fa-spin 2s infinite linear;
6 + animation: fa-spin 2s infinite linear;
7 +}
8 +
9 +.#{$fa-css-prefix}-pulse {
10 + -webkit-animation: fa-spin 1s infinite steps(8);
11 + animation: fa-spin 1s infinite steps(8);
12 +}
13 +
14 +@-webkit-keyframes fa-spin {
15 + 0% {
16 + -webkit-transform: rotate(0deg);
17 + transform: rotate(0deg);
18 + }
19 + 100% {
20 + -webkit-transform: rotate(359deg);
21 + transform: rotate(359deg);
22 + }
23 +}
24 +
25 +@keyframes fa-spin {
26 + 0% {
27 + -webkit-transform: rotate(0deg);
28 + transform: rotate(0deg);
29 + }
30 + 100% {
31 + -webkit-transform: rotate(359deg);
32 + transform: rotate(359deg);
33 + }
34 +}
1 +// Bordered & Pulled
2 +// -------------------------
3 +
4 +.#{$fa-css-prefix}-border {
5 + padding: .2em .25em .15em;
6 + border: solid .08em $fa-border-color;
7 + border-radius: .1em;
8 +}
9 +
10 +.#{$fa-css-prefix}-pull-left { float: left; }
11 +.#{$fa-css-prefix}-pull-right { float: right; }
12 +
13 +.#{$fa-css-prefix} {
14 + &.#{$fa-css-prefix}-pull-left { margin-right: .3em; }
15 + &.#{$fa-css-prefix}-pull-right { margin-left: .3em; }
16 +}
17 +
18 +/* Deprecated as of 4.4.0 */
19 +.pull-right { float: right; }
20 +.pull-left { float: left; }
21 +
22 +.#{$fa-css-prefix} {
23 + &.pull-left { margin-right: .3em; }
24 + &.pull-right { margin-left: .3em; }
25 +}
1 +// Base Class Definition
2 +// -------------------------
3 +
4 +.#{$fa-css-prefix} {
5 + display: inline-block;
6 + font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration
7 + font-size: inherit; // can't have font-size inherit on line above, so need to override
8 + text-rendering: auto; // optimizelegibility throws things off #1094
9 + -webkit-font-smoothing: antialiased;
10 + -moz-osx-font-smoothing: grayscale;
11 +
12 +}
1 +// Fixed Width Icons
2 +// -------------------------
3 +.#{$fa-css-prefix}-fw {
4 + width: (18em / 14);
5 + text-align: center;
6 +}
This diff is collapsed. Click to expand it.
1 +// Icon Sizes
2 +// -------------------------
3 +
4 +/* makes the font 33% larger relative to the icon container */
5 +.#{$fa-css-prefix}-lg {
6 + font-size: (4em / 3);
7 + line-height: (3em / 4);
8 + vertical-align: -15%;
9 +}
10 +.#{$fa-css-prefix}-2x { font-size: 2em; }
11 +.#{$fa-css-prefix}-3x { font-size: 3em; }
12 +.#{$fa-css-prefix}-4x { font-size: 4em; }
13 +.#{$fa-css-prefix}-5x { font-size: 5em; }
1 +// List Icons
2 +// -------------------------
3 +
4 +.#{$fa-css-prefix}-ul {
5 + padding-left: 0;
6 + margin-left: $fa-li-width;
7 + list-style-type: none;
8 + > li { position: relative; }
9 +}
10 +.#{$fa-css-prefix}-li {
11 + position: absolute;
12 + left: -$fa-li-width;
13 + width: $fa-li-width;
14 + top: (2em / 14);
15 + text-align: center;
16 + &.#{$fa-css-prefix}-lg {
17 + left: -$fa-li-width + (4em / 14);
18 + }
19 +}
1 +// Mixins
2 +// --------------------------
3 +
4 +@mixin fa-icon() {
5 + display: inline-block;
6 + font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration
7 + font-size: inherit; // can't have font-size inherit on line above, so need to override
8 + text-rendering: auto; // optimizelegibility throws things off #1094
9 + -webkit-font-smoothing: antialiased;
10 + -moz-osx-font-smoothing: grayscale;
11 +
12 +}
13 +
14 +@mixin fa-icon-rotate($degrees, $rotation) {
15 + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})";
16 + -webkit-transform: rotate($degrees);
17 + -ms-transform: rotate($degrees);
18 + transform: rotate($degrees);
19 +}
20 +
21 +@mixin fa-icon-flip($horiz, $vert, $rotation) {
22 + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)";
23 + -webkit-transform: scale($horiz, $vert);
24 + -ms-transform: scale($horiz, $vert);
25 + transform: scale($horiz, $vert);
26 +}
27 +
28 +
29 +// Only display content to screen readers. A la Bootstrap 4.
30 +//
31 +// See: http://a11yproject.com/posts/how-to-hide-content/
32 +
33 +@mixin sr-only {
34 + position: absolute;
35 + width: 1px;
36 + height: 1px;
37 + padding: 0;
38 + margin: -1px;
39 + overflow: hidden;
40 + clip: rect(0,0,0,0);
41 + border: 0;
42 +}
43 +
44 +// Use in conjunction with .sr-only to only display content when it's focused.
45 +//
46 +// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
47 +//
48 +// Credit: HTML5 Boilerplate
49 +
50 +@mixin sr-only-focusable {
51 + &:active,
52 + &:focus {
53 + position: static;
54 + width: auto;
55 + height: auto;
56 + margin: 0;
57 + overflow: visible;
58 + clip: auto;
59 + }
60 +}
1 +/* FONT PATH
2 + * -------------------------- */
3 +
4 +@font-face {
5 + font-family: 'FontAwesome';
6 + src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}');
7 + src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'),
8 + url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'),
9 + url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'),
10 + url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'),
11 + url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg');
12 +// src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts
13 + font-weight: normal;
14 + font-style: normal;
15 +}
1 +// Rotated & Flipped Icons
2 +// -------------------------
3 +
4 +.#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); }
5 +.#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); }
6 +.#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); }
7 +
8 +.#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); }
9 +.#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); }
10 +
11 +// Hook for IE8-9
12 +// -------------------------
13 +
14 +:root .#{$fa-css-prefix}-rotate-90,
15 +:root .#{$fa-css-prefix}-rotate-180,
16 +:root .#{$fa-css-prefix}-rotate-270,
17 +:root .#{$fa-css-prefix}-flip-horizontal,
18 +:root .#{$fa-css-prefix}-flip-vertical {
19 + filter: none;
20 +}
1 +// Screen Readers
2 +// -------------------------
3 +
4 +.sr-only { @include sr-only(); }
5 +.sr-only-focusable { @include sr-only-focusable(); }
1 +// Stacked Icons
2 +// -------------------------
3 +
4 +.#{$fa-css-prefix}-stack {
5 + position: relative;
6 + display: inline-block;
7 + width: 2em;
8 + height: 2em;
9 + line-height: 2em;
10 + vertical-align: middle;
11 +}
12 +.#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x {
13 + position: absolute;
14 + left: 0;
15 + width: 100%;
16 + text-align: center;
17 +}
18 +.#{$fa-css-prefix}-stack-1x { line-height: inherit; }
19 +.#{$fa-css-prefix}-stack-2x { font-size: 2em; }
20 +.#{$fa-css-prefix}-inverse { color: $fa-inverse; }
1 +/*!
2 + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
3 + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
4 + */
5 +
6 +@import "variables";
7 +@import "mixins";
8 +@import "path";
9 +@import "core";
10 +@import "larger";
11 +@import "fixed-width";
12 +@import "list";
13 +@import "bordered-pulled";
14 +@import "animated";
15 +@import "rotated-flipped";
16 +@import "stacked";
17 +@import "icons";
18 +@import "screen-reader";
1 +/*!
2 + * VERSION: 1.8.1
3 + * DATE: 2017-01-17
4 + * UPDATES AND DOCS AT: http://greensock.com
5 + *
6 + * @license Copyright (c) 2008-2017, GreenSock. All rights reserved.
7 + * This work is subject to the terms at http://greensock.com/standard-license or for
8 + * Club GreenSock members, the software agreement that was issued with your membership.
9 + *
10 + * @author: Jack Doyle, jack@greensock.com
11 + **/
12 +var _gsScope="undefined"!=typeof module&&module.exports&&"undefined"!=typeof global?global:this||window;(_gsScope._gsQueue||(_gsScope._gsQueue=[])).push(function(){"use strict";var a=document.documentElement,b=_gsScope,c=function(c,d){var e="x"===d?"Width":"Height",f="scroll"+e,g="client"+e,h=document.body;return c===b||c===a||c===h?Math.max(a[f],h[f])-(b["inner"+e]||a[g]||h[g]):c[f]-c["offset"+e]},d=function(a){return"string"==typeof a&&(a=TweenLite.selector(a)),a.length&&a!==b&&a[0]&&a[0].style&&!a.nodeType&&(a=a[0]),a===b||a.nodeType&&a.style?a:null},e=function(c,d){var e="scroll"+("x"===d?"Left":"Top");return c===b&&(null!=c.pageXOffset?e="page"+d.toUpperCase()+"Offset":c=null!=a[e]?a:document.body),function(){return c[e]}},f=function(c,f){var g=d(c).getBoundingClientRect(),h=!f||f===b||f===document.body,i=(h?a:f).getBoundingClientRect(),j={x:g.left-i.left,y:g.top-i.top};return!h&&f&&(j.x+=e(f,"x")(),j.y+=e(f,"y")()),j},g=function(a,b,d){var e=typeof a;return"number"===e||"string"===e&&"="===a.charAt(1)?a:"max"===a?c(b,d):Math.min(c(b,d),f(a,b)[d])},h=_gsScope._gsDefine.plugin({propName:"scrollTo",API:2,global:!0,version:"1.8.1",init:function(a,c,d){return this._wdw=a===b,this._target=a,this._tween=d,"object"!=typeof c?(c={y:c},"string"==typeof c.y&&"max"!==c.y&&"="!==c.y.charAt(1)&&(c.x=c.y)):c.nodeType&&(c={y:c,x:c}),this.vars=c,this._autoKill=c.autoKill!==!1,this.getX=e(a,"x"),this.getY=e(a,"y"),this.x=this.xPrev=this.getX(),this.y=this.yPrev=this.getY(),null!=c.x?(this._addTween(this,"x",this.x,g(c.x,a,"x")-(c.offsetX||0),"scrollTo_x",!0),this._overwriteProps.push("scrollTo_x")):this.skipX=!0,null!=c.y?(this._addTween(this,"y",this.y,g(c.y,a,"y")-(c.offsetY||0),"scrollTo_y",!0),this._overwriteProps.push("scrollTo_y")):this.skipY=!0,!0},set:function(a){this._super.setRatio.call(this,a);var d=this._wdw||!this.skipX?this.getX():this.xPrev,e=this._wdw||!this.skipY?this.getY():this.yPrev,f=e-this.yPrev,g=d-this.xPrev,i=h.autoKillThreshold;this.x<0&&(this.x=0),this.y<0&&(this.y=0),this._autoKill&&(!this.skipX&&(g>i||-i>g)&&d<c(this._target,"x")&&(this.skipX=!0),!this.skipY&&(f>i||-i>f)&&e<c(this._target,"y")&&(this.skipY=!0),this.skipX&&this.skipY&&(this._tween.kill(),this.vars.onAutoKill&&this.vars.onAutoKill.apply(this.vars.onAutoKillScope||this._tween,this.vars.onAutoKillParams||[]))),this._wdw?b.scrollTo(this.skipX?d:this.x,this.skipY?e:this.y):(this.skipY||(this._target.scrollTop=this.y),this.skipX||(this._target.scrollLeft=this.x)),this.xPrev=this.x,this.yPrev=this.y}}),i=h.prototype;h.max=c,h.getOffset=f,h.autoKillThreshold=7,i._kill=function(a){return a.scrollTo_x&&(this.skipX=!0),a.scrollTo_y&&(this.skipY=!0),this._super._kill.call(this,a)}}),_gsScope._gsDefine&&_gsScope._gsQueue.pop()(),function(a){"use strict";var b=function(){return(_gsScope.GreenSockGlobals||_gsScope)[a]};"function"==typeof define&&define.amd?define(["TweenLite"],b):"undefined"!=typeof module&&module.exports&&(require("../TweenLite.js"),module.exports=b())}("ScrollToPlugin");
...\ No newline at end of file ...\ No newline at end of file
This diff is collapsed. Click to expand it.
This diff could not be displayed because it is too large.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff could not be displayed because it is too large.
No preview for this file type
No preview for this file type
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff could not be displayed because it is too large.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.